gobby 0.2.6__py3-none-any.whl → 0.2.7__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.
Files changed (146) hide show
  1. gobby/__init__.py +1 -1
  2. gobby/adapters/__init__.py +2 -1
  3. gobby/adapters/codex_impl/__init__.py +28 -0
  4. gobby/adapters/codex_impl/adapter.py +722 -0
  5. gobby/adapters/codex_impl/client.py +679 -0
  6. gobby/adapters/codex_impl/protocol.py +20 -0
  7. gobby/adapters/codex_impl/types.py +68 -0
  8. gobby/agents/definitions.py +11 -1
  9. gobby/agents/isolation.py +395 -0
  10. gobby/agents/sandbox.py +261 -0
  11. gobby/agents/spawn.py +42 -287
  12. gobby/agents/spawn_executor.py +385 -0
  13. gobby/agents/spawners/__init__.py +24 -0
  14. gobby/agents/spawners/command_builder.py +189 -0
  15. gobby/agents/spawners/embedded.py +21 -2
  16. gobby/agents/spawners/headless.py +21 -2
  17. gobby/agents/spawners/prompt_manager.py +125 -0
  18. gobby/cli/install.py +4 -4
  19. gobby/cli/installers/claude.py +6 -0
  20. gobby/cli/installers/gemini.py +6 -0
  21. gobby/cli/installers/shared.py +103 -4
  22. gobby/cli/sessions.py +1 -1
  23. gobby/cli/utils.py +9 -2
  24. gobby/config/__init__.py +12 -97
  25. gobby/config/app.py +10 -94
  26. gobby/config/extensions.py +2 -2
  27. gobby/config/features.py +7 -130
  28. gobby/config/tasks.py +4 -28
  29. gobby/hooks/__init__.py +0 -13
  30. gobby/hooks/event_handlers.py +45 -2
  31. gobby/hooks/hook_manager.py +2 -2
  32. gobby/hooks/plugins.py +1 -1
  33. gobby/hooks/webhooks.py +1 -1
  34. gobby/llm/resolver.py +3 -2
  35. gobby/mcp_proxy/importer.py +62 -4
  36. gobby/mcp_proxy/instructions.py +2 -0
  37. gobby/mcp_proxy/registries.py +1 -4
  38. gobby/mcp_proxy/services/recommendation.py +43 -11
  39. gobby/mcp_proxy/tools/agents.py +31 -731
  40. gobby/mcp_proxy/tools/clones.py +0 -385
  41. gobby/mcp_proxy/tools/memory.py +2 -2
  42. gobby/mcp_proxy/tools/sessions/__init__.py +14 -0
  43. gobby/mcp_proxy/tools/sessions/_commits.py +232 -0
  44. gobby/mcp_proxy/tools/sessions/_crud.py +253 -0
  45. gobby/mcp_proxy/tools/sessions/_factory.py +63 -0
  46. gobby/mcp_proxy/tools/sessions/_handoff.py +499 -0
  47. gobby/mcp_proxy/tools/sessions/_messages.py +138 -0
  48. gobby/mcp_proxy/tools/skills/__init__.py +14 -29
  49. gobby/mcp_proxy/tools/spawn_agent.py +417 -0
  50. gobby/mcp_proxy/tools/tasks/_lifecycle.py +52 -18
  51. gobby/mcp_proxy/tools/tasks/_lifecycle_validation.py +1 -1
  52. gobby/mcp_proxy/tools/worktrees.py +0 -343
  53. gobby/memory/ingestion/__init__.py +5 -0
  54. gobby/memory/ingestion/multimodal.py +221 -0
  55. gobby/memory/manager.py +62 -283
  56. gobby/memory/search/__init__.py +10 -0
  57. gobby/memory/search/coordinator.py +248 -0
  58. gobby/memory/services/__init__.py +5 -0
  59. gobby/memory/services/crossref.py +142 -0
  60. gobby/prompts/loader.py +5 -2
  61. gobby/servers/http.py +1 -4
  62. gobby/servers/routes/admin.py +14 -0
  63. gobby/servers/routes/mcp/endpoints/__init__.py +61 -0
  64. gobby/servers/routes/mcp/endpoints/discovery.py +405 -0
  65. gobby/servers/routes/mcp/endpoints/execution.py +568 -0
  66. gobby/servers/routes/mcp/endpoints/registry.py +378 -0
  67. gobby/servers/routes/mcp/endpoints/server.py +304 -0
  68. gobby/servers/routes/mcp/hooks.py +1 -1
  69. gobby/servers/routes/mcp/tools.py +48 -1506
  70. gobby/sessions/lifecycle.py +1 -1
  71. gobby/sessions/processor.py +10 -0
  72. gobby/sessions/transcripts/base.py +1 -0
  73. gobby/sessions/transcripts/claude.py +15 -5
  74. gobby/skills/parser.py +30 -2
  75. gobby/storage/migrations.py +159 -372
  76. gobby/storage/sessions.py +43 -7
  77. gobby/storage/skills.py +37 -4
  78. gobby/storage/tasks/_lifecycle.py +18 -3
  79. gobby/sync/memories.py +1 -1
  80. gobby/tasks/external_validator.py +1 -1
  81. gobby/tasks/validation.py +22 -20
  82. gobby/tools/summarizer.py +91 -10
  83. gobby/utils/project_context.py +2 -3
  84. gobby/utils/status.py +13 -0
  85. gobby/workflows/actions.py +221 -1217
  86. gobby/workflows/artifact_actions.py +31 -0
  87. gobby/workflows/autonomous_actions.py +11 -0
  88. gobby/workflows/context_actions.py +50 -1
  89. gobby/workflows/enforcement/__init__.py +47 -0
  90. gobby/workflows/enforcement/blocking.py +269 -0
  91. gobby/workflows/enforcement/commit_policy.py +283 -0
  92. gobby/workflows/enforcement/handlers.py +269 -0
  93. gobby/workflows/enforcement/task_policy.py +542 -0
  94. gobby/workflows/git_utils.py +106 -0
  95. gobby/workflows/llm_actions.py +30 -0
  96. gobby/workflows/mcp_actions.py +20 -1
  97. gobby/workflows/memory_actions.py +80 -0
  98. gobby/workflows/safe_evaluator.py +183 -0
  99. gobby/workflows/session_actions.py +44 -0
  100. gobby/workflows/state_actions.py +60 -1
  101. gobby/workflows/stop_signal_actions.py +55 -0
  102. gobby/workflows/summary_actions.py +94 -1
  103. gobby/workflows/task_sync_actions.py +347 -0
  104. gobby/workflows/todo_actions.py +34 -1
  105. gobby/workflows/webhook_actions.py +185 -0
  106. {gobby-0.2.6.dist-info → gobby-0.2.7.dist-info}/METADATA +6 -1
  107. {gobby-0.2.6.dist-info → gobby-0.2.7.dist-info}/RECORD +111 -111
  108. {gobby-0.2.6.dist-info → gobby-0.2.7.dist-info}/WHEEL +1 -1
  109. gobby/adapters/codex.py +0 -1332
  110. gobby/install/claude/commands/gobby/bug.md +0 -51
  111. gobby/install/claude/commands/gobby/chore.md +0 -51
  112. gobby/install/claude/commands/gobby/epic.md +0 -52
  113. gobby/install/claude/commands/gobby/eval.md +0 -235
  114. gobby/install/claude/commands/gobby/feat.md +0 -49
  115. gobby/install/claude/commands/gobby/nit.md +0 -52
  116. gobby/install/claude/commands/gobby/ref.md +0 -52
  117. gobby/mcp_proxy/tools/session_messages.py +0 -1055
  118. gobby/prompts/defaults/expansion/system.md +0 -119
  119. gobby/prompts/defaults/expansion/user.md +0 -48
  120. gobby/prompts/defaults/external_validation/agent.md +0 -72
  121. gobby/prompts/defaults/external_validation/external.md +0 -63
  122. gobby/prompts/defaults/external_validation/spawn.md +0 -83
  123. gobby/prompts/defaults/external_validation/system.md +0 -6
  124. gobby/prompts/defaults/features/import_mcp.md +0 -22
  125. gobby/prompts/defaults/features/import_mcp_github.md +0 -17
  126. gobby/prompts/defaults/features/import_mcp_search.md +0 -16
  127. gobby/prompts/defaults/features/recommend_tools.md +0 -32
  128. gobby/prompts/defaults/features/recommend_tools_hybrid.md +0 -35
  129. gobby/prompts/defaults/features/recommend_tools_llm.md +0 -30
  130. gobby/prompts/defaults/features/server_description.md +0 -20
  131. gobby/prompts/defaults/features/server_description_system.md +0 -6
  132. gobby/prompts/defaults/features/task_description.md +0 -31
  133. gobby/prompts/defaults/features/task_description_system.md +0 -6
  134. gobby/prompts/defaults/features/tool_summary.md +0 -17
  135. gobby/prompts/defaults/features/tool_summary_system.md +0 -6
  136. gobby/prompts/defaults/handoff/compact.md +0 -63
  137. gobby/prompts/defaults/handoff/session_end.md +0 -57
  138. gobby/prompts/defaults/memory/extract.md +0 -61
  139. gobby/prompts/defaults/research/step.md +0 -58
  140. gobby/prompts/defaults/validation/criteria.md +0 -47
  141. gobby/prompts/defaults/validation/validate.md +0 -38
  142. gobby/storage/migrations_legacy.py +0 -1359
  143. gobby/workflows/task_enforcement_actions.py +0 -1343
  144. {gobby-0.2.6.dist-info → gobby-0.2.7.dist-info}/entry_points.txt +0 -0
  145. {gobby-0.2.6.dist-info → gobby-0.2.7.dist-info}/licenses/LICENSE.md +0 -0
  146. {gobby-0.2.6.dist-info → gobby-0.2.7.dist-info}/top_level.txt +0 -0
@@ -1,63 +0,0 @@
1
- ---
2
- description: Compact handoff summary prompt for cumulative compression
3
- required_variables:
4
- - transcript_summary
5
- - last_messages
6
- - git_status
7
- - file_changes
8
- optional_variables:
9
- - previous_summary
10
- - todo_list
11
- ---
12
- You are creating a session continuation summary after a compaction event.
13
-
14
- ## Context from Earlier in This Session (if any):
15
- {{ previous_summary }}
16
-
17
- If there is previous context above, focus your summary on what happened AFTER
18
- that point. Compress the historical context into a brief "Session History" section.
19
- If no previous context, this is the first segment - summarize the full session.
20
-
21
- ## Current Transcript:
22
- {{ transcript_summary }}
23
-
24
- ## Last Messages:
25
- {{ last_messages }}
26
-
27
- ## Git Status:
28
- {{ git_status }}
29
-
30
- ## Files Changed:
31
- {{ file_changes }}
32
-
33
- {% if todo_list %}
34
- {{ todo_list }}
35
- {% endif %}
36
-
37
- ---
38
-
39
- Create a continuation summary optimized for resuming work after compaction.
40
- Use these sections:
41
-
42
- ### Current Focus
43
- [What is being actively worked on RIGHT NOW - be specific and detailed.
44
- This is the most important section.]
45
-
46
- ### This Segment's Progress
47
- [Bullet points of what was accomplished in this segment]
48
-
49
- ### Session History
50
- [1-2 sentences summarizing the overall session journey. Include if there was
51
- previous context, otherwise skip this section.]
52
-
53
- ### Technical State
54
- - Key files modified: [list files]
55
- - Git status: [uncommitted changes summary]
56
- - Any blockers or pending items
57
-
58
- ### Next Steps
59
- [Numbered list of concrete actions to take when resuming]
60
-
61
- IMPORTANT: Prioritize recency. "Current Focus" and "This Segment's Progress"
62
- should be detailed and specific. Historical context should be compressed.
63
- Use only ASCII-safe characters.
@@ -1,57 +0,0 @@
1
- ---
2
- description: Session end handoff summary prompt
3
- required_variables:
4
- - transcript_summary
5
- - last_messages
6
- - git_status
7
- - file_changes
8
- optional_variables:
9
- - todo_list
10
- ---
11
- Analyze this Claude Code session transcript and create a comprehensive session summary.
12
-
13
- ## Transcript (last 50 turns):
14
- {{ transcript_summary }}
15
-
16
- ## Last Messages:
17
- {{ last_messages }}
18
-
19
- ## Git Status:
20
- {{ git_status }}
21
-
22
- ## Files Changed:
23
- {{ file_changes }}
24
-
25
- Create a markdown summary with the following sections (do NOT include a top-level '# Session Summary' header):
26
-
27
- ## Overview
28
- [1-2 paragraph summary of what was accomplished in this session]
29
-
30
- ## Key Decisions
31
- [List of important technical or architectural decisions made, with bullet points]
32
-
33
- ## Important Lessons Learned
34
- [Technical insights, gotchas, or patterns discovered, with bullet points]
35
-
36
- ## Substantive Interrupts
37
- [Times when the user changed direction significantly - NOT simple "continue" or "resume" prompts]
38
-
39
- ## Research & Epiphanies
40
- [Key discoveries from research or debugging that should be remembered, with bullet points]
41
-
42
- ## Files Changed
43
- {{ file_changes }}
44
- [Add specific details about WHY each file was changed and WHAT the changes accomplish.]
45
-
46
- ## Git Status
47
- ```
48
- {{ git_status }}
49
- ```
50
-
51
- {{ todo_list }}
52
-
53
- ## Next Steps
54
- [Concrete, numbered suggestions for what to do when resuming work. Be specific and actionable.]
55
-
56
- Focus on actionable insights and context that would be valuable when resuming work later.
57
- Use only ASCII-safe characters - avoid Unicode em-dashes, smart quotes, or special characters.
@@ -1,61 +0,0 @@
1
- ---
2
- description: Extract reusable memories from session transcripts
3
- required_variables:
4
- - transcript_summary
5
- - project_name
6
- optional_variables:
7
- - task_refs
8
- - files
9
- - tool_summary
10
- - min_importance
11
- - max_memories
12
- defaults:
13
- min_importance: 0.7
14
- max_memories: 5
15
- ---
16
- Analyze this coding session and extract ONLY high-value, reusable memories.
17
-
18
- ## Session Context
19
- - Project: {{ project_name }}
20
- {% if task_refs %}- Tasks worked: {{ task_refs }}{% endif %}
21
- {% if files %}- Files modified: {{ files }}{% endif %}
22
- {% if tool_summary %}- Key tool actions: {{ tool_summary }}{% endif %}
23
-
24
- ## Session Transcript
25
- {{ transcript_summary }}
26
-
27
- ## Extract memories that are:
28
- - **FACTS**: Project architecture, technology choices, API patterns, file locations
29
- - **PATTERNS**: Code conventions, testing approaches, file organization, naming conventions
30
- - **PREFERENCES**: User-stated preferences about style, approach, or tools
31
- - **CONTEXT**: Important background that helps future work on this project
32
-
33
- ## DO NOT extract:
34
- - Temporary debugging information
35
- - Session-specific state that won't apply later
36
- - Obvious/generic programming knowledge
37
- - Information already documented in the codebase
38
- - Duplicate information from previous memories
39
-
40
- ## Output Format
41
- Return a JSON array of memories. Each memory should be:
42
- - Self-contained and understandable without session context
43
- - Specific to this project (not generic programming advice)
44
- - Actionable or informative for future sessions
45
-
46
- ```json
47
- [
48
- {
49
- "content": "The reusable knowledge (1-3 sentences, specific and actionable)",
50
- "memory_type": "fact | pattern | preference | context",
51
- "importance": 0.7,
52
- "tags": ["relevant", "tags"]
53
- }
54
- ]
55
- ```
56
-
57
- Guidelines:
58
- - Only include memories with importance >= {{ min_importance | default(0.7) }}
59
- - Maximum {{ max_memories | default(5) }} memories
60
- - If nothing worth remembering, return an empty array: []
61
- - importance scale: 0.7 = useful, 0.8 = valuable, 0.9 = critical, 1.0 = essential
@@ -1,58 +0,0 @@
1
- ---
2
- name: research-step
3
- description: ReAct loop prompt for codebase research
4
- version: "1.0"
5
- variables:
6
- task_title:
7
- type: str
8
- required: true
9
- description: Task title being researched
10
- task_description:
11
- type: str
12
- default: ""
13
- description: Task description
14
- found_files:
15
- type: list
16
- default: []
17
- description: List of files found so far
18
- snippets_keys:
19
- type: list
20
- default: []
21
- description: List of snippet keys/paths found
22
- history:
23
- type: str
24
- default: ""
25
- description: Formatted history of recent agent turns
26
- step:
27
- type: int
28
- required: true
29
- description: Current step number (1-indexed)
30
- max_steps:
31
- type: int
32
- default: 10
33
- description: Maximum number of steps
34
- search_tool_section:
35
- type: str
36
- default: ""
37
- description: Optional web search tool description if available
38
- ---
39
- Task: {{ task_title }}
40
- Description: {{ task_description }}
41
-
42
- You are researching this task to identify relevant files and implementation details.
43
- You have access to the following tools:
44
-
45
- 1. glob(pattern): Find files matching a pattern (e.g. "src/**/*.py")
46
- 2. grep(pattern, path): Search for text in files (e.g. "def login", "src/")
47
- 3. read_file(path): Read the content of a file
48
- 4. done(reason): Finish research
49
- {{ search_tool_section }}
50
-
51
- Current Context:
52
- Found Files: {{ found_files }}
53
- Snippets: {{ snippets_keys }}
54
-
55
- History:
56
- {{ history }}
57
-
58
- Step {{ step }}/{{ max_steps }}. What is your next move? Respond with THOUGHT followed by ACTION.
@@ -1,47 +0,0 @@
1
- ---
2
- name: validation-criteria
3
- description: Prompt for generating validation criteria from task description
4
- version: "1.0"
5
- variables:
6
- title:
7
- type: str
8
- required: true
9
- description: Task title
10
- description:
11
- type: str
12
- default: "(no description)"
13
- description: Task description
14
- ---
15
- Generate validation criteria for this task.
16
-
17
- Task: {{ title }}
18
- Description: {{ description }}
19
-
20
- CRITICAL RULES - You MUST follow these:
21
- 1. **Only stated requirements** - Include ONLY requirements explicitly written in the title or description
22
- 2. **No invented values** - Do NOT invent specific numbers, timeouts, thresholds, or limits unless they appear in the task
23
- 3. **No invented edge cases** - Do NOT add edge cases, error scenarios, or boundary conditions beyond what's described
24
- 4. **Proportional detail** - Vague tasks get vague criteria; detailed tasks get detailed criteria
25
- 5. **When in doubt, leave it out** - If something isn't mentioned, don't include it
26
-
27
- For vague requirements like "fix X" or "add Y", use criteria like:
28
- - "X no longer produces the reported error/warning"
29
- - "Y functionality works as expected"
30
- - "Existing tests continue to pass"
31
- - "No regressions introduced"
32
-
33
- DO NOT generate criteria like:
34
- - "timeout defaults to 30 seconds" (unless 30 seconds is in the task description)
35
- - "handles edge case Z" (unless Z is mentioned in the task)
36
- - "logs with format X" (unless that format is specified)
37
-
38
- Format as markdown checkboxes:
39
- ## Deliverable
40
- - [ ] What the task explicitly asks for
41
-
42
- ## Functional Requirements
43
- - [ ] Only requirements stated in the description
44
-
45
- ## Verification
46
- - [ ] Tests pass (if applicable)
47
- - [ ] No regressions
@@ -1,38 +0,0 @@
1
- ---
2
- name: validation-validate
3
- description: Base prompt for validating task completion against criteria
4
- version: "1.0"
5
- variables:
6
- title:
7
- type: str
8
- required: true
9
- description: Task title
10
- category_section:
11
- type: str
12
- default: ""
13
- description: Optional category/test strategy section
14
- criteria_text:
15
- type: str
16
- required: true
17
- description: Validation criteria or task description
18
- changes_section:
19
- type: str
20
- required: true
21
- description: Summary of changes made (files, diffs, etc.)
22
- file_context:
23
- type: str
24
- default: ""
25
- description: Optional file content context
26
- ---
27
- Validate if the following changes satisfy the requirements.
28
-
29
- Task: {{ title }}
30
- {{ category_section }}{{ criteria_text }}
31
-
32
- {{ changes_section }}
33
- IMPORTANT: Return ONLY a JSON object, nothing else. No explanation, no preamble.
34
- Format: {"status": "valid", "feedback": "..."} or {"status": "invalid", "feedback": "..."}
35
- {% if file_context %}
36
- File Context:
37
- {{ file_context }}
38
- {% endif %}