@nocobase/app-plugin-projects 0.1.0-beta.1 → 0.1.0-beta.10

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 (655) hide show
  1. package/CHANGELOG.md +266 -0
  2. package/README.md +77 -105
  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/keys.d.ts +2 -8
  12. package/dist/client/api/keys.d.ts.map +1 -1
  13. package/dist/client/api/keys.js +2 -17
  14. package/dist/client/api/keys.js.map +1 -1
  15. package/dist/client/components/attachment-list.d.ts +77 -0
  16. package/dist/client/components/attachment-list.d.ts.map +1 -0
  17. package/dist/client/components/attachment-list.js +147 -0
  18. package/dist/client/components/attachment-list.js.map +1 -0
  19. package/dist/client/components/pm-badges.d.ts +1 -1
  20. package/dist/client/components/pm-badges.d.ts.map +1 -1
  21. package/dist/client/components/pm-description-image.d.ts +4 -0
  22. package/dist/client/components/pm-description-image.d.ts.map +1 -0
  23. package/dist/client/components/pm-description-image.js +61 -0
  24. package/dist/client/components/pm-description-image.js.map +1 -0
  25. package/dist/client/components/pm-executor-select.d.ts +2 -0
  26. package/dist/client/components/pm-executor-select.d.ts.map +1 -1
  27. package/dist/client/components/pm-executor-select.js.map +1 -1
  28. package/dist/client/components/pm-rich-text-editor.d.ts +4 -1
  29. package/dist/client/components/pm-rich-text-editor.d.ts.map +1 -1
  30. package/dist/client/components/pm-rich-text-editor.js +44 -4
  31. package/dist/client/components/pm-rich-text-editor.js.map +1 -1
  32. package/dist/client/components/pm-rich-text-extensions.d.ts +1 -0
  33. package/dist/client/components/pm-rich-text-extensions.d.ts.map +1 -1
  34. package/dist/client/components/pm-rich-text-extensions.js +2 -0
  35. package/dist/client/components/pm-rich-text-extensions.js.map +1 -1
  36. package/dist/client/components/ui/radio-group.d.ts +7 -0
  37. package/dist/client/components/ui/radio-group.d.ts.map +1 -0
  38. package/dist/client/components/ui/radio-group.js +12 -0
  39. package/dist/client/components/ui/radio-group.js.map +1 -0
  40. package/dist/client/config.d.ts +0 -2
  41. package/dist/client/config.d.ts.map +1 -1
  42. package/dist/client/config.js +1 -5
  43. package/dist/client/config.js.map +1 -1
  44. package/dist/client/hooks/use-attachment-uploads.d.ts +2 -2
  45. package/dist/client/hooks/use-attachment-uploads.d.ts.map +1 -1
  46. package/dist/client/hooks/use-attachment-uploads.js +28 -13
  47. package/dist/client/hooks/use-attachment-uploads.js.map +1 -1
  48. package/dist/client/issues.d.ts +3 -5
  49. package/dist/client/issues.d.ts.map +1 -1
  50. package/dist/client/issues.js +3 -4
  51. package/dist/client/issues.js.map +1 -1
  52. package/dist/client/kit/intake-draft.d.ts +21 -0
  53. package/dist/client/kit/intake-draft.d.ts.map +1 -0
  54. package/dist/client/kit/intake-draft.js +20 -0
  55. package/dist/client/kit/intake-draft.js.map +1 -0
  56. package/dist/client/kit/plans/lookup.d.ts +2 -2
  57. package/dist/client/kit/plans/lookup.js +3 -3
  58. package/dist/client/kit/plans/lookup.js.map +1 -1
  59. package/dist/client/kit/plans/plan-confirm.d.ts.map +1 -1
  60. package/dist/client/kit/plans/plan-confirm.js +2 -2
  61. package/dist/client/kit/plans/plan-confirm.js.map +1 -1
  62. package/dist/client/kit/plans/plan-row.js +2 -2
  63. package/dist/client/kit/plans/plan-row.js.map +1 -1
  64. package/dist/client/kit.d.ts +7 -9
  65. package/dist/client/kit.d.ts.map +1 -1
  66. package/dist/client/kit.js +7 -9
  67. package/dist/client/kit.js.map +1 -1
  68. package/dist/client/lib/intake-wait.d.ts +16 -0
  69. package/dist/client/lib/intake-wait.d.ts.map +1 -0
  70. package/dist/client/lib/intake-wait.js +12 -0
  71. package/dist/client/lib/intake-wait.js.map +1 -0
  72. package/dist/client/lib/kinds.d.ts +3 -29
  73. package/dist/client/lib/kinds.d.ts.map +1 -1
  74. package/dist/client/lib/kinds.js +7 -46
  75. package/dist/client/lib/kinds.js.map +1 -1
  76. package/dist/client/lib/status-events.d.ts +21 -0
  77. package/dist/client/lib/status-events.d.ts.map +1 -0
  78. package/dist/client/lib/status-events.js +31 -0
  79. package/dist/client/lib/status-events.js.map +1 -0
  80. package/dist/client/lib/status.d.ts +5 -7
  81. package/dist/client/lib/status.d.ts.map +1 -1
  82. package/dist/client/lib/status.js +5 -7
  83. package/dist/client/lib/status.js.map +1 -1
  84. package/dist/client/locales/en-US.d.ts +17 -252
  85. package/dist/client/locales/en-US.d.ts.map +1 -1
  86. package/dist/client/locales/en-US.js +21 -252
  87. package/dist/client/locales/en-US.js.map +1 -1
  88. package/dist/client/locales/plans.en-US.d.ts +1 -8
  89. package/dist/client/locales/plans.en-US.d.ts.map +1 -1
  90. package/dist/client/locales/plans.en-US.js +2 -9
  91. package/dist/client/locales/plans.en-US.js.map +1 -1
  92. package/dist/client/locales/plans.zh-CN.d.ts.map +1 -1
  93. package/dist/client/locales/plans.zh-CN.js +2 -9
  94. package/dist/client/locales/plans.zh-CN.js.map +1 -1
  95. package/dist/client/locales/zh-CN.d.ts.map +1 -1
  96. package/dist/client/locales/zh-CN.js +22 -245
  97. package/dist/client/locales/zh-CN.js.map +1 -1
  98. package/dist/client/pages/config/members/invitations-section.d.ts.map +1 -1
  99. package/dist/client/pages/config/members/invitations-section.js +34 -12
  100. package/dist/client/pages/config/members/invitations-section.js.map +1 -1
  101. package/dist/client/pages/config/members/invite-dialog.d.ts +5 -4
  102. package/dist/client/pages/config/members/invite-dialog.d.ts.map +1 -1
  103. package/dist/client/pages/config/members/invite-dialog.js +7 -7
  104. package/dist/client/pages/config/members/invite-dialog.js.map +1 -1
  105. package/dist/client/pages/intake/intake-ai-progress.d.ts.map +1 -1
  106. package/dist/client/pages/intake/intake-ai-progress.js +10 -13
  107. package/dist/client/pages/intake/intake-ai-progress.js.map +1 -1
  108. package/dist/client/pages/intake/intake-files.d.ts.map +1 -1
  109. package/dist/client/pages/intake/intake-files.js +38 -2
  110. package/dist/client/pages/intake/intake-files.js.map +1 -1
  111. package/dist/client/pages/intake/intake-panel.d.ts.map +1 -1
  112. package/dist/client/pages/intake/intake-panel.js +15 -5
  113. package/dist/client/pages/intake/intake-panel.js.map +1 -1
  114. package/dist/client/pages/intake/use-intake-uploads.d.ts.map +1 -1
  115. package/dist/client/pages/intake/use-intake-uploads.js +9 -3
  116. package/dist/client/pages/intake/use-intake-uploads.js.map +1 -1
  117. package/dist/client/pages/issues/board/board-model.d.ts +1 -1
  118. package/dist/client/pages/issues/board/board-model.js +1 -1
  119. package/dist/client/pages/issues/board/use-board-move.d.ts +2 -8
  120. package/dist/client/pages/issues/board/use-board-move.d.ts.map +1 -1
  121. package/dist/client/pages/issues/board/use-board-move.js +5 -42
  122. package/dist/client/pages/issues/board/use-board-move.js.map +1 -1
  123. package/dist/client/pages/issues/detail/new-subtask.d.ts.map +1 -1
  124. package/dist/client/pages/issues/detail/new-subtask.js +6 -28
  125. package/dist/client/pages/issues/detail/new-subtask.js.map +1 -1
  126. package/dist/client/pages/issues/detail/subtask-model.d.ts +1 -1
  127. package/dist/client/pages/issues/detail/subtask-model.js +1 -1
  128. package/dist/client/pages/issues/detail/use-confirmed-update.d.ts +6 -8
  129. package/dist/client/pages/issues/detail/use-confirmed-update.d.ts.map +1 -1
  130. package/dist/client/pages/issues/detail/use-confirmed-update.js +9 -42
  131. package/dist/client/pages/issues/detail/use-confirmed-update.js.map +1 -1
  132. package/dist/client/pages/issues/detail/use-issue-page.d.ts +0 -4
  133. package/dist/client/pages/issues/detail/use-issue-page.d.ts.map +1 -1
  134. package/dist/client/pages/issues/detail/use-issue-page.js +0 -14
  135. package/dist/client/pages/issues/detail/use-issue-page.js.map +1 -1
  136. package/dist/client/pages/issues/detail/use-issue-update.d.ts +2 -2
  137. package/dist/client/pages/issues/detail/use-issue-update.d.ts.map +1 -1
  138. package/dist/client/pages/issues/detail/use-issue-update.js +8 -8
  139. package/dist/client/pages/issues/detail/use-issue-update.js.map +1 -1
  140. package/dist/client/pages/issues/filters.d.ts +1 -1
  141. package/dist/client/pages/issues/filters.d.ts.map +1 -1
  142. package/dist/client/pages/issues/filters.js +2 -0
  143. package/dist/client/pages/issues/filters.js.map +1 -1
  144. package/dist/client/pages/issues/new-issue-button.d.ts.map +1 -1
  145. package/dist/client/pages/issues/new-issue-button.js +1 -1
  146. package/dist/client/pages/issues/new-issue-button.js.map +1 -1
  147. package/dist/client/pages/issues/new-issue-form.d.ts +13 -8
  148. package/dist/client/pages/issues/new-issue-form.d.ts.map +1 -1
  149. package/dist/client/pages/issues/new-issue-form.js +87 -83
  150. package/dist/client/pages/issues/new-issue-form.js.map +1 -1
  151. package/dist/client/pages/issues/new.d.ts.map +1 -1
  152. package/dist/client/pages/issues/new.js +3 -1
  153. package/dist/client/pages/issues/new.js.map +1 -1
  154. package/dist/client/pages/issues/use-executor-options.d.ts +3 -2
  155. package/dist/client/pages/issues/use-executor-options.d.ts.map +1 -1
  156. package/dist/client/pages/issues/use-executor-options.js +5 -23
  157. package/dist/client/pages/issues/use-executor-options.js.map +1 -1
  158. package/dist/client/pages/my-issues/my-issues-model.d.ts +2 -5
  159. package/dist/client/pages/my-issues/my-issues-model.d.ts.map +1 -1
  160. package/dist/client/pages/my-issues/my-issues-model.js +6 -7
  161. package/dist/client/pages/my-issues/my-issues-model.js.map +1 -1
  162. package/dist/client/pages/projects/detail/use-project-page.d.ts +4 -26
  163. package/dist/client/pages/projects/detail/use-project-page.d.ts.map +1 -1
  164. package/dist/client/pages/projects/detail/use-project-page.js +7 -53
  165. package/dist/client/pages/projects/detail/use-project-page.js.map +1 -1
  166. package/dist/client/pages/projects/new.d.ts +1 -1
  167. package/dist/client/pages/projects/new.d.ts.map +1 -1
  168. package/dist/client/pages/projects/new.js +3 -7
  169. package/dist/client/pages/projects/new.js.map +1 -1
  170. package/dist/client/plugin.d.ts +3 -0
  171. package/dist/client/plugin.d.ts.map +1 -1
  172. package/dist/client/plugin.js +8 -1
  173. package/dist/client/plugin.js.map +1 -1
  174. package/dist/client/projects.d.ts +2 -2
  175. package/dist/client/projects.d.ts.map +1 -1
  176. package/dist/client/projects.js +2 -2
  177. package/dist/client/projects.js.map +1 -1
  178. package/dist/client/providers/query-provider.d.ts.map +1 -1
  179. package/dist/client/providers/query-provider.js +15 -11
  180. package/dist/client/providers/query-provider.js.map +1 -1
  181. package/dist/database/migrations/.manifest.json +16 -0
  182. package/dist/database/migrations/202610110001_pm_issue_graph_revision.d.ts +4 -0
  183. package/dist/database/migrations/202610110001_pm_issue_graph_revision.d.ts.map +1 -0
  184. package/dist/database/migrations/202610110001_pm_issue_graph_revision.js +20 -0
  185. package/dist/database/migrations/202610110001_pm_issue_graph_revision.js.map +1 -0
  186. package/dist/database/migrations/202610240010_pm_fixed_statuses.d.ts +4 -0
  187. package/dist/database/migrations/202610240010_pm_fixed_statuses.d.ts.map +1 -0
  188. package/dist/database/migrations/202610240010_pm_fixed_statuses.js +189 -0
  189. package/dist/database/migrations/202610240010_pm_fixed_statuses.js.map +1 -0
  190. package/dist/database/migrations/202610240011_pm_issue_progress.d.ts +4 -0
  191. package/dist/database/migrations/202610240011_pm_issue_progress.d.ts.map +1 -0
  192. package/dist/database/migrations/202610240011_pm_issue_progress.js +19 -0
  193. package/dist/database/migrations/202610240011_pm_issue_progress.js.map +1 -0
  194. package/dist/database/migrations/202610240012_pm_issue_acceptance.d.ts +4 -0
  195. package/dist/database/migrations/202610240012_pm_issue_acceptance.d.ts.map +1 -0
  196. package/dist/database/migrations/202610240012_pm_issue_acceptance.js +17 -0
  197. package/dist/database/migrations/202610240012_pm_issue_acceptance.js.map +1 -0
  198. package/dist/server/access/viewer.d.ts +3 -0
  199. package/dist/server/access/viewer.d.ts.map +1 -1
  200. package/dist/server/access/viewer.js.map +1 -1
  201. package/dist/server/composition.d.ts +11 -17
  202. package/dist/server/composition.d.ts.map +1 -1
  203. package/dist/server/composition.js +15 -58
  204. package/dist/server/composition.js.map +1 -1
  205. package/dist/server/domains/comments/comment.queries.d.ts +42 -8
  206. package/dist/server/domains/comments/comment.queries.d.ts.map +1 -1
  207. package/dist/server/domains/comments/comment.queries.js +69 -8
  208. package/dist/server/domains/comments/comment.queries.js.map +1 -1
  209. package/dist/server/domains/comments/comment.routes.d.ts +1 -1
  210. package/dist/server/domains/comments/comment.routes.js +4 -4
  211. package/dist/server/domains/comments/comment.routes.js.map +1 -1
  212. package/dist/server/domains/comments/comment.service.d.ts +2 -2
  213. package/dist/server/domains/comments/comment.service.d.ts.map +1 -1
  214. package/dist/server/domains/comments/comment.service.js +18 -10
  215. package/dist/server/domains/comments/comment.service.js.map +1 -1
  216. package/dist/server/domains/comments/comment.store.d.ts +22 -1
  217. package/dist/server/domains/comments/comment.store.d.ts.map +1 -1
  218. package/dist/server/domains/comments/comment.store.js +65 -2
  219. package/dist/server/domains/comments/comment.store.js.map +1 -1
  220. package/dist/server/domains/comments/index.d.ts +1 -1
  221. package/dist/server/domains/comments/index.d.ts.map +1 -1
  222. package/dist/server/domains/comments/index.js.map +1 -1
  223. package/dist/server/domains/comments/ports.d.ts +7 -2
  224. package/dist/server/domains/comments/ports.d.ts.map +1 -1
  225. package/dist/server/domains/invitations/invitation.routes.d.ts +2 -1
  226. package/dist/server/domains/invitations/invitation.routes.d.ts.map +1 -1
  227. package/dist/server/domains/invitations/invitation.routes.js +27 -10
  228. package/dist/server/domains/invitations/invitation.routes.js.map +1 -1
  229. package/dist/server/domains/invitations/invitation.service.d.ts +1 -1
  230. package/dist/server/domains/invitations/invitation.service.d.ts.map +1 -1
  231. package/dist/server/domains/invitations/invitation.service.js +19 -3
  232. package/dist/server/domains/invitations/invitation.service.js.map +1 -1
  233. package/dist/server/domains/issues/index.d.ts +3 -3
  234. package/dist/server/domains/issues/index.d.ts.map +1 -1
  235. package/dist/server/domains/issues/index.js +2 -2
  236. package/dist/server/domains/issues/index.js.map +1 -1
  237. package/dist/server/domains/issues/issue.context.d.ts +6 -22
  238. package/dist/server/domains/issues/issue.context.d.ts.map +1 -1
  239. package/dist/server/domains/issues/issue.context.js +88 -105
  240. package/dist/server/domains/issues/issue.context.js.map +1 -1
  241. package/dist/server/domains/issues/issue.events.d.ts +5 -1
  242. package/dist/server/domains/issues/issue.events.d.ts.map +1 -1
  243. package/dist/server/domains/issues/issue.fields.d.ts +5 -3
  244. package/dist/server/domains/issues/issue.fields.d.ts.map +1 -1
  245. package/dist/server/domains/issues/issue.fields.js +50 -16
  246. package/dist/server/domains/issues/issue.fields.js.map +1 -1
  247. package/dist/server/domains/issues/issue.projects.d.ts +2 -2
  248. package/dist/server/domains/issues/issue.projects.d.ts.map +1 -1
  249. package/dist/server/domains/issues/issue.projects.js +1 -2
  250. package/dist/server/domains/issues/issue.projects.js.map +1 -1
  251. package/dist/server/domains/issues/issue.queries.d.ts +26 -7
  252. package/dist/server/domains/issues/issue.queries.d.ts.map +1 -1
  253. package/dist/server/domains/issues/issue.queries.js +137 -58
  254. package/dist/server/domains/issues/issue.queries.js.map +1 -1
  255. package/dist/server/domains/issues/issue.routes.d.ts +3 -1
  256. package/dist/server/domains/issues/issue.routes.d.ts.map +1 -1
  257. package/dist/server/domains/issues/issue.routes.js +74 -46
  258. package/dist/server/domains/issues/issue.routes.js.map +1 -1
  259. package/dist/server/domains/issues/issue.service.d.ts +22 -44
  260. package/dist/server/domains/issues/issue.service.d.ts.map +1 -1
  261. package/dist/server/domains/issues/issue.service.js +68 -82
  262. package/dist/server/domains/issues/issue.service.js.map +1 -1
  263. package/dist/server/domains/issues/issue.status.d.ts +7 -10
  264. package/dist/server/domains/issues/issue.status.d.ts.map +1 -1
  265. package/dist/server/domains/issues/issue.status.js +6 -22
  266. package/dist/server/domains/issues/issue.status.js.map +1 -1
  267. package/dist/server/domains/issues/issue.store.d.ts +11 -0
  268. package/dist/server/domains/issues/issue.store.d.ts.map +1 -1
  269. package/dist/server/domains/issues/issue.store.js +37 -0
  270. package/dist/server/domains/issues/issue.store.js.map +1 -1
  271. package/dist/server/domains/issues/ports.d.ts +35 -36
  272. package/dist/server/domains/issues/ports.d.ts.map +1 -1
  273. package/dist/server/domains/issues/ports.js +1 -5
  274. package/dist/server/domains/issues/ports.js.map +1 -1
  275. package/dist/server/domains/notices/notice.planner.d.ts +2 -1
  276. package/dist/server/domains/notices/notice.planner.d.ts.map +1 -1
  277. package/dist/server/domains/notices/notice.planner.js +2 -1
  278. package/dist/server/domains/notices/notice.planner.js.map +1 -1
  279. package/dist/server/domains/notices/notice.rules.d.ts +1 -4
  280. package/dist/server/domains/notices/notice.rules.d.ts.map +1 -1
  281. package/dist/server/domains/notices/notice.rules.js +4 -5
  282. package/dist/server/domains/notices/notice.rules.js.map +1 -1
  283. package/dist/server/domains/plans/intake/intake.service.d.ts +2 -0
  284. package/dist/server/domains/plans/intake/intake.service.d.ts.map +1 -1
  285. package/dist/server/domains/plans/intake/intake.service.js +14 -0
  286. package/dist/server/domains/plans/intake/intake.service.js.map +1 -1
  287. package/dist/server/domains/plans/intake/intake.text.d.ts +5 -6
  288. package/dist/server/domains/plans/intake/intake.text.d.ts.map +1 -1
  289. package/dist/server/domains/plans/intake/intake.text.js +5 -6
  290. package/dist/server/domains/plans/intake/intake.text.js.map +1 -1
  291. package/dist/server/domains/plans/plan.engine.d.ts.map +1 -1
  292. package/dist/server/domains/plans/plan.engine.js +6 -0
  293. package/dist/server/domains/plans/plan.engine.js.map +1 -1
  294. package/dist/server/domains/plans/plan.ops.d.ts +3 -3
  295. package/dist/server/domains/plans/plan.ops.d.ts.map +1 -1
  296. package/dist/server/domains/plans/plan.ops.js +23 -13
  297. package/dist/server/domains/plans/plan.ops.js.map +1 -1
  298. package/dist/server/domains/plans/plan.schemas.d.ts.map +1 -1
  299. package/dist/server/domains/plans/plan.schemas.js +26 -10
  300. package/dist/server/domains/plans/plan.schemas.js.map +1 -1
  301. package/dist/server/domains/projects/index.d.ts +1 -1
  302. package/dist/server/domains/projects/index.d.ts.map +1 -1
  303. package/dist/server/domains/projects/index.js.map +1 -1
  304. package/dist/server/domains/projects/project-resources.d.ts +5 -0
  305. package/dist/server/domains/projects/project-resources.d.ts.map +1 -1
  306. package/dist/server/domains/projects/project-resources.js +43 -1
  307. package/dist/server/domains/projects/project-resources.js.map +1 -1
  308. package/dist/server/domains/projects/project.events.d.ts +10 -0
  309. package/dist/server/domains/projects/project.events.d.ts.map +1 -0
  310. package/dist/server/domains/projects/project.events.js +2 -0
  311. package/dist/server/domains/projects/project.events.js.map +1 -0
  312. package/dist/server/domains/projects/project.routes.d.ts.map +1 -1
  313. package/dist/server/domains/projects/project.routes.js +1 -3
  314. package/dist/server/domains/projects/project.routes.js.map +1 -1
  315. package/dist/server/domains/projects/project.service.d.ts +1 -7
  316. package/dist/server/domains/projects/project.service.d.ts.map +1 -1
  317. package/dist/server/domains/projects/project.service.js +2 -17
  318. package/dist/server/domains/projects/project.service.js.map +1 -1
  319. package/dist/server/domains/projects/project.store.d.ts +0 -1
  320. package/dist/server/domains/projects/project.store.d.ts.map +1 -1
  321. package/dist/server/domains/projects/project.store.js +0 -1
  322. package/dist/server/domains/projects/project.store.js.map +1 -1
  323. package/dist/server/domains/reports/report.service.d.ts +1 -12
  324. package/dist/server/domains/reports/report.service.d.ts.map +1 -1
  325. package/dist/server/domains/reports/report.service.js +92 -136
  326. package/dist/server/domains/reports/report.service.js.map +1 -1
  327. package/dist/server/domains/settings/settings.store.d.ts +4 -4
  328. package/dist/server/domains/settings/settings.store.js +2 -2
  329. package/dist/server/domains/statuses/event-types.d.ts +16 -0
  330. package/dist/server/domains/statuses/event-types.d.ts.map +1 -0
  331. package/dist/server/domains/statuses/event-types.js +31 -0
  332. package/dist/server/domains/statuses/event-types.js.map +1 -0
  333. package/dist/server/domains/statuses/index.d.ts +4 -0
  334. package/dist/server/domains/statuses/index.d.ts.map +1 -0
  335. package/dist/server/domains/statuses/index.js +4 -0
  336. package/dist/server/domains/statuses/index.js.map +1 -0
  337. package/dist/server/domains/statuses/status.catalog.d.ts +15 -0
  338. package/dist/server/domains/statuses/status.catalog.d.ts.map +1 -0
  339. package/dist/server/domains/statuses/status.catalog.js +119 -0
  340. package/dist/server/domains/statuses/status.catalog.js.map +1 -0
  341. package/dist/server/domains/statuses/status.events.d.ts +15 -0
  342. package/dist/server/domains/statuses/status.events.d.ts.map +1 -0
  343. package/dist/server/domains/statuses/status.events.js +2 -0
  344. package/dist/server/domains/statuses/status.events.js.map +1 -0
  345. package/dist/server/domains/statuses/status.fire.d.ts +48 -0
  346. package/dist/server/domains/statuses/status.fire.d.ts.map +1 -0
  347. package/dist/server/domains/statuses/status.fire.js +38 -0
  348. package/dist/server/domains/statuses/status.fire.js.map +1 -0
  349. package/dist/server/domains/subscriptions/subscription.routes.d.ts.map +1 -1
  350. package/dist/server/domains/subscriptions/subscription.routes.js +4 -2
  351. package/dist/server/domains/subscriptions/subscription.routes.js.map +1 -1
  352. package/dist/server/domains/subtasks/index.d.ts +1 -0
  353. package/dist/server/domains/subtasks/index.d.ts.map +1 -1
  354. package/dist/server/domains/subtasks/index.js +1 -0
  355. package/dist/server/domains/subtasks/index.js.map +1 -1
  356. package/dist/server/domains/subtasks/subtask.blocking.d.ts +10 -5
  357. package/dist/server/domains/subtasks/subtask.blocking.d.ts.map +1 -1
  358. package/dist/server/domains/subtasks/subtask.blocking.js +35 -15
  359. package/dist/server/domains/subtasks/subtask.blocking.js.map +1 -1
  360. package/dist/server/domains/subtasks/subtask.guard.d.ts +12 -0
  361. package/dist/server/domains/subtasks/subtask.guard.d.ts.map +1 -0
  362. package/dist/server/domains/subtasks/subtask.guard.js +23 -0
  363. package/dist/server/domains/subtasks/subtask.guard.js.map +1 -0
  364. package/dist/server/domains/subtasks/subtask.release.d.ts +7 -11
  365. package/dist/server/domains/subtasks/subtask.release.d.ts.map +1 -1
  366. package/dist/server/domains/subtasks/subtask.release.js +9 -7
  367. package/dist/server/domains/subtasks/subtask.release.js.map +1 -1
  368. package/dist/server/domains/subtasks/subtask.routes.d.ts +1 -0
  369. package/dist/server/domains/subtasks/subtask.routes.d.ts.map +1 -1
  370. package/dist/server/domains/subtasks/subtask.routes.js +31 -3
  371. package/dist/server/domains/subtasks/subtask.routes.js.map +1 -1
  372. package/dist/server/domains/subtasks/subtask.service.d.ts +5 -5
  373. package/dist/server/domains/subtasks/subtask.service.d.ts.map +1 -1
  374. package/dist/server/domains/subtasks/subtask.service.js +98 -20
  375. package/dist/server/domains/subtasks/subtask.service.js.map +1 -1
  376. package/dist/server/domains/subtasks/subtask.store.d.ts +7 -0
  377. package/dist/server/domains/subtasks/subtask.store.d.ts.map +1 -1
  378. package/dist/server/domains/subtasks/subtask.store.js +34 -0
  379. package/dist/server/domains/subtasks/subtask.store.js.map +1 -1
  380. package/dist/server/index.d.ts +1 -0
  381. package/dist/server/index.d.ts.map +1 -1
  382. package/dist/server/index.js +1 -0
  383. package/dist/server/index.js.map +1 -1
  384. package/dist/server/kernel/activity.d.ts +5 -2
  385. package/dist/server/kernel/activity.d.ts.map +1 -1
  386. package/dist/server/kernel/activity.js +28 -1
  387. package/dist/server/kernel/activity.js.map +1 -1
  388. package/dist/server/kernel/actor.d.ts +2 -0
  389. package/dist/server/kernel/actor.d.ts.map +1 -1
  390. package/dist/server/kernel/actor.js.map +1 -1
  391. package/dist/server/kernel/http.d.ts.map +1 -1
  392. package/dist/server/kernel/http.js +2 -3
  393. package/dist/server/kernel/http.js.map +1 -1
  394. package/dist/server/kernel/kinds.d.ts +24 -6
  395. package/dist/server/kernel/kinds.d.ts.map +1 -1
  396. package/dist/server/kernel/kinds.js +21 -1
  397. package/dist/server/kernel/kinds.js.map +1 -1
  398. package/dist/server/kernel/transaction-read.d.ts +4 -0
  399. package/dist/server/kernel/transaction-read.d.ts.map +1 -0
  400. package/dist/server/kernel/transaction-read.js +30 -0
  401. package/dist/server/kernel/transaction-read.js.map +1 -0
  402. package/dist/server/kernel/work.d.ts +16 -6
  403. package/dist/server/kernel/work.d.ts.map +1 -1
  404. package/dist/server/kernel/work.js +33 -14
  405. package/dist/server/kernel/work.js.map +1 -1
  406. package/dist/server/lifecycle/move.d.ts +1 -0
  407. package/dist/server/lifecycle/move.d.ts.map +1 -1
  408. package/dist/server/lifecycle/move.js +2 -0
  409. package/dist/server/lifecycle/move.js.map +1 -1
  410. package/dist/server/lifecycle/registry.d.ts +5 -0
  411. package/dist/server/lifecycle/registry.d.ts.map +1 -1
  412. package/dist/server/lifecycle/registry.js.map +1 -1
  413. package/dist/server/locales/en-US.d.ts +0 -9
  414. package/dist/server/locales/en-US.d.ts.map +1 -1
  415. package/dist/server/locales/en-US.js +0 -9
  416. package/dist/server/locales/en-US.js.map +1 -1
  417. package/dist/server/locales/zh-CN.d.ts.map +1 -1
  418. package/dist/server/locales/zh-CN.js +2 -11
  419. package/dist/server/locales/zh-CN.js.map +1 -1
  420. package/dist/server/providers/change-announcer.d.ts +28 -0
  421. package/dist/server/providers/change-announcer.d.ts.map +1 -0
  422. package/dist/server/providers/change-announcer.js +75 -0
  423. package/dist/server/providers/change-announcer.js.map +1 -0
  424. package/dist/server/providers/notifications.d.ts +1 -0
  425. package/dist/server/providers/notifications.d.ts.map +1 -1
  426. package/dist/server/providers/notifications.js +6 -120
  427. package/dist/server/providers/notifications.js.map +1 -1
  428. package/dist/server/providers/projects.d.ts +3 -8
  429. package/dist/server/providers/projects.d.ts.map +1 -1
  430. package/dist/server/providers/projects.js +14 -37
  431. package/dist/server/providers/projects.js.map +1 -1
  432. package/dist/server/routes/api.d.ts.map +1 -1
  433. package/dist/server/routes/api.js +5 -8
  434. package/dist/server/routes/api.js.map +1 -1
  435. package/dist/server/routes/schemas.d.ts +17 -28
  436. package/dist/server/routes/schemas.d.ts.map +1 -1
  437. package/dist/server/routes/schemas.js +382 -292
  438. package/dist/server/routes/schemas.js.map +1 -1
  439. package/dist/server/tokens.d.ts +22 -35
  440. package/dist/server/tokens.d.ts.map +1 -1
  441. package/dist/server/tokens.js +5 -16
  442. package/dist/server/tokens.js.map +1 -1
  443. package/dist/shared/access.d.ts +0 -1
  444. package/dist/shared/access.d.ts.map +1 -1
  445. package/dist/shared/access.js +2 -11
  446. package/dist/shared/access.js.map +1 -1
  447. package/dist/shared/attachments.d.ts +4 -0
  448. package/dist/shared/attachments.d.ts.map +1 -1
  449. package/dist/shared/attachments.js +4 -0
  450. package/dist/shared/attachments.js.map +1 -1
  451. package/dist/shared/comments.d.ts +3 -0
  452. package/dist/shared/comments.d.ts.map +1 -1
  453. package/dist/shared/comments.js.map +1 -1
  454. package/dist/shared/intake-ai.d.ts +3 -1
  455. package/dist/shared/intake-ai.d.ts.map +1 -1
  456. package/dist/shared/intake-ai.js.map +1 -1
  457. package/dist/shared/invitations.d.ts +1 -1
  458. package/dist/shared/invitations.d.ts.map +1 -1
  459. package/dist/shared/issues.d.ts +32 -36
  460. package/dist/shared/issues.d.ts.map +1 -1
  461. package/dist/shared/issues.js +5 -0
  462. package/dist/shared/issues.js.map +1 -1
  463. package/dist/shared/kinds.d.ts +3 -1
  464. package/dist/shared/kinds.d.ts.map +1 -1
  465. package/dist/shared/kinds.js +1 -1
  466. package/dist/shared/locales/access.en-US.d.ts +0 -1
  467. package/dist/shared/locales/access.en-US.d.ts.map +1 -1
  468. package/dist/shared/locales/access.en-US.js +1 -2
  469. package/dist/shared/locales/access.en-US.js.map +1 -1
  470. package/dist/shared/locales/access.zh-CN.d.ts.map +1 -1
  471. package/dist/shared/locales/access.zh-CN.js +1 -2
  472. package/dist/shared/locales/access.zh-CN.js.map +1 -1
  473. package/dist/shared/plans.d.ts +28 -10
  474. package/dist/shared/plans.d.ts.map +1 -1
  475. package/dist/shared/plans.js +2 -1
  476. package/dist/shared/plans.js.map +1 -1
  477. package/dist/shared/projects.d.ts +0 -4
  478. package/dist/shared/projects.d.ts.map +1 -1
  479. package/dist/shared/projects.js.map +1 -1
  480. package/dist/shared/realtime.d.ts +10 -3
  481. package/dist/shared/realtime.d.ts.map +1 -1
  482. package/dist/shared/realtime.js +3 -2
  483. package/dist/shared/realtime.js.map +1 -1
  484. package/dist/shared/statuses.d.ts +42 -0
  485. package/dist/shared/statuses.d.ts.map +1 -0
  486. package/dist/shared/statuses.js +73 -0
  487. package/dist/shared/statuses.js.map +1 -0
  488. package/dist/shared/subtasks.d.ts +8 -3
  489. package/dist/shared/subtasks.d.ts.map +1 -1
  490. package/package.json +21 -29
  491. package/skills/nocobase-app-plugin-projects/SKILL.md +33 -57
  492. package/dist/client/lib/built-in-rule-editors.d.ts +0 -13
  493. package/dist/client/lib/built-in-rule-editors.d.ts.map +0 -1
  494. package/dist/client/lib/built-in-rule-editors.js +0 -86
  495. package/dist/client/lib/built-in-rule-editors.js.map +0 -1
  496. package/dist/client/lib/built-in-rule-types.d.ts +0 -3
  497. package/dist/client/lib/built-in-rule-types.d.ts.map +0 -1
  498. package/dist/client/lib/built-in-rule-types.js +0 -63
  499. package/dist/client/lib/built-in-rule-types.js.map +0 -1
  500. package/dist/client/lib/status-rule-types.d.ts +0 -60
  501. package/dist/client/lib/status-rule-types.d.ts.map +0 -1
  502. package/dist/client/lib/status-rule-types.js +0 -38
  503. package/dist/client/lib/status-rule-types.js.map +0 -1
  504. package/dist/client/lib/workflow-events.d.ts +0 -25
  505. package/dist/client/lib/workflow-events.d.ts.map +0 -1
  506. package/dist/client/lib/workflow-events.js +0 -30
  507. package/dist/client/lib/workflow-events.js.map +0 -1
  508. package/dist/client/pages/config/workflow-detail.d.ts +0 -10
  509. package/dist/client/pages/config/workflow-detail.d.ts.map +0 -1
  510. package/dist/client/pages/config/workflow-detail.js +0 -182
  511. package/dist/client/pages/config/workflow-detail.js.map +0 -1
  512. package/dist/client/pages/config/workflows/flow-editor.d.ts +0 -15
  513. package/dist/client/pages/config/workflows/flow-editor.d.ts.map +0 -1
  514. package/dist/client/pages/config/workflows/flow-editor.js +0 -76
  515. package/dist/client/pages/config/workflows/flow-editor.js.map +0 -1
  516. package/dist/client/pages/config/workflows/status-rules.d.ts +0 -21
  517. package/dist/client/pages/config/workflows/status-rules.d.ts.map +0 -1
  518. package/dist/client/pages/config/workflows/status-rules.js +0 -203
  519. package/dist/client/pages/config/workflows/status-rules.js.map +0 -1
  520. package/dist/client/pages/config/workflows/transitions-matrix.d.ts +0 -20
  521. package/dist/client/pages/config/workflows/transitions-matrix.d.ts.map +0 -1
  522. package/dist/client/pages/config/workflows/transitions-matrix.js +0 -114
  523. package/dist/client/pages/config/workflows/transitions-matrix.js.map +0 -1
  524. package/dist/client/pages/config/workflows/use-status-name.d.ts +0 -4
  525. package/dist/client/pages/config/workflows/use-status-name.d.ts.map +0 -1
  526. package/dist/client/pages/config/workflows/use-status-name.js +0 -17
  527. package/dist/client/pages/config/workflows/use-status-name.js.map +0 -1
  528. package/dist/client/pages/config/workflows/workflow-diagram.d.ts +0 -17
  529. package/dist/client/pages/config/workflows/workflow-diagram.d.ts.map +0 -1
  530. package/dist/client/pages/config/workflows/workflow-diagram.js +0 -298
  531. package/dist/client/pages/config/workflows/workflow-diagram.js.map +0 -1
  532. package/dist/client/pages/config/workflows/workflow-model.d.ts +0 -157
  533. package/dist/client/pages/config/workflows/workflow-model.d.ts.map +0 -1
  534. package/dist/client/pages/config/workflows/workflow-model.js +0 -403
  535. package/dist/client/pages/config/workflows/workflow-model.js.map +0 -1
  536. package/dist/client/pages/config/workflows/workflow-views.d.ts +0 -31
  537. package/dist/client/pages/config/workflows/workflow-views.d.ts.map +0 -1
  538. package/dist/client/pages/config/workflows/workflow-views.js +0 -76
  539. package/dist/client/pages/config/workflows/workflow-views.js.map +0 -1
  540. package/dist/client/pages/config/workflows.d.ts +0 -8
  541. package/dist/client/pages/config/workflows.d.ts.map +0 -1
  542. package/dist/client/pages/config/workflows.js +0 -139
  543. package/dist/client/pages/config/workflows.js.map +0 -1
  544. package/dist/client/pages/issues/detail/start-dialog.d.ts +0 -20
  545. package/dist/client/pages/issues/detail/start-dialog.d.ts.map +0 -1
  546. package/dist/client/pages/issues/detail/start-dialog.js +0 -31
  547. package/dist/client/pages/issues/detail/start-dialog.js.map +0 -1
  548. package/dist/client/pages/projects/workflow-select.d.ts +0 -14
  549. package/dist/client/pages/projects/workflow-select.d.ts.map +0 -1
  550. package/dist/client/pages/projects/workflow-select.js +0 -34
  551. package/dist/client/pages/projects/workflow-select.js.map +0 -1
  552. package/dist/server/domains/approvals/approval.events.d.ts +0 -47
  553. package/dist/server/domains/approvals/approval.events.d.ts.map +0 -1
  554. package/dist/server/domains/approvals/approval.events.js +0 -2
  555. package/dist/server/domains/approvals/approval.events.js.map +0 -1
  556. package/dist/server/domains/approvals/approval.lifecycle.d.ts +0 -8
  557. package/dist/server/domains/approvals/approval.lifecycle.d.ts.map +0 -1
  558. package/dist/server/domains/approvals/approval.lifecycle.js +0 -54
  559. package/dist/server/domains/approvals/approval.lifecycle.js.map +0 -1
  560. package/dist/server/domains/approvals/approval.routes.d.ts +0 -10
  561. package/dist/server/domains/approvals/approval.routes.d.ts.map +0 -1
  562. package/dist/server/domains/approvals/approval.routes.js +0 -86
  563. package/dist/server/domains/approvals/approval.routes.js.map +0 -1
  564. package/dist/server/domains/approvals/approval.service.d.ts +0 -72
  565. package/dist/server/domains/approvals/approval.service.d.ts.map +0 -1
  566. package/dist/server/domains/approvals/approval.service.js +0 -261
  567. package/dist/server/domains/approvals/approval.service.js.map +0 -1
  568. package/dist/server/domains/approvals/approval.store.d.ts +0 -42
  569. package/dist/server/domains/approvals/approval.store.d.ts.map +0 -1
  570. package/dist/server/domains/approvals/approval.store.js +0 -66
  571. package/dist/server/domains/approvals/approval.store.js.map +0 -1
  572. package/dist/server/domains/approvals/index.d.ts +0 -4
  573. package/dist/server/domains/approvals/index.d.ts.map +0 -1
  574. package/dist/server/domains/approvals/index.js +0 -3
  575. package/dist/server/domains/approvals/index.js.map +0 -1
  576. package/dist/server/domains/checklists/checklist.routes.d.ts +0 -9
  577. package/dist/server/domains/checklists/checklist.routes.d.ts.map +0 -1
  578. package/dist/server/domains/checklists/checklist.routes.js +0 -62
  579. package/dist/server/domains/checklists/checklist.routes.js.map +0 -1
  580. package/dist/server/domains/checklists/checklist.service.d.ts +0 -26
  581. package/dist/server/domains/checklists/checklist.service.d.ts.map +0 -1
  582. package/dist/server/domains/checklists/checklist.service.js +0 -80
  583. package/dist/server/domains/checklists/checklist.service.js.map +0 -1
  584. package/dist/server/domains/checklists/checklist.store.d.ts +0 -32
  585. package/dist/server/domains/checklists/checklist.store.d.ts.map +0 -1
  586. package/dist/server/domains/checklists/checklist.store.js +0 -66
  587. package/dist/server/domains/checklists/checklist.store.js.map +0 -1
  588. package/dist/server/domains/checklists/index.d.ts +0 -4
  589. package/dist/server/domains/checklists/index.d.ts.map +0 -1
  590. package/dist/server/domains/checklists/index.js +0 -4
  591. package/dist/server/domains/checklists/index.js.map +0 -1
  592. package/dist/server/domains/workflows/built-in-rule-types.d.ts +0 -40
  593. package/dist/server/domains/workflows/built-in-rule-types.d.ts.map +0 -1
  594. package/dist/server/domains/workflows/built-in-rule-types.js +0 -260
  595. package/dist/server/domains/workflows/built-in-rule-types.js.map +0 -1
  596. package/dist/server/domains/workflows/event-types.d.ts +0 -21
  597. package/dist/server/domains/workflows/event-types.d.ts.map +0 -1
  598. package/dist/server/domains/workflows/event-types.js +0 -31
  599. package/dist/server/domains/workflows/event-types.js.map +0 -1
  600. package/dist/server/domains/workflows/index.d.ts +0 -10
  601. package/dist/server/domains/workflows/index.d.ts.map +0 -1
  602. package/dist/server/domains/workflows/index.js +0 -10
  603. package/dist/server/domains/workflows/index.js.map +0 -1
  604. package/dist/server/domains/workflows/rule-types.d.ts +0 -125
  605. package/dist/server/domains/workflows/rule-types.d.ts.map +0 -1
  606. package/dist/server/domains/workflows/rule-types.js +0 -33
  607. package/dist/server/domains/workflows/rule-types.js.map +0 -1
  608. package/dist/server/domains/workflows/templates.d.ts +0 -62
  609. package/dist/server/domains/workflows/templates.d.ts.map +0 -1
  610. package/dist/server/domains/workflows/templates.js +0 -63
  611. package/dist/server/domains/workflows/templates.js.map +0 -1
  612. package/dist/server/domains/workflows/workflow.diff.d.ts +0 -14
  613. package/dist/server/domains/workflows/workflow.diff.d.ts.map +0 -1
  614. package/dist/server/domains/workflows/workflow.diff.js +0 -80
  615. package/dist/server/domains/workflows/workflow.diff.js.map +0 -1
  616. package/dist/server/domains/workflows/workflow.events.d.ts +0 -26
  617. package/dist/server/domains/workflows/workflow.events.d.ts.map +0 -1
  618. package/dist/server/domains/workflows/workflow.events.js +0 -2
  619. package/dist/server/domains/workflows/workflow.events.js.map +0 -1
  620. package/dist/server/domains/workflows/workflow.fire.d.ts +0 -38
  621. package/dist/server/domains/workflows/workflow.fire.d.ts.map +0 -1
  622. package/dist/server/domains/workflows/workflow.fire.js +0 -57
  623. package/dist/server/domains/workflows/workflow.fire.js.map +0 -1
  624. package/dist/server/domains/workflows/workflow.registry.d.ts +0 -27
  625. package/dist/server/domains/workflows/workflow.registry.d.ts.map +0 -1
  626. package/dist/server/domains/workflows/workflow.registry.js +0 -130
  627. package/dist/server/domains/workflows/workflow.registry.js.map +0 -1
  628. package/dist/server/domains/workflows/workflow.routes.d.ts +0 -6
  629. package/dist/server/domains/workflows/workflow.routes.d.ts.map +0 -1
  630. package/dist/server/domains/workflows/workflow.routes.js +0 -148
  631. package/dist/server/domains/workflows/workflow.routes.js.map +0 -1
  632. package/dist/server/domains/workflows/workflow.rules.d.ts +0 -14
  633. package/dist/server/domains/workflows/workflow.rules.d.ts.map +0 -1
  634. package/dist/server/domains/workflows/workflow.rules.js +0 -190
  635. package/dist/server/domains/workflows/workflow.rules.js.map +0 -1
  636. package/dist/server/domains/workflows/workflow.service.d.ts +0 -71
  637. package/dist/server/domains/workflows/workflow.service.d.ts.map +0 -1
  638. package/dist/server/domains/workflows/workflow.service.js +0 -365
  639. package/dist/server/domains/workflows/workflow.service.js.map +0 -1
  640. package/dist/server/domains/workflows/workflow.store.d.ts +0 -33
  641. package/dist/server/domains/workflows/workflow.store.d.ts.map +0 -1
  642. package/dist/server/domains/workflows/workflow.store.js +0 -148
  643. package/dist/server/domains/workflows/workflow.store.js.map +0 -1
  644. package/dist/shared/approvals.d.ts +0 -37
  645. package/dist/shared/approvals.d.ts.map +0 -1
  646. package/dist/shared/approvals.js +0 -4
  647. package/dist/shared/approvals.js.map +0 -1
  648. package/dist/shared/checklists.d.ts +0 -27
  649. package/dist/shared/checklists.d.ts.map +0 -1
  650. package/dist/shared/checklists.js +0 -7
  651. package/dist/shared/checklists.js.map +0 -1
  652. package/dist/shared/workflows.d.ts +0 -267
  653. package/dist/shared/workflows.d.ts.map +0 -1
  654. package/dist/shared/workflows.js +0 -149
  655. package/dist/shared/workflows.js.map +0 -1
@@ -1,26 +1,37 @@
1
1
  import { ACTIVITY_PAGE_LIMIT, ISSUE_PAGE_LIMIT, } from '../../../shared/issues.js';
2
2
  import { AGENT_VIA_KIND, readActivities, splitVia, tracedAgents, } from '../../kernel/activity.js';
3
- import { notFound } from '../../kernel/errors.js';
4
- import { projectRelation } from '../projects/index.js';
5
3
  import { decodeCursor, pageLimit, pageOf } from '../../kernel/pagination.js';
6
4
  import { deletedIssues, requireVisible, visibleIssues, } from './issue.access.js';
7
- import { findIssue, findIssueRow, findIssueRows, priorityRank, statusesOf, } from './issue.store.js';
8
- import { isTerminal, } from './ports.js';
9
- import { BUILTIN_STATUSES } from '../../../shared/workflows.js';
5
+ import { findIssue, findIssueRefs, findIssueRow, findIssueRows, hierarchyRecords, priorityRank, statusesOf, } from './issue.store.js';
6
+ import { isTerminal } from './ports.js';
7
+ import { FIXED_STATUSES } from '../../../shared/statuses.js';
8
+ import { oneOf } from '../../kernel/db.js';
9
+ /** The most issues `IssueQueries.hierarchyItems` hydrates at once. */
10
+ export const HIERARCHY_ITEMS_MAX = 500;
10
11
  /** The most issues `IssueQueries.matching` answers. */
11
12
  export const MATCHING_LIMIT = 500;
12
- /** The built-in finished statuses, which every workflow has: left out in the query, the rest checked per workflow. */
13
- const FINISHED_KEYS = BUILTIN_STATUSES.filter((status) => status.category === 'done' || status.category === 'closed').map((status) => status.key);
13
+ /** The finished statuses: left out in the query. */
14
+ const FINISHED_KEYS = FIXED_STATUSES.filter((status) => status.category === 'done' || status.category === 'closed').map((status) => status.key);
14
15
  /** The viewer's issues narrowed by the query's filters. */
15
16
  function listFilter(viewer, query) {
16
17
  return (f) => {
17
18
  const nodes = [
18
19
  query.deleted ? deletedIssues(f, viewer) : visibleIssues(f, viewer),
19
20
  ];
21
+ if (query.issueIds)
22
+ nodes.push(oneOf(f, 'id', query.issueIds));
20
23
  if (query.statusKey)
21
24
  nodes.push(f.string('statusKey').eq(query.statusKey));
22
25
  if (query.projectId)
23
26
  nodes.push(f.string('projectId').eq(query.projectId));
27
+ if (query.involvesUserId)
28
+ nodes.push(f.or([
29
+ f.string('ownerUserId').eq(query.involvesUserId),
30
+ f.and([
31
+ f.string('executorType').eq('user'),
32
+ f.string('executorId').eq(query.involvesUserId),
33
+ ]),
34
+ ]));
24
35
  if (query.ownerUserId)
25
36
  nodes.push(f.string('ownerUserId').eq(query.ownerUserId));
26
37
  if (query.executorId)
@@ -42,6 +53,22 @@ function listFilter(viewer, query) {
42
53
  return f.and(nodes);
43
54
  };
44
55
  }
56
+ /**
57
+ * The list's filters as a test of an issue already read, when they are all exact matches on its own fields (no search
58
+ * text, no label); null otherwise, and the filters are read from the database.
59
+ */
60
+ function exactMatcher(query) {
61
+ if (query.q?.trim() || query.labelId || query.parentIssueId || query.issueIds)
62
+ return null;
63
+ return (issue) => (!query.statusKey || issue.statusKey === query.statusKey) &&
64
+ (!query.projectId || issue.projectId === query.projectId) &&
65
+ (!query.involvesUserId ||
66
+ issue.ownerUserId === query.involvesUserId ||
67
+ (issue.executor?.type === 'user' &&
68
+ issue.executor.id === query.involvesUserId)) &&
69
+ (!query.ownerUserId || issue.ownerUserId === query.ownerUserId) &&
70
+ (!query.executorId || issue.executor?.id === query.executorId);
71
+ }
45
72
  function cursorOf(cursor, order) {
46
73
  if (!cursor)
47
74
  return undefined;
@@ -51,9 +78,9 @@ function cursorOf(cursor, order) {
51
78
  id: fields.id,
52
79
  };
53
80
  }
54
- async function listItems(deps, conn, rows) {
81
+ async function listItems(deps, conn, rows, readableIds) {
55
82
  const name = await deps.kinds.nameAll(conn, rows.flatMap((row) => (row.executor ? [row.executor] : [])));
56
- const counts = await deps.extras().listCounts(conn, rows);
83
+ const counts = await deps.extras().listCounts(conn, rows, readableIds);
57
84
  return rows.map(({ ownerName, ...row }) => ({
58
85
  ...row,
59
86
  owner: { id: row.ownerUserId, name: ownerName },
@@ -64,7 +91,8 @@ async function listItems(deps, conn, rows) {
64
91
  blockedCount: counts.get(row.id)?.blockedCount ?? 0,
65
92
  }));
66
93
  }
67
- async function page(deps, conn, viewer, query, limit) {
94
+ /** The sort field and direction a list query orders by. */
95
+ function orderOf(query) {
68
96
  const order = query.sort === 'created'
69
97
  ? 'createdAt'
70
98
  : query.sort === 'number'
@@ -76,46 +104,107 @@ async function page(deps, conn, viewer, query, limit) {
76
104
  const ascending = order === 'priorityRank'
77
105
  ? query.direction !== 'asc'
78
106
  : query.direction === 'asc';
107
+ return { order, direction: ascending ? 'asc' : 'desc' };
108
+ }
109
+ const cursorFieldsOf = (order) => (row) => ({
110
+ [order]: order === 'priorityRank' ? priorityRank(row.priority) : row[order],
111
+ id: row.id,
112
+ });
113
+ async function page(deps, conn, viewer, query, limit) {
114
+ const { order, direction } = orderOf(query);
79
115
  const rows = await findIssueRows(conn, {
80
116
  filter: listFilter(viewer, query),
81
117
  order,
82
- direction: ascending ? 'asc' : 'desc',
118
+ direction,
83
119
  limit: limit + 1,
84
120
  ...(query.cursor ? { cursor: cursorOf(query.cursor, order) } : {}),
85
121
  });
86
- const result = pageOf(rows, limit, (row) => ({
87
- [order]: order === 'priorityRank' ? priorityRank(row.priority) : row[order],
88
- id: row.id,
89
- }));
122
+ const result = pageOf(rows, limit, cursorFieldsOf(order));
90
123
  return {
91
124
  data: await listItems(deps, conn, result.rows),
92
125
  nextCursor: result.nextCursor,
93
126
  };
94
127
  }
128
+ /**
129
+ * The first page of each of `statusKeys`, in a fixed number of reads whatever the number of issues: the ids of each
130
+ * column in its order, then the rows of every column at once, and what the rows show beside them at once.
131
+ */
132
+ async function columnPages(deps, conn, viewer, query, statusKeys, limit) {
133
+ const { order, direction } = orderOf(query);
134
+ const refs = new Map();
135
+ for (const statusKey of statusKeys) {
136
+ const found = await findIssueRefs(conn, {
137
+ filter: listFilter(viewer, { ...query, statusKey, cursor: undefined }),
138
+ order,
139
+ direction,
140
+ limit: limit + 1,
141
+ });
142
+ const result = pageOf(found, limit, cursorFieldsOf(order));
143
+ refs.set(statusKey, {
144
+ ids: result.rows.map((row) => row.id),
145
+ nextCursor: result.nextCursor,
146
+ });
147
+ }
148
+ const ids = [...refs.values()].flatMap((column) => column.ids);
149
+ const rows = ids.length > 0
150
+ ? await findIssueRows(conn, {
151
+ filter: (f) => f.or(ids.map((id) => f.string('id').eq(id))),
152
+ order: 'number',
153
+ limit: ids.length,
154
+ })
155
+ : [];
156
+ const items = new Map((await listItems(deps, conn, rows)).map((item) => [item.id, item]));
157
+ return new Map([...refs].map(([statusKey, column]) => [
158
+ statusKey,
159
+ {
160
+ data: column.ids.flatMap((id) => {
161
+ const item = items.get(id);
162
+ return item ? [item] : [];
163
+ }),
164
+ nextCursor: column.nextCursor,
165
+ },
166
+ ]));
167
+ }
95
168
  /** An unknown status some issue is still in gets a plain column of its own. */
96
169
  function unknownStatus(key) {
97
170
  return { key, name: key, category: 'unstarted', color: 'gray' };
98
171
  }
99
172
  export function createIssueQueries(deps) {
100
173
  return {
101
- async statuses(viewer, projectId) {
174
+ async hierarchy(viewer, query) {
102
175
  const conn = deps.tx.read();
103
- if (projectId) {
104
- const relation = await projectRelation(conn, viewer, projectId);
105
- if (!relation?.visible)
106
- throw notFound('Project');
107
- }
108
- return [...(await deps.statuses.forProject(conn, projectId)).statuses];
176
+ const issues = await hierarchyRecords(conn, (f) => visibleIssues(f, viewer));
177
+ const exact = exactMatcher(query);
178
+ const matches = exact
179
+ ? issues.filter(exact)
180
+ : await hierarchyRecords(conn, listFilter(viewer, { ...query, deleted: false }));
181
+ return {
182
+ issues,
183
+ matchingIds: matches.map((issue) => issue.id),
184
+ blockedIds: await deps.extras().blockedIds(conn, issues),
185
+ };
109
186
  },
110
- async starts(viewer, projectId) {
187
+ async hierarchyItems(viewer, ids, readableIds) {
188
+ if (ids.length === 0)
189
+ return [];
190
+ if (ids.length > HIERARCHY_ITEMS_MAX)
191
+ throw new Error(`Hierarchy hydration accepts at most ${HIERARCHY_ITEMS_MAX} tasks.`);
111
192
  const conn = deps.tx.read();
112
- if (projectId) {
113
- const relation = await projectRelation(conn, viewer, projectId);
114
- if (!relation?.visible)
115
- throw notFound('Project');
116
- }
117
- const catalog = await deps.statuses.forProject(conn, projectId);
118
- return { initialStatus: catalog.initialStatus, options: catalog.starts };
193
+ const rows = await findIssueRows(conn, {
194
+ filter: (f) => f.and([
195
+ visibleIssues(f, viewer),
196
+ f.or(ids.map((id) => f.string('id').eq(id))),
197
+ ]),
198
+ order: 'number',
199
+ direction: 'asc',
200
+ limit: ids.length,
201
+ });
202
+ const readable = readableIds ??
203
+ new Set((await hierarchyRecords(conn, (f) => visibleIssues(f, viewer))).map((issue) => issue.id));
204
+ return listItems(deps, conn, rows, readable);
205
+ },
206
+ statuses() {
207
+ return [...deps.statuses.catalog().statuses];
119
208
  },
120
209
  async page(viewer, query) {
121
210
  const limit = pageLimit(query.limit, ISSUE_PAGE_LIMIT.default, ISSUE_PAGE_LIMIT.max);
@@ -129,8 +218,7 @@ export function createIssueQueries(deps) {
129
218
  async board(viewer, query) {
130
219
  const conn = deps.tx.read();
131
220
  const limit = pageLimit(query.limit, ISSUE_PAGE_LIMIT.default, ISSUE_PAGE_LIMIT.max);
132
- const catalog = await deps.statuses.forProject(conn, query.projectId ?? null);
133
- const statuses = [...catalog.statuses];
221
+ const statuses = [...deps.statuses.catalog().statuses];
134
222
  if (query.statusKey) {
135
223
  const only = statuses.find((status) => status.key === query.statusKey) ??
136
224
  unknownStatus(query.statusKey);
@@ -148,16 +236,17 @@ export function createIssueQueries(deps) {
148
236
  for (const key of await statusesOf(conn, listFilter(viewer, query)))
149
237
  if (!statuses.some((status) => status.key === key))
150
238
  statuses.push(unknownStatus(key));
151
- const columns = [];
152
- for (const status of statuses) {
153
- const column = await page(deps, conn, viewer, { ...query, statusKey: status.key, cursor: undefined }, limit);
154
- columns.push({
239
+ const pages = await columnPages(deps, conn, viewer, query, statuses.map((status) => status.key), limit);
240
+ return {
241
+ columns: statuses.map((status) => ({
155
242
  status,
156
- issues: column.data,
157
- nextCursor: column.nextCursor,
158
- });
159
- }
160
- return { columns };
243
+ issues: pages.get(status.key)?.data ?? [],
244
+ nextCursor: pages.get(status.key)?.nextCursor ?? null,
245
+ })),
246
+ };
247
+ },
248
+ visible(viewer, idOrKey) {
249
+ return requireVisible(deps.tx.read(), viewer, idOrKey);
161
250
  },
162
251
  async detail(viewer, idOrKey) {
163
252
  const conn = deps.tx.read();
@@ -167,9 +256,9 @@ export function createIssueQueries(deps) {
167
256
  const parent = issue.parentIssueId
168
257
  ? await findIssue(conn, issue.parentIssueId)
169
258
  : undefined;
170
- const catalog = await deps.statuses.forProject(conn, issue.projectId);
259
+ const catalog = deps.statuses.catalog();
171
260
  const activities = await this.activities(viewer, issue.id, {});
172
- const threads = await deps.extras().threads(conn, issue);
261
+ const threads = await deps.extras().threads(conn, issue, viewer);
173
262
  return {
174
263
  ...item,
175
264
  parent: parent && !parent.deletedAt
@@ -186,9 +275,6 @@ export function createIssueQueries(deps) {
186
275
  threadsNextCursor: threads.nextCursor,
187
276
  subscribers: await deps.extras().subscribers(conn, issue),
188
277
  attachments: await deps.extras().attachments(conn, viewer, issue),
189
- checklist: await deps.extras().checklist(conn, issue),
190
- pendingApproval: await deps.extras().pendingApproval(conn, issue),
191
- recentApprovals: await deps.extras().recentApprovals(conn, issue),
192
278
  ...(await deps.extras().relations(conn, viewer, issue)),
193
279
  };
194
280
  },
@@ -225,20 +311,13 @@ export function createIssueQueries(deps) {
225
311
  direction: 'desc',
226
312
  limit: limit + 1,
227
313
  });
228
- // A workflow's own finished statuses: an executor's issue in one is left out unless it was asked for by id.
314
+ // A finished issue of the executor is left out unless it was asked for by id.
229
315
  const asked = new Set(ids);
230
- const catalogs = new Map();
316
+ const catalog = deps.statuses.catalog();
231
317
  const kept = [];
232
318
  for (const row of rows.slice(0, limit)) {
233
- if (!asked.has(row.id)) {
234
- let catalog = catalogs.get(row.projectId);
235
- if (!catalog) {
236
- catalog = await deps.statuses.forProject(conn, row.projectId);
237
- catalogs.set(row.projectId, catalog);
238
- }
239
- if (isTerminal(catalog, row.statusKey))
240
- continue;
241
- }
319
+ if (!asked.has(row.id) && isTerminal(catalog, row.statusKey))
320
+ continue;
242
321
  kept.push(row);
243
322
  }
244
323
  return {
@@ -270,7 +349,7 @@ export function createIssueQueries(deps) {
270
349
  actorId: row.actorId,
271
350
  actorName: name(row.actorType, row.actorId),
272
351
  action: row.action,
273
- ...splitVia(row.details, (agentId) => name(AGENT_VIA_KIND, agentId)),
352
+ ...splitVia(row.details, (agentId) => name(AGENT_VIA_KIND, agentId), viewer),
274
353
  createdAt: row.createdAt,
275
354
  })),
276
355
  nextCursor: result.nextCursor,
@@ -1 +1 @@
1
- {"version":3,"file":"issue.queries.js","sourceRoot":"","sources":["../../../../server/domains/issues/issue.queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"issue.queries.js","sourceRoot":"","sources":["../../../../server/domains/issues/issue.queries.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,15 @@
1
1
  import type { Hono } from 'hono';
2
+ import type { IssueSessionIntegration } from '../../tokens.js';
2
3
  import { type ViewerEnv } from '../../access/request.js';
3
4
  import type { IssueQueries } from './issue.queries.js';
4
5
  import type { IssueService } from './issue.service.js';
5
6
  /**
6
7
  * `/api/projects/issues`. `{issueId}` is an issue id or its identifier (`PM-12`); identifiers always hold a `-`, so
7
- * none equals a fixed segment (`board`, `statuses`, `starts`).
8
+ * none equals a fixed segment (`board`, `statuses`).
8
9
  */
9
10
  export declare function createIssueRoutes(deps: {
10
11
  readonly issues: IssueService;
11
12
  readonly queries: IssueQueries;
13
+ readonly session?: () => IssueSessionIntegration | undefined;
12
14
  }): Hono<ViewerEnv>;
13
15
  //# sourceMappingURL=issue.routes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"issue.routes.d.ts","sourceRoot":"","sources":["../../../../server/domains/issues/issue.routes.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,yBAAyB,CAAC;AA4BjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUvD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAChC,GAAG,IAAI,CAAC,SAAS,CAAC,CAmZlB"}
1
+ {"version":3,"file":"issue.routes.d.ts","sourceRoot":"","sources":["../../../../server/domains/issues/issue.routes.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE/D,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,yBAAyB,CAAC;AA0BjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUvD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,uBAAuB,GAAG,SAAS,CAAC;CAC9D,GAAG,IAAI,CAAC,SAAS,CAAC,CAqZlB"}
@@ -1,13 +1,13 @@
1
- import { apiErrorResponse, apiErrorResponses, apiValidator, cliRoute, dataResponse, describeRoute, emptyResponse, listResponse, } from '@nocobase/app-server/router';
1
+ import { ApiError, apiErrorResponse, apiErrorResponses, apiValidator, cliRoute, dataResponse, describeRoute, emptyResponse, listResponse, } from '@nocobase/app-server/router';
2
2
  import { delegatedWrite, refuseDelegated, viewerOf, } from '../../access/request.js';
3
- import { boundedList, cursorList, domainRouter, referencedBy, tags, personOrRunSecurity, } from '../../kernel/http.js';
4
- import { ActivitySchema, BoundedListMeta, CreateIssueBody, CursorListMeta, CursorPageQuery, IssueBoardQuery, IssueBoardSchema, IssueDetailSchema, IssueListItemSchema, IssueListQuerySchema, IssueParams, IssueSchema, IssueStartsSchema, ProjectFilterQuery, StatusDefinitionSchema, UpdateIssueBody, UpdateIssueResultSchema, } from '../../routes/schemas.js';
3
+ import { boundedList, cursorList, domainRouter, tags, personOrRunSecurity, } from '../../kernel/http.js';
4
+ import { ActivitySchema, BoundedListMeta, CreateIssueBody, CursorListMeta, CursorPageQuery, IssueBoardQuery, IssueBoardSchema, IssueDetailSchema, IssueListItemSchema, IssueListQuerySchema, IssueParams, IssueSchema, IssueSessionHeader, StatusDefinitionSchema, UpdateIssueBody, UpdateIssueResultSchema, } from '../../routes/schemas.js';
5
5
  const notFound = apiErrorResponse(404, 'When the issue does not exist or the caller cannot see it.');
6
6
  const idOrKey = '`issueId` is an id or an identifier such as `PM-12`.';
7
- const workflowRefused = 'When the issue’s workflow or its rules refuse the change, such as a status the caller may not move it to, an incomplete checklist (`CHECKLIST_INCOMPLETE`), open sub-issues (`SUBTASKS_OPEN`) or a blocker (`ISSUE_BLOCKED`).';
7
+ const statusRefused = 'When the change is refused, such as a status the caller may not move it to (`TRANSITION_NOT_ALLOWED`) or a status that does not exist (`INVALID_STATUS`).';
8
8
  /**
9
9
  * `/api/projects/issues`. `{issueId}` is an issue id or its identifier (`PM-12`); identifiers always hold a `-`, so
10
- * none equals a fixed segment (`board`, `statuses`, `starts`).
10
+ * none equals a fixed segment (`board`, `statuses`).
11
11
  */
12
12
  export function createIssueRoutes(deps) {
13
13
  const routes = domainRouter();
@@ -56,11 +56,13 @@ export function createIssueRoutes(deps) {
56
56
  security: personOrRunSecurity,
57
57
  ...cliRoute({
58
58
  command: 'issue create',
59
+ // Session context comes from the bridge's environment, not a user-supplied CLI flag.
59
60
  bodyFile: 'file',
60
61
  flags: {
62
+ 'x-nb-agent-session': { hidden: true },
61
63
  statusKey: {
62
64
  name: 'status',
63
- description: 'The status it starts in: analysis (design first), todo (straight to development, the default) or backlog (nothing starts).',
65
+ description: 'The status it starts in: in_progress (start now) or backlog (nothing starts, the default).',
64
66
  },
65
67
  ownerUserId: { name: 'owner' },
66
68
  parentIssueId: { name: 'parent' },
@@ -69,29 +71,61 @@ export function createIssueRoutes(deps) {
69
71
  description: { contentFile: true },
70
72
  },
71
73
  action: 'pm.issues/create',
72
- examples: ['issue create --file issue.json --status todo'],
74
+ examples: [
75
+ 'issue create --file issue.json --status in_progress --start',
76
+ ],
73
77
  }),
74
- description: 'Needs `create` on `pm.issues` for the issue’s project. The issue starts in `todo` unless `statusKey` names another status it may start in; the caller owns it unless `ownerUserId` says otherwise.',
78
+ description: 'Needs `create` on `pm.issues` for the issue’s project. A session context header must identify an active session owned by the caller; its project is the default and successful creation is linked to it. The issue starts in `backlog` unless `statusKey` is `in_progress`; explicit `start: true` with backlog or an omitted status is refused before saving (`ISSUE_START_REQUIRES_IN_PROGRESS`). Use `--status in_progress --start` to request work. The caller owns it unless `ownerUserId` says otherwise. Without `executor` it gets the default executor, if a kind names one. Optional `attachmentIds` binds the caller’s own unattached uploads in the creation transaction before work starts; this also needs `upload` on `pm.attachments`.',
75
79
  responses: {
76
80
  201: dataResponse(IssueSchema),
77
81
  ...apiErrorResponses,
78
- 400: apiErrorResponse(400, workflowRefused),
82
+ 400: apiErrorResponse(400, statusRefused),
83
+ 409: apiErrorResponse(409, 'When the dependency graph changed (`DEPENDENCY_GRAPH_CHANGED`): reload and retry.'),
79
84
  },
80
- }), apiValidator('json', CreateIssueBody), async (context) => {
85
+ }), apiValidator('header', IssueSessionHeader), apiValidator('json', CreateIssueBody), async (context) => {
81
86
  const viewer = viewerOf(context);
82
- const input = context.req.valid('json');
87
+ let input = context.req.valid('json');
88
+ const sessionId = context.req.valid('header')['x-nb-agent-session'];
89
+ let session;
90
+ if (sessionId !== undefined) {
91
+ const integration = deps.session?.();
92
+ if (!integration ||
93
+ viewer.actor.type !== 'user' ||
94
+ context.get('auth')?.credential)
95
+ throw new ApiError({
96
+ status: 'PERMISSION_DENIED',
97
+ reason: 'SESSION_CONTEXT_REFUSED',
98
+ domain: 'projects',
99
+ message: 'A session context requires its signed-in owner.',
100
+ });
101
+ session = await integration.creationContext(viewer, sessionId);
102
+ const projectId = input.projectId ?? session.projectId;
103
+ if (!projectId)
104
+ throw new ApiError({
105
+ status: 'INVALID_ARGUMENT',
106
+ reason: 'SESSION_PROJECT_REQUIRED',
107
+ domain: 'projects',
108
+ message: 'This session has no project. Specify a project.',
109
+ });
110
+ input = { ...input, projectId };
111
+ }
83
112
  const delegated = await delegatedWrite(context, {
84
113
  title: `Create "${input.title}"`,
85
114
  rows: [{ op: 'issue.create', params: input }],
86
115
  });
87
116
  if (delegated) {
88
117
  const created = delegated.plan.rows[0]?.result?.created?.id;
118
+ if (created && session)
119
+ await session.link(created);
89
120
  return context.json({
90
121
  data: created ? await deps.queries.detail(viewer, created) : null,
91
122
  meta: delegated.meta,
92
123
  }, 201);
93
124
  }
94
- return context.json({ data: await deps.issues.create(viewer, input) }, 201);
125
+ const created = await deps.issues.create(viewer, input);
126
+ if (session)
127
+ await session.link(created.id);
128
+ return context.json({ data: created }, 201);
95
129
  });
96
130
  // A column per status, each with its first page; the list's filters apply.
97
131
  routes.get('/board', describeRoute({
@@ -114,30 +148,15 @@ export function createIssueRoutes(deps) {
114
148
  operationId: 'projectsListIssueStatuses',
115
149
  ...cliRoute({
116
150
  command: 'issue status list',
117
- flags: { projectId: { name: 'project' } },
118
151
  columns: ['key', 'name', 'category'],
119
- examples: ['issue status list --project <project>'],
152
+ examples: ['issue status list'],
120
153
  }),
121
- description: 'The statuses of `projectId`’s workflow, or of the default workflow without it. A `projectId` that names no project the caller sees is a 400 naming the field.',
154
+ description: 'The six fixed statuses, in order.',
122
155
  responses: {
123
156
  200: listResponse(StatusDefinitionSchema, BoundedListMeta),
124
157
  ...apiErrorResponses,
125
158
  },
126
- }), apiValidator('query', ProjectFilterQuery), async (context) => context.json(boundedList(await referencedBy('projectId', () => deps.queries.statuses(viewerOf(context), context.req.valid('query').projectId)))));
127
- routes.get('/starts', describeRoute({
128
- tags,
129
- summary: 'List the ways a new issue may start',
130
- operationId: 'projectsListIssueStarts',
131
- // The create form's start picker; `issue status list` and `issue create --help` name the statuses.
132
- ...cliRoute(false),
133
- description: 'The initial status and every status a `startOption` rule offers in `projectId`’s workflow, or the default workflow without it. A `projectId` that names no project the caller sees is a 400 naming the field.',
134
- responses: {
135
- 200: dataResponse(IssueStartsSchema),
136
- ...apiErrorResponses,
137
- },
138
- }), apiValidator('query', ProjectFilterQuery), async (context) => context.json({
139
- data: await referencedBy('projectId', () => deps.queries.starts(viewerOf(context), context.req.valid('query').projectId)),
140
- }));
159
+ }), (context) => context.json(boundedList(deps.queries.statuses())));
141
160
  routes.get('/:issueId', describeRoute({
142
161
  tags,
143
162
  summary: 'Get an issue',
@@ -148,16 +167,22 @@ export function createIssueRoutes(deps) {
148
167
  flags: { issueId: { name: 'issue' } },
149
168
  action: 'pm.issues/view',
150
169
  }),
151
- description: `The issue with its newest activities and comment threads, files, checklist, approvals, sub-issues and dependencies. ${idOrKey}`,
170
+ description: `The issue with its newest activities and comment threads, files, sub-issues and dependencies, and application progress when available. ${idOrKey}`,
152
171
  responses: {
153
172
  200: dataResponse(IssueDetailSchema),
154
173
  ...apiErrorResponses,
155
174
  404: notFound,
156
175
  },
157
- }), apiValidator('param', IssueParams), async (context) => context.json({
158
- data: await deps.queries.detail(viewerOf(context), context.req.valid('param').issueId),
159
- }));
160
- // `{ issue, pendingApproval }`: 202 when the status change waits for approval, the issue then unchanged.
176
+ }), apiValidator('param', IssueParams), async (context) => {
177
+ const viewer = viewerOf(context);
178
+ const issue = await deps.queries.detail(viewer, context.req.valid('param').issueId);
179
+ const integration = deps.session?.();
180
+ return context.json({
181
+ data: integration
182
+ ? { ...issue, progress: await integration.progress(viewer, issue) }
183
+ : issue,
184
+ });
185
+ });
161
186
  routes.patch('/:issueId', describeRoute({
162
187
  tags,
163
188
  summary: 'Update an issue',
@@ -170,7 +195,7 @@ export function createIssueRoutes(deps) {
170
195
  issueId: { name: 'issue' },
171
196
  statusKey: {
172
197
  name: 'status',
173
- description: "Move it to this status, through its workflow's rules and approvals.",
198
+ description: 'Move it to this status: backlog, in_progress, blocked, in_review, done or cancelled.',
174
199
  },
175
200
  revision: { hidden: true },
176
201
  ownerUserId: { name: 'owner' },
@@ -178,21 +203,24 @@ export function createIssueRoutes(deps) {
178
203
  projectId: { name: 'project' },
179
204
  labelIds: { name: 'label' },
180
205
  description: { contentFile: true },
206
+ needsYou: { name: 'needs-you', contentFile: true },
207
+ next: { contentFile: true },
208
+ acceptance: { contentFile: true },
181
209
  },
182
210
  action: 'pm.issues/edit',
183
211
  examples: [
184
- 'issue update PM-12 --status in_review',
212
+ 'issue update PM-12 --status in_review --needs-you "Review the change and accept it or send it back."',
213
+ 'issue update PM-12 --status in_review --needs-you "Check the export filter and accept it." --acceptance-file report.md',
185
214
  'issue update PM-12 --file change.json',
186
215
  ],
187
216
  }),
188
217
  description: `Needs \`edit\` on the issue; closing it and changing its owner need \`close\` and \`change-owner\`. ${idOrKey}`,
189
218
  responses: {
190
219
  200: dataResponse(UpdateIssueResultSchema, 'The issue after the change.'),
191
- 202: dataResponse(UpdateIssueResultSchema, 'The status change waits for approval: the issue is unchanged, nothing else in the request is applied, and `pendingApproval` is the request that holds it.'),
192
220
  ...apiErrorResponses,
193
- 400: apiErrorResponse(400, `${workflowRefused} Also when a status change already waits for approval (\`APPROVAL_PENDING\`).`),
221
+ 400: apiErrorResponse(400, statusRefused),
194
222
  404: notFound,
195
- 409: apiErrorResponse(409, 'When the issue changed since `revision` (`REVISION_CONFLICT`): read it again.'),
223
+ 409: apiErrorResponse(409, 'When the issue changed since `revision` (`REVISION_CONFLICT`), or its dependency graph changed (`DEPENDENCY_GRAPH_CHANGED`): read it again and retry.'),
196
224
  },
197
225
  }), apiValidator('param', IssueParams), apiValidator('json', UpdateIssueBody), async (context) => {
198
226
  const viewer = viewerOf(context);
@@ -204,17 +232,14 @@ export function createIssueRoutes(deps) {
204
232
  });
205
233
  if (delegated)
206
234
  return context.json({
207
- data: {
208
- issue: await deps.queries.detail(viewer, issueId),
209
- pendingApproval: null,
210
- },
235
+ data: { issue: await deps.queries.detail(viewer, issueId) },
211
236
  meta: delegated.meta,
212
237
  });
213
- const { pendingApproval, ...issue } = await deps.issues.update(viewer, issueId, {
238
+ const issue = await deps.issues.update(viewer, issueId, {
214
239
  ...set,
215
240
  revision: revision ?? (await deps.queries.detail(viewer, issueId)).revision,
216
241
  });
217
- return context.json({ data: { issue, pendingApproval: pendingApproval ?? null } }, pendingApproval ? 202 : 200);
242
+ return context.json({ data: { issue } }, 200);
218
243
  });
219
244
  routes.delete('/:issueId', describeRoute({
220
245
  tags,
@@ -232,6 +257,7 @@ export function createIssueRoutes(deps) {
232
257
  204: emptyResponse(),
233
258
  ...apiErrorResponses,
234
259
  404: notFound,
260
+ 409: apiErrorResponse(409, 'When the dependency graph changed (`DEPENDENCY_GRAPH_CHANGED`): reload and retry the deletion.'),
235
261
  },
236
262
  }), apiValidator('param', IssueParams), async (context) => {
237
263
  refuseDelegated(context);
@@ -254,6 +280,8 @@ export function createIssueRoutes(deps) {
254
280
  200: dataResponse(IssueSchema),
255
281
  ...apiErrorResponses,
256
282
  404: apiErrorResponse(404, 'When no deleted issue has that id.'),
283
+ 400: apiErrorResponse(400, 'When restoring its waits would create a cycle (`DEPENDENCY_CYCLE`).'),
284
+ 409: apiErrorResponse(409, 'When the dependency graph changed (`DEPENDENCY_GRAPH_CHANGED`): reload and retry.'),
257
285
  },
258
286
  }), apiValidator('param', IssueParams), async (context) => {
259
287
  refuseDelegated(context);