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,497 @@
1
+ ---
2
+ name: expert-activiti
3
+ description: Activiti工作流引擎专家,精通Activiti 7 Core/Cloud架构和BPMN 2.0规范。当用户涉及工作流设计或流程引擎开发时自动触发。支持中文触发:工作流设计、流程引擎、BPMN建模、Activiti开发。
4
+ license: MIT
5
+ compatibility: Activiti 7.x
6
+ metadata:
7
+ author: "neuqik@hotmail.com"
8
+ version: "2.0"
9
+ triggers:
10
+ - "/activiti" | "/bpmn" | "/workflow"
11
+ - "工作流" | "流程设计" | "BPMN"
12
+ - "流程部署" | "任务管理" | "Activiti"
13
+ ---
14
+
15
+ # Activiti工作流引擎专家
16
+
17
+ ## 1. 技能概述
18
+
19
+ ### 1.1 核心能力
20
+
21
+ ```yaml
22
+ 核心能力:
23
+ - BPMN建模: BPMN 2.0流程设计与规范
24
+ - 流程引擎: Activiti 7 Core/Cloud架构
25
+ - 流程部署: 流程定义、版本管理
26
+ - 任务管理: 用户任务、候选组、代理规则
27
+ - 表达式: UEL表达式、脚本任务
28
+
29
+ 适用场景:
30
+ - 流程设计与建模
31
+ - 流程部署与版本管理
32
+ - 任务查询与办理
33
+ - 流程变量处理
34
+ - 事件与监听器配置
35
+ ```
36
+
37
+ ### 1.2 与其他技能协作
38
+
39
+ | 协作技能 | 协作方式 | 传入数据 | 期望输出 |
40
+ |---------|---------|---------|---------|
41
+ | **pdd-implement-feature** | Consultation | 工作流问题 | 解决方案 |
42
+ | **software-architect** | Consultation | 流程架构 | 模块划分建议 |
43
+
44
+ ## 2. BPMN 2.0 核心元素
45
+
46
+ ### 2.1 流程元素分类
47
+
48
+ ```yaml
49
+ 流程元素:
50
+ 启动事件:
51
+ - Start Event: 流程开始
52
+ - Intermediate Event: 流程中间事件
53
+ - End Event: 流程结束
54
+
55
+ 活动:
56
+ - Task: 用户任务
57
+ - Service Task: 服务任务
58
+ - Script Task: 脚本任务
59
+ - Call Activity: 调用活动
60
+ - Subprocess: 子流程
61
+
62
+ 网关:
63
+ - Exclusive Gateway: 排他网关
64
+ - Parallel Gateway: 并行网关
65
+ - Inclusive Gateway: 包容网关
66
+ - Event Gateway: 事件网关
67
+
68
+ 序列流:
69
+ - Sequential Flow: 顺序流
70
+ - Default Flow: 默认流
71
+ - Conditional Flow: 条件流
72
+ ```
73
+
74
+ ### 2.2 BPMN元素速查表
75
+
76
+ | 元素 | XML标签 | 说明 |
77
+ |------|---------|------|
78
+ | 开始事件 | `<startEvent>` | 流程启动点 |
79
+ | 结束事件 | `<endEvent>` | 流程结束点 |
80
+ | 用户任务 | `<userTask>` | 人工处理 |
81
+ | 服务任务 | `<serviceTask>` | 自动处理 |
82
+ | 排他网关 | `<exclusiveGateway>` | 选一分支 |
83
+ | 并行网关 | `<parallelGateway>` | 并行执行 |
84
+ | 顺序流 | `<sequenceFlow>` | 连接元素 |
85
+
86
+ ## 3. 快速诊断模式
87
+
88
+ ### 3.1 流程部署问题
89
+
90
+ ```
91
+ 问题: 流程部署失败
92
+
93
+ 诊断流程:
94
+ 1. 检查 BPMN 文件格式
95
+ - 文件后缀: .bpmn20.xml 或 .bpmn
96
+ - XML必须符合BPMN规范
97
+
98
+ 2. 检查流程定义ID
99
+ - 必须唯一
100
+ - 不能使用特殊字符
101
+
102
+ 3. 检查 Start Event
103
+ - 每个流程必须有一个Start Event
104
+ - Start Event不能有多个Outgoing Sequence Flow
105
+
106
+ 4. 检查 Gateway 条件
107
+ - 排他网关必须设置条件
108
+ - 条件表达式必须正确
109
+
110
+ 5. 检查服务任务实现
111
+ - Delegate Expression 指向存在的Bean
112
+ - Class 指向存在的类
113
+ ```
114
+
115
+ ### 3.2 任务查询问题
116
+
117
+ ```
118
+ 问题: 用户看不到待办任务
119
+
120
+ 诊断流程:
121
+ 1. 检查任务候选用户
122
+ - candidateUser 或 candidateGroup
123
+ - 用户是否在候选组中
124
+
125
+ 2. 检查任务 assignee
126
+ - 任务是否已签收
127
+ - 签收用户是否正确
128
+
129
+ 3. 检查流程变量
130
+ - 是否设置了正确的候选人
131
+ - 候选人是否正确存储
132
+
133
+ 4. 检查权限配置
134
+ - 用户是否有任务查看权限
135
+ ```
136
+
137
+ ## 4. 核心配置规范
138
+
139
+ ### 4.1 流程定义部署
140
+
141
+ ```java
142
+ // 方式一: 通过 BPMN 文件部署
143
+ @Deployment
144
+ @Test
145
+ public void deploymentTest() {
146
+ repositoryService.createDeployment()
147
+ .name("转让审批流程")
148
+ .key("transfer-approval")
149
+ .addClasspathResource("processes/TransferApproval.bpmn20.xml")
150
+ .deploy();
151
+ }
152
+
153
+ // 方式二: 通过 ZIP 包部署
154
+ @Deployment
155
+ public void deploymentZipTest() {
156
+ ZipInputStream zipInputStream = new ZipInputStream(
157
+ this.getClass().getClassLoader().getResourceAsStream("processes/diagrams.zip")
158
+ );
159
+ repositoryService.createDeployment()
160
+ .name("转让审批流程")
161
+ .addZipInputStream(zipInputStream)
162
+ .deploy();
163
+ }
164
+ ```
165
+
166
+ ### 4.2 用户任务配置
167
+
168
+ ```xml
169
+ <!-- 用户任务完整配置 -->
170
+ <userTask id="approveTask" name="审批任务">
171
+ <!-- 候选用户 -->
172
+ <extensionElements>
173
+ <activiti:potentialOwner>
174
+ <resourceAssignmentExpression>
175
+ <formalExpression>group(manager)</formalExpression>
176
+ </resourceAssignmentExpression>
177
+ </activiti:potentialOwner>
178
+ </extensionElements>
179
+
180
+ <!-- 候选用户 (直接指定) -->
181
+ <extensionElements>
182
+ <activiti:candidateUsers>
183
+ <activiti:resourceAssignmentExpression>
184
+ <formalExpression>user1,user2</formalExpression>
185
+ </resourceAssignmentExpression>
186
+ </activiti:candidateUsers>
187
+ </extensionElements>
188
+
189
+ <!-- 任务监听器 -->
190
+ <activiti:taskListener event="create" delegateExpression="${taskListenerBean}">
191
+ <activiti:field name="action">
192
+ <activiti:expression>${action}</activiti:expression>
193
+ </activiti:field>
194
+ </activiti:taskListener>
195
+ </userTask>
196
+ ```
197
+
198
+ ### 4.3 网关配置
199
+
200
+ ```xml
201
+ <!-- 排他网关 (XOR) -->
202
+ <exclusiveGateway id="approvalGateway" name="审批网关" default="defaultFlow">
203
+ <incoming>flow1</incoming>
204
+ <outgoing>flowApproved</outgoing>
205
+ <outgoing>flowRejected</outgoing>
206
+ <outgoing>defaultFlow</outgoing>
207
+ </exclusiveGateway>
208
+
209
+ <sequenceFlow id="flowApproved" sourceRef="approvalGateway" targetRef="approvedTask">
210
+ <conditionExpression xsi:type="tFormalExpression">
211
+ ${approved == true}
212
+ </conditionExpression>
213
+ </sequenceFlow>
214
+
215
+ <sequenceFlow id="flowRejected" sourceRef="approvalGateway" targetRef="rejectedTask">
216
+ <conditionExpression xsi:type="tFormalExpression">
217
+ ${approved == false}
218
+ </conditionExpression>
219
+ </sequenceFlow>
220
+
221
+ <sequenceFlow id="defaultFlow" sourceRef="approvalGateway" targetRef="defaultTask">
222
+ <!-- 无条件,作为默认路径 -->
223
+ </sequenceFlow>
224
+
225
+ <!-- 并行网关 (AND) -->
226
+ <parallelGateway id="parallelGateway" name="并行网关">
227
+ <incoming>flow1</incoming>
228
+ <outgoing>flowA</outgoing>
229
+ <outgoing>flowB</outgoing>
230
+ </parallelGateway>
231
+
232
+ <parallelGateway id="joinGateway" name="汇聚网关">
233
+ <incoming>flowA</incoming>
234
+ <incoming>flowB</incoming>
235
+ <outgoing>flowEnd</outgoing>
236
+ </parallelGateway>
237
+ ```
238
+
239
+ ### 4.4 服务任务配置
240
+
241
+ ```xml
242
+ <!-- 方式一: 调用 Bean 方法 -->
243
+ <serviceTask id="serviceTask1" name="服务任务"
244
+ activiti:delegateExpression="${myDelegateBean}">
245
+ </serviceTask>
246
+
247
+ <!-- 方式二: 调用 Java 类 -->
248
+ <serviceTask id="serviceTask2" name="服务任务"
249
+ activiti:class="com.example.MyDelegate">
250
+ </serviceTask>
251
+
252
+ <!-- 方式三: 表达式 -->
253
+ <serviceTask id="serviceTask3" name="服务任务"
254
+ activiti:expression="${orderService.process(order)}">
255
+ </serviceTask>
256
+
257
+ <!-- 方式四: 脚本任务 -->
258
+ <scriptTask id="scriptTask" name="脚本任务"
259
+ scriptFormat="javascript">
260
+ <script>
261
+ var order = execution.getVariable("order");
262
+ order.setStatus("PROCESSED");
263
+ execution.setVariable("order", order);
264
+ </script>
265
+ </scriptTask>
266
+ ```
267
+
268
+ ## 5. 常见问题解决方案
269
+
270
+ ### 5.1 流程部署失败
271
+
272
+ **问题**: BPMN 文件部署失败
273
+
274
+ **排查步骤**:
275
+ ```java
276
+ // 检查流程定义
277
+ ProcessDefinition processDefinition = repositoryService
278
+ .createProcessDefinitionQuery()
279
+ .processDefinitionKey("transfer-approval")
280
+ .latestVersion()
281
+ .singleResult();
282
+
283
+ // 检查 XML 语法
284
+ BpmnModel bpmnModel = new BpmnXMLLoader()
285
+ .loadXML(inputStream);
286
+
287
+ // 检查资源文件
288
+ InputStream resource = runtimeService.getProcessEngine()
289
+ .getRepositoryService()
290
+ .getResourceAsStream(deploymentId, "process.bpmn20.xml");
291
+ ```
292
+
293
+ **解决方案**:
294
+ 1. 确保 BPMN XML 语法正确
295
+ 2. 检查 Start Event 和 End Event 配置
296
+ 3. 验证 Gateway 条件表达式
297
+ 4. 确保服务任务指向存在的 Bean/类
298
+
299
+ ### 5.2 任务查询为空
300
+
301
+ **问题**: 用户登录后看不到待办任务
302
+
303
+ **排查步骤**:
304
+ ```java
305
+ // 查询候选任务 (用户所在组)
306
+ List<Task> candidateTasks = taskService.createTaskQuery()
307
+ .taskCandidateUser("userId")
308
+ .taskCandidateGroup("groupId")
309
+ .list();
310
+
311
+ // 查询已签收任务
312
+ List<Task> assignedTasks = taskService.createTaskQuery()
313
+ .taskAssignee("userId")
314
+ .list();
315
+
316
+ // 查询个人任务
317
+ List<Task> personalTasks = taskService.createTaskQuery()
318
+ .taskOwner("userId")
319
+ .list();
320
+ ```
321
+
322
+ **解决方案**:
323
+ 1. 确认用户属于正确的候选组
324
+ 2. 检查任务的 assignee 和 candidateUser
325
+ 3. 验证流程变量中存储的用户/组信息
326
+ 4. 使用正确的方式查询任务
327
+
328
+ ### 5.3 流程变量获取失败
329
+
330
+ **问题**: 在任务监听器中获取流程变量为null
331
+
332
+ **排查步骤**:
333
+ ```java
334
+ // 在任务监听器中获取变量
335
+ public class MyTaskListener implements TaskListener {
336
+ @Override
337
+ public void notify(DelegateTask delegateTask) {
338
+ // 正确方式
339
+ String variable = delegateTask.getVariable("variableName");
340
+ String executionVariable = delegateTask.getExecution().getVariable("variableName");
341
+
342
+ // 设置变量
343
+ delegateTask.setVariable("taskVar", "value");
344
+ delegateTask.getExecution().setVariable("executionVar", "value");
345
+ }
346
+ }
347
+ ```
348
+
349
+ **解决方案**:
350
+ 1. 确认变量在正确的范围设置 (execution vs task)
351
+ 2. 检查变量设置的时机
352
+ 3. 使用 TaskListener 的 DelegateTask 获取变量
353
+ 4. 使用 Execution 获取流程级别的变量
354
+
355
+ ### 5.4 网关条件不生效
356
+
357
+ **问题**: 网关条件判断不正确,流程走向错误
358
+
359
+ **排查步骤**:
360
+ ```xml
361
+ <!-- 检查条件表达式格式 -->
362
+ <sequenceFlow id="flow1" sourceRef="gateway" targetRef="task1">
363
+ <conditionExpression xsi:type="tFormalExpression">
364
+ ${amount > 1000}
365
+ </conditionExpression>
366
+ </sequenceFlow>
367
+
368
+ <sequenceFlow id="flow2" sourceRef="gateway" targetRef="task2">
369
+ <conditionExpression xsi:type="tFormalExpression">
370
+ ${amount <= 1000}
371
+ </conditionExpression>
372
+ </sequenceFlow>
373
+ ```
374
+
375
+ **解决方案**:
376
+ 1. 使用正确的条件表达式语法 `${condition}`
377
+ 2. 排他网关确保有且只有一个条件为true
378
+ 3. 设置默认流避免无匹配情况
379
+ 4. 检查变量类型和值
380
+
381
+ ## 6. 最佳实践清单
382
+
383
+ ### 6.1 BPMN建模规范
384
+
385
+ ```yaml
386
+ 建模规范:
387
+ - [ ] 每个流程有且只有一个Start Event
388
+ - [ ] 每个流程至少有一个End Event
389
+ - [ ] 用户任务必须配置候选用户或候选组
390
+ - [ ] 排他网关必须设置默认流
391
+ - [ ] 服务任务必须指向存在的实现
392
+ - [ ] 流程Key使用 kebab-case (如: transfer-approval)
393
+ - [ ] 流程ID唯一
394
+ ```
395
+
396
+ ### 6.2 流程变量命名
397
+
398
+ ```yaml
399
+ 命名规范:
400
+ - 使用 camelCase: transferAmount
401
+ - 避免使用保留字: processInstanceId, taskId
402
+ - 前缀区分: biz_业务变量, sys_系统变量
403
+ - 示例: biz_transferId, sys_approver
404
+ ```
405
+
406
+ ### 6.3 异常处理
407
+
408
+ ```java
409
+ // 方式一: 边界事件捕获
410
+ <boundaryEvent id="errorBoundary" attachedToRef="serviceTask">
411
+ <errorEventDefinition errorCode="SERVICE_ERROR"/>
412
+ </boundaryEvent>
413
+
414
+ // 方式二: 错误结束事件
415
+ <endEvent id="errorEnd">
416
+ <errorEventDefinition errorCode="VALIDATION_ERROR"/>
417
+ </endEvent>
418
+
419
+ // 方式三: 异常流程变量
420
+ try {
421
+ // 业务逻辑
422
+ } catch (Exception e) {
423
+ execution.setVariable("errorMessage", e.getMessage());
424
+ execution.setVariable("errorCode", "BUSINESS_ERROR");
425
+ }
426
+ ```
427
+
428
+ ## 7. Guardrails
429
+
430
+ ### 7.1 必须遵守
431
+
432
+ - [ ] BPMN文件必须符合BPMN 2.0规范
433
+ - [ ] 每个流程必须有Start Event和End Event
434
+ - [ ] 排他网关必须设置默认流
435
+ - [ ] 用户任务必须配置候选人
436
+ - [ ] 服务任务实现类必须存在
437
+
438
+ ### 7.2 避免事项
439
+
440
+ - ❌ 在用户任务中硬编码候选人
441
+ - ❌ 省略End Event
442
+ - ❌ 使用复杂的嵌套网关
443
+ - ❌ 在流程中存储大量数据
444
+
445
+ ## 8. 本地开发指南
446
+
447
+ 本项目有特定的开发规范和历史经验,请在提供建议时优先参考:
448
+
449
+ ### 8.1 项目规则文件
450
+
451
+ | 文件 | 路径 | 内容 |
452
+ |------|------|------|
453
+ | **项目规则** | `.trae/rules/project_rules.md` | 目录结构、命名规范,开发规范 |
454
+ | **经验教训** | `.trae/rules/lessons.md` | 历史问题和解决方案 |
455
+
456
+ ### 8.2 本地 Activiti 开发文档
457
+
458
+ 项目在 `Asset-Management-Platform/docs/activiti7/` 目录下有完整的中文开发文档:
459
+
460
+ | 文档 | 路径 | 内容 |
461
+ |------|------|------|
462
+ | **Activiti 7 开发指南** | `docs/activiti7/README.md` | 文档索引和概述 |
463
+ | **01-概述** | `docs/activiti7/01-概述.md` | Activiti Cloud 概述 |
464
+ | **02-快速入门** | `docs/activiti7/02-快速入门.md` | 快速入门指南 |
465
+ | **03-组件架构** | `docs/activiti7/03-组件架构.md` | 组件架构说明 |
466
+ | **04-BPMN支持** | `docs/activiti7/04-BPMN支持.md` | BPMN 元素支持 |
467
+ | **05-常见问题** | `docs/activiti7/05-常见问题.md` | 常见问题解答 |
468
+
469
+ ### 8.3 项目特定检查项
470
+
471
+ ```yaml
472
+ 项目特定检查项:
473
+ - [ ] 检查 lessons.md 中是否有相关问题的解决方案
474
+ - [ ] 遵循 project_rules.md 中的命名规范
475
+ - [ ] 参考现有代码的实现模式
476
+ - [ ] 确认数据库配置:mysql6.sqlpub.com:3311/asset_ruoyi
477
+ ```
478
+
479
+ ## 9. 参考文档
480
+
481
+ ### 9.1 本地文档
482
+
483
+ - [Activiti 7 开发指南](Asset-Management-Platform/docs/activiti7/README.md)
484
+ - [后端技术架构](Asset-Management-Platform/docs/architect/02-后端技术架构.md)
485
+
486
+ ### 9.2 外部文档
487
+
488
+ - [Activiti 7 Developers Guide](https://activiti.gitbook.io/activiti-7-developers-guide)
489
+ - [BPMN 2.0 规范](https://www.omg.org/spec/BPMN/2.0/)
490
+
491
+ ## 10. 版本历史
492
+
493
+ | 版本 | 日期 | 变更内容 |
494
+ |-----|------|---------|
495
+ | 2.1 | 2026-03-22 | 添加本地开发指南和文档引用 |
496
+ | 2.0 | 2026-03-21 | 标准化结构,添加诊断模式,增强协作指导 |
497
+ | 1.0 | 早期 | 初始版本 |
@@ -0,0 +1 @@
1
+ {"name": "expert-activiti", "version": "1.0.0", "category": "expert", "description": "Activiti workflow engine expert proficient in Activiti 7 Core/Cloud architecture, BPMN 2.0 specification, process design and development. Invoke this Skill when users need workflow design, BPMN modeling, process engine development, or Activiti deployment management. 支持中文触发:工作流设计、流程引擎、BPMN建模、Activiti开发、流程部署、BPMN流程定义。", "triggers": ["工作流设计", "流程引擎", "BPMN建模", "Activiti开发", "流程部署"]}