pdd-skills 3.0.0

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 (261) hide show
  1. package/README.md +1478 -0
  2. package/bin/pdd.js +354 -0
  3. package/config/bpmn-rules.yaml +166 -0
  4. package/config/checkstyle.xml +105 -0
  5. package/config/eslint.config.js +48 -0
  6. package/config/pmd.xml +91 -0
  7. package/config/prd-rules.yaml +113 -0
  8. package/config/ruff.toml +45 -0
  9. package/config/sqlfluff.cfg +82 -0
  10. package/hooks/hook-executor.js +332 -0
  11. package/index.js +43 -0
  12. package/lib/api-routes.js +750 -0
  13. package/lib/api-server.js +408 -0
  14. package/lib/cache/cache-config.js +209 -0
  15. package/lib/cache/system-cache.js +852 -0
  16. package/lib/config-manager.js +373 -0
  17. package/lib/generate.js +528 -0
  18. package/lib/grpc/grpc-routes.js +1134 -0
  19. package/lib/grpc/grpc-server.js +912 -0
  20. package/lib/grpc/proto-definitions.js +1033 -0
  21. package/lib/init.js +172 -0
  22. package/lib/iteration/auto-fixer.js +1025 -0
  23. package/lib/iteration/auto-reviewer.js +923 -0
  24. package/lib/iteration/controller.js +577 -0
  25. package/lib/list.js +130 -0
  26. package/lib/mcp-server.js +548 -0
  27. package/lib/openclaw/api-integration.js +535 -0
  28. package/lib/openclaw/cli-integration.js +567 -0
  29. package/lib/openclaw/data-sync.js +845 -0
  30. package/lib/openclaw/openclaw-adapter.js +783 -0
  31. package/lib/plugin/example-plugins/code-stats/index.js +332 -0
  32. package/lib/plugin/example-plugins/code-stats/plugin.json +1 -0
  33. package/lib/plugin/example-plugins/custom-linter/index.js +472 -0
  34. package/lib/plugin/example-plugins/custom-linter/plugin.json +1 -0
  35. package/lib/plugin/example-plugins/hello-world/index.js +86 -0
  36. package/lib/plugin/example-plugins/hello-world/plugin.json +1 -0
  37. package/lib/plugin/plugin-manager.js +655 -0
  38. package/lib/plugin/plugin-sdk.js +565 -0
  39. package/lib/plugin/sandbox.js +627 -0
  40. package/lib/quality/rules/maintainability.js +418 -0
  41. package/lib/quality/rules/performance.js +498 -0
  42. package/lib/quality/rules/readability.js +441 -0
  43. package/lib/quality/rules/robustness.js +504 -0
  44. package/lib/quality/rules/security.js +444 -0
  45. package/lib/quality/scorer.js +576 -0
  46. package/lib/report.js +669 -0
  47. package/lib/sdk-base.js +301 -0
  48. package/lib/sdk-js.js +446 -0
  49. package/lib/sdk-python/README.md +546 -0
  50. package/lib/sdk-python/examples/basic_usage.py +450 -0
  51. package/lib/sdk-python/pdd_sdk/__init__.py +180 -0
  52. package/lib/sdk-python/pdd_sdk/client.py +1170 -0
  53. package/lib/sdk-python/pdd_sdk/events.py +423 -0
  54. package/lib/sdk-python/pdd_sdk/exceptions.py +158 -0
  55. package/lib/sdk-python/pdd_sdk/models.py +518 -0
  56. package/lib/sdk-python/pdd_sdk/utils.py +759 -0
  57. package/lib/token/budget-alert.js +367 -0
  58. package/lib/token/budget-manager.js +485 -0
  59. package/lib/update.js +54 -0
  60. package/lib/utils/logger.js +88 -0
  61. package/lib/verify.js +741 -0
  62. package/lib/version.js +52 -0
  63. package/lib/vm/README.md +102 -0
  64. package/lib/vm/dashboard/api-routes.js +669 -0
  65. package/lib/vm/dashboard/server.js +391 -0
  66. package/lib/vm/dashboard/sse.js +358 -0
  67. package/lib/vm/dashboard/static/css/dashboard.css +1378 -0
  68. package/lib/vm/dashboard/static/index.html +118 -0
  69. package/lib/vm/dashboard/static/js/app.js +949 -0
  70. package/lib/vm/dashboard/static/js/charts.js +913 -0
  71. package/lib/vm/dashboard/static/js/kanban-view.js +1053 -0
  72. package/lib/vm/dashboard/static/js/pipeline-view.js +463 -0
  73. package/lib/vm/dashboard/static/js/quality-view.js +598 -0
  74. package/lib/vm/dashboard/static/js/system-view.js +1021 -0
  75. package/lib/vm/data-provider.js +1191 -0
  76. package/lib/vm/event-bus.js +402 -0
  77. package/lib/vm/hooks/extract-hook.js +307 -0
  78. package/lib/vm/hooks/generate-hook.js +374 -0
  79. package/lib/vm/hooks/hook-interface.js +458 -0
  80. package/lib/vm/hooks/report-hook.js +331 -0
  81. package/lib/vm/hooks/verify-hook.js +454 -0
  82. package/lib/vm/models.js +1003 -0
  83. package/lib/vm/reconciler.js +855 -0
  84. package/lib/vm/scanner.js +988 -0
  85. package/lib/vm/state-schema.js +955 -0
  86. package/lib/vm/state-store.js +733 -0
  87. package/lib/vm/tui/components/card.js +339 -0
  88. package/lib/vm/tui/components/progress-bar.js +368 -0
  89. package/lib/vm/tui/components/sparkline.js +327 -0
  90. package/lib/vm/tui/components/status-light.js +294 -0
  91. package/lib/vm/tui/components/table.js +370 -0
  92. package/lib/vm/tui/input.js +335 -0
  93. package/lib/vm/tui/renderer.js +548 -0
  94. package/lib/vm/tui/screens/kanban-screen.js +397 -0
  95. package/lib/vm/tui/screens/overview-screen.js +357 -0
  96. package/lib/vm/tui/screens/quality-screen.js +336 -0
  97. package/lib/vm/tui/screens/system-screen.js +379 -0
  98. package/lib/vm/tui/tui.js +805 -0
  99. package/package.json +1 -0
  100. package/scripts/cso-analyzer.js +198 -0
  101. package/scripts/eval-runner.js +359 -0
  102. package/scripts/i18n-checker.js +109 -0
  103. package/scripts/linter/activiti-linter.js +272 -0
  104. package/scripts/linter/prd-linter.js +162 -0
  105. package/scripts/linter/report-generator.js +207 -0
  106. package/scripts/linter/run-linters.js +285 -0
  107. package/scripts/linter/sql-linter.js +166 -0
  108. package/scripts/token-analyzer.js +162 -0
  109. package/scripts/vm-test.js +180 -0
  110. package/skills/core/official-doc-writer/LICENSE +21 -0
  111. package/skills/core/official-doc-writer/README.md +232 -0
  112. package/skills/core/official-doc-writer/SKILL.md +475 -0
  113. package/skills/core/official-doc-writer/_meta.json +1 -0
  114. package/skills/core/official-doc-writer/document_generator.py +580 -0
  115. package/skills/core/official-doc-writer/evals/default-evals.json +1 -0
  116. package/skills/core/official-doc-writer/examples.md +150 -0
  117. package/skills/core/official-doc-writer/fonts/FONTS_LIST.md +45 -0
  118. package/skills/core/official-doc-writer/fonts/README.md +141 -0
  119. package/skills/core/official-doc-writer/fonts/SIMFANG.TTF +0 -0
  120. package/skills/core/official-doc-writer/fonts/SIMHEI.TTF +0 -0
  121. package/skills/core/official-doc-writer/fonts/SIMKAI.TTF +0 -0
  122. package/skills/core/official-doc-writer/fonts/SIMSUN.TTC +0 -0
  123. package/skills/core/official-doc-writer/fonts//346/226/271/346/255/243/345/260/217/346/240/207/345/256/213GBK.TTF +0 -0
  124. package/skills/core/official-doc-writer/references/GBT_9704-2012_/345/205/232/346/224/277/346/234/272/345/205/263/345/205/254/346/226/207/346/240/274/345/274/217.md +422 -0
  125. package/skills/core/official-doc-writer/scripts/__pycache__/generate_official_doc.cpython-313.pyc +0 -0
  126. package/skills/core/official-doc-writer/scripts/dialog_manager.py +564 -0
  127. package/skills/core/official-doc-writer/scripts/generate_official_doc.py +252 -0
  128. package/skills/core/official-doc-writer/scripts/install_fonts.py +390 -0
  129. package/skills/core/official-doc-writer/scripts/smart_prompts.py +363 -0
  130. package/skills/core/pdd-ba/SKILL.md +305 -0
  131. package/skills/core/pdd-ba/_meta.json +1 -0
  132. package/skills/core/pdd-ba/evals/default-evals.json +1 -0
  133. package/skills/core/pdd-code-reviewer/SKILL.md +378 -0
  134. package/skills/core/pdd-code-reviewer/_meta.json +1 -0
  135. package/skills/core/pdd-code-reviewer/evals/default-evals.json +1 -0
  136. package/skills/core/pdd-doc-change/SKILL.md +350 -0
  137. package/skills/core/pdd-doc-change/_meta.json +1 -0
  138. package/skills/core/pdd-doc-change/evals/default-evals.json +1 -0
  139. package/skills/core/pdd-doc-gardener/SKILL.md +248 -0
  140. package/skills/core/pdd-doc-gardener/_meta.json +1 -0
  141. package/skills/core/pdd-doc-gardener/evals/default-evals.json +1 -0
  142. package/skills/core/pdd-entropy-reduction/SKILL.md +360 -0
  143. package/skills/core/pdd-entropy-reduction/_meta.json +1 -0
  144. package/skills/core/pdd-entropy-reduction/evals/default-evals.json +1 -0
  145. package/skills/core/pdd-entropy-reduction/references/entropy-report-template.md +287 -0
  146. package/skills/core/pdd-entropy-reduction/references/golden-principles.md +573 -0
  147. package/skills/core/pdd-entropy-reduction/scripts/entropy_scan.py +712 -0
  148. package/skills/core/pdd-extract-features/SKILL.md +320 -0
  149. package/skills/core/pdd-extract-features/_meta.json +1 -0
  150. package/skills/core/pdd-extract-features/evals/default-evals.json +1 -0
  151. package/skills/core/pdd-generate-spec/SKILL.md +418 -0
  152. package/skills/core/pdd-generate-spec/_meta.json +1 -0
  153. package/skills/core/pdd-generate-spec/evals/default-evals.json +1 -0
  154. package/skills/core/pdd-implement-feature/SKILL.md +332 -0
  155. package/skills/core/pdd-implement-feature/_meta.json +1 -0
  156. package/skills/core/pdd-implement-feature/evals/default-evals.json +1 -0
  157. package/skills/core/pdd-main/SKILL.md +540 -0
  158. package/skills/core/pdd-main/_meta.json +1 -0
  159. package/skills/core/pdd-main/evals/default-evals.json +1 -0
  160. package/skills/core/pdd-main/evals/evals.json +215 -0
  161. package/skills/core/pdd-verify-feature/SKILL.md +474 -0
  162. package/skills/core/pdd-verify-feature/_meta.json +1 -0
  163. package/skills/core/pdd-verify-feature/evals/default-evals.json +1 -0
  164. package/skills/core/pdd-vm/evals/default-evals.json +1 -0
  165. package/skills/core/traffic-accident-assessor/LICENSE +29 -0
  166. package/skills/core/traffic-accident-assessor/SKILL.md +439 -0
  167. package/skills/core/traffic-accident-assessor/evals/evals.json +1 -0
  168. package/skills/core/traffic-accident-assessor/references/accident-types.md +369 -0
  169. package/skills/core/traffic-accident-assessor/references/liability-rules.md +287 -0
  170. package/skills/core/traffic-accident-assessor/references/traffic-laws.md +226 -0
  171. package/skills/core/traffic-accident-assessor/references//351/253/230/345/260/224/345/244/253/350/257/264/346/230/216/344/271/246.pdf +32576 -106
  172. package/skills/core/traffic-accident-assessor/scripts/generate_official_statement.py +588 -0
  173. package/skills/core/traffic-accident-assessor/scripts/generate_report.py +495 -0
  174. package/skills/core/traffic-accident-assessor/scripts/generate_statement.py +528 -0
  175. package/skills/core/traffic-accident-assessor.zip +0 -0
  176. package/skills/entropy/expert-arch-enforcer/SKILL.md +292 -0
  177. package/skills/entropy/expert-arch-enforcer/_meta.json +1 -0
  178. package/skills/entropy/expert-arch-enforcer/evals/default-evals.json +1 -0
  179. package/skills/entropy/expert-auto-refactor/SKILL.md +327 -0
  180. package/skills/entropy/expert-auto-refactor/_meta.json +1 -0
  181. package/skills/entropy/expert-auto-refactor/evals/default-evals.json +1 -0
  182. package/skills/entropy/expert-code-quality/SKILL.md +468 -0
  183. package/skills/entropy/expert-code-quality/_meta.json +1 -0
  184. package/skills/entropy/expert-code-quality/evals/default-evals.json +1 -0
  185. package/skills/entropy/expert-code-quality/evals/evals.json +109 -0
  186. package/skills/entropy/expert-code-quality/references/code-smells.md +605 -0
  187. package/skills/entropy/expert-code-quality/references/design-patterns.md +1111 -0
  188. package/skills/entropy/expert-code-quality/references/refactoring-catalog.md +1281 -0
  189. package/skills/entropy/expert-code-quality/references/solid-principles.md +524 -0
  190. package/skills/entropy/expert-entropy-auditor/SKILL.md +276 -0
  191. package/skills/entropy/expert-entropy-auditor/_meta.json +1 -0
  192. package/skills/entropy/expert-entropy-auditor/evals/default-evals.json +1 -0
  193. package/skills/expert/expert-activiti/SKILL.md +497 -0
  194. package/skills/expert/expert-activiti/_meta.json +1 -0
  195. package/skills/expert/expert-mysql/SKILL.md +832 -0
  196. package/skills/expert/expert-mysql/_meta.json +1 -0
  197. package/skills/expert/expert-performance/SKILL.md +379 -0
  198. package/skills/expert/expert-performance/_meta.json +1 -0
  199. package/skills/expert/expert-performance/evals/default-evals.json +1 -0
  200. package/skills/expert/expert-ruoyi/SKILL.md +472 -0
  201. package/skills/expert/expert-ruoyi/_meta.json +1 -0
  202. package/skills/expert/expert-security/SKILL.md +1341 -0
  203. package/skills/expert/expert-security/_meta.json +1 -0
  204. package/skills/expert/expert-security/evals/default-evals.json +1 -0
  205. package/skills/expert/software-architect/SKILL.md +350 -0
  206. package/skills/expert/software-architect/_meta.json +1 -0
  207. package/skills/expert/software-engineer/SKILL.md +437 -0
  208. package/skills/expert/software-engineer/_meta.json +1 -0
  209. package/skills/expert/software-engineer/architecture.md +130 -0
  210. package/skills/expert/software-engineer/patterns.md +151 -0
  211. package/skills/expert/software-engineer/testing.md +135 -0
  212. package/skills/expert/system-architect/SKILL.md +628 -0
  213. package/skills/expert/system-architect/_meta.json +1 -0
  214. package/skills/expert/system-architect/assets/templates/ARCHITECTURE.md +25 -0
  215. package/skills/expert/system-architect/assets/templates/README.md +44 -0
  216. package/skills/expert/system-architect/references/js-ts-standards.md +18 -0
  217. package/skills/expert/system-architect/references/python-standards.md +19 -0
  218. package/skills/expert/system-architect/references/scaffolding.md +61 -0
  219. package/skills/expert/system-architect/references/security-checklist.md +21 -0
  220. package/skills/openspec/openspec-apply-change/SKILL.md +156 -0
  221. package/skills/openspec/openspec-apply-change/_meta.json +1 -0
  222. package/skills/openspec/openspec-archive-change/SKILL.md +114 -0
  223. package/skills/openspec/openspec-archive-change/_meta.json +1 -0
  224. package/skills/openspec/openspec-bulk-archive-change/SKILL.md +246 -0
  225. package/skills/openspec/openspec-bulk-archive-change/_meta.json +1 -0
  226. package/skills/openspec/openspec-continue-change/SKILL.md +118 -0
  227. package/skills/openspec/openspec-continue-change/_meta.json +1 -0
  228. package/skills/openspec/openspec-explore/SKILL.md +288 -0
  229. package/skills/openspec/openspec-explore/_meta.json +1 -0
  230. package/skills/openspec/openspec-ff-change/SKILL.md +101 -0
  231. package/skills/openspec/openspec-ff-change/_meta.json +1 -0
  232. package/skills/openspec/openspec-new-change/SKILL.md +74 -0
  233. package/skills/openspec/openspec-new-change/_meta.json +1 -0
  234. package/skills/openspec/openspec-onboard/SKILL.md +554 -0
  235. package/skills/openspec/openspec-onboard/_meta.json +1 -0
  236. package/skills/openspec/openspec-sync-specs/SKILL.md +138 -0
  237. package/skills/openspec/openspec-sync-specs/_meta.json +1 -0
  238. package/skills/openspec/openspec-verify-change/SKILL.md +168 -0
  239. package/skills/openspec/openspec-verify-change/_meta.json +1 -0
  240. package/skills/pr/pdd-multi-review/SKILL.md +534 -0
  241. package/skills/pr/pdd-multi-review/_meta.json +1 -0
  242. package/skills/pr/pdd-pr-batch/SKILL.md +303 -0
  243. package/skills/pr/pdd-pr-batch/_meta.json +1 -0
  244. package/skills/pr/pdd-pr-create/SKILL.md +344 -0
  245. package/skills/pr/pdd-pr-create/_meta.json +1 -0
  246. package/skills/pr/pdd-pr-merge/SKILL.md +286 -0
  247. package/skills/pr/pdd-pr-merge/_meta.json +1 -0
  248. package/skills/pr/pdd-pr-review/SKILL.md +217 -0
  249. package/skills/pr/pdd-pr-review/_meta.json +1 -0
  250. package/skills/pr/pdd-task-manager/SKILL.md +636 -0
  251. package/skills/pr/pdd-task-manager/_meta.json +1 -0
  252. package/skills/pr/pdd-template-engine/SKILL.md +306 -0
  253. package/skills/pr/pdd-template-engine/_meta.json +1 -0
  254. package/templates/behavior-shaping/iron-law-template.md +87 -0
  255. package/templates/behavior-shaping/rationalization-template.md +62 -0
  256. package/templates/behavior-shaping/red-flags-template.md +70 -0
  257. package/templates/bilingual-template.md +139 -0
  258. package/templates/config/default.yaml +47 -0
  259. package/templates/project/default/README.md +31 -0
  260. package/templates/project/frontend/README.md +46 -0
  261. package/templates/project/java/README.md +48 -0
@@ -0,0 +1,518 @@
1
+ """
2
+ PDD SDK 数据模型定义
3
+
4
+ 使用 dataclass 定义所有请求和响应的数据结构,
5
+ 提供完整的类型注解和默认值。
6
+ """
7
+
8
+ from dataclasses import dataclass, field
9
+ from typing import Optional, List, Dict, Any
10
+ from enum import Enum
11
+ from datetime import datetime
12
+
13
+
14
+ class Severity(Enum):
15
+ """问题严重程度枚举"""
16
+
17
+ INFO = "info"
18
+ """信息级别,仅作提示"""
19
+
20
+ WARN = "warn"
21
+ """警告级别,可能存在问题"""
22
+
23
+ ERROR = "error"
24
+ """错误级别,必须修复"""
25
+
26
+
27
+ class TaskStatus(Enum):
28
+ """任务状态枚举"""
29
+
30
+ PENDING = "pending"
31
+ """等待执行"""
32
+
33
+ RUNNING = "running"
34
+ """正在执行"""
35
+
36
+ COMPLETED = "completed"
37
+ """已完成"""
38
+
39
+ FAILED = "failed"
40
+ """执行失败"""
41
+
42
+ CANCELLED = "cancelled"
43
+ """已取消"""
44
+
45
+
46
+ # ==================== 规格生成相关模型 ====================
47
+
48
+
49
+ @dataclass
50
+ class FeatureInfo:
51
+ """
52
+ 功能点信息
53
+
54
+ Attributes:
55
+ id: 功能点唯一标识
56
+ name: 功能点名称
57
+ description: 功能点描述
58
+ priority: 优先级 (1-5)
59
+ status: 当前状态
60
+ acceptance_criteria: 验收标准列表
61
+ """
62
+
63
+ id: str
64
+ name: str
65
+ description: str = ""
66
+ priority: int = 3
67
+ status: str = "pending"
68
+ acceptance_criteria: List[str] = field(default_factory=list)
69
+
70
+ def to_dict(self) -> Dict[str, Any]:
71
+ """转换为字典格式"""
72
+ return {
73
+ "id": self.id,
74
+ "name": self.name,
75
+ "description": self.description,
76
+ "priority": self.priority,
77
+ "status": self.status,
78
+ "acceptance_criteria": self.acceptance_criteria
79
+ }
80
+
81
+
82
+ @dataclass
83
+ class SpecResult:
84
+ """
85
+ 规格生成结果
86
+
87
+ Attributes:
88
+ success: 是否成功
89
+ spec_id: 规格文档唯一标识
90
+ spec_path: 规格文件路径
91
+ features: 提取的功能点列表
92
+ warnings: 警告信息列表
93
+ errors: 错误信息列表
94
+ duration_ms: 执行耗时(毫秒)
95
+ metadata: 额外的元数据
96
+ """
97
+
98
+ success: bool
99
+ spec_id: str
100
+ spec_path: str
101
+ features: List[Dict[str, Any]] = field(default_factory=list)
102
+ warnings: List[str] = field(default_factory=list)
103
+ errors: List[str] = field(default_factory=list)
104
+ duration_ms: int = 0
105
+ metadata: Dict[str, Any] = field(default_factory=dict)
106
+
107
+ @property
108
+ def feature_count(self) -> int:
109
+ """返回功能点数量"""
110
+ return len(self.features)
111
+
112
+
113
+ # ==================== 代码生成相关模型 ====================
114
+
115
+
116
+ @dataclass
117
+ class GeneratedFile:
118
+ """
119
+ 生成的文件信息
120
+
121
+ Attributes:
122
+ path: 文件相对路径
123
+ absolute_path: 文件绝对路径
124
+ lines_of_code: 代码行数
125
+ language: 编程语言
126
+ size_bytes: 文件大小(字节)
127
+ """
128
+
129
+ path: str
130
+ absolute_path: str = ""
131
+ lines_of_code: int = 0
132
+ language: str = ""
133
+ size_bytes: int = 0
134
+
135
+
136
+ @dataclass
137
+ class CodeResult:
138
+ """
139
+ 代码生成结果
140
+
141
+ Attributes:
142
+ success: 是否成功
143
+ feature_id: 生成的功能点 ID
144
+ files_generated: 生成的文件列表
145
+ lines_of_code: 总代码行数
146
+ warnings: 警告信息列表
147
+ errors: 错误信息列表
148
+ duration_ms: 执行耗时(毫秒)
149
+ """
150
+
151
+ success: bool
152
+ feature_id: str
153
+ files_generated: List[GeneratedFile] = field(default_factory=list)
154
+ lines_of_code: int = 0
155
+ warnings: List[str] = field(default_factory=list)
156
+ errors: List[str] = field(default_factory=list)
157
+ duration_ms: int = 0
158
+
159
+ @property
160
+ def file_count(self) -> int:
161
+ """返回生成的文件数量"""
162
+ return len(self.files_generated)
163
+
164
+ @property
165
+ def file_paths(self) -> List[str]:
166
+ """返回所有文件的路径列表"""
167
+ return [f.path for f in self.files_generated]
168
+
169
+
170
+ # ==================== 验证相关模型 ====================
171
+
172
+
173
+ @dataclass
174
+ class VerifyCriterion:
175
+ """
176
+ 单个验收标准验证结果
177
+
178
+ Attributes:
179
+ name: 标准名称
180
+ passed: 是否通过
181
+ details: 详细说明
182
+ severity: 严重程度
183
+ """
184
+
185
+ name: str
186
+ passed: bool
187
+ details: str = ""
188
+ severity: Severity = Severity.INFO
189
+
190
+
191
+ @dataclass
192
+ class VerifyIssue:
193
+ """
194
+ 验证发现的问题
195
+
196
+ Attributes:
197
+ file_path: 问题所在文件
198
+ line_number: 行号(可选)
199
+ message: 问题描述
200
+ severity: 严重程度
201
+ suggestion: 修复建议
202
+ """
203
+
204
+ file_path: str
205
+ message: str
206
+ severity: Severity = Severity.ERROR
207
+ line_number: Optional[int] = None
208
+ suggestion: str = ""
209
+
210
+ def to_dict(self) -> Dict[str, Any]:
211
+ """转换为字典格式"""
212
+ return {
213
+ "file_path": self.file_path,
214
+ "line_number": self.line_number,
215
+ "message": self.message,
216
+ "severity": self.severity.value,
217
+ "suggestion": self.suggestion
218
+ }
219
+
220
+
221
+ @dataclass
222
+ class VerifyResult:
223
+ """
224
+ 功能验证结果
225
+
226
+ Attributes:
227
+ success: 是否通过验证
228
+ coverage_percent: 覆盖率百分比
229
+ criteria_passed: 通过的验收标准列表
230
+ criteria_failed: 未通过的验收标准列表
231
+ issues: 发现的问题列表
232
+ summary: 验证摘要
233
+ duration_ms: 执行耗时(毫秒)
234
+ """
235
+
236
+ success: bool
237
+ coverage_percent: float = 0.0
238
+ criteria_passed: List[str] = field(default_factory=list)
239
+ criteria_failed: List[str] = field(default_factory=list)
240
+ issues: List[VerifyIssue] = field(default_factory=list)
241
+ summary: str = ""
242
+ duration_ms: int = 0
243
+
244
+ @property
245
+ def total_criteria(self) -> int:
246
+ """返回总验收标准数"""
247
+ return len(self.criteria_passed) + len(self.criteria_failed)
248
+
249
+ @property
250
+ def issue_count(self) -> int:
251
+ """返回问题总数"""
252
+ return len(self.issues)
253
+
254
+ @property
255
+ def error_count(self) -> int:
256
+ """返回错误级别问题数量"""
257
+ return sum(1 for i in self.issues if i.severity == Severity.ERROR)
258
+
259
+
260
+ # ==================== 代码审查相关模型 ====================
261
+
262
+
263
+ @dataclass
264
+ class ReviewFinding:
265
+ """
266
+ 审查发现项
267
+
268
+ Attributes:
269
+ rule_id: 规则 ID
270
+ category: 分类 (complexity|security|style|performance|best-practice)
271
+ severity: 严重程度
272
+ file_path: 所在文件
273
+ line_number: 行号
274
+ message: 描述信息
275
+ suggestion: 改进建议
276
+ """
277
+
278
+ rule_id: str
279
+ category: str
280
+ severity: Severity
281
+ message: str
282
+ file_path: str = ""
283
+ line_number: Optional[int] = None
284
+ suggestion: str = ""
285
+
286
+ def to_dict(self) -> Dict[str, Any]:
287
+ """转换为字典格式"""
288
+ return {
289
+ "rule_id": self.rule_id,
290
+ "category": self.category,
291
+ "severity": self.severity.value,
292
+ "file_path": self.file_path,
293
+ "line_number": self.line_number,
294
+ "message": self.message,
295
+ "suggestion": self.suggestion
296
+ }
297
+
298
+
299
+ @dataclass
300
+ class ReviewResult:
301
+ """
302
+ 代码审查结果
303
+
304
+ Attributes:
305
+ success: 是否成功完成审查
306
+ score: 综合评分 (0-100)
307
+ grade: 等级 (A/B/C/D/F)
308
+ findings: 发现的问题列表
309
+ metrics: 各维度指标
310
+ summary: 审查摘要
311
+ duration_ms: 执行耗时(毫秒)
312
+ """
313
+
314
+ success: bool
315
+ score: float = 0.0
316
+ grade: str = ""
317
+ findings: List[ReviewFinding] = field(default_factory=list)
318
+ metrics: Dict[str, float] = field(default_factory=dict)
319
+ summary: str = ""
320
+ duration_ms: int = 0
321
+
322
+ @property
323
+ def finding_count(self) -> int:
324
+ """返回问题总数"""
325
+ return len(self.findings)
326
+
327
+ @property
328
+ def critical_count(self) -> int:
329
+ """返回严重问题数量"""
330
+ return sum(1 for f in self.findings if f.severity == Severity.ERROR)
331
+
332
+ def get_findings_by_severity(self, severity: Severity) -> List[ReviewFinding]:
333
+ """按严重程度筛选问题"""
334
+ return [f for f in self.findings if f.severity == severity]
335
+
336
+
337
+ # ==================== 技能相关模型 ====================
338
+
339
+
340
+ @dataclass
341
+ class SkillInfo:
342
+ """
343
+ 技能信息
344
+
345
+ Attributes:
346
+ name: 技能名称
347
+ version: 版本号
348
+ description: 技能描述
349
+ category: 所属分类
350
+ triggers: 触发关键词列表
351
+ has_evals: 是否包含评估用例
352
+ author: 作者(可选)
353
+ tags: 标签列表
354
+ """
355
+
356
+ name: str
357
+ version: str
358
+ description: str
359
+ category: str
360
+ triggers: List[str] = field(default_factory=list)
361
+ has_evals: bool = False
362
+ author: Optional[str] = None
363
+ tags: List[str] = field(default_factory=list)
364
+
365
+ def to_dict(self) -> Dict[str, Any]:
366
+ """转换为字典格式"""
367
+ return {
368
+ "name": self.name,
369
+ "version": self.version,
370
+ "description": self.description,
371
+ "category": self.category,
372
+ "triggers": self.triggers,
373
+ "has_evals": self.has_evals,
374
+ "author": self.author,
375
+ "tags": self.tags
376
+ }
377
+
378
+
379
+ # ==================== 会话相关模型 ====================
380
+
381
+
382
+ @dataclass
383
+ class Session:
384
+ """
385
+ 开发会话
386
+
387
+ Attributes:
388
+ session_id: 会话唯一标识
389
+ name: 会话名称
390
+ created_at: 创建时间
391
+ updated_at: 最后更新时间
392
+ status: 会话状态
393
+ specs: 关联的规格列表
394
+ metadata: 额外元数据
395
+ """
396
+
397
+ session_id: str
398
+ name: str
399
+ created_at: datetime = field(default_factory=datetime.now)
400
+ updated_at: datetime = field(default_factory=datetime.now)
401
+ status: TaskStatus = TaskStatus.PENDING
402
+ specs: List[str] = field(default_factory=list)
403
+ metadata: Dict[str, Any] = field(default_factory=dict)
404
+
405
+ def to_dict(self) -> Dict[str, Any]:
406
+ """转换为字典格式"""
407
+ return {
408
+ "session_id": self.session_id,
409
+ "name": self.name,
410
+ "created_at": self.created_at.isoformat(),
411
+ "updated_at": self.updated_at.isoformat(),
412
+ "status": self.status.value,
413
+ "specs": self.specs,
414
+ "metadata": self.metadata
415
+ }
416
+
417
+
418
+ # ==================== 服务状态模型 ====================
419
+
420
+
421
+ @dataclass
422
+ class ServerInfo:
423
+ """
424
+ 服务端信息
425
+
426
+ Attributes:
427
+ version: 服务版本号
428
+ uptime: 运行时间(秒)
429
+ supported_apis: 支持的 API 列表
430
+ available_skills: 可用技能数量
431
+ system_info: 系统信息
432
+ """
433
+
434
+ version: str
435
+ uptime: float = 0.0
436
+ supported_apis: List[str] = field(default_factory=list)
437
+ available_skills: int = 0
438
+ system_info: Dict[str, str] = field(default_factory=dict)
439
+
440
+
441
+ @dataclass
442
+ class StatusResult:
443
+ """
444
+ 服务状态查询结果
445
+
446
+ Attributes:
447
+ healthy: 是否健康
448
+ server_info: 服务端详细信息
449
+ response_time_ms: 响应时间(毫秒)
450
+ timestamp: 查询时间戳
451
+ """
452
+
453
+ healthy: bool
454
+ server_info: Optional[ServerInfo] = None
455
+ response_time_ms: int = 0
456
+ timestamp: datetime = field(default_factory=datetime.now)
457
+
458
+
459
+ # ==================== 批量操作结果 ====================
460
+
461
+
462
+ @dataclass
463
+ class BatchResult:
464
+ """
465
+ 批量操作结果
466
+
467
+ Attributes:
468
+ total: 总任务数
469
+ succeeded: 成功数
470
+ failed: 失败数
471
+ results: 各任务的结果列表
472
+ errors: 失败任务的错误信息
473
+ total_duration_ms: 总耗时(毫秒)
474
+ """
475
+
476
+ total: int
477
+ succeeded: int = 0
478
+ failed: int = 0
479
+ results: List[Any] = field(default_factory=list)
480
+ errors: List[Dict[str, Any]] = field(default_factory=list)
481
+ total_duration_ms: int = 0
482
+
483
+ @property
484
+ def success_rate(self) -> float:
485
+ """返回成功率百分比"""
486
+ if self.total == 0:
487
+ return 0.0
488
+ return (self.succeeded / self.total) * 100
489
+
490
+
491
+ # ==================== 事件数据模型 ====================
492
+
493
+
494
+ @dataclass
495
+ class EventData:
496
+ """
497
+ 事件数据
498
+
499
+ Attributes:
500
+ event_type: 事件类型
501
+ timestamp: 事件发生时间
502
+ data: 事件负载数据
503
+ source: 事件来源
504
+ """
505
+
506
+ event_type: str
507
+ data: Dict[str, Any]
508
+ timestamp: datetime = field(default_factory=datetime.now)
509
+ source: str = "pdd_sdk"
510
+
511
+ def to_dict(self) -> Dict[str, Any]:
512
+ """转换为字典格式"""
513
+ return {
514
+ "event_type": self.event_type,
515
+ "timestamp": self.timestamp.isoformat(),
516
+ "data": self.data,
517
+ "source": self.source
518
+ }