@aopslabs/aops-server 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/LICENSE +19 -0
  2. package/NOTICE +7 -0
  3. package/README.md +28 -0
  4. package/THIRD_PARTY_NOTICES +13409 -0
  5. package/THIRD_PARTY_NOTICES.inventory.json +2768 -0
  6. package/build/client/_app/immutable/chunks/2_TffmqH.js +1 -0
  7. package/build/client/_app/immutable/chunks/3DOfIKW0.js +1 -0
  8. package/build/client/_app/immutable/chunks/B2EkC-sy.js +1 -0
  9. package/build/client/_app/immutable/chunks/BlANKL2r.js +1 -0
  10. package/build/client/_app/immutable/chunks/CMkIcmi1.js +2 -0
  11. package/build/client/_app/immutable/chunks/rqnVXeyB.js +1 -0
  12. package/build/client/_app/immutable/chunks/wbPk3Yxo.js +81 -0
  13. package/build/client/_app/immutable/entry/app.a0iGCm6X.js +2 -0
  14. package/build/client/_app/immutable/entry/start.Df7u6fQ1.js +1 -0
  15. package/build/client/_app/immutable/nodes/0.BYBfjxZ5.js +1 -0
  16. package/build/client/_app/immutable/nodes/1.BtbjYUHR.js +1 -0
  17. package/build/client/_app/version.json +1 -0
  18. package/build/env.js +69 -0
  19. package/build/handler.js +15 -0
  20. package/build/index.js +138 -0
  21. package/build/server/chunks/0-RfB6m2nq.js +6 -0
  22. package/build/server/chunks/1-UJuUicIe.js +8 -0
  23. package/build/server/chunks/_server.ts-6bdzoHJH.js +83 -0
  24. package/build/server/chunks/_server.ts-AwMeEYiZ.js +9 -0
  25. package/build/server/chunks/_server.ts-B9gjXi95.js +260 -0
  26. package/build/server/chunks/_server.ts-BX4X0tW0.js +16 -0
  27. package/build/server/chunks/_server.ts-BkxSxdd0.js +172 -0
  28. package/build/server/chunks/_server.ts-Bly8fCZa.js +90 -0
  29. package/build/server/chunks/_server.ts-Bz-Erv-1.js +43 -0
  30. package/build/server/chunks/_server.ts-CRKd0KAC.js +43 -0
  31. package/build/server/chunks/_server.ts-CjzSQgpk.js +95 -0
  32. package/build/server/chunks/_server.ts-Cv-yaXZI.js +6 -0
  33. package/build/server/chunks/_server.ts-DQWRrk5C.js +14 -0
  34. package/build/server/chunks/_server.ts-DQzYSH_C.js +125 -0
  35. package/build/server/chunks/_server.ts-DaIr3NkR.js +10 -0
  36. package/build/server/chunks/_server.ts-DbdAfdYo.js +8 -0
  37. package/build/server/chunks/_server.ts-De9ZrSV0.js +84 -0
  38. package/build/server/chunks/_server.ts-DsTeOL2P.js +17 -0
  39. package/build/server/chunks/_server.ts-N61POKjl.js +84 -0
  40. package/build/server/chunks/_server.ts-Ua5Ieisy.js +37 -0
  41. package/build/server/chunks/_server.ts-XmKDT59M.js +37 -0
  42. package/build/server/chunks/_server.ts-o9pJceJP.js +54 -0
  43. package/build/server/chunks/_server.ts-u2UWBqNN.js +276 -0
  44. package/build/server/chunks/admission-snapshot-C2wGfTWE.js +1034 -0
  45. package/build/server/chunks/agent-gateway-runtime-C7Kvvy0H.js +2614 -0
  46. package/build/server/chunks/aops-runtime-config-CHpDUCdE.js +185 -0
  47. package/build/server/chunks/auth-provider-C07OUlnz.js +18 -0
  48. package/build/server/chunks/canonical-text-order-DbXJJnFD.js +5 -0
  49. package/build/server/chunks/commercial-admission-loader-V_vXHdVa.js +2077 -0
  50. package/build/server/chunks/discovery-BvDEgiqC.js +897 -0
  51. package/build/server/chunks/error.svelte-B9R6O_Hn.js +44 -0
  52. package/build/server/chunks/handler-DurXhqww.js +1472 -0
  53. package/build/server/chunks/hooks.server-DYGrWbgh.js +62 -0
  54. package/build/server/chunks/index.js-BQnOaW3H.js +11573 -0
  55. package/build/server/chunks/manifest.js-CCJDdahY.js +180 -0
  56. package/build/server/chunks/plugin-error-normalize-DNeRsopQ.js +309 -0
  57. package/build/server/chunks/project-alias-BdnRxWft.js +28 -0
  58. package/build/server/chunks/registry-DO8ob5o1.js +660 -0
  59. package/build/server/chunks/request-base-url-zKJpVUv5.js +35 -0
  60. package/build/server/chunks/request-context-9wzBoKrz.js +421 -0
  61. package/build/server/chunks/xf-result-BRDjvftr.js +16 -0
  62. package/build/shims.js +32 -0
  63. package/cockpit/.vite/manifest.json +198 -0
  64. package/cockpit/assets/dm-sans-latin-400-normal-BwCSEQnW.woff +0 -0
  65. package/cockpit/assets/dm-sans-latin-400-normal-CW0RaeGs.woff2 +0 -0
  66. package/cockpit/assets/dm-sans-latin-500-normal-B9HHJjqV.woff2 +0 -0
  67. package/cockpit/assets/dm-sans-latin-500-normal-Dr3UlScf.woff +0 -0
  68. package/cockpit/assets/dm-sans-latin-700-normal-CUSSCpQX.woff +0 -0
  69. package/cockpit/assets/dm-sans-latin-700-normal-DvUfVpUG.woff2 +0 -0
  70. package/cockpit/assets/dm-sans-latin-ext-400-normal-BjWJ59Pq.woff +0 -0
  71. package/cockpit/assets/dm-sans-latin-ext-400-normal-BtiwyxMk.woff2 +0 -0
  72. package/cockpit/assets/dm-sans-latin-ext-500-normal-BJfUCQsA.woff2 +0 -0
  73. package/cockpit/assets/dm-sans-latin-ext-500-normal-DR84L5F-.woff +0 -0
  74. package/cockpit/assets/dm-sans-latin-ext-700-normal-BLI3TTWz.woff +0 -0
  75. package/cockpit/assets/dm-sans-latin-ext-700-normal-CJIcxD6K.woff2 +0 -0
  76. package/cockpit/assets/index-CkhZWZ2f.js +18 -0
  77. package/cockpit/assets/index-TSfC5rf2.css +1 -0
  78. package/cockpit/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  79. package/cockpit/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  80. package/cockpit/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  81. package/cockpit/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  82. package/cockpit/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  83. package/cockpit/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  84. package/cockpit/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  85. package/cockpit/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  86. package/cockpit/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  87. package/cockpit/assets/outfit-latin-400-normal-BGsTXAXT.woff2 +0 -0
  88. package/cockpit/assets/outfit-latin-400-normal-DMwTpYkH.woff +0 -0
  89. package/cockpit/assets/outfit-latin-600-normal-B7SfZ07L.woff2 +0 -0
  90. package/cockpit/assets/outfit-latin-600-normal-BEfTtDA7.woff +0 -0
  91. package/cockpit/assets/outfit-latin-ext-400-normal-5tcqmc2S.woff2 +0 -0
  92. package/cockpit/assets/outfit-latin-ext-400-normal-DHm7mdGe.woff +0 -0
  93. package/cockpit/assets/outfit-latin-ext-600-normal-B85nYjL1.woff2 +0 -0
  94. package/cockpit/assets/outfit-latin-ext-600-normal-CWJcPgd7.woff +0 -0
  95. package/cockpit/assets/unbounded-cyrillic-600-normal-B-s5c2Kn.woff +0 -0
  96. package/cockpit/assets/unbounded-cyrillic-600-normal-DW6uzIMB.woff2 +0 -0
  97. package/cockpit/assets/unbounded-latin-600-normal-BPdB_PEv.woff +0 -0
  98. package/cockpit/assets/unbounded-latin-600-normal-oRSANpZr.woff2 +0 -0
  99. package/cockpit/assets/unbounded-latin-ext-600-normal-0iZLtTDV.woff2 +0 -0
  100. package/cockpit/assets/unbounded-latin-ext-600-normal-ClMPf-bu.woff +0 -0
  101. package/cockpit/assets/unbounded-vietnamese-600-normal-BzfrgZ_C.woff +0 -0
  102. package/cockpit/assets/unbounded-vietnamese-600-normal-Cx2bTSHN.woff2 +0 -0
  103. package/cockpit/community.module-inventory.json +2439 -0
  104. package/cockpit/index.html +14 -0
  105. package/community-postgres.json +13 -0
  106. package/migrations/agentspace/0000_thin_carlie_cooper.sql +764 -0
  107. package/migrations/agentspace/meta/_journal.json +13 -0
  108. package/migrations/chatv3/0000_dry_ego.sql +218 -0
  109. package/migrations/chatv3/0001_nosy_obadiah_stane.sql +35 -0
  110. package/migrations/chatv3/0002_narrow_darkhawk.sql +4 -0
  111. package/migrations/chatv3/0003_damp_zarek.sql +2 -0
  112. package/migrations/chatv3/0004_nervous_martin_li.sql +60 -0
  113. package/migrations/chatv3/0005_chatv3_server_encrypted_mode.sql +1 -0
  114. package/migrations/chatv3/0006_chatv3_database_server_keyring.sql +21 -0
  115. package/migrations/chatv3/meta/_journal.json +55 -0
  116. package/migrations/docman/0000_curvy_valeria_richards.sql +257 -0
  117. package/migrations/docman/0001_massive_risque.sql +2 -0
  118. package/migrations/docman/0002_simple_logan.sql +50 -0
  119. package/migrations/docman/0003_quick_index.sql +45 -0
  120. package/migrations/docman/0004_known_summary.sql +9 -0
  121. package/migrations/docman/0005_vector_signal.sql +9 -0
  122. package/migrations/docman/0006_document_version_current_invariant.sql +15 -0
  123. package/migrations/docman/meta/_journal.json +55 -0
  124. package/migrations/projectman/0000_smooth_klaw.sql +257 -0
  125. package/migrations/projectman/0001_worthless_zodiak.sql +9 -0
  126. package/migrations/projectman/0002_board_rename.sql +108 -0
  127. package/migrations/projectman/0003_review_request.sql +62 -0
  128. package/migrations/projectman/0004_review_request_idempotency.sql +3 -0
  129. package/migrations/projectman/0005_allow_multi_sprint_per_task.sql +1 -0
  130. package/migrations/projectman/meta/_journal.json +48 -0
  131. package/migrations/sys/0000_loose_praxagora.sql +31 -0
  132. package/migrations/sys/0001_awesome_ronan.sql +2 -0
  133. package/migrations/sys/0002_steady_maximus.sql +2 -0
  134. package/migrations/sys/0003_escalating_rate_limiter.sql +2 -0
  135. package/migrations/sys/0004_rate_limiter_timestamptz.sql +22 -0
  136. package/migrations/sys/0005_sys_counters.sql +21 -0
  137. package/migrations/sys/meta/_journal.json +48 -0
  138. package/npm-shrinkwrap.json +5069 -0
  139. package/package.json +88 -0
  140. package/runtime/agentspace-host-adapter.mjs +64 -0
  141. package/runtime/agentspace-tooling.mjs +389 -0
  142. package/runtime/commercial-integrity-worker.mjs +1643 -0
  143. package/runtime/docman-host-adapter.mjs +177 -0
  144. package/runtime/docman-policy.mjs +450 -0
  145. package/runtime/docman-tooling.mjs +20 -0
  146. package/runtime/projectman-host-adapter.mjs +597 -0
  147. package/runtime/scope-context.mjs +99 -0
  148. package/runtime-closure.package.json +376 -0
  149. package/scripts/community-host.mjs +919 -0
  150. package/scripts/community-migration-policy-package-v1.json +11854 -0
@@ -0,0 +1,276 @@
1
+ import { j as json } from './index.js-BQnOaW3H.js';
2
+ import { Effect } from 'effect';
3
+ import { normalizeProjectmanFlowAction, createProjectmanBoardFlow, applyProjectmanTemplateFlow, createProjectmanTemplateFlow, updateProjectmanTemplateFlow, deleteProjectmanTemplateFlow, createProjectmanBoardColumnFlow, createProjectmanTaskFlow, updateProjectmanTaskFlow, moveProjectmanTaskFlow, repositionProjectmanTaskFlow, createProjectmanSprintFlow, updateProjectmanSprintPlanFlow, createProjectmanSprintMicrotaskFlow, updateProjectmanSprintMicrotaskStatusFlow, createProjectmanIssueFlow, updateProjectmanIssueFlow, createProjectmanFeedbackFlow, updateProjectmanFeedbackFlow, convertProjectmanFeedbackToIssueFlow, convertProjectmanFeedbackToTaskFlow, inferProjectmanFlowErrorStatus } from '@aopslabs/domain-product-projectman';
4
+ import './aops-runtime-config-CHpDUCdE.js';
5
+ import '@aopslabs/xf-dm-kits/appConfig';
6
+ import { a as attachResolvedProjectScope, b as resolveProjectScopeFromLocals, g as getAgentspaceKit } from './request-context-9wzBoKrz.js';
7
+ import { e as errResult, o as okResult } from './xf-result-BRDjvftr.js';
8
+ import 'node:fs';
9
+ import 'node:path';
10
+ import 'pg';
11
+ import '@aopslabs/xf-dm-kits';
12
+ import '@aopslabs/domain-kit-agentspace';
13
+ import './project-alias-BdnRxWft.js';
14
+
15
+ function toRecord(value) {
16
+ if (!value || typeof value !== "object" || Array.isArray(value)) return {};
17
+ return value;
18
+ }
19
+ function pickBodyValue(body, primaryKey, fallbackKey) {
20
+ return Object.prototype.hasOwnProperty.call(body, primaryKey) ? body[primaryKey] : body[fallbackKey];
21
+ }
22
+ function pickOptionalBodyString(body, primaryKey, fallbackKey) {
23
+ const value = pickBodyValue(body, primaryKey, fallbackKey);
24
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
25
+ }
26
+ async function readJsonBody(request) {
27
+ try {
28
+ return toRecord(await request.json());
29
+ } catch {
30
+ return {};
31
+ }
32
+ }
33
+ function inferScopeStatus(result) {
34
+ if (result.ok) return 200;
35
+ const message = String(result.messages?.[0]?.messageText ?? "").trim().toLowerCase();
36
+ if (message === "unauthorized") return 401;
37
+ if (message === "forbidden") return 403;
38
+ if (message === "project_required") return 409;
39
+ if (message === "project_not_found") return 404;
40
+ return 400;
41
+ }
42
+ async function validateProjectScopeMatch(params) {
43
+ if (!params.projectId) return null;
44
+ const kit = await getAgentspaceKit({
45
+ tenantId: typeof params.locals.tenantId === "string" ? params.locals.tenantId : void 0,
46
+ locale: typeof params.locals.locale === "string" ? params.locals.locale : void 0,
47
+ fallbackLocale: typeof params.locals.fallbackLocale === "string" ? params.locals.fallbackLocale : void 0
48
+ });
49
+ const projectSvc = await kit.createProjectService();
50
+ const project = await Effect.runPromise(projectSvc.getById(params.projectId)).catch(() => null);
51
+ if (!project?.id) {
52
+ return {
53
+ status: 404,
54
+ result: errResult("project_not_found", { projectId: params.projectId })
55
+ };
56
+ }
57
+ const projectScopeId = typeof project?.id === "string" ? project.id.trim() : "";
58
+ if (params.scopeId && projectScopeId && params.scopeId !== projectScopeId) {
59
+ return {
60
+ status: 409,
61
+ result: errResult("project_scope_mismatch", {
62
+ projectId: params.projectId,
63
+ scopeId: params.scopeId,
64
+ projectScopeId
65
+ })
66
+ };
67
+ }
68
+ return null;
69
+ }
70
+ const POST = async ({ request, locals }) => {
71
+ if (!locals.principal) {
72
+ return json(errResult("unauthorized"), { status: 401 });
73
+ }
74
+ await attachResolvedProjectScope({ request, locals });
75
+ const body = await readJsonBody(request);
76
+ const scope = await resolveProjectScopeFromLocals({
77
+ input: {
78
+ projectId: body.projectId ?? locals.projectId,
79
+ projectName: body.projectName,
80
+ project: body.project
81
+ },
82
+ locals
83
+ });
84
+ if (!scope.ok) return json(scope.result, { status: inferScopeStatus(scope.result) });
85
+ const action = normalizeProjectmanFlowAction(body.action);
86
+ if (!action) {
87
+ return json(errResult("unsupported_projectman_flow_action"), { status: 400 });
88
+ }
89
+ const requestScopeId = String(body.scopeId ?? "").trim() || void 0;
90
+ const explicitProjectId = String(body.projectId ?? body.project ?? "").trim();
91
+ const resolvedProjectId = explicitProjectId || scope.projectId;
92
+ const resolvedScopeId = requestScopeId || scope.scopeId || scope.projectId;
93
+ const projectScopeError = await validateProjectScopeMatch({
94
+ scopeId: requestScopeId,
95
+ projectId: explicitProjectId,
96
+ locals
97
+ });
98
+ if (projectScopeError) {
99
+ return json(projectScopeError.result, { status: projectScopeError.status });
100
+ }
101
+ try {
102
+ const result = action === "create-board" ? await createProjectmanBoardFlow({
103
+ scopeId: resolvedScopeId,
104
+ projectId: resolvedProjectId,
105
+ name: body.name,
106
+ slug: body.slug,
107
+ description: body.description,
108
+ columns: body.columns,
109
+ sourceCreatedAt: body.sourceCreatedAt,
110
+ sourceUpdatedAt: body.sourceUpdatedAt
111
+ }) : action === "apply-template" ? await applyProjectmanTemplateFlow({
112
+ scopeId: resolvedScopeId,
113
+ projectId: resolvedProjectId,
114
+ templateId: body.templateId ?? body.kanbanTemplate ?? body.id
115
+ }) : action === "create-template" ? await createProjectmanTemplateFlow({
116
+ scopeId: resolvedScopeId,
117
+ name: body.name,
118
+ description: body.description,
119
+ definition: body.definition
120
+ }) : action === "update-template" ? await updateProjectmanTemplateFlow({
121
+ scopeId: resolvedScopeId,
122
+ templateId: body.templateId ?? body.kanbanTemplate ?? body.id,
123
+ name: body.name,
124
+ description: body.description,
125
+ definition: body.definition
126
+ }) : action === "delete-template" ? await deleteProjectmanTemplateFlow({
127
+ scopeId: resolvedScopeId,
128
+ templateId: body.templateId ?? body.kanbanTemplate ?? body.id
129
+ }) : action === "create-column" ? await createProjectmanBoardColumnFlow({
130
+ scopeId: resolvedScopeId,
131
+ boardId: body.boardId ?? body.board,
132
+ name: body.name,
133
+ slug: body.slug
134
+ }) : action === "create-task" ? await createProjectmanTaskFlow({
135
+ scopeId: resolvedScopeId,
136
+ projectId: resolvedProjectId,
137
+ boardId: body.boardId ?? body.board,
138
+ boardColumnId: body.boardColumnId ?? body.boardColumn,
139
+ title: body.title,
140
+ description: body.description
141
+ }) : action === "update-task" ? await updateProjectmanTaskFlow({
142
+ scopeId: resolvedScopeId,
143
+ taskId: body.taskId ?? body.kanbanTask,
144
+ title: body.title,
145
+ description: body.description,
146
+ progress: body.progress
147
+ }) : action === "move-task" ? await moveProjectmanTaskFlow({
148
+ scopeId: resolvedScopeId,
149
+ taskId: body.taskId ?? body.kanbanTask,
150
+ boardColumnId: body.boardColumnId ?? body.boardColumn
151
+ }) : action === "reposition-task" ? await repositionProjectmanTaskFlow({
152
+ scopeId: resolvedScopeId,
153
+ taskId: body.taskId ?? body.kanbanTask,
154
+ boardColumnId: body.boardColumnId ?? body.boardColumn,
155
+ orderedIds: body.orderedIds,
156
+ sourceBoardColumnId: body.sourceBoardColumnId ?? body.sourceBoardColumn,
157
+ sourceOrderedIds: body.sourceOrderedIds
158
+ }) : action === "create-sprint" ? await createProjectmanSprintFlow({
159
+ scopeId: resolvedScopeId,
160
+ projectId: resolvedProjectId,
161
+ kanbanTaskId: body.kanbanTaskId ?? body.kanbanTask ?? body.taskId ?? body.task,
162
+ name: body.name,
163
+ goal: body.goal,
164
+ references: body.references,
165
+ scope: body.scope,
166
+ validationPlan: body.validationPlan,
167
+ notes: body.notes,
168
+ phases: body.phases
169
+ }) : action === "update-sprint-plan" ? await updateProjectmanSprintPlanFlow({
170
+ scopeId: resolvedScopeId,
171
+ projectId: resolvedProjectId,
172
+ sprintId: body.sprintId ?? body.sprint ?? body.id,
173
+ name: body.name,
174
+ goal: body.goal,
175
+ references: body.references,
176
+ scope: body.scope,
177
+ validationPlan: body.validationPlan,
178
+ notes: body.notes,
179
+ phases: body.phases,
180
+ expectedUpdatedAt: body.expectedUpdatedAt
181
+ }) : action === "create-sprint-microtask" ? await createProjectmanSprintMicrotaskFlow({
182
+ scopeId: resolvedScopeId,
183
+ projectId: resolvedProjectId,
184
+ sprintId: body.sprintId ?? body.sprint,
185
+ phaseId: body.phaseId,
186
+ phase: body.phase,
187
+ title: body.title,
188
+ status: body.status,
189
+ position: body.position,
190
+ notes: body.notes,
191
+ createdBy: body.createdBy,
192
+ updatedBy: body.updatedBy
193
+ }) : action === "update-sprint-microtask-status" ? await updateProjectmanSprintMicrotaskStatusFlow({
194
+ scopeId: resolvedScopeId,
195
+ projectId: resolvedProjectId,
196
+ sprintId: body.sprintId ?? body.sprint,
197
+ microTaskId: body.microTaskId ?? body.microtask ?? body.microTask ?? body.id,
198
+ status: body.status
199
+ }) : action === "create-issue" ? await createProjectmanIssueFlow({
200
+ scopeId: resolvedScopeId,
201
+ projectId: resolvedProjectId,
202
+ title: body.title,
203
+ description: body.description,
204
+ status: body.status,
205
+ severity: body.severity,
206
+ source: body.source,
207
+ sprintId: body.sprintId ?? body.sprint,
208
+ kanbanTaskId: body.kanbanTaskId ?? body.kanbanTask,
209
+ microTaskId: body.microTaskId ?? body.microTask,
210
+ tags: body.tags,
211
+ notes: body.notes,
212
+ resolvedAt: body.resolvedAt
213
+ }) : action === "update-issue" ? await updateProjectmanIssueFlow({
214
+ issueId: body.issueId ?? body.issue ?? body.id,
215
+ title: body.title,
216
+ description: body.description,
217
+ status: body.status,
218
+ severity: body.severity,
219
+ source: body.source,
220
+ sprintId: pickOptionalBodyString(body, "sprintId", "sprint"),
221
+ kanbanTaskId: pickOptionalBodyString(body, "kanbanTaskId", "kanbanTask"),
222
+ notes: body.notes,
223
+ resolvedAt: body.resolvedAt
224
+ }) : action === "create-feedback" ? await createProjectmanFeedbackFlow({
225
+ scopeId: resolvedScopeId,
226
+ projectId: resolvedProjectId,
227
+ title: body.title,
228
+ description: body.description,
229
+ status: body.status,
230
+ type: body.type,
231
+ severity: body.severity,
232
+ source: body.source,
233
+ sprintId: body.sprintId ?? body.sprint,
234
+ kanbanTaskId: body.kanbanTaskId ?? body.kanbanTask,
235
+ microTaskId: body.microTaskId ?? body.microTask,
236
+ tags: body.tags,
237
+ suggestion: body.suggestion,
238
+ notes: body.notes,
239
+ handledAt: body.handledAt
240
+ }) : action === "update-feedback" ? await updateProjectmanFeedbackFlow({
241
+ feedbackId: body.feedbackId ?? body.feedback ?? body.id,
242
+ title: body.title,
243
+ description: body.description,
244
+ status: body.status,
245
+ type: body.type,
246
+ severity: body.severity,
247
+ source: body.source,
248
+ sprintId: pickOptionalBodyString(body, "sprintId", "sprint"),
249
+ kanbanTaskId: pickOptionalBodyString(body, "kanbanTaskId", "kanbanTask"),
250
+ suggestion: body.suggestion,
251
+ notes: body.notes,
252
+ handledAt: body.handledAt
253
+ }) : action === "convert-feedback-to-issue" ? await convertProjectmanFeedbackToIssueFlow({
254
+ scopeId: resolvedScopeId,
255
+ projectId: resolvedProjectId,
256
+ feedbackId: body.feedbackId ?? body.feedback,
257
+ title: body.title,
258
+ description: body.description,
259
+ severity: body.severity
260
+ }) : action === "convert-feedback-to-task" ? await convertProjectmanFeedbackToTaskFlow({
261
+ scopeId: resolvedScopeId,
262
+ projectId: resolvedProjectId,
263
+ feedbackId: body.feedbackId ?? body.feedback,
264
+ boardId: body.boardId ?? body.board,
265
+ boardColumnId: body.boardColumnId ?? body.boardColumn,
266
+ title: body.title,
267
+ description: body.description
268
+ }) : null;
269
+ return json(okResult(result), { status: 200 });
270
+ } catch (error) {
271
+ const message = error instanceof Error && error.message.trim().length > 0 ? error.message : "projectman_flow_failed";
272
+ return json(errResult(message), { status: inferProjectmanFlowErrorStatus(message) });
273
+ }
274
+ };
275
+
276
+ export { POST };