@cogitator-ai/studio 0.1.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 (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +74 -0
  3. package/dist/host/checkpoints.d.ts +11 -0
  4. package/dist/host/checkpoints.d.ts.map +1 -0
  5. package/dist/host/checkpoints.js +43 -0
  6. package/dist/host/checkpoints.js.map +1 -0
  7. package/dist/host/main.d.ts +2 -0
  8. package/dist/host/main.d.ts.map +1 -0
  9. package/dist/host/main.js +49 -0
  10. package/dist/host/main.js.map +1 -0
  11. package/dist/host/project.d.ts +22 -0
  12. package/dist/host/project.d.ts.map +1 -0
  13. package/dist/host/project.js +88 -0
  14. package/dist/host/project.js.map +1 -0
  15. package/dist/host/runner.d.ts +58 -0
  16. package/dist/host/runner.d.ts.map +1 -0
  17. package/dist/host/runner.js +507 -0
  18. package/dist/host/runner.js.map +1 -0
  19. package/dist/index.d.ts +8 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +5 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/protocol.d.ts +398 -0
  24. package/dist/protocol.d.ts.map +1 -0
  25. package/dist/protocol.js +7 -0
  26. package/dist/protocol.js.map +1 -0
  27. package/dist/registry.d.ts +8 -0
  28. package/dist/registry.d.ts.map +1 -0
  29. package/dist/registry.js +119 -0
  30. package/dist/registry.js.map +1 -0
  31. package/dist/server/host-manager.d.ts +52 -0
  32. package/dist/server/host-manager.d.ts.map +1 -0
  33. package/dist/server/host-manager.js +267 -0
  34. package/dist/server/host-manager.js.map +1 -0
  35. package/dist/server/server.d.ts +41 -0
  36. package/dist/server/server.d.ts.map +1 -0
  37. package/dist/server/server.js +437 -0
  38. package/dist/server/server.js.map +1 -0
  39. package/dist/server/store.d.ts +88 -0
  40. package/dist/server/store.d.ts.map +1 -0
  41. package/dist/server/store.js +602 -0
  42. package/dist/server/store.js.map +1 -0
  43. package/dist/ui/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  44. package/dist/ui/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  45. package/dist/ui/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  46. package/dist/ui/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  47. package/dist/ui/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  48. package/dist/ui/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  49. package/dist/ui/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  50. package/dist/ui/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  51. package/dist/ui/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  52. package/dist/ui/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  53. package/dist/ui/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  54. package/dist/ui/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  55. package/dist/ui/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  56. package/dist/ui/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  57. package/dist/ui/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  58. package/dist/ui/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  59. package/dist/ui/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  60. package/dist/ui/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  61. package/dist/ui/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  62. package/dist/ui/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  63. package/dist/ui/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  64. package/dist/ui/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  65. package/dist/ui/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  66. package/dist/ui/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
  67. package/dist/ui/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
  68. package/dist/ui/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
  69. package/dist/ui/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
  70. package/dist/ui/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
  71. package/dist/ui/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
  72. package/dist/ui/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  73. package/dist/ui/assets/icons-f6vmKzId.js +1 -0
  74. package/dist/ui/assets/index-C4hZIqRf.js +8 -0
  75. package/dist/ui/assets/index-D3MDAGJQ.css +1 -0
  76. package/dist/ui/assets/markdown-B0lQtlaX.js +39 -0
  77. package/dist/ui/assets/math-D93AjGz5.css +1 -0
  78. package/dist/ui/assets/math-Dyab3dfo.js +257 -0
  79. package/dist/ui/assets/react-Oh0PCTUB.js +9 -0
  80. package/dist/ui/favicon.svg +1 -0
  81. package/dist/ui/index.html +21 -0
  82. package/dist/ui/theme.js +4 -0
  83. package/package.json +90 -0
@@ -0,0 +1,437 @@
1
+ import { randomBytes, randomUUID, timingSafeEqual } from 'node:crypto';
2
+ import { existsSync, readFileSync, statSync } from 'node:fs';
3
+ import { createServer } from 'node:http';
4
+ import { basename, extname, join, normalize, resolve, sep } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { calculateCost, initializeModels } from '@cogitator-ai/models';
7
+ import { HostManager } from './host-manager.js';
8
+ import { StudioStore } from './store.js';
9
+ const LOOPBACK = new Set(['127.0.0.1', '::1', 'localhost']);
10
+ const MAX_BODY_BYTES = 1024 * 1024;
11
+ const MIME = {
12
+ '.html': 'text/html; charset=utf-8',
13
+ '.js': 'text/javascript; charset=utf-8',
14
+ '.css': 'text/css; charset=utf-8',
15
+ '.svg': 'image/svg+xml',
16
+ '.png': 'image/png',
17
+ '.ico': 'image/x-icon',
18
+ '.json': 'application/json',
19
+ '.woff2': 'font/woff2',
20
+ '.woff': 'font/woff',
21
+ };
22
+ class HttpError extends Error {
23
+ status;
24
+ constructor(status, message) {
25
+ super(message);
26
+ this.status = status;
27
+ }
28
+ }
29
+ function uiDirectory() {
30
+ return fileURLToPath(new URL('../ui/', import.meta.url));
31
+ }
32
+ function send(res, status, body) {
33
+ const json = JSON.stringify(body);
34
+ res.writeHead(status, {
35
+ 'content-type': 'application/json; charset=utf-8',
36
+ 'cache-control': 'no-store',
37
+ 'content-length': Buffer.byteLength(json),
38
+ });
39
+ res.end(json);
40
+ }
41
+ async function readJson(req) {
42
+ if (!(req.headers['content-type'] ?? '').includes('application/json')) {
43
+ throw new HttpError(415, 'Send JSON with content-type application/json');
44
+ }
45
+ let size = 0;
46
+ const chunks = [];
47
+ for await (const chunk of req) {
48
+ const buffer = chunk;
49
+ size += buffer.length;
50
+ if (size > MAX_BODY_BYTES)
51
+ throw new HttpError(413, 'The request body is too large');
52
+ chunks.push(buffer);
53
+ }
54
+ const text = Buffer.concat(chunks).toString('utf-8');
55
+ if (!text.trim())
56
+ return {};
57
+ const parsed = JSON.parse(text);
58
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
59
+ throw new HttpError(400, 'The request body must be a JSON object');
60
+ }
61
+ return parsed;
62
+ }
63
+ function requireString(body, field) {
64
+ const value = body[field];
65
+ if (typeof value !== 'string' || value.trim() === '')
66
+ throw new HttpError(400, `"${field}" is required`);
67
+ return value;
68
+ }
69
+ function optionalString(body, field) {
70
+ const value = body[field];
71
+ if (value === undefined || value === null)
72
+ return undefined;
73
+ if (typeof value !== 'string')
74
+ throw new HttpError(400, `"${field}" must be a string`);
75
+ return value;
76
+ }
77
+ function sameToken(given, expected) {
78
+ if (!given)
79
+ return false;
80
+ const a = Buffer.from(given);
81
+ const b = Buffer.from(expected);
82
+ return a.length === b.length && timingSafeEqual(a, b);
83
+ }
84
+ function cookieToken(req) {
85
+ const cookie = req.headers.cookie ?? '';
86
+ return /(?:^|;\s*)cogitator_studio=([^;]+)/.exec(cookie)?.[1];
87
+ }
88
+ function hostnameOf(header) {
89
+ if (!header)
90
+ return undefined;
91
+ if (header.startsWith('['))
92
+ return header.slice(1, header.indexOf(']'));
93
+ return header.split(':')[0];
94
+ }
95
+ function listen(server, host, port, strict) {
96
+ return new Promise((resolvePort, reject) => {
97
+ const attempt = (candidate, left) => {
98
+ const onError = (error) => {
99
+ server.off('listening', onListening);
100
+ if (error.code === 'EADDRINUSE' && !strict && left > 0)
101
+ attempt(candidate + 1, left - 1);
102
+ else
103
+ reject(error);
104
+ };
105
+ const onListening = () => {
106
+ server.off('error', onError);
107
+ const address = server.address();
108
+ resolvePort(typeof address === 'object' && address ? address.port : candidate);
109
+ };
110
+ server.once('error', onError);
111
+ server.once('listening', onListening);
112
+ server.listen(candidate, host);
113
+ };
114
+ attempt(port, 20);
115
+ });
116
+ }
117
+ /**
118
+ * Starts Cogitator Studio for the project in `projectDir`: the runtime host
119
+ * that runs the project, and the web app to chat with its agents, read
120
+ * traces and costs, approve tool calls, run workflows and fork runs.
121
+ */
122
+ export async function startStudio(options) {
123
+ const projectDir = resolve(options.projectDir);
124
+ const studioDir = resolve(options.studioDir ?? join(projectDir, '.cogitator', 'studio'));
125
+ const host = options.host ?? '127.0.0.1';
126
+ const exposed = !LOOPBACK.has(host);
127
+ const token = exposed ? (options.token ?? randomBytes(18).toString('base64url')) : undefined;
128
+ const log = options.log ?? (() => undefined);
129
+ if (!options.price) {
130
+ initializeModels().catch(() => undefined);
131
+ }
132
+ const price = options.price ?? ((model, usage) => calculateCost(model, usage));
133
+ const store = new StudioStore(studioDir, price);
134
+ const projectName = (() => {
135
+ try {
136
+ const manifest = JSON.parse(readFileSync(join(projectDir, 'package.json'), 'utf-8'));
137
+ return typeof manifest.name === 'string' ? manifest.name : basename(projectDir);
138
+ }
139
+ catch {
140
+ return basename(projectDir);
141
+ }
142
+ })();
143
+ const clients = new Set();
144
+ const broadcast = (event) => {
145
+ const data = `data: ${JSON.stringify(event)}\n\n`;
146
+ for (const client of clients)
147
+ client.write(data);
148
+ };
149
+ const broadcastRuns = (runs) => {
150
+ for (const run of runs)
151
+ broadcast({ type: 'run', run });
152
+ };
153
+ const broadcastThread = (thread) => {
154
+ if (thread)
155
+ broadcast({ type: 'thread', thread });
156
+ };
157
+ const manager = new HostManager({
158
+ projectDir,
159
+ studioDir,
160
+ watch: options.watch,
161
+ onStatus: (status) => {
162
+ if (status.state === 'ready')
163
+ store.setRegistry(status.registry);
164
+ broadcast({ type: 'host', status });
165
+ },
166
+ onEvent: (event) => {
167
+ const change = store.apply(event);
168
+ broadcastRuns(change.runs);
169
+ if (change.token)
170
+ broadcast({ type: 'token', ...change.token });
171
+ if (change.reasoning)
172
+ broadcast({ type: 'reasoning', ...change.reasoning });
173
+ if (event.type === 'run.started' &&
174
+ event.threadId &&
175
+ event.kind === 'agent' &&
176
+ event.rootRunId === event.runId) {
177
+ broadcastThread(store.addRunToThread(event.threadId, event.runId));
178
+ }
179
+ },
180
+ onLost: (reason) => broadcastRuns(store.abandonRunning(reason)),
181
+ onOutput: log,
182
+ });
183
+ const allowedHosts = (port) => {
184
+ const names = new Set(['127.0.0.1', 'localhost', '::1']);
185
+ if (exposed && host !== '0.0.0.0' && host !== '::')
186
+ names.add(host);
187
+ return { names, port };
188
+ };
189
+ let port = 0;
190
+ const server = createServer((req, res) => {
191
+ void handle(req, res).catch((error) => {
192
+ const status = error instanceof HttpError ? error.status : 500;
193
+ if (!res.headersSent)
194
+ send(res, status, { error: error instanceof Error ? error.message : String(error) });
195
+ else
196
+ res.end();
197
+ });
198
+ });
199
+ async function handle(req, res) {
200
+ const url = new URL(req.url ?? '/', `http://${req.headers.host ?? 'localhost'}`);
201
+ const path = url.pathname;
202
+ if (!exposed) {
203
+ const allowed = allowedHosts(port);
204
+ const hostname = hostnameOf(req.headers.host);
205
+ if (!hostname || !allowed.names.has(hostname)) {
206
+ throw new HttpError(403, 'Cogitator Studio answers on localhost only');
207
+ }
208
+ }
209
+ else if (token) {
210
+ const given = url.searchParams.get('token') ??
211
+ cookieToken(req) ??
212
+ req.headers.authorization?.replace(/^Bearer\s+/i, '');
213
+ if (!sameToken(given ?? undefined, token))
214
+ throw new HttpError(401, 'Open the studio with the URL cogitator dev printed');
215
+ if (url.searchParams.has('token')) {
216
+ res.setHeader('set-cookie', `cogitator_studio=${token}; HttpOnly; SameSite=Strict; Path=/`);
217
+ }
218
+ }
219
+ if (req.method === 'POST') {
220
+ const origin = req.headers.origin;
221
+ if (origin) {
222
+ let originHost;
223
+ try {
224
+ originHost = new URL(origin).host;
225
+ }
226
+ catch {
227
+ originHost = undefined;
228
+ }
229
+ if (originHost !== req.headers.host)
230
+ throw new HttpError(403, 'Requests from other sites are refused');
231
+ }
232
+ }
233
+ if (path.startsWith('/api/'))
234
+ return api(req, res, url);
235
+ return serveUi(res, path);
236
+ }
237
+ function serveUi(res, path) {
238
+ const root = uiDirectory();
239
+ const index = join(root, 'index.html');
240
+ if (!existsSync(index)) {
241
+ res.writeHead(500, { 'content-type': 'text/plain' });
242
+ res.end('The studio UI is not built: run pnpm --filter @cogitator-ai/studio build');
243
+ return;
244
+ }
245
+ const candidate = normalize(join(root, decodeURIComponent(path)));
246
+ const file = candidate.startsWith(root) && existsSync(candidate) && statSync(candidate).isFile()
247
+ ? candidate
248
+ : index;
249
+ const type = MIME[extname(file)] ?? 'application/octet-stream';
250
+ const immutable = basename(file) !== 'index.html' && file.includes(`${sep}assets${sep}`);
251
+ res.writeHead(200, {
252
+ 'content-type': type,
253
+ 'cache-control': immutable ? 'public, max-age=31536000, immutable' : 'no-store',
254
+ 'x-content-type-options': 'nosniff',
255
+ ...(type.startsWith('text/html') && {
256
+ 'content-security-policy': "default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; frame-ancestors 'none'",
257
+ }),
258
+ });
259
+ res.end(readFileSync(file));
260
+ }
261
+ function runOr404(id) {
262
+ const run = store.getRun(id);
263
+ if (!run)
264
+ throw new HttpError(404, `There is no run ${id}`);
265
+ return run;
266
+ }
267
+ async function api(req, res, url) {
268
+ const parts = url.pathname.split('/').filter(Boolean).slice(1).map(decodeURIComponent);
269
+ const method = req.method ?? 'GET';
270
+ const route = `${method} /${parts.map((part, i) => (i % 2 === 1 && parts[0] !== 'workflows' ? ':id' : part)).join('/')}`;
271
+ if (method === 'GET' && parts[0] === 'events') {
272
+ res.writeHead(200, {
273
+ 'content-type': 'text/event-stream',
274
+ 'cache-control': 'no-store',
275
+ connection: 'keep-alive',
276
+ });
277
+ res.write(`data: ${JSON.stringify({ type: 'host', status: manager.current })}\n\n`);
278
+ clients.add(res);
279
+ const ping = setInterval(() => res.write(': ping\n\n'), 15_000);
280
+ req.on('close', () => {
281
+ clearInterval(ping);
282
+ clients.delete(res);
283
+ });
284
+ return;
285
+ }
286
+ switch (route) {
287
+ case 'GET /state':
288
+ return send(res, 200, {
289
+ host: manager.current,
290
+ project: projectName,
291
+ runs: store.listRuns({ limit: 100 }),
292
+ threads: store.listThreads(),
293
+ });
294
+ case 'GET /stats':
295
+ return send(res, 200, store.stats());
296
+ case 'GET /runs': {
297
+ const kind = url.searchParams.get('kind');
298
+ return send(res, 200, {
299
+ runs: store.listRuns({
300
+ target: url.searchParams.get('target') ?? undefined,
301
+ kind: kind === 'agent' || kind === 'workflow' || kind === 'fork' ? kind : undefined,
302
+ q: url.searchParams.get('q') ?? undefined,
303
+ limit: Number(url.searchParams.get('limit') ?? 200) || 200,
304
+ }),
305
+ });
306
+ }
307
+ case 'GET /runs/:id': {
308
+ const tree = store.getRunTree(parts[1]);
309
+ if (!tree)
310
+ throw new HttpError(404, `There is no run ${parts[1]}`);
311
+ return send(res, 200, tree);
312
+ }
313
+ case 'GET /threads':
314
+ return send(res, 200, {
315
+ threads: store.listThreads(url.searchParams.get('agent') ?? undefined),
316
+ });
317
+ case 'GET /threads/:id': {
318
+ const thread = store.getThread(parts[1]);
319
+ if (!thread)
320
+ throw new HttpError(404, `There is no thread ${parts[1]}`);
321
+ const runs = thread.runs
322
+ .map((id) => store.getRun(id))
323
+ .filter((run) => run !== undefined);
324
+ return send(res, 200, { thread, runs });
325
+ }
326
+ case 'POST /chat': {
327
+ const body = await readJson(req);
328
+ const agent = requireString(body, 'agent');
329
+ const input = requireString(body, 'input');
330
+ const threadId = optionalString(body, 'threadId') ?? `studio_${randomUUID()}`;
331
+ const thread = store.touchThread(threadId, agent, input);
332
+ broadcastThread(thread);
333
+ const { runId } = await manager.request({
334
+ type: 'chat',
335
+ agent,
336
+ input,
337
+ threadId,
338
+ history: store.history(threadId),
339
+ });
340
+ broadcastThread(store.addRunToThread(threadId, runId));
341
+ return send(res, 202, { runId, threadId });
342
+ }
343
+ case 'POST /runs/:id/stop': {
344
+ runOr404(parts[1]);
345
+ return send(res, 200, await manager.request({ type: 'stop', runId: parts[1] }));
346
+ }
347
+ case 'POST /approvals/:id': {
348
+ const body = await readJson(req);
349
+ if (typeof body.approved !== 'boolean')
350
+ throw new HttpError(400, '"approved" must be true or false');
351
+ return send(res, 200, await manager.request({
352
+ type: 'approve',
353
+ approvalId: parts[1],
354
+ approved: body.approved,
355
+ ...(optionalString(body, 'reason') && { reason: optionalString(body, 'reason') }),
356
+ }));
357
+ }
358
+ case 'POST /runs/:id/fork': {
359
+ const run = runOr404(parts[1]);
360
+ if (run.kind === 'workflow')
361
+ throw new HttpError(400, 'Workflow runs are rerun from a node, not forked');
362
+ if (run.status !== 'completed' || !run.steps?.length) {
363
+ throw new HttpError(409, 'Only a completed run with steps can be forked');
364
+ }
365
+ const body = await readJson(req);
366
+ const step = body.step;
367
+ if (typeof step !== 'number' || !Number.isInteger(step) || step < 0) {
368
+ throw new HttpError(400, '"step" must be a step index of the run');
369
+ }
370
+ const toolResults = body.toolResults;
371
+ if (toolResults !== undefined &&
372
+ (typeof toolResults !== 'object' || toolResults === null || Array.isArray(toolResults))) {
373
+ throw new HttpError(400, '"toolResults" must map tool names to results');
374
+ }
375
+ const fork = {
376
+ step,
377
+ ...(optionalString(body, 'input') !== undefined && {
378
+ input: optionalString(body, 'input'),
379
+ }),
380
+ ...(optionalString(body, 'context') !== undefined && {
381
+ context: optionalString(body, 'context'),
382
+ }),
383
+ ...(toolResults !== undefined && { toolResults: toolResults }),
384
+ };
385
+ return send(res, 202, await manager.request({ type: 'fork', run, fork }));
386
+ }
387
+ case 'POST /runs/:id/rerun': {
388
+ const run = runOr404(parts[1]);
389
+ if (run.kind !== 'workflow')
390
+ throw new HttpError(400, 'Only workflow runs are rerun from a node');
391
+ const body = await readJson(req);
392
+ return send(res, 202, await manager.request({
393
+ type: 'workflow.rerun',
394
+ run,
395
+ fromNode: requireString(body, 'fromNode'),
396
+ }));
397
+ }
398
+ default:
399
+ if (method === 'POST' &&
400
+ parts[0] === 'workflows' &&
401
+ parts.length === 3 &&
402
+ parts[2] === 'run') {
403
+ const body = await readJson(req);
404
+ return send(res, 202, await manager.request({
405
+ type: 'workflow.run',
406
+ workflow: parts[1],
407
+ input: body.input ?? {},
408
+ }));
409
+ }
410
+ throw new HttpError(404, `No route ${method} ${url.pathname}`);
411
+ }
412
+ }
413
+ port = await listen(server, host, options.port ?? 4321, options.strictPort === true);
414
+ manager.start();
415
+ const displayHost = exposed
416
+ ? host === '0.0.0.0' || host === '::'
417
+ ? 'localhost'
418
+ : host
419
+ : 'localhost';
420
+ const url = `http://${displayHost.includes(':') ? `[${displayHost}]` : displayHost}:${port}/${token ? `?token=${token}` : ''}`;
421
+ return {
422
+ url,
423
+ port,
424
+ ...(token && { token }),
425
+ store,
426
+ hostStatus: () => manager.current,
427
+ ready: () => manager.ready(),
428
+ async close() {
429
+ for (const client of clients)
430
+ client.end();
431
+ clients.clear();
432
+ await manager.close();
433
+ await new Promise((done) => server.close(() => done()));
434
+ },
435
+ };
436
+ }
437
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import type { HistoryMessage, HostEvent, RegistryInfo, RunRecord, StudioStats, ThreadRecord } from '../protocol.js';
2
+ /** Prices a model call, `null` when the model's price is unknown. */
3
+ export type Pricer = (model: string, usage: {
4
+ inputTokens: number;
5
+ outputTokens: number;
6
+ }) => number | null;
7
+ export interface RunQuery {
8
+ /** Registry key of an agent or workflow. */
9
+ target?: string;
10
+ kind?: RunRecord['kind'];
11
+ /** Words looked up in the input, the output, the target and the error. */
12
+ q?: string;
13
+ limit?: number;
14
+ }
15
+ /** What changed after an event, for the server to push to the UI. */
16
+ export interface StoreChange {
17
+ runs: RunRecord[];
18
+ token?: {
19
+ runId: string;
20
+ text: string;
21
+ };
22
+ reasoning?: {
23
+ runId: string;
24
+ text: string;
25
+ };
26
+ }
27
+ /**
28
+ * The runs and threads of the studio, kept as JSON files under
29
+ * `.cogitator/studio` so the history survives restarts without a database.
30
+ * It turns what the host reports into run records: spans priced per model
31
+ * call, nested runs under the tool call that started them, workflow nodes
32
+ * with their status.
33
+ */
34
+ export declare class StudioStore {
35
+ private readonly directory;
36
+ private readonly price;
37
+ private readonly runs;
38
+ private readonly threads;
39
+ private readonly roots;
40
+ private registry?;
41
+ constructor(directory: string, price: Pricer);
42
+ private load;
43
+ private persist;
44
+ private persistThreads;
45
+ setRegistry(registry: RegistryInfo): void;
46
+ getRun(id: string): RunRecord | undefined;
47
+ /** A run with every run it started, nested ones included, and its forks. */
48
+ getRunTree(id: string): {
49
+ run: RunRecord;
50
+ descendants: RunRecord[];
51
+ forks: RunRecord[];
52
+ } | undefined;
53
+ /** Runs the user started (not the nested ones), newest first. */
54
+ listRuns(query?: RunQuery): RunRecord[];
55
+ /**
56
+ * Whether a workflow started the run, directly or through other runs: the
57
+ * workflow's usage already sums it.
58
+ */
59
+ private insideWorkflow;
60
+ /** Counts, spend, latency and daily activity over every run kept. */
61
+ stats(now?: number, days?: number): StudioStats;
62
+ listThreads(agent?: string): ThreadRecord[];
63
+ getThread(id: string): ThreadRecord | undefined;
64
+ /** The thread a chat message goes to, created on the first message. */
65
+ touchThread(id: string, agent: string, input: string): ThreadRecord;
66
+ addRunToThread(threadId: string, runId: string): ThreadRecord | undefined;
67
+ /** The finished turns of a thread, to replay into a fresh memory. */
68
+ history(threadId: string): HistoryMessage[];
69
+ /** Marks the runs still going as failed, when the host they ran in went away. */
70
+ abandonRunning(reason: string): RunRecord[];
71
+ /**
72
+ * A span as the trace shows it. Model calls name the model without its
73
+ * provider; the run's `provider/model` qualifies it, so it is priced at
74
+ * that provider's price.
75
+ */
76
+ private spanRecord;
77
+ private initialNodes;
78
+ /**
79
+ * Puts every nested run of a finished root under the run whose tool call
80
+ * started it: the run with the latest tool span that was open when the
81
+ * nested run started. Runs no tool span holds stay under the root.
82
+ */
83
+ private linkNested;
84
+ private sumChildren;
85
+ /** Applies an event of the host and returns what changed. */
86
+ apply(event: HostEvent): StoreChange;
87
+ }
88
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/server/store.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EAET,YAAY,EACZ,SAAS,EAGT,WAAW,EAEX,YAAY,EAGb,MAAM,gBAAgB,CAAC;AAExB,qEAAqE;AACrE,MAAM,MAAM,MAAM,GAAG,CACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,KACjD,MAAM,GAAG,IAAI,CAAC;AAEnB,MAAM,WAAW,QAAQ;IACvB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACzB,0EAA0E;IAC1E,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qEAAqE;AACrE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAwBD;;;;;;GAMG;AACH,qBAAa,WAAW;IAOpB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAPxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgC;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,OAAO,CAAC,QAAQ,CAAC,CAAe;gBAGb,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM;IAMhC,OAAO,CAAC,IAAI;IA8BZ,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,cAAc;IAItB,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAIzC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIzC,4EAA4E;IAC5E,UAAU,CACR,EAAE,EAAE,MAAM,GACT;QAAE,GAAG,EAAE,SAAS,CAAC;QAAC,WAAW,EAAE,SAAS,EAAE,CAAC;QAAC,KAAK,EAAE,SAAS,EAAE,CAAA;KAAE,GAAG,SAAS;IAoB/E,iEAAiE;IACjE,QAAQ,CAAC,KAAK,GAAE,QAAa,GAAG,SAAS,EAAE;IAiB3C;;;OAGG;IACH,OAAO,CAAC,cAAc;IAatB,qEAAqE;IACrE,KAAK,CAAC,GAAG,SAAa,EAAE,IAAI,SAAK,GAAG,WAAW;IAuF/C,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IAM3C,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI/C,uEAAuE;IACvE,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY;IAoBnE,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IASzE,qEAAqE;IACrE,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE;IAa3C,iFAAiF;IACjF,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE;IAiB3C;;;;OAIG;IACH,OAAO,CAAC,UAAU;IA4BlB,OAAO,CAAC,YAAY;IAKpB;;;;OAIG;IACH,OAAO,CAAC,UAAU;IA2ClB,OAAO,CAAC,WAAW;IAuBnB,6DAA6D;IAC7D,KAAK,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW;CAiLrC"}