@gadmin2n/schematics 0.0.138 → 0.0.140

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 (314) hide show
  1. package/dist/lib/application/files/gadmin2-game-angle-demo/Jenkinsfile +6 -34
  2. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/approval.prisma +199 -0
  3. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/system.prisma +9 -0
  4. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/workflow.prisma +191 -14
  5. package/dist/lib/application/files/gadmin2-game-angle-demo/gitignore +6 -5
  6. package/dist/lib/application/files/gadmin2-game-angle-demo/readme.md +10 -3
  7. package/dist/lib/application/files/gadmin2-game-angle-demo/server/migrate-between-pg-schemas.js +6 -4
  8. package/dist/lib/application/files/gadmin2-game-angle-demo/server/package.json +5 -2
  9. package/dist/lib/application/files/gadmin2-game-angle-demo/server/prisma.config.ts +12 -3
  10. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/migrate-human-approval-configs.ts +86 -0
  11. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow-node-types.ts +682 -121
  12. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow.seed.ts +110 -1
  13. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/config/index.ts +28 -0
  14. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/json-body-parser.spec.ts +61 -0
  15. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/json-body-parser.ts +7 -0
  16. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/structured-all-exceptions.filter.spec.ts +54 -0
  17. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/structured-all-exceptions.filter.ts +86 -0
  18. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/main.ts +9 -3
  19. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.controller.ts +89 -0
  20. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.dto.ts +68 -0
  21. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.service.spec.ts +177 -0
  22. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.service.ts +283 -0
  23. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approvalChannel.module.ts +10 -0
  24. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-executor.spec.ts +42 -0
  25. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-executor.ts +108 -0
  26. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-runtime.controller.ts +101 -0
  27. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-runtime.dto.ts +29 -0
  28. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/codeRuntime.module.ts +21 -0
  29. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-handler.registry.ts +30 -0
  30. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-handler.ts +15 -0
  31. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.controller.spec.ts +105 -0
  32. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.controller.ts +96 -0
  33. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.dto.ts +78 -0
  34. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-signal-outbox.service.spec.ts +56 -0
  35. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-signal-outbox.service.ts +111 -0
  36. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-token.spec.ts +23 -0
  37. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-token.ts +18 -0
  38. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.service.spec.ts +240 -0
  39. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.service.ts +339 -0
  40. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.types.ts +74 -0
  41. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-wait.handler.ts +47 -0
  42. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/externalInteraction.module.ts +41 -0
  43. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/human-approval.handler.spec.ts +70 -0
  44. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/human-approval.handler.ts +76 -0
  45. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.controller.ts +12 -0
  46. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.service.spec.ts +227 -0
  47. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.service.ts +121 -0
  48. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.controller.ts +160 -0
  49. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.dto.ts +41 -0
  50. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.util.spec.ts +171 -0
  51. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.util.ts +245 -0
  52. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/httpRequest.module.ts +22 -0
  53. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-rule-evaluator.spec.ts +68 -0
  54. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-rule-evaluator.ts +126 -0
  55. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-rule.types.ts +34 -0
  56. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-signal-outbox.service.ts +115 -0
  57. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-subject-source.util.spec.ts +45 -0
  58. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-subject-source.util.ts +59 -0
  59. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.controller.ts +72 -0
  60. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.dto.ts +144 -0
  61. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.errors.ts +19 -0
  62. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.external-decision.spec.ts +350 -0
  63. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.service.ts +774 -0
  64. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/humanApproval.module.ts +46 -0
  65. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/legacy-approval-config-migration.ts +227 -0
  66. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/outbox-retry.util.ts +14 -0
  67. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/human-approval-runtime.controller.ts +151 -0
  68. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/human-approval-runtime.dto.ts +88 -0
  69. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/runtime-token.guard.ts +43 -0
  70. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/index.ts +21 -1
  71. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.controller.ts +77 -0
  72. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.dto.ts +98 -0
  73. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.service.ts +277 -0
  74. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-secret-cipher.spec.ts +14 -0
  75. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-secret-cipher.ts +59 -0
  76. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integrationConnection.module.ts +10 -0
  77. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/actor-context.util.ts +27 -0
  78. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/providers/user-group.provider.ts +208 -0
  79. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/providers/user.provider.ts +168 -0
  80. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.controller.spec.ts +157 -0
  81. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.controller.ts +176 -0
  82. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.dto.ts +21 -0
  83. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.errors.ts +78 -0
  84. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.registry.spec.ts +100 -0
  85. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.registry.ts +115 -0
  86. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.types.ts +97 -0
  87. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subjectProvider.module.ts +34 -0
  88. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/temporalTenantConfig.controller.spec.ts +89 -1
  89. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/temporalTenantConfig.controller.ts +4 -0
  90. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.controller.ts +119 -0
  91. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.dto.ts +91 -0
  92. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.errors.ts +34 -0
  93. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.service.spec.ts +161 -0
  94. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.service.ts +390 -0
  95. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/userGroup.module.ts +10 -0
  96. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/dsl-validate.util.spec.ts +17 -0
  97. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/dsl-validate.util.ts +8 -2
  98. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/parameter-binding.ts +93 -0
  99. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-callable.spec.ts +158 -0
  100. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-callable.ts +155 -0
  101. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.service.spec.ts +363 -0
  102. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.service.ts +354 -0
  103. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.types.ts +43 -0
  104. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-data-edge.util.spec.ts +174 -0
  105. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-data-edge.util.ts +149 -0
  106. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-dsl-comparison.ts +43 -0
  107. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-execution.dto.ts +1 -1
  108. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-export.dto.ts +4 -0
  109. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-export.service.ts +70 -28
  110. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-handle-validator.ts +128 -0
  111. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.controller.ts +12 -1
  112. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.module.ts +18 -3
  113. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.spec.ts +369 -22
  114. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.ts +319 -90
  115. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/node-config-validator.service.spec.ts +79 -0
  116. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/node-config-validator.service.ts +62 -0
  117. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/schema.types.ts +10 -0
  118. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/subject-config-validator.service.spec.ts +124 -0
  119. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/subject-config-validator.service.ts +236 -0
  120. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/widget-catalog.service.spec.ts +49 -0
  121. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/widget-catalog.service.ts +69 -0
  122. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/workflowConfig.module.ts +20 -0
  123. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/node-instance-config.util.spec.ts +15 -0
  124. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/node-instance-config.util.ts +25 -0
  125. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.controller.ts +103 -11
  126. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.dto.ts +98 -0
  127. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.module.ts +3 -0
  128. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.service.spec.ts +72 -62
  129. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.service.ts +148 -11
  130. package/dist/lib/application/files/gadmin2-game-angle-demo/web/package.json +13 -9
  131. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/App.tsx +5 -2
  132. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/authProvider.ts +2 -2
  133. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/BulkActions.tsx +0 -5
  134. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/SearchBar.tsx +26 -18
  135. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/eventList/index.tsx +2 -2
  136. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logButton/index.tsx +24 -17
  137. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logList/index.tsx +7 -18
  138. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/modalDiffViewer/index.tsx +2 -2
  139. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/index.tsx +288 -33
  140. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/themeStyles.ts +97 -0
  141. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/SettingDrawer.tsx +251 -0
  142. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/header.tsx +47 -19
  143. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/layout.tsx +18 -9
  144. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/menuRenderer.tsx +155 -0
  145. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/sider.tsx +123 -129
  146. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.tsx +16 -0
  147. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/constants/layout.ts +2 -1
  148. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddDataModal.tsx +98 -3
  149. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddPageModal.tsx +101 -0
  150. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/DevShell.tsx +8 -0
  151. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/style.css +51 -0
  152. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/form.tsx +1 -1
  153. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/list.tsx +1 -1
  154. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/login.ts +40 -1
  155. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/show.tsx +5 -5
  156. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useDynamicResources.tsx +16 -1
  157. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useListPageState.ts +10 -7
  158. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/i18n.ts +4 -2
  159. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/common.json +26 -2
  160. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/workflow.json +556 -0
  161. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/common.json +26 -2
  162. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/workflow.json +556 -0
  163. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/plugins/devShellPlugin.ts +152 -2
  164. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agenda/index.tsx +6 -1
  165. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agenda/show.tsx +41 -9
  166. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/edit.tsx +1 -1
  167. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/list.tsx +10 -8
  168. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/show.tsx +3 -3
  169. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/components/action-cell.css +1 -1
  170. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/edit.tsx +1 -1
  171. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/show.tsx +3 -6
  172. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasCell.css +3 -0
  173. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasCell.tsx +45 -13
  174. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasComponentLibrary.tsx +45 -22
  175. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasListPage.tsx +168 -101
  176. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasPage.tsx +248 -74
  177. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasToolbar.tsx +33 -18
  178. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CodeFloatWindow.tsx +16 -10
  179. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/PublishModal.tsx +1 -1
  180. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasContextMenuRegistry.tsx +31 -0
  181. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasDefaults.ts +15 -0
  182. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/BarChartDataSourceModal.tsx +16 -11
  183. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/CanvasAiModal.tsx +25 -21
  184. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/ExportModal.tsx +6 -1
  185. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/LineChartDataSourceModal.tsx +9 -10
  186. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/MultiChartConfigModal.tsx +4 -7
  187. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/MultiChartDataSourceModal.tsx +23 -9
  188. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/NumCardDataSourceModal.tsx +16 -11
  189. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/PromptModal.tsx +2 -5
  190. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/RadarChartDataSourceModal.tsx +16 -11
  191. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/TableConfigModal.tsx +2 -9
  192. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/TableDataSourceModal.tsx +23 -12
  193. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/canvasModalProps.ts +2 -17
  194. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/sectionCompactor.test.ts +149 -0
  195. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/sectionCompactor.ts +111 -17
  196. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/types.ts +1 -0
  197. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/whiteboardLayout.test.ts +83 -0
  198. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/whiteboardLayout.ts +118 -0
  199. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/whiteboardName.test.ts +26 -0
  200. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas-page/index.tsx +9 -1
  201. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/edit.tsx +1 -1
  202. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/list.tsx +10 -8
  203. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/show.tsx +3 -6
  204. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/human-approval/DecisionModal.tsx +71 -0
  205. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/human-approval/inbox.tsx +216 -0
  206. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/AssignRolesModal.tsx +6 -1
  207. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/permissionReadme/index.tsx +8 -8
  208. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/modal.tsx +1 -1
  209. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/list.tsx +5 -5
  210. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/modal.tsx +1 -1
  211. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/show-drawer.tsx +1 -1
  212. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/ApprovalChannelModal.test.tsx +84 -0
  213. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/ApprovalChannelModal.tsx +141 -0
  214. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/approval-channel.types.ts +16 -0
  215. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/index.tsx +208 -0
  216. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CreateNodeInstanceDrawer.tsx +154 -0
  217. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CustomNode.tsx +194 -5
  218. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/DeletableEdge.tsx +76 -0
  219. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/DslView.tsx +1 -1
  220. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/EnhancedFlowRenderer.tsx +176 -22
  221. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExecutionStatusNode.test.tsx +62 -0
  222. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExecutionStatusNode.tsx +94 -5
  223. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExportModal.tsx +15 -10
  224. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/FlowRenderer.tsx +251 -70
  225. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ImportModal.tsx +18 -24
  226. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/InstanceRequiredDialog.tsx +106 -0
  227. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/LookupConnectionDialog.test.tsx +45 -0
  228. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/LookupConnectionDialog.tsx +43 -0
  229. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NewNodeDefaults.test.tsx +279 -0
  230. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodeEditModal.tsx +6 -7
  231. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.test.tsx +335 -0
  232. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.tsx +433 -237
  233. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ParameterBindingEditor.tsx +179 -0
  234. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/RunWorkflowModal.tsx +18 -16
  235. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/StatusCards.tsx +20 -16
  236. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/VersionPanel.tsx +6 -4
  237. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/ConnectionModal.test.tsx +68 -0
  238. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/ConnectionModal.tsx +367 -0
  239. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/connection.types.ts +21 -0
  240. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/index.tsx +171 -0
  241. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/editor.tsx +38 -22
  242. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/hooks/useNodeInstanceLibrary.ts +41 -0
  243. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/hooks/useWorkflowAgent.ts +6 -0
  244. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/index.tsx +27 -20
  245. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/instance-detail.tsx +8 -11
  246. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/instances.tsx +6 -1
  247. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/NodeInstanceForm.tsx +56 -23
  248. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/create.tsx +21 -6
  249. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/edit.tsx +17 -20
  250. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/index.tsx +6 -1
  251. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaField.tsx +311 -0
  252. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaForm.test.tsx +218 -0
  253. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaForm.tsx +83 -0
  254. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/default-widgets.tsx +135 -0
  255. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/schema-defaults.ts +36 -0
  256. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/schema.types.ts +32 -0
  257. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/widget-registry.test.tsx +23 -0
  258. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/widget-registry.tsx +52 -0
  259. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/show.tsx +9 -13
  260. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRequestTriggerConfigEditor.tsx +39 -0
  261. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRuleEditor.test.tsx +20 -0
  262. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRuleEditor.tsx +72 -0
  263. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApproverSourceEditor.test.tsx +47 -0
  264. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApproverSourceEditor.tsx +185 -0
  265. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CallableInputParametersEditor.test.tsx +102 -0
  266. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CallableInputParametersEditor.tsx +150 -0
  267. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CodeConfigEditor.tsx +103 -0
  268. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalRequestConfigEditor.test.tsx +93 -0
  269. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalRequestConfigEditor.tsx +196 -0
  270. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalWaitConfigEditor.tsx +303 -0
  271. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HttpRequestConfigEditor.test.tsx +189 -0
  272. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HttpRequestConfigEditor.tsx +706 -0
  273. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HumanApprovalConfigEditor.test.tsx +86 -0
  274. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HumanApprovalConfigEditor.tsx +458 -0
  275. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ReturnResultConfigEditor.test.tsx +53 -0
  276. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ReturnResultConfigEditor.tsx +91 -0
  277. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubjectPicker.test.tsx +61 -0
  278. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubjectPicker.tsx +266 -0
  279. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubmitApprovalResultConfigEditor.tsx +104 -0
  280. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubmitExternalResultConfigEditor.tsx +98 -0
  281. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/UserGroupCreateModal.tsx +70 -0
  282. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/UserGroupEditModal.tsx +138 -0
  283. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/approver-source.test.ts +25 -0
  284. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/approver-source.ts +42 -0
  285. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/subject-provider.api.ts +95 -0
  286. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/show.tsx +15 -11
  287. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/temporal-tenant/index.tsx +49 -8
  288. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/types/parameter-binding.ts +49 -0
  289. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/types.ts +31 -2
  290. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/lookupConnection.test.ts +208 -0
  291. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/lookupConnection.ts +246 -0
  292. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/newNodeConfig.ts +73 -0
  293. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/removeWorkflowEdges.test.ts +34 -0
  294. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/removeWorkflowEdges.ts +18 -0
  295. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveLookupPorts.ts +66 -0
  296. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveOutputs.test.ts +39 -0
  297. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveOutputs.ts +48 -0
  298. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveWorkflowDisplay.test.ts +51 -0
  299. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveWorkflowDisplay.ts +32 -0
  300. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/edit.tsx +1 -1
  301. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/list.tsx +10 -8
  302. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/show.tsx +3 -3
  303. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/antd-theme-vars.css +93 -0
  304. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/antd.css +8 -8
  305. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/fc.css +4 -4
  306. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/index.css +20 -5
  307. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-drawer.module.css +3 -3
  308. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-page.module.css +3 -3
  309. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/theme-styles.css +81 -0
  310. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/test/setup.ts +5 -0
  311. package/dist/lib/application/files/gadmin2-game-angle-demo/web/vite.config.ts +1 -7
  312. package/dist/lib/application/files/gadmin2-game-angle-demo/web/vitest.config.ts +12 -0
  313. package/package.json +1 -1
  314. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/DynamicConfigForm.tsx +0 -154
@@ -2,6 +2,7 @@ import * as fs from 'fs';
2
2
  import * as path from 'path';
3
3
  import type { IncomingMessage, ServerResponse } from 'http';
4
4
  import type { Plugin } from 'vite';
5
+ import * as XLSX from 'xlsx';
5
6
 
6
7
  /**
7
8
  * Dev-only Vite plugin for Gadmin2 Dev Tools.
@@ -9,14 +10,87 @@ import type { Plugin } from 'vite';
9
10
  * Features:
10
11
  * 1. POST /canvas-patch — agent pushes new component code to canvas via HMR
11
12
  * 2. POST /canvas-add-item — agent adds a new component to canvas via HMR
12
- * 3. "/" serves dev-shell-entry.html (agent panel outer shell)
13
- * 4. All other HTML navigation falls back to index.html (SPA router)
13
+ * 3. POST /dev-shell/upload-reference — 接收"以文件为参考"的原始文件字节(csv/excel/图片),
14
+ * 写入 {projectRoot}/tmp/(xlsx/xls 转为 csv),返回文件系统绝对路径。
15
+ * 上传的文件不做持久化:dev server 退出时统一删除。
16
+ * 4. "/" serves dev-shell-entry.html (agent panel outer shell)
17
+ * 5. All other HTML navigation falls back to index.html (SPA router)
14
18
  */
19
+
20
+ const UPLOAD_MAX_BYTES = 5 * 1024 * 1024; // 5MB
21
+ const UPLOAD_ALLOWED_EXTS = [
22
+ '.csv',
23
+ '.xlsx',
24
+ '.xls',
25
+ '.png',
26
+ '.jpg',
27
+ '.jpeg',
28
+ '.webp',
29
+ '.gif',
30
+ ];
31
+ const UPLOAD_EXCEL_EXTS = ['.xlsx', '.xls'];
32
+
33
+ /** 清洗文件名:去路径分隔符、空白转 -、只保留安全字符 */
34
+ function sanitizeFilename(name: string): string {
35
+ const base = name.split(/[\\/]/).pop() ?? 'file';
36
+ const safe = base.replace(/\s+/g, '-').replace(/[^\w.一-龥-]/g, '');
37
+ return safe || 'file';
38
+ }
39
+
40
+ /** xlsx/xls Buffer → csv 文本(第一个 sheet);失败返回 null */
41
+ function excelBufferToCsv(buf: Buffer): string | null {
42
+ try {
43
+ const wb = XLSX.read(buf, { type: 'buffer' });
44
+ const first = wb.SheetNames[0];
45
+ if (!first) return null;
46
+ return XLSX.utils.sheet_to_csv(wb.Sheets[first]);
47
+ } catch {
48
+ return null;
49
+ }
50
+ }
51
+
52
+ function writeJson(
53
+ res: ServerResponse,
54
+ status: number,
55
+ data: Record<string, unknown>,
56
+ ) {
57
+ res.statusCode = status;
58
+ res.setHeader('Content-Type', 'application/json');
59
+ res.end(JSON.stringify(data));
60
+ }
15
61
  export function devShellPlugin(): Plugin {
16
62
  return {
17
63
  name: 'dev-shell',
18
64
  apply: 'serve',
19
65
  configureServer(server) {
66
+ // ── 参考文件上传:tmp/ 落盘 + 退出清理(不持久化)─────────────────────
67
+ // vite root = web/,项目根目录 = 上一级
68
+ const projectRoot = path.resolve(server.config.root, '..');
69
+ const tmpDir = path.join(projectRoot, 'tmp');
70
+ const uploadedFiles = new Set<string>();
71
+
72
+ const cleanupUploadedFiles = () => {
73
+ for (const p of uploadedFiles) {
74
+ try {
75
+ fs.unlinkSync(p);
76
+ } catch {
77
+ // 已被手动删除等情况,忽略
78
+ }
79
+ }
80
+ uploadedFiles.clear();
81
+ };
82
+ // vite 正常退出(SIGINT/SIGTERM)会关闭 httpServer;process exit 兜底。
83
+ // 信号监听采用"once + 重发"模式:清理完把信号重发给自己,此时监听已移除,
84
+ // 信号落到 vite 自己的处理器或 Node 默认终止行为上,不影响正常退出流程。
85
+ server.httpServer?.once('close', cleanupUploadedFiles);
86
+ process.once('exit', cleanupUploadedFiles);
87
+ const cleanupAndRethrow = (signal: 'SIGINT' | 'SIGTERM') => {
88
+ cleanupUploadedFiles();
89
+ process.kill(process.pid, signal);
90
+ };
91
+ process.once('SIGINT', () => cleanupAndRethrow('SIGINT'));
92
+ process.once('SIGTERM', () => cleanupAndRethrow('SIGTERM'));
93
+
20
94
  server.middlewares.use(async (rawReq, rawRes, next) => {
21
95
  const req = rawReq as IncomingMessage;
22
96
  const res = rawRes as ServerResponse;
@@ -87,6 +161,82 @@ export function devShellPlugin(): Plugin {
87
161
  return;
88
162
  }
89
163
 
164
+ // POST /dev-shell/upload-reference?filename=xxx.csv
165
+ // 接收原始文件字节(非 multipart),写 {projectRoot}/tmp/,返回绝对路径
166
+ if (req.method === 'POST' && url === '/dev-shell/upload-reference') {
167
+ const filename = new URL(
168
+ req.url ?? '',
169
+ 'http://localhost',
170
+ ).searchParams.get('filename');
171
+ const ext = path.extname(filename ?? '').toLowerCase();
172
+ if (!filename || !UPLOAD_ALLOWED_EXTS.includes(ext)) {
173
+ writeJson(res, 400, {
174
+ error: `仅支持 ${UPLOAD_ALLOWED_EXTS.join('/')} 文件`,
175
+ });
176
+ return;
177
+ }
178
+
179
+ const chunks: Uint8Array[] = [];
180
+ let total = 0;
181
+ let tooLarge = false;
182
+ req.on('data', (chunk: Uint8Array) => {
183
+ total += chunk.length;
184
+ if (total > UPLOAD_MAX_BYTES) {
185
+ tooLarge = true;
186
+ req.destroy();
187
+ return;
188
+ }
189
+ chunks.push(chunk);
190
+ });
191
+ req.on('end', () => {
192
+ if (tooLarge) {
193
+ writeJson(res, 413, { error: '文件超过 5MB 上限' });
194
+ return;
195
+ }
196
+ try {
197
+ const buf = Buffer.concat(chunks);
198
+ const safe = sanitizeFilename(filename);
199
+ const stamp = `${Date.now()}-${Math.random()
200
+ .toString(36)
201
+ .slice(2, 8)}`;
202
+ fs.mkdirSync(tmpDir, { recursive: true });
203
+
204
+ let absPath: string;
205
+ if (UPLOAD_EXCEL_EXTS.includes(ext)) {
206
+ // xlsx/xls → csv,agent 可直接 Read
207
+ const csv = excelBufferToCsv(buf);
208
+ if (csv === null) {
209
+ writeJson(res, 400, {
210
+ error: 'Excel 解析失败,请检查文件或另存为 CSV 后上传',
211
+ });
212
+ return;
213
+ }
214
+ absPath = path.join(
215
+ tmpDir,
216
+ `${stamp}-${safe.slice(0, safe.length - ext.length)}.csv`,
217
+ );
218
+ fs.writeFileSync(absPath, csv, 'utf-8');
219
+ } else {
220
+ // csv / 图片 → 原始字节直接落盘
221
+ absPath = path.join(tmpDir, `${stamp}-${safe}`);
222
+ fs.writeFileSync(absPath, buf);
223
+ }
224
+ uploadedFiles.add(absPath);
225
+ writeJson(res, 200, { ok: true, path: absPath });
226
+ } catch (err) {
227
+ writeJson(res, 500, {
228
+ error: `写入失败: ${(err as Error).message}`,
229
+ });
230
+ }
231
+ });
232
+ req.on('error', () => {
233
+ if (!res.headersSent) {
234
+ writeJson(res, 500, { error: '读取上传数据失败' });
235
+ }
236
+ });
237
+ return;
238
+ }
239
+
90
240
  // "/" → dev-shell-entry.html(Agent 外壳),除非 agent 被禁用
91
241
  if (url === '/') {
92
242
  const agentDisabled = process.env.VITE_ENABLE_AGENT === 'false';
@@ -456,7 +456,12 @@ export default function AgendaJobsPage() {
456
456
  // ─── Render ────────────────────────────────────────────────────────────────
457
457
 
458
458
  return (
459
- <div style={{ background: '#f0f2f5', minHeight: 'calc(100vh - 64px)' }}>
459
+ <div
460
+ style={{
461
+ background: 'var(--ant-color-bg-layout)',
462
+ minHeight: 'calc(100vh - 64px)',
463
+ }}
464
+ >
460
465
  {/* Header */}
461
466
  <Card style={{ marginBottom: 16 }}>
462
467
  <div
@@ -16,6 +16,7 @@ import {
16
16
  Tooltip,
17
17
  Typography,
18
18
  message,
19
+ theme,
19
20
  } from 'antd';
20
21
  import {
21
22
  ArrowLeftOutlined,
@@ -141,6 +142,8 @@ function DurationChart({
141
142
  }) {
142
143
  // 按时间正序(最早在左)
143
144
  const sorted = useMemo(() => [...logs].reverse(), [logs]);
145
+ // ECharts 画布不认 CSS var, 选中描边色需取解析后的 token 值
146
+ const { token } = theme.useToken();
144
147
 
145
148
  const option = useMemo(() => {
146
149
  return {
@@ -182,7 +185,7 @@ function DurationChart({
182
185
  value: l.durationMs,
183
186
  itemStyle: {
184
187
  color: hasSel ? (isSelected ? baseColor : dimColor) : baseColor,
185
- borderColor: isSelected ? '#000' : 'transparent',
188
+ borderColor: isSelected ? token.colorText : 'transparent',
186
189
  borderWidth: isSelected ? 2 : 0,
187
190
  },
188
191
  };
@@ -192,7 +195,7 @@ function DurationChart({
192
195
  },
193
196
  ],
194
197
  };
195
- }, [sorted, selectedIndex]);
198
+ }, [sorted, selectedIndex, token.colorText]);
196
199
 
197
200
  const onEvents = useMemo(
198
201
  () => ({
@@ -346,7 +349,12 @@ export default function AgendaJobShow() {
346
349
  const totalRuns = runs.success + runs.failed;
347
350
 
348
351
  return (
349
- <div style={{ background: '#f0f2f5', minHeight: 'calc(100vh - 64px)' }}>
352
+ <div
353
+ style={{
354
+ background: 'var(--ant-color-bg-layout)',
355
+ minHeight: 'calc(100vh - 64px)',
356
+ }}
357
+ >
350
358
  {/* Header */}
351
359
  <Card style={{ marginBottom: 16 }}>
352
360
  <div
@@ -521,7 +529,13 @@ export default function AgendaJobShow() {
521
529
  marginBottom: 12,
522
530
  }}
523
531
  >
524
- <Title level={5} style={{ margin: 0, color: '#595959' }}>
532
+ <Title
533
+ level={5}
534
+ style={{
535
+ margin: 0,
536
+ color: 'var(--ant-color-text-secondary)',
537
+ }}
538
+ >
525
539
  Run Detail
526
540
  </Title>
527
541
  <Button
@@ -560,7 +574,13 @@ export default function AgendaJobShow() {
560
574
  )}
561
575
  </Descriptions>
562
576
 
563
- <Title level={5} style={{ marginTop: 16, color: '#595959' }}>
577
+ <Title
578
+ level={5}
579
+ style={{
580
+ marginTop: 16,
581
+ color: 'var(--ant-color-text-secondary)',
582
+ }}
583
+ >
564
584
  Handler Logs
565
585
  </Title>
566
586
  {selectedRun.logs ? (
@@ -568,8 +588,8 @@ export default function AgendaJobShow() {
568
588
  style={{
569
589
  margin: 0,
570
590
  padding: 12,
571
- background: '#fafafa',
572
- border: '1px solid #f0f0f0',
591
+ background: 'var(--ant-color-fill-quaternary)',
592
+ border: '1px solid var(--ant-color-border-secondary)',
573
593
  borderRadius: 4,
574
594
  fontSize: 12,
575
595
  lineHeight: 1.6,
@@ -587,7 +607,13 @@ export default function AgendaJobShow() {
587
607
  </>
588
608
  ) : (
589
609
  <>
590
- <Title level={5} style={{ marginTop: 0, color: '#595959' }}>
610
+ <Title
611
+ level={5}
612
+ style={{
613
+ marginTop: 0,
614
+ color: 'var(--ant-color-text-secondary)',
615
+ }}
616
+ >
591
617
  Runs Summary
592
618
  </Title>
593
619
  <Descriptions column={2} size="small">
@@ -617,7 +643,13 @@ export default function AgendaJobShow() {
617
643
  </Descriptions.Item>
618
644
  </Descriptions>
619
645
 
620
- <Title level={5} style={{ marginTop: 16, color: '#595959' }}>
646
+ <Title
647
+ level={5}
648
+ style={{
649
+ marginTop: 16,
650
+ color: 'var(--ant-color-text-secondary)',
651
+ }}
652
+ >
621
653
  Job Details
622
654
  </Title>
623
655
  <Descriptions column={2} size="small">
@@ -80,7 +80,7 @@ export const AgendaJobEdit: React.FC<IResourceComponentsProps> = () => {
80
80
  headerButtons={
81
81
  <>
82
82
  <ListButton />
83
- <RefreshButton meta={{ select: formPrismaSelect }} />
83
+ <RefreshButton />
84
84
  </>
85
85
  }
86
86
  >
@@ -87,10 +87,10 @@ export const AgendaJobList: React.FC<IResourceComponentsProps> = () => {
87
87
  const {
88
88
  tableProps,
89
89
  sorters: sorter,
90
- setCurrent,
90
+ setCurrentPage,
91
91
  setFilters,
92
92
  filters,
93
- tableQueryResult,
93
+ tableQuery,
94
94
  searchFormProps,
95
95
  } = useTable<AgendaJob, HttpError>({
96
96
  meta: {
@@ -106,22 +106,24 @@ export const AgendaJobList: React.FC<IResourceComponentsProps> = () => {
106
106
  // onFinish: 将表单值转换为 CrudFilters 并更新筛选条件
107
107
  // 有 createdAt 字段的模型(默认)
108
108
  searchFormProps.initialValues = getSearchFormInitialValues(parsedFilters);
109
- searchFormProps.onFinish = createSearchFormOnFinish(setCurrent, setFilters);
109
+ searchFormProps.onFinish = createSearchFormOnFinish(
110
+ setCurrentPage,
111
+ setFilters,
112
+ );
110
113
 
111
114
  // 没有 createdAt 字段的模型
112
115
  // searchFormProps.initialValues = getSearchFormInitialValues(parsedFilters, { dateField: null });
113
- // searchFormProps.onFinish = createSearchFormOnFinish(setCurrent, setFilters, { dateField: null });
114
-
116
+ // searchFormProps.onFinish = createSearchFormOnFinish(setCurrentPage, setFilters, { dateField: null });
115
117
  // 使用其他日期字段(如 updatedAt)
116
118
  // searchFormProps.initialValues = getSearchFormInitialValues(parsedFilters, { dateField: 'updatedAt' });
117
- // searchFormProps.onFinish = createSearchFormOnFinish(setCurrent, setFilters, { dateField: 'updatedAt' });
119
+ // searchFormProps.onFinish = createSearchFormOnFinish(setCurrentPage, setFilters, { dateField: 'updatedAt' });
118
120
 
119
121
  // Batch operations (selection, update, delete)
120
122
  const batchOps = useBatchOperations({
121
123
  resourceName,
122
124
  apiUrl,
123
125
  requestHeaders,
124
- onSuccess: () => tableQueryResult.refetch(),
126
+ onSuccess: () => tableQuery.refetch(),
125
127
  t,
126
128
  });
127
129
 
@@ -192,7 +194,7 @@ export const AgendaJobList: React.FC<IResourceComponentsProps> = () => {
192
194
  importProps={importProps}
193
195
  onExport={triggerExport}
194
196
  exportLoading={exportLoading}
195
- onRefresh={() => tableQueryResult.refetch()}
197
+ onRefresh={() => tableQuery.refetch()}
196
198
  resourceName={resourceName}
197
199
  />
198
200
  ),
@@ -20,10 +20,10 @@ export const AgendaJobShow: React.FC<IResourceComponentsProps> = () => {
20
20
  const resourceName = 'agendaJob';
21
21
  const t = useTranslate();
22
22
 
23
- const { queryResult } = useShow<AgendaJob>({
23
+ const { query } = useShow<AgendaJob>({
24
24
  meta: { select: showPrismaSelect },
25
25
  });
26
- const { data, isLoading } = queryResult;
26
+ const { data, isLoading } = query;
27
27
  const record = data?.data;
28
28
 
29
29
  const [[fields, model]] = useState(() => {
@@ -56,7 +56,7 @@ export const AgendaJobShow: React.FC<IResourceComponentsProps> = () => {
56
56
  >
57
57
  <div
58
58
  style={{
59
- border: '1px solid #f0f0f0',
59
+ border: '1px solid var(--ant-color-border-secondary)',
60
60
  borderRadius: 8,
61
61
  overflow: 'hidden',
62
62
  }}
@@ -1,3 +1,3 @@
1
1
  .highlight-changed-row {
2
- background-color: #fff2f0;
2
+ background-color: var(--ant-color-error-bg);
3
3
  }
@@ -77,7 +77,7 @@ export const AuditEdit: React.FC<IResourceComponentsProps> = () => {
77
77
  headerButtons={
78
78
  <>
79
79
  <ListButton />
80
- <RefreshButton meta={{ select: formPrismaSelect }} />
80
+ <RefreshButton />
81
81
  </>
82
82
  }
83
83
  >
@@ -27,10 +27,10 @@ export const AuditShow: React.FC<IResourceComponentsProps> = () => {
27
27
  const resourceName = 'audit';
28
28
  const t = useTranslate();
29
29
 
30
- const { queryResult } = useShow<Audit>({
30
+ const { query } = useShow<Audit>({
31
31
  meta: { select: showPrismaSelect },
32
32
  });
33
- const { data, isLoading } = queryResult;
33
+ const { data, isLoading } = query;
34
34
  const record = data?.data;
35
35
 
36
36
  const [[fields, model]] = useState(() => {
@@ -59,10 +59,7 @@ export const AuditShow: React.FC<IResourceComponentsProps> = () => {
59
59
  <EditButton recordItemId={record?.id} />
60
60
  <CloneButton recordItemId={record?.id} />
61
61
  <DeleteButton recordItemId={record?.id} />
62
- <RefreshButton
63
- recordItemId={record?.id}
64
- meta={{ select: showPrismaSelect }}
65
- />
62
+ <RefreshButton recordItemId={record?.id} />
66
63
  </div>
67
64
  }
68
65
  >
@@ -0,0 +1,3 @@
1
+ .canvas-cell--whiteboard-numcard .ant-card {
2
+ border-color: transparent !important;
3
+ }
@@ -3,12 +3,16 @@ import { Tooltip } from 'antd';
3
3
  import { CopyOutlined, DeleteOutlined, MoreOutlined } from '@ant-design/icons';
4
4
  import IsolatedLivePreview from './IsolatedLivePreview';
5
5
  import { useIsAgentAllowed } from 'config/agentAllowed';
6
+ import { normalizeLegacyWhiteboardName } from './whiteboardLayout';
7
+ import './CanvasCell.css';
6
8
 
7
9
  interface CanvasCellProps extends React.HTMLAttributes<HTMLDivElement> {
8
10
  code: string;
9
11
  selected: boolean;
10
12
  componentType?: string;
11
13
  isPreview?: boolean;
14
+ isDropTarget?: boolean;
15
+ isWhiteboardChild?: boolean;
12
16
  onClick: (e: React.MouseEvent) => void;
13
17
  onDoubleClick: (e: React.MouseEvent) => void;
14
18
  onContextMenu: (e: React.MouseEvent) => void;
@@ -28,6 +32,8 @@ const CanvasCell = React.forwardRef<HTMLDivElement, CanvasCellProps>(
28
32
  selected,
29
33
  componentType,
30
34
  isPreview,
35
+ isDropTarget,
36
+ isWhiteboardChild,
31
37
  onClick,
32
38
  onDoubleClick,
33
39
  onContextMenu,
@@ -41,21 +47,44 @@ const CanvasCell = React.forwardRef<HTMLDivElement, CanvasCellProps>(
41
47
  },
42
48
  ref,
43
49
  ) => {
44
- const isSection = componentType === 'Section';
50
+ const isBackgroundContainer =
51
+ componentType === 'Section' || componentType === 'Whiteboard';
45
52
  const isAgentAllowed = useIsAgentAllowed();
46
53
  const showToolbar = !isPreview && isAgentAllowed && selected;
54
+ const displayCode =
55
+ componentType === 'Whiteboard'
56
+ ? normalizeLegacyWhiteboardName(code)
57
+ : code;
58
+ const cellClassName = [
59
+ className,
60
+ componentType === 'NumCard' && isWhiteboardChild
61
+ ? 'canvas-cell--whiteboard-numcard'
62
+ : '',
63
+ ]
64
+ .filter(Boolean)
65
+ .join(' ');
47
66
 
48
67
  return (
49
68
  <div
50
69
  ref={ref}
51
- className={className}
70
+ className={cellClassName}
52
71
  style={{
53
- background: isSection ? 'transparent' : '#fff',
54
- borderRadius: isSection ? 0 : 8,
72
+ background: isBackgroundContainer
73
+ ? 'transparent'
74
+ : 'var(--ant-color-bg-container)',
75
+ borderRadius: isBackgroundContainer ? 0 : 8,
55
76
  overflow: 'hidden',
56
- outline: !isPreview && selected ? '2px solid #087ea4' : 'none',
57
- outlineOffset: 2,
77
+ outline: isDropTarget
78
+ ? '3px solid #4361ee'
79
+ : !isPreview && selected
80
+ ? '2px solid #087ea4'
81
+ : 'none',
82
+ outlineOffset: isDropTarget ? 4 : 2,
83
+ boxShadow: isDropTarget
84
+ ? '0 0 0 8px rgba(67, 97, 238, 0.10)'
85
+ : 'none',
58
86
  cursor: isPreview ? 'default' : 'pointer',
87
+ transition: 'outline 120ms ease, box-shadow 120ms ease',
59
88
  ...style,
60
89
  }}
61
90
  onClick={(e) => {
@@ -84,7 +113,7 @@ const CanvasCell = React.forwardRef<HTMLDivElement, CanvasCellProps>(
84
113
  overflow: 'hidden',
85
114
  }}
86
115
  >
87
- <IsolatedLivePreview code={code} />
116
+ <IsolatedLivePreview code={displayCode} />
88
117
  </div>
89
118
 
90
119
  {/* 选中态悬浮工具栏 */}
@@ -101,8 +130,8 @@ const CanvasCell = React.forwardRef<HTMLDivElement, CanvasCellProps>(
101
130
  alignItems: 'center',
102
131
  gap: 2,
103
132
  padding: 2,
104
- background: '#fff',
105
- border: '1px solid #d6e4ff',
133
+ background: 'var(--ant-color-bg-elevated)',
134
+ border: '1px solid var(--ant-color-primary-border)',
106
135
  borderRadius: 6,
107
136
  boxShadow: '0 2px 8px rgba(0,0,0,0.08)',
108
137
  }}
@@ -116,7 +145,8 @@ const CanvasCell = React.forwardRef<HTMLDivElement, CanvasCellProps>(
116
145
  }}
117
146
  style={toolbarBtnStyle}
118
147
  onMouseEnter={(e) =>
119
- (e.currentTarget.style.background = '#f0f5ff')
148
+ (e.currentTarget.style.background =
149
+ 'var(--ant-color-primary-bg)')
120
150
  }
121
151
  onMouseLeave={(e) =>
122
152
  (e.currentTarget.style.background = 'transparent')
@@ -134,7 +164,8 @@ const CanvasCell = React.forwardRef<HTMLDivElement, CanvasCellProps>(
134
164
  }}
135
165
  style={toolbarBtnStyle}
136
166
  onMouseEnter={(e) =>
137
- (e.currentTarget.style.background = '#f0f5ff')
167
+ (e.currentTarget.style.background =
168
+ 'var(--ant-color-primary-bg)')
138
169
  }
139
170
  onMouseLeave={(e) =>
140
171
  (e.currentTarget.style.background = 'transparent')
@@ -152,7 +183,8 @@ const CanvasCell = React.forwardRef<HTMLDivElement, CanvasCellProps>(
152
183
  }}
153
184
  style={{ ...toolbarBtnStyle, color: '#ff4d4f' }}
154
185
  onMouseEnter={(e) =>
155
- (e.currentTarget.style.background = '#fff1f0')
186
+ (e.currentTarget.style.background =
187
+ 'var(--ant-color-error-bg)')
156
188
  }
157
189
  onMouseLeave={(e) =>
158
190
  (e.currentTarget.style.background = 'transparent')
@@ -182,7 +214,7 @@ const toolbarBtnStyle: React.CSSProperties = {
182
214
  alignItems: 'center',
183
215
  justifyContent: 'center',
184
216
  fontSize: 14,
185
- color: '#555',
217
+ color: 'var(--ant-color-text-secondary)',
186
218
  padding: 0,
187
219
  transition: 'background 120ms ease',
188
220
  };