@nocobase/app-plugin-agents 0.1.0-beta.2 → 0.1.0-beta.3

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 (188) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +30 -4
  3. package/dist/client/api/client.d.ts +3 -1
  4. package/dist/client/api/client.d.ts.map +1 -1
  5. package/dist/client/api/client.js +5 -1
  6. package/dist/client/api/client.js.map +1 -1
  7. package/dist/client/components/model-entries.d.ts +12 -3
  8. package/dist/client/components/model-entries.d.ts.map +1 -1
  9. package/dist/client/components/model-entries.js +41 -19
  10. package/dist/client/components/model-entries.js.map +1 -1
  11. package/dist/client/components/variables/variable-dialogs.d.ts +3 -2
  12. package/dist/client/components/variables/variable-dialogs.d.ts.map +1 -1
  13. package/dist/client/components/variables/variable-dialogs.js +18 -8
  14. package/dist/client/components/variables/variable-dialogs.js.map +1 -1
  15. package/dist/client/components/variables/variables-panel.d.ts.map +1 -1
  16. package/dist/client/components/variables/variables-panel.js +3 -1
  17. package/dist/client/components/variables/variables-panel.js.map +1 -1
  18. package/dist/client/lib/agents.d.ts +5 -0
  19. package/dist/client/lib/agents.d.ts.map +1 -1
  20. package/dist/client/lib/agents.js +22 -0
  21. package/dist/client/lib/agents.js.map +1 -1
  22. package/dist/client/lib/model-suggestions.d.ts +28 -0
  23. package/dist/client/lib/model-suggestions.d.ts.map +1 -0
  24. package/dist/client/lib/model-suggestions.js +44 -0
  25. package/dist/client/lib/model-suggestions.js.map +1 -0
  26. package/dist/client/locales/en-US.d.ts +14 -0
  27. package/dist/client/locales/en-US.d.ts.map +1 -1
  28. package/dist/client/locales/en-US.js +14 -0
  29. package/dist/client/locales/en-US.js.map +1 -1
  30. package/dist/client/locales/runtimes.en-US.d.ts +6 -0
  31. package/dist/client/locales/runtimes.en-US.d.ts.map +1 -1
  32. package/dist/client/locales/runtimes.en-US.js +6 -0
  33. package/dist/client/locales/runtimes.en-US.js.map +1 -1
  34. package/dist/client/locales/runtimes.zh-CN.d.ts.map +1 -1
  35. package/dist/client/locales/runtimes.zh-CN.js +6 -0
  36. package/dist/client/locales/runtimes.zh-CN.js.map +1 -1
  37. package/dist/client/locales/zh-CN.d.ts.map +1 -1
  38. package/dist/client/locales/zh-CN.js +14 -0
  39. package/dist/client/locales/zh-CN.js.map +1 -1
  40. package/dist/client/pages/agents/index.d.ts.map +1 -1
  41. package/dist/client/pages/agents/index.js +6 -6
  42. package/dist/client/pages/agents/index.js.map +1 -1
  43. package/dist/client/pages/runtimes/runner-sheet.js +11 -3
  44. package/dist/client/pages/runtimes/runner-sheet.js.map +1 -1
  45. package/dist/database/migrations/.manifest.json +16 -0
  46. package/dist/database/migrations/202610090002_ag_create_run_requests.d.ts +10 -0
  47. package/dist/database/migrations/202610090002_ag_create_run_requests.d.ts.map +1 -0
  48. package/dist/database/migrations/202610090002_ag_create_run_requests.js +105 -0
  49. package/dist/database/migrations/202610090002_ag_create_run_requests.js.map +1 -0
  50. package/dist/database/migrations/202610090003_ag_add_execution_history.d.ts +4 -0
  51. package/dist/database/migrations/202610090003_ag_add_execution_history.d.ts.map +1 -0
  52. package/dist/database/migrations/202610090003_ag_add_execution_history.js +17 -0
  53. package/dist/database/migrations/202610090003_ag_add_execution_history.js.map +1 -0
  54. package/dist/database/migrations/202610090004_ag_add_runner_workspace_usage.d.ts +9 -0
  55. package/dist/database/migrations/202610090004_ag_add_runner_workspace_usage.d.ts.map +1 -0
  56. package/dist/database/migrations/202610090004_ag_add_runner_workspace_usage.js +22 -0
  57. package/dist/database/migrations/202610090004_ag_add_runner_workspace_usage.js.map +1 -0
  58. package/dist/database/migrations/202610090005_ag_add_runner_variables.d.ts +10 -0
  59. package/dist/database/migrations/202610090005_ag_add_runner_variables.d.ts.map +1 -0
  60. package/dist/database/migrations/202610090005_ag_add_runner_variables.js +36 -0
  61. package/dist/database/migrations/202610090005_ag_add_runner_variables.js.map +1 -0
  62. package/dist/package.json +1 -1
  63. package/dist/server/composition.d.ts +6 -1
  64. package/dist/server/composition.d.ts.map +1 -1
  65. package/dist/server/composition.js +6 -1
  66. package/dist/server/composition.js.map +1 -1
  67. package/dist/server/core/agents/agent.service.d.ts.map +1 -1
  68. package/dist/server/core/agents/agent.service.js +4 -1
  69. package/dist/server/core/agents/agent.service.js.map +1 -1
  70. package/dist/server/core/consultations/consultation.service.d.ts.map +1 -1
  71. package/dist/server/core/consultations/consultation.service.js +5 -2
  72. package/dist/server/core/consultations/consultation.service.js.map +1 -1
  73. package/dist/server/core/conversations/conversation.service.d.ts.map +1 -1
  74. package/dist/server/core/conversations/conversation.service.js +5 -5
  75. package/dist/server/core/conversations/conversation.service.js.map +1 -1
  76. package/dist/server/core/runs/claim.d.ts +4 -1
  77. package/dist/server/core/runs/claim.d.ts.map +1 -1
  78. package/dist/server/core/runs/claim.js +46 -2
  79. package/dist/server/core/runs/claim.js.map +1 -1
  80. package/dist/server/core/runs/execution-view.d.ts +10 -0
  81. package/dist/server/core/runs/execution-view.d.ts.map +1 -0
  82. package/dist/server/core/runs/execution-view.js +25 -0
  83. package/dist/server/core/runs/execution-view.js.map +1 -0
  84. package/dist/server/core/runs/execution.d.ts +13 -0
  85. package/dist/server/core/runs/execution.d.ts.map +1 -0
  86. package/dist/server/core/runs/execution.js +85 -0
  87. package/dist/server/core/runs/execution.js.map +1 -0
  88. package/dist/server/core/runs/index.d.ts +4 -2
  89. package/dist/server/core/runs/index.d.ts.map +1 -1
  90. package/dist/server/core/runs/index.js +3 -1
  91. package/dist/server/core/runs/index.js.map +1 -1
  92. package/dist/server/core/runs/lifecycle.d.ts.map +1 -1
  93. package/dist/server/core/runs/lifecycle.js +29 -2
  94. package/dist/server/core/runs/lifecycle.js.map +1 -1
  95. package/dist/server/core/runs/ports.d.ts +20 -0
  96. package/dist/server/core/runs/ports.d.ts.map +1 -1
  97. package/dist/server/core/runs/ports.js.map +1 -1
  98. package/dist/server/core/runs/preview.d.ts.map +1 -1
  99. package/dist/server/core/runs/preview.js +2 -0
  100. package/dist/server/core/runs/preview.js.map +1 -1
  101. package/dist/server/core/runs/run-requests.d.ts +217 -0
  102. package/dist/server/core/runs/run-requests.d.ts.map +1 -0
  103. package/dist/server/core/runs/run-requests.js +471 -0
  104. package/dist/server/core/runs/run-requests.js.map +1 -0
  105. package/dist/server/core/runs/run.service.d.ts +60 -5
  106. package/dist/server/core/runs/run.service.d.ts.map +1 -1
  107. package/dist/server/core/runs/run.service.js +201 -36
  108. package/dist/server/core/runs/run.service.js.map +1 -1
  109. package/dist/server/core/runs/run.store.d.ts +7 -1
  110. package/dist/server/core/runs/run.store.d.ts.map +1 -1
  111. package/dist/server/core/runs/run.store.js +33 -0
  112. package/dist/server/core/runs/run.store.js.map +1 -1
  113. package/dist/server/core/runs/runner-view.d.ts +4 -3
  114. package/dist/server/core/runs/runner-view.d.ts.map +1 -1
  115. package/dist/server/core/runs/runner-view.js +7 -3
  116. package/dist/server/core/runs/runner-view.js.map +1 -1
  117. package/dist/server/core/runs/transitions.d.ts.map +1 -1
  118. package/dist/server/core/runs/transitions.js +3 -0
  119. package/dist/server/core/runs/transitions.js.map +1 -1
  120. package/dist/server/core/variables/variable.service.d.ts +18 -3
  121. package/dist/server/core/variables/variable.service.d.ts.map +1 -1
  122. package/dist/server/core/variables/variable.service.js +130 -38
  123. package/dist/server/core/variables/variable.service.js.map +1 -1
  124. package/dist/server/kernel/errors.d.ts +1 -1
  125. package/dist/server/kernel/errors.d.ts.map +1 -1
  126. package/dist/server/kernel/errors.js +1 -0
  127. package/dist/server/kernel/errors.js.map +1 -1
  128. package/dist/server/kernel/events.d.ts +23 -8
  129. package/dist/server/kernel/events.d.ts.map +1 -1
  130. package/dist/server/kernel/events.js.map +1 -1
  131. package/dist/server/routes/admin.d.ts.map +1 -1
  132. package/dist/server/routes/admin.js +33 -9
  133. package/dist/server/routes/admin.js.map +1 -1
  134. package/dist/server/routes/index.d.ts.map +1 -1
  135. package/dist/server/routes/index.js +5 -0
  136. package/dist/server/routes/index.js.map +1 -1
  137. package/dist/server/routes/run-requests.d.ts +6 -0
  138. package/dist/server/routes/run-requests.d.ts.map +1 -0
  139. package/dist/server/routes/run-requests.js +216 -0
  140. package/dist/server/routes/run-requests.js.map +1 -0
  141. package/dist/server/routes/runners/runner.d.ts.map +1 -1
  142. package/dist/server/routes/runners/runner.js +21 -3
  143. package/dist/server/routes/runners/runner.js.map +1 -1
  144. package/dist/server/routes/schemas.d.ts +27 -1
  145. package/dist/server/routes/schemas.d.ts.map +1 -1
  146. package/dist/server/routes/schemas.js +198 -1
  147. package/dist/server/routes/schemas.js.map +1 -1
  148. package/dist/server/runners/index.d.ts +1 -0
  149. package/dist/server/runners/index.d.ts.map +1 -1
  150. package/dist/server/runners/index.js +1 -0
  151. package/dist/server/runners/index.js.map +1 -1
  152. package/dist/server/runners/runner.service.d.ts +3 -3
  153. package/dist/server/runners/runner.service.d.ts.map +1 -1
  154. package/dist/server/runners/runner.service.js +13 -8
  155. package/dist/server/runners/runner.service.js.map +1 -1
  156. package/dist/server/runners/runner.store.d.ts +7 -1
  157. package/dist/server/runners/runner.store.d.ts.map +1 -1
  158. package/dist/server/runners/runner.store.js +69 -4
  159. package/dist/server/runners/runner.store.js.map +1 -1
  160. package/dist/server/runners/sweeper.d.ts +5 -0
  161. package/dist/server/runners/sweeper.d.ts.map +1 -1
  162. package/dist/server/runners/sweeper.js +4 -2
  163. package/dist/server/runners/sweeper.js.map +1 -1
  164. package/dist/server/runners/workspaces.d.ts +30 -0
  165. package/dist/server/runners/workspaces.d.ts.map +1 -0
  166. package/dist/server/runners/workspaces.js +135 -0
  167. package/dist/server/runners/workspaces.js.map +1 -0
  168. package/dist/server/tokens.d.ts +3 -2
  169. package/dist/server/tokens.d.ts.map +1 -1
  170. package/dist/server/tokens.js +1 -0
  171. package/dist/server/tokens.js.map +1 -1
  172. package/dist/shared/agents.d.ts +2 -0
  173. package/dist/shared/agents.d.ts.map +1 -1
  174. package/dist/shared/agents.js.map +1 -1
  175. package/dist/shared/runners.d.ts +47 -1
  176. package/dist/shared/runners.d.ts.map +1 -1
  177. package/dist/shared/runners.js.map +1 -1
  178. package/dist/shared/runs.d.ts +123 -0
  179. package/dist/shared/runs.d.ts.map +1 -1
  180. package/dist/shared/runs.js +15 -0
  181. package/dist/shared/runs.js.map +1 -1
  182. package/dist/shared/variables.d.ts +10 -0
  183. package/dist/shared/variables.d.ts.map +1 -1
  184. package/dist/shared/variables.js +5 -1
  185. package/dist/shared/variables.js.map +1 -1
  186. package/package.json +4 -4
  187. package/skills/nocobase-app-plugin-agents/references/extension-points.md +3 -2
  188. package/skills/nocobase-app-plugin-agents/references/runners.md +8 -0
@@ -0,0 +1,471 @@
1
+ import { isDeepStrictEqual } from 'node:util';
2
+ import { conflict, forbidden, notFound, precondition, } from '../../kernel/errors.js';
3
+ import { asJson, cleanList, stringArray } from '../../kernel/values.js';
4
+ import { findAgent, lockAgentForClaim } from '../agents/index.js';
5
+ /** How long a request waits for its responsible: seven days. */
6
+ export const RUN_REQUEST_TTL_MS = 7 * 24 * 60 * 60 * 1000;
7
+ /** How many requests one sweep expires at most; the next sweep takes the rest. */
8
+ const EXPIRE_BATCH = 100;
9
+ export function runRequestsRepo(conn) {
10
+ return conn.repository('agRunRequests');
11
+ }
12
+ export function toRunRequest(record) {
13
+ return {
14
+ id: record.id,
15
+ agentId: record.agentId,
16
+ subject: { kind: record.subjectKind, id: record.subjectId },
17
+ threadScope: record.threadScope,
18
+ responsibleUserId: record.responsibleUserId,
19
+ requestedByUserId: record.requestedByUserId,
20
+ ownerUserId: record.ownerUserId,
21
+ fireAt: record.fireAt,
22
+ maxAttempts: record.maxAttempts === null ? null : Number(record.maxAttempts),
23
+ input: {
24
+ type: record.inputType,
25
+ actor: {
26
+ kind: record.inputActorKind,
27
+ id: record.inputActorId,
28
+ name: record.inputActorName,
29
+ },
30
+ text: record.inputText,
31
+ payload: record.inputPayload ?? null,
32
+ },
33
+ status: record.status,
34
+ settledById: record.settledById,
35
+ settledAt: record.settledAt,
36
+ note: record.note,
37
+ expiresAt: record.expiresAt,
38
+ runId: record.runId,
39
+ supersededById: record.supersededById,
40
+ createdAt: record.createdAt,
41
+ updatedAt: record.updatedAt,
42
+ };
43
+ }
44
+ /** Stores a pending request in `unit` and announces it; it expires `RUN_REQUEST_TTL_MS` from now. */
45
+ export async function insertRunRequest(unit, deps, request) {
46
+ const now = deps.clock.now();
47
+ const fireAt = request.fireAt === null ? null : new Date(request.fireAt).getTime();
48
+ // Serializes retries for this agent; duplicate input never creates another inbox entry or renews its expiry.
49
+ await lockAgentForClaim(unit.conn, request.agentId, now.toISOString());
50
+ const pending = await runRequestsRepo(unit.conn).findMany({
51
+ filter: {
52
+ agentId: request.agentId,
53
+ subjectKind: request.subject.kind,
54
+ subjectId: request.subject.id,
55
+ threadScope: request.threadScope,
56
+ responsibleUserId: request.responsibleUserId,
57
+ requestedByUserId: request.requestedByUserId,
58
+ status: 'pending',
59
+ },
60
+ });
61
+ const duplicate = pending.find((record) => Date.parse(record.expiresAt) > now.getTime() &&
62
+ record.ownerUserId === request.ownerUserId &&
63
+ Number(record.priority) === request.priority &&
64
+ isDeepStrictEqual(stringArray(record.requires), cleanList([...request.requires])) &&
65
+ (record.fireAt === null ? null : new Date(record.fireAt).getTime()) ===
66
+ fireAt &&
67
+ (record.maxAttempts === null ? null : Number(record.maxAttempts)) ===
68
+ request.maxAttempts &&
69
+ record.inputType === request.input.type &&
70
+ record.inputActorKind === request.input.actor.kind &&
71
+ record.inputActorId === request.input.actor.id &&
72
+ record.inputActorName === request.input.actor.name &&
73
+ record.inputText === request.input.text &&
74
+ isDeepStrictEqual(record.inputPayload ?? null, asJson(request.input.payload)));
75
+ if (duplicate)
76
+ return toRunRequest(duplicate);
77
+ const id = deps.ids.next();
78
+ await runRequestsRepo(unit.conn).createOne({
79
+ values: {
80
+ id,
81
+ agentId: request.agentId,
82
+ subjectKind: request.subject.kind,
83
+ subjectId: request.subject.id,
84
+ threadScope: request.threadScope,
85
+ responsibleUserId: request.responsibleUserId,
86
+ requestedByUserId: request.requestedByUserId,
87
+ ownerUserId: request.ownerUserId,
88
+ priority: request.priority,
89
+ requires: cleanList([...request.requires]),
90
+ fireAt: request.fireAt,
91
+ maxAttempts: request.maxAttempts,
92
+ inputType: request.input.type,
93
+ inputActorKind: request.input.actor.kind,
94
+ inputActorId: request.input.actor.id,
95
+ inputActorName: request.input.actor.name,
96
+ inputText: request.input.text,
97
+ inputPayload: asJson(request.input.payload),
98
+ status: 'pending',
99
+ settledById: null,
100
+ settledAt: null,
101
+ note: null,
102
+ expiresAt: new Date(now.getTime() + RUN_REQUEST_TTL_MS).toISOString(),
103
+ runId: null,
104
+ supersededById: null,
105
+ createdAt: now.toISOString(),
106
+ updatedAt: now.toISOString(),
107
+ },
108
+ });
109
+ const created = toRunRequest((await runRequestsRepo(unit.conn).findOne({ filter: { id } })));
110
+ unit.emit({ type: 'runRequest.created', request: created });
111
+ return created;
112
+ }
113
+ function settled(record, status = record.status) {
114
+ return precondition('RUN_REQUEST_SETTLED', status === 'expired'
115
+ ? 'The request expired.'
116
+ : `The request is ${status} already.`, { status });
117
+ }
118
+ export function createRunRequestService(deps) {
119
+ const { tx, clock } = deps;
120
+ const require = async (conn, id) => {
121
+ const record = await runRequestsRepo(conn).findOne({ filter: { id } });
122
+ if (!record)
123
+ throw notFound('Run request');
124
+ return record;
125
+ };
126
+ /** Whether a pending request's time ran out, whether or not the sweeper has noticed yet. */
127
+ const isDue = (record) => Date.parse(record.expiresAt) <= clock.now().getTime();
128
+ /**
129
+ * Expires a pending request whose time ran out and tells the person who asked; false when something else moved it
130
+ * first. The sweeper's pass and every other path that finds one due go through here.
131
+ */
132
+ async function expire(unit, record, reason = 'timeout') {
133
+ const result = await runRequestsRepo(unit.conn).updateMany({
134
+ filter: (f) => f.and([f.string('id').eq(record.id), f.string('status').eq('pending')]),
135
+ values: { status: 'expired', updatedAt: clock.now().toISOString() },
136
+ });
137
+ if (result.updatedCount !== 1)
138
+ return false;
139
+ const request = toRunRequest(await require(unit.conn, record.id));
140
+ unit.emit({ type: 'runRequest.expired', request });
141
+ const agentName = (await findAgent(unit.conn, record.agentId))?.name ?? record.agentId;
142
+ unit.emit({
143
+ type: 'notice',
144
+ notice: {
145
+ key: `run_request_expired:${record.id}`,
146
+ type: 'run_request_expired',
147
+ userIds: [record.requestedByUserId],
148
+ subject: { kind: 'runRequest', id: record.id, label: agentName },
149
+ title: `${agentName} did not run your request`,
150
+ body: `${reason === 'timeout' ? 'Nobody confirmed your request in time' : 'The new responsible cannot run your request'}, so your request to ${agentName} on ${record.subjectKind} ${record.subjectId} expired. You can still run it as yourself, on your own runner or a team runner.`,
151
+ params: {
152
+ agentName,
153
+ subjectKind: record.subjectKind,
154
+ subjectId: record.subjectId,
155
+ requestId: record.id,
156
+ responsibleUserId: record.responsibleUserId,
157
+ reason,
158
+ },
159
+ },
160
+ });
161
+ return true;
162
+ }
163
+ const requirePending = (record) => {
164
+ if (record.status !== 'pending')
165
+ throw settled(record);
166
+ if (isDue(record))
167
+ throw settled(record, 'expired');
168
+ };
169
+ async function requireCurrentResponsible(unit, record, byUserId) {
170
+ const current = await deps.currentResponsible?.(unit, {
171
+ kind: record.subjectKind,
172
+ id: record.subjectId,
173
+ });
174
+ if (current !== undefined && current !== byUserId)
175
+ throw forbidden('You no longer answer for this subject.');
176
+ }
177
+ /** Moves a pending request on, once: a concurrent change that moved it first wins. */
178
+ async function settle(unit, record, values) {
179
+ const result = await runRequestsRepo(unit.conn).updateMany({
180
+ filter: (f) => f.and([f.string('id').eq(record.id), f.string('status').eq('pending')]),
181
+ values: { ...values, updatedAt: clock.now().toISOString() },
182
+ });
183
+ if (result.updatedCount !== 1)
184
+ throw conflict('The request changed; read it again.');
185
+ return require(unit.conn, record.id);
186
+ }
187
+ async function setRun(unit, id, runId) {
188
+ await runRequestsRepo(unit.conn).updateMany({
189
+ filter: { id },
190
+ values: { runId, updatedAt: clock.now().toISOString() },
191
+ });
192
+ return require(unit.conn, id);
193
+ }
194
+ const inputOf = (record) => {
195
+ const view = toRunRequest(record).input;
196
+ return {
197
+ type: view.type,
198
+ actor: view.actor,
199
+ text: view.text,
200
+ ...(view.payload === null ? {} : { payload: view.payload }),
201
+ };
202
+ };
203
+ const workOf = (record, agent) => ({
204
+ agent,
205
+ subject: { kind: record.subjectKind, id: record.subjectId },
206
+ threadScope: record.threadScope,
207
+ ownerUserId: record.ownerUserId,
208
+ priority: Number(record.priority),
209
+ requires: stringArray(record.requires),
210
+ fireAt: record.fireAt,
211
+ maxAttempts: record.maxAttempts === null ? null : Number(record.maxAttempts),
212
+ input: inputOf(record),
213
+ });
214
+ async function itemsOf(records) {
215
+ const conn = tx.read();
216
+ const names = await deps.people.names(conn, [
217
+ ...new Set(records.flatMap((record) => [
218
+ record.responsibleUserId,
219
+ record.requestedByUserId,
220
+ ])),
221
+ ]);
222
+ const agents = new Map();
223
+ for (const record of records)
224
+ if (!agents.has(record.agentId))
225
+ agents.set(record.agentId, (await findAgent(conn, record.agentId))?.name ?? null);
226
+ return records.map((record) => ({
227
+ ...toRunRequest(record),
228
+ agentName: agents.get(record.agentId) ?? null,
229
+ responsibleName: names.get(record.responsibleUserId) ?? null,
230
+ requestedByName: names.get(record.requestedByUserId) ?? null,
231
+ }));
232
+ }
233
+ return {
234
+ async get(requestId) {
235
+ const [item] = await itemsOf([await require(tx.read(), requestId)]);
236
+ return item;
237
+ },
238
+ async list(filter) {
239
+ const records = await runRequestsRepo(tx.read()).findMany({
240
+ filter: (f) => f.and([
241
+ filter.role === 'responsible'
242
+ ? f.string('responsibleUserId').eq(filter.userId)
243
+ : filter.role === 'requester'
244
+ ? f.string('requestedByUserId').eq(filter.userId)
245
+ : f.or([
246
+ f.string('responsibleUserId').eq(filter.userId),
247
+ f.string('requestedByUserId').eq(filter.userId),
248
+ ]),
249
+ ...(filter.status ? [f.string('status').eq(filter.status)] : []),
250
+ ...(filter.subject
251
+ ? [f.string('subjectKind').eq(filter.subject.kind)]
252
+ : []),
253
+ ...(filter.subject?.id
254
+ ? [f.string('subjectId').eq(filter.subject.id)]
255
+ : []),
256
+ ...(filter.agentId ? [f.string('agentId').eq(filter.agentId)] : []),
257
+ ]),
258
+ sort: (sort) => [
259
+ sort.field('createdAt').desc(),
260
+ sort.field('id').desc(),
261
+ ],
262
+ limit: Math.min(Math.max(filter.limit ?? 50, 1), 201),
263
+ ...(filter.cursor ? { cursor: filter.cursor } : {}),
264
+ });
265
+ return itemsOf(records);
266
+ },
267
+ async pendingOn(conn, subject, agentId) {
268
+ const records = await runRequestsRepo(conn).findMany({
269
+ filter: (f) => f.and([
270
+ f.string('subjectKind').eq(subject.kind),
271
+ f.string('subjectId').eq(subject.id),
272
+ f.string('status').eq('pending'),
273
+ ...(agentId ? [f.string('agentId').eq(agentId)] : []),
274
+ ]),
275
+ sort: (sort) => [sort.field('createdAt').asc(), sort.field('id').asc()],
276
+ });
277
+ return records.map(toRunRequest);
278
+ },
279
+ confirm: (requestId, byUserId) => tx.run(async (unit) => {
280
+ const record = await require(unit.conn, requestId);
281
+ if (record.responsibleUserId !== byUserId)
282
+ throw forbidden('Only the person who answers for the subject may confirm this request.');
283
+ requirePending(record);
284
+ await requireCurrentResponsible(unit, record, byUserId);
285
+ // Confirming runs the work as them: they must still be able to wake the agent.
286
+ const agent = await deps.requireInvocable(unit, record.agentId, byUserId);
287
+ await settle(unit, record, {
288
+ status: 'confirmed',
289
+ settledById: byUserId,
290
+ settledAt: clock.now().toISOString(),
291
+ });
292
+ const run = await deps.direct(unit, {
293
+ ...workOf(record, agent),
294
+ actorUserId: record.responsibleUserId,
295
+ requestedByUserId: record.requestedByUserId,
296
+ confirmedByUserId: byUserId,
297
+ });
298
+ const request = toRunRequest(await setRun(unit, record.id, run.runId));
299
+ unit.emit({ type: 'runRequest.confirmed', request });
300
+ return { request, run };
301
+ }),
302
+ reject: (requestId, byUserId, note) => tx.run(async (unit) => {
303
+ const record = await require(unit.conn, requestId);
304
+ if (record.responsibleUserId !== byUserId)
305
+ throw forbidden('Only the person who answers for the subject may reject this request.');
306
+ requirePending(record);
307
+ await requireCurrentResponsible(unit, record, byUserId);
308
+ const request = toRunRequest(await settle(unit, record, {
309
+ status: 'rejected',
310
+ settledById: byUserId,
311
+ settledAt: clock.now().toISOString(),
312
+ note: note ?? null,
313
+ }));
314
+ unit.emit({ type: 'runRequest.rejected', request });
315
+ return request;
316
+ }),
317
+ withdraw: (requestId, byUserId) => tx.run(async (unit) => {
318
+ const record = await require(unit.conn, requestId);
319
+ if (record.requestedByUserId !== byUserId)
320
+ throw forbidden('Only the person who asked may withdraw this request.');
321
+ requirePending(record);
322
+ const request = toRunRequest(await settle(unit, record, {
323
+ status: 'withdrawn',
324
+ settledById: byUserId,
325
+ settledAt: clock.now().toISOString(),
326
+ }));
327
+ unit.emit({ type: 'runRequest.withdrawn', request });
328
+ return request;
329
+ }),
330
+ runAsRequester: (requestId, byUserId) => tx.run(async (unit) => {
331
+ const record = await require(unit.conn, requestId);
332
+ if (record.requestedByUserId !== byUserId)
333
+ throw forbidden('Only the person who asked may run this request as themselves.');
334
+ // An expired request that went nowhere may still be run this way: that is what its expiry notice offers.
335
+ const expired = record.status === 'expired' ||
336
+ (record.status === 'pending' && isDue(record));
337
+ if (!(record.status === 'pending' || record.status === 'expired') ||
338
+ record.runId)
339
+ throw settled(record);
340
+ const agent = await deps.requireInvocable(unit, record.agentId, byUserId);
341
+ const work = workOf(record, agent);
342
+ await deps.requireRunnerFor(unit, agent, byUserId, work.requires);
343
+ if (record.status === 'pending')
344
+ await settle(unit, record, {
345
+ status: expired ? 'expired' : 'withdrawn',
346
+ settledById: expired ? null : byUserId,
347
+ settledAt: expired ? null : clock.now().toISOString(),
348
+ });
349
+ else {
350
+ // Only once: a second attempt finds the run set.
351
+ const result = await runRequestsRepo(unit.conn).updateMany({
352
+ filter: (f) => f.and([f.string('id').eq(record.id), f.string('runId').eq(null)]),
353
+ values: { updatedAt: clock.now().toISOString() },
354
+ });
355
+ if (result.updatedCount !== 1)
356
+ throw conflict('The request changed; read it again.');
357
+ }
358
+ const run = await deps.direct(unit, {
359
+ ...work,
360
+ actorUserId: byUserId,
361
+ requestedByUserId: byUserId,
362
+ confirmedByUserId: null,
363
+ });
364
+ const request = toRunRequest(await setRun(unit, record.id, run.runId));
365
+ if (record.status === 'pending')
366
+ unit.emit({
367
+ type: expired ? 'runRequest.expired' : 'runRequest.withdrawn',
368
+ request,
369
+ });
370
+ return { request, run };
371
+ }),
372
+ reassign: (request, outer) => tx.run(async (unit) => {
373
+ const pending = await runRequestsRepo(unit.conn).findMany({
374
+ filter: (f) => f.and([
375
+ f.string('subjectKind').eq(request.subject.kind),
376
+ f.string('subjectId').eq(request.subject.id),
377
+ f.string('status').eq('pending'),
378
+ ...(request.agentId
379
+ ? [f.string('agentId').eq(request.agentId)]
380
+ : []),
381
+ ]),
382
+ sort: (sort) => [
383
+ sort.field('createdAt').asc(),
384
+ sort.field('id').asc(),
385
+ ],
386
+ });
387
+ const superseded = [];
388
+ const created = [];
389
+ const queued = [];
390
+ const expired = [];
391
+ for (const record of pending) {
392
+ // Its time ran out before the sweeper noticed: it expires now, as confirming would find, rather than being
393
+ // handed on with a fresh expiry or queued.
394
+ if (isDue(record)) {
395
+ if (await expire(unit, record))
396
+ expired.push(toRunRequest(await require(unit.conn, record.id)));
397
+ continue;
398
+ }
399
+ if (record.responsibleUserId === request.toUserId)
400
+ continue;
401
+ const agent = request.toUserId
402
+ ? await findAgent(unit.conn, record.agentId)
403
+ : undefined;
404
+ const usable = request.toUserId &&
405
+ agent &&
406
+ !agent.archivedAt &&
407
+ deps.mayInvoke(agent, request.toUserId);
408
+ if (!usable) {
409
+ if (await expire(unit, record, 'reassignment'))
410
+ expired.push(toRunRequest(await require(unit.conn, record.id)));
411
+ continue;
412
+ }
413
+ await settle(unit, record, {
414
+ status: 'superseded',
415
+ settledById: request.byUserId,
416
+ settledAt: clock.now().toISOString(),
417
+ note: request.note ?? null,
418
+ });
419
+ if (usable && record.requestedByUserId === request.toUserId) {
420
+ // The new responsible asked for it: their own work needs nobody's confirmation.
421
+ queued.push(await deps.direct(unit, {
422
+ ...workOf(record, agent),
423
+ actorUserId: request.toUserId,
424
+ requestedByUserId: request.toUserId,
425
+ confirmedByUserId: null,
426
+ }));
427
+ }
428
+ else if (usable) {
429
+ const next = await insertRunRequest(unit, deps, {
430
+ agentId: record.agentId,
431
+ subject: { kind: record.subjectKind, id: record.subjectId },
432
+ threadScope: record.threadScope,
433
+ responsibleUserId: request.toUserId,
434
+ requestedByUserId: record.requestedByUserId,
435
+ ownerUserId: record.ownerUserId,
436
+ priority: Number(record.priority),
437
+ requires: stringArray(record.requires),
438
+ fireAt: record.fireAt,
439
+ maxAttempts: record.maxAttempts === null ? null : Number(record.maxAttempts),
440
+ input: inputOf(record),
441
+ });
442
+ created.push(next);
443
+ await runRequestsRepo(unit.conn).updateMany({
444
+ filter: { id: record.id },
445
+ values: { supersededById: next.id },
446
+ });
447
+ }
448
+ const done = toRunRequest(await require(unit.conn, record.id));
449
+ superseded.push(done);
450
+ unit.emit({ type: 'runRequest.superseded', request: done });
451
+ }
452
+ return { superseded, created, queued, expired };
453
+ }, outer),
454
+ async expireDue() {
455
+ const due = await runRequestsRepo(tx.read()).findMany({
456
+ filter: (f) => f.and([
457
+ f.string('status').eq('pending'),
458
+ f.date('expiresAt').notAfter(clock.now()),
459
+ ]),
460
+ sort: (sort) => [sort.field('expiresAt').asc(), sort.field('id').asc()],
461
+ limit: EXPIRE_BATCH,
462
+ });
463
+ let expired = 0;
464
+ for (const record of due)
465
+ if (await tx.run((unit) => expire(unit, record)))
466
+ expired += 1;
467
+ return expired;
468
+ },
469
+ };
470
+ }
471
+ //# sourceMappingURL=run-requests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-requests.js","sourceRoot":"","sources":["../../../../server/core/runs/run-requests.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAS9C,OAAO,EACL,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,YAAY,GACb,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAElE,gEAAgE;AAChE,MAAM,CAAC,MAAM,kBAAkB,GAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAElE,kFAAkF;AAClF,MAAM,YAAY,GAAG,GAAG,CAAC;AAgCzB,MAAM,UAAU,eAAe,CAC7B,IAAwB;IAExB,OAAO,IAAI,CAAC,UAAU,CAAmB,eAAe,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAwB;IACnD,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE;QAC3D,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,WAAW,EACT,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;QACjE,KAAK,EAAE;YACL,IAAI,EAAE,MAAM,CAAC,SAAyB;YACtC,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,cAA2B;gBACxC,EAAE,EAAE,MAAM,CAAC,YAAY;gBACvB,IAAI,EAAE,MAAM,CAAC,cAAc;aAC5B;YACD,IAAI,EAAE,MAAM,CAAC,SAAS;YACtB,OAAO,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI;SACrC;QACD,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC;AACJ,CAAC;AA4BD,qGAAqG;AACrG,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAQ,EACR,IAAuD,EACvD,OAAsB;IAEtB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,MAAM,GACV,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;IACtE,6GAA6G;IAC7G,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;QACxD,MAAM,EAAE;YACN,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;YACjC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;YAC7B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,MAAM,EAAE,SAAS;SAClB;KACF,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAC5B,CAAC,MAAM,EAAE,EAAE,CACT,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE;QAC5C,MAAM,CAAC,WAAW,KAAK,OAAO,CAAC,WAAW;QAC1C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,QAAQ;QAC5C,iBAAiB,CACf,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,EAC5B,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CACjC;QACD,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;YACjE,MAAM;QACR,CAAC,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAC/D,OAAO,CAAC,WAAW;QACrB,MAAM,CAAC,SAAS,KAAK,OAAO,CAAC,KAAK,CAAC,IAAI;QACvC,MAAM,CAAC,cAAc,KAAK,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;QAClD,MAAM,CAAC,YAAY,KAAK,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QAC9C,MAAM,CAAC,cAAc,KAAK,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;QAClD,MAAM,CAAC,SAAS,KAAK,OAAO,CAAC,KAAK,CAAC,IAAI;QACvC,iBAAiB,CACf,MAAM,CAAC,YAAY,IAAI,IAAI,EAC3B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAC9B,CACJ,CAAC;IACF,IAAI,SAAS;QAAE,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;QACzC,MAAM,EAAE;YACN,EAAE;YACF,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;YACjC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;YAC7B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;YAC7B,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;YACxC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACpC,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;YACxC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;YAC7B,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;YAC3C,MAAM,EAAE,SAAS;YACjB,WAAW,EAAE,IAAI;YACjB,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,kBAAkB,CAAC,CAAC,WAAW,EAAE;YACrE,KAAK,EAAE,IAAI;YACX,cAAc,EAAE,IAAI;YACpB,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;YAC5B,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;SAC7B;KACF,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,YAAY,CAC1B,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAE,CAChE,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5D,OAAO,OAAO,CAAC;AACjB,CAAC;AA0ID,SAAS,OAAO,CAAC,MAAwB,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM;IAC/D,OAAO,YAAY,CACjB,qBAAqB,EACrB,MAAM,KAAK,SAAS;QAClB,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,kBAAkB,MAAM,WAAW,EACvC,EAAE,MAAM,EAAE,CACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,IAAoB;IAEpB,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAE3B,MAAM,OAAO,GAAG,KAAK,EACnB,IAAwB,EACxB,EAAU,EACiB,EAAE;QAC7B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM;YAAE,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,4FAA4F;IAC5F,MAAM,KAAK,GAAG,CAAC,MAAwB,EAAW,EAAE,CAClD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAExD;;;OAGG;IACH,KAAK,UAAU,MAAM,CACnB,IAAQ,EACR,MAAwB,EACxB,SAAqC,SAAS;QAE9C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;YACzD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CACZ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACzE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE;SACpE,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,CAAC,CAAC;QACnD,MAAM,SAAS,GACb,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC;QACvE,IAAI,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE;gBACN,GAAG,EAAE,uBAAuB,MAAM,CAAC,EAAE,EAAE;gBACvC,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC;gBACnC,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;gBAChE,KAAK,EAAE,GAAG,SAAS,2BAA2B;gBAC9C,IAAI,EAAE,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,6CAA6C,wBAAwB,SAAS,OAAO,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,SAAS,kFAAkF;gBACvR,MAAM,EAAE;oBACN,SAAS;oBACT,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,SAAS,EAAE,MAAM,CAAC,EAAE;oBACpB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;oBAC3C,MAAM;iBACP;aACF;SACF,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,cAAc,GAAG,CAAC,MAAwB,EAAQ,EAAE;QACxD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,KAAK,CAAC,MAAM,CAAC;YAAE,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC,CAAC;IAEF,KAAK,UAAU,yBAAyB,CACtC,IAAQ,EACR,MAAwB,EACxB,QAAgB;QAEhB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE;YACpD,IAAI,EAAE,MAAM,CAAC,WAAW;YACxB,EAAE,EAAE,MAAM,CAAC,SAAS;SACrB,CAAC,CAAC;QACH,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,QAAQ;YAC/C,MAAM,SAAS,CAAC,wCAAwC,CAAC,CAAC;IAC9D,CAAC;IAED,sFAAsF;IACtF,KAAK,UAAU,MAAM,CACnB,IAAQ,EACR,MAAwB,EACxB,MAAiC;QAEjC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;YACzD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CACZ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACzE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE;SAC5D,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC;YAC3B,MAAM,QAAQ,CAAC,qCAAqC,CAAC,CAAC;QACxD,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,UAAU,MAAM,CACnB,IAAQ,EACR,EAAU,EACV,KAAa;QAEb,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;YAC1C,MAAM,EAAE,EAAE,EAAE,EAAE;YACd,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE;SACxD,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,MAAwB,EAA0B,EAAE;QACnE,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;QACxC,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;SAC5D,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,CACb,MAAwB,EACxB,KAAY,EAIZ,EAAE,CAAC,CAAC;QACJ,KAAK;QACL,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE;QAC3D,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACjC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,WAAW,EACT,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;QACjE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;KACvB,CAAC,CAAC;IAEH,KAAK,UAAU,OAAO,CACpB,OAAoC;QAEpC,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;YAC1C,GAAG,IAAI,GAAG,CACR,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1B,MAAM,CAAC,iBAAiB;gBACxB,MAAM,CAAC,iBAAiB;aACzB,CAAC,CACH;SACF,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;QAChD,KAAK,MAAM,MAAM,IAAI,OAAO;YAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;gBAC7B,MAAM,CAAC,GAAG,CACR,MAAM,CAAC,OAAO,EACd,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CACtD,CAAC;QACN,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9B,GAAG,YAAY,CAAC,MAAM,CAAC;YACvB,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;YAC7C,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,IAAI;YAC5D,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,IAAI;SAC7D,CAAC,CAAC,CAAC;IACN,CAAC;IAED,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,SAAS;YACjB,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,MAAM,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;YACpE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,MAAM;YACf,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC;gBACxD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CACZ,CAAC,CAAC,GAAG,CAAC;oBACJ,MAAM,CAAC,IAAI,KAAK,aAAa;wBAC3B,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;wBACjD,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW;4BAC3B,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;4BACjD,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gCACH,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;gCAC/C,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;6BAChD,CAAC;oBACR,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChE,GAAG,CAAC,MAAM,CAAC,OAAO;wBAChB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBACnD,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE;wBACpB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;wBAC/C,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpE,CAAC;gBACJ,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;oBACd,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE;oBAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;iBACxB;gBACD,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC;gBACrD,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpD,CAAC,CAAC;YACH,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO;YACpC,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;gBACnD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CACZ,CAAC,CAAC,GAAG,CAAC;oBACJ,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;oBACxC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;oBACpC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;oBAChC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBACtD,CAAC;gBACJ,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;aACxE,CAAC,CAAC;YACH,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAC/B,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACpB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACnD,IAAI,MAAM,CAAC,iBAAiB,KAAK,QAAQ;gBACvC,MAAM,SAAS,CACb,uEAAuE,CACxE,CAAC;YACJ,cAAc,CAAC,MAAM,CAAC,CAAC;YACvB,MAAM,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YACxD,+EAA+E;YAC/E,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CACvC,IAAI,EACJ,MAAM,CAAC,OAAO,EACd,QAAQ,CACT,CAAC;YACF,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE;gBACzB,MAAM,EAAE,WAAW;gBACnB,WAAW,EAAE,QAAQ;gBACrB,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;aACrC,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBAClC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;gBACxB,WAAW,EAAE,MAAM,CAAC,iBAAiB;gBACrC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;gBAC3C,iBAAiB,EAAE,QAAQ;aAC5B,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,CAAC;YACrD,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAC1B,CAAC,CAAC;QAEJ,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CACpC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACpB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACnD,IAAI,MAAM,CAAC,iBAAiB,KAAK,QAAQ;gBACvC,MAAM,SAAS,CACb,sEAAsE,CACvE,CAAC;YACJ,cAAc,CAAC,MAAM,CAAC,CAAC;YACvB,MAAM,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,YAAY,CAC1B,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE;gBACzB,MAAM,EAAE,UAAU;gBAClB,WAAW,EAAE,QAAQ;gBACrB,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;gBACpC,IAAI,EAAE,IAAI,IAAI,IAAI;aACnB,CAAC,CACH,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,CAAC,CAAC;YACpD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QAEJ,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAChC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACpB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACnD,IAAI,MAAM,CAAC,iBAAiB,KAAK,QAAQ;gBACvC,MAAM,SAAS,CACb,sDAAsD,CACvD,CAAC;YACJ,cAAc,CAAC,MAAM,CAAC,CAAC;YACvB,MAAM,OAAO,GAAG,YAAY,CAC1B,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE;gBACzB,MAAM,EAAE,WAAW;gBACnB,WAAW,EAAE,QAAQ;gBACrB,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;aACrC,CAAC,CACH,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,CAAC;YACrD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QAEJ,cAAc,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CACtC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACpB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACnD,IAAI,MAAM,CAAC,iBAAiB,KAAK,QAAQ;gBACvC,MAAM,SAAS,CACb,+DAA+D,CAChE,CAAC;YACJ,yGAAyG;YACzG,MAAM,OAAO,GACX,MAAM,CAAC,MAAM,KAAK,SAAS;gBAC3B,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YACjD,IACE,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC;gBAC7D,MAAM,CAAC,KAAK;gBAEZ,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;YACxB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CACvC,IAAI,EACJ,MAAM,CAAC,OAAO,EACd,QAAQ,CACT,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACnC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClE,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;gBAC7B,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE;oBACzB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;oBACzC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;oBACtC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;iBACtD,CAAC,CAAC;iBACA,CAAC;gBACJ,iDAAiD;gBACjD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;oBACzD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CACZ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;oBACnE,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE;iBACjD,CAAC,CAAC;gBACH,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC;oBAC3B,MAAM,QAAQ,CAAC,qCAAqC,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBAClC,GAAG,IAAI;gBACP,WAAW,EAAE,QAAQ;gBACrB,iBAAiB,EAAE,QAAQ;gBAC3B,iBAAiB,EAAE,IAAI;aACxB,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YACvE,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;gBAC7B,IAAI,CAAC,IAAI,CAAC;oBACR,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,sBAAsB;oBAC7D,OAAO;iBACR,CAAC,CAAC;YACL,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAC1B,CAAC,CAAC;QAEJ,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAC3B,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACpB,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;gBACxD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CACZ,CAAC,CAAC,GAAG,CAAC;oBACJ,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;oBAChD,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC5C,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;oBAChC,GAAG,CAAC,OAAO,CAAC,OAAO;wBACjB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;wBAC3C,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC;gBACJ,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;oBACd,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE;oBAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE;iBACvB;aACF,CAAC,CAAC;YACH,MAAM,UAAU,GAAiB,EAAE,CAAC;YACpC,MAAM,OAAO,GAAiB,EAAE,CAAC;YACjC,MAAM,MAAM,GAAmB,EAAE,CAAC;YAClC,MAAM,OAAO,GAAiB,EAAE,CAAC;YACjC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,2GAA2G;gBAC3G,2CAA2C;gBAC3C,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;oBAClB,IAAI,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;wBAC5B,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAClE,SAAS;gBACX,CAAC;gBACD,IAAI,MAAM,CAAC,iBAAiB,KAAK,OAAO,CAAC,QAAQ;oBAAE,SAAS;gBAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ;oBAC5B,CAAC,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC;oBAC5C,CAAC,CAAC,SAAS,CAAC;gBACd,MAAM,MAAM,GACV,OAAO,CAAC,QAAQ;oBAChB,KAAK;oBACL,CAAC,KAAK,CAAC,UAAU;oBACjB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,IAAI,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC;wBAC5C,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAClE,SAAS;gBACX,CAAC;gBACD,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE;oBACzB,MAAM,EAAE,YAAY;oBACpB,WAAW,EAAE,OAAO,CAAC,QAAQ;oBAC7B,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;oBACpC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;iBAC3B,CAAC,CAAC;gBACH,IAAI,MAAM,IAAI,MAAM,CAAC,iBAAiB,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5D,gFAAgF;oBAChF,MAAM,CAAC,IAAI,CACT,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;wBACtB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;wBACxB,WAAW,EAAE,OAAO,CAAC,QAAQ;wBAC7B,iBAAiB,EAAE,OAAO,CAAC,QAAQ;wBACnC,iBAAiB,EAAE,IAAI;qBACxB,CAAC,CACH,CAAC;gBACJ,CAAC;qBAAM,IAAI,MAAM,EAAE,CAAC;oBAClB,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE;wBAC9C,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE;wBAC3D,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,iBAAiB,EAAE,OAAO,CAAC,QAAQ;wBACnC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;wBAC3C,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;wBACjC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;wBACtC,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,WAAW,EACT,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;wBACjE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;qBACvB,CAAC,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnB,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;wBAC1C,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;wBACzB,MAAM,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;qBACpC,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/D,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAClD,CAAC,EAAE,KAAK,CAAC;QAEX,KAAK,CAAC,SAAS;YACb,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC;gBACpD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CACZ,CAAC,CAAC,GAAG,CAAC;oBACJ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;oBAChC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;iBAC1C,CAAC;gBACJ,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;gBACvE,KAAK,EAAE,YAAY;aACpB,CAAC,CAAC;YACH,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,KAAK,MAAM,MAAM,IAAI,GAAG;gBACtB,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC,CAAC;YACjE,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -11,11 +11,14 @@ import { type ActorRef, type RunInput, type RunInputType, type RunnerFeature, ty
11
11
  import type { Runner } from '../../../shared/runners.js';
12
12
  import type { DatabaseConnection } from '@nocobase/db';
13
13
  import type { RunBrief } from '../../../shared/briefs.js';
14
- import type { Run, RunDetail, RunEventPage, Workload, WorkloadQuery } from '../../../shared/runs.js';
14
+ import type { Run, RunDetail, RunEventPage, RunExecution, Workload, WorkloadQuery } from '../../../shared/runs.js';
15
15
  import type { Clock } from '../../kernel/clock.js';
16
+ import type { People } from '../../kernel/people.js';
16
17
  import type { IdSource } from '../../kernel/ids.js';
17
18
  import type { Tx, TxRunner } from '../../kernel/tx.js';
18
19
  import type { AgentService } from '../agents/index.js';
20
+ import type { ClaimEligibility } from './eligibility.js';
21
+ import { type RunRequestService } from './run-requests.js';
19
22
  import { type RunTokenIdentity } from './run-tokens.js';
20
23
  import { type SubjectRegistry } from './ports.js';
21
24
  import { type WorkloadRunners } from './workload.js';
@@ -35,8 +38,35 @@ export interface EnqueueRequest {
35
38
  };
36
39
  /** Separates conversations about one subject; `main` by default. */
37
40
  readonly threadScope?: string;
38
- /** Who woke the agent: their permissions bound the run. */
39
- readonly actorUserId: string;
41
+ /**
42
+ * Who woke the agent, for work on a subject nobody answers for (no `responsibleUserId`): their permissions bound the
43
+ * run. With a `responsibleUserId` the run acts as the responsible, or as the source under `execution` `mine`, and
44
+ * this is read only as the source when `requestedByUserId` is left out.
45
+ */
46
+ readonly actorUserId?: string;
47
+ /**
48
+ * Who answers for the subject (an issue's owner, say). Work whose source is someone else is not queued: it becomes a
49
+ * run request the responsible confirms (`outcome` `pending`), unless `execution` is `mine`. Left out, work is queued
50
+ * as `actorUserId`, as before.
51
+ */
52
+ readonly responsibleUserId?: string | null;
53
+ /**
54
+ * The source of the chain of work: the person whose action woke the agent. `actorUserId`, else the responsible, by
55
+ * default; `causedByRunId` overrides it.
56
+ */
57
+ readonly requestedByUserId?: string;
58
+ /**
59
+ * Work a run caused (its own action woke an agent, such as a status it changed): the source is that run's, not the
60
+ * person who answers for the subject, so a chain somebody else started never runs as the responsible without their
61
+ * confirmation. The run's source is who confirmed it, else who it was requested by.
62
+ */
63
+ readonly causedByRunId?: string;
64
+ /**
65
+ * How work whose source is not the responsible runs: `auto` (the default) asks the responsible to confirm it;
66
+ * `mine` queues it at once as the source, on a runner they may use (their own or a team runner), refused with
67
+ * `NO_RUNNER_AVAILABLE` when there is none now. Ignored when the source is the responsible or there is none.
68
+ */
69
+ readonly execution?: RunExecution;
40
70
  readonly ownerUserId?: string | null;
41
71
  /** Lower runs first; 0 by default. Work merged into a waiting run raises it to the more urgent of the two. */
42
72
  readonly priority?: number;
@@ -56,13 +86,28 @@ export interface EnqueueRequest {
56
86
  readonly maxAttempts?: number;
57
87
  readonly input: NewInput;
58
88
  }
59
- export interface EnqueueResult {
89
+ /** Work that was queued. */
90
+ export interface RunEnqueued {
60
91
  readonly runId: string;
61
92
  /** `created` a new run, `merged` into a queued one, `appended` to one a runner holds. */
62
93
  readonly outcome: 'created' | 'merged' | 'appended';
63
94
  readonly status: RunStatus;
64
95
  readonly inputId: string;
65
96
  }
97
+ /** Work that waits for the subject's responsible to confirm it: a run request (`runs.requests`), and no run yet. */
98
+ export interface RunRequestPending {
99
+ readonly outcome: 'pending';
100
+ readonly requestId: string;
101
+ readonly status: 'pending';
102
+ readonly runId: null;
103
+ readonly inputId: null;
104
+ }
105
+ export type EnqueueResult = RunEnqueued | RunRequestPending;
106
+ /**
107
+ * The run work went into, for a caller that names no responsible (a conversation, a consultation): such work is never
108
+ * pending, so a pending result is a programming error.
109
+ */
110
+ export declare function queuedRun(result: EnqueueResult): RunEnqueued;
66
111
  export interface RunFilter {
67
112
  readonly subjectKind?: string;
68
113
  readonly subjectId?: string;
@@ -78,8 +123,14 @@ export interface RunFilter {
78
123
  };
79
124
  }
80
125
  export interface RunService {
81
- /** Queues work for an agent. In `outer`, joins the caller's transaction (the caller publishes its events). */
126
+ /**
127
+ * Queues work for an agent, or, when someone other than the subject's responsible caused it, asks the responsible
128
+ * to confirm it first (`outcome` `pending`). In `outer`, joins the caller's transaction (the caller publishes its
129
+ * events).
130
+ */
82
131
  enqueue(request: EnqueueRequest, outer?: Tx): Promise<EnqueueResult>;
132
+ /** Work waiting for the subject's responsible to confirm it: confirming, rejecting, withdrawing, handing it on. */
133
+ readonly requests: RunRequestService;
83
134
  /** Adds input to a run that has not ended. */
84
135
  addInput(runId: string, input: NewInput, outer?: Tx): Promise<string>;
85
136
  /** A queued run ends at once; a held one is asked to stop. In `outer`, joins the caller's transaction. */
@@ -163,6 +214,10 @@ export interface RunServiceDeps extends TransitionDeps {
163
214
  readonly runners: WorkloadRunners & {
164
215
  find(conn: DatabaseConnection, id: string): Promise<Runner | null>;
165
216
  };
217
+ /** Whether a runner would take work run as a person, for work someone asks to run as themselves. */
218
+ readonly eligibility: Pick<ClaimEligibility, 'canClaim'>;
219
+ /** Names of people, for the lists of run requests. */
220
+ readonly people: Pick<People, 'names'>;
166
221
  }
167
222
  export declare function createRunService(deps: RunServiceDeps): RunService;
168
223
  //# sourceMappingURL=run.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.service.d.ts","sourceRoot":"","sources":["../../../../server/core/runs/run.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.service.d.ts","sourceRoot":"","sources":["../../../../server/core/runs/run.service.ts"],"names":[],"mappings":"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"}