devsquad 3.6.0__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.
- devsquad-3.6.0.dist-info/METADATA +944 -0
- devsquad-3.6.0.dist-info/RECORD +95 -0
- devsquad-3.6.0.dist-info/WHEEL +5 -0
- devsquad-3.6.0.dist-info/entry_points.txt +2 -0
- devsquad-3.6.0.dist-info/licenses/LICENSE +21 -0
- devsquad-3.6.0.dist-info/top_level.txt +2 -0
- scripts/__init__.py +0 -0
- scripts/ai_semantic_matcher.py +512 -0
- scripts/alert_manager.py +505 -0
- scripts/api/__init__.py +43 -0
- scripts/api/models.py +386 -0
- scripts/api/routes/__init__.py +20 -0
- scripts/api/routes/dispatch.py +348 -0
- scripts/api/routes/lifecycle.py +330 -0
- scripts/api/routes/metrics_gates.py +347 -0
- scripts/api_server.py +318 -0
- scripts/auth.py +451 -0
- scripts/cli/__init__.py +1 -0
- scripts/cli/cli_visual.py +642 -0
- scripts/cli.py +1094 -0
- scripts/collaboration/__init__.py +212 -0
- scripts/collaboration/_version.py +1 -0
- scripts/collaboration/agent_briefing.py +656 -0
- scripts/collaboration/ai_semantic_matcher.py +260 -0
- scripts/collaboration/anchor_checker.py +281 -0
- scripts/collaboration/anti_rationalization.py +470 -0
- scripts/collaboration/async_integration_example.py +255 -0
- scripts/collaboration/batch_scheduler.py +149 -0
- scripts/collaboration/checkpoint_manager.py +561 -0
- scripts/collaboration/ci_feedback_adapter.py +351 -0
- scripts/collaboration/code_map_generator.py +247 -0
- scripts/collaboration/concern_pack_loader.py +352 -0
- scripts/collaboration/confidence_score.py +496 -0
- scripts/collaboration/config_loader.py +188 -0
- scripts/collaboration/consensus.py +244 -0
- scripts/collaboration/context_compressor.py +533 -0
- scripts/collaboration/coordinator.py +668 -0
- scripts/collaboration/dispatcher.py +1636 -0
- scripts/collaboration/dual_layer_context.py +128 -0
- scripts/collaboration/enhanced_worker.py +539 -0
- scripts/collaboration/feature_usage_tracker.py +206 -0
- scripts/collaboration/five_axis_consensus.py +334 -0
- scripts/collaboration/input_validator.py +401 -0
- scripts/collaboration/integration_example.py +287 -0
- scripts/collaboration/intent_workflow_mapper.py +350 -0
- scripts/collaboration/language_parsers.py +269 -0
- scripts/collaboration/lifecycle_protocol.py +1446 -0
- scripts/collaboration/llm_backend.py +453 -0
- scripts/collaboration/llm_cache.py +448 -0
- scripts/collaboration/llm_cache_async.py +347 -0
- scripts/collaboration/llm_retry.py +387 -0
- scripts/collaboration/llm_retry_async.py +389 -0
- scripts/collaboration/mce_adapter.py +597 -0
- scripts/collaboration/memory_bridge.py +1607 -0
- scripts/collaboration/models.py +537 -0
- scripts/collaboration/null_providers.py +297 -0
- scripts/collaboration/operation_classifier.py +289 -0
- scripts/collaboration/output_slicer.py +225 -0
- scripts/collaboration/performance_monitor.py +462 -0
- scripts/collaboration/permission_guard.py +865 -0
- scripts/collaboration/prompt_assembler.py +756 -0
- scripts/collaboration/prompt_variant_generator.py +483 -0
- scripts/collaboration/protocols.py +267 -0
- scripts/collaboration/report_formatter.py +352 -0
- scripts/collaboration/retrospective.py +279 -0
- scripts/collaboration/role_matcher.py +92 -0
- scripts/collaboration/role_template_market.py +352 -0
- scripts/collaboration/rule_collector.py +678 -0
- scripts/collaboration/scratchpad.py +346 -0
- scripts/collaboration/skill_registry.py +151 -0
- scripts/collaboration/skillifier.py +878 -0
- scripts/collaboration/standardized_role_template.py +317 -0
- scripts/collaboration/task_completion_checker.py +237 -0
- scripts/collaboration/test_quality_guard.py +695 -0
- scripts/collaboration/unified_gate_engine.py +598 -0
- scripts/collaboration/usage_tracker.py +309 -0
- scripts/collaboration/user_friendly_error.py +176 -0
- scripts/collaboration/verification_gate.py +312 -0
- scripts/collaboration/warmup_manager.py +635 -0
- scripts/collaboration/worker.py +513 -0
- scripts/collaboration/workflow_engine.py +684 -0
- scripts/dashboard.py +1088 -0
- scripts/generate_benchmark_report.py +786 -0
- scripts/history_manager.py +604 -0
- scripts/mcp_server.py +289 -0
- skills/__init__.py +32 -0
- skills/dispatch/handler.py +52 -0
- skills/intent/handler.py +59 -0
- skills/registry.py +67 -0
- skills/retrospective/__init__.py +0 -0
- skills/retrospective/handler.py +125 -0
- skills/review/handler.py +356 -0
- skills/security/handler.py +454 -0
- skills/test/__init__.py +0 -0
- skills/test/handler.py +78 -0
scripts/api/models.py
ADDED
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
DevSquad API Data Models
|
|
5
|
+
|
|
6
|
+
Pydantic models for REST API request/response validation.
|
|
7
|
+
|
|
8
|
+
Models:
|
|
9
|
+
- LifecyclePhase: Phase information
|
|
10
|
+
- GateResult: Gate check result
|
|
11
|
+
- MetricsSnapshot: Performance metrics
|
|
12
|
+
- APIResponse: Standard API response wrapper
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from datetime import datetime
|
|
16
|
+
from enum import Enum
|
|
17
|
+
from typing import Any, Dict, List, Optional
|
|
18
|
+
|
|
19
|
+
from pydantic import BaseModel, Field, ConfigDict
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class PhaseStatus(str, Enum):
|
|
23
|
+
"""Lifecycle phase status enumeration."""
|
|
24
|
+
PENDING = "pending"
|
|
25
|
+
RUNNING = "running"
|
|
26
|
+
COMPLETED = "completed"
|
|
27
|
+
FAILED = "failed"
|
|
28
|
+
SKIPPED = "skipped"
|
|
29
|
+
BLOCKED = "blocked"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class UserRole(str, Enum):
|
|
33
|
+
"""User role enumeration."""
|
|
34
|
+
ADMIN = "admin"
|
|
35
|
+
OPERATOR = "operator"
|
|
36
|
+
VIEWER = "viewer"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class LifecyclePhase(BaseModel):
|
|
40
|
+
"""Lifecycle phase information model."""
|
|
41
|
+
model_config = ConfigDict(
|
|
42
|
+
json_schema_extra={
|
|
43
|
+
"example": {
|
|
44
|
+
"phase_id": "P1",
|
|
45
|
+
"name": "Requirements Analysis",
|
|
46
|
+
"description": "Gather and analyze project requirements",
|
|
47
|
+
"role_id": "product-manager",
|
|
48
|
+
"order": 1,
|
|
49
|
+
"status": "completed",
|
|
50
|
+
"dependencies": [],
|
|
51
|
+
"artifacts_in": None,
|
|
52
|
+
"artifacts_out": "Requirements Document"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
phase_id: str = Field(..., description="Unique phase identifier (e.g., P1, P2)")
|
|
58
|
+
name: str = Field(..., description="Human-readable phase name")
|
|
59
|
+
description: str = Field(..., description="Detailed phase description")
|
|
60
|
+
role_id: str = Field(..., description="Role responsible for this phase")
|
|
61
|
+
order: int = Field(..., description="Execution order")
|
|
62
|
+
status: PhaseStatus = Field(default=PhaseStatus.PENDING, description="Current phase status")
|
|
63
|
+
dependencies: List[str] = Field(default_factory=list, description="List of dependent phase IDs")
|
|
64
|
+
artifacts_in: Optional[str] = Field(None, description="Input artifacts for this phase")
|
|
65
|
+
artifacts_out: Optional[str] = Field(None, description="Output artifacts from this phase")
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class GateCheckRequest(BaseModel):
|
|
69
|
+
"""Gate check request model."""
|
|
70
|
+
model_config = ConfigDict(
|
|
71
|
+
json_schema_extra={
|
|
72
|
+
"example": {
|
|
73
|
+
"command": "build",
|
|
74
|
+
"strict_mode": False
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
command: str = Field(..., description="CLI command to check gate for (e.g., 'build', 'test')")
|
|
80
|
+
strict_mode: bool = Field(default=False, description="Enable strict gate checking")
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
class GateResult(BaseModel):
|
|
84
|
+
"""Gate check result model."""
|
|
85
|
+
model_config = ConfigDict(
|
|
86
|
+
json_schema_extra={
|
|
87
|
+
"example": {
|
|
88
|
+
"passed": True,
|
|
89
|
+
"verdict": "APPROVE",
|
|
90
|
+
"red_flags_count": 0,
|
|
91
|
+
"missing_evidence_count": 0,
|
|
92
|
+
"gap_report": None,
|
|
93
|
+
"checked_at": "2026-05-03T12:00:00"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
passed: bool = Field(..., description="Whether the gate check passed")
|
|
99
|
+
verdict: str = Field(..., description="Gate verdict (APPROVE/CONDITIONAL/REJECT)")
|
|
100
|
+
red_flags_count: int = Field(default=0, description="Number of red flags found")
|
|
101
|
+
missing_evidence_count: int = Field(default=0, description="Number of missing evidence items")
|
|
102
|
+
gap_report: Optional[str] = Field(None, description="Detailed gap analysis report")
|
|
103
|
+
checked_at: datetime = Field(default_factory=datetime.now, description="When the check was performed")
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
class CommandMapping(BaseModel):
|
|
107
|
+
"""CLI command to phases mapping model."""
|
|
108
|
+
model_config = ConfigDict(
|
|
109
|
+
json_schema_extra={
|
|
110
|
+
"example": {
|
|
111
|
+
"command": "build",
|
|
112
|
+
"phases": ["P8"],
|
|
113
|
+
"mode": "full",
|
|
114
|
+
"gate": "quality_gate"
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
command: str = Field(..., description="CLI command name")
|
|
120
|
+
phases: List[str] = Field(..., description="List of mapped phase IDs")
|
|
121
|
+
mode: str = Field(..., description="Lifecycle mode (shortcut/full/custom)")
|
|
122
|
+
gate: Optional[str] = Field(None, description="Required gate for this command")
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
class MetricsSnapshot(BaseModel):
|
|
126
|
+
"""Performance metrics snapshot model."""
|
|
127
|
+
model_config = ConfigDict(
|
|
128
|
+
json_schema_extra={
|
|
129
|
+
"example": {
|
|
130
|
+
"timestamp": "2026-05-03T12:00:00",
|
|
131
|
+
"total_phases": 11,
|
|
132
|
+
"completed_phases": 7,
|
|
133
|
+
"running_phases": 1,
|
|
134
|
+
"failed_phases": 0,
|
|
135
|
+
"completion_rate": 63.6,
|
|
136
|
+
"avg_response_time_ms": 150.5,
|
|
137
|
+
"p95_latency_ms": 450.2,
|
|
138
|
+
"success_rate": 99.5,
|
|
139
|
+
"cpu_usage_percent": 45.2,
|
|
140
|
+
"memory_usage_percent": 62.8
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
timestamp: datetime = Field(default_factory=datetime.now, description="When metrics were captured")
|
|
146
|
+
total_phases: int = Field(..., description="Total number of lifecycle phases")
|
|
147
|
+
completed_phases: int = Field(default=0, description="Number of completed phases")
|
|
148
|
+
running_phases: int = Field(default=0, description="Number of currently running phases")
|
|
149
|
+
failed_phases: int = Field(default=0, description="Number of failed phases")
|
|
150
|
+
completion_rate: float = Field(default=0.0, description="Completion percentage (0-100)")
|
|
151
|
+
|
|
152
|
+
# Response time metrics
|
|
153
|
+
avg_response_time_ms: float = Field(default=0.0, description="Average API response time in ms")
|
|
154
|
+
p95_latency_ms: float = Field(default=0.0, description="95th percentile latency in ms")
|
|
155
|
+
success_rate: float = Field(default=100.0, description="Request success rate percentage")
|
|
156
|
+
|
|
157
|
+
# Resource utilization
|
|
158
|
+
cpu_usage_percent: float = Field(default=0.0, description="CPU usage percentage")
|
|
159
|
+
memory_usage_percent: float = Field(default=0.0, description="Memory usage percentage")
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
class PhaseActionRequest(BaseModel):
|
|
163
|
+
"""Phase execution action request model."""
|
|
164
|
+
model_config = ConfigDict(
|
|
165
|
+
json_schema_extra={
|
|
166
|
+
"example": {
|
|
167
|
+
"phase_id": "P8",
|
|
168
|
+
"action": "advance",
|
|
169
|
+
"force": False,
|
|
170
|
+
"reason": None
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
phase_id: str = Field(..., description="Target phase ID")
|
|
176
|
+
action: str = Field(..., description="Action to perform (advance/complete/reset/skip)")
|
|
177
|
+
force: bool = Field(default=False, description="Force action even if dependencies not met")
|
|
178
|
+
reason: Optional[str] = Field(None, description="Reason for forced action")
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
class PhaseActionResult(BaseModel):
|
|
182
|
+
"""Phase action result model."""
|
|
183
|
+
model_config = ConfigDict(
|
|
184
|
+
json_schema_extra={
|
|
185
|
+
"example": {
|
|
186
|
+
"success": True,
|
|
187
|
+
"phase_id": "P8",
|
|
188
|
+
"action": "advance",
|
|
189
|
+
"message": "Successfully advanced to phase P8",
|
|
190
|
+
"previous_status": "pending",
|
|
191
|
+
"new_status": "running",
|
|
192
|
+
"performed_at": "2026-05-03T12:00:00"
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
success: bool = Field(..., description="Whether the action was successful")
|
|
198
|
+
phase_id: str = Field(..., description="Target phase ID")
|
|
199
|
+
action: str = Field(..., description="Action that was performed")
|
|
200
|
+
message: str = Field(..., description="Human-readable result message")
|
|
201
|
+
previous_status: Optional[PhaseStatus] = Field(None, description="Status before action")
|
|
202
|
+
new_status: Optional[PhaseStatus] = Field(None, description="Status after action")
|
|
203
|
+
performed_at: datetime = Field(default_factory=datetime.now, description="When action was performed")
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
class APIError(BaseModel):
|
|
207
|
+
"""Standard API error response model."""
|
|
208
|
+
error: str = Field(..., description="Error type identifier")
|
|
209
|
+
message: str = Field(..., description="Human-readable error message")
|
|
210
|
+
detail: Optional[str] = Field(None, description="Detailed error information")
|
|
211
|
+
status_code: int = Field(..., description="HTTP status code")
|
|
212
|
+
timestamp: datetime = Field(default_factory=datetime.now, description="When error occurred")
|
|
213
|
+
path: Optional[str] = Field(None, description="Request path that caused error")
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
class APISuccess(BaseModel):
|
|
217
|
+
"""Standard API success response model."""
|
|
218
|
+
success: bool = Field(default=True, description="Always true for success responses")
|
|
219
|
+
message: str = Field(..., description="Success message")
|
|
220
|
+
data: Optional[Any] = Field(None, description="Response payload")
|
|
221
|
+
timestamp: datetime = Field(default_factory=datetime.now, description="When response was generated")
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
class PaginatedResponse(BaseModel):
|
|
225
|
+
"""Paginated response wrapper model."""
|
|
226
|
+
items: List[Any] = Field(..., description="List of items in current page")
|
|
227
|
+
total: int = Field(..., description="Total number of items across all pages")
|
|
228
|
+
page: int = Field(1, description="Current page number (1-indexed)")
|
|
229
|
+
page_size: int = Field(20, description="Number of items per page")
|
|
230
|
+
total_pages: int = Field(..., description="Total number of pages")
|
|
231
|
+
has_next: bool = Field(False, description="Whether there is a next page")
|
|
232
|
+
has_prev: bool = Field(False, description="Whether there is a previous page")
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
class HealthCheck(BaseModel):
|
|
236
|
+
"""Health check response model."""
|
|
237
|
+
status: str = Field(..., description="Service status (healthy/degraded/unhealthy)")
|
|
238
|
+
version: str = Field(..., description="API version")
|
|
239
|
+
uptime_seconds: float = Field(..., description="How long the service has been running")
|
|
240
|
+
components: Dict[str, str] = Field(default_factory=dict, description="Component health statuses")
|
|
241
|
+
timestamp: datetime = Field(default_factory=datetime.now, description="When health was checked")
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
class TaskDispatchRequest(BaseModel):
|
|
245
|
+
"""Task dispatch request model / 任务调度请求模型"""
|
|
246
|
+
model_config = ConfigDict(
|
|
247
|
+
json_schema_extra={
|
|
248
|
+
"example": {
|
|
249
|
+
"task": "Design a user authentication system with JWT tokens",
|
|
250
|
+
"roles": ["architect", "security", "tester"],
|
|
251
|
+
"mode": "auto",
|
|
252
|
+
"backend": "mock",
|
|
253
|
+
"lang": "zh"
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
task: str = Field(..., description="任务描述 / Task description", min_length=1, max_length=10000)
|
|
259
|
+
roles: Optional[List[str]] = Field(default=None, description="指定角色列表 / Specific role list (e.g., ['architect', 'tester'])")
|
|
260
|
+
mode: str = Field(default="auto", description="执行模式 / Execution mode (auto/parallel/sequential/consensus)")
|
|
261
|
+
backend: Optional[str] = Field(default=None, description="LLM后端 / LLM backend (openai/anthropic/mock)")
|
|
262
|
+
lang: str = Field(default="auto", description="输出语言 / Output language (zh/en/ja/auto)")
|
|
263
|
+
dry_run: bool = Field(default=False, description="仅模拟执行 / Dry run only")
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
class QuickDispatchRequest(BaseModel):
|
|
267
|
+
"""Quick dispatch request model / 快速调度请求模型"""
|
|
268
|
+
model_config = ConfigDict(
|
|
269
|
+
json_schema_extra={
|
|
270
|
+
"example": {
|
|
271
|
+
"task": "Implement REST API for user management",
|
|
272
|
+
"output_format": "structured",
|
|
273
|
+
"include_action_items": True
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
)
|
|
277
|
+
|
|
278
|
+
task: str = Field(..., description="任务描述 / Task description", min_length=1, max_length=10000)
|
|
279
|
+
output_format: str = Field(default="structured", description="输出格式 / Output format (structured/compact/detailed)")
|
|
280
|
+
include_action_items: bool = Field(default=True, description="包含行动项 / Include action items")
|
|
281
|
+
include_timing: bool = Field(default=False, description="包含耗时分析 / Include timing analysis")
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
class WorkerResultItem(BaseModel):
|
|
285
|
+
"""Worker result item model / Worker结果项模型"""
|
|
286
|
+
worker_id: Optional[str] = Field(None, description="Worker ID")
|
|
287
|
+
role_id: str = Field(..., description="角色ID / Role ID")
|
|
288
|
+
role_name: str = Field(..., description="角色名称 / Role name")
|
|
289
|
+
task_id: Optional[str] = Field(None, description="Task ID")
|
|
290
|
+
success: bool = Field(..., description="是否成功 / Whether successful")
|
|
291
|
+
output: Optional[str] = Field(None, description="输出内容 / Output content")
|
|
292
|
+
error: Optional[str] = Field(None, description="错误信息 / Error message")
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
class IntentMatchInfo(BaseModel):
|
|
296
|
+
"""Intent match information model / 意图匹配信息模型"""
|
|
297
|
+
intent_type: Optional[str] = Field(None, description="意图类型 / Intent type")
|
|
298
|
+
workflow_chain: Optional[List[str]] = Field(None, description="工作流链 / Workflow chain")
|
|
299
|
+
confidence: Optional[float] = Field(None, description="置信度 / Confidence score")
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
class FiveAxisResult(BaseModel):
|
|
303
|
+
"""Five-axis consensus result model / 五轴共识结果模型"""
|
|
304
|
+
verdict: Optional[str] = Field(None, description="裁决结果 / Verdict")
|
|
305
|
+
overall_consensus: Optional[float] = Field(None, description="总体共识度 / Overall consensus")
|
|
306
|
+
axis_consensus: Optional[Dict[str, Any]] = Field(None, description="各轴共识 / Axis consensus")
|
|
307
|
+
action_items: Optional[List[str]] = Field(None, description="行动项 / Action items")
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
class AnchorResult(BaseModel):
|
|
311
|
+
"""Anchor check result model / 锚点检查结果模型"""
|
|
312
|
+
aligned: Optional[bool] = Field(None, description="是否对齐 / Whether aligned")
|
|
313
|
+
coverage: Optional[float] = Field(None, description="覆盖率 / Coverage")
|
|
314
|
+
drift_score: Optional[float] = Field(None, description="偏离分数 / Drift score")
|
|
315
|
+
severity: Optional[str] = Field(None, description="严重程度 / Severity")
|
|
316
|
+
recommendation: Optional[str] = Field(None, description="建议 / Recommendation")
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
class DispatchResponse(BaseModel):
|
|
320
|
+
"""Task dispatch response model / 任务调度响应模型"""
|
|
321
|
+
model_config = ConfigDict(
|
|
322
|
+
json_schema_extra={
|
|
323
|
+
"example": {
|
|
324
|
+
"success": True,
|
|
325
|
+
"task_description": "Design a user authentication system",
|
|
326
|
+
"matched_roles": ["architect", "security"],
|
|
327
|
+
"summary": "Task completed successfully",
|
|
328
|
+
"duration_seconds": 15.5,
|
|
329
|
+
"worker_results": [
|
|
330
|
+
{
|
|
331
|
+
"role_id": "architect",
|
|
332
|
+
"role_name": "Architect",
|
|
333
|
+
"success": True,
|
|
334
|
+
"output": "Architecture design..."
|
|
335
|
+
}
|
|
336
|
+
],
|
|
337
|
+
"intent_match": {"intent_type": "design", "confidence": 0.85},
|
|
338
|
+
"five_axis_result": {"verdict": "APPROVE", "overall_consensus": 0.82}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
success: bool = Field(..., description="是否成功 / Whether successful")
|
|
344
|
+
task_description: str = Field(..., description="任务描述 / Task description")
|
|
345
|
+
matched_roles: List[str] = Field(default_factory=list, description="匹配的角色 / Matched roles")
|
|
346
|
+
summary: str = Field(default="", description="执行摘要 / Execution summary")
|
|
347
|
+
duration_seconds: float = Field(default=0.0, description="耗时(秒) / Duration in seconds")
|
|
348
|
+
worker_results: List[WorkerResultItem] = Field(default_factory=list, description="Worker结果 / Worker results")
|
|
349
|
+
errors: List[str] = Field(default_factory=list, description="错误列表 / Error list")
|
|
350
|
+
intent_match: Optional[IntentMatchInfo] = Field(None, description="意图匹配 / Intent match")
|
|
351
|
+
five_axis_result: Optional[FiveAxisResult] = Field(None, description="五轴共识 / Five-axis consensus")
|
|
352
|
+
anchor_result: Optional[AnchorResult] = Field(None, description="锚点检查 / Anchor check")
|
|
353
|
+
scratchpad_summary: Optional[str] = Field(None, description="Scratchpad摘要 / Scratchpad summary")
|
|
354
|
+
consensus_records: Optional[List[Dict[str, Any]]] = Field(None, description="共识记录 / Consensus records")
|
|
355
|
+
compression_info: Optional[Dict[str, Any]] = Field(None, description="压缩信息 / Compression info")
|
|
356
|
+
memory_stats: Optional[Dict[str, Any]] = Field(None, description="记忆统计 / Memory stats")
|
|
357
|
+
permission_checks: Optional[List[Dict[str, Any]]] = Field(None, description="权限检查 / Permission checks")
|
|
358
|
+
skill_proposals: Optional[List[Dict[str, Any]]] = Field(None, description="Skill提案 / Skill proposals")
|
|
359
|
+
quality_report: Optional[str] = Field(None, description="质量报告 / Quality report")
|
|
360
|
+
retrospective_report: Optional[Dict[str, Any]] = Field(None, description="回顾报告 / Retrospective report")
|
|
361
|
+
details: Optional[Dict[str, Any]] = Field(None, description="详细信息 / Details")
|
|
362
|
+
timestamp: datetime = Field(default_factory=datetime.now, description="响应时间 / Response timestamp")
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
class RoleInfo(BaseModel):
|
|
366
|
+
"""Role information model / 角色信息模型"""
|
|
367
|
+
role_id: str = Field(..., description="角色ID / Role ID")
|
|
368
|
+
name: str = Field(..., description="角色名称 / Role name")
|
|
369
|
+
description: Optional[str] = Field(None, description="角色描述 / Role description")
|
|
370
|
+
keywords: Optional[List[str]] = Field(None, description="关键词 / Keywords")
|
|
371
|
+
status: Optional[str] = Field(None, description="状态 / Status")
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
class RolesListResponse(BaseModel):
|
|
375
|
+
"""Roles list response model / 角色列表响应模型"""
|
|
376
|
+
roles: List[RoleInfo] = Field(..., description="角色列表 / Role list")
|
|
377
|
+
total: int = Field(..., description="总数 / Total count")
|
|
378
|
+
core_roles: List[str] = Field(default_factory=list, description="核心角色 / Core roles")
|
|
379
|
+
planned_roles: List[str] = Field(default_factory=list, description="规划中角色 / Planned roles")
|
|
380
|
+
|
|
381
|
+
|
|
382
|
+
class DispatchHistoryResponse(BaseModel):
|
|
383
|
+
"""Dispatch history response model / 调度历史响应模型"""
|
|
384
|
+
history: List[Dict[str, Any]] = Field(..., description="调度历史 / Dispatch history")
|
|
385
|
+
total: int = Field(..., description="总数 / Total count")
|
|
386
|
+
limit: int = Field(..., description="查询限制 / Query limit")
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# API Routes Package
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
DevSquad API Routes Package
|
|
5
|
+
|
|
6
|
+
Provides REST API endpoints for:
|
|
7
|
+
- Task Dispatch: Multi-agent task orchestration
|
|
8
|
+
- Lifecycle Management: 11-phase lifecycle control
|
|
9
|
+
- Metrics & Gates: Performance monitoring and quality gates
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from scripts.api.routes.lifecycle import router as lifecycle_router
|
|
13
|
+
from scripts.api.routes.metrics_gates import router as metrics_router
|
|
14
|
+
from scripts.api.routes.dispatch import router as dispatch_router
|
|
15
|
+
|
|
16
|
+
__all__ = [
|
|
17
|
+
"lifecycle_router",
|
|
18
|
+
"metrics_router",
|
|
19
|
+
"dispatch_router",
|
|
20
|
+
]
|