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

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 (666) hide show
  1. package/CHANGELOG.md +276 -0
  2. package/README.md +78 -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 +14 -9
  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/attachments/attachment.routes.d.ts.map +1 -1
  206. package/dist/server/domains/attachments/attachment.routes.js +13 -1
  207. package/dist/server/domains/attachments/attachment.routes.js.map +1 -1
  208. package/dist/server/domains/attachments/attachment.service.d.ts +3 -1
  209. package/dist/server/domains/attachments/attachment.service.d.ts.map +1 -1
  210. package/dist/server/domains/attachments/attachment.service.js +36 -2
  211. package/dist/server/domains/attachments/attachment.service.js.map +1 -1
  212. package/dist/server/domains/attachments/attachment.store.d.ts +5 -0
  213. package/dist/server/domains/attachments/attachment.store.d.ts.map +1 -1
  214. package/dist/server/domains/attachments/attachment.store.js +27 -0
  215. package/dist/server/domains/attachments/attachment.store.js.map +1 -1
  216. package/dist/server/domains/comments/comment.queries.d.ts +42 -8
  217. package/dist/server/domains/comments/comment.queries.d.ts.map +1 -1
  218. package/dist/server/domains/comments/comment.queries.js +69 -8
  219. package/dist/server/domains/comments/comment.queries.js.map +1 -1
  220. package/dist/server/domains/comments/comment.routes.d.ts +1 -1
  221. package/dist/server/domains/comments/comment.routes.js +4 -4
  222. package/dist/server/domains/comments/comment.routes.js.map +1 -1
  223. package/dist/server/domains/comments/comment.service.d.ts +2 -2
  224. package/dist/server/domains/comments/comment.service.d.ts.map +1 -1
  225. package/dist/server/domains/comments/comment.service.js +18 -10
  226. package/dist/server/domains/comments/comment.service.js.map +1 -1
  227. package/dist/server/domains/comments/comment.store.d.ts +22 -1
  228. package/dist/server/domains/comments/comment.store.d.ts.map +1 -1
  229. package/dist/server/domains/comments/comment.store.js +65 -2
  230. package/dist/server/domains/comments/comment.store.js.map +1 -1
  231. package/dist/server/domains/comments/index.d.ts +1 -1
  232. package/dist/server/domains/comments/index.d.ts.map +1 -1
  233. package/dist/server/domains/comments/index.js.map +1 -1
  234. package/dist/server/domains/comments/ports.d.ts +7 -2
  235. package/dist/server/domains/comments/ports.d.ts.map +1 -1
  236. package/dist/server/domains/invitations/invitation.routes.d.ts +2 -1
  237. package/dist/server/domains/invitations/invitation.routes.d.ts.map +1 -1
  238. package/dist/server/domains/invitations/invitation.routes.js +27 -10
  239. package/dist/server/domains/invitations/invitation.routes.js.map +1 -1
  240. package/dist/server/domains/invitations/invitation.service.d.ts +1 -1
  241. package/dist/server/domains/invitations/invitation.service.d.ts.map +1 -1
  242. package/dist/server/domains/invitations/invitation.service.js +19 -3
  243. package/dist/server/domains/invitations/invitation.service.js.map +1 -1
  244. package/dist/server/domains/issues/index.d.ts +3 -3
  245. package/dist/server/domains/issues/index.d.ts.map +1 -1
  246. package/dist/server/domains/issues/index.js +2 -2
  247. package/dist/server/domains/issues/index.js.map +1 -1
  248. package/dist/server/domains/issues/issue.context.d.ts +6 -22
  249. package/dist/server/domains/issues/issue.context.d.ts.map +1 -1
  250. package/dist/server/domains/issues/issue.context.js +88 -105
  251. package/dist/server/domains/issues/issue.context.js.map +1 -1
  252. package/dist/server/domains/issues/issue.events.d.ts +5 -1
  253. package/dist/server/domains/issues/issue.events.d.ts.map +1 -1
  254. package/dist/server/domains/issues/issue.fields.d.ts +5 -3
  255. package/dist/server/domains/issues/issue.fields.d.ts.map +1 -1
  256. package/dist/server/domains/issues/issue.fields.js +50 -16
  257. package/dist/server/domains/issues/issue.fields.js.map +1 -1
  258. package/dist/server/domains/issues/issue.projects.d.ts +2 -2
  259. package/dist/server/domains/issues/issue.projects.d.ts.map +1 -1
  260. package/dist/server/domains/issues/issue.projects.js +1 -2
  261. package/dist/server/domains/issues/issue.projects.js.map +1 -1
  262. package/dist/server/domains/issues/issue.queries.d.ts +26 -7
  263. package/dist/server/domains/issues/issue.queries.d.ts.map +1 -1
  264. package/dist/server/domains/issues/issue.queries.js +137 -58
  265. package/dist/server/domains/issues/issue.queries.js.map +1 -1
  266. package/dist/server/domains/issues/issue.routes.d.ts +3 -1
  267. package/dist/server/domains/issues/issue.routes.d.ts.map +1 -1
  268. package/dist/server/domains/issues/issue.routes.js +74 -46
  269. package/dist/server/domains/issues/issue.routes.js.map +1 -1
  270. package/dist/server/domains/issues/issue.service.d.ts +22 -44
  271. package/dist/server/domains/issues/issue.service.d.ts.map +1 -1
  272. package/dist/server/domains/issues/issue.service.js +68 -82
  273. package/dist/server/domains/issues/issue.service.js.map +1 -1
  274. package/dist/server/domains/issues/issue.status.d.ts +7 -10
  275. package/dist/server/domains/issues/issue.status.d.ts.map +1 -1
  276. package/dist/server/domains/issues/issue.status.js +6 -22
  277. package/dist/server/domains/issues/issue.status.js.map +1 -1
  278. package/dist/server/domains/issues/issue.store.d.ts +11 -0
  279. package/dist/server/domains/issues/issue.store.d.ts.map +1 -1
  280. package/dist/server/domains/issues/issue.store.js +37 -0
  281. package/dist/server/domains/issues/issue.store.js.map +1 -1
  282. package/dist/server/domains/issues/ports.d.ts +35 -36
  283. package/dist/server/domains/issues/ports.d.ts.map +1 -1
  284. package/dist/server/domains/issues/ports.js +1 -5
  285. package/dist/server/domains/issues/ports.js.map +1 -1
  286. package/dist/server/domains/notices/notice.planner.d.ts +2 -1
  287. package/dist/server/domains/notices/notice.planner.d.ts.map +1 -1
  288. package/dist/server/domains/notices/notice.planner.js +2 -1
  289. package/dist/server/domains/notices/notice.planner.js.map +1 -1
  290. package/dist/server/domains/notices/notice.rules.d.ts +1 -4
  291. package/dist/server/domains/notices/notice.rules.d.ts.map +1 -1
  292. package/dist/server/domains/notices/notice.rules.js +4 -5
  293. package/dist/server/domains/notices/notice.rules.js.map +1 -1
  294. package/dist/server/domains/plans/intake/intake.service.d.ts +2 -0
  295. package/dist/server/domains/plans/intake/intake.service.d.ts.map +1 -1
  296. package/dist/server/domains/plans/intake/intake.service.js +14 -0
  297. package/dist/server/domains/plans/intake/intake.service.js.map +1 -1
  298. package/dist/server/domains/plans/intake/intake.text.d.ts +5 -6
  299. package/dist/server/domains/plans/intake/intake.text.d.ts.map +1 -1
  300. package/dist/server/domains/plans/intake/intake.text.js +5 -6
  301. package/dist/server/domains/plans/intake/intake.text.js.map +1 -1
  302. package/dist/server/domains/plans/plan.engine.d.ts.map +1 -1
  303. package/dist/server/domains/plans/plan.engine.js +6 -0
  304. package/dist/server/domains/plans/plan.engine.js.map +1 -1
  305. package/dist/server/domains/plans/plan.ops.d.ts +3 -3
  306. package/dist/server/domains/plans/plan.ops.d.ts.map +1 -1
  307. package/dist/server/domains/plans/plan.ops.js +23 -13
  308. package/dist/server/domains/plans/plan.ops.js.map +1 -1
  309. package/dist/server/domains/plans/plan.schemas.d.ts.map +1 -1
  310. package/dist/server/domains/plans/plan.schemas.js +26 -10
  311. package/dist/server/domains/plans/plan.schemas.js.map +1 -1
  312. package/dist/server/domains/projects/index.d.ts +1 -1
  313. package/dist/server/domains/projects/index.d.ts.map +1 -1
  314. package/dist/server/domains/projects/index.js.map +1 -1
  315. package/dist/server/domains/projects/project-resources.d.ts +5 -0
  316. package/dist/server/domains/projects/project-resources.d.ts.map +1 -1
  317. package/dist/server/domains/projects/project-resources.js +43 -1
  318. package/dist/server/domains/projects/project-resources.js.map +1 -1
  319. package/dist/server/domains/projects/project.events.d.ts +10 -0
  320. package/dist/server/domains/projects/project.events.d.ts.map +1 -0
  321. package/dist/server/domains/projects/project.events.js +2 -0
  322. package/dist/server/domains/projects/project.events.js.map +1 -0
  323. package/dist/server/domains/projects/project.routes.d.ts.map +1 -1
  324. package/dist/server/domains/projects/project.routes.js +1 -3
  325. package/dist/server/domains/projects/project.routes.js.map +1 -1
  326. package/dist/server/domains/projects/project.service.d.ts +1 -7
  327. package/dist/server/domains/projects/project.service.d.ts.map +1 -1
  328. package/dist/server/domains/projects/project.service.js +2 -17
  329. package/dist/server/domains/projects/project.service.js.map +1 -1
  330. package/dist/server/domains/projects/project.store.d.ts +0 -1
  331. package/dist/server/domains/projects/project.store.d.ts.map +1 -1
  332. package/dist/server/domains/projects/project.store.js +0 -1
  333. package/dist/server/domains/projects/project.store.js.map +1 -1
  334. package/dist/server/domains/reports/report.service.d.ts +1 -12
  335. package/dist/server/domains/reports/report.service.d.ts.map +1 -1
  336. package/dist/server/domains/reports/report.service.js +92 -136
  337. package/dist/server/domains/reports/report.service.js.map +1 -1
  338. package/dist/server/domains/settings/settings.store.d.ts +4 -4
  339. package/dist/server/domains/settings/settings.store.js +2 -2
  340. package/dist/server/domains/statuses/event-types.d.ts +16 -0
  341. package/dist/server/domains/statuses/event-types.d.ts.map +1 -0
  342. package/dist/server/domains/statuses/event-types.js +31 -0
  343. package/dist/server/domains/statuses/event-types.js.map +1 -0
  344. package/dist/server/domains/statuses/index.d.ts +4 -0
  345. package/dist/server/domains/statuses/index.d.ts.map +1 -0
  346. package/dist/server/domains/statuses/index.js +4 -0
  347. package/dist/server/domains/statuses/index.js.map +1 -0
  348. package/dist/server/domains/statuses/status.catalog.d.ts +15 -0
  349. package/dist/server/domains/statuses/status.catalog.d.ts.map +1 -0
  350. package/dist/server/domains/statuses/status.catalog.js +119 -0
  351. package/dist/server/domains/statuses/status.catalog.js.map +1 -0
  352. package/dist/server/domains/statuses/status.events.d.ts +15 -0
  353. package/dist/server/domains/statuses/status.events.d.ts.map +1 -0
  354. package/dist/server/domains/statuses/status.events.js +2 -0
  355. package/dist/server/domains/statuses/status.events.js.map +1 -0
  356. package/dist/server/domains/statuses/status.fire.d.ts +48 -0
  357. package/dist/server/domains/statuses/status.fire.d.ts.map +1 -0
  358. package/dist/server/domains/statuses/status.fire.js +38 -0
  359. package/dist/server/domains/statuses/status.fire.js.map +1 -0
  360. package/dist/server/domains/subscriptions/subscription.routes.d.ts.map +1 -1
  361. package/dist/server/domains/subscriptions/subscription.routes.js +4 -2
  362. package/dist/server/domains/subscriptions/subscription.routes.js.map +1 -1
  363. package/dist/server/domains/subtasks/index.d.ts +1 -0
  364. package/dist/server/domains/subtasks/index.d.ts.map +1 -1
  365. package/dist/server/domains/subtasks/index.js +1 -0
  366. package/dist/server/domains/subtasks/index.js.map +1 -1
  367. package/dist/server/domains/subtasks/subtask.blocking.d.ts +10 -5
  368. package/dist/server/domains/subtasks/subtask.blocking.d.ts.map +1 -1
  369. package/dist/server/domains/subtasks/subtask.blocking.js +35 -15
  370. package/dist/server/domains/subtasks/subtask.blocking.js.map +1 -1
  371. package/dist/server/domains/subtasks/subtask.guard.d.ts +12 -0
  372. package/dist/server/domains/subtasks/subtask.guard.d.ts.map +1 -0
  373. package/dist/server/domains/subtasks/subtask.guard.js +23 -0
  374. package/dist/server/domains/subtasks/subtask.guard.js.map +1 -0
  375. package/dist/server/domains/subtasks/subtask.release.d.ts +7 -11
  376. package/dist/server/domains/subtasks/subtask.release.d.ts.map +1 -1
  377. package/dist/server/domains/subtasks/subtask.release.js +9 -7
  378. package/dist/server/domains/subtasks/subtask.release.js.map +1 -1
  379. package/dist/server/domains/subtasks/subtask.routes.d.ts +1 -0
  380. package/dist/server/domains/subtasks/subtask.routes.d.ts.map +1 -1
  381. package/dist/server/domains/subtasks/subtask.routes.js +31 -3
  382. package/dist/server/domains/subtasks/subtask.routes.js.map +1 -1
  383. package/dist/server/domains/subtasks/subtask.service.d.ts +5 -5
  384. package/dist/server/domains/subtasks/subtask.service.d.ts.map +1 -1
  385. package/dist/server/domains/subtasks/subtask.service.js +98 -20
  386. package/dist/server/domains/subtasks/subtask.service.js.map +1 -1
  387. package/dist/server/domains/subtasks/subtask.store.d.ts +7 -0
  388. package/dist/server/domains/subtasks/subtask.store.d.ts.map +1 -1
  389. package/dist/server/domains/subtasks/subtask.store.js +34 -0
  390. package/dist/server/domains/subtasks/subtask.store.js.map +1 -1
  391. package/dist/server/index.d.ts +1 -0
  392. package/dist/server/index.d.ts.map +1 -1
  393. package/dist/server/index.js +1 -0
  394. package/dist/server/index.js.map +1 -1
  395. package/dist/server/kernel/activity.d.ts +5 -2
  396. package/dist/server/kernel/activity.d.ts.map +1 -1
  397. package/dist/server/kernel/activity.js +28 -1
  398. package/dist/server/kernel/activity.js.map +1 -1
  399. package/dist/server/kernel/actor.d.ts +2 -0
  400. package/dist/server/kernel/actor.d.ts.map +1 -1
  401. package/dist/server/kernel/actor.js.map +1 -1
  402. package/dist/server/kernel/http.d.ts.map +1 -1
  403. package/dist/server/kernel/http.js +2 -3
  404. package/dist/server/kernel/http.js.map +1 -1
  405. package/dist/server/kernel/kinds.d.ts +24 -6
  406. package/dist/server/kernel/kinds.d.ts.map +1 -1
  407. package/dist/server/kernel/kinds.js +21 -1
  408. package/dist/server/kernel/kinds.js.map +1 -1
  409. package/dist/server/kernel/transaction-read.d.ts +4 -0
  410. package/dist/server/kernel/transaction-read.d.ts.map +1 -0
  411. package/dist/server/kernel/transaction-read.js +30 -0
  412. package/dist/server/kernel/transaction-read.js.map +1 -0
  413. package/dist/server/kernel/work.d.ts +16 -6
  414. package/dist/server/kernel/work.d.ts.map +1 -1
  415. package/dist/server/kernel/work.js +33 -14
  416. package/dist/server/kernel/work.js.map +1 -1
  417. package/dist/server/lifecycle/move.d.ts +1 -0
  418. package/dist/server/lifecycle/move.d.ts.map +1 -1
  419. package/dist/server/lifecycle/move.js +2 -0
  420. package/dist/server/lifecycle/move.js.map +1 -1
  421. package/dist/server/lifecycle/registry.d.ts +5 -0
  422. package/dist/server/lifecycle/registry.d.ts.map +1 -1
  423. package/dist/server/lifecycle/registry.js.map +1 -1
  424. package/dist/server/locales/en-US.d.ts +0 -9
  425. package/dist/server/locales/en-US.d.ts.map +1 -1
  426. package/dist/server/locales/en-US.js +0 -9
  427. package/dist/server/locales/en-US.js.map +1 -1
  428. package/dist/server/locales/zh-CN.d.ts.map +1 -1
  429. package/dist/server/locales/zh-CN.js +2 -11
  430. package/dist/server/locales/zh-CN.js.map +1 -1
  431. package/dist/server/providers/change-announcer.d.ts +28 -0
  432. package/dist/server/providers/change-announcer.d.ts.map +1 -0
  433. package/dist/server/providers/change-announcer.js +75 -0
  434. package/dist/server/providers/change-announcer.js.map +1 -0
  435. package/dist/server/providers/notifications.d.ts +1 -0
  436. package/dist/server/providers/notifications.d.ts.map +1 -1
  437. package/dist/server/providers/notifications.js +6 -120
  438. package/dist/server/providers/notifications.js.map +1 -1
  439. package/dist/server/providers/projects.d.ts +3 -8
  440. package/dist/server/providers/projects.d.ts.map +1 -1
  441. package/dist/server/providers/projects.js +14 -37
  442. package/dist/server/providers/projects.js.map +1 -1
  443. package/dist/server/routes/api.d.ts.map +1 -1
  444. package/dist/server/routes/api.js +5 -8
  445. package/dist/server/routes/api.js.map +1 -1
  446. package/dist/server/routes/schemas.d.ts +20 -29
  447. package/dist/server/routes/schemas.d.ts.map +1 -1
  448. package/dist/server/routes/schemas.js +405 -289
  449. package/dist/server/routes/schemas.js.map +1 -1
  450. package/dist/server/tokens.d.ts +22 -35
  451. package/dist/server/tokens.d.ts.map +1 -1
  452. package/dist/server/tokens.js +5 -16
  453. package/dist/server/tokens.js.map +1 -1
  454. package/dist/shared/access.d.ts +0 -1
  455. package/dist/shared/access.d.ts.map +1 -1
  456. package/dist/shared/access.js +2 -11
  457. package/dist/shared/access.js.map +1 -1
  458. package/dist/shared/attachments.d.ts +29 -0
  459. package/dist/shared/attachments.d.ts.map +1 -1
  460. package/dist/shared/attachments.js +7 -0
  461. package/dist/shared/attachments.js.map +1 -1
  462. package/dist/shared/comments.d.ts +3 -0
  463. package/dist/shared/comments.d.ts.map +1 -1
  464. package/dist/shared/comments.js.map +1 -1
  465. package/dist/shared/intake-ai.d.ts +3 -1
  466. package/dist/shared/intake-ai.d.ts.map +1 -1
  467. package/dist/shared/intake-ai.js.map +1 -1
  468. package/dist/shared/invitations.d.ts +1 -1
  469. package/dist/shared/invitations.d.ts.map +1 -1
  470. package/dist/shared/issues.d.ts +32 -36
  471. package/dist/shared/issues.d.ts.map +1 -1
  472. package/dist/shared/issues.js +5 -0
  473. package/dist/shared/issues.js.map +1 -1
  474. package/dist/shared/kinds.d.ts +3 -1
  475. package/dist/shared/kinds.d.ts.map +1 -1
  476. package/dist/shared/kinds.js +1 -1
  477. package/dist/shared/locales/access.en-US.d.ts +0 -1
  478. package/dist/shared/locales/access.en-US.d.ts.map +1 -1
  479. package/dist/shared/locales/access.en-US.js +1 -2
  480. package/dist/shared/locales/access.en-US.js.map +1 -1
  481. package/dist/shared/locales/access.zh-CN.d.ts.map +1 -1
  482. package/dist/shared/locales/access.zh-CN.js +1 -2
  483. package/dist/shared/locales/access.zh-CN.js.map +1 -1
  484. package/dist/shared/plans.d.ts +28 -10
  485. package/dist/shared/plans.d.ts.map +1 -1
  486. package/dist/shared/plans.js +2 -1
  487. package/dist/shared/plans.js.map +1 -1
  488. package/dist/shared/projects.d.ts +0 -4
  489. package/dist/shared/projects.d.ts.map +1 -1
  490. package/dist/shared/projects.js.map +1 -1
  491. package/dist/shared/realtime.d.ts +10 -3
  492. package/dist/shared/realtime.d.ts.map +1 -1
  493. package/dist/shared/realtime.js +3 -2
  494. package/dist/shared/realtime.js.map +1 -1
  495. package/dist/shared/statuses.d.ts +42 -0
  496. package/dist/shared/statuses.d.ts.map +1 -0
  497. package/dist/shared/statuses.js +73 -0
  498. package/dist/shared/statuses.js.map +1 -0
  499. package/dist/shared/subtasks.d.ts +8 -3
  500. package/dist/shared/subtasks.d.ts.map +1 -1
  501. package/package.json +21 -29
  502. package/skills/nocobase-app-plugin-projects/SKILL.md +34 -57
  503. package/dist/client/lib/built-in-rule-editors.d.ts +0 -13
  504. package/dist/client/lib/built-in-rule-editors.d.ts.map +0 -1
  505. package/dist/client/lib/built-in-rule-editors.js +0 -86
  506. package/dist/client/lib/built-in-rule-editors.js.map +0 -1
  507. package/dist/client/lib/built-in-rule-types.d.ts +0 -3
  508. package/dist/client/lib/built-in-rule-types.d.ts.map +0 -1
  509. package/dist/client/lib/built-in-rule-types.js +0 -63
  510. package/dist/client/lib/built-in-rule-types.js.map +0 -1
  511. package/dist/client/lib/status-rule-types.d.ts +0 -60
  512. package/dist/client/lib/status-rule-types.d.ts.map +0 -1
  513. package/dist/client/lib/status-rule-types.js +0 -38
  514. package/dist/client/lib/status-rule-types.js.map +0 -1
  515. package/dist/client/lib/workflow-events.d.ts +0 -25
  516. package/dist/client/lib/workflow-events.d.ts.map +0 -1
  517. package/dist/client/lib/workflow-events.js +0 -30
  518. package/dist/client/lib/workflow-events.js.map +0 -1
  519. package/dist/client/pages/config/workflow-detail.d.ts +0 -10
  520. package/dist/client/pages/config/workflow-detail.d.ts.map +0 -1
  521. package/dist/client/pages/config/workflow-detail.js +0 -182
  522. package/dist/client/pages/config/workflow-detail.js.map +0 -1
  523. package/dist/client/pages/config/workflows/flow-editor.d.ts +0 -15
  524. package/dist/client/pages/config/workflows/flow-editor.d.ts.map +0 -1
  525. package/dist/client/pages/config/workflows/flow-editor.js +0 -76
  526. package/dist/client/pages/config/workflows/flow-editor.js.map +0 -1
  527. package/dist/client/pages/config/workflows/status-rules.d.ts +0 -21
  528. package/dist/client/pages/config/workflows/status-rules.d.ts.map +0 -1
  529. package/dist/client/pages/config/workflows/status-rules.js +0 -203
  530. package/dist/client/pages/config/workflows/status-rules.js.map +0 -1
  531. package/dist/client/pages/config/workflows/transitions-matrix.d.ts +0 -20
  532. package/dist/client/pages/config/workflows/transitions-matrix.d.ts.map +0 -1
  533. package/dist/client/pages/config/workflows/transitions-matrix.js +0 -114
  534. package/dist/client/pages/config/workflows/transitions-matrix.js.map +0 -1
  535. package/dist/client/pages/config/workflows/use-status-name.d.ts +0 -4
  536. package/dist/client/pages/config/workflows/use-status-name.d.ts.map +0 -1
  537. package/dist/client/pages/config/workflows/use-status-name.js +0 -17
  538. package/dist/client/pages/config/workflows/use-status-name.js.map +0 -1
  539. package/dist/client/pages/config/workflows/workflow-diagram.d.ts +0 -17
  540. package/dist/client/pages/config/workflows/workflow-diagram.d.ts.map +0 -1
  541. package/dist/client/pages/config/workflows/workflow-diagram.js +0 -298
  542. package/dist/client/pages/config/workflows/workflow-diagram.js.map +0 -1
  543. package/dist/client/pages/config/workflows/workflow-model.d.ts +0 -157
  544. package/dist/client/pages/config/workflows/workflow-model.d.ts.map +0 -1
  545. package/dist/client/pages/config/workflows/workflow-model.js +0 -403
  546. package/dist/client/pages/config/workflows/workflow-model.js.map +0 -1
  547. package/dist/client/pages/config/workflows/workflow-views.d.ts +0 -31
  548. package/dist/client/pages/config/workflows/workflow-views.d.ts.map +0 -1
  549. package/dist/client/pages/config/workflows/workflow-views.js +0 -76
  550. package/dist/client/pages/config/workflows/workflow-views.js.map +0 -1
  551. package/dist/client/pages/config/workflows.d.ts +0 -8
  552. package/dist/client/pages/config/workflows.d.ts.map +0 -1
  553. package/dist/client/pages/config/workflows.js +0 -139
  554. package/dist/client/pages/config/workflows.js.map +0 -1
  555. package/dist/client/pages/issues/detail/start-dialog.d.ts +0 -20
  556. package/dist/client/pages/issues/detail/start-dialog.d.ts.map +0 -1
  557. package/dist/client/pages/issues/detail/start-dialog.js +0 -31
  558. package/dist/client/pages/issues/detail/start-dialog.js.map +0 -1
  559. package/dist/client/pages/projects/workflow-select.d.ts +0 -14
  560. package/dist/client/pages/projects/workflow-select.d.ts.map +0 -1
  561. package/dist/client/pages/projects/workflow-select.js +0 -34
  562. package/dist/client/pages/projects/workflow-select.js.map +0 -1
  563. package/dist/server/domains/approvals/approval.events.d.ts +0 -47
  564. package/dist/server/domains/approvals/approval.events.d.ts.map +0 -1
  565. package/dist/server/domains/approvals/approval.events.js +0 -2
  566. package/dist/server/domains/approvals/approval.events.js.map +0 -1
  567. package/dist/server/domains/approvals/approval.lifecycle.d.ts +0 -8
  568. package/dist/server/domains/approvals/approval.lifecycle.d.ts.map +0 -1
  569. package/dist/server/domains/approvals/approval.lifecycle.js +0 -54
  570. package/dist/server/domains/approvals/approval.lifecycle.js.map +0 -1
  571. package/dist/server/domains/approvals/approval.routes.d.ts +0 -10
  572. package/dist/server/domains/approvals/approval.routes.d.ts.map +0 -1
  573. package/dist/server/domains/approvals/approval.routes.js +0 -86
  574. package/dist/server/domains/approvals/approval.routes.js.map +0 -1
  575. package/dist/server/domains/approvals/approval.service.d.ts +0 -72
  576. package/dist/server/domains/approvals/approval.service.d.ts.map +0 -1
  577. package/dist/server/domains/approvals/approval.service.js +0 -261
  578. package/dist/server/domains/approvals/approval.service.js.map +0 -1
  579. package/dist/server/domains/approvals/approval.store.d.ts +0 -42
  580. package/dist/server/domains/approvals/approval.store.d.ts.map +0 -1
  581. package/dist/server/domains/approvals/approval.store.js +0 -66
  582. package/dist/server/domains/approvals/approval.store.js.map +0 -1
  583. package/dist/server/domains/approvals/index.d.ts +0 -4
  584. package/dist/server/domains/approvals/index.d.ts.map +0 -1
  585. package/dist/server/domains/approvals/index.js +0 -3
  586. package/dist/server/domains/approvals/index.js.map +0 -1
  587. package/dist/server/domains/checklists/checklist.routes.d.ts +0 -9
  588. package/dist/server/domains/checklists/checklist.routes.d.ts.map +0 -1
  589. package/dist/server/domains/checklists/checklist.routes.js +0 -62
  590. package/dist/server/domains/checklists/checklist.routes.js.map +0 -1
  591. package/dist/server/domains/checklists/checklist.service.d.ts +0 -26
  592. package/dist/server/domains/checklists/checklist.service.d.ts.map +0 -1
  593. package/dist/server/domains/checklists/checklist.service.js +0 -80
  594. package/dist/server/domains/checklists/checklist.service.js.map +0 -1
  595. package/dist/server/domains/checklists/checklist.store.d.ts +0 -32
  596. package/dist/server/domains/checklists/checklist.store.d.ts.map +0 -1
  597. package/dist/server/domains/checklists/checklist.store.js +0 -66
  598. package/dist/server/domains/checklists/checklist.store.js.map +0 -1
  599. package/dist/server/domains/checklists/index.d.ts +0 -4
  600. package/dist/server/domains/checklists/index.d.ts.map +0 -1
  601. package/dist/server/domains/checklists/index.js +0 -4
  602. package/dist/server/domains/checklists/index.js.map +0 -1
  603. package/dist/server/domains/workflows/built-in-rule-types.d.ts +0 -40
  604. package/dist/server/domains/workflows/built-in-rule-types.d.ts.map +0 -1
  605. package/dist/server/domains/workflows/built-in-rule-types.js +0 -260
  606. package/dist/server/domains/workflows/built-in-rule-types.js.map +0 -1
  607. package/dist/server/domains/workflows/event-types.d.ts +0 -21
  608. package/dist/server/domains/workflows/event-types.d.ts.map +0 -1
  609. package/dist/server/domains/workflows/event-types.js +0 -31
  610. package/dist/server/domains/workflows/event-types.js.map +0 -1
  611. package/dist/server/domains/workflows/index.d.ts +0 -10
  612. package/dist/server/domains/workflows/index.d.ts.map +0 -1
  613. package/dist/server/domains/workflows/index.js +0 -10
  614. package/dist/server/domains/workflows/index.js.map +0 -1
  615. package/dist/server/domains/workflows/rule-types.d.ts +0 -125
  616. package/dist/server/domains/workflows/rule-types.d.ts.map +0 -1
  617. package/dist/server/domains/workflows/rule-types.js +0 -33
  618. package/dist/server/domains/workflows/rule-types.js.map +0 -1
  619. package/dist/server/domains/workflows/templates.d.ts +0 -62
  620. package/dist/server/domains/workflows/templates.d.ts.map +0 -1
  621. package/dist/server/domains/workflows/templates.js +0 -63
  622. package/dist/server/domains/workflows/templates.js.map +0 -1
  623. package/dist/server/domains/workflows/workflow.diff.d.ts +0 -14
  624. package/dist/server/domains/workflows/workflow.diff.d.ts.map +0 -1
  625. package/dist/server/domains/workflows/workflow.diff.js +0 -80
  626. package/dist/server/domains/workflows/workflow.diff.js.map +0 -1
  627. package/dist/server/domains/workflows/workflow.events.d.ts +0 -26
  628. package/dist/server/domains/workflows/workflow.events.d.ts.map +0 -1
  629. package/dist/server/domains/workflows/workflow.events.js +0 -2
  630. package/dist/server/domains/workflows/workflow.events.js.map +0 -1
  631. package/dist/server/domains/workflows/workflow.fire.d.ts +0 -38
  632. package/dist/server/domains/workflows/workflow.fire.d.ts.map +0 -1
  633. package/dist/server/domains/workflows/workflow.fire.js +0 -57
  634. package/dist/server/domains/workflows/workflow.fire.js.map +0 -1
  635. package/dist/server/domains/workflows/workflow.registry.d.ts +0 -27
  636. package/dist/server/domains/workflows/workflow.registry.d.ts.map +0 -1
  637. package/dist/server/domains/workflows/workflow.registry.js +0 -130
  638. package/dist/server/domains/workflows/workflow.registry.js.map +0 -1
  639. package/dist/server/domains/workflows/workflow.routes.d.ts +0 -6
  640. package/dist/server/domains/workflows/workflow.routes.d.ts.map +0 -1
  641. package/dist/server/domains/workflows/workflow.routes.js +0 -148
  642. package/dist/server/domains/workflows/workflow.routes.js.map +0 -1
  643. package/dist/server/domains/workflows/workflow.rules.d.ts +0 -14
  644. package/dist/server/domains/workflows/workflow.rules.d.ts.map +0 -1
  645. package/dist/server/domains/workflows/workflow.rules.js +0 -190
  646. package/dist/server/domains/workflows/workflow.rules.js.map +0 -1
  647. package/dist/server/domains/workflows/workflow.service.d.ts +0 -71
  648. package/dist/server/domains/workflows/workflow.service.d.ts.map +0 -1
  649. package/dist/server/domains/workflows/workflow.service.js +0 -365
  650. package/dist/server/domains/workflows/workflow.service.js.map +0 -1
  651. package/dist/server/domains/workflows/workflow.store.d.ts +0 -33
  652. package/dist/server/domains/workflows/workflow.store.d.ts.map +0 -1
  653. package/dist/server/domains/workflows/workflow.store.js +0 -148
  654. package/dist/server/domains/workflows/workflow.store.js.map +0 -1
  655. package/dist/shared/approvals.d.ts +0 -37
  656. package/dist/shared/approvals.d.ts.map +0 -1
  657. package/dist/shared/approvals.js +0 -4
  658. package/dist/shared/approvals.js.map +0 -1
  659. package/dist/shared/checklists.d.ts +0 -27
  660. package/dist/shared/checklists.d.ts.map +0 -1
  661. package/dist/shared/checklists.js +0 -7
  662. package/dist/shared/checklists.js.map +0 -1
  663. package/dist/shared/workflows.d.ts +0 -267
  664. package/dist/shared/workflows.d.ts.map +0 -1
  665. package/dist/shared/workflows.js +0 -149
  666. package/dist/shared/workflows.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { PRIORITIES } from '../../../shared/common.js';
2
- import { ISSUE_DESCRIPTION_MAX, ISSUE_TITLE_MAX, } from '../../../shared/issues.js';
2
+ import { ISSUE_DESCRIPTION_MAX, ISSUE_ACCEPTANCE_MAX, ISSUE_PROGRESS_MAX, ISSUE_TITLE_MAX, } from '../../../shared/issues.js';
3
3
  import { BLOCKED_BY_ON_CREATE_MAX, STAGE_MAX, } from '../../../shared/subtasks.js';
4
4
  import { inProjectScope, scopeOf } from '../../access/viewer.js';
5
5
  import { invalid } from '../../kernel/errors.js';
@@ -7,8 +7,34 @@ import { optionalId, optionalText, requiredText, stringList, validChoice, validD
7
7
  import { canManageProject, projectRelation } from '../projects/index.js';
8
8
  import { requireCloser, requireOwnerChanger, requireVisible, } from './issue.access.js';
9
9
  import { findIssue, parentOf } from './issue.store.js';
10
- import { isTerminal, } from './ports.js';
10
+ import { BACKLOG_STATUS, DEFAULT_START_STATUS, START_STATUSES, } from '../../../shared/statuses.js';
11
+ import { isTerminal } from './ports.js';
11
12
  const MAX_PARENT_DEPTH = 50;
13
+ /** Status writes and progress-only writes share these rules, including system events. */
14
+ export function progressValues(before, patch) {
15
+ const target = patch.statusKey ?? before.statusKey;
16
+ const needsOwner = target === 'blocked' || target === 'in_review';
17
+ const values = {};
18
+ const text = patch.needsYou === undefined
19
+ ? undefined
20
+ : optionalText(patch.needsYou, 'needsYou', ISSUE_PROGRESS_MAX);
21
+ if (!needsOwner)
22
+ values.needsYou = null;
23
+ else if (text !== undefined)
24
+ values.needsYou = text?.trim() ? text : null;
25
+ if (patch.next !== undefined)
26
+ values.next = optionalText(patch.next, 'next', ISSUE_PROGRESS_MAX)?.trim()
27
+ ? patch.next
28
+ : null;
29
+ if (target === 'done' || target === 'cancelled')
30
+ values.next = null;
31
+ // The delivery report outlives the review; only the next one replaces it.
32
+ if (patch.acceptance !== undefined)
33
+ values.acceptance = optionalText(patch.acceptance, 'acceptance', ISSUE_ACCEPTANCE_MAX)?.trim()
34
+ ? patch.acceptance
35
+ : null;
36
+ return values;
37
+ }
12
38
  const title = (value) => requiredText(value, 'title', ISSUE_TITLE_MAX, 'INVALID_TITLE');
13
39
  function description(value) {
14
40
  return optionalText(value, 'description', ISSUE_DESCRIPTION_MAX) ?? '';
@@ -97,7 +123,7 @@ function blockedBy(value) {
97
123
  }
98
124
  function status(catalog, value) {
99
125
  if (typeof value !== 'string' || !catalog.category(value))
100
- throw invalid('INVALID_STATUS', 'statusKey is not a status of this workflow.');
126
+ throw invalid('INVALID_STATUS', `statusKey must be one of ${catalog.statuses.map((item) => item.key).join(', ')}.`);
101
127
  return value;
102
128
  }
103
129
  async function labelIds(ctx, value) {
@@ -111,12 +137,17 @@ export async function resolveCreate(ctx, input) {
111
137
  ? (parentIssue?.projectId ?? null)
112
138
  : await project(ctx, input.projectId, scopeOf(ctx.viewer, 'pm.issues', 'create') === 'all');
113
139
  requireProjectInScope(ctx, projectId);
114
- const catalog = await ctx.statuses.forProject(ctx.conn, projectId);
115
- const statusKey = input.statusKey === undefined
116
- ? catalog.initialStatus
117
- : status(catalog, input.statusKey);
118
- if (isTerminal(catalog, statusKey))
119
- throw invalid('INVALID_STATUS', 'An issue cannot be created done or closed.');
140
+ const statusKey = input.statusKey === undefined ? DEFAULT_START_STATUS : input.statusKey;
141
+ if (typeof statusKey !== 'string' || !START_STATUSES.includes(statusKey))
142
+ throw invalid('INVALID_STATUS', `A new issue starts in ${START_STATUSES.join(' or ')}.`);
143
+ if (input.start === true && statusKey === BACKLOG_STATUS)
144
+ throw invalid('ISSUE_START_REQUIRES_IN_PROGRESS', 'An issue must be In progress to start work.', {
145
+ suggestions: [
146
+ {
147
+ message: 'To start work when creating an issue, add --status in_progress with --start (statusKey: in_progress in JSON).',
148
+ },
149
+ ],
150
+ });
120
151
  const setup = await setupOf(ctx, projectId);
121
152
  const projectSetup = input.projectSetup === true;
122
153
  if (projectSetup) {
@@ -137,7 +168,10 @@ export async function resolveCreate(ctx, input) {
137
168
  ownerUserId: input.ownerUserId === undefined
138
169
  ? await defaultOwner(ctx)
139
170
  : await owner(ctx, input.ownerUserId),
140
- executor: input.executor === undefined ? null : await executor(ctx, input.executor),
171
+ // Left out (not null): the default executor a kind names, such as an application's coordinating agent.
172
+ executor: input.executor === undefined
173
+ ? await ctx.kinds.defaultExecutor(ctx.conn)
174
+ : await executor(ctx, input.executor),
141
175
  parentIssueId: parentIssue?.id ?? null,
142
176
  stage: input.stage === undefined
143
177
  ? null
@@ -162,8 +196,7 @@ async function setupOf(ctx, projectId) {
162
196
  const issue = await findIssue(ctx.conn, id);
163
197
  if (!issue || issue.deletedAt)
164
198
  return null;
165
- const catalog = await ctx.statuses.forProject(ctx.conn, issue.projectId);
166
- return isTerminal(catalog, issue.statusKey) ? null : issue;
199
+ return isTerminal(ctx.statuses.catalog(), issue.statusKey) ? null : issue;
167
200
  }
168
201
  /** Column values and activities for an update; enforces the rules of the fields it changes. */
169
202
  export async function resolveUpdate(ctx, before, patch) {
@@ -204,8 +237,12 @@ export async function resolveUpdate(ctx, before, patch) {
204
237
  ? before.projectId
205
238
  : await project(ctx, patch.projectId);
206
239
  change('projectId', 'project_changed', projectId);
207
- const catalog = await ctx.statuses.forProject(ctx.conn, projectId);
240
+ const catalog = ctx.statuses.catalog();
208
241
  let statusChange;
242
+ const progress = progressValues(before, patch);
243
+ for (const field of ['needsYou', 'next', 'acceptance'])
244
+ if (progress[field] !== undefined && progress[field] !== before[field])
245
+ values[field] = progress[field];
209
246
  if (patch.statusKey !== undefined) {
210
247
  const target = status(catalog, patch.statusKey);
211
248
  if (target !== before.statusKey) {
@@ -215,9 +252,6 @@ export async function resolveUpdate(ctx, before, patch) {
215
252
  statusChange = { to: target, catalog };
216
253
  }
217
254
  }
218
- else if (!catalog.category(before.statusKey)) {
219
- throw invalid('STATUS_REQUIRED', `The new project has no status ${before.statusKey}; choose one with statusKey.`);
220
- }
221
255
  if (patch.ownerUserId !== undefined) {
222
256
  const next = await owner(ctx, patch.ownerUserId);
223
257
  if (next !== before.ownerUserId) {
@@ -1 +1 @@
1
- {"version":3,"file":"issue.fields.js","sourceRoot":"","sources":["../../../../server/domains/issues/issue.fields.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAiB,MAAM,2BAA2B,CAAC;AACtE,OAAO,EACL,qBAAqB,EACrB,eAAe,GAKhB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,wBAAwB,EACxB,SAAS,GACV,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAe,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EACL,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,GACV,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,UAAU,GAGX,MAAM,YAAY,CAAC;AAEpB,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAmB5B,MAAM,KAAK,GAAG,CAAC,KAAc,EAAE,EAAE,CAC/B,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC;AAEjE,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,qBAAqB,CAAC,IAAI,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAY,EAAE,CAC5C,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC;AAEjE,KAAK,UAAU,KAAK,CAAC,GAAiB,EAAE,KAAc;IACpD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;QAChC,MAAM,OAAO,CAAC,gBAAgB,EAAE,2BAA2B,CAAC,CAAC;IAC/D,qHAAqH;IACrH,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3E,MAAM,OAAO,CAAC,eAAe,EAAE,sCAAsC,CAAC,CAAC;IACzE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,oFAAoF;AACpF,KAAK,UAAU,YAAY,CAAC,GAAiB;IAC3C,IAAI,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;QACvD,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3B,MAAM,OAAO,CACX,gBAAgB,EAChB,+DAA+D,CAChE,CAAC;AACJ,CAAC;AAED,kHAAkH;AAClH,KAAK,UAAU,QAAQ,CACrB,GAAiB,EACjB,KAAc;IAEd,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,KAAK,GAAG,KAA0B,CAAC;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC7D,MAAM,OAAO,CAAC,kBAAkB,EAAE,wCAAwC,CAAC,CAAC;IAC9E,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,EAAE;QAC3C,MAAM,OAAO,CAAC,kBAAkB,EAAE,0BAA0B,CAAC,CAAC;IAChE,MAAM,GAAG,CAAC,KAAK,CAAC,eAAe,CAC7B,GAAG,CAAC,IAAI,EACR,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,EAAE,EACR,GAAG,CAAC,MAAM,CAAC,MAAM,CAClB,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,OAAO,CACpB,GAAiB,EACjB,KAAc,EACd,UAAU,GAAG,KAAK;IAElB,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC1C,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAChB,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjE,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACjD,MAAM,OAAO,CAAC,iBAAiB,EAAE,yCAAyC,CAAC,CAAC;IAC9E,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,uGAAuG;AACvG,SAAS,qBAAqB,CAAC,GAAiB,EAAE,EAAiB;IACjE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;QACjC,MAAM,OAAO,CACX,iBAAiB,EACjB,gEAAgE,CACjE,CAAC;AACN,CAAC;AAED,+FAA+F;AAC/F,KAAK,UAAU,MAAM,CACnB,GAAiB,EACjB,KAAc,EACd,OAAsB;IAEtB,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IAC9C,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAChE,GAAG,EAAE,CAAC,IAAI,CACX,CAAC;IACF,IAAI,CAAC,KAAK;QACR,MAAM,OAAO,CACX,gBAAgB,EAChB,2CAA2C,CAC5C,CAAC;IACJ,IAAI,MAAM,GAAkB,KAAK,CAAC,EAAE,CAAC;IACrC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,MAAM,IAAI,KAAK,GAAG,gBAAgB,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACnE,IAAI,MAAM,KAAK,OAAO;YACpB,MAAM,OAAO,CAAC,gBAAgB,EAAE,sCAAsC,CAAC,CAAC;QAC1E,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+EAA+E;AAC/E,SAAS,KAAK,CAAC,KAAc,EAAE,aAA4B;IACzD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;QACxB,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,SAAS;QAEjB,MAAM,OAAO,CACX,eAAe,EACf,qCAAqC,SAAS,YAAY,CAC3D,CAAC;IACJ,IAAI,CAAC,aAAa;QAChB,MAAM,OAAO,CAAC,eAAe,EAAE,+BAA+B,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC5C,IAAI,IAAI,CAAC,MAAM,GAAG,wBAAwB;QACxC,MAAM,OAAO,CACX,oBAAoB,EACpB,WAAW,wBAAwB,uBAAuB,CAC3D,CAAC;IACJ,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,MAAM,CAAC,OAAsB,EAAE,KAAc;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvD,MAAM,OAAO,CACX,gBAAgB,EAChB,6CAA6C,CAC9C,CAAC;IACJ,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAiB,EAAE,KAAc;IACvD,OAAO,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;AAC7E,CAAC;AAsBD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAiB,EACjB,KAAyB;IAEzB,MAAM,WAAW,GACf,KAAK,CAAC,aAAa,KAAK,SAAS;QAC/B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACnD,MAAM,SAAS,GACb,KAAK,CAAC,SAAS,KAAK,SAAS;QAC3B,CAAC,CAAC,CAAC,WAAW,EAAE,SAAS,IAAI,IAAI,CAAC;QAClC,CAAC,CAAC,MAAM,OAAO,CACX,GAAG,EACH,KAAK,CAAC,SAAS,EACf,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,KAAK,KAAK,CACrD,CAAC;IACR,qBAAqB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACnE,MAAM,SAAS,GACb,KAAK,CAAC,SAAS,KAAK,SAAS;QAC3B,CAAC,CAAC,OAAO,CAAC,aAAa;QACvB,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;QAChC,MAAM,OAAO,CACX,gBAAgB,EAChB,4CAA4C,CAC7C,CAAC;IACJ,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC;IACjD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,SAAS;YACxB,CAAC,CAAC,MAAM,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;YACxD,CAAC,CAAC,IAAI,CAAC;QACT,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;YACtD,MAAM,OAAO,CACX,uBAAuB,EACvB,8DAA8D,CAC/D,CAAC;QACJ,IAAI,KAAK;YACP,MAAM,OAAO,CACX,uBAAuB,EACvB,qDAAqD,CACtD,CAAC;IACN,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9E,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;QACzB,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC;QAC3C,SAAS;QACT,QAAQ,EAAE,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC1E,WAAW,EACT,KAAK,CAAC,WAAW,KAAK,SAAS;YAC7B,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC;YACzB,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC;QACzC,QAAQ,EACN,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC;QAC3E,aAAa,EAAE,WAAW,EAAE,EAAE,IAAI,IAAI;QACtC,KAAK,EACH,KAAK,CAAC,KAAK,KAAK,SAAS;YACvB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,IAAI,IAAI,CAAC;QACjD,SAAS;QACT,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,EAAE,WAAW,CAAC;QAC1D,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE,SAAS,CAAC;QACpD,QAAQ,EACN,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC;QACzE,4GAA4G;QAC5G,SAAS,EACP,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK;QACtE,YAAY;KACb,CAAC;AACJ,CAAC;AAED,iEAAiE;AACjE,KAAK,UAAU,OAAO,CACpB,GAAiB,EACjB,SAAwB;IAExB,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACxE,MAAM,EAAE,GAAG,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC;IAC1C,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACrB,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACzE,OAAO,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7D,CAAC;AAaD,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAiB,EACjB,MAAa,EACb,KAAyB;IAEzB,MAAM,MAAM,GAA2D,EAAE,CAAC;IAC1E,MAAM,UAAU,GAAe,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,CACb,KAAQ,EACR,MAAc,EACd,KAAe,EACf,EAAE;QACF,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK;YAAE,OAAO;QACpC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QACtB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC,CAAC;IAEF,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAC3B,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,IAAI,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC;YAChC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1B,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;QAC9B,MAAM,CAAC,UAAU,EAAE,kBAAkB,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnE,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;QAC/B,MAAM,CACJ,WAAW,EACX,oBAAoB,EACpB,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,CACxC,CAAC;IACJ,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAC7B,MAAM,CAAC,SAAS,EAAE,kBAAkB,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAC7E,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS;QACnC,MAAM,CACJ,eAAe,EACf,gBAAgB,EAChB,CAAC,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAChE,CAAC;IACJ,MAAM,aAAa,GACjB,MAAM,CAAC,aAAa,KAAK,SAAS;QAChC,CAAC,CAAC,MAAM,CAAC,aAAa;QACtB,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;IAC3B,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAC3B,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;IACtE,2DAA2D;IAC3D,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;QAC7D,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;IAEzC,MAAM,SAAS,GACb,KAAK,CAAC,SAAS,KAAK,SAAS;QAC3B,CAAC,CAAC,MAAM,CAAC,SAAS;QAClB,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,CAAC,WAAW,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACnE,IAAI,YAA+B,CAAC;IACpC,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,MAAM,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;YAChC,IAAI,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;gBAC7B,MAAM,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACpD,MAAM,CAAC,WAAW,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;YAC9C,YAAY,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QACzC,CAAC;IACH,CAAC;SAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/C,MAAM,OAAO,CACX,iBAAiB,EACjB,iCAAiC,MAAM,CAAC,SAAS,8BAA8B,CAChF,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,IAAI,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC;YAChC,MAAM,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACxD,MAAM,CAAC,aAAa,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,IAAI,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC3B,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;QAAE,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7E,uFAAuF;IACvF,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,OAAO,GACX,IAAI,KAAK,IAAI;QACb,MAAM,CAAC,WAAW,KAAK,SAAS;QAChC,CAAC,CAAC,MAAM,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IACzD,IAAI,OAAO;QAAE,IAAI,GAAG,IAAI,CAAC;IACzB,IACE,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI;QACpC,IAAI,EAAE,EAAE,KAAK,MAAM,CAAC,QAAQ,EAAE,EAAE,EAChC,CAAC;QACD,MAAM,CAAC,YAAY,GAAG,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC;QACzC,MAAM,CAAC,UAAU,GAAG,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC;QACrC,UAAU,CAAC,IAAI,CAAC;YACd,MAAM,EAAE,kBAAkB;YAC1B,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM,CAAC,QAAQ;gBACrB,EAAE,EAAE,IAAI;gBACR,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAClD;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,MAAM;QACN,UAAU;QACV,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS;YAC9B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtD,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,MAAM,EAAE,MAAM,CAAC,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;KACzE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"issue.fields.js","sourceRoot":"","sources":["../../../../server/domains/issues/issue.fields.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import type { ActivityRecorder } from '../../kernel/activity.js';
2
2
  import type { ProjectIssues } from '../projects/index.js';
3
- import type { StatusCatalogs } from './ports.js';
3
+ import type { StatusService } from './ports.js';
4
4
  export declare function createProjectIssues(deps: {
5
5
  readonly activity: ActivityRecorder;
6
- readonly statuses: StatusCatalogs;
6
+ readonly statuses: Pick<StatusService, 'category'>;
7
7
  }): ProjectIssues;
8
8
  //# sourceMappingURL=issue.projects.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"issue.projects.d.ts","sourceRoot":"","sources":["../../../../server/domains/issues/issue.projects.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAM1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;CACnC,GAAG,aAAa,CA4ChB"}
1
+ {"version":3,"file":"issue.projects.d.ts","sourceRoot":"","sources":["../../../../server/domains/issues/issue.projects.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAM1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;CACpD,GAAG,aAAa,CA2ChB"}
@@ -10,12 +10,11 @@ export function createProjectIssues(deps) {
10
10
  }
11
11
  const result = new Map();
12
12
  for (const [projectId, byStatus] of byProject) {
13
- const catalog = await deps.statuses.forProject(conn, projectId);
14
13
  const entries = Object.entries(byStatus);
15
14
  result.set(projectId, {
16
15
  total: entries.reduce((sum, [, count]) => sum + count, 0),
17
16
  done: entries
18
- .filter(([key]) => catalog.category(key) === 'done')
17
+ .filter(([key]) => deps.statuses.category(key) === 'done')
19
18
  .reduce((sum, [, count]) => sum + count, 0),
20
19
  byStatus,
21
20
  });
@@ -1 +1 @@
1
- {"version":3,"file":"issue.projects.js","sourceRoot":"","sources":["../../../../server/domains/issues/issue.projects.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAG1B,MAAM,UAAU,mBAAmB,CAAC,IAGnC;IACC,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU;YAC3B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkC,CAAC;YAC5D,KAAK,MAAM,EACT,SAAS,EACT,SAAS,EACT,KAAK,GACN,IAAI,MAAM,uBAAuB,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;gBACrD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBAChD,QAAQ,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;gBAC5B,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACrC,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;YAC9C,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC9C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBAChE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACzC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE;oBACpB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;oBACzD,IAAI,EAAE,OAAO;yBACV,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC;yBACnD,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;oBAC7C,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK;YAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;gBAC9D,MAAM,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;oBACnC,SAAS,EAAE,IAAI;oBACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,CAAC,CAAC;gBACH,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;oBAClC,OAAO,EAAE,KAAK,CAAC,EAAE;oBACjB,KAAK;oBACL,MAAM,EAAE,iBAAiB;oBACzB,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE;iBACjE,CAAC,CAAC;gBACH,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"issue.projects.js","sourceRoot":"","sources":["../../../../server/domains/issues/issue.projects.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAG1B,MAAM,UAAU,mBAAmB,CAAC,IAGnC;IACC,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU;YAC3B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkC,CAAC;YAC5D,KAAK,MAAM,EACT,SAAS,EACT,SAAS,EACT,KAAK,GACN,IAAI,MAAM,uBAAuB,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;gBACrD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBAChD,QAAQ,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;gBAC5B,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACrC,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;YAC9C,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACzC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE;oBACpB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;oBACzD,IAAI,EAAE,OAAO;yBACV,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC;yBACzD,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;oBAC7C,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK;YAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;gBAC9D,MAAM,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;oBACnC,SAAS,EAAE,IAAI;oBACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,CAAC,CAAC;gBACH,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;oBAClC,OAAO,EAAE,KAAK,CAAC,EAAE;oBACjB,KAAK;oBACL,MAAM,EAAE,iBAAiB;oBACzB,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE;iBACjE,CAAC,CAAC;gBACH,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,18 +1,29 @@
1
- import { type ActivityPage, type IssueBoard, type IssueDetail, type IssueListItem, type IssueListQuery, type IssuePage, type IssueStarts, type StatusDefinition } from '../../../shared/issues.js';
1
+ import { type ActivityPage, type Issue, type IssueBoard, type IssueDetail, type IssueListItem, type IssueListQuery, type IssuePage, type StatusDefinition } from '../../../shared/issues.js';
2
2
  import type { Viewer } from '../../access/viewer.js';
3
3
  import type { TxRunner } from '../../kernel/tx.js';
4
4
  import type { UserDirectory } from '../../kernel/users.js';
5
5
  import type { KindRegistry } from '../../kernel/kinds.js';
6
- import { type IssueExtras, type StatusCatalogs } from './ports.js';
6
+ import { type IssueExtras, type StatusService } from './ports.js';
7
7
  export interface IssueQueries {
8
- /** The statuses of a project's workflow, in order; `null` for issues without a project. */
9
- statuses(viewer: Viewer, projectId: string | null): Promise<StatusDefinition[]>;
10
- /** The ways a new issue may start in a project's workflow (`IssueStarts`); `null` for issues without a project. */
11
- starts(viewer: Viewer, projectId: string | null): Promise<IssueStarts>;
8
+ /** The fixed statuses, in order. */
9
+ statuses(): StatusDefinition[];
12
10
  page(viewer: Viewer, query: IssueListQuery): Promise<IssuePage>;
11
+ /** Complete live authorized hierarchy and filter matches; no list-page or matching cap. */
12
+ hierarchy(viewer: Viewer, query: IssueListQuery): Promise<IssueHierarchy>;
13
+ /**
14
+ * Hydrates a bounded set of IDs (at most `HIERARCHY_ITEMS_MAX`) after independently rechecking visibility, in a fixed
15
+ * number of queries. `readableIds`, the ids `hierarchy` answered for the same viewer, saves reading them again for the
16
+ * sub-task counts.
17
+ */
18
+ hierarchyItems(viewer: Viewer, ids: readonly string[], readableIds?: ReadonlySet<string>): Promise<IssueListItem[]>;
13
19
  /** A page per status column; with `statusKey`, that column only, continuing from `cursor`. */
14
20
  board(viewer: Viewer, query: IssueListQuery): Promise<IssueBoard>;
15
21
  detail(viewer: Viewer, idOrKey: string): Promise<IssueDetail>;
22
+ /**
23
+ * The issue itself, 404 unless it exists and the viewer may see it: the visibility `detail` checks, without reading
24
+ * what the issue page shows around it (activities, threads, files, relations).
25
+ */
26
+ visible(viewer: Viewer, idOrKey: string): Promise<Issue>;
16
27
  /**
17
28
  * The viewer's issues narrowed by the list's filters (`query`; its order and cursor are ignored) that an executor of
18
29
  * `scope.executorType` works on, unless finished (done or closed), or that are among `scope.issueIds`, whatever their
@@ -25,6 +36,12 @@ export interface IssueQueries {
25
36
  readonly limit?: number;
26
37
  }): Promise<ActivityPage>;
27
38
  }
39
+ export interface IssueHierarchy {
40
+ readonly issues: readonly Issue[];
41
+ readonly matchingIds: readonly string[];
42
+ /** Internal workflow dependency facts, including unreadable blockers; never expose their identities. */
43
+ readonly blockedIds: ReadonlySet<string>;
44
+ }
28
45
  /** Which issues `IssueQueries.matching` gathers besides the list's filters. */
29
46
  export interface IssueMatchScope {
30
47
  /** Issues an executor of this kind works on, unless finished. */
@@ -38,13 +55,15 @@ export interface IssueMatches {
38
55
  /** More issues matched than the limit allowed. */
39
56
  readonly truncated: boolean;
40
57
  }
58
+ /** The most issues `IssueQueries.hierarchyItems` hydrates at once. */
59
+ export declare const HIERARCHY_ITEMS_MAX = 500;
41
60
  /** The most issues `IssueQueries.matching` answers. */
42
61
  export declare const MATCHING_LIMIT = 500;
43
62
  export interface QueryDeps {
44
63
  readonly tx: TxRunner;
45
64
  readonly users: UserDirectory;
46
65
  readonly kinds: KindRegistry;
47
- readonly statuses: StatusCatalogs;
66
+ readonly statuses: Pick<StatusService, 'catalog'>;
48
67
  readonly extras: () => IssueExtras;
49
68
  }
50
69
  export declare function createIssueQueries(deps: QueryDeps): IssueQueries;
@@ -1 +1 @@
1
- {"version":3,"file":"issue.queries.d.ts","sourceRoot":"","sources":["../../../../server/domains/issues/issue.queries.ts"],"names":[],"mappings":"AAWA,OAAO,EAGL,KAAK,YAAY,EAEjB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAUrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAe3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAEL,KAAK,WAAW,EAEhB,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,YAAY;IAC3B,2FAA2F;IAC3F,QAAQ,CACN,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC/B,mHAAmH;IACnH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACvE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAChE,8FAA8F;IAC9F,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAClE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9D;;;;;OAKG;IACH,QAAQ,CACN,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,YAAY,CAAC,CAAC;IACzB,UAAU,CACR,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7D,OAAO,CAAC,YAAY,CAAC,CAAC;CAC1B;AAED,+EAA+E;AAC/E,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;IACjC,kDAAkD;IAClD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,uDAAuD;AACvD,eAAO,MAAM,cAAc,MAAM,CAAC;AAOlC,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,WAAW,CAAC;CACpC;AAiHD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,CAiOhE"}
1
+ {"version":3,"file":"issue.queries.d.ts","sourceRoot":"","sources":["../../../../server/domains/issues/issue.queries.ts"],"names":[],"mappings":"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"}
@@ -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,