@blackms/aistack 1.0.13 → 1.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 (113) hide show
  1. package/README.md +16 -0
  2. package/dist/cli/commands/index.d.ts +1 -0
  3. package/dist/cli/commands/index.d.ts.map +1 -1
  4. package/dist/cli/commands/index.js +1 -0
  5. package/dist/cli/commands/index.js.map +1 -1
  6. package/dist/cli/commands/web.d.ts +6 -0
  7. package/dist/cli/commands/web.d.ts.map +1 -0
  8. package/dist/cli/commands/web.js +79 -0
  9. package/dist/cli/commands/web.js.map +1 -0
  10. package/dist/cli/index.js +2 -1
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +2 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/memory/index.d.ts +23 -1
  17. package/dist/memory/index.d.ts.map +1 -1
  18. package/dist/memory/index.js +54 -0
  19. package/dist/memory/index.js.map +1 -1
  20. package/dist/memory/sqlite-store.d.ts +26 -1
  21. package/dist/memory/sqlite-store.d.ts.map +1 -1
  22. package/dist/memory/sqlite-store.js +356 -0
  23. package/dist/memory/sqlite-store.js.map +1 -1
  24. package/dist/types.d.ts +56 -0
  25. package/dist/types.d.ts.map +1 -1
  26. package/dist/types.js +9 -0
  27. package/dist/types.js.map +1 -1
  28. package/dist/utils/validation.d.ts +2 -2
  29. package/dist/web/index.d.ts +8 -0
  30. package/dist/web/index.d.ts.map +1 -0
  31. package/dist/web/index.js +8 -0
  32. package/dist/web/index.js.map +1 -0
  33. package/dist/web/middleware/auth.d.ts +21 -0
  34. package/dist/web/middleware/auth.d.ts.map +1 -0
  35. package/dist/web/middleware/auth.js +31 -0
  36. package/dist/web/middleware/auth.js.map +1 -0
  37. package/dist/web/middleware/cors.d.ts +7 -0
  38. package/dist/web/middleware/cors.d.ts.map +1 -0
  39. package/dist/web/middleware/cors.js +28 -0
  40. package/dist/web/middleware/cors.js.map +1 -0
  41. package/dist/web/middleware/error.d.ts +16 -0
  42. package/dist/web/middleware/error.d.ts.map +1 -0
  43. package/dist/web/middleware/error.js +51 -0
  44. package/dist/web/middleware/error.js.map +1 -0
  45. package/dist/web/middleware/index.d.ts +7 -0
  46. package/dist/web/middleware/index.d.ts.map +1 -0
  47. package/dist/web/middleware/index.js +7 -0
  48. package/dist/web/middleware/index.js.map +1 -0
  49. package/dist/web/router.d.ts +40 -0
  50. package/dist/web/router.d.ts.map +1 -0
  51. package/dist/web/router.js +162 -0
  52. package/dist/web/router.js.map +1 -0
  53. package/dist/web/routes/agents.d.ts +7 -0
  54. package/dist/web/routes/agents.d.ts.map +1 -0
  55. package/dist/web/routes/agents.js +182 -0
  56. package/dist/web/routes/agents.js.map +1 -0
  57. package/dist/web/routes/filesystem.d.ts +7 -0
  58. package/dist/web/routes/filesystem.d.ts.map +1 -0
  59. package/dist/web/routes/filesystem.js +212 -0
  60. package/dist/web/routes/filesystem.js.map +1 -0
  61. package/dist/web/routes/index.d.ts +13 -0
  62. package/dist/web/routes/index.d.ts.map +1 -0
  63. package/dist/web/routes/index.js +13 -0
  64. package/dist/web/routes/index.js.map +1 -0
  65. package/dist/web/routes/memory.d.ts +7 -0
  66. package/dist/web/routes/memory.d.ts.map +1 -0
  67. package/dist/web/routes/memory.js +146 -0
  68. package/dist/web/routes/memory.js.map +1 -0
  69. package/dist/web/routes/projects.d.ts +7 -0
  70. package/dist/web/routes/projects.d.ts.map +1 -0
  71. package/dist/web/routes/projects.js +296 -0
  72. package/dist/web/routes/projects.js.map +1 -0
  73. package/dist/web/routes/sessions.d.ts +7 -0
  74. package/dist/web/routes/sessions.d.ts.map +1 -0
  75. package/dist/web/routes/sessions.js +75 -0
  76. package/dist/web/routes/sessions.js.map +1 -0
  77. package/dist/web/routes/specifications.d.ts +7 -0
  78. package/dist/web/routes/specifications.d.ts.map +1 -0
  79. package/dist/web/routes/specifications.js +267 -0
  80. package/dist/web/routes/specifications.js.map +1 -0
  81. package/dist/web/routes/system.d.ts +7 -0
  82. package/dist/web/routes/system.d.ts.map +1 -0
  83. package/dist/web/routes/system.js +147 -0
  84. package/dist/web/routes/system.js.map +1 -0
  85. package/dist/web/routes/tasks.d.ts +7 -0
  86. package/dist/web/routes/tasks.d.ts.map +1 -0
  87. package/dist/web/routes/tasks.js +188 -0
  88. package/dist/web/routes/tasks.js.map +1 -0
  89. package/dist/web/routes/workflows.d.ts +7 -0
  90. package/dist/web/routes/workflows.d.ts.map +1 -0
  91. package/dist/web/routes/workflows.js +132 -0
  92. package/dist/web/routes/workflows.js.map +1 -0
  93. package/dist/web/server.d.ts +49 -0
  94. package/dist/web/server.d.ts.map +1 -0
  95. package/dist/web/server.js +236 -0
  96. package/dist/web/server.js.map +1 -0
  97. package/dist/web/types.d.ts +191 -0
  98. package/dist/web/types.d.ts.map +1 -0
  99. package/dist/web/types.js +5 -0
  100. package/dist/web/types.js.map +1 -0
  101. package/dist/web/websocket/event-bridge.d.ts +115 -0
  102. package/dist/web/websocket/event-bridge.d.ts.map +1 -0
  103. package/dist/web/websocket/event-bridge.js +138 -0
  104. package/dist/web/websocket/event-bridge.js.map +1 -0
  105. package/dist/web/websocket/handler.d.ts +23 -0
  106. package/dist/web/websocket/handler.d.ts.map +1 -0
  107. package/dist/web/websocket/handler.js +282 -0
  108. package/dist/web/websocket/handler.js.map +1 -0
  109. package/dist/web/websocket/index.d.ts +6 -0
  110. package/dist/web/websocket/index.d.ts.map +1 -0
  111. package/dist/web/websocket/index.js +6 -0
  112. package/dist/web/websocket/index.js.map +1 -0
  113. package/package.json +6 -2
@@ -0,0 +1,296 @@
1
+ /**
2
+ * Project routes
3
+ */
4
+ import { PHASE_TRANSITIONS } from '../../types.js';
5
+ import { sendJson } from '../router.js';
6
+ import { badRequest, notFound } from '../middleware/error.js';
7
+ import { getMemoryManager } from '../../memory/index.js';
8
+ import { agentEvents } from '../websocket/event-bridge.js';
9
+ export function registerProjectRoutes(router, config) {
10
+ const getManager = () => getMemoryManager(config);
11
+ // GET /api/v1/projects - List projects
12
+ router.get('/api/v1/projects', (_req, res, params) => {
13
+ const status = params.query.status;
14
+ const manager = getManager();
15
+ const projects = manager.listProjects(status);
16
+ sendJson(res, projects.map(project => ({
17
+ ...project,
18
+ createdAt: project.createdAt.toISOString(),
19
+ updatedAt: project.updatedAt.toISOString(),
20
+ })));
21
+ });
22
+ // POST /api/v1/projects - Create project
23
+ router.post('/api/v1/projects', (_req, res, params) => {
24
+ const body = params.body;
25
+ if (!body?.name) {
26
+ throw badRequest('Project name is required');
27
+ }
28
+ if (!body?.path) {
29
+ throw badRequest('Project path is required');
30
+ }
31
+ const manager = getManager();
32
+ const project = manager.createProject(body.name, body.path, body.description, body.metadata);
33
+ // Emit event for WebSocket clients
34
+ agentEvents.emit('project:created', {
35
+ id: project.id,
36
+ name: project.name,
37
+ path: project.path,
38
+ });
39
+ sendJson(res, {
40
+ ...project,
41
+ createdAt: project.createdAt.toISOString(),
42
+ updatedAt: project.updatedAt.toISOString(),
43
+ }, 201);
44
+ });
45
+ // GET /api/v1/projects/:id - Get project by ID
46
+ router.get('/api/v1/projects/:id', (_req, res, params) => {
47
+ const projectId = params.path[0];
48
+ if (!projectId) {
49
+ throw badRequest('Project ID is required');
50
+ }
51
+ const manager = getManager();
52
+ const project = manager.getProject(projectId);
53
+ if (!project) {
54
+ throw notFound('Project');
55
+ }
56
+ sendJson(res, {
57
+ ...project,
58
+ createdAt: project.createdAt.toISOString(),
59
+ updatedAt: project.updatedAt.toISOString(),
60
+ });
61
+ });
62
+ // PUT /api/v1/projects/:id - Update project
63
+ router.put('/api/v1/projects/:id', (_req, res, params) => {
64
+ const projectId = params.path[0];
65
+ if (!projectId) {
66
+ throw badRequest('Project ID is required');
67
+ }
68
+ const body = params.body;
69
+ if (!body) {
70
+ throw badRequest('Request body is required');
71
+ }
72
+ const manager = getManager();
73
+ const project = manager.getProject(projectId);
74
+ if (!project) {
75
+ throw notFound('Project');
76
+ }
77
+ const success = manager.updateProject(projectId, body);
78
+ if (!success) {
79
+ throw notFound('Project');
80
+ }
81
+ const updated = manager.getProject(projectId);
82
+ // Emit event for WebSocket clients
83
+ agentEvents.emit('project:updated', {
84
+ id: projectId,
85
+ changes: body,
86
+ });
87
+ sendJson(res, {
88
+ ...updated,
89
+ createdAt: updated?.createdAt.toISOString(),
90
+ updatedAt: updated?.updatedAt.toISOString(),
91
+ });
92
+ });
93
+ // DELETE /api/v1/projects/:id - Delete project
94
+ router.delete('/api/v1/projects/:id', (_req, res, params) => {
95
+ const projectId = params.path[0];
96
+ if (!projectId) {
97
+ throw badRequest('Project ID is required');
98
+ }
99
+ const manager = getManager();
100
+ const success = manager.deleteProject(projectId);
101
+ if (!success) {
102
+ throw notFound('Project');
103
+ }
104
+ sendJson(res, { deleted: true });
105
+ });
106
+ // GET /api/v1/projects/:id/tasks - List project tasks
107
+ router.get('/api/v1/projects/:id/tasks', (_req, res, params) => {
108
+ const projectId = params.path[0];
109
+ if (!projectId) {
110
+ throw badRequest('Project ID is required');
111
+ }
112
+ const phase = params.query.phase;
113
+ const manager = getManager();
114
+ const project = manager.getProject(projectId);
115
+ if (!project) {
116
+ throw notFound('Project');
117
+ }
118
+ const tasks = manager.listProjectTasks(projectId, phase);
119
+ sendJson(res, tasks.map(task => ({
120
+ ...task,
121
+ createdAt: task.createdAt.toISOString(),
122
+ updatedAt: task.updatedAt.toISOString(),
123
+ completedAt: task.completedAt?.toISOString(),
124
+ })));
125
+ });
126
+ // POST /api/v1/projects/:id/tasks - Create project task
127
+ router.post('/api/v1/projects/:id/tasks', (_req, res, params) => {
128
+ const projectId = params.path[0];
129
+ if (!projectId) {
130
+ throw badRequest('Project ID is required');
131
+ }
132
+ const body = params.body;
133
+ if (!body?.title) {
134
+ throw badRequest('Task title is required');
135
+ }
136
+ const manager = getManager();
137
+ const project = manager.getProject(projectId);
138
+ if (!project) {
139
+ throw notFound('Project');
140
+ }
141
+ const task = manager.createProjectTask(projectId, body.title, {
142
+ description: body.description,
143
+ priority: body.priority,
144
+ assignedAgents: body.assignedAgents,
145
+ });
146
+ // Emit event for WebSocket clients
147
+ agentEvents.emit('project:task:created', {
148
+ projectId,
149
+ taskId: task.id,
150
+ title: task.title,
151
+ });
152
+ sendJson(res, {
153
+ ...task,
154
+ createdAt: task.createdAt.toISOString(),
155
+ updatedAt: task.updatedAt.toISOString(),
156
+ }, 201);
157
+ });
158
+ // GET /api/v1/projects/:id/tasks/:taskId - Get project task
159
+ router.get('/api/v1/projects/:id/tasks/:taskId', (_req, res, params) => {
160
+ const projectId = params.path[0];
161
+ const taskId = params.path[1];
162
+ if (!projectId || !taskId) {
163
+ throw badRequest('Project ID and Task ID are required');
164
+ }
165
+ const manager = getManager();
166
+ const task = manager.getProjectTask(taskId);
167
+ if (!task || task.projectId !== projectId) {
168
+ throw notFound('Project task');
169
+ }
170
+ sendJson(res, {
171
+ ...task,
172
+ createdAt: task.createdAt.toISOString(),
173
+ updatedAt: task.updatedAt.toISOString(),
174
+ completedAt: task.completedAt?.toISOString(),
175
+ });
176
+ });
177
+ // PUT /api/v1/projects/:id/tasks/:taskId - Update project task
178
+ router.put('/api/v1/projects/:id/tasks/:taskId', (_req, res, params) => {
179
+ const projectId = params.path[0];
180
+ const taskId = params.path[1];
181
+ if (!projectId || !taskId) {
182
+ throw badRequest('Project ID and Task ID are required');
183
+ }
184
+ const body = params.body;
185
+ if (!body) {
186
+ throw badRequest('Request body is required');
187
+ }
188
+ const manager = getManager();
189
+ const task = manager.getProjectTask(taskId);
190
+ if (!task || task.projectId !== projectId) {
191
+ throw notFound('Project task');
192
+ }
193
+ const success = manager.updateProjectTask(taskId, body);
194
+ if (!success) {
195
+ throw notFound('Project task');
196
+ }
197
+ const updated = manager.getProjectTask(taskId);
198
+ sendJson(res, {
199
+ ...updated,
200
+ createdAt: updated?.createdAt.toISOString(),
201
+ updatedAt: updated?.updatedAt.toISOString(),
202
+ completedAt: updated?.completedAt?.toISOString(),
203
+ });
204
+ });
205
+ // DELETE /api/v1/projects/:id/tasks/:taskId - Delete project task
206
+ router.delete('/api/v1/projects/:id/tasks/:taskId', (_req, res, params) => {
207
+ const projectId = params.path[0];
208
+ const taskId = params.path[1];
209
+ if (!projectId || !taskId) {
210
+ throw badRequest('Project ID and Task ID are required');
211
+ }
212
+ const manager = getManager();
213
+ const task = manager.getProjectTask(taskId);
214
+ if (!task || task.projectId !== projectId) {
215
+ throw notFound('Project task');
216
+ }
217
+ const success = manager.deleteProjectTask(taskId);
218
+ if (!success) {
219
+ throw notFound('Project task');
220
+ }
221
+ sendJson(res, { deleted: true });
222
+ });
223
+ // PUT /api/v1/projects/:id/tasks/:taskId/phase - Transition task phase
224
+ router.put('/api/v1/projects/:id/tasks/:taskId/phase', (_req, res, params) => {
225
+ const projectId = params.path[0];
226
+ const taskId = params.path[1];
227
+ if (!projectId || !taskId) {
228
+ throw badRequest('Project ID and Task ID are required');
229
+ }
230
+ const body = params.body;
231
+ if (!body?.phase) {
232
+ throw badRequest('Phase is required');
233
+ }
234
+ const validPhases = ['draft', 'specification', 'review', 'development', 'completed', 'cancelled'];
235
+ if (!validPhases.includes(body.phase)) {
236
+ throw badRequest(`Invalid phase. Must be one of: ${validPhases.join(', ')}`);
237
+ }
238
+ const manager = getManager();
239
+ const task = manager.getProjectTask(taskId);
240
+ if (!task || task.projectId !== projectId) {
241
+ throw notFound('Project task');
242
+ }
243
+ // Check if transition is valid
244
+ const allowedTransitions = PHASE_TRANSITIONS[task.phase];
245
+ if (!allowedTransitions.includes(body.phase)) {
246
+ throw badRequest(`Cannot transition from ${task.phase} to ${body.phase}. Allowed: ${allowedTransitions.join(', ')}`);
247
+ }
248
+ const success = manager.updateProjectTaskPhase(taskId, body.phase);
249
+ if (!success) {
250
+ throw notFound('Project task');
251
+ }
252
+ const updated = manager.getProjectTask(taskId);
253
+ // Emit event for WebSocket clients
254
+ agentEvents.emit('project:task:phase', {
255
+ projectId,
256
+ taskId,
257
+ fromPhase: task.phase,
258
+ toPhase: body.phase,
259
+ });
260
+ sendJson(res, {
261
+ ...updated,
262
+ createdAt: updated?.createdAt.toISOString(),
263
+ updatedAt: updated?.updatedAt.toISOString(),
264
+ completedAt: updated?.completedAt?.toISOString(),
265
+ });
266
+ });
267
+ // PUT /api/v1/projects/:id/tasks/:taskId/assign - Assign agents to task
268
+ router.put('/api/v1/projects/:id/tasks/:taskId/assign', (_req, res, params) => {
269
+ const projectId = params.path[0];
270
+ const taskId = params.path[1];
271
+ if (!projectId || !taskId) {
272
+ throw badRequest('Project ID and Task ID are required');
273
+ }
274
+ const body = params.body;
275
+ if (!body?.agents || !Array.isArray(body.agents)) {
276
+ throw badRequest('Agents array is required');
277
+ }
278
+ const manager = getManager();
279
+ const task = manager.getProjectTask(taskId);
280
+ if (!task || task.projectId !== projectId) {
281
+ throw notFound('Project task');
282
+ }
283
+ const success = manager.updateProjectTask(taskId, { assignedAgents: body.agents });
284
+ if (!success) {
285
+ throw notFound('Project task');
286
+ }
287
+ const updated = manager.getProjectTask(taskId);
288
+ sendJson(res, {
289
+ ...updated,
290
+ createdAt: updated?.createdAt.toISOString(),
291
+ updatedAt: updated?.updatedAt.toISOString(),
292
+ completedAt: updated?.completedAt?.toISOString(),
293
+ });
294
+ });
295
+ }
296
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../../src/web/routes/projects.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAkB,MAAM,gBAAgB,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAU3D,MAAM,UAAU,qBAAqB,CAAC,MAAc,EAAE,MAAwB;IAC5E,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAElD,uCAAuC;IACvC,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QACnD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAA2C,CAAC;QACxE,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAE9C,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACrC,GAAG,OAAO;YACV,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE;YAC1C,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE;SAC3C,CAAC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,yCAAyC;IACzC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QACpD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAwC,CAAC;QAE7D,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAChB,MAAM,UAAU,CAAC,0BAA0B,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAChB,MAAM,UAAU,CAAC,0BAA0B,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CACnC,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,QAAQ,CACd,CAAC;QAEF,mCAAmC;QACnC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAClC,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QAEH,QAAQ,CAAC,GAAG,EAAE;YACZ,GAAG,OAAO;YACV,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE;YAC1C,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE;SAC3C,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;IAEH,+CAA+C;IAC/C,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QACvD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,UAAU,CAAC,wBAAwB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;QAED,QAAQ,CAAC,GAAG,EAAE;YACZ,GAAG,OAAO;YACV,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE;YAC1C,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE;SAC3C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,4CAA4C;IAC5C,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QACvD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,UAAU,CAAC,wBAAwB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAwC,CAAC;QAC7D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,UAAU,CAAC,0BAA0B,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAE9C,mCAAmC;QACnC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAClC,EAAE,EAAE,SAAS;YACb,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,QAAQ,CAAC,GAAG,EAAE;YACZ,GAAG,OAAO;YACV,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,WAAW,EAAE;YAC3C,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,WAAW,EAAE;SAC5C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,+CAA+C;IAC/C,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,UAAU,CAAC,wBAAwB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;QAED,QAAQ,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,sDAAsD;IACtD,MAAM,CAAC,GAAG,CAAC,4BAA4B,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,UAAU,CAAC,wBAAwB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAA8B,CAAC;QAC1D,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAE7B,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAEzD,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/B,GAAG,IAAI;YACP,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YACvC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YACvC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE;SAC7C,CAAC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,wDAAwD;IACxD,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QAC9D,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,UAAU,CAAC,wBAAwB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAA4C,CAAC;QACjE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YACjB,MAAM,UAAU,CAAC,wBAAwB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE;YAC5D,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC,CAAC;QAEH,mCAAmC;QACnC,WAAW,CAAC,IAAI,CAAC,sBAAsB,EAAE;YACvC,SAAS;YACT,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QAEH,QAAQ,CAAC,GAAG,EAAE;YACZ,GAAG,IAAI;YACP,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YACvC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;SACxC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;IAEH,4DAA4D;IAC5D,MAAM,CAAC,GAAG,CAAC,oCAAoC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QACrE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,UAAU,CAAC,qCAAqC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAC;QACjC,CAAC;QAED,QAAQ,CAAC,GAAG,EAAE;YACZ,GAAG,IAAI;YACP,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YACvC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YACvC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE;SAC7C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,+DAA+D;IAC/D,MAAM,CAAC,GAAG,CAAC,oCAAoC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QACrE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,UAAU,CAAC,qCAAqC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAA4C,CAAC;QACjE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,UAAU,CAAC,0BAA0B,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAE/C,QAAQ,CAAC,GAAG,EAAE;YACZ,GAAG,OAAO;YACV,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,WAAW,EAAE;YAC3C,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,WAAW,EAAE;YAC3C,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE;SACjD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,kEAAkE;IAClE,MAAM,CAAC,MAAM,CAAC,oCAAoC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QACxE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,UAAU,CAAC,qCAAqC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAC;QACjC,CAAC;QAED,QAAQ,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,uEAAuE;IACvE,MAAM,CAAC,GAAG,CAAC,0CAA0C,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QAC3E,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,UAAU,CAAC,qCAAqC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAA0C,CAAC;QAC/D,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YACjB,MAAM,UAAU,CAAC,mBAAmB,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,WAAW,GAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAC/G,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAkB,CAAC,EAAE,CAAC;YACnD,MAAM,UAAU,CAAC,kCAAkC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAC;QACjC,CAAC;QAED,+BAA+B;QAC/B,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAkB,CAAC,EAAE,CAAC;YAC1D,MAAM,UAAU,CAAC,0BAA0B,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,cAAc,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvH,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAkB,CAAC,CAAC;QAChF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAE/C,mCAAmC;QACnC,WAAW,CAAC,IAAI,CAAC,oBAAoB,EAAE;YACrC,SAAS;YACT,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,KAAK;YACrB,OAAO,EAAE,IAAI,CAAC,KAAK;SACpB,CAAC,CAAC;QAEH,QAAQ,CAAC,GAAG,EAAE;YACZ,GAAG,OAAO;YACV,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,WAAW,EAAE;YAC3C,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,WAAW,EAAE;YAC3C,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE;SACjD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,wEAAwE;IACxE,MAAM,CAAC,GAAG,CAAC,2CAA2C,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QAC5E,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,UAAU,CAAC,qCAAqC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAuC,CAAC;QAC5D,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,MAAM,UAAU,CAAC,0BAA0B,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAE/C,QAAQ,CAAC,GAAG,EAAE;YACZ,GAAG,OAAO;YACV,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,WAAW,EAAE;YAC3C,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,WAAW,EAAE;YAC3C,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE;SACjD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Session routes
3
+ */
4
+ import type { AgentStackConfig } from '../../types.js';
5
+ import type { Router } from '../router.js';
6
+ export declare function registerSessionRoutes(router: Router, config: AgentStackConfig): void;
7
+ //# sourceMappingURL=sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/web/routes/sessions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAM3C,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAmFpF"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Session routes
3
+ */
4
+ import { sendJson } from '../router.js';
5
+ import { badRequest, notFound } from '../middleware/error.js';
6
+ import { getMemoryManager } from '../../memory/index.js';
7
+ export function registerSessionRoutes(router, config) {
8
+ const getManager = () => getMemoryManager(config);
9
+ // GET /api/v1/sessions/active - Get active session
10
+ router.get('/api/v1/sessions/active', (_req, res) => {
11
+ const manager = getManager();
12
+ const session = manager.getActiveSession();
13
+ if (!session) {
14
+ sendJson(res, null);
15
+ return;
16
+ }
17
+ sendJson(res, {
18
+ ...session,
19
+ startedAt: session.startedAt.toISOString(),
20
+ endedAt: session.endedAt?.toISOString(),
21
+ });
22
+ });
23
+ // POST /api/v1/sessions - Create new session
24
+ router.post('/api/v1/sessions', (_req, res, params) => {
25
+ const body = params.body;
26
+ const manager = getManager();
27
+ // End any existing active session first
28
+ const activeSession = manager.getActiveSession();
29
+ if (activeSession) {
30
+ manager.endSession(activeSession.id);
31
+ }
32
+ const session = manager.createSession(body?.metadata);
33
+ sendJson(res, {
34
+ ...session,
35
+ startedAt: session.startedAt.toISOString(),
36
+ endedAt: session.endedAt?.toISOString(),
37
+ }, 201);
38
+ });
39
+ // GET /api/v1/sessions/:id - Get session by ID
40
+ router.get('/api/v1/sessions/:id', (_req, res, params) => {
41
+ const sessionId = params.path[0];
42
+ if (!sessionId) {
43
+ throw badRequest('Session ID is required');
44
+ }
45
+ const manager = getManager();
46
+ const session = manager.getSession(sessionId);
47
+ if (!session) {
48
+ throw notFound('Session');
49
+ }
50
+ sendJson(res, {
51
+ ...session,
52
+ startedAt: session.startedAt.toISOString(),
53
+ endedAt: session.endedAt?.toISOString(),
54
+ });
55
+ });
56
+ // PUT /api/v1/sessions/:id/end - End session
57
+ router.put('/api/v1/sessions/:id/end', (_req, res, params) => {
58
+ const sessionId = params.path[0];
59
+ if (!sessionId) {
60
+ throw badRequest('Session ID is required');
61
+ }
62
+ const manager = getManager();
63
+ const success = manager.endSession(sessionId);
64
+ if (!success) {
65
+ throw notFound('Session');
66
+ }
67
+ const session = manager.getSession(sessionId);
68
+ sendJson(res, {
69
+ ...session,
70
+ startedAt: session?.startedAt.toISOString(),
71
+ endedAt: session?.endedAt?.toISOString(),
72
+ });
73
+ });
74
+ }
75
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/web/routes/sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Specification routes
3
+ */
4
+ import type { AgentStackConfig } from '../../types.js';
5
+ import type { Router } from '../router.js';
6
+ export declare function registerSpecificationRoutes(router: Router, config: AgentStackConfig): void;
7
+ //# sourceMappingURL=specifications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specifications.d.ts","sourceRoot":"","sources":["../../../src/web/routes/specifications.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAyD,MAAM,gBAAgB,CAAC;AAC9G,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAY3C,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CA4T1F"}