gobby 0.2.6__tar.gz → 0.2.8__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.
- {gobby-0.2.6 → gobby-0.2.8}/PKG-INFO +6 -1
- {gobby-0.2.6 → gobby-0.2.8}/README.md +4 -0
- {gobby-0.2.6 → gobby-0.2.8}/pyproject.toml +3 -1
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/__init__.py +1 -1
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/adapters/__init__.py +2 -1
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/adapters/claude_code.py +96 -35
- gobby-0.2.8/src/gobby/adapters/codex_impl/__init__.py +28 -0
- gobby-0.2.8/src/gobby/adapters/codex_impl/adapter.py +722 -0
- gobby-0.2.8/src/gobby/adapters/codex_impl/client.py +679 -0
- gobby-0.2.8/src/gobby/adapters/codex_impl/protocol.py +20 -0
- gobby-0.2.8/src/gobby/adapters/codex_impl/types.py +68 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/adapters/gemini.py +140 -38
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/definitions.py +11 -1
- gobby-0.2.8/src/gobby/agents/isolation.py +525 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/registry.py +11 -0
- gobby-0.2.8/src/gobby/agents/sandbox.py +261 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/session.py +1 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/spawn.py +42 -287
- gobby-0.2.8/src/gobby/agents/spawn_executor.py +415 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/spawners/__init__.py +24 -0
- gobby-0.2.8/src/gobby/agents/spawners/command_builder.py +189 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/spawners/embedded.py +21 -2
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/spawners/headless.py +21 -2
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/spawners/macos.py +26 -1
- gobby-0.2.8/src/gobby/agents/spawners/prompt_manager.py +125 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/__init__.py +0 -2
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/install.py +4 -4
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/installers/claude.py +6 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/installers/gemini.py +6 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/installers/shared.py +103 -4
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/memory.py +185 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/sessions.py +1 -1
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/utils.py +9 -2
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/clones/git.py +177 -0
- gobby-0.2.8/src/gobby/config/__init__.py +44 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/app.py +10 -94
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/extensions.py +2 -2
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/features.py +7 -130
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/skills.py +31 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/tasks.py +4 -28
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/__init__.py +0 -13
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/event_handlers.py +150 -8
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/hook_manager.py +21 -3
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/plugins.py +1 -1
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/webhooks.py +1 -1
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/install/gemini/hooks/hook_dispatcher.py +74 -15
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/resolver.py +3 -2
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/importer.py +62 -4
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/instructions.py +4 -2
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/registries.py +22 -8
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/services/recommendation.py +43 -11
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/agent_messaging.py +93 -44
- gobby-0.2.8/src/gobby/mcp_proxy/tools/agents.py +439 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/artifacts.py +43 -9
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/clones.py +0 -385
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/memory.py +2 -2
- gobby-0.2.8/src/gobby/mcp_proxy/tools/sessions/__init__.py +14 -0
- gobby-0.2.8/src/gobby/mcp_proxy/tools/sessions/_commits.py +239 -0
- gobby-0.2.8/src/gobby/mcp_proxy/tools/sessions/_crud.py +253 -0
- gobby-0.2.8/src/gobby/mcp_proxy/tools/sessions/_factory.py +63 -0
- gobby-0.2.8/src/gobby/mcp_proxy/tools/sessions/_handoff.py +503 -0
- gobby-0.2.8/src/gobby/mcp_proxy/tools/sessions/_messages.py +166 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/skills/__init__.py +14 -29
- gobby-0.2.8/src/gobby/mcp_proxy/tools/spawn_agent.py +455 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_context.py +18 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_crud.py +13 -6
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_lifecycle.py +79 -30
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_lifecycle_validation.py +1 -1
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_session.py +22 -7
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/workflows.py +84 -34
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/worktrees.py +32 -350
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/extractor.py +15 -1
- gobby-0.2.8/src/gobby/memory/ingestion/__init__.py +5 -0
- gobby-0.2.8/src/gobby/memory/ingestion/multimodal.py +221 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/manager.py +62 -283
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/search/__init__.py +10 -0
- gobby-0.2.8/src/gobby/memory/search/coordinator.py +248 -0
- gobby-0.2.8/src/gobby/memory/services/__init__.py +5 -0
- gobby-0.2.8/src/gobby/memory/services/crossref.py +142 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/prompts/loader.py +5 -2
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/runner.py +13 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/http.py +1 -4
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/routes/admin.py +14 -0
- gobby-0.2.8/src/gobby/servers/routes/mcp/endpoints/__init__.py +61 -0
- gobby-0.2.8/src/gobby/servers/routes/mcp/endpoints/discovery.py +405 -0
- gobby-0.2.8/src/gobby/servers/routes/mcp/endpoints/execution.py +568 -0
- gobby-0.2.8/src/gobby/servers/routes/mcp/endpoints/registry.py +378 -0
- gobby-0.2.8/src/gobby/servers/routes/mcp/endpoints/server.py +304 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/routes/mcp/hooks.py +51 -4
- gobby-0.2.8/src/gobby/servers/routes/mcp/tools.py +68 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/websocket.py +57 -1
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/analyzer.py +2 -2
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/lifecycle.py +1 -1
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/manager.py +9 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/processor.py +10 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/transcripts/base.py +1 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/transcripts/claude.py +15 -5
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/transcripts/gemini.py +100 -34
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/skills/parser.py +30 -2
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/database.py +9 -2
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/memories.py +32 -21
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/migrations.py +174 -368
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/sessions.py +45 -7
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/skills.py +80 -7
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_lifecycle.py +18 -3
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sync/memories.py +1 -1
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/external_validator.py +1 -1
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/validation.py +22 -20
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tools/summarizer.py +91 -10
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/project_context.py +2 -3
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/status.py +13 -0
- gobby-0.2.8/src/gobby/workflows/actions.py +396 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/artifact_actions.py +31 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/autonomous_actions.py +11 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/context_actions.py +50 -1
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/detection_helpers.py +38 -24
- gobby-0.2.8/src/gobby/workflows/enforcement/__init__.py +47 -0
- gobby-0.2.8/src/gobby/workflows/enforcement/blocking.py +281 -0
- gobby-0.2.8/src/gobby/workflows/enforcement/commit_policy.py +283 -0
- gobby-0.2.8/src/gobby/workflows/enforcement/handlers.py +269 -0
- gobby-0.2.8/src/gobby/workflows/enforcement/task_policy.py +542 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/engine.py +93 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/evaluator.py +110 -0
- gobby-0.2.8/src/gobby/workflows/git_utils.py +202 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/hooks.py +41 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/llm_actions.py +30 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/mcp_actions.py +20 -1
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/memory_actions.py +91 -0
- gobby-0.2.8/src/gobby/workflows/safe_evaluator.py +191 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/session_actions.py +44 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/state_actions.py +60 -1
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/stop_signal_actions.py +55 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/summary_actions.py +217 -51
- gobby-0.2.8/src/gobby/workflows/task_sync_actions.py +347 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/todo_actions.py +34 -1
- gobby-0.2.8/src/gobby/workflows/webhook_actions.py +185 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby.egg-info/PKG-INFO +6 -1
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby.egg-info/SOURCES.txt +35 -59
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby.egg-info/requires.txt +1 -0
- {gobby-0.2.6 → gobby-0.2.8}/tests/test_import_pathing_trap.py +3 -5
- {gobby-0.2.6 → gobby-0.2.8}/tests/test_runner.py +22 -21
- gobby-0.2.6/src/gobby/adapters/codex.py +0 -1332
- gobby-0.2.6/src/gobby/cli/tui.py +0 -34
- gobby-0.2.6/src/gobby/config/__init__.py +0 -129
- gobby-0.2.6/src/gobby/install/claude/commands/gobby/bug.md +0 -51
- gobby-0.2.6/src/gobby/install/claude/commands/gobby/chore.md +0 -51
- gobby-0.2.6/src/gobby/install/claude/commands/gobby/epic.md +0 -52
- gobby-0.2.6/src/gobby/install/claude/commands/gobby/eval.md +0 -235
- gobby-0.2.6/src/gobby/install/claude/commands/gobby/feat.md +0 -49
- gobby-0.2.6/src/gobby/install/claude/commands/gobby/nit.md +0 -52
- gobby-0.2.6/src/gobby/install/claude/commands/gobby/ref.md +0 -52
- gobby-0.2.6/src/gobby/mcp_proxy/tools/agents.py +0 -1103
- gobby-0.2.6/src/gobby/mcp_proxy/tools/session_messages.py +0 -1055
- gobby-0.2.6/src/gobby/prompts/defaults/expansion/system.md +0 -119
- gobby-0.2.6/src/gobby/prompts/defaults/expansion/user.md +0 -48
- gobby-0.2.6/src/gobby/prompts/defaults/external_validation/agent.md +0 -72
- gobby-0.2.6/src/gobby/prompts/defaults/external_validation/external.md +0 -63
- gobby-0.2.6/src/gobby/prompts/defaults/external_validation/spawn.md +0 -83
- gobby-0.2.6/src/gobby/prompts/defaults/external_validation/system.md +0 -6
- gobby-0.2.6/src/gobby/prompts/defaults/features/import_mcp.md +0 -22
- gobby-0.2.6/src/gobby/prompts/defaults/features/import_mcp_github.md +0 -17
- gobby-0.2.6/src/gobby/prompts/defaults/features/import_mcp_search.md +0 -16
- gobby-0.2.6/src/gobby/prompts/defaults/features/recommend_tools.md +0 -32
- gobby-0.2.6/src/gobby/prompts/defaults/features/recommend_tools_hybrid.md +0 -35
- gobby-0.2.6/src/gobby/prompts/defaults/features/recommend_tools_llm.md +0 -30
- gobby-0.2.6/src/gobby/prompts/defaults/features/server_description.md +0 -20
- gobby-0.2.6/src/gobby/prompts/defaults/features/server_description_system.md +0 -6
- gobby-0.2.6/src/gobby/prompts/defaults/features/task_description.md +0 -31
- gobby-0.2.6/src/gobby/prompts/defaults/features/task_description_system.md +0 -6
- gobby-0.2.6/src/gobby/prompts/defaults/features/tool_summary.md +0 -17
- gobby-0.2.6/src/gobby/prompts/defaults/features/tool_summary_system.md +0 -6
- gobby-0.2.6/src/gobby/prompts/defaults/handoff/compact.md +0 -63
- gobby-0.2.6/src/gobby/prompts/defaults/handoff/session_end.md +0 -57
- gobby-0.2.6/src/gobby/prompts/defaults/memory/extract.md +0 -61
- gobby-0.2.6/src/gobby/prompts/defaults/research/step.md +0 -58
- gobby-0.2.6/src/gobby/prompts/defaults/validation/criteria.md +0 -47
- gobby-0.2.6/src/gobby/prompts/defaults/validation/validate.md +0 -38
- gobby-0.2.6/src/gobby/servers/routes/mcp/tools.py +0 -1526
- gobby-0.2.6/src/gobby/storage/migrations_legacy.py +0 -1359
- gobby-0.2.6/src/gobby/tui/__init__.py +0 -5
- gobby-0.2.6/src/gobby/tui/api_client.py +0 -278
- gobby-0.2.6/src/gobby/tui/app.py +0 -329
- gobby-0.2.6/src/gobby/tui/screens/__init__.py +0 -25
- gobby-0.2.6/src/gobby/tui/screens/agents.py +0 -333
- gobby-0.2.6/src/gobby/tui/screens/chat.py +0 -450
- gobby-0.2.6/src/gobby/tui/screens/dashboard.py +0 -377
- gobby-0.2.6/src/gobby/tui/screens/memory.py +0 -305
- gobby-0.2.6/src/gobby/tui/screens/metrics.py +0 -231
- gobby-0.2.6/src/gobby/tui/screens/orchestrator.py +0 -903
- gobby-0.2.6/src/gobby/tui/screens/sessions.py +0 -412
- gobby-0.2.6/src/gobby/tui/screens/tasks.py +0 -440
- gobby-0.2.6/src/gobby/tui/screens/workflows.py +0 -289
- gobby-0.2.6/src/gobby/tui/screens/worktrees.py +0 -174
- gobby-0.2.6/src/gobby/tui/widgets/__init__.py +0 -21
- gobby-0.2.6/src/gobby/tui/widgets/chat.py +0 -210
- gobby-0.2.6/src/gobby/tui/widgets/conductor.py +0 -104
- gobby-0.2.6/src/gobby/tui/widgets/menu.py +0 -132
- gobby-0.2.6/src/gobby/tui/widgets/message_panel.py +0 -160
- gobby-0.2.6/src/gobby/tui/widgets/review_gate.py +0 -224
- gobby-0.2.6/src/gobby/tui/widgets/task_tree.py +0 -99
- gobby-0.2.6/src/gobby/tui/widgets/token_budget.py +0 -166
- gobby-0.2.6/src/gobby/tui/ws_client.py +0 -258
- gobby-0.2.6/src/gobby/workflows/actions.py +0 -1392
- gobby-0.2.6/src/gobby/workflows/git_utils.py +0 -96
- gobby-0.2.6/src/gobby/workflows/task_enforcement_actions.py +0 -1343
- {gobby-0.2.6 → gobby-0.2.8}/LICENSE.md +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/setup.cfg +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/adapters/base.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/codex_session.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/constants.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/context.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/gemini_session.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/runner.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/spawners/base.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/spawners/cross_platform.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/spawners/linux.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/spawners/windows.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/tty_config.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/autonomous/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/autonomous/progress_tracker.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/autonomous/stop_registry.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/autonomous/stuck_detector.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/__main__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/agents.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/artifacts.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/clones.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/conductor.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/daemon.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/extensions.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/github.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/init.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/installers/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/installers/antigravity.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/installers/codex.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/installers/git_hooks.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/linear.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/mcp.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/mcp_proxy.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/merge.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/projects.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/skills.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/tasks/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/tasks/_utils.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/tasks/ai.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/tasks/commits.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/tasks/crud.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/tasks/deps.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/tasks/labels.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/tasks/main.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/tasks/search.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/workflows.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/worktrees.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/clones/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/conductor/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/conductor/alerts.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/conductor/loop.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/conductor/monitors/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/conductor/monitors/agents.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/conductor/monitors/tasks.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/conductor/pricing.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/conductor/token_tracker.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/llm_providers.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/logging.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/mcp.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/persistence.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/search.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/servers.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/sessions.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/artifact_capture.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/broadcaster.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/events.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/git.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/health_monitor.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/hook_types.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/session_coordinator.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/skill_manager.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/verification_runner.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/install/claude/hooks/HOOK_SCHEMAS.md +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/install/claude/hooks/hook_dispatcher.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/install/claude/hooks/validate_settings.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/install/claude/hooks-template.json +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/install/codex/hooks/hook_dispatcher.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/install/gemini/hooks-template.json +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/install/shared/plugins/code_guardian.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/install/shared/plugins/example_notify.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/integrations/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/integrations/github.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/integrations/linear.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/base.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/claude.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/claude_executor.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/codex.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/codex_executor.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/executor.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/factory.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/gemini.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/litellm.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/litellm_executor.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/service.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/actions.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/daemon_control.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/lazy.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/manager.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/metrics.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/models.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/schema_hash.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/semantic_search.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/server.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/services/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/services/fallback.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/services/server_mgmt.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/services/system.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/services/tool_filter.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/services/tool_proxy.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/stdio.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/hub.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/internal.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/merge.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/metrics.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/orchestration/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/orchestration/cleanup.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/orchestration/monitor.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/orchestration/orchestrate.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/orchestration/review.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/orchestration/utils.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/orchestration/wait.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/task_dependencies.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/task_github.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/task_linear.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/task_orchestration.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/task_readiness.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/task_sync.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/task_validation.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_expansion.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_factory.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_helpers.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_resolution.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_search.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/transports/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/transports/base.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/transports/factory.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/transports/http.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/transports/stdio.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/transports/websocket.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/backends/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/backends/mem0.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/backends/memu.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/backends/null.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/backends/openmemory.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/backends/sqlite.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/context.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/protocol.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/search/text.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/viz.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/prompts/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/prompts/models.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/py.typed +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/search/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/search/backends/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/search/backends/embedding.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/search/embeddings.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/search/models.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/search/protocol.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/search/tfidf.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/search/unified.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/models.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/routes/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/routes/dependencies.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/routes/mcp/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/routes/mcp/plugins.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/routes/mcp/webhooks.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/routes/sessions.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/summary.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/transcripts/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/transcripts/codex.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/skills/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/skills/loader.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/skills/manager.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/skills/search.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/skills/sync.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/skills/updater.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/skills/validator.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/agents.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/artifact_classifier.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/artifacts.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/clones.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/compaction.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/inter_session_messages.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/mcp.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/merge_resolutions.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/projects.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/session_messages.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/session_tasks.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/task_dependencies.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_aggregates.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_crud.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_id.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_manager.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_models.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_ordering.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_path_cache.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_queries.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_search.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/workflow_audit.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/worktrees.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sync/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sync/github.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sync/linear.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sync/tasks.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/build_verification.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/commits.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/enhanced_validator.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/escalation.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/issue_extraction.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/tree_builder.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/validation_history.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/validation_models.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tools/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/daemon_client.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/git.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/id.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/json_helpers.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/logging.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/machine_id.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/metrics.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/project_init.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/validation.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/version.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/approval_flow.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/audit_helpers.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/definitions.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/lifecycle_evaluator.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/loader.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/premature_stop.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/state_manager.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/task_actions.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/templates.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/webhook.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/webhook_executor.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/worktrees/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/worktrees/git.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/worktrees/merge/__init__.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/worktrees/merge/conflict_parser.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby/worktrees/merge/resolver.py +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby.egg-info/dependency_links.txt +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby.egg-info/entry_points.txt +0 -0
- {gobby-0.2.6 → gobby-0.2.8}/src/gobby.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gobby
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.8
|
|
4
4
|
Summary: A local-first daemon to unify your AI coding tools. Session tracking and handoffs across Claude Code, Gemini CLI, and Codex. An MCP proxy that discovers tools without flooding context. Task management with dependencies, validation, and TDD expansion. Agent spawning and worktree orchestration. Persistent memory, extensible workflows, and hooks.
|
|
5
5
|
Author-email: Josh Wilhelmi <josh@gobby.ai>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -39,6 +39,7 @@ Requires-Dist: gitingest>=0.3.1
|
|
|
39
39
|
Requires-Dist: scikit-learn>=1.0.0
|
|
40
40
|
Requires-Dist: textual>=7.3.0
|
|
41
41
|
Requires-Dist: memu-py>=1.0.0
|
|
42
|
+
Requires-Dist: python-multipart>=0.0.22
|
|
42
43
|
Provides-Extra: mem0
|
|
43
44
|
Requires-Dist: mem0ai; extra == "mem0"
|
|
44
45
|
Dynamic: license-file
|
|
@@ -378,6 +379,10 @@ See [ROADMAP.md](ROADMAP.md) for the full plan, but highlights:
|
|
|
378
379
|
|
|
379
380
|
**Vision:** Always local first, but Pro cloud features to keep the lights on: Fleet management (manage sessions across multiple machines), Plugin ecosystem, Team workflows, Enterprise hardening
|
|
380
381
|
|
|
382
|
+
## Changelog
|
|
383
|
+
|
|
384
|
+
See [CHANGELOG.md](CHANGELOG.md) for release history and detailed changes.
|
|
385
|
+
|
|
381
386
|
## Development
|
|
382
387
|
|
|
383
388
|
```bash
|
|
@@ -333,6 +333,10 @@ See [ROADMAP.md](ROADMAP.md) for the full plan, but highlights:
|
|
|
333
333
|
|
|
334
334
|
**Vision:** Always local first, but Pro cloud features to keep the lights on: Fleet management (manage sessions across multiple machines), Plugin ecosystem, Team workflows, Enterprise hardening
|
|
335
335
|
|
|
336
|
+
## Changelog
|
|
337
|
+
|
|
338
|
+
See [CHANGELOG.md](CHANGELOG.md) for release history and detailed changes.
|
|
339
|
+
|
|
336
340
|
## Development
|
|
337
341
|
|
|
338
342
|
```bash
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "gobby"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.8"
|
|
4
4
|
description = "A local-first daemon to unify your AI coding tools. Session tracking and handoffs across Claude Code, Gemini CLI, and Codex. An MCP proxy that discovers tools without flooding context. Task management with dependencies, validation, and TDD expansion. Agent spawning and worktree orchestration. Persistent memory, extensible workflows, and hooks."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "MIT"
|
|
@@ -42,6 +42,8 @@ dependencies = [
|
|
|
42
42
|
"textual>=7.3.0",
|
|
43
43
|
# mem0ai moved to optional [mem0] extra due to CVE-2026-0994 (protobuf<=6.33.4 vulnerable)
|
|
44
44
|
"memu-py>=1.0.0",
|
|
45
|
+
# python-multipart 0.0.21 has CVE-2026-24486 - pin to fixed version
|
|
46
|
+
"python-multipart>=0.0.22",
|
|
45
47
|
]
|
|
46
48
|
|
|
47
49
|
[project.optional-dependencies]
|
|
@@ -17,7 +17,8 @@ Adapters:
|
|
|
17
17
|
|
|
18
18
|
from gobby.adapters.base import BaseAdapter
|
|
19
19
|
from gobby.adapters.claude_code import ClaudeCodeAdapter
|
|
20
|
-
from gobby.adapters.
|
|
20
|
+
from gobby.adapters.codex_impl.adapter import CodexAdapter, CodexNotifyAdapter
|
|
21
|
+
from gobby.adapters.codex_impl.client import CodexAppServerClient
|
|
21
22
|
from gobby.adapters.gemini import GeminiAdapter
|
|
22
23
|
|
|
23
24
|
__all__ = [
|
|
@@ -104,6 +104,10 @@ class ClaudeCodeAdapter(BaseAdapter):
|
|
|
104
104
|
is_failure = hook_type == "post-tool-use-failure"
|
|
105
105
|
metadata = {"is_failure": is_failure} if is_failure else {}
|
|
106
106
|
|
|
107
|
+
# Normalize event data for CLI-agnostic processing
|
|
108
|
+
# This allows downstream code to use consistent field names
|
|
109
|
+
normalized_data = self._normalize_event_data(input_data)
|
|
110
|
+
|
|
107
111
|
return HookEvent(
|
|
108
112
|
event_type=event_type,
|
|
109
113
|
session_id=session_id,
|
|
@@ -111,10 +115,46 @@ class ClaudeCodeAdapter(BaseAdapter):
|
|
|
111
115
|
timestamp=datetime.now(UTC),
|
|
112
116
|
machine_id=input_data.get("machine_id"),
|
|
113
117
|
cwd=input_data.get("cwd"),
|
|
114
|
-
data=
|
|
118
|
+
data=normalized_data,
|
|
115
119
|
metadata=metadata,
|
|
116
120
|
)
|
|
117
121
|
|
|
122
|
+
def _normalize_event_data(self, input_data: dict[str, Any]) -> dict[str, Any]:
|
|
123
|
+
"""Normalize Claude Code event data for CLI-agnostic processing.
|
|
124
|
+
|
|
125
|
+
This method enriches the input_data with normalized fields so downstream
|
|
126
|
+
code doesn't need to handle Claude-specific formats.
|
|
127
|
+
|
|
128
|
+
Normalizations performed:
|
|
129
|
+
1. tool_input.server_name/tool_name → mcp_server/mcp_tool (for MCP calls)
|
|
130
|
+
2. tool_result → tool_output
|
|
131
|
+
|
|
132
|
+
Args:
|
|
133
|
+
input_data: Raw input data from Claude Code
|
|
134
|
+
|
|
135
|
+
Returns:
|
|
136
|
+
Enriched data dict with normalized fields added
|
|
137
|
+
"""
|
|
138
|
+
# Start with a copy to avoid mutating original
|
|
139
|
+
data = dict(input_data)
|
|
140
|
+
|
|
141
|
+
# Get tool info
|
|
142
|
+
tool_name = data.get("tool_name", "")
|
|
143
|
+
tool_input = data.get("tool_input", {}) or {}
|
|
144
|
+
|
|
145
|
+
# 1. Extract MCP info from nested tool_input for call_tool calls
|
|
146
|
+
if tool_name in ("call_tool", "mcp__gobby__call_tool"):
|
|
147
|
+
if "mcp_server" not in data:
|
|
148
|
+
data["mcp_server"] = tool_input.get("server_name")
|
|
149
|
+
if "mcp_tool" not in data:
|
|
150
|
+
data["mcp_tool"] = tool_input.get("tool_name")
|
|
151
|
+
|
|
152
|
+
# 2. Normalize tool_result → tool_output
|
|
153
|
+
if "tool_result" in data and "tool_output" not in data:
|
|
154
|
+
data["tool_output"] = data["tool_result"]
|
|
155
|
+
|
|
156
|
+
return data
|
|
157
|
+
|
|
118
158
|
# Map Claude Code hook types to hookEventName for hookSpecificOutput
|
|
119
159
|
HOOK_EVENT_NAME_MAP: dict[str, str] = {
|
|
120
160
|
"session-start": "SessionStart",
|
|
@@ -193,44 +233,65 @@ class ClaudeCodeAdapter(BaseAdapter):
|
|
|
193
233
|
# Add session identifiers from metadata
|
|
194
234
|
# Note: "session_id" in metadata is Gobby's internal platform session ID
|
|
195
235
|
# "external_id" in metadata is the CLI's session UUID
|
|
236
|
+
# "session_ref" is the short #N format for easier reference
|
|
237
|
+
# Token optimization: Only inject full metadata on first hook per session
|
|
196
238
|
if response.metadata:
|
|
197
239
|
gobby_session_id = response.metadata.get("session_id")
|
|
240
|
+
session_ref = response.metadata.get("session_ref")
|
|
198
241
|
external_id = response.metadata.get("external_id")
|
|
242
|
+
is_first_hook = response.metadata.get("_first_hook_for_session", False)
|
|
243
|
+
|
|
199
244
|
if gobby_session_id:
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
"
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
"
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
245
|
+
if is_first_hook:
|
|
246
|
+
# First hook: inject full metadata (~60-100 tokens)
|
|
247
|
+
context_lines = []
|
|
248
|
+
if session_ref:
|
|
249
|
+
context_lines.append(
|
|
250
|
+
f"Gobby Session ID: {session_ref} (or {gobby_session_id})"
|
|
251
|
+
)
|
|
252
|
+
else:
|
|
253
|
+
context_lines.append(f"Gobby Session ID: {gobby_session_id}")
|
|
254
|
+
if external_id:
|
|
255
|
+
context_lines.append(
|
|
256
|
+
f"CLI-Specific Session ID (external_id): {external_id}"
|
|
257
|
+
)
|
|
258
|
+
if response.metadata.get("parent_session_id"):
|
|
259
|
+
context_lines.append(
|
|
260
|
+
f"parent_session_id: {response.metadata['parent_session_id']}"
|
|
261
|
+
)
|
|
262
|
+
if response.metadata.get("machine_id"):
|
|
263
|
+
context_lines.append(f"machine_id: {response.metadata['machine_id']}")
|
|
264
|
+
if response.metadata.get("project_id"):
|
|
265
|
+
context_lines.append(f"project_id: {response.metadata['project_id']}")
|
|
266
|
+
# Add terminal context (non-null values only)
|
|
267
|
+
if response.metadata.get("terminal_term_program"):
|
|
268
|
+
context_lines.append(
|
|
269
|
+
f"terminal: {response.metadata['terminal_term_program']}"
|
|
270
|
+
)
|
|
271
|
+
if response.metadata.get("terminal_tty"):
|
|
272
|
+
context_lines.append(f"tty: {response.metadata['terminal_tty']}")
|
|
273
|
+
if response.metadata.get("terminal_parent_pid"):
|
|
274
|
+
context_lines.append(
|
|
275
|
+
f"parent_pid: {response.metadata['terminal_parent_pid']}"
|
|
276
|
+
)
|
|
277
|
+
# Add terminal-specific session IDs (only one will be present)
|
|
278
|
+
for key in [
|
|
279
|
+
"terminal_iterm_session_id",
|
|
280
|
+
"terminal_term_session_id",
|
|
281
|
+
"terminal_kitty_window_id",
|
|
282
|
+
"terminal_tmux_pane",
|
|
283
|
+
"terminal_vscode_terminal_id",
|
|
284
|
+
"terminal_alacritty_socket",
|
|
285
|
+
]:
|
|
286
|
+
if response.metadata.get(key):
|
|
287
|
+
# Use friendlier names in output
|
|
288
|
+
friendly_name = key.replace("terminal_", "").replace("_", " ")
|
|
289
|
+
context_lines.append(f"{friendly_name}: {response.metadata[key]}")
|
|
290
|
+
additional_context_parts.append("\n".join(context_lines))
|
|
291
|
+
else:
|
|
292
|
+
# Subsequent hooks: inject minimal session ref only (~8 tokens)
|
|
293
|
+
if session_ref:
|
|
294
|
+
additional_context_parts.append(f"Gobby Session ID: {session_ref}")
|
|
234
295
|
|
|
235
296
|
# Build hookSpecificOutput if we have any context to inject
|
|
236
297
|
# Only include hookSpecificOutput for hook types that Claude Code's schema accepts
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Codex adapter implementation package.
|
|
3
|
+
|
|
4
|
+
This package contains the decomposed implementation of the Codex adapter,
|
|
5
|
+
extracted from the monolithic codex.py using the Strangler Fig pattern.
|
|
6
|
+
|
|
7
|
+
Modules:
|
|
8
|
+
- types.py: Type definitions and data classes
|
|
9
|
+
- protocol.py: Protocol/interface definitions
|
|
10
|
+
- client.py: CodexAppServerClient implementation
|
|
11
|
+
- adapter.py: CodexAdapter and CodexNotifyAdapter implementations
|
|
12
|
+
|
|
13
|
+
Importer analysis (from codex.py):
|
|
14
|
+
- src/gobby/servers/http.py: imports CodexAdapter
|
|
15
|
+
- src/gobby/servers/routes/mcp/hooks.py: imports CodexNotifyAdapter
|
|
16
|
+
- src/gobby/adapters/__init__.py: imports CodexAdapter, CodexAppServerClient, CodexNotifyAdapter
|
|
17
|
+
- tests/adapters/test_codex.py: imports various items for testing
|
|
18
|
+
|
|
19
|
+
Migration strategy:
|
|
20
|
+
1. Extract types/dataclasses to types.py
|
|
21
|
+
2. Extract protocol definitions to protocol.py
|
|
22
|
+
3. Extract CodexAppServerClient to client.py
|
|
23
|
+
4. Extract adapters to adapter.py
|
|
24
|
+
5. Update codex.py to re-export from submodules
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
# Phase 3: Placeholders - exports will be added as code is migrated
|
|
28
|
+
__all__: list[str] = []
|