gobby 0.2.5__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/__init__.py +3 -0
- gobby/adapters/__init__.py +30 -0
- gobby/adapters/base.py +93 -0
- gobby/adapters/claude_code.py +276 -0
- gobby/adapters/codex.py +1292 -0
- gobby/adapters/gemini.py +343 -0
- gobby/agents/__init__.py +37 -0
- gobby/agents/codex_session.py +120 -0
- gobby/agents/constants.py +112 -0
- gobby/agents/context.py +362 -0
- gobby/agents/definitions.py +133 -0
- gobby/agents/gemini_session.py +111 -0
- gobby/agents/registry.py +618 -0
- gobby/agents/runner.py +968 -0
- gobby/agents/session.py +259 -0
- gobby/agents/spawn.py +916 -0
- gobby/agents/spawners/__init__.py +77 -0
- gobby/agents/spawners/base.py +142 -0
- gobby/agents/spawners/cross_platform.py +266 -0
- gobby/agents/spawners/embedded.py +225 -0
- gobby/agents/spawners/headless.py +226 -0
- gobby/agents/spawners/linux.py +125 -0
- gobby/agents/spawners/macos.py +277 -0
- gobby/agents/spawners/windows.py +308 -0
- gobby/agents/tty_config.py +319 -0
- gobby/autonomous/__init__.py +32 -0
- gobby/autonomous/progress_tracker.py +447 -0
- gobby/autonomous/stop_registry.py +269 -0
- gobby/autonomous/stuck_detector.py +383 -0
- gobby/cli/__init__.py +67 -0
- gobby/cli/__main__.py +8 -0
- gobby/cli/agents.py +529 -0
- gobby/cli/artifacts.py +266 -0
- gobby/cli/daemon.py +329 -0
- gobby/cli/extensions.py +526 -0
- gobby/cli/github.py +263 -0
- gobby/cli/init.py +53 -0
- gobby/cli/install.py +614 -0
- gobby/cli/installers/__init__.py +37 -0
- gobby/cli/installers/antigravity.py +65 -0
- gobby/cli/installers/claude.py +363 -0
- gobby/cli/installers/codex.py +192 -0
- gobby/cli/installers/gemini.py +294 -0
- gobby/cli/installers/git_hooks.py +377 -0
- gobby/cli/installers/shared.py +737 -0
- gobby/cli/linear.py +250 -0
- gobby/cli/mcp.py +30 -0
- gobby/cli/mcp_proxy.py +698 -0
- gobby/cli/memory.py +304 -0
- gobby/cli/merge.py +384 -0
- gobby/cli/projects.py +79 -0
- gobby/cli/sessions.py +622 -0
- gobby/cli/tasks/__init__.py +30 -0
- gobby/cli/tasks/_utils.py +658 -0
- gobby/cli/tasks/ai.py +1025 -0
- gobby/cli/tasks/commits.py +169 -0
- gobby/cli/tasks/crud.py +685 -0
- gobby/cli/tasks/deps.py +135 -0
- gobby/cli/tasks/labels.py +63 -0
- gobby/cli/tasks/main.py +273 -0
- gobby/cli/tasks/search.py +178 -0
- gobby/cli/tui.py +34 -0
- gobby/cli/utils.py +513 -0
- gobby/cli/workflows.py +927 -0
- gobby/cli/worktrees.py +481 -0
- gobby/config/__init__.py +129 -0
- gobby/config/app.py +551 -0
- gobby/config/extensions.py +167 -0
- gobby/config/features.py +472 -0
- gobby/config/llm_providers.py +98 -0
- gobby/config/logging.py +66 -0
- gobby/config/mcp.py +346 -0
- gobby/config/persistence.py +247 -0
- gobby/config/servers.py +141 -0
- gobby/config/sessions.py +250 -0
- gobby/config/tasks.py +784 -0
- gobby/hooks/__init__.py +104 -0
- gobby/hooks/artifact_capture.py +213 -0
- gobby/hooks/broadcaster.py +243 -0
- gobby/hooks/event_handlers.py +723 -0
- gobby/hooks/events.py +218 -0
- gobby/hooks/git.py +169 -0
- gobby/hooks/health_monitor.py +171 -0
- gobby/hooks/hook_manager.py +856 -0
- gobby/hooks/hook_types.py +575 -0
- gobby/hooks/plugins.py +813 -0
- gobby/hooks/session_coordinator.py +396 -0
- gobby/hooks/verification_runner.py +268 -0
- gobby/hooks/webhooks.py +339 -0
- gobby/install/claude/commands/gobby/bug.md +51 -0
- gobby/install/claude/commands/gobby/chore.md +51 -0
- gobby/install/claude/commands/gobby/epic.md +52 -0
- gobby/install/claude/commands/gobby/eval.md +235 -0
- gobby/install/claude/commands/gobby/feat.md +49 -0
- gobby/install/claude/commands/gobby/nit.md +52 -0
- gobby/install/claude/commands/gobby/ref.md +52 -0
- gobby/install/claude/hooks/HOOK_SCHEMAS.md +632 -0
- gobby/install/claude/hooks/hook_dispatcher.py +364 -0
- gobby/install/claude/hooks/validate_settings.py +102 -0
- gobby/install/claude/hooks-template.json +118 -0
- gobby/install/codex/hooks/hook_dispatcher.py +153 -0
- gobby/install/codex/prompts/forget.md +7 -0
- gobby/install/codex/prompts/memories.md +7 -0
- gobby/install/codex/prompts/recall.md +7 -0
- gobby/install/codex/prompts/remember.md +13 -0
- gobby/install/gemini/hooks/hook_dispatcher.py +268 -0
- gobby/install/gemini/hooks-template.json +138 -0
- gobby/install/shared/plugins/code_guardian.py +456 -0
- gobby/install/shared/plugins/example_notify.py +331 -0
- gobby/integrations/__init__.py +10 -0
- gobby/integrations/github.py +145 -0
- gobby/integrations/linear.py +145 -0
- gobby/llm/__init__.py +40 -0
- gobby/llm/base.py +120 -0
- gobby/llm/claude.py +578 -0
- gobby/llm/claude_executor.py +503 -0
- gobby/llm/codex.py +322 -0
- gobby/llm/codex_executor.py +513 -0
- gobby/llm/executor.py +316 -0
- gobby/llm/factory.py +34 -0
- gobby/llm/gemini.py +258 -0
- gobby/llm/gemini_executor.py +339 -0
- gobby/llm/litellm.py +287 -0
- gobby/llm/litellm_executor.py +303 -0
- gobby/llm/resolver.py +499 -0
- gobby/llm/service.py +236 -0
- gobby/mcp_proxy/__init__.py +29 -0
- gobby/mcp_proxy/actions.py +175 -0
- gobby/mcp_proxy/daemon_control.py +198 -0
- gobby/mcp_proxy/importer.py +436 -0
- gobby/mcp_proxy/lazy.py +325 -0
- gobby/mcp_proxy/manager.py +798 -0
- gobby/mcp_proxy/metrics.py +609 -0
- gobby/mcp_proxy/models.py +139 -0
- gobby/mcp_proxy/registries.py +215 -0
- gobby/mcp_proxy/schema_hash.py +381 -0
- gobby/mcp_proxy/semantic_search.py +706 -0
- gobby/mcp_proxy/server.py +549 -0
- gobby/mcp_proxy/services/__init__.py +0 -0
- gobby/mcp_proxy/services/fallback.py +306 -0
- gobby/mcp_proxy/services/recommendation.py +224 -0
- gobby/mcp_proxy/services/server_mgmt.py +214 -0
- gobby/mcp_proxy/services/system.py +72 -0
- gobby/mcp_proxy/services/tool_filter.py +231 -0
- gobby/mcp_proxy/services/tool_proxy.py +309 -0
- gobby/mcp_proxy/stdio.py +565 -0
- gobby/mcp_proxy/tools/__init__.py +27 -0
- gobby/mcp_proxy/tools/agents.py +1103 -0
- gobby/mcp_proxy/tools/artifacts.py +207 -0
- gobby/mcp_proxy/tools/hub.py +335 -0
- gobby/mcp_proxy/tools/internal.py +337 -0
- gobby/mcp_proxy/tools/memory.py +543 -0
- gobby/mcp_proxy/tools/merge.py +422 -0
- gobby/mcp_proxy/tools/metrics.py +283 -0
- gobby/mcp_proxy/tools/orchestration/__init__.py +23 -0
- gobby/mcp_proxy/tools/orchestration/cleanup.py +619 -0
- gobby/mcp_proxy/tools/orchestration/monitor.py +380 -0
- gobby/mcp_proxy/tools/orchestration/orchestrate.py +746 -0
- gobby/mcp_proxy/tools/orchestration/review.py +736 -0
- gobby/mcp_proxy/tools/orchestration/utils.py +16 -0
- gobby/mcp_proxy/tools/session_messages.py +1056 -0
- gobby/mcp_proxy/tools/task_dependencies.py +219 -0
- gobby/mcp_proxy/tools/task_expansion.py +591 -0
- gobby/mcp_proxy/tools/task_github.py +393 -0
- gobby/mcp_proxy/tools/task_linear.py +379 -0
- gobby/mcp_proxy/tools/task_orchestration.py +77 -0
- gobby/mcp_proxy/tools/task_readiness.py +522 -0
- gobby/mcp_proxy/tools/task_sync.py +351 -0
- gobby/mcp_proxy/tools/task_validation.py +843 -0
- gobby/mcp_proxy/tools/tasks/__init__.py +25 -0
- gobby/mcp_proxy/tools/tasks/_context.py +112 -0
- gobby/mcp_proxy/tools/tasks/_crud.py +516 -0
- gobby/mcp_proxy/tools/tasks/_factory.py +176 -0
- gobby/mcp_proxy/tools/tasks/_helpers.py +129 -0
- gobby/mcp_proxy/tools/tasks/_lifecycle.py +517 -0
- gobby/mcp_proxy/tools/tasks/_lifecycle_validation.py +301 -0
- gobby/mcp_proxy/tools/tasks/_resolution.py +55 -0
- gobby/mcp_proxy/tools/tasks/_search.py +215 -0
- gobby/mcp_proxy/tools/tasks/_session.py +125 -0
- gobby/mcp_proxy/tools/workflows.py +973 -0
- gobby/mcp_proxy/tools/worktrees.py +1264 -0
- gobby/mcp_proxy/transports/__init__.py +0 -0
- gobby/mcp_proxy/transports/base.py +95 -0
- gobby/mcp_proxy/transports/factory.py +44 -0
- gobby/mcp_proxy/transports/http.py +139 -0
- gobby/mcp_proxy/transports/stdio.py +213 -0
- gobby/mcp_proxy/transports/websocket.py +136 -0
- gobby/memory/backends/__init__.py +116 -0
- gobby/memory/backends/mem0.py +408 -0
- gobby/memory/backends/memu.py +485 -0
- gobby/memory/backends/null.py +111 -0
- gobby/memory/backends/openmemory.py +537 -0
- gobby/memory/backends/sqlite.py +304 -0
- gobby/memory/context.py +87 -0
- gobby/memory/manager.py +1001 -0
- gobby/memory/protocol.py +451 -0
- gobby/memory/search/__init__.py +66 -0
- gobby/memory/search/text.py +127 -0
- gobby/memory/viz.py +258 -0
- gobby/prompts/__init__.py +13 -0
- gobby/prompts/defaults/expansion/system.md +119 -0
- gobby/prompts/defaults/expansion/user.md +48 -0
- gobby/prompts/defaults/external_validation/agent.md +72 -0
- gobby/prompts/defaults/external_validation/external.md +63 -0
- gobby/prompts/defaults/external_validation/spawn.md +83 -0
- gobby/prompts/defaults/external_validation/system.md +6 -0
- gobby/prompts/defaults/features/import_mcp.md +22 -0
- gobby/prompts/defaults/features/import_mcp_github.md +17 -0
- gobby/prompts/defaults/features/import_mcp_search.md +16 -0
- gobby/prompts/defaults/features/recommend_tools.md +32 -0
- gobby/prompts/defaults/features/recommend_tools_hybrid.md +35 -0
- gobby/prompts/defaults/features/recommend_tools_llm.md +30 -0
- gobby/prompts/defaults/features/server_description.md +20 -0
- gobby/prompts/defaults/features/server_description_system.md +6 -0
- gobby/prompts/defaults/features/task_description.md +31 -0
- gobby/prompts/defaults/features/task_description_system.md +6 -0
- gobby/prompts/defaults/features/tool_summary.md +17 -0
- gobby/prompts/defaults/features/tool_summary_system.md +6 -0
- gobby/prompts/defaults/research/step.md +58 -0
- gobby/prompts/defaults/validation/criteria.md +47 -0
- gobby/prompts/defaults/validation/validate.md +38 -0
- gobby/prompts/loader.py +346 -0
- gobby/prompts/models.py +113 -0
- gobby/py.typed +0 -0
- gobby/runner.py +488 -0
- gobby/search/__init__.py +23 -0
- gobby/search/protocol.py +104 -0
- gobby/search/tfidf.py +232 -0
- gobby/servers/__init__.py +7 -0
- gobby/servers/http.py +636 -0
- gobby/servers/models.py +31 -0
- gobby/servers/routes/__init__.py +23 -0
- gobby/servers/routes/admin.py +416 -0
- gobby/servers/routes/dependencies.py +118 -0
- gobby/servers/routes/mcp/__init__.py +24 -0
- gobby/servers/routes/mcp/hooks.py +135 -0
- gobby/servers/routes/mcp/plugins.py +121 -0
- gobby/servers/routes/mcp/tools.py +1337 -0
- gobby/servers/routes/mcp/webhooks.py +159 -0
- gobby/servers/routes/sessions.py +582 -0
- gobby/servers/websocket.py +766 -0
- gobby/sessions/__init__.py +13 -0
- gobby/sessions/analyzer.py +322 -0
- gobby/sessions/lifecycle.py +240 -0
- gobby/sessions/manager.py +563 -0
- gobby/sessions/processor.py +225 -0
- gobby/sessions/summary.py +532 -0
- gobby/sessions/transcripts/__init__.py +41 -0
- gobby/sessions/transcripts/base.py +125 -0
- gobby/sessions/transcripts/claude.py +386 -0
- gobby/sessions/transcripts/codex.py +143 -0
- gobby/sessions/transcripts/gemini.py +195 -0
- gobby/storage/__init__.py +21 -0
- gobby/storage/agents.py +409 -0
- gobby/storage/artifact_classifier.py +341 -0
- gobby/storage/artifacts.py +285 -0
- gobby/storage/compaction.py +67 -0
- gobby/storage/database.py +357 -0
- gobby/storage/inter_session_messages.py +194 -0
- gobby/storage/mcp.py +680 -0
- gobby/storage/memories.py +562 -0
- gobby/storage/merge_resolutions.py +550 -0
- gobby/storage/migrations.py +860 -0
- gobby/storage/migrations_legacy.py +1359 -0
- gobby/storage/projects.py +166 -0
- gobby/storage/session_messages.py +251 -0
- gobby/storage/session_tasks.py +97 -0
- gobby/storage/sessions.py +817 -0
- gobby/storage/task_dependencies.py +223 -0
- gobby/storage/tasks/__init__.py +42 -0
- gobby/storage/tasks/_aggregates.py +180 -0
- gobby/storage/tasks/_crud.py +449 -0
- gobby/storage/tasks/_id.py +104 -0
- gobby/storage/tasks/_lifecycle.py +311 -0
- gobby/storage/tasks/_manager.py +889 -0
- gobby/storage/tasks/_models.py +300 -0
- gobby/storage/tasks/_ordering.py +119 -0
- gobby/storage/tasks/_path_cache.py +110 -0
- gobby/storage/tasks/_queries.py +343 -0
- gobby/storage/tasks/_search.py +143 -0
- gobby/storage/workflow_audit.py +393 -0
- gobby/storage/worktrees.py +547 -0
- gobby/sync/__init__.py +29 -0
- gobby/sync/github.py +333 -0
- gobby/sync/linear.py +304 -0
- gobby/sync/memories.py +284 -0
- gobby/sync/tasks.py +641 -0
- gobby/tasks/__init__.py +8 -0
- gobby/tasks/build_verification.py +193 -0
- gobby/tasks/commits.py +633 -0
- gobby/tasks/context.py +747 -0
- gobby/tasks/criteria.py +342 -0
- gobby/tasks/enhanced_validator.py +226 -0
- gobby/tasks/escalation.py +263 -0
- gobby/tasks/expansion.py +626 -0
- gobby/tasks/external_validator.py +764 -0
- gobby/tasks/issue_extraction.py +171 -0
- gobby/tasks/prompts/expand.py +327 -0
- gobby/tasks/research.py +421 -0
- gobby/tasks/tdd.py +352 -0
- gobby/tasks/tree_builder.py +263 -0
- gobby/tasks/validation.py +712 -0
- gobby/tasks/validation_history.py +357 -0
- gobby/tasks/validation_models.py +89 -0
- gobby/tools/__init__.py +0 -0
- gobby/tools/summarizer.py +170 -0
- gobby/tui/__init__.py +5 -0
- gobby/tui/api_client.py +281 -0
- gobby/tui/app.py +327 -0
- gobby/tui/screens/__init__.py +25 -0
- gobby/tui/screens/agents.py +333 -0
- gobby/tui/screens/chat.py +450 -0
- gobby/tui/screens/dashboard.py +377 -0
- gobby/tui/screens/memory.py +305 -0
- gobby/tui/screens/metrics.py +231 -0
- gobby/tui/screens/orchestrator.py +904 -0
- gobby/tui/screens/sessions.py +412 -0
- gobby/tui/screens/tasks.py +442 -0
- gobby/tui/screens/workflows.py +289 -0
- gobby/tui/screens/worktrees.py +174 -0
- gobby/tui/widgets/__init__.py +21 -0
- gobby/tui/widgets/chat.py +210 -0
- gobby/tui/widgets/conductor.py +104 -0
- gobby/tui/widgets/menu.py +132 -0
- gobby/tui/widgets/message_panel.py +160 -0
- gobby/tui/widgets/review_gate.py +224 -0
- gobby/tui/widgets/task_tree.py +99 -0
- gobby/tui/widgets/token_budget.py +166 -0
- gobby/tui/ws_client.py +258 -0
- gobby/utils/__init__.py +3 -0
- gobby/utils/daemon_client.py +235 -0
- gobby/utils/git.py +222 -0
- gobby/utils/id.py +38 -0
- gobby/utils/json_helpers.py +161 -0
- gobby/utils/logging.py +376 -0
- gobby/utils/machine_id.py +135 -0
- gobby/utils/metrics.py +589 -0
- gobby/utils/project_context.py +182 -0
- gobby/utils/project_init.py +263 -0
- gobby/utils/status.py +256 -0
- gobby/utils/validation.py +80 -0
- gobby/utils/version.py +23 -0
- gobby/workflows/__init__.py +4 -0
- gobby/workflows/actions.py +1310 -0
- gobby/workflows/approval_flow.py +138 -0
- gobby/workflows/artifact_actions.py +103 -0
- gobby/workflows/audit_helpers.py +110 -0
- gobby/workflows/autonomous_actions.py +286 -0
- gobby/workflows/context_actions.py +394 -0
- gobby/workflows/definitions.py +130 -0
- gobby/workflows/detection_helpers.py +208 -0
- gobby/workflows/engine.py +485 -0
- gobby/workflows/evaluator.py +669 -0
- gobby/workflows/git_utils.py +96 -0
- gobby/workflows/hooks.py +169 -0
- gobby/workflows/lifecycle_evaluator.py +613 -0
- gobby/workflows/llm_actions.py +70 -0
- gobby/workflows/loader.py +333 -0
- gobby/workflows/mcp_actions.py +60 -0
- gobby/workflows/memory_actions.py +272 -0
- gobby/workflows/premature_stop.py +164 -0
- gobby/workflows/session_actions.py +139 -0
- gobby/workflows/state_actions.py +123 -0
- gobby/workflows/state_manager.py +104 -0
- gobby/workflows/stop_signal_actions.py +163 -0
- gobby/workflows/summary_actions.py +344 -0
- gobby/workflows/task_actions.py +249 -0
- gobby/workflows/task_enforcement_actions.py +901 -0
- gobby/workflows/templates.py +52 -0
- gobby/workflows/todo_actions.py +84 -0
- gobby/workflows/webhook.py +223 -0
- gobby/workflows/webhook_executor.py +399 -0
- gobby/worktrees/__init__.py +5 -0
- gobby/worktrees/git.py +690 -0
- gobby/worktrees/merge/__init__.py +20 -0
- gobby/worktrees/merge/conflict_parser.py +177 -0
- gobby/worktrees/merge/resolver.py +485 -0
- gobby-0.2.5.dist-info/METADATA +351 -0
- gobby-0.2.5.dist-info/RECORD +383 -0
- gobby-0.2.5.dist-info/WHEEL +5 -0
- gobby-0.2.5.dist-info/entry_points.txt +2 -0
- gobby-0.2.5.dist-info/licenses/LICENSE.md +193 -0
- gobby-0.2.5.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"""Factory function for creating the task tool registry.
|
|
2
|
+
|
|
3
|
+
Orchestrates the creation of all task tool sub-registries and merges them
|
|
4
|
+
into a unified registry.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import TYPE_CHECKING
|
|
8
|
+
|
|
9
|
+
from gobby.mcp_proxy.tools.internal import InternalToolRegistry
|
|
10
|
+
from gobby.mcp_proxy.tools.task_dependencies import create_dependency_registry
|
|
11
|
+
from gobby.mcp_proxy.tools.task_expansion import create_expansion_registry
|
|
12
|
+
from gobby.mcp_proxy.tools.task_github import create_github_sync_registry
|
|
13
|
+
from gobby.mcp_proxy.tools.task_orchestration import create_orchestration_registry
|
|
14
|
+
from gobby.mcp_proxy.tools.task_readiness import create_readiness_registry
|
|
15
|
+
from gobby.mcp_proxy.tools.task_sync import create_sync_registry
|
|
16
|
+
from gobby.mcp_proxy.tools.task_validation import create_validation_registry
|
|
17
|
+
from gobby.mcp_proxy.tools.tasks._context import RegistryContext
|
|
18
|
+
from gobby.mcp_proxy.tools.tasks._crud import create_crud_registry
|
|
19
|
+
from gobby.mcp_proxy.tools.tasks._lifecycle import create_lifecycle_registry
|
|
20
|
+
from gobby.mcp_proxy.tools.tasks._search import create_search_registry
|
|
21
|
+
from gobby.mcp_proxy.tools.tasks._session import create_session_registry
|
|
22
|
+
from gobby.storage.tasks import LocalTaskManager
|
|
23
|
+
from gobby.storage.worktrees import LocalWorktreeManager
|
|
24
|
+
from gobby.sync.tasks import TaskSyncManager
|
|
25
|
+
from gobby.tasks.expansion import TaskExpander
|
|
26
|
+
from gobby.tasks.validation import TaskValidator
|
|
27
|
+
|
|
28
|
+
if TYPE_CHECKING:
|
|
29
|
+
from gobby.agents.runner import AgentRunner
|
|
30
|
+
from gobby.config.app import DaemonConfig
|
|
31
|
+
from gobby.mcp_proxy.manager import MCPClientManager
|
|
32
|
+
from gobby.worktrees.git import WorktreeGitManager
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def create_task_registry(
|
|
36
|
+
task_manager: LocalTaskManager,
|
|
37
|
+
sync_manager: TaskSyncManager,
|
|
38
|
+
task_expander: TaskExpander | None = None,
|
|
39
|
+
task_validator: TaskValidator | None = None,
|
|
40
|
+
config: "DaemonConfig | None" = None,
|
|
41
|
+
agent_runner: "AgentRunner | None" = None,
|
|
42
|
+
worktree_storage: "LocalWorktreeManager | None" = None,
|
|
43
|
+
git_manager: "WorktreeGitManager | None" = None,
|
|
44
|
+
project_id: str | None = None,
|
|
45
|
+
mcp_manager: "MCPClientManager | None" = None,
|
|
46
|
+
) -> InternalToolRegistry:
|
|
47
|
+
"""
|
|
48
|
+
Create a task tool registry with all task-related tools.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
task_manager: LocalTaskManager instance
|
|
52
|
+
sync_manager: TaskSyncManager instance
|
|
53
|
+
task_expander: TaskExpander instance (optional)
|
|
54
|
+
task_validator: TaskValidator instance (optional)
|
|
55
|
+
config: DaemonConfig instance (optional)
|
|
56
|
+
agent_runner: AgentRunner instance for external validator agent mode (optional)
|
|
57
|
+
worktree_storage: LocalWorktreeManager for orchestration (optional)
|
|
58
|
+
git_manager: WorktreeGitManager for orchestration (optional)
|
|
59
|
+
project_id: Default project ID for orchestration (optional)
|
|
60
|
+
mcp_manager: MCPClientManager for GitHub integration (optional)
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
InternalToolRegistry with all task tools registered
|
|
64
|
+
"""
|
|
65
|
+
# Create the shared context
|
|
66
|
+
ctx = RegistryContext(
|
|
67
|
+
task_manager=task_manager,
|
|
68
|
+
sync_manager=sync_manager,
|
|
69
|
+
task_expander=task_expander,
|
|
70
|
+
task_validator=task_validator,
|
|
71
|
+
agent_runner=agent_runner,
|
|
72
|
+
config=config,
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
# Create the main registry
|
|
76
|
+
registry = InternalToolRegistry(
|
|
77
|
+
name="gobby-tasks",
|
|
78
|
+
description="Task management - CRUD, dependencies, sync",
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
# Merge CRUD tools
|
|
82
|
+
crud_registry = create_crud_registry(ctx)
|
|
83
|
+
for tool_name, tool in crud_registry._tools.items():
|
|
84
|
+
registry._tools[tool_name] = tool
|
|
85
|
+
|
|
86
|
+
# Merge lifecycle tools
|
|
87
|
+
lifecycle_registry = create_lifecycle_registry(ctx)
|
|
88
|
+
for tool_name, tool in lifecycle_registry._tools.items():
|
|
89
|
+
registry._tools[tool_name] = tool
|
|
90
|
+
|
|
91
|
+
# Merge session tools
|
|
92
|
+
session_registry = create_session_registry(ctx)
|
|
93
|
+
for tool_name, tool in session_registry._tools.items():
|
|
94
|
+
registry._tools[tool_name] = tool
|
|
95
|
+
|
|
96
|
+
# Merge search tools
|
|
97
|
+
search_registry = create_search_registry(ctx)
|
|
98
|
+
for tool_name, tool in search_registry._tools.items():
|
|
99
|
+
registry._tools[tool_name] = tool
|
|
100
|
+
|
|
101
|
+
# Merge validation tools from extracted module (Strangler Fig pattern)
|
|
102
|
+
validation_registry = create_validation_registry(
|
|
103
|
+
task_manager=task_manager,
|
|
104
|
+
task_validator=task_validator,
|
|
105
|
+
project_manager=ctx.project_manager,
|
|
106
|
+
get_project_repo_path=ctx.get_project_repo_path,
|
|
107
|
+
)
|
|
108
|
+
for tool_name, tool in validation_registry._tools.items():
|
|
109
|
+
registry._tools[tool_name] = tool
|
|
110
|
+
|
|
111
|
+
# Merge expansion tools from extracted module (Strangler Fig pattern)
|
|
112
|
+
expansion_registry = create_expansion_registry(
|
|
113
|
+
task_manager=task_manager,
|
|
114
|
+
task_expander=task_expander,
|
|
115
|
+
task_validator=task_validator,
|
|
116
|
+
auto_generate_on_expand=ctx.auto_generate_on_expand,
|
|
117
|
+
resolve_tdd_mode=ctx.resolve_tdd_mode,
|
|
118
|
+
)
|
|
119
|
+
for tool_name, tool in expansion_registry._tools.items():
|
|
120
|
+
registry._tools[tool_name] = tool
|
|
121
|
+
|
|
122
|
+
# Merge dependency tools from extracted module (Strangler Fig pattern)
|
|
123
|
+
dependency_registry = create_dependency_registry(
|
|
124
|
+
task_manager=task_manager,
|
|
125
|
+
dep_manager=ctx.dep_manager,
|
|
126
|
+
)
|
|
127
|
+
for tool_name, tool in dependency_registry._tools.items():
|
|
128
|
+
registry._tools[tool_name] = tool
|
|
129
|
+
|
|
130
|
+
# Merge readiness tools from extracted module (Strangler Fig pattern)
|
|
131
|
+
readiness_registry = create_readiness_registry(
|
|
132
|
+
task_manager=task_manager,
|
|
133
|
+
)
|
|
134
|
+
for tool_name, tool in readiness_registry._tools.items():
|
|
135
|
+
registry._tools[tool_name] = tool
|
|
136
|
+
|
|
137
|
+
# Merge sync tools from extracted module (Strangler Fig pattern)
|
|
138
|
+
from gobby.tasks.commits import auto_link_commits as auto_link_commits_fn
|
|
139
|
+
from gobby.tasks.commits import get_task_diff
|
|
140
|
+
|
|
141
|
+
sync_registry = create_sync_registry(
|
|
142
|
+
sync_manager=sync_manager,
|
|
143
|
+
task_manager=task_manager,
|
|
144
|
+
project_manager=ctx.project_manager,
|
|
145
|
+
auto_link_commits_fn=auto_link_commits_fn,
|
|
146
|
+
get_task_diff_fn=get_task_diff,
|
|
147
|
+
)
|
|
148
|
+
for tool_name, tool in sync_registry._tools.items():
|
|
149
|
+
registry._tools[tool_name] = tool
|
|
150
|
+
|
|
151
|
+
# Merge orchestration tools from extracted module (Strangler Fig pattern)
|
|
152
|
+
# Only if worktree_storage is available (required for orchestration)
|
|
153
|
+
if worktree_storage is not None:
|
|
154
|
+
orchestration_registry = create_orchestration_registry(
|
|
155
|
+
task_manager=task_manager,
|
|
156
|
+
worktree_storage=worktree_storage,
|
|
157
|
+
git_manager=git_manager,
|
|
158
|
+
agent_runner=agent_runner,
|
|
159
|
+
project_id=project_id,
|
|
160
|
+
)
|
|
161
|
+
for tool_name, tool in orchestration_registry._tools.items():
|
|
162
|
+
registry._tools[tool_name] = tool
|
|
163
|
+
|
|
164
|
+
# Merge GitHub sync tools from extracted module (Strangler Fig pattern)
|
|
165
|
+
# Only if mcp_manager is available (required for GitHub MCP access)
|
|
166
|
+
if mcp_manager is not None:
|
|
167
|
+
github_registry = create_github_sync_registry(
|
|
168
|
+
task_manager=task_manager,
|
|
169
|
+
mcp_manager=mcp_manager,
|
|
170
|
+
project_manager=ctx.project_manager,
|
|
171
|
+
project_id=project_id,
|
|
172
|
+
)
|
|
173
|
+
for tool_name, tool in github_registry._tools.items():
|
|
174
|
+
registry._tools[tool_name] = tool
|
|
175
|
+
|
|
176
|
+
return registry
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"""Helper functions and constants for task tools.
|
|
2
|
+
|
|
3
|
+
Pure functions with no external dependencies that provide utility
|
|
4
|
+
for task operations.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
# Reasons for which commit linking and validation are skipped when closing tasks
|
|
8
|
+
SKIP_REASONS: frozenset[str] = frozenset(
|
|
9
|
+
{"duplicate", "already_implemented", "wont_fix", "obsolete"}
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
# Category inference patterns mapping category to keywords/phrases
|
|
13
|
+
_CATEGORY_PATTERNS: dict[str, tuple[str, ...]] = {
|
|
14
|
+
"code": (
|
|
15
|
+
"implement",
|
|
16
|
+
"create function",
|
|
17
|
+
"add method",
|
|
18
|
+
"refactor",
|
|
19
|
+
"fix bug",
|
|
20
|
+
"write code",
|
|
21
|
+
"add class",
|
|
22
|
+
"modify function",
|
|
23
|
+
"update implementation",
|
|
24
|
+
"build feature",
|
|
25
|
+
),
|
|
26
|
+
"config": (
|
|
27
|
+
".yaml",
|
|
28
|
+
".toml",
|
|
29
|
+
".json",
|
|
30
|
+
".env",
|
|
31
|
+
"config",
|
|
32
|
+
"settings",
|
|
33
|
+
"configuration",
|
|
34
|
+
"environment variable",
|
|
35
|
+
),
|
|
36
|
+
"docs": (
|
|
37
|
+
"document",
|
|
38
|
+
"readme",
|
|
39
|
+
"update docs",
|
|
40
|
+
"write documentation",
|
|
41
|
+
"docstring",
|
|
42
|
+
"add comments",
|
|
43
|
+
"api docs",
|
|
44
|
+
),
|
|
45
|
+
"test": (
|
|
46
|
+
"write test",
|
|
47
|
+
"add test",
|
|
48
|
+
"unit test",
|
|
49
|
+
"integration test",
|
|
50
|
+
"test case",
|
|
51
|
+
"test coverage",
|
|
52
|
+
"write tests for:",
|
|
53
|
+
),
|
|
54
|
+
"research": (
|
|
55
|
+
"investigate",
|
|
56
|
+
"explore",
|
|
57
|
+
"research",
|
|
58
|
+
"analyze",
|
|
59
|
+
"study",
|
|
60
|
+
"evaluate options",
|
|
61
|
+
"compare",
|
|
62
|
+
"spike",
|
|
63
|
+
),
|
|
64
|
+
"planning": (
|
|
65
|
+
"design",
|
|
66
|
+
"plan",
|
|
67
|
+
"architect",
|
|
68
|
+
"spec",
|
|
69
|
+
"blueprint",
|
|
70
|
+
"roadmap",
|
|
71
|
+
"define",
|
|
72
|
+
),
|
|
73
|
+
"manual": (
|
|
74
|
+
"verify that",
|
|
75
|
+
"verify the",
|
|
76
|
+
"check that",
|
|
77
|
+
"check the",
|
|
78
|
+
"functional test",
|
|
79
|
+
"functional testing",
|
|
80
|
+
"smoke test",
|
|
81
|
+
"sanity test",
|
|
82
|
+
"sanity check",
|
|
83
|
+
"manual test",
|
|
84
|
+
"manually verify",
|
|
85
|
+
"manually test",
|
|
86
|
+
"manually check",
|
|
87
|
+
"run and check",
|
|
88
|
+
"run and verify",
|
|
89
|
+
"test that the",
|
|
90
|
+
"confirm that",
|
|
91
|
+
"ensure that",
|
|
92
|
+
"validate that",
|
|
93
|
+
"run each command",
|
|
94
|
+
"run the command",
|
|
95
|
+
"verify output",
|
|
96
|
+
"check output",
|
|
97
|
+
"verify functionality",
|
|
98
|
+
"test functionality",
|
|
99
|
+
),
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def _infer_category(title: str, description: str | None) -> str | None:
|
|
104
|
+
"""
|
|
105
|
+
Infer category from task title/description patterns.
|
|
106
|
+
|
|
107
|
+
Checks against known patterns for each category type.
|
|
108
|
+
Returns the first matching category, or None to let user/LLM decide.
|
|
109
|
+
|
|
110
|
+
Priority order: test, code, config, docs, research, planning, manual
|
|
111
|
+
"""
|
|
112
|
+
text = f"{title} {description or ''}".lower()
|
|
113
|
+
|
|
114
|
+
# Check categories in priority order
|
|
115
|
+
priority_order = ("test", "code", "config", "docs", "research", "planning", "manual")
|
|
116
|
+
for category in priority_order:
|
|
117
|
+
patterns = _CATEGORY_PATTERNS.get(category, ())
|
|
118
|
+
for pattern in patterns:
|
|
119
|
+
if pattern in text:
|
|
120
|
+
return category
|
|
121
|
+
return None
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def _is_path_format(ref: str) -> bool:
|
|
125
|
+
"""Check if a reference is in path format (e.g., 1.2.3)."""
|
|
126
|
+
if "." not in ref:
|
|
127
|
+
return False
|
|
128
|
+
parts = ref.split(".")
|
|
129
|
+
return all(part.isdigit() for part in parts)
|