django-cfg 1.3.9__py3-none-any.whl → 1.3.13__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 (188) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/accounts/admin/inlines.py +11 -5
  3. django_cfg/apps/payments/admin/networks_admin.py +12 -1
  4. django_cfg/apps/payments/admin/payments_admin.py +13 -0
  5. django_cfg/apps/payments/admin_interface/serializers/payment_serializers.py +62 -14
  6. django_cfg/apps/payments/admin_interface/templates/payments/components/payment_card.html +121 -0
  7. django_cfg/apps/payments/admin_interface/templates/payments/components/payment_qr_code.html +95 -0
  8. django_cfg/apps/payments/admin_interface/templates/payments/components/progress_bar.html +37 -0
  9. django_cfg/apps/payments/admin_interface/templates/payments/components/provider_stats.html +60 -0
  10. django_cfg/apps/payments/admin_interface/templates/payments/components/status_badge.html +41 -0
  11. django_cfg/apps/payments/admin_interface/templates/payments/components/status_overview.html +83 -0
  12. django_cfg/apps/payments/admin_interface/templates/payments/payment_detail.html +363 -0
  13. django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +33 -3
  14. django_cfg/apps/payments/admin_interface/views/api/payments.py +102 -0
  15. django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +96 -45
  16. django_cfg/apps/payments/admin_interface/views/forms.py +5 -1
  17. django_cfg/apps/payments/config/__init__.py +14 -15
  18. django_cfg/apps/payments/config/django_cfg_integration.py +59 -1
  19. django_cfg/apps/payments/config/helpers.py +8 -13
  20. django_cfg/apps/payments/migrations/0001_initial.py +33 -46
  21. django_cfg/apps/payments/migrations/0002_rename_payments_un_user_id_7f6e79_idx_payments_un_user_id_8ce187_idx_and_more.py +46 -0
  22. django_cfg/apps/payments/migrations/0003_universalpayment_status_changed_at.py +25 -0
  23. django_cfg/apps/payments/models/managers/payment_managers.py +142 -25
  24. django_cfg/apps/payments/models/payments.py +94 -0
  25. django_cfg/apps/payments/services/core/base.py +4 -4
  26. django_cfg/apps/payments/services/core/payment_service.py +265 -38
  27. django_cfg/apps/payments/services/providers/base.py +209 -3
  28. django_cfg/apps/payments/services/providers/models/__init__.py +2 -0
  29. django_cfg/apps/payments/services/providers/models/base.py +25 -2
  30. django_cfg/apps/payments/services/providers/nowpayments/models.py +2 -2
  31. django_cfg/apps/payments/services/providers/nowpayments/provider.py +57 -9
  32. django_cfg/apps/payments/services/providers/registry.py +5 -5
  33. django_cfg/apps/payments/services/types/requests.py +19 -7
  34. django_cfg/apps/payments/signals/payment_signals.py +31 -2
  35. django_cfg/apps/payments/static/payments/js/api-client.js +6 -1
  36. django_cfg/apps/payments/static/payments/js/payment-detail.js +167 -0
  37. django_cfg/apps/payments/static/payments/js/payment-form.js +35 -26
  38. django_cfg/apps/payments/templatetags/payment_tags.py +8 -0
  39. django_cfg/apps/payments/urls.py +3 -2
  40. django_cfg/apps/payments/views/api/currencies.py +3 -0
  41. django_cfg/apps/payments/views/serializers/currencies.py +18 -5
  42. django_cfg/apps/tasks/admin/tasks_admin.py +2 -2
  43. django_cfg/apps/tasks/static/tasks/css/dashboard.css +68 -217
  44. django_cfg/apps/tasks/static/tasks/js/api.js +40 -84
  45. django_cfg/apps/tasks/static/tasks/js/components/DataManager.js +24 -0
  46. django_cfg/apps/tasks/static/tasks/js/components/TabManager.js +85 -0
  47. django_cfg/apps/tasks/static/tasks/js/components/TaskRenderer.js +216 -0
  48. django_cfg/apps/tasks/static/tasks/js/dashboard/main.mjs +245 -0
  49. django_cfg/apps/tasks/static/tasks/js/dashboard/overview.mjs +123 -0
  50. django_cfg/apps/tasks/static/tasks/js/dashboard/queues.mjs +120 -0
  51. django_cfg/apps/tasks/static/tasks/js/dashboard/tasks.mjs +350 -0
  52. django_cfg/apps/tasks/static/tasks/js/dashboard/workers.mjs +169 -0
  53. django_cfg/apps/tasks/tasks/__init__.py +10 -0
  54. django_cfg/apps/tasks/tasks/demo_tasks.py +133 -0
  55. django_cfg/apps/tasks/templates/tasks/components/management_actions.html +42 -45
  56. django_cfg/apps/tasks/templates/tasks/components/{status_cards.html → overview_content.html} +30 -11
  57. django_cfg/apps/tasks/templates/tasks/components/queues_content.html +19 -0
  58. django_cfg/apps/tasks/templates/tasks/components/tab_navigation.html +16 -10
  59. django_cfg/apps/tasks/templates/tasks/components/tasks_content.html +51 -0
  60. django_cfg/apps/tasks/templates/tasks/components/workers_content.html +30 -0
  61. django_cfg/apps/tasks/templates/tasks/layout/base.html +117 -0
  62. django_cfg/apps/tasks/templates/tasks/pages/dashboard.html +82 -0
  63. django_cfg/apps/tasks/templates/tasks/partials/task_row_template.html +40 -0
  64. django_cfg/apps/tasks/templates/tasks/widgets/task_filters.html +37 -0
  65. django_cfg/apps/tasks/templates/tasks/widgets/task_footer.html +41 -0
  66. django_cfg/apps/tasks/templates/tasks/widgets/task_table.html +50 -0
  67. django_cfg/apps/tasks/urls.py +2 -2
  68. django_cfg/apps/tasks/urls_admin.py +2 -2
  69. django_cfg/apps/tasks/utils/__init__.py +1 -0
  70. django_cfg/apps/tasks/utils/simulator.py +356 -0
  71. django_cfg/apps/tasks/views/__init__.py +16 -0
  72. django_cfg/apps/tasks/views/api.py +569 -0
  73. django_cfg/apps/tasks/views/dashboard.py +58 -0
  74. django_cfg/core/integration/__init__.py +21 -0
  75. django_cfg/management/commands/rundramatiq_simulator.py +430 -0
  76. django_cfg/models/constance.py +0 -11
  77. django_cfg/models/payments.py +137 -3
  78. django_cfg/modules/django_tasks.py +54 -21
  79. django_cfg/registry/core.py +4 -9
  80. django_cfg/template_archive/django_sample.zip +0 -0
  81. {django_cfg-1.3.9.dist-info → django_cfg-1.3.13.dist-info}/METADATA +2 -2
  82. {django_cfg-1.3.9.dist-info → django_cfg-1.3.13.dist-info}/RECORD +85 -153
  83. django_cfg/apps/payments/config/constance/__init__.py +0 -22
  84. django_cfg/apps/payments/config/constance/config_service.py +0 -123
  85. django_cfg/apps/payments/config/constance/fields.py +0 -69
  86. django_cfg/apps/payments/config/constance/settings.py +0 -160
  87. django_cfg/apps/payments/migrations/0002_currency_usd_rate_currency_usd_rate_updated_at.py +0 -26
  88. django_cfg/apps/payments/migrations/0003_remove_provider_currency_fields.py +0 -28
  89. django_cfg/apps/payments/migrations/0004_add_reserved_usd_field.py +0 -30
  90. django_cfg/apps/tasks/static/tasks/js/dashboard.js +0 -614
  91. django_cfg/apps/tasks/static/tasks/js/modals.js +0 -452
  92. django_cfg/apps/tasks/static/tasks/js/notifications.js +0 -144
  93. django_cfg/apps/tasks/static/tasks/js/task-monitor.js +0 -454
  94. django_cfg/apps/tasks/static/tasks/js/theme.js +0 -77
  95. django_cfg/apps/tasks/templates/tasks/base.html +0 -96
  96. django_cfg/apps/tasks/templates/tasks/components/info_cards.html +0 -85
  97. django_cfg/apps/tasks/templates/tasks/components/overview_tab.html +0 -22
  98. django_cfg/apps/tasks/templates/tasks/components/queues_tab.html +0 -19
  99. django_cfg/apps/tasks/templates/tasks/components/task_details_modal.html +0 -103
  100. django_cfg/apps/tasks/templates/tasks/components/tasks_tab.html +0 -32
  101. django_cfg/apps/tasks/templates/tasks/components/workers_tab.html +0 -29
  102. django_cfg/apps/tasks/templates/tasks/dashboard.html +0 -29
  103. django_cfg/apps/tasks/views.py +0 -461
  104. django_cfg/management/commands/app_agent_diagnose.py +0 -470
  105. django_cfg/management/commands/app_agent_generate.py +0 -342
  106. django_cfg/management/commands/app_agent_info.py +0 -308
  107. django_cfg/management/commands/auto_generate.py +0 -486
  108. django_cfg/modules/django_app_agent/__init__.py +0 -87
  109. django_cfg/modules/django_app_agent/agents/__init__.py +0 -40
  110. django_cfg/modules/django_app_agent/agents/base/__init__.py +0 -24
  111. django_cfg/modules/django_app_agent/agents/base/agent.py +0 -354
  112. django_cfg/modules/django_app_agent/agents/base/context.py +0 -236
  113. django_cfg/modules/django_app_agent/agents/base/executor.py +0 -430
  114. django_cfg/modules/django_app_agent/agents/generation/__init__.py +0 -12
  115. django_cfg/modules/django_app_agent/agents/generation/app_generator/__init__.py +0 -15
  116. django_cfg/modules/django_app_agent/agents/generation/app_generator/config_validator.py +0 -147
  117. django_cfg/modules/django_app_agent/agents/generation/app_generator/main.py +0 -99
  118. django_cfg/modules/django_app_agent/agents/generation/app_generator/models.py +0 -32
  119. django_cfg/modules/django_app_agent/agents/generation/app_generator/prompt_manager.py +0 -290
  120. django_cfg/modules/django_app_agent/agents/interfaces.py +0 -376
  121. django_cfg/modules/django_app_agent/core/__init__.py +0 -33
  122. django_cfg/modules/django_app_agent/core/config.py +0 -300
  123. django_cfg/modules/django_app_agent/core/exceptions.py +0 -359
  124. django_cfg/modules/django_app_agent/models/__init__.py +0 -71
  125. django_cfg/modules/django_app_agent/models/base.py +0 -283
  126. django_cfg/modules/django_app_agent/models/context.py +0 -496
  127. django_cfg/modules/django_app_agent/models/enums.py +0 -481
  128. django_cfg/modules/django_app_agent/models/requests.py +0 -500
  129. django_cfg/modules/django_app_agent/models/responses.py +0 -585
  130. django_cfg/modules/django_app_agent/pytest.ini +0 -6
  131. django_cfg/modules/django_app_agent/services/__init__.py +0 -42
  132. django_cfg/modules/django_app_agent/services/app_generator/__init__.py +0 -30
  133. django_cfg/modules/django_app_agent/services/app_generator/ai_integration.py +0 -133
  134. django_cfg/modules/django_app_agent/services/app_generator/context.py +0 -40
  135. django_cfg/modules/django_app_agent/services/app_generator/main.py +0 -202
  136. django_cfg/modules/django_app_agent/services/app_generator/structure.py +0 -316
  137. django_cfg/modules/django_app_agent/services/app_generator/validation.py +0 -125
  138. django_cfg/modules/django_app_agent/services/base.py +0 -437
  139. django_cfg/modules/django_app_agent/services/context_builder/__init__.py +0 -34
  140. django_cfg/modules/django_app_agent/services/context_builder/code_extractor.py +0 -141
  141. django_cfg/modules/django_app_agent/services/context_builder/context_generator.py +0 -276
  142. django_cfg/modules/django_app_agent/services/context_builder/main.py +0 -272
  143. django_cfg/modules/django_app_agent/services/context_builder/models.py +0 -40
  144. django_cfg/modules/django_app_agent/services/context_builder/pattern_analyzer.py +0 -85
  145. django_cfg/modules/django_app_agent/services/project_scanner/__init__.py +0 -31
  146. django_cfg/modules/django_app_agent/services/project_scanner/app_discovery.py +0 -311
  147. django_cfg/modules/django_app_agent/services/project_scanner/main.py +0 -221
  148. django_cfg/modules/django_app_agent/services/project_scanner/models.py +0 -59
  149. django_cfg/modules/django_app_agent/services/project_scanner/pattern_detection.py +0 -94
  150. django_cfg/modules/django_app_agent/services/questioning_service/__init__.py +0 -28
  151. django_cfg/modules/django_app_agent/services/questioning_service/main.py +0 -273
  152. django_cfg/modules/django_app_agent/services/questioning_service/models.py +0 -111
  153. django_cfg/modules/django_app_agent/services/questioning_service/question_generator.py +0 -251
  154. django_cfg/modules/django_app_agent/services/questioning_service/response_processor.py +0 -347
  155. django_cfg/modules/django_app_agent/services/questioning_service/session_manager.py +0 -356
  156. django_cfg/modules/django_app_agent/services/report_service.py +0 -332
  157. django_cfg/modules/django_app_agent/services/template_manager/__init__.py +0 -18
  158. django_cfg/modules/django_app_agent/services/template_manager/jinja_engine.py +0 -236
  159. django_cfg/modules/django_app_agent/services/template_manager/main.py +0 -159
  160. django_cfg/modules/django_app_agent/services/template_manager/models.py +0 -36
  161. django_cfg/modules/django_app_agent/services/template_manager/template_loader.py +0 -100
  162. django_cfg/modules/django_app_agent/services/template_manager/templates/admin.py.j2 +0 -105
  163. django_cfg/modules/django_app_agent/services/template_manager/templates/apps.py.j2 +0 -31
  164. django_cfg/modules/django_app_agent/services/template_manager/templates/cfg_config.py.j2 +0 -44
  165. django_cfg/modules/django_app_agent/services/template_manager/templates/cfg_module.py.j2 +0 -81
  166. django_cfg/modules/django_app_agent/services/template_manager/templates/forms.py.j2 +0 -107
  167. django_cfg/modules/django_app_agent/services/template_manager/templates/models.py.j2 +0 -139
  168. django_cfg/modules/django_app_agent/services/template_manager/templates/serializers.py.j2 +0 -91
  169. django_cfg/modules/django_app_agent/services/template_manager/templates/tests.py.j2 +0 -195
  170. django_cfg/modules/django_app_agent/services/template_manager/templates/urls.py.j2 +0 -35
  171. django_cfg/modules/django_app_agent/services/template_manager/templates/views.py.j2 +0 -211
  172. django_cfg/modules/django_app_agent/services/template_manager/variable_processor.py +0 -200
  173. django_cfg/modules/django_app_agent/services/validation_service/__init__.py +0 -25
  174. django_cfg/modules/django_app_agent/services/validation_service/django_validator.py +0 -333
  175. django_cfg/modules/django_app_agent/services/validation_service/main.py +0 -242
  176. django_cfg/modules/django_app_agent/services/validation_service/models.py +0 -66
  177. django_cfg/modules/django_app_agent/services/validation_service/quality_validator.py +0 -352
  178. django_cfg/modules/django_app_agent/services/validation_service/security_validator.py +0 -272
  179. django_cfg/modules/django_app_agent/services/validation_service/syntax_validator.py +0 -203
  180. django_cfg/modules/django_app_agent/ui/__init__.py +0 -25
  181. django_cfg/modules/django_app_agent/ui/cli.py +0 -419
  182. django_cfg/modules/django_app_agent/ui/rich_components.py +0 -622
  183. django_cfg/modules/django_app_agent/utils/__init__.py +0 -38
  184. django_cfg/modules/django_app_agent/utils/logging.py +0 -360
  185. django_cfg/modules/django_app_agent/utils/validation.py +0 -417
  186. {django_cfg-1.3.9.dist-info → django_cfg-1.3.13.dist-info}/WHEEL +0 -0
  187. {django_cfg-1.3.9.dist-info → django_cfg-1.3.13.dist-info}/entry_points.txt +0 -0
  188. {django_cfg-1.3.9.dist-info → django_cfg-1.3.13.dist-info}/licenses/LICENSE +0 -0
@@ -1,376 +0,0 @@
1
- """
2
- Agent Interfaces for Django App Agent Module.
3
-
4
- This module defines abstract interfaces for all AI agents, designed for
5
- easy extraction into separate web services while maintaining clean
6
- separation of concerns between services and agents.
7
- """
8
-
9
- from typing import Dict, Any, List, Optional, Protocol, runtime_checkable
10
- from abc import ABC, abstractmethod
11
- from pathlib import Path
12
-
13
- from pydantic import BaseModel, Field, ConfigDict
14
-
15
- from ..models.context import ProjectContext
16
- from ..models.requests import AppGenerationRequest
17
-
18
-
19
- class AgentRequest(BaseModel):
20
- """Base request for all agent operations."""
21
-
22
- model_config = ConfigDict(extra='forbid', validate_assignment=True)
23
-
24
- operation_id: str = Field(description="Unique operation identifier")
25
- correlation_id: str = Field(description="Correlation ID for tracing")
26
- agent_name: str = Field(description="Name of the target agent")
27
- operation_type: str = Field(description="Type of operation to perform")
28
- context: Dict[str, Any] = Field(default_factory=dict, description="Operation context")
29
- parameters: Dict[str, Any] = Field(default_factory=dict, description="Operation parameters")
30
-
31
-
32
- class AgentResponse(BaseModel):
33
- """Base response from all agent operations."""
34
-
35
- model_config = ConfigDict(extra='forbid', validate_assignment=True)
36
-
37
- operation_id: str = Field(description="Operation identifier")
38
- agent_name: str = Field(description="Name of the responding agent")
39
- success: bool = Field(description="Whether operation was successful")
40
- result: Dict[str, Any] = Field(default_factory=dict, description="Operation result")
41
- error: Optional[str] = Field(default=None, description="Error message if failed")
42
- metadata: Dict[str, Any] = Field(default_factory=dict, description="Additional metadata")
43
- execution_time_ms: int = Field(default=0, description="Execution time in milliseconds")
44
-
45
-
46
- # Specific request/response types for different agent operations
47
-
48
- class QuestionGenerationRequest(AgentRequest):
49
- """Request for question generation agents."""
50
-
51
- user_intent: str = Field(description="User's stated intent")
52
- project_context: ProjectContext = Field(description="Project analysis context")
53
- max_questions: int = Field(default=5, description="Maximum questions to generate")
54
- focus_areas: List[str] = Field(default_factory=list, description="Areas to focus on")
55
-
56
-
57
- class QuestionGenerationResponse(AgentResponse):
58
- """Response from question generation agents."""
59
-
60
- questions: List[Dict[str, Any]] = Field(default_factory=list, description="Generated questions")
61
- insights: Dict[str, Any] = Field(default_factory=dict, description="Agent insights")
62
- confidence_score: float = Field(default=0.0, description="Confidence in questions")
63
-
64
-
65
- class CodeGenerationRequest(AgentRequest):
66
- """Request for code generation agents."""
67
-
68
- generation_request: AppGenerationRequest = Field(description="App generation request")
69
- project_context: ProjectContext = Field(description="Project context")
70
- development_context: Dict[str, Any] = Field(description="Development context from questioning")
71
- template_variables: Dict[str, Any] = Field(default_factory=dict, description="Template variables")
72
-
73
-
74
- class CodeGenerationResponse(AgentResponse):
75
- """Response from code generation agents."""
76
-
77
- generated_files: List[Dict[str, Any]] = Field(default_factory=list, description="Generated files")
78
- quality_metrics: Dict[str, Any] = Field(default_factory=dict, description="Quality metrics")
79
- recommendations: List[str] = Field(default_factory=list, description="Recommendations")
80
-
81
-
82
- class ValidationRequest(AgentRequest):
83
- """Request for validation agents."""
84
-
85
- files_to_validate: List[Dict[str, Any]] = Field(description="Files to validate")
86
- validation_rules: List[str] = Field(description="Validation rules to apply")
87
- project_context: ProjectContext = Field(description="Project context")
88
-
89
-
90
- class ValidationResponse(AgentResponse):
91
- """Response from validation agents."""
92
-
93
- validation_issues: List[Dict[str, Any]] = Field(default_factory=list, description="Found issues")
94
- quality_score: float = Field(default=0.0, description="Overall quality score")
95
- suggestions: List[str] = Field(default_factory=list, description="Improvement suggestions")
96
-
97
-
98
- # Abstract interfaces for different agent types
99
-
100
- @runtime_checkable
101
- class AgentInterface(Protocol):
102
- """Protocol for all AI agents."""
103
-
104
- async def execute(self, request: AgentRequest) -> AgentResponse:
105
- """Execute agent operation."""
106
- ...
107
-
108
- def get_capabilities(self) -> List[str]:
109
- """Get list of agent capabilities."""
110
- ...
111
-
112
- def get_status(self) -> Dict[str, Any]:
113
- """Get agent status information."""
114
- ...
115
-
116
-
117
- class BaseAgentInterface(ABC):
118
- """Abstract base class for all agent interfaces."""
119
-
120
- def __init__(self, agent_name: str):
121
- """Initialize agent interface."""
122
- self.agent_name = agent_name
123
-
124
- @abstractmethod
125
- async def execute(self, request: AgentRequest) -> AgentResponse:
126
- """Execute agent operation."""
127
- pass
128
-
129
- @abstractmethod
130
- def get_capabilities(self) -> List[str]:
131
- """Get list of agent capabilities."""
132
- pass
133
-
134
- def get_status(self) -> Dict[str, Any]:
135
- """Get agent status information."""
136
- return {
137
- "agent_name": self.agent_name,
138
- "status": "active",
139
- "capabilities": self.get_capabilities()
140
- }
141
-
142
-
143
- class QuestioningAgentInterface(BaseAgentInterface):
144
- """Interface for questioning/dialogue agents."""
145
-
146
- @abstractmethod
147
- async def generate_questions(self, request: QuestionGenerationRequest) -> QuestionGenerationResponse:
148
- """Generate contextual questions."""
149
- pass
150
-
151
- async def execute(self, request: AgentRequest) -> AgentResponse:
152
- """Execute questioning operation."""
153
- if request.operation_type == "generate_questions":
154
- # Convert generic request to specific request
155
- question_request = QuestionGenerationRequest(**request.model_dump())
156
- return await self.generate_questions(question_request)
157
- else:
158
- return AgentResponse(
159
- operation_id=request.operation_id,
160
- agent_name=self.agent_name,
161
- success=False,
162
- error=f"Unsupported operation: {request.operation_type}"
163
- )
164
-
165
-
166
- class CodeGenerationAgentInterface(BaseAgentInterface):
167
- """Interface for code generation agents."""
168
-
169
- @abstractmethod
170
- async def generate_code(self, request: CodeGenerationRequest) -> CodeGenerationResponse:
171
- """Generate application code."""
172
- pass
173
-
174
- async def execute(self, request: AgentRequest) -> AgentResponse:
175
- """Execute code generation operation."""
176
- if request.operation_type == "generate_code":
177
- code_request = CodeGenerationRequest(**request.model_dump())
178
- return await self.generate_code(code_request)
179
- else:
180
- return AgentResponse(
181
- operation_id=request.operation_id,
182
- agent_name=self.agent_name,
183
- success=False,
184
- error=f"Unsupported operation: {request.operation_type}"
185
- )
186
-
187
-
188
- class ValidationAgentInterface(BaseAgentInterface):
189
- """Interface for validation agents."""
190
-
191
- @abstractmethod
192
- async def validate_code(self, request: ValidationRequest) -> ValidationResponse:
193
- """Validate generated code."""
194
- pass
195
-
196
- async def execute(self, request: AgentRequest) -> AgentResponse:
197
- """Execute validation operation."""
198
- if request.operation_type == "validate_code":
199
- validation_request = ValidationRequest(**request.model_dump())
200
- return await self.validate_code(validation_request)
201
- else:
202
- return AgentResponse(
203
- operation_id=request.operation_id,
204
- agent_name=self.agent_name,
205
- success=False,
206
- error=f"Unsupported operation: {request.operation_type}"
207
- )
208
-
209
-
210
- # Agent registry for managing agent instances
211
-
212
- class AgentRegistry:
213
- """Registry for managing agent instances and routing requests."""
214
-
215
- def __init__(self):
216
- """Initialize agent registry."""
217
- self._agents: Dict[str, AgentInterface] = {}
218
- self._agent_types: Dict[str, str] = {}
219
-
220
- def register_agent(self, agent_name: str, agent: AgentInterface, agent_type: str):
221
- """Register an agent instance."""
222
- self._agents[agent_name] = agent
223
- self._agent_types[agent_name] = agent_type
224
-
225
- def unregister_agent(self, agent_name: str):
226
- """Unregister an agent instance."""
227
- self._agents.pop(agent_name, None)
228
- self._agent_types.pop(agent_name, None)
229
-
230
- def get_agent(self, agent_name: str) -> Optional[AgentInterface]:
231
- """Get agent instance by name."""
232
- return self._agents.get(agent_name)
233
-
234
- def list_agents(self) -> Dict[str, Dict[str, Any]]:
235
- """List all registered agents."""
236
- return {
237
- name: {
238
- "type": self._agent_types.get(name, "unknown"),
239
- "capabilities": agent.get_capabilities(),
240
- "status": agent.get_status()
241
- }
242
- for name, agent in self._agents.items()
243
- }
244
-
245
- def get_agents_by_type(self, agent_type: str) -> List[str]:
246
- """Get agent names by type."""
247
- return [
248
- name for name, atype in self._agent_types.items()
249
- if atype == agent_type
250
- ]
251
-
252
- async def execute_agent_request(self, request: AgentRequest) -> AgentResponse:
253
- """Execute request on specified agent."""
254
- agent = self.get_agent(request.agent_name)
255
-
256
- if not agent:
257
- return AgentResponse(
258
- operation_id=request.operation_id,
259
- agent_name=request.agent_name,
260
- success=False,
261
- error=f"Agent '{request.agent_name}' not found"
262
- )
263
-
264
- try:
265
- return await agent.execute(request)
266
- except Exception as e:
267
- return AgentResponse(
268
- operation_id=request.operation_id,
269
- agent_name=request.agent_name,
270
- success=False,
271
- error=f"Agent execution failed: {e}"
272
- )
273
-
274
-
275
- # Web service adapter for future extraction
276
-
277
- class WebServiceAgentAdapter:
278
- """Adapter for communicating with agents via web service."""
279
-
280
- def __init__(self, base_url: str, api_key: Optional[str] = None):
281
- """Initialize web service adapter."""
282
- self.base_url = base_url.rstrip('/')
283
- self.api_key = api_key
284
-
285
- async def execute_agent_request(self, request: AgentRequest) -> AgentResponse:
286
- """Execute agent request via web service."""
287
- # This would implement HTTP client logic for web service communication
288
- # For now, it's a placeholder that shows the interface
289
-
290
- # In real implementation:
291
- # 1. Serialize request to JSON
292
- # 2. Send HTTP POST to {base_url}/agents/{agent_name}/execute
293
- # 3. Handle authentication with API key
294
- # 4. Deserialize response to AgentResponse
295
- # 5. Handle errors and retries
296
-
297
- return AgentResponse(
298
- operation_id=request.operation_id,
299
- agent_name=request.agent_name,
300
- success=False,
301
- error="Web service adapter not implemented yet"
302
- )
303
-
304
- async def list_agents(self) -> Dict[str, Dict[str, Any]]:
305
- """List agents available via web service."""
306
- # Would implement HTTP GET to {base_url}/agents
307
- return {}
308
-
309
- async def get_agent_status(self, agent_name: str) -> Dict[str, Any]:
310
- """Get agent status via web service."""
311
- # Would implement HTTP GET to {base_url}/agents/{agent_name}/status
312
- return {}
313
-
314
-
315
- # Factory for creating agent clients (local or remote)
316
-
317
- class AgentClientFactory:
318
- """Factory for creating agent clients (local or web service)."""
319
-
320
- @staticmethod
321
- def create_local_client(registry: AgentRegistry) -> 'LocalAgentClient':
322
- """Create client for local agent execution."""
323
- return LocalAgentClient(registry)
324
-
325
- @staticmethod
326
- def create_web_service_client(base_url: str, api_key: Optional[str] = None) -> 'WebServiceAgentClient':
327
- """Create client for web service agent execution."""
328
- return WebServiceAgentClient(base_url, api_key)
329
-
330
-
331
- class LocalAgentClient:
332
- """Client for executing agents locally."""
333
-
334
- def __init__(self, registry: AgentRegistry):
335
- """Initialize local agent client."""
336
- self.registry = registry
337
-
338
- async def execute_request(self, request: AgentRequest) -> AgentResponse:
339
- """Execute agent request locally."""
340
- return await self.registry.execute_agent_request(request)
341
-
342
- async def list_agents(self) -> Dict[str, Dict[str, Any]]:
343
- """List available agents."""
344
- return self.registry.list_agents()
345
-
346
-
347
- class WebServiceAgentClient:
348
- """Client for executing agents via web service."""
349
-
350
- def __init__(self, base_url: str, api_key: Optional[str] = None):
351
- """Initialize web service client."""
352
- self.adapter = WebServiceAgentAdapter(base_url, api_key)
353
-
354
- async def execute_request(self, request: AgentRequest) -> AgentResponse:
355
- """Execute agent request via web service."""
356
- return await self.adapter.execute_agent_request(request)
357
-
358
- async def list_agents(self) -> Dict[str, Dict[str, Any]]:
359
- """List available agents."""
360
- return await self.adapter.list_agents()
361
-
362
-
363
- # Global registry instance (can be replaced with web service client)
364
- _global_registry = AgentRegistry()
365
-
366
-
367
- def get_agent_client() -> LocalAgentClient:
368
- """Get the global agent client (local by default)."""
369
- return LocalAgentClient(_global_registry)
370
-
371
-
372
- def set_web_service_client(base_url: str, api_key: Optional[str] = None):
373
- """Switch to web service client globally."""
374
- # This would replace the global client with web service client
375
- # Implementation depends on how we want to handle the global state
376
- pass
@@ -1,33 +0,0 @@
1
- """
2
- Core module for Django App Agent.
3
-
4
- This module contains the foundational components including:
5
- - Exception hierarchy
6
- - Configuration management
7
- - Base classes and interfaces
8
- - Logging infrastructure
9
- """
10
-
11
- from .exceptions import (
12
- DjangoAppAgentError,
13
- ConfigurationError,
14
- GenerationError,
15
- ValidationError,
16
- QualityValidationError,
17
- AgentExecutionError,
18
- AuthenticationError,
19
- RateLimitError,
20
- TimeoutError as AgentTimeoutError,
21
- )
22
-
23
- __all__ = [
24
- "DjangoAppAgentError",
25
- "ConfigurationError",
26
- "GenerationError",
27
- "ValidationError",
28
- "QualityValidationError",
29
- "AgentExecutionError",
30
- "AuthenticationError",
31
- "RateLimitError",
32
- "AgentTimeoutError",
33
- ]