@castlemilk/omega 0.6.11 → 0.6.13

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 (167) hide show
  1. package/dist/cli.js +1391 -254
  2. package/dist/server/dist/app.d.ts.map +1 -1
  3. package/dist/server/dist/app.js +2 -0
  4. package/dist/server/dist/app.js.map +1 -1
  5. package/dist/server/dist/lib/run-task.d.ts.map +1 -1
  6. package/dist/server/dist/lib/run-task.js +3 -2
  7. package/dist/server/dist/lib/run-task.js.map +1 -1
  8. package/dist/server/dist/routes/metrics.d.ts.map +1 -1
  9. package/dist/server/dist/routes/metrics.js +76 -2
  10. package/dist/server/dist/routes/metrics.js.map +1 -1
  11. package/dist/server/dist/routes/prompt-versions.d.ts +4 -0
  12. package/dist/server/dist/routes/prompt-versions.d.ts.map +1 -0
  13. package/dist/server/dist/routes/prompt-versions.js +40 -0
  14. package/dist/server/dist/routes/prompt-versions.js.map +1 -0
  15. package/dist/server/dist/routes/tasks.d.ts.map +1 -1
  16. package/dist/server/dist/routes/tasks.js +4 -0
  17. package/dist/server/dist/routes/tasks.js.map +1 -1
  18. package/dist/server/node_modules/.package-lock.json +3 -3
  19. package/dist/server/node_modules/@grpc/proto-loader/build/bin/proto-loader-gen-types.js +0 -0
  20. package/dist/server/node_modules/@omega/agent/dist/executor.d.ts.map +1 -1
  21. package/dist/server/node_modules/@omega/agent/dist/executor.js +83 -10
  22. package/dist/server/node_modules/@omega/agent/dist/executor.js.map +1 -1
  23. package/dist/server/node_modules/@omega/agent/dist/index.d.ts +1 -0
  24. package/dist/server/node_modules/@omega/agent/dist/index.d.ts.map +1 -1
  25. package/dist/server/node_modules/@omega/agent/dist/index.js +1 -0
  26. package/dist/server/node_modules/@omega/agent/dist/index.js.map +1 -1
  27. package/dist/server/node_modules/@omega/agent/dist/planner.d.ts +5 -0
  28. package/dist/server/node_modules/@omega/agent/dist/planner.d.ts.map +1 -1
  29. package/dist/server/node_modules/@omega/agent/dist/planner.js +31 -5
  30. package/dist/server/node_modules/@omega/agent/dist/planner.js.map +1 -1
  31. package/dist/server/node_modules/@omega/agent/dist/prompt-versioning.d.ts +22 -0
  32. package/dist/server/node_modules/@omega/agent/dist/prompt-versioning.d.ts.map +1 -0
  33. package/dist/server/node_modules/@omega/agent/dist/prompt-versioning.js +53 -0
  34. package/dist/server/node_modules/@omega/agent/dist/prompt-versioning.js.map +1 -0
  35. package/dist/server/node_modules/@omega/agent/dist/prompts.d.ts +2 -2
  36. package/dist/server/node_modules/@omega/agent/dist/prompts.d.ts.map +1 -1
  37. package/dist/server/node_modules/@omega/agent/dist/prompts.js +44 -7
  38. package/dist/server/node_modules/@omega/agent/dist/prompts.js.map +1 -1
  39. package/dist/server/node_modules/@omega/agent/package.json +4 -0
  40. package/dist/server/node_modules/@omega/core/dist/provider.d.ts +12 -2
  41. package/dist/server/node_modules/@omega/core/dist/provider.d.ts.map +1 -1
  42. package/dist/server/node_modules/@omega/db/dist/index.d.ts +1 -0
  43. package/dist/server/node_modules/@omega/db/dist/index.d.ts.map +1 -1
  44. package/dist/server/node_modules/@omega/db/dist/index.js +1 -0
  45. package/dist/server/node_modules/@omega/db/dist/index.js.map +1 -1
  46. package/dist/server/node_modules/@omega/db/dist/prompt-versions.d.ts +19 -0
  47. package/dist/server/node_modules/@omega/db/dist/prompt-versions.d.ts.map +1 -0
  48. package/dist/server/node_modules/@omega/db/dist/prompt-versions.js +32 -0
  49. package/dist/server/node_modules/@omega/db/dist/prompt-versions.js.map +1 -0
  50. package/dist/server/node_modules/@omega/db/dist/seed.js +6 -6
  51. package/dist/server/node_modules/@omega/db/dist/seed.js.map +1 -1
  52. package/dist/server/node_modules/@omega/db/generated/client/edge.js +19 -4
  53. package/dist/server/node_modules/@omega/db/generated/client/index-browser.js +16 -1
  54. package/dist/server/node_modules/@omega/db/generated/client/index.d.ts +1511 -93
  55. package/dist/server/node_modules/@omega/db/generated/client/index.js +19 -4
  56. package/dist/server/node_modules/@omega/db/generated/client/libquery_engine-darwin-arm64.dylib.node +0 -0
  57. package/dist/server/node_modules/@omega/db/generated/client/package.json +1 -1
  58. package/dist/server/node_modules/@omega/db/generated/client/schema.prisma +14 -0
  59. package/dist/server/node_modules/@omega/db/generated/client/wasm.js +19 -4
  60. package/dist/server/node_modules/@omega/db/prisma/migrations/20260703010000_add_agent_run_usage/migration.sql +4 -0
  61. package/dist/server/node_modules/@omega/db/prisma/migrations/20260703020000_add_prompt_versions/migration.sql +16 -0
  62. package/dist/server/node_modules/@omega/providers/dist/anthropic.d.ts +2 -2
  63. package/dist/server/node_modules/@omega/providers/dist/anthropic.d.ts.map +1 -1
  64. package/dist/server/node_modules/@omega/providers/dist/anthropic.js +16 -1
  65. package/dist/server/node_modules/@omega/providers/dist/anthropic.js.map +1 -1
  66. package/dist/server/node_modules/@omega/providers/dist/gemini.d.ts +2 -2
  67. package/dist/server/node_modules/@omega/providers/dist/gemini.d.ts.map +1 -1
  68. package/dist/server/node_modules/@omega/providers/dist/gemini.js +14 -1
  69. package/dist/server/node_modules/@omega/providers/dist/gemini.js.map +1 -1
  70. package/dist/server/node_modules/@omega/providers/dist/kimi.d.ts +3 -4
  71. package/dist/server/node_modules/@omega/providers/dist/kimi.d.ts.map +1 -1
  72. package/dist/server/node_modules/@omega/providers/dist/kimi.js +6 -4
  73. package/dist/server/node_modules/@omega/providers/dist/kimi.js.map +1 -1
  74. package/dist/server/node_modules/@omega/providers/dist/ollama.d.ts +2 -2
  75. package/dist/server/node_modules/@omega/providers/dist/ollama.d.ts.map +1 -1
  76. package/dist/server/node_modules/@omega/providers/dist/ollama.js +13 -1
  77. package/dist/server/node_modules/@omega/providers/dist/ollama.js.map +1 -1
  78. package/dist/server/node_modules/@omega/providers/dist/openai.d.ts +3 -3
  79. package/dist/server/node_modules/@omega/providers/dist/openai.d.ts.map +1 -1
  80. package/dist/server/node_modules/@omega/providers/dist/openai.js +28 -5
  81. package/dist/server/node_modules/@omega/providers/dist/openai.js.map +1 -1
  82. package/dist/server/node_modules/@omega/providers/dist/providers.test.js +13 -9
  83. package/dist/server/node_modules/@omega/providers/dist/providers.test.js.map +1 -1
  84. package/dist/server/node_modules/mime/cli.js +0 -0
  85. package/dist/server/node_modules/mime/src/build.js +0 -0
  86. package/dist/server/node_modules/protobufjs/dist/light/protobuf.js +2 -2
  87. package/dist/server/node_modules/protobufjs/dist/light/protobuf.min.js +2 -2
  88. package/dist/server/node_modules/protobufjs/dist/minimal/protobuf.js +2 -2
  89. package/dist/server/node_modules/protobufjs/dist/minimal/protobuf.min.js +2 -2
  90. package/dist/server/node_modules/protobufjs/dist/protobuf.js +5 -2
  91. package/dist/server/node_modules/protobufjs/dist/protobuf.js.map +1 -1
  92. package/dist/server/node_modules/protobufjs/dist/protobuf.min.js +3 -3
  93. package/dist/server/node_modules/protobufjs/dist/protobuf.min.js.map +1 -1
  94. package/dist/server/node_modules/protobufjs/package.json +1 -1
  95. package/dist/server/node_modules/protobufjs/src/parse.js +3 -0
  96. package/dist/server/node_modules/wrap-ansi/index.js +0 -0
  97. package/dist/server/pglite-data/base/5/1247 +0 -0
  98. package/dist/server/pglite-data/base/5/1249 +0 -0
  99. package/dist/server/pglite-data/base/5/1249_fsm +0 -0
  100. package/dist/server/pglite-data/base/5/1259 +0 -0
  101. package/dist/server/pglite-data/base/5/1259_fsm +0 -0
  102. package/dist/server/pglite-data/base/5/1259_vm +0 -0
  103. package/dist/server/pglite-data/base/5/16384 +0 -0
  104. package/dist/server/pglite-data/base/5/16392 +0 -0
  105. package/dist/server/pglite-data/base/5/16394 +0 -0
  106. package/dist/server/pglite-data/base/5/16404 +0 -0
  107. package/dist/server/pglite-data/base/5/16406 +0 -0
  108. package/dist/server/pglite-data/base/5/16421 +0 -0
  109. package/dist/server/pglite-data/base/5/16480 +0 -0
  110. package/dist/server/pglite-data/base/5/16494 +0 -0
  111. package/dist/server/pglite-data/base/5/16510 +0 -0
  112. package/dist/server/pglite-data/base/5/16515 +0 -0
  113. package/dist/server/pglite-data/base/5/{24591 → 16554} +0 -0
  114. package/dist/server/pglite-data/base/5/{24592 → 16555} +0 -0
  115. package/dist/server/pglite-data/base/5/{24588 → 16557} +0 -0
  116. package/dist/server/pglite-data/base/5/{24589 → 16558} +0 -0
  117. package/dist/server/pglite-data/base/5/16564 +0 -0
  118. package/dist/server/pglite-data/base/5/16575 +0 -0
  119. package/dist/server/pglite-data/base/5/16576 +0 -0
  120. package/dist/server/pglite-data/base/5/16577 +0 -0
  121. package/dist/server/pglite-data/base/5/16579 +0 -0
  122. package/dist/server/pglite-data/base/5/2579 +0 -0
  123. package/dist/server/pglite-data/base/5/2604 +0 -0
  124. package/dist/server/pglite-data/base/5/2606 +0 -0
  125. package/dist/server/pglite-data/base/5/2608 +0 -0
  126. package/dist/server/pglite-data/base/5/2608_fsm +0 -0
  127. package/dist/server/pglite-data/base/5/2610 +0 -0
  128. package/dist/server/pglite-data/base/5/2620 +0 -0
  129. package/dist/server/pglite-data/base/5/2656 +0 -0
  130. package/dist/server/pglite-data/base/5/2657 +0 -0
  131. package/dist/server/pglite-data/base/5/2658 +0 -0
  132. package/dist/server/pglite-data/base/5/2659 +0 -0
  133. package/dist/server/pglite-data/base/5/2662 +0 -0
  134. package/dist/server/pglite-data/base/5/2663 +0 -0
  135. package/dist/server/pglite-data/base/5/2664 +0 -0
  136. package/dist/server/pglite-data/base/5/2665 +0 -0
  137. package/dist/server/pglite-data/base/5/2666 +0 -0
  138. package/dist/server/pglite-data/base/5/2667 +0 -0
  139. package/dist/server/pglite-data/base/5/2673 +0 -0
  140. package/dist/server/pglite-data/base/5/2674 +0 -0
  141. package/dist/server/pglite-data/base/5/2678 +0 -0
  142. package/dist/server/pglite-data/base/5/2679 +0 -0
  143. package/dist/server/pglite-data/base/5/2699 +0 -0
  144. package/dist/server/pglite-data/base/5/2701 +0 -0
  145. package/dist/server/pglite-data/base/5/2702 +0 -0
  146. package/dist/server/pglite-data/base/5/2703 +0 -0
  147. package/dist/server/pglite-data/base/5/2704 +0 -0
  148. package/dist/server/pglite-data/base/5/3455 +0 -0
  149. package/dist/server/pglite-data/base/5/pg_internal.init +0 -0
  150. package/dist/server/pglite-data/global/pg_control +0 -0
  151. package/dist/server/pglite-data/global/pg_internal.init +0 -0
  152. package/dist/server/pglite-data/pg_wal/000000010000000000000001 +0 -0
  153. package/dist/server/pglite-data/pg_xact/0000 +0 -0
  154. package/dist/server/pglite-data/postmaster.pid +2 -2
  155. package/dist/server/src/app.ts +2 -0
  156. package/dist/server/src/lib/run-task.ts +3 -2
  157. package/dist/server/src/routes/metrics.ts +81 -2
  158. package/dist/server/src/routes/prompt-versions.ts +46 -0
  159. package/dist/server/src/routes/tasks.ts +6 -2
  160. package/dist/web/dist/assets/index-BVjHH_u_.js +40 -0
  161. package/dist/web/dist/assets/index-BkzWwMOJ.js +40 -0
  162. package/dist/web/dist/assets/index-D4rY_mY0.css +1 -0
  163. package/dist/web/dist/assets/index-DHQbiQAM.css +1 -0
  164. package/dist/web/dist/index.html +2 -2
  165. package/package.json +14 -13
  166. /package/dist/server/pglite-data/base/5/{24576 → 16542} +0 -0
  167. /package/dist/server/pglite-data/base/5/{24587 → 16553} +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "protobufjs",
3
- "version": "7.6.4",
3
+ "version": "7.6.5",
4
4
  "versionScheme": "~",
5
5
  "description": "Protocol Buffers for JavaScript (& TypeScript).",
6
6
  "author": "Daniel Wirtz <dcode+protobufjs@dcode.io>",
@@ -678,6 +678,9 @@ function parse(source, root, options) {
678
678
  }
679
679
 
680
680
  while (token !== "=") {
681
+ if (token === null) {
682
+ throw illegal(token, "end of input");
683
+ }
681
684
  if (token === "(") {
682
685
  var parensValue = next();
683
686
  skip(")");
File without changes
Binary file
Binary file
Binary file
File without changes
File without changes
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,7 +1,7 @@
1
1
  -42
2
2
  /pglite/data
3
- 1783054560
3
+ 1783128417
4
4
  5432
5
5
 
6
6
 
7
- 695229449 1
7
+ 699617753 1
@@ -6,6 +6,7 @@ import { taskRoutes } from './routes/tasks.js';
6
6
  import { providerRoutes } from './routes/providers.js';
7
7
  import { routerRoutes } from './routes/router.js';
8
8
  import { metricsRoutes } from './routes/metrics.js';
9
+ import { promptVersionRoutes } from './routes/prompt-versions.js';
9
10
 
10
11
  export const app: express.Express = express();
11
12
 
@@ -17,6 +18,7 @@ app.use('/tasks', taskRoutes(prisma));
17
18
  app.use('/providers', providerRoutes(prisma));
18
19
  app.use('/router', routerRoutes(prisma));
19
20
  app.use('/metrics', metricsRoutes(prisma));
21
+ app.use('/prompt-versions', promptVersionRoutes(prisma));
20
22
 
21
23
  app.use((err: unknown, _req: express.Request, res: express.Response, _next: express.NextFunction) => {
22
24
  console.error(err);
@@ -41,6 +41,7 @@ export async function runTask(prisma: PrismaClient, taskId: string) {
41
41
  projectPath: task.project.path,
42
42
  projectName: task.project.name,
43
43
  autoPublish: tags.includes('publish'),
44
+ maxSteps: tags.includes('self-improve') ? 60 : 30,
44
45
  });
45
46
  return agentResult.task;
46
47
  }
@@ -80,12 +81,12 @@ export async function runTask(prisma: PrismaClient, taskId: string) {
80
81
  const prompt = [task.title, task.description].filter(Boolean).join('\n\n');
81
82
 
82
83
  try {
83
- const result = await provider.send(prompt, { model: modelName });
84
+ const response = await provider.send(prompt, { model: modelName });
84
85
  const updated = await prisma.task.update({
85
86
  where: { id: taskId },
86
87
  data: {
87
88
  status: 'done',
88
- result,
89
+ result: response.content,
89
90
  provider: providerName,
90
91
  model: modelName,
91
92
  error: null,
@@ -9,6 +9,27 @@ const __filename = fileURLToPath(import.meta.url);
9
9
  const root = path.resolve(__filename, '..', '..', '..', '..');
10
10
  const reportsDir = path.join(root, '.omega', 'reports');
11
11
 
12
+ async function listReports(pattern: RegExp): Promise<{ file: string; modifiedAt: string }[]> {
13
+ try {
14
+ const files = await fs.readdir(reportsDir);
15
+ const matches = files.filter((f) => pattern.test(f)).sort().reverse();
16
+ const results: { file: string; modifiedAt: string }[] = [];
17
+ for (const file of matches) {
18
+ const stat = await fs.stat(path.join(reportsDir, file));
19
+ results.push({ file, modifiedAt: stat.mtime.toISOString() });
20
+ }
21
+ return results;
22
+ } catch {
23
+ return [];
24
+ }
25
+ }
26
+
27
+ async function readReport(file: string): Promise<unknown> {
28
+ const raw = await fs.readFile(path.join(reportsDir, file), 'utf-8');
29
+ if (file.endsWith('.json')) return JSON.parse(raw) as unknown;
30
+ return raw;
31
+ }
32
+
12
33
  async function latestReport(pattern: RegExp): Promise<{ file: string; data: unknown } | undefined> {
13
34
  try {
14
35
  const files = await fs.readdir(reportsDir);
@@ -18,8 +39,7 @@ async function latestReport(pattern: RegExp): Promise<{ file: string; data: unkn
18
39
  .reverse();
19
40
  const latest = matches[0];
20
41
  if (!latest) return undefined;
21
- const raw = await fs.readFile(path.join(reportsDir, latest), 'utf-8');
22
- const data = latest.endsWith('.json') ? (JSON.parse(raw) as unknown) : raw;
42
+ const data = await readReport(latest);
23
43
  return { file: latest, data };
24
44
  } catch {
25
45
  return undefined;
@@ -78,6 +98,8 @@ export function metricsRoutes(prisma: PrismaClient): Router {
78
98
  )
79
99
  : 0;
80
100
 
101
+ const totalTokens = agentRuns.reduce((sum, r) => sum + (r.totalTokens ?? 0), 0);
102
+
81
103
  const recentRuns = agentRuns.map((r) => ({
82
104
  id: r.id,
83
105
  taskId: r.taskId,
@@ -88,11 +110,15 @@ export function metricsRoutes(prisma: PrismaClient): Router {
88
110
  validationSummary: r.validationSummary,
89
111
  publishedVersion: r.publishedVersion,
90
112
  durationMs: durationMs(r.createdAt, r.updatedAt),
113
+ promptTokens: r.promptTokens,
114
+ completionTokens: r.completionTokens,
115
+ totalTokens: r.totalTokens,
91
116
  createdAt: r.createdAt,
92
117
  }));
93
118
 
94
119
  const e2eReport = await latestReport(/^e2e-raw-/);
95
120
  const benchmarkReport = await latestReport(/^benchmark-/);
121
+ const abReport = await latestReport(/^ab-/);
96
122
 
97
123
  res.json({
98
124
  taskCounts,
@@ -100,13 +126,66 @@ export function metricsRoutes(prisma: PrismaClient): Router {
100
126
  providerUsage,
101
127
  modelUsage,
102
128
  avgDurationMs,
129
+ totalTokens,
103
130
  recentRuns,
104
131
  latestReports: {
105
132
  e2e: e2eReport,
106
133
  benchmark: benchmarkReport,
134
+ ab: abReport,
107
135
  },
108
136
  });
109
137
  }));
110
138
 
139
+ r.get('/reports', asyncHandler(async (_req, res) => {
140
+ const e2e = await listReports(/^e2e-raw-/);
141
+ const benchmark = await listReports(/^benchmark-/);
142
+ res.json({ e2e, benchmark });
143
+ }));
144
+
145
+ r.get('/reports/benchmark', asyncHandler(async (_req, res) => {
146
+ const reports = await listReports(/^benchmark-/);
147
+ res.json(reports);
148
+ }));
149
+
150
+ r.get('/reports/benchmark/:file', asyncHandler(async (req, res) => {
151
+ const file = path.basename(req.params.file);
152
+ if (!file.startsWith('benchmark-')) {
153
+ res.status(400).json({ error: 'Invalid benchmark report filename' });
154
+ return;
155
+ }
156
+ try {
157
+ const data = await readReport(file);
158
+ res.json(data);
159
+ } catch {
160
+ res.status(404).json({ error: 'Report not found' });
161
+ }
162
+ }));
163
+
164
+ r.get('/reports/ab', asyncHandler(async (_req, res) => {
165
+ const reports = await listReports(/^ab-/);
166
+ res.json(reports);
167
+ }));
168
+
169
+ r.get('/reports/ab/:file', asyncHandler(async (req, res) => {
170
+ const file = path.basename(req.params.file);
171
+ if (!file.startsWith('ab-')) {
172
+ res.status(400).json({ error: 'Invalid A/B report filename' });
173
+ return;
174
+ }
175
+ try {
176
+ const data = await readReport(file);
177
+ res.json(data);
178
+ } catch {
179
+ res.status(404).json({ error: 'Report not found' });
180
+ }
181
+ }));
182
+
183
+ r.get('/reports/latest', asyncHandler(async (_req, res) => {
184
+ const e2eReport = await latestReport(/^e2e-raw-/);
185
+ const benchmarkReport = await latestReport(/^benchmark-/);
186
+ const abReport = await latestReport(/^ab-/);
187
+ res.json({ e2e: e2eReport, benchmark: benchmarkReport, ab: abReport });
188
+ }));
189
+
111
190
  return r;
112
191
  }
@@ -0,0 +1,46 @@
1
+ import { Router } from 'express';
2
+ import type { PrismaClient } from '@omega/db';
3
+ import { z } from 'zod';
4
+ import { asyncHandler } from '../lib/async-handler.js';
5
+ import { createPromptVersionRepository } from '@omega/db';
6
+
7
+ const createSchema = z.object({
8
+ name: z.string().min(1),
9
+ sourcePath: z.string().min(1),
10
+ systemPrompt: z.string(),
11
+ textToolsPrompt: z.string(),
12
+ hash: z.string().min(1),
13
+ metadata: z.record(z.unknown()).optional(),
14
+ });
15
+
16
+ export function promptVersionRoutes(prisma: PrismaClient): Router {
17
+ const repo = createPromptVersionRepository(prisma);
18
+ const r = Router();
19
+
20
+ r.get('/', asyncHandler(async (_req, res) => {
21
+ const versions = await repo.list();
22
+ res.json(versions);
23
+ }));
24
+
25
+ r.get('/:id', asyncHandler(async (req, res) => {
26
+ const version = await repo.findById(req.params.id);
27
+ if (!version) {
28
+ res.status(404).json({ error: 'Prompt version not found' });
29
+ return;
30
+ }
31
+ res.json(version);
32
+ }));
33
+
34
+ r.post('/', asyncHandler(async (req, res) => {
35
+ const body = createSchema.parse(req.body);
36
+ const existing = await repo.findByHash(body.hash);
37
+ if (existing) {
38
+ res.status(200).json(existing);
39
+ return;
40
+ }
41
+ const version = await repo.create(body);
42
+ res.status(201).json(version);
43
+ }));
44
+
45
+ return r;
46
+ }
@@ -10,6 +10,8 @@ const createSchema = z.object({
10
10
  description: z.string().optional(),
11
11
  complexity: z.enum(['simple', 'medium', 'complex']).default('simple'),
12
12
  tags: z.array(z.string()).default([]),
13
+ provider: z.string().optional(),
14
+ model: z.string().optional(),
13
15
  });
14
16
 
15
17
  const updateSchema = z.object({
@@ -50,6 +52,8 @@ export function taskRoutes(prisma: PrismaClient): Router {
50
52
  description: body.description,
51
53
  complexity: body.complexity,
52
54
  tags: JSON.stringify(body.tags),
55
+ provider: body.provider,
56
+ model: body.model,
53
57
  },
54
58
  });
55
59
  res.status(201).json(task);
@@ -135,8 +139,8 @@ export function taskRoutes(prisma: PrismaClient): Router {
135
139
  const children = byParent[key] ?? [];
136
140
  return children.map((s) => ({
137
141
  ...s,
138
- attributes: s.attributes ? JSON.parse(s.attributes) : undefined,
139
- events: s.events ? JSON.parse(s.events) : undefined,
142
+ attributes: s.attributes ? (JSON.parse(s.attributes) as Record<string, unknown>) : undefined,
143
+ events: s.events ? (JSON.parse(s.events) as unknown[]) : undefined,
140
144
  children: buildTree(s.spanId),
141
145
  }));
142
146
  }