@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,267 @@
1
+ import { fork } from 'node:child_process';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { existsSync, watch } from 'node:fs';
4
+ import { createRequire } from 'node:module';
5
+ import { join, relative, sep } from 'node:path';
6
+ import { fileURLToPath, pathToFileURL } from 'node:url';
7
+ /** Files whose change reloads the project. */
8
+ const WATCHED_ROOT_FILES = new Set(['cogitator.yml', '.env', 'package.json', 'tsconfig.json']);
9
+ const IGNORED_DIRS = new Set([
10
+ 'node_modules',
11
+ '.cogitator',
12
+ 'dist',
13
+ '.git',
14
+ '.next',
15
+ 'coverage',
16
+ 'data',
17
+ ]);
18
+ const DEBOUNCE_MS = 250;
19
+ /** Whether a change of `path` (relative to the project) should reload it. */
20
+ export function reloadsProject(path) {
21
+ const parts = path.split(sep).join('/').split('/');
22
+ if (parts.some((part) => IGNORED_DIRS.has(part)))
23
+ return false;
24
+ if (parts.length === 1)
25
+ return WATCHED_ROOT_FILES.has(parts[0]);
26
+ return parts[0] === 'src' || parts[0] === 'app' || parts[0] === 'lib';
27
+ }
28
+ function tsxLoader(projectDir) {
29
+ for (const base of [join(projectDir, 'package.json'), import.meta.url]) {
30
+ try {
31
+ return pathToFileURL(createRequire(base).resolve('tsx')).href;
32
+ }
33
+ catch {
34
+ continue;
35
+ }
36
+ }
37
+ throw new Error('Cogitator Studio loads the project with tsx, which is not installed: add it with "npm install -D tsx"');
38
+ }
39
+ function hostEntry() {
40
+ const compiled = fileURLToPath(new URL('../host/main.js', import.meta.url));
41
+ return existsSync(compiled)
42
+ ? compiled
43
+ : fileURLToPath(new URL('../host/main.ts', import.meta.url));
44
+ }
45
+ /**
46
+ * Keeps the runtime host running for the studio: starts it, sends it
47
+ * requests, and starts it again when the project changes, so the studio
48
+ * process and the browser stay while the code reloads.
49
+ */
50
+ export class HostManager {
51
+ options;
52
+ child;
53
+ status = { state: 'starting' };
54
+ pending = new Map();
55
+ waiters = [];
56
+ watcher;
57
+ debounce;
58
+ closed = false;
59
+ generation = 0;
60
+ constructor(options) {
61
+ this.options = options;
62
+ }
63
+ get current() {
64
+ return this.status;
65
+ }
66
+ start() {
67
+ this.spawn();
68
+ if (this.options.watch !== false)
69
+ this.watchProject();
70
+ }
71
+ setStatus(status) {
72
+ this.status = status;
73
+ this.options.onStatus(status);
74
+ if (status.state === 'ready') {
75
+ for (const waiter of this.waiters.splice(0))
76
+ waiter.resolve();
77
+ }
78
+ else if (status.state === 'failed') {
79
+ for (const waiter of this.waiters.splice(0))
80
+ waiter.reject(new Error(status.error));
81
+ }
82
+ }
83
+ spawn() {
84
+ const generation = ++this.generation;
85
+ let loader;
86
+ try {
87
+ loader = tsxLoader(this.options.projectDir);
88
+ }
89
+ catch (error) {
90
+ this.setStatus({
91
+ state: 'failed',
92
+ error: error instanceof Error ? error.message : String(error),
93
+ });
94
+ return;
95
+ }
96
+ this.setStatus({ state: 'starting' });
97
+ const child = fork(hostEntry(), [this.options.projectDir, this.options.studioDir], {
98
+ cwd: this.options.projectDir,
99
+ execArgv: ['--import', loader, '--enable-source-maps'],
100
+ stdio: ['ignore', 'pipe', 'pipe', 'ipc'],
101
+ env: { ...process.env, COGITATOR_STUDIO: '1' },
102
+ });
103
+ this.child = child;
104
+ let stderrTail = '';
105
+ const relay = (stream) => (chunk) => {
106
+ const text = chunk.toString();
107
+ if (stream === 'stderr')
108
+ stderrTail = (stderrTail + text).slice(-4000);
109
+ for (const line of text.split('\n'))
110
+ if (line.trim())
111
+ this.options.onOutput?.(line, stream);
112
+ };
113
+ child.stdout?.on('data', relay('stdout'));
114
+ child.stderr?.on('data', relay('stderr'));
115
+ const timer = setTimeout(() => {
116
+ if (generation !== this.generation || this.status.state !== 'starting')
117
+ return;
118
+ child.kill('SIGKILL');
119
+ this.setStatus({
120
+ state: 'failed',
121
+ error: `The project took longer than ${(this.options.loadTimeoutMs ?? 60_000) / 1000} s to load`,
122
+ });
123
+ }, this.options.loadTimeoutMs ?? 60_000);
124
+ timer.unref();
125
+ child.on('message', (message) => {
126
+ if (generation !== this.generation)
127
+ return;
128
+ switch (message.type) {
129
+ case 'ready':
130
+ clearTimeout(timer);
131
+ this.setStatus({
132
+ state: 'ready',
133
+ registry: message.registry,
134
+ memory: message.memory,
135
+ loadedAt: Date.now(),
136
+ });
137
+ break;
138
+ case 'load-failed':
139
+ clearTimeout(timer);
140
+ this.setStatus({ state: 'failed', error: message.error });
141
+ break;
142
+ case 'event':
143
+ this.options.onEvent(message.event);
144
+ break;
145
+ case 'response': {
146
+ const pending = this.pending.get(message.requestId);
147
+ if (!pending)
148
+ break;
149
+ this.pending.delete(message.requestId);
150
+ if (message.ok)
151
+ pending.resolve(message.data);
152
+ else
153
+ pending.reject(new Error(message.error));
154
+ break;
155
+ }
156
+ }
157
+ });
158
+ child.on('exit', (code, signal) => {
159
+ clearTimeout(timer);
160
+ if (generation !== this.generation)
161
+ return;
162
+ this.failPending('The project process stopped');
163
+ this.options.onLost('The project process stopped during the run');
164
+ if (this.closed)
165
+ return;
166
+ if (this.status.state === 'failed')
167
+ return;
168
+ const tail = stderrTail.trim().split('\n').slice(-12).join('\n');
169
+ this.setStatus({
170
+ state: 'failed',
171
+ error: `The project process exited (${signal ?? `code ${code}`})${tail ? `:\n${tail}` : ''}`,
172
+ });
173
+ });
174
+ }
175
+ failPending(reason) {
176
+ for (const pending of this.pending.values())
177
+ pending.reject(new Error(reason));
178
+ this.pending.clear();
179
+ }
180
+ stopChild() {
181
+ const child = this.child;
182
+ this.child = undefined;
183
+ if (child?.exitCode !== null || child.signalCode !== null)
184
+ return Promise.resolve();
185
+ return new Promise((resolve) => {
186
+ const kill = setTimeout(() => child.kill('SIGKILL'), 3_000);
187
+ child.once('exit', () => {
188
+ clearTimeout(kill);
189
+ resolve();
190
+ });
191
+ child.kill('SIGTERM');
192
+ });
193
+ }
194
+ /** Starts the host again, with the project as it is now. */
195
+ async restart(reason) {
196
+ if (this.closed)
197
+ return;
198
+ this.generation++;
199
+ this.setStatus({ state: 'restarting', reason });
200
+ this.failPending(`The project reloaded: ${reason}`);
201
+ this.options.onLost(`The project reloaded during the run (${reason})`);
202
+ await this.stopChild();
203
+ if (!this.closed)
204
+ this.spawn();
205
+ }
206
+ watchProject() {
207
+ try {
208
+ this.watcher = watch(this.options.projectDir, { recursive: true }, (_event, file) => {
209
+ if (!file)
210
+ return;
211
+ const path = relative(this.options.projectDir, join(this.options.projectDir, file.toString()));
212
+ if (!reloadsProject(path))
213
+ return;
214
+ clearTimeout(this.debounce);
215
+ this.debounce = setTimeout(() => void this.restart(`${path} changed`), DEBOUNCE_MS);
216
+ });
217
+ }
218
+ catch (error) {
219
+ this.options.onOutput?.(`Cannot watch the project, reload by restarting cogitator dev: ${error instanceof Error ? error.message : String(error)}`, 'stderr');
220
+ }
221
+ }
222
+ /** Resolves once the project is loaded; rejects when it failed to load. */
223
+ ready(timeoutMs = 90_000) {
224
+ if (this.status.state === 'ready')
225
+ return Promise.resolve();
226
+ if (this.status.state === 'failed')
227
+ return Promise.reject(new Error(this.status.error));
228
+ return new Promise((resolve, reject) => {
229
+ const timer = setTimeout(() => reject(new Error('The project is still loading')), timeoutMs);
230
+ this.waiters.push({
231
+ resolve: () => {
232
+ clearTimeout(timer);
233
+ resolve();
234
+ },
235
+ reject: (error) => {
236
+ clearTimeout(timer);
237
+ reject(error);
238
+ },
239
+ });
240
+ });
241
+ }
242
+ /** Sends a request to the host once the project is loaded. */
243
+ async request(request) {
244
+ await this.ready();
245
+ const child = this.child;
246
+ if (!child?.connected)
247
+ throw new Error('The project process is not running');
248
+ const requestId = randomUUID();
249
+ return new Promise((resolve, reject) => {
250
+ this.pending.set(requestId, { resolve: (data) => resolve(data), reject });
251
+ child.send({ ...request, requestId }, (error) => {
252
+ if (!error)
253
+ return;
254
+ this.pending.delete(requestId);
255
+ reject(error);
256
+ });
257
+ });
258
+ }
259
+ async close() {
260
+ this.closed = true;
261
+ clearTimeout(this.debounce);
262
+ this.watcher?.close();
263
+ this.failPending('Cogitator Studio is closing');
264
+ await this.stopChild();
265
+ }
266
+ }
267
+ //# sourceMappingURL=host-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-manager.js","sourceRoot":"","sources":["../../src/server/host-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { HostStatus } from '../protocol.js';
2
+ import { StudioStore, type Pricer } from './store.js';
3
+ export interface StudioOptions {
4
+ projectDir: string;
5
+ /** Interface to listen on, `127.0.0.1` unless the studio should be reachable from other machines. */
6
+ host?: string;
7
+ /** Port to listen on (default 4321); the next free one is taken when it is busy, unless `strictPort`. */
8
+ port?: number;
9
+ strictPort?: boolean;
10
+ /**
11
+ * Token every request must carry when the studio listens beyond loopback.
12
+ * A random one is made when it is not given.
13
+ */
14
+ token?: string;
15
+ /** Reload the project when its files change (default `true`). */
16
+ watch?: boolean;
17
+ /** Where the history lives, `.cogitator/studio` in the project by default. */
18
+ studioDir?: string;
19
+ /** Output of the project's code and studio notices. */
20
+ log?: (line: string, stream: 'stdout' | 'stderr') => void;
21
+ /** Prices model calls; the model registry by default. */
22
+ price?: Pricer;
23
+ }
24
+ export interface StudioHandle {
25
+ url: string;
26
+ port: number;
27
+ /** The token in `url`, when the studio listens beyond loopback. */
28
+ token?: string;
29
+ store: StudioStore;
30
+ hostStatus(): HostStatus;
31
+ /** Resolves once the project is loaded, rejects when it failed. */
32
+ ready(): Promise<void>;
33
+ close(): Promise<void>;
34
+ }
35
+ /**
36
+ * Starts Cogitator Studio for the project in `projectDir`: the runtime host
37
+ * that runs the project, and the web app to chat with its agents, read
38
+ * traces and costs, approve tool calls, run workflows and fork runs.
39
+ */
40
+ export declare function startStudio(options: StudioOptions): Promise<StudioHandle>;
41
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAe,UAAU,EAAwC,MAAM,gBAAgB,CAAC;AAEpG,OAAO,EAAE,WAAW,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,qGAAqG;IACrG,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yGAAyG;IACzG,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,KAAK,IAAI,CAAC;IAC1D,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,IAAI,UAAU,CAAC;IACzB,mEAAmE;IACnE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAiHD;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAoV/E"}