@nocobase/app-plugin-projects 0.1.0-beta.2 → 0.1.0-beta.20

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 (774) hide show
  1. package/CHANGELOG.md +438 -0
  2. package/README.md +83 -106
  3. package/dist/client/api/changed-issues.d.ts +12 -0
  4. package/dist/client/api/changed-issues.d.ts.map +1 -0
  5. package/dist/client/api/changed-issues.js +30 -0
  6. package/dist/client/api/changed-issues.js.map +1 -0
  7. package/dist/client/api/client.d.ts +8 -25
  8. package/dist/client/api/client.d.ts.map +1 -1
  9. package/dist/client/api/client.js +12 -51
  10. package/dist/client/api/client.js.map +1 -1
  11. package/dist/client/api/invalidate-queries.d.ts +7 -0
  12. package/dist/client/api/invalidate-queries.d.ts.map +1 -0
  13. package/dist/client/api/invalidate-queries.js +65 -0
  14. package/dist/client/api/invalidate-queries.js.map +1 -0
  15. package/dist/client/api/keys.d.ts +4 -10
  16. package/dist/client/api/keys.d.ts.map +1 -1
  17. package/dist/client/api/keys.js +4 -31
  18. package/dist/client/api/keys.js.map +1 -1
  19. package/dist/client/components/attachment-list.d.ts +77 -0
  20. package/dist/client/components/attachment-list.d.ts.map +1 -0
  21. package/dist/client/components/attachment-list.js +147 -0
  22. package/dist/client/components/attachment-list.js.map +1 -0
  23. package/dist/client/components/pm-badges.d.ts +1 -1
  24. package/dist/client/components/pm-badges.d.ts.map +1 -1
  25. package/dist/client/components/pm-description-image.d.ts +4 -0
  26. package/dist/client/components/pm-description-image.d.ts.map +1 -0
  27. package/dist/client/components/pm-description-image.js +61 -0
  28. package/dist/client/components/pm-description-image.js.map +1 -0
  29. package/dist/client/components/pm-executor-select.d.ts +3 -1
  30. package/dist/client/components/pm-executor-select.d.ts.map +1 -1
  31. package/dist/client/components/pm-executor-select.js +6 -1
  32. package/dist/client/components/pm-executor-select.js.map +1 -1
  33. package/dist/client/components/pm-markdown.d.ts +1 -1
  34. package/dist/client/components/pm-markdown.d.ts.map +1 -1
  35. package/dist/client/components/pm-markdown.js +28 -15
  36. package/dist/client/components/pm-markdown.js.map +1 -1
  37. package/dist/client/components/pm-rich-text-editor.d.ts +4 -1
  38. package/dist/client/components/pm-rich-text-editor.d.ts.map +1 -1
  39. package/dist/client/components/pm-rich-text-editor.js +44 -4
  40. package/dist/client/components/pm-rich-text-editor.js.map +1 -1
  41. package/dist/client/components/pm-rich-text-extensions.d.ts +1 -0
  42. package/dist/client/components/pm-rich-text-extensions.d.ts.map +1 -1
  43. package/dist/client/components/pm-rich-text-extensions.js +2 -0
  44. package/dist/client/components/pm-rich-text-extensions.js.map +1 -1
  45. package/dist/client/components/ui/radio-group.d.ts +7 -0
  46. package/dist/client/components/ui/radio-group.d.ts.map +1 -0
  47. package/dist/client/components/ui/radio-group.js +12 -0
  48. package/dist/client/components/ui/radio-group.js.map +1 -0
  49. package/dist/client/components/ui/spinner.d.ts.map +1 -1
  50. package/dist/client/components/ui/spinner.js +3 -2
  51. package/dist/client/components/ui/spinner.js.map +1 -1
  52. package/dist/client/config.d.ts +0 -2
  53. package/dist/client/config.d.ts.map +1 -1
  54. package/dist/client/config.js +1 -5
  55. package/dist/client/config.js.map +1 -1
  56. package/dist/client/hooks/use-attachment-uploads.d.ts +2 -2
  57. package/dist/client/hooks/use-attachment-uploads.d.ts.map +1 -1
  58. package/dist/client/hooks/use-attachment-uploads.js +28 -13
  59. package/dist/client/hooks/use-attachment-uploads.js.map +1 -1
  60. package/dist/client/hooks/use-notify.d.ts +3 -0
  61. package/dist/client/hooks/use-notify.d.ts.map +1 -1
  62. package/dist/client/hooks/use-notify.js +59 -6
  63. package/dist/client/hooks/use-notify.js.map +1 -1
  64. package/dist/client/issues.d.ts +3 -5
  65. package/dist/client/issues.d.ts.map +1 -1
  66. package/dist/client/issues.js +3 -4
  67. package/dist/client/issues.js.map +1 -1
  68. package/dist/client/kit/executor-presentation.d.ts +15 -0
  69. package/dist/client/kit/executor-presentation.d.ts.map +1 -0
  70. package/dist/client/kit/executor-presentation.js +4 -0
  71. package/dist/client/kit/executor-presentation.js.map +1 -0
  72. package/dist/client/kit/intake-draft.d.ts +21 -0
  73. package/dist/client/kit/intake-draft.d.ts.map +1 -0
  74. package/dist/client/kit/intake-draft.js +20 -0
  75. package/dist/client/kit/intake-draft.js.map +1 -0
  76. package/dist/client/kit/issue-creation.d.ts +4 -0
  77. package/dist/client/kit/issue-creation.d.ts.map +1 -0
  78. package/dist/client/kit/issue-creation.js +4 -0
  79. package/dist/client/kit/issue-creation.js.map +1 -0
  80. package/dist/client/kit/plans/lookup.d.ts +2 -2
  81. package/dist/client/kit/plans/lookup.js +3 -3
  82. package/dist/client/kit/plans/lookup.js.map +1 -1
  83. package/dist/client/kit/plans/plan-confirm.d.ts.map +1 -1
  84. package/dist/client/kit/plans/plan-confirm.js +2 -2
  85. package/dist/client/kit/plans/plan-confirm.js.map +1 -1
  86. package/dist/client/kit/plans/plan-row.js +2 -2
  87. package/dist/client/kit/plans/plan-row.js.map +1 -1
  88. package/dist/client/kit.d.ts +9 -9
  89. package/dist/client/kit.d.ts.map +1 -1
  90. package/dist/client/kit.js +9 -9
  91. package/dist/client/kit.js.map +1 -1
  92. package/dist/client/lib/format.d.ts.map +1 -1
  93. package/dist/client/lib/format.js +14 -2
  94. package/dist/client/lib/format.js.map +1 -1
  95. package/dist/client/lib/kinds.d.ts +3 -29
  96. package/dist/client/lib/kinds.d.ts.map +1 -1
  97. package/dist/client/lib/kinds.js +7 -46
  98. package/dist/client/lib/kinds.js.map +1 -1
  99. package/dist/client/lib/status-events.d.ts +21 -0
  100. package/dist/client/lib/status-events.d.ts.map +1 -0
  101. package/dist/client/lib/status-events.js +31 -0
  102. package/dist/client/lib/status-events.js.map +1 -0
  103. package/dist/client/lib/status.d.ts +5 -7
  104. package/dist/client/lib/status.d.ts.map +1 -1
  105. package/dist/client/lib/status.js +5 -7
  106. package/dist/client/lib/status.js.map +1 -1
  107. package/dist/client/locales/de-DE.d.ts +5 -0
  108. package/dist/client/locales/de-DE.d.ts.map +1 -0
  109. package/dist/client/locales/de-DE.js +1327 -0
  110. package/dist/client/locales/de-DE.js.map +1 -0
  111. package/dist/client/locales/en-US.d.ts +17 -252
  112. package/dist/client/locales/en-US.d.ts.map +1 -1
  113. package/dist/client/locales/en-US.js +21 -252
  114. package/dist/client/locales/en-US.js.map +1 -1
  115. package/dist/client/locales/es-ES.d.ts +5 -0
  116. package/dist/client/locales/es-ES.d.ts.map +1 -0
  117. package/dist/client/locales/es-ES.js +1341 -0
  118. package/dist/client/locales/es-ES.js.map +1 -0
  119. package/dist/client/locales/fr-FR.d.ts +5 -0
  120. package/dist/client/locales/fr-FR.d.ts.map +1 -0
  121. package/dist/client/locales/fr-FR.js +1341 -0
  122. package/dist/client/locales/fr-FR.js.map +1 -0
  123. package/dist/client/locales/id-ID.d.ts +5 -0
  124. package/dist/client/locales/id-ID.d.ts.map +1 -0
  125. package/dist/client/locales/id-ID.js +1327 -0
  126. package/dist/client/locales/id-ID.js.map +1 -0
  127. package/dist/client/locales/index.d.ts.map +1 -1
  128. package/dist/client/locales/index.js +8 -0
  129. package/dist/client/locales/index.js.map +1 -1
  130. package/dist/client/locales/ja-JP.d.ts +5 -0
  131. package/dist/client/locales/ja-JP.d.ts.map +1 -0
  132. package/dist/client/locales/ja-JP.js +1327 -0
  133. package/dist/client/locales/ja-JP.js.map +1 -0
  134. package/dist/client/locales/plans.en-US.js +1 -1
  135. package/dist/client/locales/plans.en-US.js.map +1 -1
  136. package/dist/client/locales/plans.zh-CN.js +1 -1
  137. package/dist/client/locales/plans.zh-CN.js.map +1 -1
  138. package/dist/client/locales/pt-BR.d.ts +5 -0
  139. package/dist/client/locales/pt-BR.d.ts.map +1 -0
  140. package/dist/client/locales/pt-BR.js +1341 -0
  141. package/dist/client/locales/pt-BR.js.map +1 -0
  142. package/dist/client/locales/vi-VN.d.ts +5 -0
  143. package/dist/client/locales/vi-VN.d.ts.map +1 -0
  144. package/dist/client/locales/vi-VN.js +1327 -0
  145. package/dist/client/locales/vi-VN.js.map +1 -0
  146. package/dist/client/locales/zh-CN.d.ts.map +1 -1
  147. package/dist/client/locales/zh-CN.js +22 -245
  148. package/dist/client/locales/zh-CN.js.map +1 -1
  149. package/dist/client/locales/zh-TW.d.ts +5 -0
  150. package/dist/client/locales/zh-TW.d.ts.map +1 -0
  151. package/dist/client/locales/zh-TW.js +1327 -0
  152. package/dist/client/locales/zh-TW.js.map +1 -0
  153. package/dist/client/pages/config/members/invitations-section.d.ts.map +1 -1
  154. package/dist/client/pages/config/members/invitations-section.js +34 -12
  155. package/dist/client/pages/config/members/invitations-section.js.map +1 -1
  156. package/dist/client/pages/config/members/invite-dialog.d.ts +5 -4
  157. package/dist/client/pages/config/members/invite-dialog.d.ts.map +1 -1
  158. package/dist/client/pages/config/members/invite-dialog.js +18 -17
  159. package/dist/client/pages/config/members/invite-dialog.js.map +1 -1
  160. package/dist/client/pages/intake/intake-files.d.ts.map +1 -1
  161. package/dist/client/pages/intake/intake-files.js +38 -2
  162. package/dist/client/pages/intake/intake-files.js.map +1 -1
  163. package/dist/client/pages/intake/intake-panel.d.ts.map +1 -1
  164. package/dist/client/pages/intake/intake-panel.js +19 -7
  165. package/dist/client/pages/intake/intake-panel.js.map +1 -1
  166. package/dist/client/pages/intake/use-intake-ai.d.ts +1 -1
  167. package/dist/client/pages/intake/use-intake-ai.d.ts.map +1 -1
  168. package/dist/client/pages/intake/use-intake-ai.js +3 -2
  169. package/dist/client/pages/intake/use-intake-ai.js.map +1 -1
  170. package/dist/client/pages/intake/use-intake-uploads.d.ts.map +1 -1
  171. package/dist/client/pages/intake/use-intake-uploads.js +10 -3
  172. package/dist/client/pages/intake/use-intake-uploads.js.map +1 -1
  173. package/dist/client/pages/issues/board/board-model.d.ts +1 -1
  174. package/dist/client/pages/issues/board/board-model.js +1 -1
  175. package/dist/client/pages/issues/board/use-board-move.d.ts +2 -8
  176. package/dist/client/pages/issues/board/use-board-move.d.ts.map +1 -1
  177. package/dist/client/pages/issues/board/use-board-move.js +5 -42
  178. package/dist/client/pages/issues/board/use-board-move.js.map +1 -1
  179. package/dist/client/pages/issues/detail/new-subtask.d.ts +0 -1
  180. package/dist/client/pages/issues/detail/new-subtask.d.ts.map +1 -1
  181. package/dist/client/pages/issues/detail/new-subtask.js +10 -31
  182. package/dist/client/pages/issues/detail/new-subtask.js.map +1 -1
  183. package/dist/client/pages/issues/detail/subtask-model.d.ts +1 -1
  184. package/dist/client/pages/issues/detail/subtask-model.js +1 -1
  185. package/dist/client/pages/issues/detail/use-confirmed-update.d.ts +4 -10
  186. package/dist/client/pages/issues/detail/use-confirmed-update.d.ts.map +1 -1
  187. package/dist/client/pages/issues/detail/use-confirmed-update.js +6 -42
  188. package/dist/client/pages/issues/detail/use-confirmed-update.js.map +1 -1
  189. package/dist/client/pages/issues/detail/use-issue-activity.d.ts.map +1 -1
  190. package/dist/client/pages/issues/detail/use-issue-activity.js +56 -10
  191. package/dist/client/pages/issues/detail/use-issue-activity.js.map +1 -1
  192. package/dist/client/pages/issues/detail/use-issue-page.d.ts +0 -4
  193. package/dist/client/pages/issues/detail/use-issue-page.d.ts.map +1 -1
  194. package/dist/client/pages/issues/detail/use-issue-page.js +0 -14
  195. package/dist/client/pages/issues/detail/use-issue-page.js.map +1 -1
  196. package/dist/client/pages/issues/detail/use-issue-update.d.ts +2 -2
  197. package/dist/client/pages/issues/detail/use-issue-update.d.ts.map +1 -1
  198. package/dist/client/pages/issues/detail/use-issue-update.js +8 -8
  199. package/dist/client/pages/issues/detail/use-issue-update.js.map +1 -1
  200. package/dist/client/pages/issues/detail/use-older-activities.d.ts +1 -1
  201. package/dist/client/pages/issues/detail/use-older-activities.d.ts.map +1 -1
  202. package/dist/client/pages/issues/detail/use-older-activities.js +7 -24
  203. package/dist/client/pages/issues/detail/use-older-activities.js.map +1 -1
  204. package/dist/client/pages/issues/detail/use-older-pages.d.ts +14 -0
  205. package/dist/client/pages/issues/detail/use-older-pages.d.ts.map +1 -0
  206. package/dist/client/pages/issues/detail/use-older-pages.js +86 -0
  207. package/dist/client/pages/issues/detail/use-older-pages.js.map +1 -0
  208. package/dist/client/pages/issues/detail/use-older-threads.d.ts +1 -1
  209. package/dist/client/pages/issues/detail/use-older-threads.d.ts.map +1 -1
  210. package/dist/client/pages/issues/detail/use-older-threads.js +7 -23
  211. package/dist/client/pages/issues/detail/use-older-threads.js.map +1 -1
  212. package/dist/client/pages/issues/filters.d.ts +1 -1
  213. package/dist/client/pages/issues/filters.d.ts.map +1 -1
  214. package/dist/client/pages/issues/filters.js +2 -0
  215. package/dist/client/pages/issues/filters.js.map +1 -1
  216. package/dist/client/pages/issues/new-issue-button.d.ts.map +1 -1
  217. package/dist/client/pages/issues/new-issue-button.js +1 -1
  218. package/dist/client/pages/issues/new-issue-button.js.map +1 -1
  219. package/dist/client/pages/issues/new-issue-form.d.ts +13 -8
  220. package/dist/client/pages/issues/new-issue-form.d.ts.map +1 -1
  221. package/dist/client/pages/issues/new-issue-form.js +87 -83
  222. package/dist/client/pages/issues/new-issue-form.js.map +1 -1
  223. package/dist/client/pages/issues/new.d.ts.map +1 -1
  224. package/dist/client/pages/issues/new.js +19 -12
  225. package/dist/client/pages/issues/new.js.map +1 -1
  226. package/dist/client/pages/issues/use-executor-options.d.ts +3 -2
  227. package/dist/client/pages/issues/use-executor-options.d.ts.map +1 -1
  228. package/dist/client/pages/issues/use-executor-options.js +5 -23
  229. package/dist/client/pages/issues/use-executor-options.js.map +1 -1
  230. package/dist/client/pages/my-issues/my-issues-model.d.ts +2 -5
  231. package/dist/client/pages/my-issues/my-issues-model.d.ts.map +1 -1
  232. package/dist/client/pages/my-issues/my-issues-model.js +6 -7
  233. package/dist/client/pages/my-issues/my-issues-model.js.map +1 -1
  234. package/dist/client/pages/projects/detail/use-project-page.d.ts +4 -26
  235. package/dist/client/pages/projects/detail/use-project-page.d.ts.map +1 -1
  236. package/dist/client/pages/projects/detail/use-project-page.js +7 -53
  237. package/dist/client/pages/projects/detail/use-project-page.js.map +1 -1
  238. package/dist/client/pages/projects/new.d.ts +1 -1
  239. package/dist/client/pages/projects/new.d.ts.map +1 -1
  240. package/dist/client/pages/projects/new.js +3 -7
  241. package/dist/client/pages/projects/new.js.map +1 -1
  242. package/dist/client/plugin.d.ts +3 -0
  243. package/dist/client/plugin.d.ts.map +1 -1
  244. package/dist/client/plugin.js +8 -1
  245. package/dist/client/plugin.js.map +1 -1
  246. package/dist/client/projects.d.ts +2 -2
  247. package/dist/client/projects.d.ts.map +1 -1
  248. package/dist/client/projects.js +2 -2
  249. package/dist/client/projects.js.map +1 -1
  250. package/dist/client/providers/query-provider.d.ts.map +1 -1
  251. package/dist/client/providers/query-provider.js +66 -28
  252. package/dist/client/providers/query-provider.js.map +1 -1
  253. package/dist/database/migrations/.manifest.json +16 -0
  254. package/dist/database/migrations/202610110001_pm_issue_graph_revision.d.ts +4 -0
  255. package/dist/database/migrations/202610110001_pm_issue_graph_revision.d.ts.map +1 -0
  256. package/dist/database/migrations/202610110001_pm_issue_graph_revision.js +20 -0
  257. package/dist/database/migrations/202610110001_pm_issue_graph_revision.js.map +1 -0
  258. package/dist/database/migrations/202610240010_pm_fixed_statuses.d.ts +4 -0
  259. package/dist/database/migrations/202610240010_pm_fixed_statuses.d.ts.map +1 -0
  260. package/dist/database/migrations/202610240010_pm_fixed_statuses.js +189 -0
  261. package/dist/database/migrations/202610240010_pm_fixed_statuses.js.map +1 -0
  262. package/dist/database/migrations/202610240011_pm_issue_progress.d.ts +4 -0
  263. package/dist/database/migrations/202610240011_pm_issue_progress.d.ts.map +1 -0
  264. package/dist/database/migrations/202610240011_pm_issue_progress.js +19 -0
  265. package/dist/database/migrations/202610240011_pm_issue_progress.js.map +1 -0
  266. package/dist/database/migrations/202610240012_pm_issue_acceptance.d.ts +4 -0
  267. package/dist/database/migrations/202610240012_pm_issue_acceptance.d.ts.map +1 -0
  268. package/dist/database/migrations/202610240012_pm_issue_acceptance.js +17 -0
  269. package/dist/database/migrations/202610240012_pm_issue_acceptance.js.map +1 -0
  270. package/dist/server/access/viewer.d.ts +3 -0
  271. package/dist/server/access/viewer.d.ts.map +1 -1
  272. package/dist/server/access/viewer.js.map +1 -1
  273. package/dist/server/composition.d.ts +11 -17
  274. package/dist/server/composition.d.ts.map +1 -1
  275. package/dist/server/composition.js +15 -58
  276. package/dist/server/composition.js.map +1 -1
  277. package/dist/server/domains/attachments/attachment.routes.d.ts.map +1 -1
  278. package/dist/server/domains/attachments/attachment.routes.js +13 -1
  279. package/dist/server/domains/attachments/attachment.routes.js.map +1 -1
  280. package/dist/server/domains/attachments/attachment.service.d.ts +3 -1
  281. package/dist/server/domains/attachments/attachment.service.d.ts.map +1 -1
  282. package/dist/server/domains/attachments/attachment.service.js +36 -2
  283. package/dist/server/domains/attachments/attachment.service.js.map +1 -1
  284. package/dist/server/domains/attachments/attachment.store.d.ts +5 -0
  285. package/dist/server/domains/attachments/attachment.store.d.ts.map +1 -1
  286. package/dist/server/domains/attachments/attachment.store.js +27 -0
  287. package/dist/server/domains/attachments/attachment.store.js.map +1 -1
  288. package/dist/server/domains/comments/comment.queries.d.ts +42 -8
  289. package/dist/server/domains/comments/comment.queries.d.ts.map +1 -1
  290. package/dist/server/domains/comments/comment.queries.js +69 -8
  291. package/dist/server/domains/comments/comment.queries.js.map +1 -1
  292. package/dist/server/domains/comments/comment.routes.d.ts +1 -1
  293. package/dist/server/domains/comments/comment.routes.js +4 -4
  294. package/dist/server/domains/comments/comment.routes.js.map +1 -1
  295. package/dist/server/domains/comments/comment.service.d.ts +2 -2
  296. package/dist/server/domains/comments/comment.service.d.ts.map +1 -1
  297. package/dist/server/domains/comments/comment.service.js +18 -10
  298. package/dist/server/domains/comments/comment.service.js.map +1 -1
  299. package/dist/server/domains/comments/comment.store.d.ts +22 -1
  300. package/dist/server/domains/comments/comment.store.d.ts.map +1 -1
  301. package/dist/server/domains/comments/comment.store.js +65 -2
  302. package/dist/server/domains/comments/comment.store.js.map +1 -1
  303. package/dist/server/domains/comments/index.d.ts +1 -1
  304. package/dist/server/domains/comments/index.d.ts.map +1 -1
  305. package/dist/server/domains/comments/index.js.map +1 -1
  306. package/dist/server/domains/comments/ports.d.ts +7 -2
  307. package/dist/server/domains/comments/ports.d.ts.map +1 -1
  308. package/dist/server/domains/invitations/invitation.routes.d.ts +2 -1
  309. package/dist/server/domains/invitations/invitation.routes.d.ts.map +1 -1
  310. package/dist/server/domains/invitations/invitation.routes.js +27 -10
  311. package/dist/server/domains/invitations/invitation.routes.js.map +1 -1
  312. package/dist/server/domains/invitations/invitation.service.d.ts +1 -1
  313. package/dist/server/domains/invitations/invitation.service.d.ts.map +1 -1
  314. package/dist/server/domains/invitations/invitation.service.js +19 -3
  315. package/dist/server/domains/invitations/invitation.service.js.map +1 -1
  316. package/dist/server/domains/issues/index.d.ts +4 -4
  317. package/dist/server/domains/issues/index.d.ts.map +1 -1
  318. package/dist/server/domains/issues/index.js +3 -3
  319. package/dist/server/domains/issues/index.js.map +1 -1
  320. package/dist/server/domains/issues/issue.access.d.ts +2 -0
  321. package/dist/server/domains/issues/issue.access.d.ts.map +1 -1
  322. package/dist/server/domains/issues/issue.access.js +8 -1
  323. package/dist/server/domains/issues/issue.access.js.map +1 -1
  324. package/dist/server/domains/issues/issue.context.d.ts +6 -22
  325. package/dist/server/domains/issues/issue.context.d.ts.map +1 -1
  326. package/dist/server/domains/issues/issue.context.js +88 -105
  327. package/dist/server/domains/issues/issue.context.js.map +1 -1
  328. package/dist/server/domains/issues/issue.events.d.ts +5 -1
  329. package/dist/server/domains/issues/issue.events.d.ts.map +1 -1
  330. package/dist/server/domains/issues/issue.fields.d.ts +5 -3
  331. package/dist/server/domains/issues/issue.fields.d.ts.map +1 -1
  332. package/dist/server/domains/issues/issue.fields.js +42 -16
  333. package/dist/server/domains/issues/issue.fields.js.map +1 -1
  334. package/dist/server/domains/issues/issue.projects.d.ts +2 -2
  335. package/dist/server/domains/issues/issue.projects.d.ts.map +1 -1
  336. package/dist/server/domains/issues/issue.projects.js +1 -2
  337. package/dist/server/domains/issues/issue.projects.js.map +1 -1
  338. package/dist/server/domains/issues/issue.queries.d.ts +26 -7
  339. package/dist/server/domains/issues/issue.queries.d.ts.map +1 -1
  340. package/dist/server/domains/issues/issue.queries.js +139 -60
  341. package/dist/server/domains/issues/issue.queries.js.map +1 -1
  342. package/dist/server/domains/issues/issue.routes.d.ts +3 -1
  343. package/dist/server/domains/issues/issue.routes.d.ts.map +1 -1
  344. package/dist/server/domains/issues/issue.routes.js +72 -46
  345. package/dist/server/domains/issues/issue.routes.js.map +1 -1
  346. package/dist/server/domains/issues/issue.service.d.ts +26 -51
  347. package/dist/server/domains/issues/issue.service.d.ts.map +1 -1
  348. package/dist/server/domains/issues/issue.service.js +89 -87
  349. package/dist/server/domains/issues/issue.service.js.map +1 -1
  350. package/dist/server/domains/issues/issue.status.d.ts +7 -10
  351. package/dist/server/domains/issues/issue.status.d.ts.map +1 -1
  352. package/dist/server/domains/issues/issue.status.js +6 -22
  353. package/dist/server/domains/issues/issue.status.js.map +1 -1
  354. package/dist/server/domains/issues/issue.store.d.ts +13 -0
  355. package/dist/server/domains/issues/issue.store.d.ts.map +1 -1
  356. package/dist/server/domains/issues/issue.store.js +45 -0
  357. package/dist/server/domains/issues/issue.store.js.map +1 -1
  358. package/dist/server/domains/issues/ports.d.ts +39 -38
  359. package/dist/server/domains/issues/ports.d.ts.map +1 -1
  360. package/dist/server/domains/issues/ports.js +1 -5
  361. package/dist/server/domains/issues/ports.js.map +1 -1
  362. package/dist/server/domains/notices/notice.planner.d.ts +2 -1
  363. package/dist/server/domains/notices/notice.planner.d.ts.map +1 -1
  364. package/dist/server/domains/notices/notice.planner.js +2 -1
  365. package/dist/server/domains/notices/notice.planner.js.map +1 -1
  366. package/dist/server/domains/notices/notice.rules.d.ts +1 -4
  367. package/dist/server/domains/notices/notice.rules.d.ts.map +1 -1
  368. package/dist/server/domains/notices/notice.rules.js +4 -5
  369. package/dist/server/domains/notices/notice.rules.js.map +1 -1
  370. package/dist/server/domains/plans/intake/intake.service.d.ts +2 -0
  371. package/dist/server/domains/plans/intake/intake.service.d.ts.map +1 -1
  372. package/dist/server/domains/plans/intake/intake.service.js +14 -0
  373. package/dist/server/domains/plans/intake/intake.service.js.map +1 -1
  374. package/dist/server/domains/plans/intake/intake.text.d.ts +5 -6
  375. package/dist/server/domains/plans/intake/intake.text.d.ts.map +1 -1
  376. package/dist/server/domains/plans/intake/intake.text.js +5 -6
  377. package/dist/server/domains/plans/intake/intake.text.js.map +1 -1
  378. package/dist/server/domains/plans/plan.engine.d.ts.map +1 -1
  379. package/dist/server/domains/plans/plan.engine.js +6 -0
  380. package/dist/server/domains/plans/plan.engine.js.map +1 -1
  381. package/dist/server/domains/plans/plan.ops.d.ts +3 -3
  382. package/dist/server/domains/plans/plan.ops.d.ts.map +1 -1
  383. package/dist/server/domains/plans/plan.ops.js +23 -16
  384. package/dist/server/domains/plans/plan.ops.js.map +1 -1
  385. package/dist/server/domains/plans/plan.schemas.d.ts.map +1 -1
  386. package/dist/server/domains/plans/plan.schemas.js +26 -10
  387. package/dist/server/domains/plans/plan.schemas.js.map +1 -1
  388. package/dist/server/domains/projects/index.d.ts +1 -1
  389. package/dist/server/domains/projects/index.d.ts.map +1 -1
  390. package/dist/server/domains/projects/index.js.map +1 -1
  391. package/dist/server/domains/projects/project-resources.d.ts +5 -0
  392. package/dist/server/domains/projects/project-resources.d.ts.map +1 -1
  393. package/dist/server/domains/projects/project-resources.js +43 -1
  394. package/dist/server/domains/projects/project-resources.js.map +1 -1
  395. package/dist/server/domains/projects/project.events.d.ts +10 -0
  396. package/dist/server/domains/projects/project.events.d.ts.map +1 -0
  397. package/dist/server/domains/projects/project.events.js +2 -0
  398. package/dist/server/domains/projects/project.events.js.map +1 -0
  399. package/dist/server/domains/projects/project.routes.d.ts.map +1 -1
  400. package/dist/server/domains/projects/project.routes.js +1 -3
  401. package/dist/server/domains/projects/project.routes.js.map +1 -1
  402. package/dist/server/domains/projects/project.service.d.ts +1 -7
  403. package/dist/server/domains/projects/project.service.d.ts.map +1 -1
  404. package/dist/server/domains/projects/project.service.js +2 -17
  405. package/dist/server/domains/projects/project.service.js.map +1 -1
  406. package/dist/server/domains/projects/project.store.d.ts +0 -1
  407. package/dist/server/domains/projects/project.store.d.ts.map +1 -1
  408. package/dist/server/domains/projects/project.store.js +0 -1
  409. package/dist/server/domains/projects/project.store.js.map +1 -1
  410. package/dist/server/domains/reports/report.service.d.ts +1 -12
  411. package/dist/server/domains/reports/report.service.d.ts.map +1 -1
  412. package/dist/server/domains/reports/report.service.js +92 -136
  413. package/dist/server/domains/reports/report.service.js.map +1 -1
  414. package/dist/server/domains/settings/settings.store.d.ts +4 -4
  415. package/dist/server/domains/settings/settings.store.js +2 -2
  416. package/dist/server/domains/statuses/event-types.d.ts +16 -0
  417. package/dist/server/domains/statuses/event-types.d.ts.map +1 -0
  418. package/dist/server/domains/statuses/event-types.js +31 -0
  419. package/dist/server/domains/statuses/event-types.js.map +1 -0
  420. package/dist/server/domains/statuses/index.d.ts +4 -0
  421. package/dist/server/domains/statuses/index.d.ts.map +1 -0
  422. package/dist/server/domains/statuses/index.js +4 -0
  423. package/dist/server/domains/statuses/index.js.map +1 -0
  424. package/dist/server/domains/statuses/status.catalog.d.ts +15 -0
  425. package/dist/server/domains/statuses/status.catalog.d.ts.map +1 -0
  426. package/dist/server/domains/statuses/status.catalog.js +123 -0
  427. package/dist/server/domains/statuses/status.catalog.js.map +1 -0
  428. package/dist/server/domains/statuses/status.events.d.ts +15 -0
  429. package/dist/server/domains/statuses/status.events.d.ts.map +1 -0
  430. package/dist/server/domains/statuses/status.events.js +2 -0
  431. package/dist/server/domains/statuses/status.events.js.map +1 -0
  432. package/dist/server/domains/statuses/status.fire.d.ts +50 -0
  433. package/dist/server/domains/statuses/status.fire.d.ts.map +1 -0
  434. package/dist/server/domains/statuses/status.fire.js +42 -0
  435. package/dist/server/domains/statuses/status.fire.js.map +1 -0
  436. package/dist/server/domains/subscriptions/subscription.routes.d.ts.map +1 -1
  437. package/dist/server/domains/subscriptions/subscription.routes.js +4 -2
  438. package/dist/server/domains/subscriptions/subscription.routes.js.map +1 -1
  439. package/dist/server/domains/subtasks/index.d.ts +1 -0
  440. package/dist/server/domains/subtasks/index.d.ts.map +1 -1
  441. package/dist/server/domains/subtasks/index.js +1 -0
  442. package/dist/server/domains/subtasks/index.js.map +1 -1
  443. package/dist/server/domains/subtasks/subtask.blocking.d.ts +10 -5
  444. package/dist/server/domains/subtasks/subtask.blocking.d.ts.map +1 -1
  445. package/dist/server/domains/subtasks/subtask.blocking.js +35 -15
  446. package/dist/server/domains/subtasks/subtask.blocking.js.map +1 -1
  447. package/dist/server/domains/subtasks/subtask.guard.d.ts +12 -0
  448. package/dist/server/domains/subtasks/subtask.guard.d.ts.map +1 -0
  449. package/dist/server/domains/subtasks/subtask.guard.js +23 -0
  450. package/dist/server/domains/subtasks/subtask.guard.js.map +1 -0
  451. package/dist/server/domains/subtasks/subtask.release.d.ts +7 -11
  452. package/dist/server/domains/subtasks/subtask.release.d.ts.map +1 -1
  453. package/dist/server/domains/subtasks/subtask.release.js +9 -7
  454. package/dist/server/domains/subtasks/subtask.release.js.map +1 -1
  455. package/dist/server/domains/subtasks/subtask.routes.d.ts +1 -0
  456. package/dist/server/domains/subtasks/subtask.routes.d.ts.map +1 -1
  457. package/dist/server/domains/subtasks/subtask.routes.js +31 -3
  458. package/dist/server/domains/subtasks/subtask.routes.js.map +1 -1
  459. package/dist/server/domains/subtasks/subtask.service.d.ts +5 -5
  460. package/dist/server/domains/subtasks/subtask.service.d.ts.map +1 -1
  461. package/dist/server/domains/subtasks/subtask.service.js +118 -50
  462. package/dist/server/domains/subtasks/subtask.service.js.map +1 -1
  463. package/dist/server/domains/subtasks/subtask.store.d.ts +7 -0
  464. package/dist/server/domains/subtasks/subtask.store.d.ts.map +1 -1
  465. package/dist/server/domains/subtasks/subtask.store.js +34 -0
  466. package/dist/server/domains/subtasks/subtask.store.js.map +1 -1
  467. package/dist/server/index.d.ts +1 -0
  468. package/dist/server/index.d.ts.map +1 -1
  469. package/dist/server/index.js +1 -0
  470. package/dist/server/index.js.map +1 -1
  471. package/dist/server/kernel/activity.d.ts +5 -2
  472. package/dist/server/kernel/activity.d.ts.map +1 -1
  473. package/dist/server/kernel/activity.js +28 -1
  474. package/dist/server/kernel/activity.js.map +1 -1
  475. package/dist/server/kernel/actor.d.ts +2 -0
  476. package/dist/server/kernel/actor.d.ts.map +1 -1
  477. package/dist/server/kernel/actor.js.map +1 -1
  478. package/dist/server/kernel/http.d.ts.map +1 -1
  479. package/dist/server/kernel/http.js +2 -3
  480. package/dist/server/kernel/http.js.map +1 -1
  481. package/dist/server/kernel/kinds.d.ts +24 -6
  482. package/dist/server/kernel/kinds.d.ts.map +1 -1
  483. package/dist/server/kernel/kinds.js +21 -1
  484. package/dist/server/kernel/kinds.js.map +1 -1
  485. package/dist/server/kernel/transaction-read.d.ts +4 -0
  486. package/dist/server/kernel/transaction-read.d.ts.map +1 -0
  487. package/dist/server/kernel/transaction-read.js +30 -0
  488. package/dist/server/kernel/transaction-read.js.map +1 -0
  489. package/dist/server/kernel/work.d.ts +18 -6
  490. package/dist/server/kernel/work.d.ts.map +1 -1
  491. package/dist/server/kernel/work.js +37 -14
  492. package/dist/server/kernel/work.js.map +1 -1
  493. package/dist/server/lifecycle/move.d.ts +1 -0
  494. package/dist/server/lifecycle/move.d.ts.map +1 -1
  495. package/dist/server/lifecycle/move.js +2 -0
  496. package/dist/server/lifecycle/move.js.map +1 -1
  497. package/dist/server/lifecycle/registry.d.ts +5 -0
  498. package/dist/server/lifecycle/registry.d.ts.map +1 -1
  499. package/dist/server/lifecycle/registry.js.map +1 -1
  500. package/dist/server/locales/de-DE.d.ts +5 -0
  501. package/dist/server/locales/de-DE.d.ts.map +1 -0
  502. package/dist/server/locales/de-DE.js +202 -0
  503. package/dist/server/locales/de-DE.js.map +1 -0
  504. package/dist/server/locales/en-US.d.ts +0 -9
  505. package/dist/server/locales/en-US.d.ts.map +1 -1
  506. package/dist/server/locales/en-US.js +0 -9
  507. package/dist/server/locales/en-US.js.map +1 -1
  508. package/dist/server/locales/es-ES.d.ts +5 -0
  509. package/dist/server/locales/es-ES.d.ts.map +1 -0
  510. package/dist/server/locales/es-ES.js +202 -0
  511. package/dist/server/locales/es-ES.js.map +1 -0
  512. package/dist/server/locales/fr-FR.d.ts +5 -0
  513. package/dist/server/locales/fr-FR.d.ts.map +1 -0
  514. package/dist/server/locales/fr-FR.js +202 -0
  515. package/dist/server/locales/fr-FR.js.map +1 -0
  516. package/dist/server/locales/id-ID.d.ts +5 -0
  517. package/dist/server/locales/id-ID.d.ts.map +1 -0
  518. package/dist/server/locales/id-ID.js +202 -0
  519. package/dist/server/locales/id-ID.js.map +1 -0
  520. package/dist/server/locales/index.d.ts.map +1 -1
  521. package/dist/server/locales/index.js +8 -0
  522. package/dist/server/locales/index.js.map +1 -1
  523. package/dist/server/locales/ja-JP.d.ts +5 -0
  524. package/dist/server/locales/ja-JP.d.ts.map +1 -0
  525. package/dist/server/locales/ja-JP.js +202 -0
  526. package/dist/server/locales/ja-JP.js.map +1 -0
  527. package/dist/server/locales/pt-BR.d.ts +5 -0
  528. package/dist/server/locales/pt-BR.d.ts.map +1 -0
  529. package/dist/server/locales/pt-BR.js +202 -0
  530. package/dist/server/locales/pt-BR.js.map +1 -0
  531. package/dist/server/locales/vi-VN.d.ts +5 -0
  532. package/dist/server/locales/vi-VN.d.ts.map +1 -0
  533. package/dist/server/locales/vi-VN.js +202 -0
  534. package/dist/server/locales/vi-VN.js.map +1 -0
  535. package/dist/server/locales/zh-CN.d.ts.map +1 -1
  536. package/dist/server/locales/zh-CN.js +2 -11
  537. package/dist/server/locales/zh-CN.js.map +1 -1
  538. package/dist/server/locales/zh-TW.d.ts +5 -0
  539. package/dist/server/locales/zh-TW.d.ts.map +1 -0
  540. package/dist/server/locales/zh-TW.js +202 -0
  541. package/dist/server/locales/zh-TW.js.map +1 -0
  542. package/dist/server/providers/change-announcer.d.ts +28 -0
  543. package/dist/server/providers/change-announcer.d.ts.map +1 -0
  544. package/dist/server/providers/change-announcer.js +75 -0
  545. package/dist/server/providers/change-announcer.js.map +1 -0
  546. package/dist/server/providers/notifications.d.ts +1 -0
  547. package/dist/server/providers/notifications.d.ts.map +1 -1
  548. package/dist/server/providers/notifications.js +8 -121
  549. package/dist/server/providers/notifications.js.map +1 -1
  550. package/dist/server/providers/projects.d.ts +3 -8
  551. package/dist/server/providers/projects.d.ts.map +1 -1
  552. package/dist/server/providers/projects.js +16 -37
  553. package/dist/server/providers/projects.js.map +1 -1
  554. package/dist/server/routes/api.d.ts.map +1 -1
  555. package/dist/server/routes/api.js +5 -8
  556. package/dist/server/routes/api.js.map +1 -1
  557. package/dist/server/routes/schemas.d.ts +20 -29
  558. package/dist/server/routes/schemas.d.ts.map +1 -1
  559. package/dist/server/routes/schemas.js +395 -290
  560. package/dist/server/routes/schemas.js.map +1 -1
  561. package/dist/server/tokens.d.ts +22 -35
  562. package/dist/server/tokens.d.ts.map +1 -1
  563. package/dist/server/tokens.js +5 -16
  564. package/dist/server/tokens.js.map +1 -1
  565. package/dist/shared/access.d.ts +0 -1
  566. package/dist/shared/access.d.ts.map +1 -1
  567. package/dist/shared/access.js +2 -11
  568. package/dist/shared/access.js.map +1 -1
  569. package/dist/shared/attachments.d.ts +29 -0
  570. package/dist/shared/attachments.d.ts.map +1 -1
  571. package/dist/shared/attachments.js +7 -0
  572. package/dist/shared/attachments.js.map +1 -1
  573. package/dist/shared/comments.d.ts +3 -0
  574. package/dist/shared/comments.d.ts.map +1 -1
  575. package/dist/shared/comments.js.map +1 -1
  576. package/dist/shared/invitations.d.ts +1 -1
  577. package/dist/shared/invitations.d.ts.map +1 -1
  578. package/dist/shared/issues.d.ts +32 -40
  579. package/dist/shared/issues.d.ts.map +1 -1
  580. package/dist/shared/issues.js +5 -0
  581. package/dist/shared/issues.js.map +1 -1
  582. package/dist/shared/kinds.d.ts +3 -1
  583. package/dist/shared/kinds.d.ts.map +1 -1
  584. package/dist/shared/kinds.js +1 -1
  585. package/dist/shared/locales/access.en-US.d.ts +0 -1
  586. package/dist/shared/locales/access.en-US.d.ts.map +1 -1
  587. package/dist/shared/locales/access.en-US.js +1 -2
  588. package/dist/shared/locales/access.en-US.js.map +1 -1
  589. package/dist/shared/locales/access.zh-CN.d.ts.map +1 -1
  590. package/dist/shared/locales/access.zh-CN.js +1 -2
  591. package/dist/shared/locales/access.zh-CN.js.map +1 -1
  592. package/dist/shared/plans.d.ts +29 -13
  593. package/dist/shared/plans.d.ts.map +1 -1
  594. package/dist/shared/plans.js +2 -1
  595. package/dist/shared/plans.js.map +1 -1
  596. package/dist/shared/projects.d.ts +0 -4
  597. package/dist/shared/projects.d.ts.map +1 -1
  598. package/dist/shared/projects.js.map +1 -1
  599. package/dist/shared/realtime.d.ts +10 -3
  600. package/dist/shared/realtime.d.ts.map +1 -1
  601. package/dist/shared/realtime.js +3 -2
  602. package/dist/shared/realtime.js.map +1 -1
  603. package/dist/shared/statuses.d.ts +42 -0
  604. package/dist/shared/statuses.d.ts.map +1 -0
  605. package/dist/shared/statuses.js +73 -0
  606. package/dist/shared/statuses.js.map +1 -0
  607. package/dist/shared/subtasks.d.ts +8 -3
  608. package/dist/shared/subtasks.d.ts.map +1 -1
  609. package/package.json +21 -29
  610. package/skills/nocobase-app-plugin-projects/SKILL.md +38 -57
  611. package/dist/client/lib/built-in-rule-editors.d.ts +0 -13
  612. package/dist/client/lib/built-in-rule-editors.d.ts.map +0 -1
  613. package/dist/client/lib/built-in-rule-editors.js +0 -86
  614. package/dist/client/lib/built-in-rule-editors.js.map +0 -1
  615. package/dist/client/lib/built-in-rule-types.d.ts +0 -3
  616. package/dist/client/lib/built-in-rule-types.d.ts.map +0 -1
  617. package/dist/client/lib/built-in-rule-types.js +0 -63
  618. package/dist/client/lib/built-in-rule-types.js.map +0 -1
  619. package/dist/client/lib/status-rule-types.d.ts +0 -60
  620. package/dist/client/lib/status-rule-types.d.ts.map +0 -1
  621. package/dist/client/lib/status-rule-types.js +0 -38
  622. package/dist/client/lib/status-rule-types.js.map +0 -1
  623. package/dist/client/lib/workflow-events.d.ts +0 -25
  624. package/dist/client/lib/workflow-events.d.ts.map +0 -1
  625. package/dist/client/lib/workflow-events.js +0 -30
  626. package/dist/client/lib/workflow-events.js.map +0 -1
  627. package/dist/client/pages/config/workflow-detail.d.ts +0 -10
  628. package/dist/client/pages/config/workflow-detail.d.ts.map +0 -1
  629. package/dist/client/pages/config/workflow-detail.js +0 -182
  630. package/dist/client/pages/config/workflow-detail.js.map +0 -1
  631. package/dist/client/pages/config/workflows/flow-editor.d.ts +0 -15
  632. package/dist/client/pages/config/workflows/flow-editor.d.ts.map +0 -1
  633. package/dist/client/pages/config/workflows/flow-editor.js +0 -76
  634. package/dist/client/pages/config/workflows/flow-editor.js.map +0 -1
  635. package/dist/client/pages/config/workflows/status-rules.d.ts +0 -21
  636. package/dist/client/pages/config/workflows/status-rules.d.ts.map +0 -1
  637. package/dist/client/pages/config/workflows/status-rules.js +0 -203
  638. package/dist/client/pages/config/workflows/status-rules.js.map +0 -1
  639. package/dist/client/pages/config/workflows/transitions-matrix.d.ts +0 -20
  640. package/dist/client/pages/config/workflows/transitions-matrix.d.ts.map +0 -1
  641. package/dist/client/pages/config/workflows/transitions-matrix.js +0 -114
  642. package/dist/client/pages/config/workflows/transitions-matrix.js.map +0 -1
  643. package/dist/client/pages/config/workflows/use-status-name.d.ts +0 -4
  644. package/dist/client/pages/config/workflows/use-status-name.d.ts.map +0 -1
  645. package/dist/client/pages/config/workflows/use-status-name.js +0 -17
  646. package/dist/client/pages/config/workflows/use-status-name.js.map +0 -1
  647. package/dist/client/pages/config/workflows/workflow-diagram.d.ts +0 -17
  648. package/dist/client/pages/config/workflows/workflow-diagram.d.ts.map +0 -1
  649. package/dist/client/pages/config/workflows/workflow-diagram.js +0 -298
  650. package/dist/client/pages/config/workflows/workflow-diagram.js.map +0 -1
  651. package/dist/client/pages/config/workflows/workflow-model.d.ts +0 -157
  652. package/dist/client/pages/config/workflows/workflow-model.d.ts.map +0 -1
  653. package/dist/client/pages/config/workflows/workflow-model.js +0 -403
  654. package/dist/client/pages/config/workflows/workflow-model.js.map +0 -1
  655. package/dist/client/pages/config/workflows/workflow-views.d.ts +0 -31
  656. package/dist/client/pages/config/workflows/workflow-views.d.ts.map +0 -1
  657. package/dist/client/pages/config/workflows/workflow-views.js +0 -76
  658. package/dist/client/pages/config/workflows/workflow-views.js.map +0 -1
  659. package/dist/client/pages/config/workflows.d.ts +0 -8
  660. package/dist/client/pages/config/workflows.d.ts.map +0 -1
  661. package/dist/client/pages/config/workflows.js +0 -139
  662. package/dist/client/pages/config/workflows.js.map +0 -1
  663. package/dist/client/pages/issues/detail/start-dialog.d.ts +0 -20
  664. package/dist/client/pages/issues/detail/start-dialog.d.ts.map +0 -1
  665. package/dist/client/pages/issues/detail/start-dialog.js +0 -31
  666. package/dist/client/pages/issues/detail/start-dialog.js.map +0 -1
  667. package/dist/client/pages/projects/workflow-select.d.ts +0 -14
  668. package/dist/client/pages/projects/workflow-select.d.ts.map +0 -1
  669. package/dist/client/pages/projects/workflow-select.js +0 -34
  670. package/dist/client/pages/projects/workflow-select.js.map +0 -1
  671. package/dist/server/domains/approvals/approval.events.d.ts +0 -47
  672. package/dist/server/domains/approvals/approval.events.d.ts.map +0 -1
  673. package/dist/server/domains/approvals/approval.events.js +0 -2
  674. package/dist/server/domains/approvals/approval.events.js.map +0 -1
  675. package/dist/server/domains/approvals/approval.lifecycle.d.ts +0 -8
  676. package/dist/server/domains/approvals/approval.lifecycle.d.ts.map +0 -1
  677. package/dist/server/domains/approvals/approval.lifecycle.js +0 -54
  678. package/dist/server/domains/approvals/approval.lifecycle.js.map +0 -1
  679. package/dist/server/domains/approvals/approval.routes.d.ts +0 -10
  680. package/dist/server/domains/approvals/approval.routes.d.ts.map +0 -1
  681. package/dist/server/domains/approvals/approval.routes.js +0 -86
  682. package/dist/server/domains/approvals/approval.routes.js.map +0 -1
  683. package/dist/server/domains/approvals/approval.service.d.ts +0 -72
  684. package/dist/server/domains/approvals/approval.service.d.ts.map +0 -1
  685. package/dist/server/domains/approvals/approval.service.js +0 -261
  686. package/dist/server/domains/approvals/approval.service.js.map +0 -1
  687. package/dist/server/domains/approvals/approval.store.d.ts +0 -42
  688. package/dist/server/domains/approvals/approval.store.d.ts.map +0 -1
  689. package/dist/server/domains/approvals/approval.store.js +0 -66
  690. package/dist/server/domains/approvals/approval.store.js.map +0 -1
  691. package/dist/server/domains/approvals/index.d.ts +0 -4
  692. package/dist/server/domains/approvals/index.d.ts.map +0 -1
  693. package/dist/server/domains/approvals/index.js +0 -3
  694. package/dist/server/domains/approvals/index.js.map +0 -1
  695. package/dist/server/domains/checklists/checklist.routes.d.ts +0 -9
  696. package/dist/server/domains/checklists/checklist.routes.d.ts.map +0 -1
  697. package/dist/server/domains/checklists/checklist.routes.js +0 -62
  698. package/dist/server/domains/checklists/checklist.routes.js.map +0 -1
  699. package/dist/server/domains/checklists/checklist.service.d.ts +0 -26
  700. package/dist/server/domains/checklists/checklist.service.d.ts.map +0 -1
  701. package/dist/server/domains/checklists/checklist.service.js +0 -80
  702. package/dist/server/domains/checklists/checklist.service.js.map +0 -1
  703. package/dist/server/domains/checklists/checklist.store.d.ts +0 -32
  704. package/dist/server/domains/checklists/checklist.store.d.ts.map +0 -1
  705. package/dist/server/domains/checklists/checklist.store.js +0 -66
  706. package/dist/server/domains/checklists/checklist.store.js.map +0 -1
  707. package/dist/server/domains/checklists/index.d.ts +0 -4
  708. package/dist/server/domains/checklists/index.d.ts.map +0 -1
  709. package/dist/server/domains/checklists/index.js +0 -4
  710. package/dist/server/domains/checklists/index.js.map +0 -1
  711. package/dist/server/domains/workflows/built-in-rule-types.d.ts +0 -40
  712. package/dist/server/domains/workflows/built-in-rule-types.d.ts.map +0 -1
  713. package/dist/server/domains/workflows/built-in-rule-types.js +0 -260
  714. package/dist/server/domains/workflows/built-in-rule-types.js.map +0 -1
  715. package/dist/server/domains/workflows/event-types.d.ts +0 -21
  716. package/dist/server/domains/workflows/event-types.d.ts.map +0 -1
  717. package/dist/server/domains/workflows/event-types.js +0 -31
  718. package/dist/server/domains/workflows/event-types.js.map +0 -1
  719. package/dist/server/domains/workflows/index.d.ts +0 -10
  720. package/dist/server/domains/workflows/index.d.ts.map +0 -1
  721. package/dist/server/domains/workflows/index.js +0 -10
  722. package/dist/server/domains/workflows/index.js.map +0 -1
  723. package/dist/server/domains/workflows/rule-types.d.ts +0 -125
  724. package/dist/server/domains/workflows/rule-types.d.ts.map +0 -1
  725. package/dist/server/domains/workflows/rule-types.js +0 -33
  726. package/dist/server/domains/workflows/rule-types.js.map +0 -1
  727. package/dist/server/domains/workflows/templates.d.ts +0 -62
  728. package/dist/server/domains/workflows/templates.d.ts.map +0 -1
  729. package/dist/server/domains/workflows/templates.js +0 -63
  730. package/dist/server/domains/workflows/templates.js.map +0 -1
  731. package/dist/server/domains/workflows/workflow.diff.d.ts +0 -14
  732. package/dist/server/domains/workflows/workflow.diff.d.ts.map +0 -1
  733. package/dist/server/domains/workflows/workflow.diff.js +0 -80
  734. package/dist/server/domains/workflows/workflow.diff.js.map +0 -1
  735. package/dist/server/domains/workflows/workflow.events.d.ts +0 -26
  736. package/dist/server/domains/workflows/workflow.events.d.ts.map +0 -1
  737. package/dist/server/domains/workflows/workflow.events.js +0 -2
  738. package/dist/server/domains/workflows/workflow.events.js.map +0 -1
  739. package/dist/server/domains/workflows/workflow.fire.d.ts +0 -38
  740. package/dist/server/domains/workflows/workflow.fire.d.ts.map +0 -1
  741. package/dist/server/domains/workflows/workflow.fire.js +0 -57
  742. package/dist/server/domains/workflows/workflow.fire.js.map +0 -1
  743. package/dist/server/domains/workflows/workflow.registry.d.ts +0 -27
  744. package/dist/server/domains/workflows/workflow.registry.d.ts.map +0 -1
  745. package/dist/server/domains/workflows/workflow.registry.js +0 -130
  746. package/dist/server/domains/workflows/workflow.registry.js.map +0 -1
  747. package/dist/server/domains/workflows/workflow.routes.d.ts +0 -6
  748. package/dist/server/domains/workflows/workflow.routes.d.ts.map +0 -1
  749. package/dist/server/domains/workflows/workflow.routes.js +0 -148
  750. package/dist/server/domains/workflows/workflow.routes.js.map +0 -1
  751. package/dist/server/domains/workflows/workflow.rules.d.ts +0 -14
  752. package/dist/server/domains/workflows/workflow.rules.d.ts.map +0 -1
  753. package/dist/server/domains/workflows/workflow.rules.js +0 -190
  754. package/dist/server/domains/workflows/workflow.rules.js.map +0 -1
  755. package/dist/server/domains/workflows/workflow.service.d.ts +0 -71
  756. package/dist/server/domains/workflows/workflow.service.d.ts.map +0 -1
  757. package/dist/server/domains/workflows/workflow.service.js +0 -365
  758. package/dist/server/domains/workflows/workflow.service.js.map +0 -1
  759. package/dist/server/domains/workflows/workflow.store.d.ts +0 -33
  760. package/dist/server/domains/workflows/workflow.store.d.ts.map +0 -1
  761. package/dist/server/domains/workflows/workflow.store.js +0 -148
  762. package/dist/server/domains/workflows/workflow.store.js.map +0 -1
  763. package/dist/shared/approvals.d.ts +0 -37
  764. package/dist/shared/approvals.d.ts.map +0 -1
  765. package/dist/shared/approvals.js +0 -4
  766. package/dist/shared/approvals.js.map +0 -1
  767. package/dist/shared/checklists.d.ts +0 -27
  768. package/dist/shared/checklists.d.ts.map +0 -1
  769. package/dist/shared/checklists.js +0 -7
  770. package/dist/shared/checklists.js.map +0 -1
  771. package/dist/shared/workflows.d.ts +0 -267
  772. package/dist/shared/workflows.d.ts.map +0 -1
  773. package/dist/shared/workflows.js +0 -149
  774. package/dist/shared/workflows.js.map +0 -1
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @nocobase/app-plugin-projects
2
2
 
3
- Projects, issues, workflows, labels and members for a NocoBase application.
3
+ Projects, issues, fixed statuses, labels and members for a NocoBase application.
4
4
 
5
5
  ## What it provides
6
6
 
@@ -17,15 +17,18 @@ Projects, issues, workflows, labels and members for a NocoBase application.
17
17
  - **Labels**: a shared label list.
18
18
  - **Kinds**: who acts on issues or is named in them. `user` (people) and `system` (the plugin's own rules) are built
19
19
  in; another plugin registers more through `projectsKindsToken` (`server/kernel/kinds.ts`): a key, a title, how its
20
- ids are named, whether it may execute issues (and who may give it work), whether it may be mentioned, and which
21
- moves a workflow may let it make. Executors, activity, mentions, checklist checkers, approval requesters and
22
- workflow transitions name a kind by its key; the browser reads the list from `GET /api/projects/me` (`kinds`). A kind may
20
+ ids are named, whether it may execute issues (and who may give it work), whether it may be mentioned, the status
21
+ moves its principals may make (`moves`, with an optional `mayMove` check per principal and issue), and the executor
22
+ a new issue gets when it names none (`defaultExecutor`). Executors, activity, mentions and status moves name a kind
23
+ by its key; the browser reads the list from `GET /api/projects/me` (`kinds`). A kind may
23
24
  also do work (`work`, an `IssueWorkHandler`, `server/kernel/work.ts`): unless a plugin binds `projectsTriggersToken`,
24
25
  every change, comment and release is handed, in its transaction, to the work handler of each kind it concerns (the
25
26
  executor before and after, the kinds a comment mentions or answers), which answers what it started (`RunAttempt[]`;
26
- `collectRunAttempts` gathers them around a call). A handler asks `projects.subtasks.blockersOf` whether the issue
27
+ `collectRunAttempts` gathers them around a call). A handler that opts into `observesIssueChanges` also receives creations and updates with an empty or different executor kind, once per change. Service writes pass their already authorized viewer to the observer, so nested routing need not acquire a second connection for permission reads. Issue responses and update events use the final snapshot after these transactional handlers. Creation in `in_progress` or a transition into it starts work; there is no separate start option. A handler asks `projects.subtasks.blockersOf` whether the issue
27
28
  waits for unfinished issues and then starts nothing (`skipped: 'blocked'`); it starts nothing either for an issue in
28
- backlog (`BACKLOG_STATUS`, `skipped: 'dormant'`). When a new `blockedBy` holds the issue, every kind's
29
+ backlog (`BACKLOG_STATUS`, `skipped: 'dormant'`), or for a principal's comment past a limit the kind keeps
30
+ (`skipped: 'limited'`). A comment of anyone but the system reaches the handlers, with the person it
31
+ was written for (`CommentChange.userId`). When a new `blockedBy` holds the issue, every kind's
29
32
  `onBlocked` withdraws the work it had not taken up yet. These skips and withdrawals are recorded on the issue's
30
33
  activity as the principal's (`work_skipped`, `work_withdrawn`, with the issues it waits for). It may name the business actions a principal of the kind may be
31
34
  given at most (`actions`) and describe executors for a picker (`executor.describe`). `projects.issueContext`
@@ -34,58 +37,30 @@ Projects, issues, workflows, labels and members for a NocoBase application.
34
37
  `projects.issues.releaseExecutor(executor, { actor, name })`: every live, unfinished issue it executes is left with
35
38
  no executor, recorded as `executor_changed` with `reason: 'executorRemoved'` and the executor's name ("Executor X was
36
39
  removed" on the timeline), and handed to the triggers like any change of executor.
37
- - **Workflows**: the statuses of a project's issues and which kinds may move an issue between them. Every workflow
38
- keeps the nine built-in statuses (backlog, todo, analysis, proposal review, in progress, in review, blocked, done,
39
- cancelled); it may rename and recolour them, add its own and restrict the moves. A project picks one; a project without one, and an issue without a project, use the default workflow. The
40
- plugin ships no workflow: until one is the default, they use the built-in statuses, people move freely and the
41
- system closes merged work. Workflows are edited in the app (`/config/workflows`, "Workflow templates"). A
42
- status may carry rules run when an issue enters it: a checklist the issue must complete before moving on (except to
43
- a closed status), and a notification to the issue's owner. A move may need an approval by the issue's owner, the
44
- project lead or an admin: it waits as a request until one of them approves it (the issue moves) or rejects it.
45
- - **Contributed status rules and templates**: other plugins add status rule types through `projectsStatusRulesToken`
46
- (a key, settings validation, what entering the status does in the move's transaction, and a sentence for change
47
- summaries) and workflows that use them through `projectsWorkflowTemplatesToken` (installed once each; a template
48
- with `makeDefault` becomes the default when none is). The plugin installs templates in the background from its
49
- `boot()` and awaits `templates.installed()` in its `ready()`, so the application serves no request before the
50
- templates added while the plugins booted are workflows; code that needs them earlier awaits `installed()` itself. The
51
- plugin's own types (`checklist`, `notifyOwner`, `subtasksDone`, `blockersDone`, `startOption`) follow the same contract
52
- (`server/domains/workflows/built-in-rule-types.ts`) and are looked up in the same registry, in front of the
53
- contributed ones; `projects.statusRules.list()` lists both. In the browser, `StatusRuleTypesContext` (`client/kit`)
54
- gives each contributed type its title and hint, the categories it may sit on, its group in the editor's "Add rule"
55
- menu (`action`, the default, or `condition`), an icon, the settings a new rule starts with, a settings editor and a
56
- one-line summary; the plugin describes its own types the same way (`client/lib/built-in-rule-types.ts`), and the
57
- editor has no case of its own for any type. The rules dialog lists the rules a status has as cards, collapsed to
58
- their title and summary, and adds one from the menu ("When entering", "Entry conditions", "Automatic moves");
59
- `PmExpandableTextarea` (`client/kit`) is the compact text area for long settings such as an instruction. A rule
60
- whose plugin is gone stays in the definition: the editor shows it as unavailable and entering the status skips it.
61
- `POST /api/projects/workflows/{workflowId}/preview` lists what saving a definition would change in the rules, and which rules wake
62
- someone without anybody confirming it. A contributed type may also hold an entry condition (`canEnter`): every move
63
- into a status carrying it asks it first, whoever moves (a person, an agent, a plan, an applied approval, the system
64
- on an event), and a refusal is 400 with the type's own code. An exit condition (`canLeave`) is asked the same way
65
- before an issue leaves a status carrying the rule.
66
- - **Contributed workflow events and issue marks**: other plugins register workflow events through
67
- `projectsWorkflowEventsToken` (a dotted key such as `acme.merged`, and the status categories a transition on it may
68
- leave and enter) and fire one for a batch of issues with `projects.workflowEvents.fire({ event, issueIds, actor?,
69
- note?, details? }, tx?)`: each issue moves along its workflow's `on` transition, as the system, and the activity names
70
- `actor`. `projects.workflowEvents.target(event, issueId)` says where firing it would take one issue without moving it
71
- (for a confirmation that says what an action will do). The plugin never knows what an event means. A transition on an event whose plugin is gone stays in the
72
- definition and shows as unavailable. In the browser, `WorkflowEventsContext` (`client/kit`) titles the events for the
73
- editor and the timeline. The issues pages show the list and the board, the board by default.
74
- - **Ways to start an issue**: a status carrying a `startOption` rule (with an optional label and hint, text or i18n
75
- keys) is offered by the New issue form as a process to start in, such as "Design first" on Analysis or "Straight to
76
- development" on Todo; `GET /api/projects/issues/starts?projectId=` lists them, the workflow's initial status first, and
77
- nothing while no status carries the rule (the form then shows no choice). `POST /api/projects/issues` takes the choice as
78
- `statusKey`.
40
+ - **Statuses**: six, fixed for every project (`shared/statuses.ts`): `backlog` (nothing starts), `in_progress`,
41
+ `blocked` (waiting for a person), `in_review` (waiting to be accepted), `done` and `cancelled`. People move an issue
42
+ between any two of them; a principal of another kind only along its kind's `moves`, and only when its `mayMove`
43
+ agrees; the system only along a status event. Entering `blocked` or `in_review` tells the issue's owner, unless the
44
+ owner moved it (`owner_notified`). The moves go through `server/lifecycle` (below), compiled from the statuses, the
45
+ registered kinds' moves and the registered status events (`domains/statuses/`).
46
+ - **Status events**: other plugins register status events through `projectsStatusEventsToken` (a dotted key such as
47
+ `acme.merged`, the statuses it moves an issue out of, `from`, and the status it moves it to, `to`) and fire one for a
48
+ batch of issues with `projects.statusEvents.fire({ event, issueIds, actor?, note?, details? }, tx?)`: each issue in
49
+ one of `from` moves to `to`, as the system, and the activity names `actor`. `projects.statusEvents.target(event,
50
+ issueId)` says where firing it would take one issue without moving it (for a confirmation that says what an action
51
+ will do). The plugin never knows what an event means. In the browser, `StatusEventsContext` (`client/kit`) titles the
52
+ events for the timeline. The issues pages show the list and the board, the board by default.
53
+ - **Starting an issue**: a new issue starts in `backlog` or `in_progress` (`START_STATUSES`; `backlog` when the request
54
+ names none, `DEFAULT_START_STATUS`), and the New issue form asks "Start now" or "Later". Created in `in_progress`, or
55
+ moved there, an issue's work starts.
79
56
  - **Projects**: a lead, members, visibility (`workspace` or `members`), status, dates and linked resources.
80
- - **Issues**: an owner, an executor (nobody, a member, or a principal of another registered kind), a status from the
81
- project's workflow, priority, dates, a parent, labels and an activity history. Admins can soft-delete and restore.
57
+ - **Issues**: an owner, an executor (nobody, a member, or a principal of another registered kind), a status,
58
+ priority, dates, a parent, labels and an activity history. Admins can soft-delete and restore.
82
59
  - **Sub-issues and dependencies**: a sub-issue may have a stage (0–1000); a later stage waits until every earlier
83
60
  stage of its siblings is finished (done or closed). An issue may be blocked by others; a link that would make issues
84
61
  wait for each other in a cycle is refused. When an issue finishes, the issues waiting only on it are released (their
85
62
  executor, or with nobody working on them their owner, is told), and the parent's owner is told when a stage or all
86
- sub-issues are finished. A workflow may move the parent then: a transition with `on: 'subtasks.done'` and the
87
- `system` actor. A status may also refuse issues whose sub-issues are open (`subtasksDone`) or that are blocked
88
- (`blockersDone`). A project may have a setup issue (`Project.setupIssueId`, an issue created with
63
+ sub-issues are finished; the parent's own status does not move on its own. A project may have a setup issue (`Project.setupIssueId`, an issue created with
89
64
  `projectSetup: true` by someone who manages the project, one unfinished at a time): every issue created in the
90
65
  project after it, except its own sub-issues, is created blocked by it until it is finished. `IssueTriggers` (`onUnblocked`, `onBlocked`, `onSubtasksFinished`) let other plugins react, and
91
66
  `subtasks.visibleBlockers(viewer, issueIds)` tells another plugin's board what holds each issue now, in a fixed number
@@ -116,10 +91,10 @@ note?, details? }, tx?)`: each issue moves along its workflow's `on` transition,
116
91
  so an inbox can merge it.
117
92
  - **Batch reads for boards**: `issueQueries.matching(viewer, query, { executorType?, issueIds?, limit? })` answers, in
118
93
  a fixed number of reads, the viewer's issues within the list's filters that an executor of a kind works on (unless
119
- finished) or that are among the ids given (whatever their status), with `truncated` past the limit;
120
- `approvals.pendingOn(issueIds)` the pending approval requests on them, and `subscriptions.followedBy(conn, userId,
121
- issueIds)` those of them a person follows. An application's board of work joins its own records to issues with
94
+ finished) or that are among the ids given (whatever their status), with `truncated` past the limit, and
95
+ `subscriptions.followedBy(conn, userId, issueIds)` those of them a person follows. An application's board of work joins its own records to issues with
122
96
  them, without a query per issue.
97
+ - **Hierarchy reads**: `issueQueries.hierarchy(viewer, query)` returns the complete independently authorized live issue scope, filtered matching IDs and internal dependency-wait facts before paging. It is an uncapped input for application-owned grouping, never a substitute for authorization. `hierarchyItems(viewer, ids)` hydrates at most 100 independently reauthorized rows with visible child/dependency counts; callers must replace raw parent IDs at unreadable boundaries. Applications own attention policy, grouping and continuation consistency. No new task statuses or persistence are required.
123
98
  - **Operation plans** (`shared/plans.ts`, `server/domains/plans/`): a short list of changes (create or update an
124
99
  issue, comment, add or remove a dependency, create a project; 1–50 rows, later rows may refer to what earlier ones
125
100
  create) that one person, the decider, reviews and executes as a whole. Creating, editing and retrying a plan
@@ -134,7 +109,7 @@ issueIds)` those of them a person follows. An application's board of work joins
134
109
  made through a plan, or by an agent for a person (`Actor.via = 'agent'` with its trace), show on the timeline as
135
110
  "via ‹Agent›" or "via ‹Agent›'s plan" (`Activity.via`). Other plugins use `projects.plans` (`PlanService`) and hear
136
111
  decisions through `projectsPlanHooksToken` (`PlanHooks.onPlanDecided`). A plan is visible to its decider and, for a
137
- status rule's plan about an issue, to the issue's owner and editors.
112
+ status rule's plan about an issue (from earlier versions), to the issue's owner and editors.
138
113
  - **Intake with AI** (`shared/intake-ai.ts`, `server/domains/plans/intake/intake.ai.*`): as the old NocoProject, AI
139
114
  splits requirements into drafts ("AI split"), revises the drafts by one instruction ("Ask AI to revise", with the
140
115
  rows it added or changed highlighted and an undo), and breaks an issue down into sub-issue drafts ("AI breakdown" on
@@ -151,6 +126,10 @@ issueIds)` those of them a person follows. An application's board of work joins
151
126
 
152
127
  Everything is under `/api/projects` and needs a session (401 otherwise). Responses are `{ data }`, lists `{ data, meta }`; inputs are validated (400 `INVALID_INPUT`, domain `app`, with `fieldViolations`; JSON bodies are strict). Fixed segments come before `/{projectId}`.
153
128
 
129
+ Invitation create/resend results include a shareable `inviteUrl` for an authorized original inviter using an unscoped person credential, regardless of email delivery. An invitation closed or rotated before its queued send returns `emailSent=false` without a link; other recipients, including existing accounts joining projects, still complete. Global user creation or role assignment permissions are not needed to copy a project invitation. `POST /api/projects/invitations/{invitationId}/resend?sendEmail=false` generates a new link without email, invalidating the old invitation. Member settings confirm this before generating a link, then offer a separate Copy action. Current project access is checked again; other managers can resend email but do not receive links, and scoped credentials remain email-only. Lists never expose tokens.
130
+
131
+ New accounts register directly from the invitation link with a name and password; acceptance leaves `emailVerified=false`. Email delivery is optional: authorized original inviters can privately forward the link when the email channel is absent or fails. Links use `app.publicOrigin` when configured, otherwise the invitation request origin. Existing accounts must sign in with the invited email. Acceptance consumes only the supplied invitation and applies only its grants; handlers run in its transaction and roll back account creation on failure.
132
+
154
133
  | Method and path | What it does |
155
134
  | ---------------------------------------------------------------------------------- | ----------------------------------------------------------- |
156
135
  | `GET /me` | The caller with their permissions |
@@ -159,15 +138,12 @@ Everything is under `/api/projects` and needs a session (401 otherwise). Respons
159
138
  | `GET/POST /invitations`, `POST …/{invitationId}/resend`, `DELETE …/{invitationId}` | Member invitations |
160
139
  | `GET /settings`, `PATCH /settings` | Workspace settings |
161
140
  | `GET/POST /labels`, `PATCH/DELETE /labels/{labelId}` | Labels |
162
- | `GET/POST /workflows`, `GET/PATCH/DELETE /workflows/{workflowId}` | Workflows; a new one is a copy (`copyFrom`) |
163
- | `POST /workflows/{workflowId}/preview` | What saving a definition would change |
164
- | `POST /workflows/{workflowId}/setDefault` | Makes a workflow the default |
165
141
  | `GET/POST /` , `GET/PATCH/DELETE /{projectId}` | Projects |
166
142
  | `POST /{projectId}/members`, `DELETE …/members/{userId}` | Project members (201 the member added; 204) |
167
143
  | `POST /{projectId}/resources`, `PATCH/DELETE …/resources/{resourceId}` | Project resources |
168
144
  | `GET /issues?…&orderBy&pageSize&pageToken` | A page of issues, cursor-paginated |
169
145
  | `GET /issues/board` | The board: a column per status, each a first page |
170
- | `GET /issues/statuses`, `GET /issues/starts` | A workflow's statuses; the ways to start an issue |
146
+ | `GET /issues/statuses` | The fixed statuses |
171
147
  | `POST /issues`, `GET/PATCH/DELETE /issues/{issueId}` | Issues, by id or identifier (`PM-12`) |
172
148
  | `POST /issues/{issueId}/restore` | Restores a deleted issue |
173
149
  | `GET /issues/{issueId}/activities?pageSize&pageToken` | Older activities |
@@ -177,16 +153,13 @@ Everything is under `/api/projects` and needs a session (401 otherwise). Respons
177
153
  | `POST /comments/{commentId}/resolve`, `…/unresolve` | Resolves or reopens a thread (on its root) |
178
154
  | `POST /issues/{issueId}/subscribe`, `…/unsubscribe` | Follows or unfollows the issue |
179
155
  | `GET/POST /issues/{issueId}/attachments` | The issue's own files; uploads one onto it |
156
+ | `GET /issues/{issueId}/screenshots` | Latest 100 live Agent comment images and comment provenance |
180
157
  | `POST /attachments` | Uploads one file, attached to nothing yet |
181
158
  | `GET /attachments/{attachmentId}`, `…/content`, `DELETE` | A file, its bytes (`?download=true`), removing it |
182
- | `GET /issues/{issueId}/checklists` | Every checklist the issue has had |
183
- | `PATCH /issues/{issueId}/checklists/{statusKey}/items/{itemKey}` | Checks or unchecks an item (`{ checked }`) |
184
159
  | `POST /issues/{issueId}/dependencies` | Adds a link (`{ dependsOnIssueId, type }`) |
160
+ | `PATCH /issues/{issueId}/dependencies/{dependencyId}` | Changes a link type (`{ type, expectedType }`) atomically |
185
161
  | `DELETE /issues/{issueId}/dependencies/{dependencyId}` | Removes a link |
186
162
  | `POST /issues/{issueId}/removeDependency` | Removes the link to an issue (`{ dependsOnIssueId, type }`) |
187
- | `GET /approvals` | Status changes waiting for the caller's approval |
188
- | `POST /approvals/{approvalId}/approve`, `…/reject` | An approver decides (`{ comment? }`) |
189
- | `POST /approvals/{approvalId}/withdraw` | Whoever asked withdraws the request |
190
163
  | `POST /plans/rehearse` | Rehearses a plan and stores nothing |
191
164
  | `GET/POST /plans`, `GET/PATCH /plans/{planId}` | Operation plans: list, create, read, edit rows |
192
165
  | `POST /plans/{planId}/execute`, `…/retry`, `…/void` | Decides a plan (`{ revision }`) |
@@ -196,36 +169,31 @@ Everything is under `/api/projects` and needs a session (401 otherwise). Respons
196
169
  | `GET /intake/aiAvailability` | Whether AI can be asked |
197
170
  | `POST /intake/aiJobs`, `GET …/{jobId}`, `POST …/{jobId}/cancel` | A request to AI; cancelling it |
198
171
 
172
+ Relationship conversion preserves the link ID and checks the type the caller read (`expectedType`). A stale change returns 409 `DEPENDENCY_CHANGED`; if the target relationship already exists, it returns 409 `DEPENDENCY_EXISTS` and keeps both links. A related link may be converted from either end: the current issue becomes the waiting issue when changed to `blockedBy`.
173
+
174
+ Operations that add explicit or implicit waits (dependencies, conversions, issue creation, parent/stage changes and restores) share a dedicated database graph revision row. Its conditional increment protects cycle detection and writes until the outer transaction commits, across processes and projects. An outdated transaction snapshot returns 409 `DEPENDENCY_GRAPH_CHANGED`; reload and retry the whole operation. Every issue creation takes this protection before allocating its number, so plans that create issues and add dependencies use the same lock order. Standalone creates without dependencies lock the row without advancing the graph revision, so independent parallel creates still succeed without retrying each other. The revision is separate from settings/counters so MySQL reads of those rows after writing them cannot disguise an old graph snapshot. Restoring an issue is rejected if its waits would now create a cycle. Every relationship write, including both removal endpoints, acquires this protection before reading its type and endpoints, keeping duplicate checks, activity and release notifications consistent with conversions. Issue status and project changes, status events and deletion take the same guard before writing an issue, so concurrent changes cannot each see an old blocker and miss the last release. Automatic parent/stage completion keeps the originating guard; ordinary edits that cannot change waits do not acquire it. Plans acquire the guard without advancing its revision before their first row, including rehearsal and undo, so earlier issue edits cannot reverse the lock order of a later graph write.
175
+
199
176
  Cursor lists (issues, activities, comment threads, plans) take `pageSize` (20 by default, at most 100; plans 50) and `pageToken`, and answer `meta.nextPageToken` until the last page. `orderBy` on issues is `updatedAt`, `createdAt`, `number` or `priority`, optionally followed by `asc` or `desc` (`updatedAt desc` by default). The other lists are answered whole with `meta.total`. A scoped API key may not use `/intake` or `/plans` (403 `SCOPED_KEY_FORBIDDEN`).
200
177
 
201
- Errors are the standard error body with domain `projects`; clients branch on `reason`, and `metadata` carries the details. A missing resource the URL names is 404 `<RESOURCE>_NOT_FOUND` (such as `ISSUE_NOT_FOUND`); a project or issue named in the query that does not exist is 400 with a field violation. `PATCH /issues/{issueId}` and `PATCH /workflows/{workflowId}` need the `revision` the caller read; a stale one is 409 `ABORTED` `REVISION_CONFLICT`. An invalid workflow is 400 `INVALID_WORKFLOW` with every problem in `metadata.issues` (`{ path: 'states[3].key', message }`). A change that would leave an issue in a status its workflow no longer has (editing a workflow, switching a project's, choosing another default) is 400 `FAILED_PRECONDITION` `WORKFLOW_STATUS_CONFLICT` with the count per status and project in `metadata.conflicts`. `PATCH /issues/{issueId}` answers `{ data: { issue, pendingApproval } }`: 200 with `pendingApproval: null` once applied, or 202 with the request when the status change waits for approval, applying nothing else of the request; another request for the same issue is 400 `APPROVAL_PENDING`. A dependency that would close a cycle is 400 `DEPENDENCY_CYCLE` (`metadata.via`), one too deep to check 400 `DEPENDENCY_TOO_DEEP`, a duplicate 409 `ALREADY_EXISTS` `DEPENDENCY_EXISTS`; entering a status that waits for sub-issues or blockers is 400 `FAILED_PRECONDITION` `SUBTASKS_OPEN` or `ISSUE_BLOCKED`. A plan with a failing row is 400 `PLAN_INVALID` with every row's check in `metadata.rows`; deciding a plan that is not open is 400 `PLAN_NOT_OPEN`, an expired one 400 `PLAN_EXPIRED`; undoing after the window is 400 `UNDO_EXPIRED`, with nothing left to revert 400 `NOTHING_TO_UNDO`, and when something changed since the preview 409 `ABORTED` `UNDO_STALE`. Other refusals by state are 400 `FAILED_PRECONDITION` too.
178
+ Errors are the standard error body with domain `projects`; clients branch on `reason`, and `metadata` carries the details. A missing resource the URL names is 404 `<RESOURCE>_NOT_FOUND` (such as `ISSUE_NOT_FOUND`); a project or issue named in the query that does not exist is 400 with a field violation. `PATCH /issues/{issueId}` needs the `revision` the caller read; a stale one is 409 `ABORTED` `REVISION_CONFLICT`. It answers 200 `{ data: { issue } }`. A status that does not exist, or a new issue in any status but `backlog` and `in_progress`, is 400 `INVALID_STATUS`; a move the caller's kind may not make is 400 `TRANSITION_NOT_ALLOWED`. A dependency that would close a cycle is 400 `DEPENDENCY_CYCLE` (`metadata.via`), one too deep to check 400 `DEPENDENCY_TOO_DEEP`, a duplicate 409 `ALREADY_EXISTS` `DEPENDENCY_EXISTS`. A plan with a failing row is 400 `PLAN_INVALID` with every row's check in `metadata.rows`; deciding a plan that is not open is 400 `PLAN_NOT_OPEN`, an expired one 400 `PLAN_EXPIRED`; undoing after the window is 400 `UNDO_EXPIRED`, with nothing left to revert 400 `NOTHING_TO_UNDO`, and when something changed since the preview 409 `ABORTED` `UNDO_STALE`. Other refusals by state are 400 `FAILED_PRECONDITION` too.
202
179
 
203
- ## Workflows and the lifecycle module
180
+ ## Statuses and the lifecycle module
204
181
 
205
182
  `server/lifecycle/` is a self-contained state machine for records, with no import from the domains, so it can become
206
183
  a platform package: a definition as data (states with a category, transitions `from → to` naming who may take them,
207
- `*` for any state, and event transitions `on` an event the definition lists, which only `fire` takes), `validateDefinition` (paths for every problem, plus rules the application passes in), `compile`
208
- (the questions the application asks) and `move`, the one path through which a state changes. It runs in the
209
- caller's unit of work, in order: who may (the actor on the transition, and a registered "who may" rule over the record),
210
- the guards of the state left and the state entered, an approval when a transition needs one, the caller's write, and
211
- the entry actions, each in its own savepoint. Rules are registered by name (`createLifecycleRegistry`: state rules,
212
- "who may" rules, approvers); a definition names them with their settings, and validation checks both.
213
- `server/domains/workflows/` stores the definitions and adds this plugin's rules: `workflow.rules.ts` (the built-in
214
- statuses, each transition within what its kinds allow, people able to leave every status, one rule of a kind per
215
- status) and
216
- `workflow.registry.ts` (every status rule type, built in or contributed, as a lifecycle state rule, and the approvers
217
- `owner`, `projectLead`, `admin`). When several transitions match a move (`* → *` and `in_review → done`), the move
218
- takes them all, and needs an approval when any of them does; a move on an event never waits for one.
219
- `server/domains/approvals/` keeps the requests; a request has its own lifecycle in code (pending → approved, rejected,
220
- withdrawn or stale, each decision a transition with a "who may" rule). Approving moves the issue as the requester's
221
- move, checked again; when it no longer passes, the request goes stale. Notices (`server/providers/notifications.ts`:
222
- the owner told, approvers asked to decide, the requester told the outcome) go to `projectsNoticesToken` when the App
223
- binds it (`ProjectsNotices`: `send` each notice with its kind, type, issue and approval request; `resolve` a decision
224
- once its request is decided) — the assembling application keeps its inbox that way. A request another kind (an agent) made tells the
225
- issue's owner its outcome instead of the requester; an approved request that no longer applies (its conditions failed
226
- when it was approved) tells the approvers and whoever asked, except the approver (`approval_stale`). The issue page lists
227
- the last five decided requests (`IssueDetail.recentApprovals`). Without it they go straight to the notification
228
- plugin's in-app channel `projects.inboxChannel` names (`inbox` by default) when that channel is configured.
184
+ `*` for any state, and event transitions `on` an event, which only `fire` takes), `validateDefinition`, `compile` (the
185
+ questions the application asks) and `move`, the one path through which a state changes. It runs in the caller's unit
186
+ of work, in order: who may (the actor on the transition, and a registered "who may" rule over the record), the guards
187
+ of the state left and the state entered, the caller's write, and the entry actions, each in its own savepoint. Rules
188
+ are registered by name (`createLifecycleRegistry`).
189
+
190
+ `server/domains/statuses/` compiles the fixed statuses into such a definition: people `* → *`, each registered kind's
191
+ `moves` (behind a "who may" rule asking the kind's `mayMove`), and each status event's transitions for the system; the
192
+ definition is compiled again whenever the kinds or events change. The entry action `notifyOwner` on `blocked` and
193
+ `in_review` records `owner_notified` and announces it. Notices (`server/providers/notifications.ts`) go to
194
+ `projectsNoticesToken` when the App binds it (`ProjectsNotices`: `send` each notice with its kind, type and issue) —
195
+ the assembling application keeps its inbox that way. Without it they go straight to the notification plugin's in-app
196
+ channel `projects.inboxChannel` names (`inbox` by default) when that channel is configured.
229
197
 
230
198
  ## Permissions
231
199
 
@@ -237,7 +205,7 @@ What can be granted (`shared/access.ts`); the application stores and assigns the
237
205
  | Business actions | `pm.issues` | `view`, `create`, `edit`, `comment`, `moderate-comments`, |
238
206
  | | | `close`, `change-owner`, `delete` |
239
207
  | Business actions | `pm.attachments` | `upload` |
240
- | Settings items | `pm.general`, `pm.labels`, `pm.workflows` | `read`, `update` |
208
+ | Settings items | `pm.general`, `pm.labels` | `read`, `update` |
241
209
  | Settings items | `pm.members` | `read`, `invite`, `assign`, `define-roles` |
242
210
  | Pages | `pm-my-issues`, `pm-issues`, `pm-projects` | `access` |
243
211
 
@@ -257,43 +225,38 @@ The plugin seeds no roles: the application that assembles it seeds its own (the
257
225
 
258
226
  | Path | What it shows |
259
227
  | ------------------------------------- | ----------------------------------------------------------- |
260
- | `/my-issues/owned`, `executing` | The viewer's issues, as owner or executor |
228
+ | `/my-issues` | The viewer's owned or executed issues, each once |
261
229
  | `/issues` (`?view=board` or `list`) | Every visible issue; filters, search and order in the URL |
262
230
  | `/issues/new` (`?tab=ai` or `manual`) | The New issue dialog: AI draft (intake) or one issue |
263
231
  | `/issues/new?tab=ai&job=:id` | The AI draft tab following a request to AI |
264
232
  | `/issues/:id`, `/issues/plans/:id` | One issue, by id or identifier; one plan, by its id |
265
233
  | `/projects`, `/projects/new` | Projects; a new one (a project's page is the application's) |
266
234
 
267
- As the old NocoProject had it, My issues has "I own" and "I execute" only, and the New issue dialog opens on its "AI
268
- draft" tab (the last tab used is remembered in the browser): requirements typed or uploaded are split into a draft of
269
- issues, edited row by row and created together, after which the dialog closes. Its manual tab offers the workflow's ways
270
- to start an issue as its process. A change that would start an executor of another kind working asks "Start now?"
271
- first, as the old NocoProject asked: giving an agent the issue (on creation, a sub-issue, or in the properties) or
272
- moving an issue it executes out of backlog (a status change or a board drag). Nothing starts in backlog or a finished
273
- status, so a change landing there asks nothing. Approvals are decided on the issue
274
- page and wherever the application sends their notices (for example, its inbox).
235
+ My tasks combines owned and executed issues, and the New issue dialog opens on its "AI draft" tab (the last tab used is remembered in the browser): requirements typed or uploaded are split into a draft of issues, edited row by row and created together, after which the dialog closes. Its manual tab asks when the issue starts: "Start now" (`in_progress`) or "Later" (`backlog`), and preselects the default executor. Nothing asks "Start now?" any more: moving an issue to `in_progress` starts its work.
236
+
237
+ Applications that create tasks through conversation can render the retained create and subtask pages under `IssueCreationModeContext.Provider` (from `client/kit`) with `value='manual'`. This shows only the original guarded form, ignoring old AI tab parameters and preferences, without changing the default plugin pages.
275
238
 
276
239
  The settings pages are exported for the application to route under its own `/config` (`client/config.ts`: the issue
277
- prefix, labels, workflows and one workflow), and components it reuses on its member pages are exported from
240
+ prefix and labels), and components it reuses on its member pages are exported from
278
241
  `client/kit.ts`. The application routes an issue's page itself and presents it (for example, with the UI Library's
279
242
  `issue-detail`, `comment-thread` and `attachment-list`) over the headless parts in `client/issues.ts`: the issue
280
- (`useIssueDetail`), its property changes (`useIssueUpdate`, and `useConfirmedUpdate` for "Start now?"), every other
243
+ (`useIssueDetail`), its property changes (`useIssueUpdate`; `useConfirmedUpdate` applies a change at once), every other
281
244
  change of the page (`useIssuePageActions`), the activity line (`useIssueTimeline`, `useIssueCommentActions`,
282
245
  `useMentionSearch`, `useAttachmentUploads`), "Break into sub-issues" (`useIntakeBreakdown`), and the permission and
283
246
  wording helpers. It routes a project's page the same way, as a child of the plugin's `/projects` (`projectsRoute` from
284
- `client/pages`), over the headless parts in `client/projects.ts`: the project with its statuses and workflow
285
- (`useProjectDetail`, `useProjectStatuses`, `useProjectWorkflow`), its property changes (`useProjectUpdate`), members and
247
+ `client/pages`), over the headless parts in `client/projects.ts`: the project with the statuses
248
+ (`useProjectDetail`, `useProjectStatuses`), its property changes (`useProjectUpdate`), members and
286
249
  visibility (`useProjectMembership`), working directories (`useProjectResources`, `useResourceValidation`), deleting it
287
250
  (`useDeleteProject`), and the progress, numbers and permission helpers. The pages are behind the `pm-my-issues`, `pm-issues` and `pm-projects` page grants. They hide
288
251
  what the server would refuse (`client/lib/permissions.ts` mirrors its rules); the server still checks every request.
289
- Open pages refresh when the server announces a change on the `pm:changes` realtime topic.
252
+ Open pages refresh when the server announces a change on the `pm:changes` realtime topic: once for the events of a moment, naming the issues that changed when no change moved an issue between lists (`issueIds`), so a page refreshes only what it shows of them (`announcedIssueIds`, `changedIssueSegments` and `isIssueRead` in `client/kit`).
290
253
 
291
254
  ## Layout
292
255
 
293
256
  - `shared/`: types and constants the server and the client share.
294
257
  - `server/kernel/`: infrastructure with no business rules (errors, events, transactions, pagination, validation).
295
258
  - `server/access/`: how a request becomes a `Viewer` with resolved permissions.
296
- - `server/lifecycle/`: the record state machine behind workflows (see above).
259
+ - `server/lifecycle/`: the record state machine behind the statuses (see above).
297
260
  - `server/domains/<name>/`: one folder per domain: `*.store.ts` (tables), `*.access.ts` (who sees what),
298
261
  `*.service.ts` (writes), `*.routes.ts` (HTTP), `index.ts` (the domain's public surface).
299
262
  - `server/composition.ts`: wires the domains; `server/providers/` registers them with the app.
@@ -308,3 +271,17 @@ Open pages refresh when the server announces a change on the `pm:changes` realti
308
271
  ```bash
309
272
  pnpm --filter @nocobase/app-plugin-projects check
310
273
  ```
274
+
275
+ When renewing an invitation, deleted projects are ignored if at least one selected project remains. The inviter must still be authorized to invite into every remaining project. If all originally selected projects were deleted, renewal is rejected.
276
+
277
+ Invitation emails use `notificationService.sendTransient()` so credentials never enter notification message snapshots or job storage. This performs one bounded attempt without durable retries or deduplication. Failures retain safe status/category diagnostics without raw provider messages. The inviter can generate and privately deliver a new link if delivery fails. Historical notification snapshots are not rewritten.
278
+
279
+ ## Structured issue progress
280
+
281
+ `Issue` exposes nullable text `needsYou` and `next`. `PATCH /api/projects/issues/{issueId}` and `issue.update` plan rows accept them in the same transaction as `statusKey`. Both fields are optional for people, agents, plans and system events. Omitted needsYou is retained in Blocked or In review; null, empty or whitespace clears it. Applications may constrain authenticated callers at their request boundary. Leaving these states clears it. Omitted `next` is retained; nonblank text replaces it; null, an empty string or whitespace clears it. Done and Cancelled always clear it. Both fields allow at most 2,000 characters. Progress-only writes advance revision and emit the existing refresh event. System status events share the optional-field validation and clearing rules. The new reversible migration adds the two columns without backfilling comments.
282
+
283
+ `Issue` also exposes nullable Markdown `acceptance`: the issue's delivery report — how it was, the agreed approach, what changed, how it was checked, open issues and details — ending with the acceptance criteria the owner checks and where. `PATCH /api/projects/issues/{issueId}` accepts it in any status, normally with the move to In review (`nb-studio issue update <issue> --status in_review --acceptance-file report.md`). It is kept across status changes, including Done, Cancelled and a move back to In progress, and the next delivery replaces it; omitted it is retained, and null, an empty string or whitespace clears it. It allows at most 20,000 characters (`ISSUE_ACCEPTANCE_MAX`). Its reversible migration adds the column without backfilling.
284
+
285
+ Manual issue descriptions accept pasted images through the existing protected attachment upload. Creation accepts optional `attachmentIds` of the caller's own unattached uploads and requires `pm.attachments` `upload` in addition to issue creation permission. Files are bound in the creation transaction before work starts, so the first agent context includes them. Descriptions remain Markdown; image nodes survive detail edits. Uploading blocks submission; cancelling leaves unattached files to the existing purge.
286
+
287
+ Applications can provide `ExecutorPresentationContext` from the client kit to render the identity and availability of their registered executor kind in new issue and subtask selectors. It changes presentation only; the server still supplies candidates and enforces qualifications.
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Which cached issue reads an announcement (`PmChangeEvent.issueIds`) concerns: an issue's reads are keyed by
3
+ * `pmKeys.issue(idOrKey)` and what sits under it, with the id or, on a page opened by its key, the identifier.
4
+ */
5
+ import type { QueryClient, QueryKey } from '@tanstack/react-query';
6
+ /** The issue ids an announcement names, or null when any issue may have changed. */
7
+ export declare function announcedIssueIds(payload: unknown): ReadonlySet<string> | null;
8
+ /** The key segments (`pmKeys.issue(segment)`) whose reads are of one of `issueIds`: the ids, and the keys loaded for them. */
9
+ export declare function changedIssueSegments(client: Pick<QueryClient, 'getQueryCache'>, issueIds: ReadonlySet<string>): Set<string>;
10
+ /** Whether a query key is one issue's read (`['pm', 'issue', segment, ...]`) of a segment among `segments`. */
11
+ export declare function isIssueRead(key: QueryKey, segments: ReadonlySet<string>): boolean;
12
+ //# sourceMappingURL=changed-issues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changed-issues.d.ts","sourceRoot":"","sources":["../../../client/api/changed-issues.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAInE,oFAAoF;AACpF,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,GACf,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAK5B;AAED,8HAA8H;AAC9H,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,EAC1C,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,GAC5B,GAAG,CAAC,MAAM,CAAC,CAeb;AAED,+GAA+G;AAC/G,wBAAgB,WAAW,CACzB,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,GAC5B,OAAO,CAOT"}
@@ -0,0 +1,30 @@
1
+ /** The issue ids an announcement names, or null when any issue may have changed. */
2
+ export function announcedIssueIds(payload) {
3
+ const ids = payload?.issueIds;
4
+ return Array.isArray(ids) && ids.every((id) => typeof id === 'string')
5
+ ? new Set(ids)
6
+ : null;
7
+ }
8
+ /** The key segments (`pmKeys.issue(segment)`) whose reads are of one of `issueIds`: the ids, and the keys loaded for them. */
9
+ export function changedIssueSegments(client, issueIds) {
10
+ const segments = new Set(issueIds);
11
+ for (const query of client
12
+ .getQueryCache()
13
+ .findAll({ queryKey: ['pm', 'issue'] })) {
14
+ const segment = query.queryKey[2];
15
+ const id = query.state.data?.id;
16
+ if (typeof segment === 'string' &&
17
+ typeof id === 'string' &&
18
+ issueIds.has(id))
19
+ segments.add(segment);
20
+ }
21
+ return segments;
22
+ }
23
+ /** Whether a query key is one issue's read (`['pm', 'issue', segment, ...]`) of a segment among `segments`. */
24
+ export function isIssueRead(key, segments) {
25
+ return (key[0] === 'pm' &&
26
+ key[1] === 'issue' &&
27
+ typeof key[2] === 'string' &&
28
+ segments.has(key[2]));
29
+ }
30
+ //# sourceMappingURL=changed-issues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changed-issues.js","sourceRoot":"","sources":["../../../client/api/changed-issues.ts"],"names":[],"mappings":"AAQA,oFAAoF;AACpF,MAAM,UAAU,iBAAiB,CAC/B,OAAgB;IAEhB,MAAM,GAAG,GAAI,OAAyC,EAAE,QAAQ,CAAC;IACjE,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC;QACpE,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC;QACd,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,8HAA8H;AAC9H,MAAM,UAAU,oBAAoB,CAClC,MAA0C,EAC1C,QAA6B;IAE7B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,MAAM;SACvB,aAAa,EAAE;SACf,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,EAAE,GAAI,KAAK,CAAC,KAAK,CAAC,IAAqC,EAAE,EAAE,CAAC;QAClE,IACE,OAAO,OAAO,KAAK,QAAQ;YAC3B,OAAO,EAAE,KAAK,QAAQ;YACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAEhB,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,+GAA+G;AAC/G,MAAM,UAAU,WAAW,CACzB,GAAa,EACb,QAA6B;IAE7B,OAAO,CACL,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI;QACf,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO;QAClB,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ;QAC1B,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACrB,CAAC;AACJ,CAAC"}
@@ -5,21 +5,18 @@
5
5
  */
6
6
  import type { ApiClient } from '@nocobase/app-client';
7
7
  import type { Page } from '../../shared/common.js';
8
- import type { ApprovalRequest } from '../../shared/approvals.js';
9
8
  import type { Attachment } from '../../shared/attachments.js';
10
- import type { IssueChecklist, UpdateChecklistItemRequest } from '../../shared/checklists.js';
11
9
  import { type CommentReaction, type CreateCommentRequest, type CreateCommentResult, type IssueComment, type MentionCandidate, type ThreadPage, type ThreadResolution } from '../../shared/comments.js';
12
10
  import type { CreateInvitationsRequest, Invitation, InvitationResult } from '../../shared/invitations.js';
13
- import { type ActivityPage, type CreateIssueRequest, type Issue, type IssueBoard, type IssueStarts, type IssueDetail, type IssueListItem, type IssueListQuery, type StatusDefinition, type UpdateIssueRequest, type UpdateIssueResult } from '../../shared/issues.js';
11
+ import { type ActivityPage, type CreateIssueRequest, type Issue, type IssueBoard, type IssueDetail, type IssueListItem, type IssueListQuery, type StatusDefinition, type UpdateIssueRequest, type UpdateIssueResult } from '../../shared/issues.js';
14
12
  import type { CreateLabelRequest, Label, UpdateLabelRequest } from '../../shared/labels.js';
15
13
  import type { ExecutorCandidate } from '../../shared/kinds.js';
16
14
  import type { ApiKeyActor, Me, Member } from '../../shared/members.js';
17
15
  import type { CreateProjectRequest, CreateProjectResourceRequest, ProjectDetail, ProjectListItem, ProjectResource, UpdateProjectRequest, UpdateProjectResourceRequest } from '../../shared/projects.js';
18
16
  import type { UpdateSettingsRequest, WorkspaceSettings } from '../../shared/settings.js';
19
- import type { AddDependencyRequest, IssueDependency } from '../../shared/subtasks.js';
17
+ import type { AddDependencyRequest, IssueDependency, UpdateDependencyRequest } from '../../shared/subtasks.js';
20
18
  import type { UserRef } from '../../shared/common.js';
21
19
  import type { SubscriptionState } from '../../shared/subscriptions.js';
22
- import type { CreateWorkflowRequest, UpdateWorkflowRequest, WorkflowDefinition, WorkflowListItem, WorkflowPreview } from '../../shared/workflows.js';
23
20
  export declare class PmApi {
24
21
  private readonly api;
25
22
  constructor(api: ApiClient);
@@ -31,7 +28,7 @@ export declare class PmApi {
31
28
  executors(): Promise<ExecutorCandidate[]>;
32
29
  invitations(): Promise<Invitation[]>;
33
30
  invite(input: CreateInvitationsRequest): Promise<readonly InvitationResult[]>;
34
- resendInvitation(invitationId: string): Promise<InvitationResult>;
31
+ resendInvitation(invitationId: string, sendEmail?: boolean): Promise<InvitationResult>;
35
32
  revokeInvitation(invitationId: string): Promise<void>;
36
33
  settings(): Promise<WorkspaceSettings>;
37
34
  updateSettings(input: UpdateSettingsRequest): Promise<WorkspaceSettings>;
@@ -39,14 +36,6 @@ export declare class PmApi {
39
36
  createLabel(input: CreateLabelRequest): Promise<Label>;
40
37
  updateLabel(labelId: string, input: UpdateLabelRequest): Promise<Label>;
41
38
  deleteLabel(labelId: string): Promise<void>;
42
- workflows(): Promise<WorkflowListItem[]>;
43
- workflow(workflowId: string): Promise<WorkflowListItem>;
44
- createWorkflow(input: CreateWorkflowRequest): Promise<WorkflowListItem>;
45
- updateWorkflow(workflowId: string, input: UpdateWorkflowRequest): Promise<WorkflowListItem>;
46
- /** What saving `definition` would change in the workflow's rules; nothing is written. */
47
- previewWorkflow(workflowId: string, definition: WorkflowDefinition): Promise<WorkflowPreview>;
48
- setDefaultWorkflow(workflowId: string): Promise<WorkflowListItem>;
49
- deleteWorkflow(workflowId: string): Promise<void>;
50
39
  projects(): Promise<ProjectListItem[]>;
51
40
  project(projectId: string): Promise<ProjectDetail>;
52
41
  createProject(input: CreateProjectRequest): Promise<ProjectDetail>;
@@ -58,10 +47,8 @@ export declare class PmApi {
58
47
  addProjectResource(projectId: string, input: CreateProjectResourceRequest): Promise<ProjectResource>;
59
48
  updateProjectResource(projectId: string, resourceId: string, input: UpdateProjectResourceRequest): Promise<ProjectResource>;
60
49
  deleteProjectResource(projectId: string, resourceId: string): Promise<void>;
61
- /** The statuses of a project's workflow; without a project, those of issues without one. */
62
- statuses(projectId?: string | null): Promise<StatusDefinition[]>;
63
- /** The ways a new issue may start in a project's workflow; without a project, in that of issues without one. */
64
- starts(projectId?: string | null): Promise<IssueStarts>;
50
+ /** The fixed statuses, in order. */
51
+ statuses(): Promise<StatusDefinition[]>;
65
52
  issuePage(query: IssueListQuery): Promise<Page<IssueListItem>>;
66
53
  /** A column per status, each with its first `ISSUE_PAGE_LIMIT.default` issues. */
67
54
  board(query: IssueListQuery): Promise<IssueBoard>;
@@ -69,21 +56,17 @@ export declare class PmApi {
69
56
  issue(idOrKey: string): Promise<IssueDetail>;
70
57
  activities(issueId: string, cursor?: string): Promise<ActivityPage>;
71
58
  createIssue(input: CreateIssueRequest): Promise<Issue>;
72
- /** The issue after the change; with `pendingApproval`, unchanged because the status change waits for approval. */
59
+ /** The issue after the change. */
73
60
  updateIssue(issueId: string, input: UpdateIssueRequest): Promise<UpdateIssueResult>;
74
61
  deleteIssue(issueId: string): Promise<void>;
75
62
  restoreIssue(issueId: string): Promise<Issue>;
76
- /** The status changes waiting for the caller's approval. */
77
- approvals(): Promise<ApprovalRequest[]>;
78
- decideApproval(requestId: string, decision: 'approve' | 'reject', comment?: string): Promise<ApprovalRequest>;
79
- withdrawApproval(requestId: string): Promise<ApprovalRequest>;
80
63
  /** Makes the issue wait for (`blockedBy`, the default) or link to (`relatedTo`) another; answers the link. */
81
64
  addDependency(issueId: string, input: AddDependencyRequest): Promise<IssueDependency>;
65
+ /** Converts a relationship atomically, keeping its id and checking the type the caller read. */
66
+ updateDependency(issueId: string, dependencyId: string, input: UpdateDependencyRequest): Promise<IssueDependency>;
82
67
  /** Removes the link to `dependsOnIssueId` of `type` (`blockedBy` when left out). */
83
68
  removeDependencyTo(issueId: string, input: AddDependencyRequest): Promise<void>;
84
69
  removeDependency(issueId: string, dependencyId: string): Promise<void>;
85
- /** Checks or unchecks one item of the issue's checklist of `statusKey`; answers that checklist. */
86
- setChecklistItem(issueId: string, statusKey: string, itemKey: string, input: UpdateChecklistItemRequest): Promise<IssueChecklist>;
87
70
  /** Threads older than `cursor` (the detail brings the newest page and its cursor). */
88
71
  threads(issueId: string, cursor?: string): Promise<ThreadPage>;
89
72
  createComment(issueId: string, input: CreateCommentRequest): Promise<CreateCommentResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../client/api/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../client/api/client.ts"],"names":[],"mappings":"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"}