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.
Files changed (459) hide show
  1. {gobby-0.2.6 → gobby-0.2.8}/PKG-INFO +6 -1
  2. {gobby-0.2.6 → gobby-0.2.8}/README.md +4 -0
  3. {gobby-0.2.6 → gobby-0.2.8}/pyproject.toml +3 -1
  4. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/__init__.py +1 -1
  5. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/adapters/__init__.py +2 -1
  6. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/adapters/claude_code.py +96 -35
  7. gobby-0.2.8/src/gobby/adapters/codex_impl/__init__.py +28 -0
  8. gobby-0.2.8/src/gobby/adapters/codex_impl/adapter.py +722 -0
  9. gobby-0.2.8/src/gobby/adapters/codex_impl/client.py +679 -0
  10. gobby-0.2.8/src/gobby/adapters/codex_impl/protocol.py +20 -0
  11. gobby-0.2.8/src/gobby/adapters/codex_impl/types.py +68 -0
  12. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/adapters/gemini.py +140 -38
  13. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/definitions.py +11 -1
  14. gobby-0.2.8/src/gobby/agents/isolation.py +525 -0
  15. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/registry.py +11 -0
  16. gobby-0.2.8/src/gobby/agents/sandbox.py +261 -0
  17. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/session.py +1 -0
  18. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/spawn.py +42 -287
  19. gobby-0.2.8/src/gobby/agents/spawn_executor.py +415 -0
  20. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/spawners/__init__.py +24 -0
  21. gobby-0.2.8/src/gobby/agents/spawners/command_builder.py +189 -0
  22. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/spawners/embedded.py +21 -2
  23. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/spawners/headless.py +21 -2
  24. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/spawners/macos.py +26 -1
  25. gobby-0.2.8/src/gobby/agents/spawners/prompt_manager.py +125 -0
  26. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/__init__.py +0 -2
  27. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/install.py +4 -4
  28. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/installers/claude.py +6 -0
  29. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/installers/gemini.py +6 -0
  30. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/installers/shared.py +103 -4
  31. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/memory.py +185 -0
  32. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/sessions.py +1 -1
  33. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/utils.py +9 -2
  34. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/clones/git.py +177 -0
  35. gobby-0.2.8/src/gobby/config/__init__.py +44 -0
  36. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/app.py +10 -94
  37. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/extensions.py +2 -2
  38. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/features.py +7 -130
  39. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/skills.py +31 -0
  40. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/tasks.py +4 -28
  41. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/__init__.py +0 -13
  42. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/event_handlers.py +150 -8
  43. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/hook_manager.py +21 -3
  44. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/plugins.py +1 -1
  45. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/webhooks.py +1 -1
  46. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/install/gemini/hooks/hook_dispatcher.py +74 -15
  47. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/resolver.py +3 -2
  48. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/importer.py +62 -4
  49. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/instructions.py +4 -2
  50. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/registries.py +22 -8
  51. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/services/recommendation.py +43 -11
  52. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/agent_messaging.py +93 -44
  53. gobby-0.2.8/src/gobby/mcp_proxy/tools/agents.py +439 -0
  54. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/artifacts.py +43 -9
  55. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/clones.py +0 -385
  56. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/memory.py +2 -2
  57. gobby-0.2.8/src/gobby/mcp_proxy/tools/sessions/__init__.py +14 -0
  58. gobby-0.2.8/src/gobby/mcp_proxy/tools/sessions/_commits.py +239 -0
  59. gobby-0.2.8/src/gobby/mcp_proxy/tools/sessions/_crud.py +253 -0
  60. gobby-0.2.8/src/gobby/mcp_proxy/tools/sessions/_factory.py +63 -0
  61. gobby-0.2.8/src/gobby/mcp_proxy/tools/sessions/_handoff.py +503 -0
  62. gobby-0.2.8/src/gobby/mcp_proxy/tools/sessions/_messages.py +166 -0
  63. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/skills/__init__.py +14 -29
  64. gobby-0.2.8/src/gobby/mcp_proxy/tools/spawn_agent.py +455 -0
  65. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_context.py +18 -0
  66. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_crud.py +13 -6
  67. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_lifecycle.py +79 -30
  68. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_lifecycle_validation.py +1 -1
  69. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_session.py +22 -7
  70. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/workflows.py +84 -34
  71. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/worktrees.py +32 -350
  72. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/extractor.py +15 -1
  73. gobby-0.2.8/src/gobby/memory/ingestion/__init__.py +5 -0
  74. gobby-0.2.8/src/gobby/memory/ingestion/multimodal.py +221 -0
  75. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/manager.py +62 -283
  76. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/search/__init__.py +10 -0
  77. gobby-0.2.8/src/gobby/memory/search/coordinator.py +248 -0
  78. gobby-0.2.8/src/gobby/memory/services/__init__.py +5 -0
  79. gobby-0.2.8/src/gobby/memory/services/crossref.py +142 -0
  80. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/prompts/loader.py +5 -2
  81. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/runner.py +13 -0
  82. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/http.py +1 -4
  83. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/routes/admin.py +14 -0
  84. gobby-0.2.8/src/gobby/servers/routes/mcp/endpoints/__init__.py +61 -0
  85. gobby-0.2.8/src/gobby/servers/routes/mcp/endpoints/discovery.py +405 -0
  86. gobby-0.2.8/src/gobby/servers/routes/mcp/endpoints/execution.py +568 -0
  87. gobby-0.2.8/src/gobby/servers/routes/mcp/endpoints/registry.py +378 -0
  88. gobby-0.2.8/src/gobby/servers/routes/mcp/endpoints/server.py +304 -0
  89. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/routes/mcp/hooks.py +51 -4
  90. gobby-0.2.8/src/gobby/servers/routes/mcp/tools.py +68 -0
  91. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/websocket.py +57 -1
  92. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/analyzer.py +2 -2
  93. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/lifecycle.py +1 -1
  94. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/manager.py +9 -0
  95. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/processor.py +10 -0
  96. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/transcripts/base.py +1 -0
  97. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/transcripts/claude.py +15 -5
  98. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/transcripts/gemini.py +100 -34
  99. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/skills/parser.py +30 -2
  100. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/database.py +9 -2
  101. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/memories.py +32 -21
  102. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/migrations.py +174 -368
  103. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/sessions.py +45 -7
  104. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/skills.py +80 -7
  105. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_lifecycle.py +18 -3
  106. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sync/memories.py +1 -1
  107. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/external_validator.py +1 -1
  108. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/validation.py +22 -20
  109. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tools/summarizer.py +91 -10
  110. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/project_context.py +2 -3
  111. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/status.py +13 -0
  112. gobby-0.2.8/src/gobby/workflows/actions.py +396 -0
  113. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/artifact_actions.py +31 -0
  114. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/autonomous_actions.py +11 -0
  115. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/context_actions.py +50 -1
  116. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/detection_helpers.py +38 -24
  117. gobby-0.2.8/src/gobby/workflows/enforcement/__init__.py +47 -0
  118. gobby-0.2.8/src/gobby/workflows/enforcement/blocking.py +281 -0
  119. gobby-0.2.8/src/gobby/workflows/enforcement/commit_policy.py +283 -0
  120. gobby-0.2.8/src/gobby/workflows/enforcement/handlers.py +269 -0
  121. gobby-0.2.8/src/gobby/workflows/enforcement/task_policy.py +542 -0
  122. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/engine.py +93 -0
  123. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/evaluator.py +110 -0
  124. gobby-0.2.8/src/gobby/workflows/git_utils.py +202 -0
  125. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/hooks.py +41 -0
  126. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/llm_actions.py +30 -0
  127. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/mcp_actions.py +20 -1
  128. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/memory_actions.py +91 -0
  129. gobby-0.2.8/src/gobby/workflows/safe_evaluator.py +191 -0
  130. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/session_actions.py +44 -0
  131. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/state_actions.py +60 -1
  132. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/stop_signal_actions.py +55 -0
  133. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/summary_actions.py +217 -51
  134. gobby-0.2.8/src/gobby/workflows/task_sync_actions.py +347 -0
  135. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/todo_actions.py +34 -1
  136. gobby-0.2.8/src/gobby/workflows/webhook_actions.py +185 -0
  137. {gobby-0.2.6 → gobby-0.2.8}/src/gobby.egg-info/PKG-INFO +6 -1
  138. {gobby-0.2.6 → gobby-0.2.8}/src/gobby.egg-info/SOURCES.txt +35 -59
  139. {gobby-0.2.6 → gobby-0.2.8}/src/gobby.egg-info/requires.txt +1 -0
  140. {gobby-0.2.6 → gobby-0.2.8}/tests/test_import_pathing_trap.py +3 -5
  141. {gobby-0.2.6 → gobby-0.2.8}/tests/test_runner.py +22 -21
  142. gobby-0.2.6/src/gobby/adapters/codex.py +0 -1332
  143. gobby-0.2.6/src/gobby/cli/tui.py +0 -34
  144. gobby-0.2.6/src/gobby/config/__init__.py +0 -129
  145. gobby-0.2.6/src/gobby/install/claude/commands/gobby/bug.md +0 -51
  146. gobby-0.2.6/src/gobby/install/claude/commands/gobby/chore.md +0 -51
  147. gobby-0.2.6/src/gobby/install/claude/commands/gobby/epic.md +0 -52
  148. gobby-0.2.6/src/gobby/install/claude/commands/gobby/eval.md +0 -235
  149. gobby-0.2.6/src/gobby/install/claude/commands/gobby/feat.md +0 -49
  150. gobby-0.2.6/src/gobby/install/claude/commands/gobby/nit.md +0 -52
  151. gobby-0.2.6/src/gobby/install/claude/commands/gobby/ref.md +0 -52
  152. gobby-0.2.6/src/gobby/mcp_proxy/tools/agents.py +0 -1103
  153. gobby-0.2.6/src/gobby/mcp_proxy/tools/session_messages.py +0 -1055
  154. gobby-0.2.6/src/gobby/prompts/defaults/expansion/system.md +0 -119
  155. gobby-0.2.6/src/gobby/prompts/defaults/expansion/user.md +0 -48
  156. gobby-0.2.6/src/gobby/prompts/defaults/external_validation/agent.md +0 -72
  157. gobby-0.2.6/src/gobby/prompts/defaults/external_validation/external.md +0 -63
  158. gobby-0.2.6/src/gobby/prompts/defaults/external_validation/spawn.md +0 -83
  159. gobby-0.2.6/src/gobby/prompts/defaults/external_validation/system.md +0 -6
  160. gobby-0.2.6/src/gobby/prompts/defaults/features/import_mcp.md +0 -22
  161. gobby-0.2.6/src/gobby/prompts/defaults/features/import_mcp_github.md +0 -17
  162. gobby-0.2.6/src/gobby/prompts/defaults/features/import_mcp_search.md +0 -16
  163. gobby-0.2.6/src/gobby/prompts/defaults/features/recommend_tools.md +0 -32
  164. gobby-0.2.6/src/gobby/prompts/defaults/features/recommend_tools_hybrid.md +0 -35
  165. gobby-0.2.6/src/gobby/prompts/defaults/features/recommend_tools_llm.md +0 -30
  166. gobby-0.2.6/src/gobby/prompts/defaults/features/server_description.md +0 -20
  167. gobby-0.2.6/src/gobby/prompts/defaults/features/server_description_system.md +0 -6
  168. gobby-0.2.6/src/gobby/prompts/defaults/features/task_description.md +0 -31
  169. gobby-0.2.6/src/gobby/prompts/defaults/features/task_description_system.md +0 -6
  170. gobby-0.2.6/src/gobby/prompts/defaults/features/tool_summary.md +0 -17
  171. gobby-0.2.6/src/gobby/prompts/defaults/features/tool_summary_system.md +0 -6
  172. gobby-0.2.6/src/gobby/prompts/defaults/handoff/compact.md +0 -63
  173. gobby-0.2.6/src/gobby/prompts/defaults/handoff/session_end.md +0 -57
  174. gobby-0.2.6/src/gobby/prompts/defaults/memory/extract.md +0 -61
  175. gobby-0.2.6/src/gobby/prompts/defaults/research/step.md +0 -58
  176. gobby-0.2.6/src/gobby/prompts/defaults/validation/criteria.md +0 -47
  177. gobby-0.2.6/src/gobby/prompts/defaults/validation/validate.md +0 -38
  178. gobby-0.2.6/src/gobby/servers/routes/mcp/tools.py +0 -1526
  179. gobby-0.2.6/src/gobby/storage/migrations_legacy.py +0 -1359
  180. gobby-0.2.6/src/gobby/tui/__init__.py +0 -5
  181. gobby-0.2.6/src/gobby/tui/api_client.py +0 -278
  182. gobby-0.2.6/src/gobby/tui/app.py +0 -329
  183. gobby-0.2.6/src/gobby/tui/screens/__init__.py +0 -25
  184. gobby-0.2.6/src/gobby/tui/screens/agents.py +0 -333
  185. gobby-0.2.6/src/gobby/tui/screens/chat.py +0 -450
  186. gobby-0.2.6/src/gobby/tui/screens/dashboard.py +0 -377
  187. gobby-0.2.6/src/gobby/tui/screens/memory.py +0 -305
  188. gobby-0.2.6/src/gobby/tui/screens/metrics.py +0 -231
  189. gobby-0.2.6/src/gobby/tui/screens/orchestrator.py +0 -903
  190. gobby-0.2.6/src/gobby/tui/screens/sessions.py +0 -412
  191. gobby-0.2.6/src/gobby/tui/screens/tasks.py +0 -440
  192. gobby-0.2.6/src/gobby/tui/screens/workflows.py +0 -289
  193. gobby-0.2.6/src/gobby/tui/screens/worktrees.py +0 -174
  194. gobby-0.2.6/src/gobby/tui/widgets/__init__.py +0 -21
  195. gobby-0.2.6/src/gobby/tui/widgets/chat.py +0 -210
  196. gobby-0.2.6/src/gobby/tui/widgets/conductor.py +0 -104
  197. gobby-0.2.6/src/gobby/tui/widgets/menu.py +0 -132
  198. gobby-0.2.6/src/gobby/tui/widgets/message_panel.py +0 -160
  199. gobby-0.2.6/src/gobby/tui/widgets/review_gate.py +0 -224
  200. gobby-0.2.6/src/gobby/tui/widgets/task_tree.py +0 -99
  201. gobby-0.2.6/src/gobby/tui/widgets/token_budget.py +0 -166
  202. gobby-0.2.6/src/gobby/tui/ws_client.py +0 -258
  203. gobby-0.2.6/src/gobby/workflows/actions.py +0 -1392
  204. gobby-0.2.6/src/gobby/workflows/git_utils.py +0 -96
  205. gobby-0.2.6/src/gobby/workflows/task_enforcement_actions.py +0 -1343
  206. {gobby-0.2.6 → gobby-0.2.8}/LICENSE.md +0 -0
  207. {gobby-0.2.6 → gobby-0.2.8}/setup.cfg +0 -0
  208. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/adapters/base.py +0 -0
  209. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/__init__.py +0 -0
  210. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/codex_session.py +0 -0
  211. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/constants.py +0 -0
  212. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/context.py +0 -0
  213. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/gemini_session.py +0 -0
  214. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/runner.py +0 -0
  215. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/spawners/base.py +0 -0
  216. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/spawners/cross_platform.py +0 -0
  217. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/spawners/linux.py +0 -0
  218. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/spawners/windows.py +0 -0
  219. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/agents/tty_config.py +0 -0
  220. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/autonomous/__init__.py +0 -0
  221. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/autonomous/progress_tracker.py +0 -0
  222. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/autonomous/stop_registry.py +0 -0
  223. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/autonomous/stuck_detector.py +0 -0
  224. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/__main__.py +0 -0
  225. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/agents.py +0 -0
  226. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/artifacts.py +0 -0
  227. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/clones.py +0 -0
  228. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/conductor.py +0 -0
  229. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/daemon.py +0 -0
  230. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/extensions.py +0 -0
  231. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/github.py +0 -0
  232. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/init.py +0 -0
  233. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/installers/__init__.py +0 -0
  234. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/installers/antigravity.py +0 -0
  235. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/installers/codex.py +0 -0
  236. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/installers/git_hooks.py +0 -0
  237. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/linear.py +0 -0
  238. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/mcp.py +0 -0
  239. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/mcp_proxy.py +0 -0
  240. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/merge.py +0 -0
  241. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/projects.py +0 -0
  242. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/skills.py +0 -0
  243. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/tasks/__init__.py +0 -0
  244. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/tasks/_utils.py +0 -0
  245. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/tasks/ai.py +0 -0
  246. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/tasks/commits.py +0 -0
  247. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/tasks/crud.py +0 -0
  248. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/tasks/deps.py +0 -0
  249. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/tasks/labels.py +0 -0
  250. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/tasks/main.py +0 -0
  251. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/tasks/search.py +0 -0
  252. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/workflows.py +0 -0
  253. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/cli/worktrees.py +0 -0
  254. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/clones/__init__.py +0 -0
  255. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/conductor/__init__.py +0 -0
  256. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/conductor/alerts.py +0 -0
  257. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/conductor/loop.py +0 -0
  258. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/conductor/monitors/__init__.py +0 -0
  259. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/conductor/monitors/agents.py +0 -0
  260. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/conductor/monitors/tasks.py +0 -0
  261. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/conductor/pricing.py +0 -0
  262. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/conductor/token_tracker.py +0 -0
  263. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/llm_providers.py +0 -0
  264. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/logging.py +0 -0
  265. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/mcp.py +0 -0
  266. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/persistence.py +0 -0
  267. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/search.py +0 -0
  268. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/servers.py +0 -0
  269. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/config/sessions.py +0 -0
  270. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/artifact_capture.py +0 -0
  271. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/broadcaster.py +0 -0
  272. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/events.py +0 -0
  273. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/git.py +0 -0
  274. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/health_monitor.py +0 -0
  275. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/hook_types.py +0 -0
  276. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/session_coordinator.py +0 -0
  277. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/skill_manager.py +0 -0
  278. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/hooks/verification_runner.py +0 -0
  279. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/install/claude/hooks/HOOK_SCHEMAS.md +0 -0
  280. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/install/claude/hooks/hook_dispatcher.py +0 -0
  281. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/install/claude/hooks/validate_settings.py +0 -0
  282. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/install/claude/hooks-template.json +0 -0
  283. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/install/codex/hooks/hook_dispatcher.py +0 -0
  284. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/install/gemini/hooks-template.json +0 -0
  285. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/install/shared/plugins/code_guardian.py +0 -0
  286. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/install/shared/plugins/example_notify.py +0 -0
  287. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/integrations/__init__.py +0 -0
  288. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/integrations/github.py +0 -0
  289. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/integrations/linear.py +0 -0
  290. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/__init__.py +0 -0
  291. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/base.py +0 -0
  292. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/claude.py +0 -0
  293. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/claude_executor.py +0 -0
  294. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/codex.py +0 -0
  295. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/codex_executor.py +0 -0
  296. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/executor.py +0 -0
  297. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/factory.py +0 -0
  298. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/gemini.py +0 -0
  299. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/litellm.py +0 -0
  300. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/litellm_executor.py +0 -0
  301. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/llm/service.py +0 -0
  302. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/__init__.py +0 -0
  303. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/actions.py +0 -0
  304. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/daemon_control.py +0 -0
  305. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/lazy.py +0 -0
  306. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/manager.py +0 -0
  307. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/metrics.py +0 -0
  308. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/models.py +0 -0
  309. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/schema_hash.py +0 -0
  310. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/semantic_search.py +0 -0
  311. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/server.py +0 -0
  312. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/services/__init__.py +0 -0
  313. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/services/fallback.py +0 -0
  314. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/services/server_mgmt.py +0 -0
  315. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/services/system.py +0 -0
  316. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/services/tool_filter.py +0 -0
  317. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/services/tool_proxy.py +0 -0
  318. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/stdio.py +0 -0
  319. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/__init__.py +0 -0
  320. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/hub.py +0 -0
  321. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/internal.py +0 -0
  322. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/merge.py +0 -0
  323. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/metrics.py +0 -0
  324. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/orchestration/__init__.py +0 -0
  325. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/orchestration/cleanup.py +0 -0
  326. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/orchestration/monitor.py +0 -0
  327. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/orchestration/orchestrate.py +0 -0
  328. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/orchestration/review.py +0 -0
  329. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/orchestration/utils.py +0 -0
  330. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/orchestration/wait.py +0 -0
  331. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/task_dependencies.py +0 -0
  332. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/task_github.py +0 -0
  333. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/task_linear.py +0 -0
  334. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/task_orchestration.py +0 -0
  335. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/task_readiness.py +0 -0
  336. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/task_sync.py +0 -0
  337. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/task_validation.py +0 -0
  338. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/__init__.py +0 -0
  339. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_expansion.py +0 -0
  340. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_factory.py +0 -0
  341. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_helpers.py +0 -0
  342. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_resolution.py +0 -0
  343. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/tools/tasks/_search.py +0 -0
  344. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/transports/__init__.py +0 -0
  345. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/transports/base.py +0 -0
  346. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/transports/factory.py +0 -0
  347. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/transports/http.py +0 -0
  348. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/transports/stdio.py +0 -0
  349. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/mcp_proxy/transports/websocket.py +0 -0
  350. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/backends/__init__.py +0 -0
  351. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/backends/mem0.py +0 -0
  352. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/backends/memu.py +0 -0
  353. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/backends/null.py +0 -0
  354. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/backends/openmemory.py +0 -0
  355. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/backends/sqlite.py +0 -0
  356. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/context.py +0 -0
  357. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/protocol.py +0 -0
  358. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/search/text.py +0 -0
  359. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/memory/viz.py +0 -0
  360. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/prompts/__init__.py +0 -0
  361. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/prompts/models.py +0 -0
  362. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/py.typed +0 -0
  363. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/search/__init__.py +0 -0
  364. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/search/backends/__init__.py +0 -0
  365. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/search/backends/embedding.py +0 -0
  366. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/search/embeddings.py +0 -0
  367. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/search/models.py +0 -0
  368. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/search/protocol.py +0 -0
  369. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/search/tfidf.py +0 -0
  370. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/search/unified.py +0 -0
  371. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/__init__.py +0 -0
  372. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/models.py +0 -0
  373. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/routes/__init__.py +0 -0
  374. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/routes/dependencies.py +0 -0
  375. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/routes/mcp/__init__.py +0 -0
  376. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/routes/mcp/plugins.py +0 -0
  377. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/routes/mcp/webhooks.py +0 -0
  378. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/servers/routes/sessions.py +0 -0
  379. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/__init__.py +0 -0
  380. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/summary.py +0 -0
  381. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/transcripts/__init__.py +0 -0
  382. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sessions/transcripts/codex.py +0 -0
  383. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/skills/__init__.py +0 -0
  384. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/skills/loader.py +0 -0
  385. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/skills/manager.py +0 -0
  386. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/skills/search.py +0 -0
  387. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/skills/sync.py +0 -0
  388. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/skills/updater.py +0 -0
  389. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/skills/validator.py +0 -0
  390. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/__init__.py +0 -0
  391. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/agents.py +0 -0
  392. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/artifact_classifier.py +0 -0
  393. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/artifacts.py +0 -0
  394. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/clones.py +0 -0
  395. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/compaction.py +0 -0
  396. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/inter_session_messages.py +0 -0
  397. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/mcp.py +0 -0
  398. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/merge_resolutions.py +0 -0
  399. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/projects.py +0 -0
  400. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/session_messages.py +0 -0
  401. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/session_tasks.py +0 -0
  402. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/task_dependencies.py +0 -0
  403. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/__init__.py +0 -0
  404. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_aggregates.py +0 -0
  405. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_crud.py +0 -0
  406. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_id.py +0 -0
  407. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_manager.py +0 -0
  408. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_models.py +0 -0
  409. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_ordering.py +0 -0
  410. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_path_cache.py +0 -0
  411. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_queries.py +0 -0
  412. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/tasks/_search.py +0 -0
  413. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/workflow_audit.py +0 -0
  414. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/storage/worktrees.py +0 -0
  415. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sync/__init__.py +0 -0
  416. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sync/github.py +0 -0
  417. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sync/linear.py +0 -0
  418. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/sync/tasks.py +0 -0
  419. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/__init__.py +0 -0
  420. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/build_verification.py +0 -0
  421. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/commits.py +0 -0
  422. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/enhanced_validator.py +0 -0
  423. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/escalation.py +0 -0
  424. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/issue_extraction.py +0 -0
  425. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/tree_builder.py +0 -0
  426. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/validation_history.py +0 -0
  427. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tasks/validation_models.py +0 -0
  428. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/tools/__init__.py +0 -0
  429. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/__init__.py +0 -0
  430. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/daemon_client.py +0 -0
  431. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/git.py +0 -0
  432. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/id.py +0 -0
  433. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/json_helpers.py +0 -0
  434. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/logging.py +0 -0
  435. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/machine_id.py +0 -0
  436. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/metrics.py +0 -0
  437. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/project_init.py +0 -0
  438. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/validation.py +0 -0
  439. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/utils/version.py +0 -0
  440. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/__init__.py +0 -0
  441. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/approval_flow.py +0 -0
  442. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/audit_helpers.py +0 -0
  443. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/definitions.py +0 -0
  444. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/lifecycle_evaluator.py +0 -0
  445. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/loader.py +0 -0
  446. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/premature_stop.py +0 -0
  447. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/state_manager.py +0 -0
  448. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/task_actions.py +0 -0
  449. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/templates.py +0 -0
  450. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/webhook.py +0 -0
  451. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/workflows/webhook_executor.py +0 -0
  452. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/worktrees/__init__.py +0 -0
  453. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/worktrees/git.py +0 -0
  454. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/worktrees/merge/__init__.py +0 -0
  455. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/worktrees/merge/conflict_parser.py +0 -0
  456. {gobby-0.2.6 → gobby-0.2.8}/src/gobby/worktrees/merge/resolver.py +0 -0
  457. {gobby-0.2.6 → gobby-0.2.8}/src/gobby.egg-info/dependency_links.txt +0 -0
  458. {gobby-0.2.6 → gobby-0.2.8}/src/gobby.egg-info/entry_points.txt +0 -0
  459. {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.6
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.6"
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]
@@ -1,3 +1,3 @@
1
1
  """Gobby - Local-first daemon for multi-CLI session management."""
2
2
 
3
- __version__ = "0.2.3"
3
+ __version__ = "0.2.7"
@@ -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.codex import CodexAdapter, CodexAppServerClient, CodexNotifyAdapter
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=input_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
- # Build context with all available identifiers
201
- # Use clear naming: Gobby Session ID for MCP calls, External ID for transcripts
202
- context_lines = [f"Gobby Session ID: {gobby_session_id}"]
203
- if external_id:
204
- context_lines.append(f"External ID: {external_id}")
205
- if response.metadata.get("parent_session_id"):
206
- context_lines.append(
207
- f"parent_session_id: {response.metadata['parent_session_id']}"
208
- )
209
- if response.metadata.get("machine_id"):
210
- context_lines.append(f"machine_id: {response.metadata['machine_id']}")
211
- if response.metadata.get("project_id"):
212
- context_lines.append(f"project_id: {response.metadata['project_id']}")
213
- # Add terminal context (non-null values only)
214
- if response.metadata.get("terminal_term_program"):
215
- context_lines.append(f"terminal: {response.metadata['terminal_term_program']}")
216
- if response.metadata.get("terminal_tty"):
217
- context_lines.append(f"tty: {response.metadata['terminal_tty']}")
218
- if response.metadata.get("terminal_parent_pid"):
219
- context_lines.append(f"parent_pid: {response.metadata['terminal_parent_pid']}")
220
- # Add terminal-specific session IDs (only one will be present)
221
- for key in [
222
- "terminal_iterm_session_id",
223
- "terminal_term_session_id",
224
- "terminal_kitty_window_id",
225
- "terminal_tmux_pane",
226
- "terminal_vscode_terminal_id",
227
- "terminal_alacritty_socket",
228
- ]:
229
- if response.metadata.get(key):
230
- # Use friendlier names in output
231
- friendly_name = key.replace("terminal_", "").replace("_", " ")
232
- context_lines.append(f"{friendly_name}: {response.metadata[key]}")
233
- additional_context_parts.append("\n".join(context_lines))
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] = []