gobby 0.2.7__py3-none-any.whl → 0.2.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gobby/adapters/claude_code.py +96 -35
- gobby/adapters/gemini.py +140 -38
- gobby/agents/isolation.py +130 -0
- gobby/agents/registry.py +11 -0
- gobby/agents/session.py +1 -0
- gobby/agents/spawn_executor.py +43 -13
- gobby/agents/spawners/macos.py +26 -1
- gobby/cli/__init__.py +0 -2
- gobby/cli/memory.py +185 -0
- gobby/clones/git.py +177 -0
- gobby/config/skills.py +31 -0
- gobby/hooks/event_handlers.py +109 -10
- gobby/hooks/hook_manager.py +19 -1
- gobby/install/gemini/hooks/hook_dispatcher.py +74 -15
- gobby/mcp_proxy/instructions.py +2 -2
- gobby/mcp_proxy/registries.py +21 -4
- gobby/mcp_proxy/tools/agent_messaging.py +93 -44
- gobby/mcp_proxy/tools/agents.py +45 -9
- gobby/mcp_proxy/tools/artifacts.py +43 -9
- gobby/mcp_proxy/tools/sessions/_commits.py +31 -24
- gobby/mcp_proxy/tools/sessions/_crud.py +5 -5
- gobby/mcp_proxy/tools/sessions/_handoff.py +45 -41
- gobby/mcp_proxy/tools/sessions/_messages.py +35 -7
- gobby/mcp_proxy/tools/spawn_agent.py +44 -6
- gobby/mcp_proxy/tools/tasks/_context.py +18 -0
- gobby/mcp_proxy/tools/tasks/_crud.py +13 -6
- gobby/mcp_proxy/tools/tasks/_lifecycle.py +29 -14
- gobby/mcp_proxy/tools/tasks/_session.py +22 -7
- gobby/mcp_proxy/tools/workflows.py +84 -34
- gobby/mcp_proxy/tools/worktrees.py +32 -7
- gobby/memory/extractor.py +15 -1
- gobby/runner.py +13 -0
- gobby/servers/routes/mcp/hooks.py +50 -3
- gobby/servers/websocket.py +57 -1
- gobby/sessions/analyzer.py +2 -2
- gobby/sessions/manager.py +9 -0
- gobby/sessions/transcripts/gemini.py +100 -34
- gobby/storage/database.py +9 -2
- gobby/storage/memories.py +32 -21
- gobby/storage/migrations.py +23 -4
- gobby/storage/sessions.py +4 -2
- gobby/storage/skills.py +43 -3
- gobby/workflows/detection_helpers.py +38 -24
- gobby/workflows/enforcement/blocking.py +13 -1
- gobby/workflows/engine.py +93 -0
- gobby/workflows/evaluator.py +110 -0
- gobby/workflows/hooks.py +41 -0
- gobby/workflows/memory_actions.py +11 -0
- gobby/workflows/safe_evaluator.py +8 -0
- gobby/workflows/summary_actions.py +123 -50
- {gobby-0.2.7.dist-info → gobby-0.2.8.dist-info}/METADATA +1 -1
- {gobby-0.2.7.dist-info → gobby-0.2.8.dist-info}/RECORD +56 -80
- gobby/cli/tui.py +0 -34
- gobby/tui/__init__.py +0 -5
- gobby/tui/api_client.py +0 -278
- gobby/tui/app.py +0 -329
- gobby/tui/screens/__init__.py +0 -25
- gobby/tui/screens/agents.py +0 -333
- gobby/tui/screens/chat.py +0 -450
- gobby/tui/screens/dashboard.py +0 -377
- gobby/tui/screens/memory.py +0 -305
- gobby/tui/screens/metrics.py +0 -231
- gobby/tui/screens/orchestrator.py +0 -903
- gobby/tui/screens/sessions.py +0 -412
- gobby/tui/screens/tasks.py +0 -440
- gobby/tui/screens/workflows.py +0 -289
- gobby/tui/screens/worktrees.py +0 -174
- gobby/tui/widgets/__init__.py +0 -21
- gobby/tui/widgets/chat.py +0 -210
- gobby/tui/widgets/conductor.py +0 -104
- gobby/tui/widgets/menu.py +0 -132
- gobby/tui/widgets/message_panel.py +0 -160
- gobby/tui/widgets/review_gate.py +0 -224
- gobby/tui/widgets/task_tree.py +0 -99
- gobby/tui/widgets/token_budget.py +0 -166
- gobby/tui/ws_client.py +0 -258
- {gobby-0.2.7.dist-info → gobby-0.2.8.dist-info}/WHEEL +0 -0
- {gobby-0.2.7.dist-info → gobby-0.2.8.dist-info}/entry_points.txt +0 -0
- {gobby-0.2.7.dist-info → gobby-0.2.8.dist-info}/licenses/LICENSE.md +0 -0
- {gobby-0.2.7.dist-info → gobby-0.2.8.dist-info}/top_level.txt +0 -0
|
@@ -22,6 +22,9 @@ logger = logging.getLogger(__name__)
|
|
|
22
22
|
def format_turns_for_llm(turns: list[dict[str, Any]]) -> str:
|
|
23
23
|
"""Format transcript turns for LLM analysis.
|
|
24
24
|
|
|
25
|
+
Handles both Claude Code format (nested message.role/content) and
|
|
26
|
+
Gemini CLI format (flat type/role/content).
|
|
27
|
+
|
|
25
28
|
Args:
|
|
26
29
|
turns: List of transcript turn dicts
|
|
27
30
|
|
|
@@ -30,51 +33,108 @@ def format_turns_for_llm(turns: list[dict[str, Any]]) -> str:
|
|
|
30
33
|
"""
|
|
31
34
|
formatted: list[str] = []
|
|
32
35
|
for i, turn in enumerate(turns):
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
elif block.get("type") == "thinking":
|
|
45
|
-
text_parts.append(f"[Thinking: {block.get('thinking', '')}]")
|
|
46
|
-
elif block.get("type") == "tool_use":
|
|
47
|
-
text_parts.append(f"[Tool: {block.get('name', 'unknown')}]")
|
|
48
|
-
elif block.get("type") == "tool_result":
|
|
49
|
-
result_content = block.get("content", "")
|
|
50
|
-
# Extract text from list of content blocks if needed
|
|
51
|
-
if isinstance(result_content, list):
|
|
52
|
-
extracted = []
|
|
53
|
-
for item in result_content:
|
|
54
|
-
if isinstance(item, dict):
|
|
55
|
-
extracted.append(
|
|
56
|
-
item.get("text", "") or item.get("content", "")
|
|
57
|
-
)
|
|
58
|
-
else:
|
|
59
|
-
extracted.append(str(item))
|
|
60
|
-
result_content = " ".join(extracted)
|
|
61
|
-
content_str = str(result_content)
|
|
62
|
-
preview = content_str[:100]
|
|
63
|
-
suffix = "..." if len(content_str) > 100 else ""
|
|
64
|
-
text_parts.append(f"[Result: {preview}{suffix}]")
|
|
65
|
-
content = " ".join(text_parts)
|
|
36
|
+
# Detect format: Gemini CLI uses "type" field, Claude uses nested "message"
|
|
37
|
+
event_type = turn.get("type")
|
|
38
|
+
|
|
39
|
+
if event_type:
|
|
40
|
+
# Gemini CLI format: flat structure with type field
|
|
41
|
+
role, content = _format_gemini_turn(turn, event_type)
|
|
42
|
+
if role is None:
|
|
43
|
+
continue # Skip non-displayable events
|
|
44
|
+
else:
|
|
45
|
+
# Claude Code format: nested message structure
|
|
46
|
+
role, content = _format_claude_turn(turn)
|
|
66
47
|
|
|
67
48
|
formatted.append(f"[Turn {i + 1} - {role}]: {content}")
|
|
68
49
|
|
|
69
50
|
return "\n\n".join(formatted)
|
|
70
51
|
|
|
71
52
|
|
|
53
|
+
def _format_gemini_turn(turn: dict[str, Any], event_type: str) -> tuple[str | None, str]:
|
|
54
|
+
"""Format a Gemini CLI turn.
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
Tuple of (role, formatted_content) or (None, "") if should skip
|
|
58
|
+
"""
|
|
59
|
+
if event_type == "message":
|
|
60
|
+
role = turn.get("role", "unknown")
|
|
61
|
+
if role == "model":
|
|
62
|
+
role = "assistant"
|
|
63
|
+
content = turn.get("content", "")
|
|
64
|
+
if isinstance(content, list):
|
|
65
|
+
content = " ".join(str(part) for part in content)
|
|
66
|
+
return role, str(content)
|
|
67
|
+
|
|
68
|
+
elif event_type == "tool_use":
|
|
69
|
+
tool_name = turn.get("tool_name") or turn.get("function_name", "unknown")
|
|
70
|
+
params = turn.get("parameters") or turn.get("args", {})
|
|
71
|
+
param_preview = str(params)[:100] if params else ""
|
|
72
|
+
return "assistant", f"[Tool: {tool_name}] {param_preview}"
|
|
73
|
+
|
|
74
|
+
elif event_type == "tool_result":
|
|
75
|
+
tool_name = turn.get("tool_name", "")
|
|
76
|
+
output = turn.get("output") or turn.get("result", "")
|
|
77
|
+
output_str = str(output)
|
|
78
|
+
preview = output_str[:100]
|
|
79
|
+
suffix = "..." if len(output_str) > 100 else ""
|
|
80
|
+
return "tool", f"[Result{' from ' + tool_name if tool_name else ''}]: {preview}{suffix}"
|
|
81
|
+
|
|
82
|
+
elif event_type in ("init", "result"):
|
|
83
|
+
# Skip initialization and final result events
|
|
84
|
+
return None, ""
|
|
85
|
+
|
|
86
|
+
else:
|
|
87
|
+
# Unknown type, try to extract something
|
|
88
|
+
content = turn.get("content", turn.get("message", ""))
|
|
89
|
+
return "unknown", str(content)[:200]
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def _format_claude_turn(turn: dict[str, Any]) -> tuple[str, str]:
|
|
93
|
+
"""Format a Claude Code turn with nested message structure."""
|
|
94
|
+
message = turn.get("message", {})
|
|
95
|
+
role = message.get("role", "unknown")
|
|
96
|
+
content = message.get("content", "")
|
|
97
|
+
|
|
98
|
+
# Assistant messages have content as array of blocks
|
|
99
|
+
if isinstance(content, list):
|
|
100
|
+
text_parts: list[str] = []
|
|
101
|
+
for block in content:
|
|
102
|
+
if isinstance(block, dict):
|
|
103
|
+
if block.get("type") == "text":
|
|
104
|
+
text_parts.append(block.get("text", ""))
|
|
105
|
+
elif block.get("type") == "thinking":
|
|
106
|
+
text_parts.append(f"[Thinking: {block.get('thinking', '')}]")
|
|
107
|
+
elif block.get("type") == "tool_use":
|
|
108
|
+
text_parts.append(f"[Tool: {block.get('name', 'unknown')}]")
|
|
109
|
+
elif block.get("type") == "tool_result":
|
|
110
|
+
result_content = block.get("content", "")
|
|
111
|
+
# Extract text from list of content blocks if needed
|
|
112
|
+
if isinstance(result_content, list):
|
|
113
|
+
extracted = []
|
|
114
|
+
for item in result_content:
|
|
115
|
+
if isinstance(item, dict):
|
|
116
|
+
extracted.append(item.get("text", "") or item.get("content", ""))
|
|
117
|
+
else:
|
|
118
|
+
extracted.append(str(item))
|
|
119
|
+
result_content = " ".join(extracted)
|
|
120
|
+
content_str = str(result_content)
|
|
121
|
+
preview = content_str[:100]
|
|
122
|
+
suffix = "..." if len(content_str) > 100 else ""
|
|
123
|
+
text_parts.append(f"[Result: {preview}{suffix}]")
|
|
124
|
+
content = " ".join(text_parts)
|
|
125
|
+
|
|
126
|
+
return role, str(content)
|
|
127
|
+
|
|
128
|
+
|
|
72
129
|
def extract_todowrite_state(turns: list[dict[str, Any]]) -> str:
|
|
73
130
|
"""Extract the last TodoWrite tool call's todos list from transcript.
|
|
74
131
|
|
|
75
132
|
Scans turns in reverse to find the most recent TodoWrite tool call
|
|
76
133
|
and formats it as a markdown checklist.
|
|
77
134
|
|
|
135
|
+
Handles both Claude Code format (nested message.content) and
|
|
136
|
+
Gemini CLI format (flat type/tool_name/parameters).
|
|
137
|
+
|
|
78
138
|
Args:
|
|
79
139
|
turns: List of transcript turns
|
|
80
140
|
|
|
@@ -82,6 +142,16 @@ def extract_todowrite_state(turns: list[dict[str, Any]]) -> str:
|
|
|
82
142
|
Formatted markdown string with todo list, or empty string if not found
|
|
83
143
|
"""
|
|
84
144
|
for turn in reversed(turns):
|
|
145
|
+
# Check Gemini CLI format: flat structure with type="tool_use"
|
|
146
|
+
event_type = turn.get("type")
|
|
147
|
+
if event_type == "tool_use":
|
|
148
|
+
tool_name = turn.get("tool_name") or turn.get("function_name", "")
|
|
149
|
+
if tool_name == "TodoWrite":
|
|
150
|
+
tool_input = turn.get("parameters") or turn.get("args") or turn.get("input", {})
|
|
151
|
+
todos = tool_input.get("todos", [])
|
|
152
|
+
return _format_todos(todos)
|
|
153
|
+
|
|
154
|
+
# Check Claude Code format: nested message.content
|
|
85
155
|
message = turn.get("message", {})
|
|
86
156
|
content = message.get("content", [])
|
|
87
157
|
|
|
@@ -91,29 +161,32 @@ def extract_todowrite_state(turns: list[dict[str, Any]]) -> str:
|
|
|
91
161
|
if block.get("name") == "TodoWrite":
|
|
92
162
|
tool_input = block.get("input", {})
|
|
93
163
|
todos = tool_input.get("todos", [])
|
|
164
|
+
return _format_todos(todos)
|
|
94
165
|
|
|
95
|
-
|
|
96
|
-
return ""
|
|
166
|
+
return ""
|
|
97
167
|
|
|
98
|
-
# Format as markdown checklist
|
|
99
|
-
lines: list[str] = []
|
|
100
|
-
for todo in todos:
|
|
101
|
-
content_text = todo.get("content", "")
|
|
102
|
-
status = todo.get("status", "pending")
|
|
103
168
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
checkbox = "[>]"
|
|
109
|
-
else:
|
|
110
|
-
checkbox = "[ ]"
|
|
169
|
+
def _format_todos(todos: list[dict[str, Any]]) -> str:
|
|
170
|
+
"""Format todos list as markdown checklist."""
|
|
171
|
+
if not todos:
|
|
172
|
+
return ""
|
|
111
173
|
|
|
112
|
-
|
|
174
|
+
lines: list[str] = []
|
|
175
|
+
for todo in todos:
|
|
176
|
+
content_text = todo.get("content", "")
|
|
177
|
+
status = todo.get("status", "pending")
|
|
113
178
|
|
|
114
|
-
|
|
179
|
+
# Map status to checkbox style
|
|
180
|
+
if status == "completed":
|
|
181
|
+
checkbox = "[x]"
|
|
182
|
+
elif status == "in_progress":
|
|
183
|
+
checkbox = "[>]"
|
|
184
|
+
else:
|
|
185
|
+
checkbox = "[ ]"
|
|
115
186
|
|
|
116
|
-
|
|
187
|
+
lines.append(f"- {checkbox} {content_text}")
|
|
188
|
+
|
|
189
|
+
return "\n".join(lines)
|
|
117
190
|
|
|
118
191
|
|
|
119
192
|
async def synthesize_title(
|
|
@@ -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
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
gobby/__init__.py,sha256=c3bndCCE5kOwyv9yBzkP2Kf8dtUYBI5xLBKvUXaMqvI,90
|
|
2
2
|
gobby/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
gobby/runner.py,sha256=
|
|
3
|
+
gobby/runner.py,sha256=2pjeK4PKMdWhgHZY_5TAhygy9DhzptUc6peOBYQMsS4,21735
|
|
4
4
|
gobby/adapters/__init__.py,sha256=addiq8910J-tAgAyY_b-odBOaiDDS3BtMkhu2XH0qhE,1085
|
|
5
5
|
gobby/adapters/base.py,sha256=zkl9JPhleSteFqELuHO2-N9z8jahpHX0NOn4VlSa_qs,3462
|
|
6
|
-
gobby/adapters/claude_code.py,sha256=
|
|
7
|
-
gobby/adapters/gemini.py,sha256=
|
|
6
|
+
gobby/adapters/claude_code.py,sha256=iH1ogzX_K53Z3TxTarmi3oWIfNPa3Ah32ZoG_TihVcU,15243
|
|
7
|
+
gobby/adapters/gemini.py,sha256=Kha3M_Hgttrwdqix3VR5K-ewYRSpI2Fgpoev65DerfQ,18548
|
|
8
8
|
gobby/adapters/codex_impl/__init__.py,sha256=NnB2baPYEWm-6TfxLjthUfFn_XHNSx1gSFqp9wn0H0A,1056
|
|
9
9
|
gobby/adapters/codex_impl/adapter.py,sha256=Kd5gCVw_dBj1-rYtcqlSNvGvFV5XIHGCYq86DWNyB9A,25304
|
|
10
10
|
gobby/adapters/codex_impl/client.py,sha256=disC5v4_1u70PltvkxajXuRZ2QaAjAhC4jlZwktDQ5A,22847
|
|
@@ -16,13 +16,13 @@ gobby/agents/constants.py,sha256=nOkuh6-_wP6VvECYvOKWWyQ5YisRlcPxc1yQQEF1OD8,368
|
|
|
16
16
|
gobby/agents/context.py,sha256=rsq9hSd32MU3OtX_Zfv10TxjGym174j1IM0mHt8nEI4,12758
|
|
17
17
|
gobby/agents/definitions.py,sha256=_wc5XTYyvhvBcjj9TBoPmjNNREHP6-S06TmUKO0DHXI,4386
|
|
18
18
|
gobby/agents/gemini_session.py,sha256=alnAlO7fAy13Mh24KsIIa0DpAk4ak47rpQWCsdmuo7U,3626
|
|
19
|
-
gobby/agents/isolation.py,sha256=
|
|
20
|
-
gobby/agents/registry.py,sha256=
|
|
19
|
+
gobby/agents/isolation.py,sha256=_1XMqly1ZXv4ZwRZujSE6JPnK5eBRK-0o3ZPyHAOyFc,17354
|
|
20
|
+
gobby/agents/registry.py,sha256=Qyq76rQovs-g5FdAlHVf3XvVx0cet0BGQg3gtpSbxTw,22687
|
|
21
21
|
gobby/agents/runner.py,sha256=kS4HTp-84TPum-NrpCC_w1QYsyhowBHWFTUnWArLanY,35818
|
|
22
22
|
gobby/agents/sandbox.py,sha256=CeW2IjjMPM5bXl57bLS2MrVwXiaVu-u1Ff-zrdvNeDo,8039
|
|
23
|
-
gobby/agents/session.py,sha256=
|
|
23
|
+
gobby/agents/session.py,sha256=5jLumr4AUAe6vpH3G55W7_-1TqTsUgDiLHomR8ZqabY,8162
|
|
24
24
|
gobby/agents/spawn.py,sha256=H41DCjFhnHloys8_3WbnIBi9e3wn4Zlxwla4kDP3vpo,21436
|
|
25
|
-
gobby/agents/spawn_executor.py,sha256=
|
|
25
|
+
gobby/agents/spawn_executor.py,sha256=D2vfj6cvOXyZVqC4BhlUz0E7DbAV8B4DcKMdmYAHhck,13722
|
|
26
26
|
gobby/agents/tty_config.py,sha256=AX_0654idljU34on7TO20A0NEhrg7gU9rzqnmAphsUM,8481
|
|
27
27
|
gobby/agents/spawners/__init__.py,sha256=xc2P-dnLwv6BTTcc1igYELpdxKOvPOknfCU6re1voJ0,2462
|
|
28
28
|
gobby/agents/spawners/base.py,sha256=mFcfkRe5MhfCcFK2urlB-te2mzCgm5z9zEsTa6Qk-t4,3561
|
|
@@ -31,14 +31,14 @@ gobby/agents/spawners/cross_platform.py,sha256=QTHENlDYPiRXfWqIXk3bHTCW2MYeEtsfl
|
|
|
31
31
|
gobby/agents/spawners/embedded.py,sha256=Vtz-wa5PmabWIUF4QIR9kF-XAx1WSODrnw-_L1_ozFE,7865
|
|
32
32
|
gobby/agents/spawners/headless.py,sha256=qwASELJMvU3C8tYCUErOkDI4hUb_QbO4tpd5VQ6f9ow,8257
|
|
33
33
|
gobby/agents/spawners/linux.py,sha256=G2LKI9NJr8k8D6McFeymEsNJSXlL_7hegc-laAVdNs0,3941
|
|
34
|
-
gobby/agents/spawners/macos.py,sha256=
|
|
34
|
+
gobby/agents/spawners/macos.py,sha256=tngN3vx1knQ6L13w8jSjdUKEFLCA1Itav93xpKdmY_Y,11468
|
|
35
35
|
gobby/agents/spawners/prompt_manager.py,sha256=ogEFTxECdl0buXzb3rzkLwUwu7uACs7mfkZooxiGnwI,3982
|
|
36
36
|
gobby/agents/spawners/windows.py,sha256=3Lj3kM000NSnkm2wFCtq3RmY0YKxtx9TAH6UBufoKqo,10861
|
|
37
37
|
gobby/autonomous/__init__.py,sha256=pKFInMsSBwIOH2bGT2bWZwftgPvhqX5bmBk9dPxARf8,798
|
|
38
38
|
gobby/autonomous/progress_tracker.py,sha256=0mQCHRAeDrTIZrR9Tl7c8UP34EEME-gS0sh7l6BYV5c,14885
|
|
39
39
|
gobby/autonomous/stop_registry.py,sha256=A2khm_HJJVSxiGyQSOIaNO4tP7J85G6oet10BQDy-qM,8415
|
|
40
40
|
gobby/autonomous/stuck_detector.py,sha256=1uVw9I041ibsfxoo13ojnZ_EqQaou9Xv3CUNnh1wHVA,13337
|
|
41
|
-
gobby/cli/__init__.py,sha256=
|
|
41
|
+
gobby/cli/__init__.py,sha256=SZb1EhhSt5o_rpzfc0au7sCfepGr68nFrXhUJpsg4f4,1773
|
|
42
42
|
gobby/cli/__main__.py,sha256=zmea_Nm9EbjMSo3Pits3qYSL1__uN7cALX5lJ0HiJvI,101
|
|
43
43
|
gobby/cli/agents.py,sha256=Ef1dHvuVwz97gtmMafxsKvQ_dW6pRfOZUFPtYxYJH2w,17219
|
|
44
44
|
gobby/cli/artifacts.py,sha256=hRKdXSmrF58_EqmFaDTPvG8_JlJgIJUSWkUj4AGGols,8543
|
|
@@ -52,12 +52,11 @@ gobby/cli/install.py,sha256=MwbzqA84PDq4BOFImiKkSTL6tRu5jOXRO4w2YN2emuc,22413
|
|
|
52
52
|
gobby/cli/linear.py,sha256=YDCxPPm-2iU198DpvLozv-aHcGfuCrgk9M35hXBALI8,8524
|
|
53
53
|
gobby/cli/mcp.py,sha256=F3MDY4F6RqA552bvUXT7FZOHN_oIRyJtyUs7JwnBZ50,668
|
|
54
54
|
gobby/cli/mcp_proxy.py,sha256=CSZAJYuEgq-y7RNi2HCIGLgROaxyCApfq9yfkM_L5sI,22659
|
|
55
|
-
gobby/cli/memory.py,sha256=
|
|
55
|
+
gobby/cli/memory.py,sha256=xqqJ7EtU7qZz7MhFFoVLny5o4eF4J6ur-hob_OZWrJs,17000
|
|
56
56
|
gobby/cli/merge.py,sha256=35TBrBOiHuo4mS4-3zMMP6EM0lqmJLMcFc3TeIQrFS8,12193
|
|
57
57
|
gobby/cli/projects.py,sha256=3p-ECuAKfn17UuTGSi0F8EYUk9de122NpzfxSLJWlFI,2319
|
|
58
58
|
gobby/cli/sessions.py,sha256=TQUYusbt2z97kIbO5axIBM9QO6rM-0OAeywNQsuc1x4,21941
|
|
59
59
|
gobby/cli/skills.py,sha256=kHAwSsQVgyGZLxaYiXh5UVDQpxNZZCsjR3eKIqfBz3w,26320
|
|
60
|
-
gobby/cli/tui.py,sha256=pCxPIf5Nbx_9DinyJg-fCeyaeEquLmRbRJFqseZFNno,763
|
|
61
60
|
gobby/cli/utils.py,sha256=S5BUriATddhcazw1q_y960_KMWHZsIiaL3uicxe-0cg,16148
|
|
62
61
|
gobby/cli/workflows.py,sha256=mC2Wj_Ce2ABvsv2wsD1oppGPoau3v_K90PZqxr9yyIY,31558
|
|
63
62
|
gobby/cli/worktrees.py,sha256=y65rBiktgPb78pwW7e1OF773IWe2gnqvhoPHQFzV3xc,16298
|
|
@@ -78,7 +77,7 @@ gobby/cli/tasks/labels.py,sha256=eefec7BOtZYghKACaMJwONMxjAjgo4dqNoaotD8T6Js,193
|
|
|
78
77
|
gobby/cli/tasks/main.py,sha256=A8sMWr-v5ci4cnUVYT3ml7Pz1sKd6fd_3lCVUJPbUyE,8001
|
|
79
78
|
gobby/cli/tasks/search.py,sha256=VU1W1J9IoJ71mMnAkDYBaqBibHB-ii3pikmBS26hIGI,4470
|
|
80
79
|
gobby/clones/__init__.py,sha256=GjgorVgIXUiNmnPzRDK1Z4QPmLeIelGgdHZUmU0drQ4,362
|
|
81
|
-
gobby/clones/git.py,sha256=
|
|
80
|
+
gobby/clones/git.py,sha256=7QZWY8qHCj9m86UJ90BfwjPqfi5M9GbQf2v2w8cGssM,23638
|
|
82
81
|
gobby/conductor/__init__.py,sha256=fPZmcKBp-u_WHrs2NtK1Qp5G3TP_utaiVZrOoyqLTuI,632
|
|
83
82
|
gobby/conductor/alerts.py,sha256=T2XtR36zeT-bclWYcPNCRjHFv5tT5IvUltM9GQO3XOo,4038
|
|
84
83
|
gobby/conductor/loop.py,sha256=SaLRzN6evSs9AJ9sBXpNTsJNK65HBM7mmRoR4b1mOUs,5449
|
|
@@ -98,16 +97,16 @@ gobby/config/persistence.py,sha256=OoymeuZHouRLqR8R9lbbX_OBU1cjtnEqpqGfRf6iet0,8
|
|
|
98
97
|
gobby/config/search.py,sha256=TT76NNlNtbhm4d0RAaM24jUW9L0V8zRAUmng2hHRQ1E,3697
|
|
99
98
|
gobby/config/servers.py,sha256=u7hLGDMoWedy4vNAUE_1dK6NQ6Lklv05yoUiud-4t70,4602
|
|
100
99
|
gobby/config/sessions.py,sha256=LLeDp6w314Qs9D5D_Qqcvmlkeh2MZb_6-CKr9Lnt43Y,7922
|
|
101
|
-
gobby/config/skills.py,sha256=
|
|
100
|
+
gobby/config/skills.py,sha256=OrZu6nLW5SkMQpLhugBiPC1Y6H1kajIZQf-2V5wG61o,2010
|
|
102
101
|
gobby/config/tasks.py,sha256=ihLcUXHFN3-wcIVvsTZY_XoQrET4kYTrO9Rv5leOryk,23864
|
|
103
102
|
gobby/hooks/__init__.py,sha256=8WDNKooutm0zYXuP21q0gQ8h2MInnPOs8FFlvjeDZ_w,2717
|
|
104
103
|
gobby/hooks/artifact_capture.py,sha256=V_GXGJhm-fmNvRQkRf-G36c_jHKa-Hf4cimCfi6gRGc,6922
|
|
105
104
|
gobby/hooks/broadcaster.py,sha256=gKUcmCHHr0-ECJp7izT904PBJuBoznOB0xw0C4FWDcQ,9964
|
|
106
|
-
gobby/hooks/event_handlers.py,sha256=
|
|
105
|
+
gobby/hooks/event_handlers.py,sha256=ejuK0F-3_1n4n94tUNBfYUGkU2naFL2oOg4ARQ5kkYI,43273
|
|
107
106
|
gobby/hooks/events.py,sha256=YGb--5DlbCRhZzdUS3uJcRk_nm6mmtZQZw0DYR9ZtIE,7192
|
|
108
107
|
gobby/hooks/git.py,sha256=F1p2jvS3-9pAbPjKzc8wa9Td7249jx4eUiBMzz-11kU,5198
|
|
109
108
|
gobby/hooks/health_monitor.py,sha256=Pe2aS0w9t1BM4m3CEYAMTVZq1tAtwgftb7Ko-JjsIjU,6423
|
|
110
|
-
gobby/hooks/hook_manager.py,sha256
|
|
109
|
+
gobby/hooks/hook_manager.py,sha256=-jD2aoz1O-Si74RFlKHnjviuQx7js3Fuwo1LHT7Y7wk,39192
|
|
111
110
|
gobby/hooks/hook_types.py,sha256=oQ6SiDyVKozE575d3dndl9I5Tr21ecS9sCbMZyb0FSA,19256
|
|
112
111
|
gobby/hooks/plugins.py,sha256=0Uf5C4uY_otF5yzc-c1aX2YtBfFpZAh6ob2d9iSlFZo,27953
|
|
113
112
|
gobby/hooks/session_coordinator.py,sha256=YDbPtwZk2CKVyb-YNs2P-5jKr7EC6nHqq0EF4h-gI6M,13867
|
|
@@ -120,7 +119,7 @@ gobby/install/claude/hooks/hook_dispatcher.py,sha256=-sHi2HSgXu0fhqG7zWW5qXaGWYz
|
|
|
120
119
|
gobby/install/claude/hooks/validate_settings.py,sha256=jVR2VGOxsnyYHGYZIIzOoY2kQAFrJEpAUq5N02KQBKU,2750
|
|
121
120
|
gobby/install/codex/hooks/hook_dispatcher.py,sha256=GBLQPxHKhguQbZf_UWLukjV2WV3oqgDKNwIjuSqGuZo,4022
|
|
122
121
|
gobby/install/gemini/hooks-template.json,sha256=QUsEAZ0XlgH8E1UMPBCTYqRjONuG2fggikaPDaBY8Tc,3479
|
|
123
|
-
gobby/install/gemini/hooks/hook_dispatcher.py,sha256=
|
|
122
|
+
gobby/install/gemini/hooks/hook_dispatcher.py,sha256=9UV57CrAxzRpCXGdspNnFnWwsyG3Bz_Rcluly_yjm20,13679
|
|
124
123
|
gobby/install/shared/plugins/code_guardian.py,sha256=m4UrlBP6Mx4Xf-egpVe6KHm3t_0aqFfcTC0mxRA2jzY,16145
|
|
125
124
|
gobby/install/shared/plugins/example_notify.py,sha256=cvsptzKyfPJ7u_IYEoTAEcg1BhxPBECxhWe5RcE-1AI,11260
|
|
126
125
|
gobby/integrations/__init__.py,sha256=LAJmdQXeWxdZx5R7KKk1tvD2Z-XLzuXaSkLNbyOGnJQ,341
|
|
@@ -143,12 +142,12 @@ gobby/mcp_proxy/__init__.py,sha256=wtCqRfarZX5iERfiUraJtgIp5WBFTI_4-LmOuQTvyR4,6
|
|
|
143
142
|
gobby/mcp_proxy/actions.py,sha256=sKmdVn-mAt7Y_5Si3TYqado9WB-frm6-nalfvclHGQA,5248
|
|
144
143
|
gobby/mcp_proxy/daemon_control.py,sha256=2sKbDbCxJP32T0Opcgf6YZ8f3K7M_a-AD6R4uG4Xh5Q,6228
|
|
145
144
|
gobby/mcp_proxy/importer.py,sha256=TZlLuXG7lgTnGP-WRLPDB1EVOKItIuL4i2GFeOSOdVo,17508
|
|
146
|
-
gobby/mcp_proxy/instructions.py,sha256=
|
|
145
|
+
gobby/mcp_proxy/instructions.py,sha256=wzT_0FfYJVqKLcfRBPzNxXslMMfUu2uTUsQi5QJ1bUI,2024
|
|
147
146
|
gobby/mcp_proxy/lazy.py,sha256=taP6y8cu6_2o8j-qkyYSMzYTrGu1O_fQSyuXGGMMlIY,10826
|
|
148
147
|
gobby/mcp_proxy/manager.py,sha256=moG5wortkbhcBHQ2X7ULgDxSkK-44lxssMWZdQxxF8E,31691
|
|
149
148
|
gobby/mcp_proxy/metrics.py,sha256=sK6SZIhgDfVpUMgBmR64dC-Nwt5ZgFBiJO1zjBARLUA,20520
|
|
150
149
|
gobby/mcp_proxy/models.py,sha256=QxQrflKB4sRZi4FAJHW2VH0svyoY2vWBe0_RTyAzTFI,4610
|
|
151
|
-
gobby/mcp_proxy/registries.py,sha256=
|
|
150
|
+
gobby/mcp_proxy/registries.py,sha256=uiMXBt4QOtGmkIy7trSMyOXoS-dChCDFiszHpZEP8AE,12439
|
|
152
151
|
gobby/mcp_proxy/schema_hash.py,sha256=8k_lw4jAfoZ51W-morJcD1u7FLOcXLDEmyeWCSPhbHY,11579
|
|
153
152
|
gobby/mcp_proxy/semantic_search.py,sha256=kTpD5PrVXgfYByvx0yrb1gqFVU4HLwigPx3gMAFSVVU,22312
|
|
154
153
|
gobby/mcp_proxy/server.py,sha256=5ScbBb5eWSw94Jez3mspkb8Rv6pK-qfSynLzneuBszw,19376
|
|
@@ -161,16 +160,16 @@ gobby/mcp_proxy/services/system.py,sha256=waqEdzOwCL7Fq_SRIzYYcoWO5x2XdXqi8eYew8
|
|
|
161
160
|
gobby/mcp_proxy/services/tool_filter.py,sha256=LJwIQiimyyQP8had1K-9PFskEzob731WHiPmJvWUKqU,7233
|
|
162
161
|
gobby/mcp_proxy/services/tool_proxy.py,sha256=G5VvdTIgPPe2popPDaR00Mf3qHWj9ETZHaRSY_jR_X4,15506
|
|
163
162
|
gobby/mcp_proxy/tools/__init__.py,sha256=6R34L-DiMFk6l4PasnnOBdindME4JLFVDL-K1NYxY3I,907
|
|
164
|
-
gobby/mcp_proxy/tools/agent_messaging.py,sha256=
|
|
165
|
-
gobby/mcp_proxy/tools/agents.py,sha256
|
|
166
|
-
gobby/mcp_proxy/tools/artifacts.py,sha256=
|
|
163
|
+
gobby/mcp_proxy/tools/agent_messaging.py,sha256=IBmggWUeD-wd7WFSvpJxJRBndRBkrz_MJvWLoGfPS9k,12548
|
|
164
|
+
gobby/mcp_proxy/tools/agents.py,sha256=-fTAQKsv4ASt_hu3uZMA5orVByrKKyOHPAufgaj3ktI,15021
|
|
165
|
+
gobby/mcp_proxy/tools/artifacts.py,sha256=9EzjDKyKaDQ4WY2ZDLLGvXo4hyvSuHdQG1GwcvqPBFI,8531
|
|
167
166
|
gobby/mcp_proxy/tools/clones.py,sha256=1_N55Bj_XV7l3TeZRHuU6RiWDZ_UV3G2I49laPCbGUM,16177
|
|
168
167
|
gobby/mcp_proxy/tools/hub.py,sha256=wI01OvMGRGKMapzK_n_QZKZ2JkxoErp1qrpYEn9M4xE,10735
|
|
169
168
|
gobby/mcp_proxy/tools/internal.py,sha256=520G2M_AKW79VFeUVY0pVHD4c9naIxqsAGz9ZoPkGdo,9953
|
|
170
169
|
gobby/mcp_proxy/tools/memory.py,sha256=ImuyjE63ChhksjbgntAYR4FHfmg7LnAf6GxVR5qDKps,17823
|
|
171
170
|
gobby/mcp_proxy/tools/merge.py,sha256=VV29ZKQY7rYoktoJ2DZ5NC_YUDHvVwaPuYBjy4uk4BQ,14257
|
|
172
171
|
gobby/mcp_proxy/tools/metrics.py,sha256=Mx3eIBoy5nrg44iM6J982t_PVL_HBPFbnQ0b4y32Uo8,10726
|
|
173
|
-
gobby/mcp_proxy/tools/spawn_agent.py,sha256=
|
|
172
|
+
gobby/mcp_proxy/tools/spawn_agent.py,sha256=e3GxqS12v3o5_dL6AH5LPmiTlsh1cjuQ7qBlG0YXd4M,18054
|
|
174
173
|
gobby/mcp_proxy/tools/task_dependencies.py,sha256=4PVtYtrmpd2tfEHvST74GRCK5zfJ5UgDFIwVyEKgP8E,8041
|
|
175
174
|
gobby/mcp_proxy/tools/task_github.py,sha256=ke8z4JjTD4O79sE5S9RqA5pBGJZsr42AAXFdFrojUKk,12346
|
|
176
175
|
gobby/mcp_proxy/tools/task_linear.py,sha256=ZBO4rFbIaGiA_tKh_EiETrKzyrquW58R_l7qcSWDm-k,11959
|
|
@@ -178,8 +177,8 @@ gobby/mcp_proxy/tools/task_orchestration.py,sha256=aQUjMYmHHpDudb0gD6t4PAD-XHYZe
|
|
|
178
177
|
gobby/mcp_proxy/tools/task_readiness.py,sha256=YQa6uzCx8VK1WeQCky8U4UGLYnyaj4b7chibqp2iu3w,19909
|
|
179
178
|
gobby/mcp_proxy/tools/task_sync.py,sha256=yoZuNOuOoMEo1XT7UZruK3oU40zwPC3y3Ixm6qXxVms,12159
|
|
180
179
|
gobby/mcp_proxy/tools/task_validation.py,sha256=pwDWvjaQRIAPkwUJ_Rel1d0zesl5UsuN6kuTZTGQ5oE,30972
|
|
181
|
-
gobby/mcp_proxy/tools/workflows.py,sha256=
|
|
182
|
-
gobby/mcp_proxy/tools/worktrees.py,sha256=
|
|
180
|
+
gobby/mcp_proxy/tools/workflows.py,sha256=7CAU44rYykGFI8EiLXZOMDdQxlKeDEWU69X8hnh0bNg,38903
|
|
181
|
+
gobby/mcp_proxy/tools/worktrees.py,sha256=dNNuyEGiiqkDIzEmR_TFtQMNG763ecs1VXeSjN5TT2A,32302
|
|
183
182
|
gobby/mcp_proxy/tools/orchestration/__init__.py,sha256=eQ96Q4NaMm0oKouBTxMFriqTp7cedFt0Zh9Wh1fLTyI,1113
|
|
184
183
|
gobby/mcp_proxy/tools/orchestration/cleanup.py,sha256=YvjT-_OqORv7t7P03xlEknxyBiTu2c5MCWsRObNTKZg,28333
|
|
185
184
|
gobby/mcp_proxy/tools/orchestration/monitor.py,sha256=cd5JEItJogwkV4bG_u3AFpnKbTq5pdXz2UbTmVEQ-VY,14516
|
|
@@ -188,23 +187,23 @@ gobby/mcp_proxy/tools/orchestration/review.py,sha256=vsVFZUkKhDowJKn9-iJoWLVAM8b
|
|
|
188
187
|
gobby/mcp_proxy/tools/orchestration/utils.py,sha256=2DLwtDynWAN__SCjEMkIA0XyiLhEhzcWQfpRuaN5wko,390
|
|
189
188
|
gobby/mcp_proxy/tools/orchestration/wait.py,sha256=hHj0pAVjys6Z1nXsI22mm7_lDg9TpKb4u1wZx0Sa3js,16088
|
|
190
189
|
gobby/mcp_proxy/tools/sessions/__init__.py,sha256=KO0bWt_hATPieYxnjNEnu1hkk6EI2KAAGwWVqrFVfVs,424
|
|
191
|
-
gobby/mcp_proxy/tools/sessions/_commits.py,sha256=
|
|
192
|
-
gobby/mcp_proxy/tools/sessions/_crud.py,sha256=
|
|
190
|
+
gobby/mcp_proxy/tools/sessions/_commits.py,sha256=VChmD_yA3kML0oLcYeMMM4WpjRvcJXiREQJux3_5j88,8340
|
|
191
|
+
gobby/mcp_proxy/tools/sessions/_crud.py,sha256=8n2mxiPEGWXw3ppwoTz0pZAK67BO-IcJu-iSNs5gk9o,8645
|
|
193
192
|
gobby/mcp_proxy/tools/sessions/_factory.py,sha256=kIREcGFS9MlPvM5VcgwNUfSy8WvTLiGRBxi-ewhmV1E,2205
|
|
194
|
-
gobby/mcp_proxy/tools/sessions/_handoff.py,sha256=
|
|
195
|
-
gobby/mcp_proxy/tools/sessions/_messages.py,sha256=
|
|
193
|
+
gobby/mcp_proxy/tools/sessions/_handoff.py,sha256=qOFOmJZK3iKxKWJvUxN9S5hJ4gjUHBpVmcNViqaL2o4,19139
|
|
194
|
+
gobby/mcp_proxy/tools/sessions/_messages.py,sha256=2HYMfcDEobwAZ94juZJdOG6DYuEEF8Lz_MhZSLyS1HI,6170
|
|
196
195
|
gobby/mcp_proxy/tools/skills/__init__.py,sha256=-HQZJ9LpEUVjW7B47zpCem9CBtyKpV8su4JeKqqDlaU,20939
|
|
197
196
|
gobby/mcp_proxy/tools/tasks/__init__.py,sha256=2PmKHYV0dAKDGmg642dfsg-Y3fkID7k_5wvK1GHiTTU,877
|
|
198
|
-
gobby/mcp_proxy/tools/tasks/_context.py,sha256=
|
|
199
|
-
gobby/mcp_proxy/tools/tasks/_crud.py,sha256=
|
|
197
|
+
gobby/mcp_proxy/tools/tasks/_context.py,sha256=RSJARYTFOrd_diWi55gy1ZnFclO-UU-Aqytff4crHMg,4273
|
|
198
|
+
gobby/mcp_proxy/tools/tasks/_crud.py,sha256=WK3KI_JkBlafKEMIoAcG-znEP6CdwJkIkQ6zP5t0QZU,24538
|
|
200
199
|
gobby/mcp_proxy/tools/tasks/_expansion.py,sha256=pJ055C_4FGxWJRj2D-nRwOxlcwkRjfNHiPPDbaV5sCg,12993
|
|
201
200
|
gobby/mcp_proxy/tools/tasks/_factory.py,sha256=loBtSLliCJ_QXsO-cmj1fs7eloemXQVASm29uqOwm3U,6773
|
|
202
201
|
gobby/mcp_proxy/tools/tasks/_helpers.py,sha256=Esv-tMB9ASGLurUd3Kgql4kDCnpV7HddB0iy05fFwPg,3219
|
|
203
|
-
gobby/mcp_proxy/tools/tasks/_lifecycle.py,sha256
|
|
202
|
+
gobby/mcp_proxy/tools/tasks/_lifecycle.py,sha256=4Kh8gs84m4wlYnAmr9w-pV-m6PSADscgbrMV7EAomK4,24968
|
|
204
203
|
gobby/mcp_proxy/tools/tasks/_lifecycle_validation.py,sha256=b5je3kT2GkosuhaoviRIzKakXTuv8CSNeSYfcF1MoSg,10329
|
|
205
204
|
gobby/mcp_proxy/tools/tasks/_resolution.py,sha256=8YpMvHXpwknxV_re5YtIXBpoZ7cuu24DJLu25CO9mGg,2028
|
|
206
205
|
gobby/mcp_proxy/tools/tasks/_search.py,sha256=s2_LKRruY8WBbfdfsAt73xUlsPBYjcV8QBi50nXYkbU,7765
|
|
207
|
-
gobby/mcp_proxy/tools/tasks/_session.py,sha256=
|
|
206
|
+
gobby/mcp_proxy/tools/tasks/_session.py,sha256=PtbC7nDzxFlq6YAO74y5aQ164j4eOk9sJDgM0b9js-Y,4983
|
|
208
207
|
gobby/mcp_proxy/transports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
209
208
|
gobby/mcp_proxy/transports/base.py,sha256=e_-VJUuOCX32Jb2ZYPbQBiC4Cuv_9JSrKOHk29ZXl7U,2960
|
|
210
209
|
gobby/mcp_proxy/transports/factory.py,sha256=YNM3u3-s5GBFrzyvL0EXhbh_AEstK6VUfpiIGXBvhyY,1513
|
|
@@ -212,7 +211,7 @@ gobby/mcp_proxy/transports/http.py,sha256=UxHxaRrY0IBBVz--eHtD2E_RUO87m2zJ1vuKo6
|
|
|
212
211
|
gobby/mcp_proxy/transports/stdio.py,sha256=pp323eGtqFmaJHMD0voZmetc7tr2SW-wfHohOsGbCXc,8001
|
|
213
212
|
gobby/mcp_proxy/transports/websocket.py,sha256=oLmrLx2MRvntaaxzK2NNNBf8rz_SiqBFoUcg5tD2iHM,5620
|
|
214
213
|
gobby/memory/context.py,sha256=eH7aWsqy-u5SI_2xnoUQALS_3yPKcnLovEpnpPEn188,2536
|
|
215
|
-
gobby/memory/extractor.py,sha256=
|
|
214
|
+
gobby/memory/extractor.py,sha256=QWtciQHdGxBHubHfdbt6CwFROCwgdqVki-wC__EiBmY,16806
|
|
216
215
|
gobby/memory/manager.py,sha256=dBOQmpo1GtabQaMK_3hNpxJdKKLplxl1qrXF05O6gio,27138
|
|
217
216
|
gobby/memory/protocol.py,sha256=XnvnZDM6RvAukLFKRXJ342ckvRxNlmToM0_McXGOyHI,14699
|
|
218
217
|
gobby/memory/viz.py,sha256=IzSHjwhfUUvmzeJpCfdHEc92mPAg3J4jTJzwKPBNEwA,7745
|
|
@@ -243,13 +242,13 @@ gobby/search/backends/embedding.py,sha256=ndK3ZjXRzSgWmvlxmlAW8gPga3Og8HD1SMvDkg
|
|
|
243
242
|
gobby/servers/__init__.py,sha256=QaZkdTw7rL2BoGc_bYa8uw5PBCmxBgYFWoi1_N-1BWY,201
|
|
244
243
|
gobby/servers/http.py,sha256=bFsC3E-bqFRtxPs-iit763pldarDQNTmAmFLR-rLOBQ,25317
|
|
245
244
|
gobby/servers/models.py,sha256=M52ok5FXus9F8dXbpAkxxRBjcQGT6Kl68mNEPwQCBsU,1305
|
|
246
|
-
gobby/servers/websocket.py,sha256=
|
|
245
|
+
gobby/servers/websocket.py,sha256=iIjCFmYCdEVZSdN_jKCpI95ujYKb1_XgA11fTF86rPQ,27342
|
|
247
246
|
gobby/servers/routes/__init__.py,sha256=ZLBuxYPVntij_kriPdNGjpDCD9xkIcbImoz-nY3ksu0,564
|
|
248
247
|
gobby/servers/routes/admin.py,sha256=eIk7Zl8nHNnPYpF7NM5G9wJ6Yja_lyE14x9AwnAeqrM,27047
|
|
249
248
|
gobby/servers/routes/dependencies.py,sha256=XZb95IgqLKbLY_TmrAHIDk-UhNX_bhLiVgoDCunP7qY,3835
|
|
250
249
|
gobby/servers/routes/sessions.py,sha256=jS_XFenFD0HG7n7LZ1WwIs9FeNeDolCB6u6eaSjhvdk,20764
|
|
251
250
|
gobby/servers/routes/mcp/__init__.py,sha256=Q9Ocd6hlMZspEytGFNKQ2QySMMna8ZSGoPZOF3JC6vM,826
|
|
252
|
-
gobby/servers/routes/mcp/hooks.py,sha256
|
|
251
|
+
gobby/servers/routes/mcp/hooks.py,sha256=I8keiHlMcz5YAVW4OadxO_z-Yn2d19UxU_2lOhXUjPg,6594
|
|
253
252
|
gobby/servers/routes/mcp/plugins.py,sha256=tNMjrcYWeRf_p-tGiN_vFGECAXeZMPmMQ4_YEZddJ4M,3590
|
|
254
253
|
gobby/servers/routes/mcp/tools.py,sha256=wm4ESgR_WcSz8wlUcC6juxRNNpBYl3K7e2OtAf4Tyfc,2063
|
|
255
254
|
gobby/servers/routes/mcp/webhooks.py,sha256=sd9jcxYQ0KBhT4wsxjh6DHmqNR13Ev1LVdFhnbae4sE,4915
|
|
@@ -259,16 +258,16 @@ gobby/servers/routes/mcp/endpoints/execution.py,sha256=hqdM__UkbLQbRzgzywnThhH6S
|
|
|
259
258
|
gobby/servers/routes/mcp/endpoints/registry.py,sha256=xDhuZ-w4jdf6sDwWQ0nHICQXVUvbxqaHFHVKCPhA1tI,14189
|
|
260
259
|
gobby/servers/routes/mcp/endpoints/server.py,sha256=9ac8zwsQ5M3CyK6-JF_cKqPrulzvAMkvVsCVnjgFlB0,9704
|
|
261
260
|
gobby/sessions/__init__.py,sha256=t9Df_MQrVPDIH5xrn-Q-v0i5cWTZqdwg-tdrgdLQiVk,466
|
|
262
|
-
gobby/sessions/analyzer.py,sha256
|
|
261
|
+
gobby/sessions/analyzer.py,sha256=-UphWGtKcJ9UQDjYgB3RyXPRfcZBN-0RV35QZwryHxM,12508
|
|
263
262
|
gobby/sessions/lifecycle.py,sha256=eFWBrmyVZQ7pr29TSCJrGMedWEEv1S8XtB5d5t9HVV4,8399
|
|
264
|
-
gobby/sessions/manager.py,sha256=
|
|
263
|
+
gobby/sessions/manager.py,sha256=HSakBtTZwto60Ndl8EweGp8N1Jdan2yrYvcfPPvyGM0,20871
|
|
265
264
|
gobby/sessions/processor.py,sha256=QTsIJUs4bw6RfGPLGGLHFJnBkHdH0AI1euju2A9V1aU,8199
|
|
266
265
|
gobby/sessions/summary.py,sha256=vi5FMVxtg3kMPbQeXWZfqBBUSoG1072bZhGgUbmjHIw,21089
|
|
267
266
|
gobby/sessions/transcripts/__init__.py,sha256=f6YwRoKEIc3V4t-3UC38pBPLwNiA0qc6_1SgrbmODKQ,1103
|
|
268
267
|
gobby/sessions/transcripts/base.py,sha256=4G50lA7ziv0HXu0a8ee-J4J_sfFd6YqdImFbAuG5T0k,3379
|
|
269
268
|
gobby/sessions/transcripts/claude.py,sha256=-t8lalta51ri21YM7SnTDxgHfqMImI6flfhjDXWxJFY,16625
|
|
270
269
|
gobby/sessions/transcripts/codex.py,sha256=aL91wlO_p6QzlcbwsjKGCFa7Mf1WgMTKa5yp4nB1dDI,4495
|
|
271
|
-
gobby/sessions/transcripts/gemini.py,sha256=
|
|
270
|
+
gobby/sessions/transcripts/gemini.py,sha256=SqGXUcpA7iApQGx5kMP4DBpprM0iC_xp_H1EVCSI9Ik,9482
|
|
272
271
|
gobby/skills/__init__.py,sha256=43uNx_IpLmDqbYqS--nSW_uD_419ayI1tQY9-25OJ14,2127
|
|
273
272
|
gobby/skills/loader.py,sha256=VRbycr0NUjG6f3LFbRcxLfP7JPOEQgxMmscpovBeA9U,22315
|
|
274
273
|
gobby/skills/manager.py,sha256=tBfpi6oSvzDJxmPenDp3xvOfxEcSJnMuZjiITU99o3w,11272
|
|
@@ -283,17 +282,17 @@ gobby/storage/artifact_classifier.py,sha256=_adpLpA5aq9994mu60XgM4oOZ7MybHu-s9kM
|
|
|
283
282
|
gobby/storage/artifacts.py,sha256=-oWRsjsvj4Y-h_aszLKuQRaMjXcHKndDITfeCfAI0jo,9210
|
|
284
283
|
gobby/storage/clones.py,sha256=KPVYgL41XvVLsMzptwJir1nqUyyFTiHbaZ3WZ1g7Kq4,11144
|
|
285
284
|
gobby/storage/compaction.py,sha256=pRPfKyO1sQuF6KZB-e_GyGZLKFLao5tabz-N7_i5drE,2333
|
|
286
|
-
gobby/storage/database.py,sha256=
|
|
285
|
+
gobby/storage/database.py,sha256=Ic734K7bnXeWD9kMpQm2ANUZzxriVp6K-Wc0HHjtpCA,12794
|
|
287
286
|
gobby/storage/inter_session_messages.py,sha256=wPl78L_GsZYwpY16j47GkFc_48R0gjnmJMDYbrhrABU,5514
|
|
288
287
|
gobby/storage/mcp.py,sha256=xF9TbRsXbVANfRBvngh6ipCmw7Hz8VkqKc1M2MaPJxA,23427
|
|
289
|
-
gobby/storage/memories.py,sha256=
|
|
288
|
+
gobby/storage/memories.py,sha256=P3RwRp5PuWMi9hgUJj68x_dSebZlOtOVTl90tXwKIic,20720
|
|
290
289
|
gobby/storage/merge_resolutions.py,sha256=18-p49vNA4LUbff0UmyXlJO2wC3EOoJyFLYHmxjXBHY,17137
|
|
291
|
-
gobby/storage/migrations.py,sha256=
|
|
290
|
+
gobby/storage/migrations.py,sha256=fZpx6B3cAElyuQ0C3uQ3G-I1jIFBJ5AoN5pwan3AnC0,31214
|
|
292
291
|
gobby/storage/projects.py,sha256=nDV_jyBn1h55p3T1ICV88enTPkZ7loTciQjW0yYADU8,5013
|
|
293
292
|
gobby/storage/session_messages.py,sha256=jQhbZye-tCQBSPmi6H7u1WN-AQOz9CJWjC6UMHrkKmQ,8424
|
|
294
293
|
gobby/storage/session_tasks.py,sha256=E7TL_7S8QTiSyZ_aiFU32NlVdHzq849utBlXTViIqrw,3236
|
|
295
|
-
gobby/storage/sessions.py,sha256=
|
|
296
|
-
gobby/storage/skills.py,sha256=
|
|
294
|
+
gobby/storage/sessions.py,sha256=qBtSfy6bZJFE-N8mb23KMWCvrwnT1TvhMOFFwgr_T7c,32302
|
|
295
|
+
gobby/storage/skills.py,sha256=oHneRAe2gPG7EFC-MIaVJ1dEJCGbWFrBFChg1FvdRXU,28052
|
|
297
296
|
gobby/storage/task_dependencies.py,sha256=y7738oMmI4a3b0AFNaHacxhK7VzDMkjSCQnbnQqgo9g,7255
|
|
298
297
|
gobby/storage/workflow_audit.py,sha256=F7lza1Qz3QS_mFYgHbfgD4e-ih58C9nU_-DlxybBBpg,11713
|
|
299
298
|
gobby/storage/worktrees.py,sha256=h1G7B4l2qPxcjQ-q-xhIg5CIaJGN2V92wgAKDBS2GCA,16333
|
|
@@ -326,29 +325,6 @@ gobby/tasks/validation_history.py,sha256=uOaql1DjaJfCpd0LDNJqVHuNCv8uKPDiqZAqAn7
|
|
|
326
325
|
gobby/tasks/validation_models.py,sha256=rOzNKEIwgCusn8CRH6a7DMj37JywaBju3mAvrVVPa7I,2755
|
|
327
326
|
gobby/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
328
327
|
gobby/tools/summarizer.py,sha256=IUPAbp7whQoP_TeeknGrTMxWbzz-P597Zl2-EY0foQI,9186
|
|
329
|
-
gobby/tui/__init__.py,sha256=g8Mua5f7322t8c8A1m8_yVm3j5Ii9tTwAX4fND75pQQ,140
|
|
330
|
-
gobby/tui/api_client.py,sha256=-ewySqyGGUCPOKYMxQooKmvUSpmX2T4Pnkw0YI8nYuw,9682
|
|
331
|
-
gobby/tui/app.py,sha256=8v7dIsVbMT069WAo8bfSAWT6CpwGEbb5Jwab3yZ36JM,10703
|
|
332
|
-
gobby/tui/ws_client.py,sha256=-4Y5GmPrHS9E-bf0sg-DgKLTzPweps7x5QSqUhLd6M0,8995
|
|
333
|
-
gobby/tui/screens/__init__.py,sha256=pyiFiXDzBu5U9f_geBcrNQY1Mw2PnQjIy4tc368w2Js,800
|
|
334
|
-
gobby/tui/screens/agents.py,sha256=SC9XtmBlNBOPYhF5uBgznsuBztKB4XLB1jJ_4NvWz-w,10536
|
|
335
|
-
gobby/tui/screens/chat.py,sha256=xQMXOKLgIzQDG9mWyeox7-q5eujYab9yNEbyUFOVPBQ,13991
|
|
336
|
-
gobby/tui/screens/dashboard.py,sha256=WAdpMJhXEj56rauyY0psXMWofAiL-HyuZghsr5N4kIs,12079
|
|
337
|
-
gobby/tui/screens/memory.py,sha256=5Yj733uq5f3GGoPoSbHyw5fCOBD_rXiJH4Y-K8D1Fdk,9399
|
|
338
|
-
gobby/tui/screens/metrics.py,sha256=FkW1pfRB5GETRve2FGtkEOku8M6Aw04saWBaoWDZguU,7012
|
|
339
|
-
gobby/tui/screens/orchestrator.py,sha256=cNyOqWjL_m1nsuwm5g9eSmdIf_ImtgTjeaBm7Ha6BDA,26973
|
|
340
|
-
gobby/tui/screens/sessions.py,sha256=HCVqN4OCHEjLwViTh7Znhvh8b7DhqkVh1DJknaFeVfo,13307
|
|
341
|
-
gobby/tui/screens/tasks.py,sha256=pwQsJBBTBXwKTxVstuAi49ZC7e9yY_qmZ8gLES7zJtI,14232
|
|
342
|
-
gobby/tui/screens/workflows.py,sha256=1dsb9GtVuWWW1f2Iybz0nEKpVFJ9njPkZJ6jt36AFhQ,9175
|
|
343
|
-
gobby/tui/screens/worktrees.py,sha256=MP8egSz5H-V15ZzhXxFp-x2P9MgD6AlweRW7fszG0xI,5377
|
|
344
|
-
gobby/tui/widgets/__init__.py,sha256=2HwaceTJVXQ-ilhNABbqtG19cSvz6WcwEUdNH4bvX6I,651
|
|
345
|
-
gobby/tui/widgets/chat.py,sha256=AASxv61NKBA6xnrQ8dRDIoyUY_Zcfu6nNYtV4wV2pSQ,5106
|
|
346
|
-
gobby/tui/widgets/conductor.py,sha256=f5df0zjYjMku-buvwjNjOMKqOcs7VzncmD-4jyQjPZ0,2762
|
|
347
|
-
gobby/tui/widgets/menu.py,sha256=4pUAfgbkjqc9PKQSUJ-pV2kJ7VCOsi1_G0eXuwZCP3E,3644
|
|
348
|
-
gobby/tui/widgets/message_panel.py,sha256=cw_s8J8LxUpyuP4FSQHVt6__7FRB-q11mozxVxEKRsQ,4416
|
|
349
|
-
gobby/tui/widgets/review_gate.py,sha256=a22ZHTYYdQxyNQB_e3mqYHuti0yJkt5UKr1gcfnz788,6607
|
|
350
|
-
gobby/tui/widgets/task_tree.py,sha256=ZiSB8PImhsOz_lr8yNukZjil9A4hRz63vIvsonDU1SY,2910
|
|
351
|
-
gobby/tui/widgets/token_budget.py,sha256=4qouo_-FEYjAvBujyrM-KdD69VtP6JzmWVml5IeaEhM,4659
|
|
352
328
|
gobby/utils/__init__.py,sha256=GRlImMV99Y1_keGckfJcRqtYijxDMi5cmgEuiC-ZnKc,55
|
|
353
329
|
gobby/utils/daemon_client.py,sha256=EQC85sap8lat5pTTMEYhqaqAMXPmiND8VIXjhYuzGX0,7825
|
|
354
330
|
gobby/utils/git.py,sha256=zKuL0nVJItAoqO1WmYJWN7Uw4q8jYGdS3ckhWtkjfqM,6547
|
|
@@ -370,23 +346,23 @@ gobby/workflows/audit_helpers.py,sha256=kWgshrF-eyy17I59ugHC1-LUCVpzq_IP-dhfggnk
|
|
|
370
346
|
gobby/workflows/autonomous_actions.py,sha256=F7ziXV99rQEFtvv2ClT1bC7UR5x1R6l18tiWxChOHEQ,9202
|
|
371
347
|
gobby/workflows/context_actions.py,sha256=zIPbIGacyKLcfKwP0dCrq-LVMVm84gKLS6iS-P2Pjrs,17927
|
|
372
348
|
gobby/workflows/definitions.py,sha256=eLb_mpquN3xmcqy6I0-_mmRrBKCxht-k2I-4of6RwmU,4343
|
|
373
|
-
gobby/workflows/detection_helpers.py,sha256=
|
|
374
|
-
gobby/workflows/engine.py,sha256=
|
|
375
|
-
gobby/workflows/evaluator.py,sha256=
|
|
349
|
+
gobby/workflows/detection_helpers.py,sha256=o87W3Yc-QTYUy8it_khC0iUV_J0bFnDJ_DkCOU5z0lY,12015
|
|
350
|
+
gobby/workflows/engine.py,sha256=LljsFMB-XZlZEhuizKgrNSThjWVVV6rMerlNFiCt4bU,23814
|
|
351
|
+
gobby/workflows/evaluator.py,sha256=eIhixORAljw5BgwU9IOudW2kTcXyFo_VDBws98lHH-s,29498
|
|
376
352
|
gobby/workflows/git_utils.py,sha256=Kt5fVqHn2KQYx8hQ__C_Cgqz8rf728DFGCmSTXuKfuY,6463
|
|
377
|
-
gobby/workflows/hooks.py,sha256=
|
|
353
|
+
gobby/workflows/hooks.py,sha256=E8TAtK2SYGmRw7hHoM8TlNZx8NmddbXHl7XF5PyEO3U,8495
|
|
378
354
|
gobby/workflows/lifecycle_evaluator.py,sha256=uGgC-xYodyK6b1Jq7Sua4HwIrwxWloHZzrqrVFiosP4,25053
|
|
379
355
|
gobby/workflows/llm_actions.py,sha256=2G-LPy8vXUvZKdcqnGSrDGqxDv4HsFWhk-muianyz8I,3102
|
|
380
356
|
gobby/workflows/loader.py,sha256=0Lzwr_JhYqSiIyA3gIb55sU6PhG0s12rQ9c3EsBG8Mc,13646
|
|
381
357
|
gobby/workflows/mcp_actions.py,sha256=5ZzZSZDLRGKhHgJl2P5wm81UwvQjkJ8pu5caixWNY5g,2556
|
|
382
|
-
gobby/workflows/memory_actions.py,sha256=
|
|
358
|
+
gobby/workflows/memory_actions.py,sha256=Dq9ocsaQbWzMfy1qLH2YWVB4xtiSeT34TH73-K1Yo-U,14650
|
|
383
359
|
gobby/workflows/premature_stop.py,sha256=aOcJDff-C5YhkpTloZHFTtMUTqubIWDWxehTuJQeRaw,5668
|
|
384
|
-
gobby/workflows/safe_evaluator.py,sha256=
|
|
360
|
+
gobby/workflows/safe_evaluator.py,sha256=6xOvYCco0C4bGkaUtsW9x4NERB1v4Pi3SNPezQbGHjo,7021
|
|
385
361
|
gobby/workflows/session_actions.py,sha256=pB2pCSUwpfiTFcEj_NMXxSpvmzJj6QG_GFJfOGQMoMM,5618
|
|
386
362
|
gobby/workflows/state_actions.py,sha256=K7g_zWmIdWdDi5gcW_4uEL-yLyihBbA67T0uA3at2CU,5423
|
|
387
363
|
gobby/workflows/state_manager.py,sha256=tE_QXo_HB-nk6rb0MXneXhYs4o47QJondlnuAsh8QEY,4394
|
|
388
364
|
gobby/workflows/stop_signal_actions.py,sha256=53m8TpwJxIsEDNal0rY5OZREkFM19LJ5o-7WwjcBEbs,6876
|
|
389
|
-
gobby/workflows/summary_actions.py,sha256=
|
|
365
|
+
gobby/workflows/summary_actions.py,sha256=5J68Vnw3GNNxwQCYNuVd-0iRgIA4MwRcT9D30-DxJeU,19550
|
|
390
366
|
gobby/workflows/task_actions.py,sha256=tM61ilG0xpahCst9Aq0373QddSDr2yiWiReh49alQuA,8496
|
|
391
367
|
gobby/workflows/task_sync_actions.py,sha256=5DsvUanp8kcGckZpmezXePXfmDJlX4Qp8SMOffL2mcc,11755
|
|
392
368
|
gobby/workflows/templates.py,sha256=cxHxLZQHy0qHeiyzjHpN_CwvXN4uhrRaSSK2gqq_AC4,1918
|
|
@@ -395,7 +371,7 @@ gobby/workflows/webhook.py,sha256=96HE2u7E2mKy9e5XbnDLRw3mAMNJ0mtkS2LPuYUv4ho,68
|
|
|
395
371
|
gobby/workflows/webhook_actions.py,sha256=Ebi8BZ4eKqfW_zS5sBGuP1VrNtiw1gqhdj9iyNvOwfg,6623
|
|
396
372
|
gobby/workflows/webhook_executor.py,sha256=9oxGu1WUYRCoVSwtesdhzbxqb6nkMKDLCz2JXa496Y0,13090
|
|
397
373
|
gobby/workflows/enforcement/__init__.py,sha256=xW7UOoT2EHfVdDsgg6s8ReYaKFWwf69gZtIxHpiPdi0,1478
|
|
398
|
-
gobby/workflows/enforcement/blocking.py,sha256=
|
|
374
|
+
gobby/workflows/enforcement/blocking.py,sha256=zNm7JHYk5EEvOj0QN47Fr5728QaR65CTu5V3PjEieAQ,10919
|
|
399
375
|
gobby/workflows/enforcement/commit_policy.py,sha256=FCcRJWH8KazE2F2NRuKfWoZIaTxvhFGpas_eLOu3J74,10949
|
|
400
376
|
gobby/workflows/enforcement/handlers.py,sha256=nHvFind7xr0B2xS3H0oqXwCoZZlA98ccfNL05OZ9hGg,8743
|
|
401
377
|
gobby/workflows/enforcement/task_policy.py,sha256=9NDG6S5HtlCPkOF24KFz656Bhcd9UhBhvZv-x9RMboU,22292
|
|
@@ -404,9 +380,9 @@ gobby/worktrees/git.py,sha256=qkd589nUx0s0ZIcmD9JDeiPfAaa-kksuXbEMvHrqBm0,23456
|
|
|
404
380
|
gobby/worktrees/merge/__init__.py,sha256=MSL_S4IXWmEdGOd5owgYTyQ8JdpM9GstUhDemWESFdA,471
|
|
405
381
|
gobby/worktrees/merge/conflict_parser.py,sha256=b0d8J98OOn8Tuq4uvFP8Ze4HAGNS_zsf-Y-u4t5uPdM,5660
|
|
406
382
|
gobby/worktrees/merge/resolver.py,sha256=kRtixWOrbwqzFfwMMc1H9jQAa8EvWq4wXEoEtQHhVm4,17041
|
|
407
|
-
gobby-0.2.
|
|
408
|
-
gobby-0.2.
|
|
409
|
-
gobby-0.2.
|
|
410
|
-
gobby-0.2.
|
|
411
|
-
gobby-0.2.
|
|
412
|
-
gobby-0.2.
|
|
383
|
+
gobby-0.2.8.dist-info/licenses/LICENSE.md,sha256=OXz1KVKRLQB1BigqLwwSYiemL6gB9vKr63ddV5LGiFE,9867
|
|
384
|
+
gobby-0.2.8.dist-info/METADATA,sha256=UMgAME1mFeEOThSPl0itOEy7exEdNSvC86qPT45H3gc,14138
|
|
385
|
+
gobby-0.2.8.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
386
|
+
gobby-0.2.8.dist-info/entry_points.txt,sha256=XHhzeXTKGGTCiazxtWQ05XDajAU4RRoCGxqr4gAWfp0,40
|
|
387
|
+
gobby-0.2.8.dist-info/top_level.txt,sha256=BMSZ-0OdJVLH2xLypOmmVrl17G9TGI6RqKFZWxd6MCg,6
|
|
388
|
+
gobby-0.2.8.dist-info/RECORD,,
|
gobby/cli/tui.py
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"""TUI command for launching the Gobby dashboard."""
|
|
2
|
-
|
|
3
|
-
import click
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
@click.command()
|
|
7
|
-
@click.option(
|
|
8
|
-
"--port",
|
|
9
|
-
"-p",
|
|
10
|
-
default=60887,
|
|
11
|
-
help="Daemon HTTP port",
|
|
12
|
-
show_default=True,
|
|
13
|
-
)
|
|
14
|
-
@click.option(
|
|
15
|
-
"--ws-port",
|
|
16
|
-
"-w",
|
|
17
|
-
default=60888,
|
|
18
|
-
help="Daemon WebSocket port",
|
|
19
|
-
show_default=True,
|
|
20
|
-
)
|
|
21
|
-
def ui(port: int, ws_port: int) -> None:
|
|
22
|
-
"""Launch the Gobby TUI dashboard.
|
|
23
|
-
|
|
24
|
-
The TUI provides a terminal-based interface for monitoring and managing
|
|
25
|
-
Gobby sessions, tasks, agents, and more.
|
|
26
|
-
|
|
27
|
-
Requires the Gobby daemon to be running (gobby start).
|
|
28
|
-
"""
|
|
29
|
-
from gobby.tui.app import run_tui
|
|
30
|
-
|
|
31
|
-
daemon_url = f"http://localhost:{port}"
|
|
32
|
-
ws_url = f"ws://localhost:{ws_port}"
|
|
33
|
-
|
|
34
|
-
run_tui(daemon_url=daemon_url, ws_url=ws_url)
|