django-cfg 1.3.9__py3-none-any.whl → 1.3.11__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 (187) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/payments/admin/networks_admin.py +12 -1
  3. django_cfg/apps/payments/admin/payments_admin.py +13 -0
  4. django_cfg/apps/payments/admin_interface/serializers/payment_serializers.py +62 -14
  5. django_cfg/apps/payments/admin_interface/templates/payments/components/payment_card.html +121 -0
  6. django_cfg/apps/payments/admin_interface/templates/payments/components/payment_qr_code.html +95 -0
  7. django_cfg/apps/payments/admin_interface/templates/payments/components/progress_bar.html +37 -0
  8. django_cfg/apps/payments/admin_interface/templates/payments/components/provider_stats.html +60 -0
  9. django_cfg/apps/payments/admin_interface/templates/payments/components/status_badge.html +41 -0
  10. django_cfg/apps/payments/admin_interface/templates/payments/components/status_overview.html +83 -0
  11. django_cfg/apps/payments/admin_interface/templates/payments/payment_detail.html +363 -0
  12. django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +33 -3
  13. django_cfg/apps/payments/admin_interface/views/api/payments.py +102 -0
  14. django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +96 -45
  15. django_cfg/apps/payments/admin_interface/views/forms.py +5 -1
  16. django_cfg/apps/payments/config/__init__.py +14 -15
  17. django_cfg/apps/payments/config/django_cfg_integration.py +59 -1
  18. django_cfg/apps/payments/config/helpers.py +8 -13
  19. django_cfg/apps/payments/migrations/0001_initial.py +33 -46
  20. django_cfg/apps/payments/migrations/0002_rename_payments_un_user_id_7f6e79_idx_payments_un_user_id_8ce187_idx_and_more.py +46 -0
  21. django_cfg/apps/payments/migrations/0003_universalpayment_status_changed_at.py +25 -0
  22. django_cfg/apps/payments/models/managers/payment_managers.py +142 -25
  23. django_cfg/apps/payments/models/payments.py +94 -0
  24. django_cfg/apps/payments/services/core/base.py +4 -4
  25. django_cfg/apps/payments/services/core/payment_service.py +265 -38
  26. django_cfg/apps/payments/services/providers/base.py +209 -3
  27. django_cfg/apps/payments/services/providers/models/__init__.py +2 -0
  28. django_cfg/apps/payments/services/providers/models/base.py +25 -2
  29. django_cfg/apps/payments/services/providers/nowpayments/models.py +2 -2
  30. django_cfg/apps/payments/services/providers/nowpayments/provider.py +57 -9
  31. django_cfg/apps/payments/services/providers/registry.py +5 -5
  32. django_cfg/apps/payments/services/types/requests.py +19 -7
  33. django_cfg/apps/payments/signals/payment_signals.py +31 -2
  34. django_cfg/apps/payments/static/payments/js/api-client.js +6 -1
  35. django_cfg/apps/payments/static/payments/js/payment-detail.js +167 -0
  36. django_cfg/apps/payments/static/payments/js/payment-form.js +35 -26
  37. django_cfg/apps/payments/templatetags/payment_tags.py +8 -0
  38. django_cfg/apps/payments/urls.py +3 -2
  39. django_cfg/apps/payments/views/api/currencies.py +3 -0
  40. django_cfg/apps/payments/views/serializers/currencies.py +18 -5
  41. django_cfg/apps/tasks/admin/tasks_admin.py +2 -2
  42. django_cfg/apps/tasks/static/tasks/css/dashboard.css +68 -217
  43. django_cfg/apps/tasks/static/tasks/js/api.js +40 -84
  44. django_cfg/apps/tasks/static/tasks/js/components/DataManager.js +24 -0
  45. django_cfg/apps/tasks/static/tasks/js/components/TabManager.js +85 -0
  46. django_cfg/apps/tasks/static/tasks/js/components/TaskRenderer.js +216 -0
  47. django_cfg/apps/tasks/static/tasks/js/dashboard/main.mjs +245 -0
  48. django_cfg/apps/tasks/static/tasks/js/dashboard/overview.mjs +123 -0
  49. django_cfg/apps/tasks/static/tasks/js/dashboard/queues.mjs +120 -0
  50. django_cfg/apps/tasks/static/tasks/js/dashboard/tasks.mjs +350 -0
  51. django_cfg/apps/tasks/static/tasks/js/dashboard/workers.mjs +169 -0
  52. django_cfg/apps/tasks/tasks/__init__.py +10 -0
  53. django_cfg/apps/tasks/tasks/demo_tasks.py +133 -0
  54. django_cfg/apps/tasks/templates/tasks/components/management_actions.html +42 -45
  55. django_cfg/apps/tasks/templates/tasks/components/{status_cards.html → overview_content.html} +30 -11
  56. django_cfg/apps/tasks/templates/tasks/components/queues_content.html +19 -0
  57. django_cfg/apps/tasks/templates/tasks/components/tab_navigation.html +16 -10
  58. django_cfg/apps/tasks/templates/tasks/components/tasks_content.html +51 -0
  59. django_cfg/apps/tasks/templates/tasks/components/workers_content.html +30 -0
  60. django_cfg/apps/tasks/templates/tasks/layout/base.html +117 -0
  61. django_cfg/apps/tasks/templates/tasks/pages/dashboard.html +82 -0
  62. django_cfg/apps/tasks/templates/tasks/partials/task_row_template.html +40 -0
  63. django_cfg/apps/tasks/templates/tasks/widgets/task_filters.html +37 -0
  64. django_cfg/apps/tasks/templates/tasks/widgets/task_footer.html +41 -0
  65. django_cfg/apps/tasks/templates/tasks/widgets/task_table.html +50 -0
  66. django_cfg/apps/tasks/urls.py +2 -2
  67. django_cfg/apps/tasks/urls_admin.py +2 -2
  68. django_cfg/apps/tasks/utils/__init__.py +1 -0
  69. django_cfg/apps/tasks/utils/simulator.py +356 -0
  70. django_cfg/apps/tasks/views/__init__.py +16 -0
  71. django_cfg/apps/tasks/views/api.py +569 -0
  72. django_cfg/apps/tasks/views/dashboard.py +58 -0
  73. django_cfg/core/integration/__init__.py +21 -0
  74. django_cfg/management/commands/rundramatiq_simulator.py +430 -0
  75. django_cfg/models/constance.py +0 -11
  76. django_cfg/models/payments.py +137 -3
  77. django_cfg/modules/django_tasks.py +54 -21
  78. django_cfg/registry/core.py +4 -9
  79. django_cfg/template_archive/django_sample.zip +0 -0
  80. {django_cfg-1.3.9.dist-info → django_cfg-1.3.11.dist-info}/METADATA +2 -2
  81. {django_cfg-1.3.9.dist-info → django_cfg-1.3.11.dist-info}/RECORD +84 -152
  82. django_cfg/apps/payments/config/constance/__init__.py +0 -22
  83. django_cfg/apps/payments/config/constance/config_service.py +0 -123
  84. django_cfg/apps/payments/config/constance/fields.py +0 -69
  85. django_cfg/apps/payments/config/constance/settings.py +0 -160
  86. django_cfg/apps/payments/migrations/0002_currency_usd_rate_currency_usd_rate_updated_at.py +0 -26
  87. django_cfg/apps/payments/migrations/0003_remove_provider_currency_fields.py +0 -28
  88. django_cfg/apps/payments/migrations/0004_add_reserved_usd_field.py +0 -30
  89. django_cfg/apps/tasks/static/tasks/js/dashboard.js +0 -614
  90. django_cfg/apps/tasks/static/tasks/js/modals.js +0 -452
  91. django_cfg/apps/tasks/static/tasks/js/notifications.js +0 -144
  92. django_cfg/apps/tasks/static/tasks/js/task-monitor.js +0 -454
  93. django_cfg/apps/tasks/static/tasks/js/theme.js +0 -77
  94. django_cfg/apps/tasks/templates/tasks/base.html +0 -96
  95. django_cfg/apps/tasks/templates/tasks/components/info_cards.html +0 -85
  96. django_cfg/apps/tasks/templates/tasks/components/overview_tab.html +0 -22
  97. django_cfg/apps/tasks/templates/tasks/components/queues_tab.html +0 -19
  98. django_cfg/apps/tasks/templates/tasks/components/task_details_modal.html +0 -103
  99. django_cfg/apps/tasks/templates/tasks/components/tasks_tab.html +0 -32
  100. django_cfg/apps/tasks/templates/tasks/components/workers_tab.html +0 -29
  101. django_cfg/apps/tasks/templates/tasks/dashboard.html +0 -29
  102. django_cfg/apps/tasks/views.py +0 -461
  103. django_cfg/management/commands/app_agent_diagnose.py +0 -470
  104. django_cfg/management/commands/app_agent_generate.py +0 -342
  105. django_cfg/management/commands/app_agent_info.py +0 -308
  106. django_cfg/management/commands/auto_generate.py +0 -486
  107. django_cfg/modules/django_app_agent/__init__.py +0 -87
  108. django_cfg/modules/django_app_agent/agents/__init__.py +0 -40
  109. django_cfg/modules/django_app_agent/agents/base/__init__.py +0 -24
  110. django_cfg/modules/django_app_agent/agents/base/agent.py +0 -354
  111. django_cfg/modules/django_app_agent/agents/base/context.py +0 -236
  112. django_cfg/modules/django_app_agent/agents/base/executor.py +0 -430
  113. django_cfg/modules/django_app_agent/agents/generation/__init__.py +0 -12
  114. django_cfg/modules/django_app_agent/agents/generation/app_generator/__init__.py +0 -15
  115. django_cfg/modules/django_app_agent/agents/generation/app_generator/config_validator.py +0 -147
  116. django_cfg/modules/django_app_agent/agents/generation/app_generator/main.py +0 -99
  117. django_cfg/modules/django_app_agent/agents/generation/app_generator/models.py +0 -32
  118. django_cfg/modules/django_app_agent/agents/generation/app_generator/prompt_manager.py +0 -290
  119. django_cfg/modules/django_app_agent/agents/interfaces.py +0 -376
  120. django_cfg/modules/django_app_agent/core/__init__.py +0 -33
  121. django_cfg/modules/django_app_agent/core/config.py +0 -300
  122. django_cfg/modules/django_app_agent/core/exceptions.py +0 -359
  123. django_cfg/modules/django_app_agent/models/__init__.py +0 -71
  124. django_cfg/modules/django_app_agent/models/base.py +0 -283
  125. django_cfg/modules/django_app_agent/models/context.py +0 -496
  126. django_cfg/modules/django_app_agent/models/enums.py +0 -481
  127. django_cfg/modules/django_app_agent/models/requests.py +0 -500
  128. django_cfg/modules/django_app_agent/models/responses.py +0 -585
  129. django_cfg/modules/django_app_agent/pytest.ini +0 -6
  130. django_cfg/modules/django_app_agent/services/__init__.py +0 -42
  131. django_cfg/modules/django_app_agent/services/app_generator/__init__.py +0 -30
  132. django_cfg/modules/django_app_agent/services/app_generator/ai_integration.py +0 -133
  133. django_cfg/modules/django_app_agent/services/app_generator/context.py +0 -40
  134. django_cfg/modules/django_app_agent/services/app_generator/main.py +0 -202
  135. django_cfg/modules/django_app_agent/services/app_generator/structure.py +0 -316
  136. django_cfg/modules/django_app_agent/services/app_generator/validation.py +0 -125
  137. django_cfg/modules/django_app_agent/services/base.py +0 -437
  138. django_cfg/modules/django_app_agent/services/context_builder/__init__.py +0 -34
  139. django_cfg/modules/django_app_agent/services/context_builder/code_extractor.py +0 -141
  140. django_cfg/modules/django_app_agent/services/context_builder/context_generator.py +0 -276
  141. django_cfg/modules/django_app_agent/services/context_builder/main.py +0 -272
  142. django_cfg/modules/django_app_agent/services/context_builder/models.py +0 -40
  143. django_cfg/modules/django_app_agent/services/context_builder/pattern_analyzer.py +0 -85
  144. django_cfg/modules/django_app_agent/services/project_scanner/__init__.py +0 -31
  145. django_cfg/modules/django_app_agent/services/project_scanner/app_discovery.py +0 -311
  146. django_cfg/modules/django_app_agent/services/project_scanner/main.py +0 -221
  147. django_cfg/modules/django_app_agent/services/project_scanner/models.py +0 -59
  148. django_cfg/modules/django_app_agent/services/project_scanner/pattern_detection.py +0 -94
  149. django_cfg/modules/django_app_agent/services/questioning_service/__init__.py +0 -28
  150. django_cfg/modules/django_app_agent/services/questioning_service/main.py +0 -273
  151. django_cfg/modules/django_app_agent/services/questioning_service/models.py +0 -111
  152. django_cfg/modules/django_app_agent/services/questioning_service/question_generator.py +0 -251
  153. django_cfg/modules/django_app_agent/services/questioning_service/response_processor.py +0 -347
  154. django_cfg/modules/django_app_agent/services/questioning_service/session_manager.py +0 -356
  155. django_cfg/modules/django_app_agent/services/report_service.py +0 -332
  156. django_cfg/modules/django_app_agent/services/template_manager/__init__.py +0 -18
  157. django_cfg/modules/django_app_agent/services/template_manager/jinja_engine.py +0 -236
  158. django_cfg/modules/django_app_agent/services/template_manager/main.py +0 -159
  159. django_cfg/modules/django_app_agent/services/template_manager/models.py +0 -36
  160. django_cfg/modules/django_app_agent/services/template_manager/template_loader.py +0 -100
  161. django_cfg/modules/django_app_agent/services/template_manager/templates/admin.py.j2 +0 -105
  162. django_cfg/modules/django_app_agent/services/template_manager/templates/apps.py.j2 +0 -31
  163. django_cfg/modules/django_app_agent/services/template_manager/templates/cfg_config.py.j2 +0 -44
  164. django_cfg/modules/django_app_agent/services/template_manager/templates/cfg_module.py.j2 +0 -81
  165. django_cfg/modules/django_app_agent/services/template_manager/templates/forms.py.j2 +0 -107
  166. django_cfg/modules/django_app_agent/services/template_manager/templates/models.py.j2 +0 -139
  167. django_cfg/modules/django_app_agent/services/template_manager/templates/serializers.py.j2 +0 -91
  168. django_cfg/modules/django_app_agent/services/template_manager/templates/tests.py.j2 +0 -195
  169. django_cfg/modules/django_app_agent/services/template_manager/templates/urls.py.j2 +0 -35
  170. django_cfg/modules/django_app_agent/services/template_manager/templates/views.py.j2 +0 -211
  171. django_cfg/modules/django_app_agent/services/template_manager/variable_processor.py +0 -200
  172. django_cfg/modules/django_app_agent/services/validation_service/__init__.py +0 -25
  173. django_cfg/modules/django_app_agent/services/validation_service/django_validator.py +0 -333
  174. django_cfg/modules/django_app_agent/services/validation_service/main.py +0 -242
  175. django_cfg/modules/django_app_agent/services/validation_service/models.py +0 -66
  176. django_cfg/modules/django_app_agent/services/validation_service/quality_validator.py +0 -352
  177. django_cfg/modules/django_app_agent/services/validation_service/security_validator.py +0 -272
  178. django_cfg/modules/django_app_agent/services/validation_service/syntax_validator.py +0 -203
  179. django_cfg/modules/django_app_agent/ui/__init__.py +0 -25
  180. django_cfg/modules/django_app_agent/ui/cli.py +0 -419
  181. django_cfg/modules/django_app_agent/ui/rich_components.py +0 -622
  182. django_cfg/modules/django_app_agent/utils/__init__.py +0 -38
  183. django_cfg/modules/django_app_agent/utils/logging.py +0 -360
  184. django_cfg/modules/django_app_agent/utils/validation.py +0 -417
  185. {django_cfg-1.3.9.dist-info → django_cfg-1.3.11.dist-info}/WHEEL +0 -0
  186. {django_cfg-1.3.9.dist-info → django_cfg-1.3.11.dist-info}/entry_points.txt +0 -0
  187. {django_cfg-1.3.9.dist-info → django_cfg-1.3.11.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
- ]