@opencomputer/blue 0.0.1

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 (41) hide show
  1. package/README.md +287 -0
  2. package/dist/auth/cli-auth.d.ts +30 -0
  3. package/dist/auth/cli-auth.js +206 -0
  4. package/dist/auth/cli-auth.js.map +1 -0
  5. package/dist/channels/slack-progress.d.ts +27 -0
  6. package/dist/channels/slack-progress.js +149 -0
  7. package/dist/channels/slack-progress.js.map +1 -0
  8. package/dist/cli/index.d.ts +2 -0
  9. package/dist/cli/index.js +790 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/core/agent.d.ts +10 -0
  12. package/dist/core/agent.js +112 -0
  13. package/dist/core/agent.js.map +1 -0
  14. package/dist/core/artifact.d.ts +7 -0
  15. package/dist/core/artifact.js +46 -0
  16. package/dist/core/artifact.js.map +1 -0
  17. package/dist/dev/local-control-plane.d.ts +11 -0
  18. package/dist/dev/local-control-plane.js +639 -0
  19. package/dist/dev/local-control-plane.js.map +1 -0
  20. package/dist/dev/manager.d.ts +35 -0
  21. package/dist/dev/manager.js +589 -0
  22. package/dist/dev/manager.js.map +1 -0
  23. package/dist/openrouter/auth.d.ts +2 -0
  24. package/dist/openrouter/auth.js +144 -0
  25. package/dist/openrouter/auth.js.map +1 -0
  26. package/dist/protocol.d.ts +187 -0
  27. package/dist/protocol.js +14 -0
  28. package/dist/protocol.js.map +1 -0
  29. package/dist/runtime/harness.d.ts +30 -0
  30. package/dist/runtime/harness.js +370 -0
  31. package/dist/runtime/harness.js.map +1 -0
  32. package/dist/runtime/local-runtime.d.ts +2 -0
  33. package/dist/runtime/local-runtime.js +161 -0
  34. package/dist/runtime/local-runtime.js.map +1 -0
  35. package/dist/sdk/client.d.ts +28 -0
  36. package/dist/sdk/client.js +131 -0
  37. package/dist/sdk/client.js.map +1 -0
  38. package/dist/sdk/index.d.ts +2 -0
  39. package/dist/sdk/index.js +3 -0
  40. package/dist/sdk/index.js.map +1 -0
  41. package/package.json +95 -0
@@ -0,0 +1,35 @@
1
+ import type { ChildProcess } from "node:child_process";
2
+ import type { HarnessName } from "../runtime/harness.js";
3
+ export interface DevState {
4
+ version: 2;
5
+ pid: number;
6
+ edge: string;
7
+ manager: string;
8
+ token: string;
9
+ agentRoot: string;
10
+ agentId: string;
11
+ harness: HarnessName;
12
+ startedAt: string;
13
+ channels: {
14
+ slack?: {
15
+ mode: "http" | "socket";
16
+ webhook?: string;
17
+ };
18
+ };
19
+ }
20
+ interface DevManagerOptions {
21
+ edge: string;
22
+ blueApiUrl: string;
23
+ port: number;
24
+ agentRoot: string;
25
+ agentId: string;
26
+ harness: HarnessName;
27
+ spawnRuntime(sessionId: string, runtimeToken: string, directory: string): ChildProcess;
28
+ }
29
+ export declare function findDevState(startDirectory?: string): Promise<DevState | null>;
30
+ export declare function requestDevManager(state: DevState, method: "POST" | "DELETE", sessionId: string, runtimeToken?: string): Promise<void>;
31
+ export declare function startDevManager(options: DevManagerOptions): Promise<{
32
+ state: DevState;
33
+ close(): Promise<void>;
34
+ }>;
35
+ export {};
@@ -0,0 +1,589 @@
1
+ import { createHmac, randomUUID, timingSafeEqual, } from "node:crypto";
2
+ import { createServer } from "node:http";
3
+ import { access, mkdir, readFile, rm, writeFile, } from "node:fs/promises";
4
+ import { dirname, resolve } from "node:path";
5
+ import { LogLevel, SocketModeClient, } from "@slack/socket-mode";
6
+ import { accessTokenFor } from "../auth/cli-auth.js";
7
+ import { prepareAgent } from "../core/agent.js";
8
+ import { SlackProgress, } from "../channels/slack-progress.js";
9
+ import { BlueClient } from "../sdk/client.js";
10
+ async function readBody(request) {
11
+ const chunks = [];
12
+ for await (const chunk of request) {
13
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
14
+ }
15
+ return Buffer.concat(chunks).toString("utf8");
16
+ }
17
+ async function readJson(request) {
18
+ const body = await readBody(request);
19
+ return body.length === 0 ? {} : JSON.parse(body);
20
+ }
21
+ function respond(response, status, body) {
22
+ response.writeHead(status, { "content-type": "application/json" });
23
+ response.end(JSON.stringify(body));
24
+ }
25
+ function authorized(request, token) {
26
+ return request.headers.authorization === `Bearer ${token}`;
27
+ }
28
+ async function exists(path) {
29
+ try {
30
+ await access(path);
31
+ return true;
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ }
37
+ function verifySlackRequest(request, body, signingSecret) {
38
+ const timestamp = request.headers["x-slack-request-timestamp"];
39
+ const signature = request.headers["x-slack-signature"];
40
+ if (typeof timestamp !== "string" || typeof signature !== "string") {
41
+ return false;
42
+ }
43
+ const seconds = Number.parseInt(timestamp, 10);
44
+ if (!Number.isFinite(seconds) ||
45
+ Math.abs(Date.now() / 1000 - seconds) > 5 * 60) {
46
+ return false;
47
+ }
48
+ const expected = `v0=${createHmac("sha256", signingSecret)
49
+ .update(`v0:${timestamp}:${body}`)
50
+ .digest("hex")}`;
51
+ const left = Buffer.from(expected);
52
+ const right = Buffer.from(signature);
53
+ return left.length === right.length && timingSafeEqual(left, right);
54
+ }
55
+ async function postSlackReply(token, channel, threadTs, text) {
56
+ const response = await fetch("https://slack.com/api/chat.postMessage", {
57
+ method: "POST",
58
+ headers: {
59
+ authorization: `Bearer ${token}`,
60
+ "content-type": "application/json",
61
+ },
62
+ body: JSON.stringify({
63
+ channel,
64
+ thread_ts: threadTs,
65
+ text,
66
+ }),
67
+ });
68
+ const result = (await response.json());
69
+ if (!response.ok || !result.ok) {
70
+ throw new Error(`Slack reply failed: ${result.error ?? String(response.status)}`);
71
+ }
72
+ }
73
+ async function setSlackStatus(token, channel, threadTs, input) {
74
+ const response = await fetch("https://slack.com/api/assistant.threads.setStatus", {
75
+ method: "POST",
76
+ headers: {
77
+ authorization: `Bearer ${token}`,
78
+ "content-type": "application/json",
79
+ },
80
+ body: JSON.stringify({
81
+ channel_id: channel,
82
+ thread_ts: threadTs,
83
+ status: input.status,
84
+ loading_messages: input.loadingMessages,
85
+ }),
86
+ });
87
+ const result = (await response.json());
88
+ if (!response.ok || !result.ok) {
89
+ throw new Error(`Slack status failed: ${result.error ?? String(response.status)}`);
90
+ }
91
+ }
92
+ async function waitForRuntime(client, sessionId, cursor = 0) {
93
+ const socket = client.connect(sessionId, cursor);
94
+ try {
95
+ await new Promise((resolvePromise, reject) => {
96
+ const timeout = setTimeout(() => {
97
+ cleanup();
98
+ reject(new Error("Timed out waiting for the local runtime"));
99
+ }, 60_000);
100
+ const cleanup = () => {
101
+ clearTimeout(timeout);
102
+ socket.removeEventListener("message", onMessage);
103
+ socket.removeEventListener("error", onError);
104
+ socket.removeEventListener("close", onClose);
105
+ };
106
+ const onMessage = (message) => {
107
+ const frame = JSON.parse(String(message.data));
108
+ if (frame.type === "event" &&
109
+ frame.event.type === "runtime.connected") {
110
+ cleanup();
111
+ resolvePromise();
112
+ }
113
+ else if (frame.type === "event" &&
114
+ frame.event.type === "runtime.disconnected") {
115
+ cleanup();
116
+ reject(new Error("Local runtime disconnected during startup"));
117
+ }
118
+ };
119
+ const onError = () => {
120
+ cleanup();
121
+ reject(new Error("Local runtime connection failed"));
122
+ };
123
+ const onClose = () => {
124
+ cleanup();
125
+ reject(new Error("Local runtime connection closed during startup"));
126
+ };
127
+ socket.addEventListener("message", onMessage);
128
+ socket.addEventListener("error", onError);
129
+ socket.addEventListener("close", onClose);
130
+ });
131
+ }
132
+ finally {
133
+ socket.close();
134
+ }
135
+ }
136
+ async function runChannelTurn(client, sessionId, input, idempotencyKey, onEvent) {
137
+ const existing = await client.listEvents(sessionId);
138
+ const socket = client.connect(sessionId, existing.at(-1)?.seq ?? 0);
139
+ let output = "";
140
+ let cancelWait = () => { };
141
+ try {
142
+ const completed = new Promise((resolvePromise, reject) => {
143
+ const timeout = setTimeout(() => {
144
+ cleanup();
145
+ reject(new Error("Timed out waiting for the Slack turn"));
146
+ }, 180_000);
147
+ const cleanup = () => {
148
+ clearTimeout(timeout);
149
+ socket.removeEventListener("message", onMessage);
150
+ socket.removeEventListener("error", onError);
151
+ socket.removeEventListener("close", onClose);
152
+ };
153
+ const onMessage = (message) => {
154
+ const frame = JSON.parse(String(message.data));
155
+ if (frame.type !== "event")
156
+ return;
157
+ onEvent?.(frame.event);
158
+ if (frame.event.type === "message.delta") {
159
+ output += String(frame.event.data.text ?? "");
160
+ }
161
+ else if (frame.event.type === "message.completed" &&
162
+ !output &&
163
+ typeof frame.event.data.text === "string") {
164
+ output = frame.event.data.text;
165
+ }
166
+ else if (frame.event.type === "turn.completed") {
167
+ cleanup();
168
+ resolvePromise();
169
+ }
170
+ else if (frame.event.type === "turn.failed") {
171
+ cleanup();
172
+ reject(new Error(String(frame.event.data.message ?? "Slack turn failed")));
173
+ }
174
+ };
175
+ const onError = () => {
176
+ cleanup();
177
+ reject(new Error("Slack session stream failed"));
178
+ };
179
+ const onClose = () => {
180
+ cleanup();
181
+ reject(new Error("Slack session stream closed"));
182
+ };
183
+ socket.addEventListener("message", onMessage);
184
+ socket.addEventListener("error", onError);
185
+ socket.addEventListener("close", onClose);
186
+ cancelWait = () => {
187
+ cleanup();
188
+ resolvePromise();
189
+ };
190
+ });
191
+ const turn = await client.createTurn(sessionId, input, idempotencyKey);
192
+ if (turn.duplicate) {
193
+ cancelWait();
194
+ return undefined;
195
+ }
196
+ await completed;
197
+ return output.trim() || "Turn completed.";
198
+ }
199
+ finally {
200
+ socket.close();
201
+ }
202
+ }
203
+ export async function findDevState(startDirectory = process.cwd()) {
204
+ let directory = resolve(startDirectory);
205
+ for (;;) {
206
+ const path = resolve(directory, ".blue", "dev.json");
207
+ try {
208
+ await access(path);
209
+ }
210
+ catch {
211
+ const parent = dirname(directory);
212
+ if (parent === directory)
213
+ return null;
214
+ directory = parent;
215
+ continue;
216
+ }
217
+ const state = JSON.parse(await readFile(path, "utf8"));
218
+ if (state.version !== 2 ||
219
+ typeof state.manager !== "string" ||
220
+ typeof state.token !== "string") {
221
+ throw new Error(`Stale Blue development metadata at ${path}. Restart \`blue dev\`.`);
222
+ }
223
+ try {
224
+ const response = await fetch(`${state.manager}/health`, {
225
+ headers: { authorization: `Bearer ${state.token}` },
226
+ signal: AbortSignal.timeout(1_500),
227
+ });
228
+ if (response.ok)
229
+ return state;
230
+ }
231
+ catch {
232
+ // Report the stale state below.
233
+ }
234
+ throw new Error(`The Blue development server recorded at ${path} is not running. Restart \`blue dev\`.`);
235
+ }
236
+ }
237
+ export async function requestDevManager(state, method, sessionId, runtimeToken) {
238
+ const response = await fetch(`${state.manager}/sessions/${encodeURIComponent(sessionId)}`, {
239
+ method,
240
+ headers: {
241
+ authorization: `Bearer ${state.token}`,
242
+ "content-type": "application/json",
243
+ },
244
+ body: method === "POST"
245
+ ? JSON.stringify({ sessionId, runtimeToken })
246
+ : undefined,
247
+ });
248
+ if (!response.ok) {
249
+ const body = (await response.json().catch(() => ({})));
250
+ throw new Error(body.message ?? `Blue dev manager returned ${response.status}`);
251
+ }
252
+ }
253
+ export async function startDevManager(options) {
254
+ const runtimes = new Map();
255
+ const token = randomUUID();
256
+ const client = new BlueClient(options.edge);
257
+ const sessionPath = resolve(options.agentRoot, ".blue", "dev", "channel-sessions.json");
258
+ const runtimeSessionPath = resolve(options.agentRoot, ".blue", "dev", "runtime-sessions.json");
259
+ const slackSource = resolve(options.agentRoot, "agent", "channels", "slack.ts");
260
+ const slackEnabled = await exists(slackSource);
261
+ const slackAppToken = process.env.SLACK_APP_TOKEN;
262
+ const slackSigningSecret = process.env.SLACK_SIGNING_SECRET;
263
+ const slackBotToken = process.env.SLACK_BOT_TOKEN;
264
+ let slackSocket;
265
+ let slackSessions = {
266
+ version: 1,
267
+ conversations: {},
268
+ };
269
+ try {
270
+ slackSessions = JSON.parse(await readFile(sessionPath, "utf8"));
271
+ }
272
+ catch {
273
+ // The channel creates its state file after the first conversation.
274
+ }
275
+ let runtimeSessions = {
276
+ version: 1,
277
+ sessions: {},
278
+ };
279
+ try {
280
+ runtimeSessions = JSON.parse(await readFile(runtimeSessionPath, "utf8"));
281
+ }
282
+ catch {
283
+ // Runtime credentials are stored after the first local session starts.
284
+ }
285
+ const channelQueues = new Map();
286
+ const persistSlackSessions = async () => {
287
+ await mkdir(dirname(sessionPath), { recursive: true });
288
+ await writeFile(sessionPath, `${JSON.stringify(slackSessions, null, 2)}\n`, { mode: 0o600 });
289
+ };
290
+ const persistRuntimeSessions = async () => {
291
+ await mkdir(dirname(runtimeSessionPath), { recursive: true });
292
+ await writeFile(runtimeSessionPath, `${JSON.stringify(runtimeSessions, null, 2)}\n`, { mode: 0o600 });
293
+ };
294
+ const startRuntime = async (sessionId, providedRuntimeToken) => {
295
+ if (runtimes.has(sessionId))
296
+ return false;
297
+ const runtimeToken = providedRuntimeToken ??
298
+ runtimeSessions.sessions[sessionId]?.runtimeToken;
299
+ if (!runtimeToken) {
300
+ throw new Error(`No local runtime credential is stored for session ${sessionId}`);
301
+ }
302
+ if (providedRuntimeToken) {
303
+ runtimeSessions.sessions[sessionId] = { runtimeToken };
304
+ await persistRuntimeSessions();
305
+ }
306
+ const directory = resolve(options.agentRoot, ".blue", "dev", "sessions", sessionId, "runtime");
307
+ const runtimeDirectory = (await exists(directory))
308
+ ? directory
309
+ : (await prepareAgent(options.agentRoot, directory)).runtimeDirectory;
310
+ const child = options.spawnRuntime(sessionId, runtimeToken, runtimeDirectory);
311
+ if (child.stdout) {
312
+ if (process.env.BLUE_DEBUG) {
313
+ child.stdout.pipe(process.stderr);
314
+ }
315
+ else {
316
+ child.stdout.resume();
317
+ }
318
+ }
319
+ runtimes.set(sessionId, child);
320
+ child.once("exit", () => runtimes.delete(sessionId));
321
+ return true;
322
+ };
323
+ const dispatchSlackEvent = async (envelope) => {
324
+ const event = envelope.event;
325
+ if (!event ||
326
+ event.type !== "app_mention" ||
327
+ event.bot_id ||
328
+ event.subtype ||
329
+ !envelope.team_id ||
330
+ !event.channel ||
331
+ !event.ts ||
332
+ !event.text) {
333
+ return;
334
+ }
335
+ if (!slackBotToken) {
336
+ throw new Error("SLACK_BOT_TOKEN is required for Slack replies");
337
+ }
338
+ const threadTs = event.thread_ts ?? event.ts;
339
+ const progress = new SlackProgress((status) => setSlackStatus(slackBotToken, event.channel, threadTs, status).catch((error) => {
340
+ if (process.env.BLUE_DEBUG) {
341
+ process.stderr.write(`blue slack status: ${error instanceof Error ? error.message : String(error)}\n`);
342
+ }
343
+ }));
344
+ progress.start();
345
+ const conversationKey = [
346
+ envelope.team_id,
347
+ event.channel,
348
+ threadTs,
349
+ ].join(":");
350
+ let sessionId = slackSessions.conversations[conversationKey];
351
+ try {
352
+ if (!sessionId) {
353
+ const created = await client.createSession({
354
+ agentId: `local/${options.agentId}`,
355
+ deploymentId: "development",
356
+ });
357
+ sessionId = created.session.id;
358
+ progress.runtimeStarting();
359
+ const connected = waitForRuntime(client, sessionId);
360
+ await startRuntime(sessionId, created.runtimeToken);
361
+ await connected;
362
+ slackSessions.conversations[conversationKey] = sessionId;
363
+ await persistSlackSessions();
364
+ process.stdout.write(`slack: ${conversationKey} -> session ${sessionId}\n`);
365
+ }
366
+ else if (!runtimes.has(sessionId)) {
367
+ progress.runtimeStarting();
368
+ const events = await client.listEvents(sessionId);
369
+ const connected = waitForRuntime(client, sessionId, events.at(-1)?.seq ?? 0);
370
+ await startRuntime(sessionId);
371
+ await connected;
372
+ }
373
+ progress.runtimeReady();
374
+ const reply = await runChannelTurn(client, sessionId, event.text.replace(/^<@[^>]+>\s*/, "").trim(), envelope.event_id ?? randomUUID(), (blueEvent) => progress.handle(blueEvent));
375
+ await progress.stop({ clear: !reply });
376
+ if (reply) {
377
+ await postSlackReply(slackBotToken, event.channel, threadTs, reply);
378
+ }
379
+ }
380
+ catch (error) {
381
+ await progress.stop();
382
+ await postSlackReply(slackBotToken, event.channel, threadTs, "I hit an error while handling that request. Please try again.").catch(() => undefined);
383
+ throw error;
384
+ }
385
+ };
386
+ const queueSlackEnvelope = (envelope) => {
387
+ const event = envelope.event;
388
+ const key = envelope.team_id && event?.channel && event.ts
389
+ ? `${envelope.team_id}:${event.channel}:${event.thread_ts ?? event.ts}`
390
+ : randomUUID();
391
+ const prior = channelQueues.get(key) ?? Promise.resolve();
392
+ const queued = prior
393
+ .catch(() => undefined)
394
+ .then(() => dispatchSlackEvent(envelope))
395
+ .catch((error) => {
396
+ process.stderr.write(`blue slack: ${error instanceof Error ? error.message : String(error)}\n`);
397
+ })
398
+ .finally(() => {
399
+ if (channelQueues.get(key) === queued) {
400
+ channelQueues.delete(key);
401
+ }
402
+ });
403
+ channelQueues.set(key, queued);
404
+ };
405
+ const state = {
406
+ version: 2,
407
+ pid: process.pid,
408
+ edge: options.edge,
409
+ manager: `http://127.0.0.1:${String(options.port)}`,
410
+ token,
411
+ agentRoot: options.agentRoot,
412
+ agentId: options.agentId,
413
+ harness: options.harness,
414
+ startedAt: new Date().toISOString(),
415
+ channels: {},
416
+ };
417
+ const statePath = resolve(options.agentRoot, ".blue", "dev.json");
418
+ await mkdir(dirname(statePath), { recursive: true });
419
+ const server = createServer((request, response) => {
420
+ void (async () => {
421
+ const url = new URL(request.url ?? "/", "http://127.0.0.1");
422
+ if (request.method === "GET" && url.pathname === "/health") {
423
+ if (!authorized(request, token)) {
424
+ respond(response, 401, { message: "Unauthorized" });
425
+ return;
426
+ }
427
+ respond(response, 200, {
428
+ ok: true,
429
+ agentId: options.agentId,
430
+ sessions: runtimes.size,
431
+ });
432
+ return;
433
+ }
434
+ if (url.pathname.startsWith("/openrouter/")) {
435
+ if (!authorized(request, token)) {
436
+ respond(response, 401, { message: "Unauthorized" });
437
+ return;
438
+ }
439
+ const accessToken = await accessTokenFor(options.blueApiUrl);
440
+ if (!accessToken) {
441
+ respond(response, 401, { message: "Blue login is required" });
442
+ return;
443
+ }
444
+ const upstreamPath = url.pathname.slice("/openrouter".length);
445
+ const upstream = await fetch(`${options.blueApiUrl}/v1/openrouter${upstreamPath}${url.search}`, {
446
+ method: request.method,
447
+ headers: {
448
+ authorization: `Bearer ${accessToken}`,
449
+ "content-type": request.headers["content-type"] ?? "application/json",
450
+ },
451
+ body: request.method === "GET" || request.method === "HEAD"
452
+ ? undefined
453
+ : await readBody(request),
454
+ });
455
+ response.writeHead(upstream.status, Object.fromEntries(upstream.headers.entries()));
456
+ response.end(Buffer.from(await upstream.arrayBuffer()));
457
+ return;
458
+ }
459
+ if (request.method === "POST" &&
460
+ url.pathname === "/channels/slack/events") {
461
+ if (!slackEnabled) {
462
+ respond(response, 404, {
463
+ message: "This agent does not define agent/channels/slack.ts",
464
+ });
465
+ return;
466
+ }
467
+ if (!slackSigningSecret) {
468
+ respond(response, 503, {
469
+ message: "SLACK_SIGNING_SECRET is not configured",
470
+ });
471
+ return;
472
+ }
473
+ const rawBody = await readBody(request);
474
+ if (!verifySlackRequest(request, rawBody, slackSigningSecret)) {
475
+ respond(response, 401, { message: "Invalid Slack signature" });
476
+ return;
477
+ }
478
+ const envelope = JSON.parse(rawBody);
479
+ if (envelope.type === "url_verification") {
480
+ respond(response, 200, { challenge: envelope.challenge });
481
+ return;
482
+ }
483
+ respond(response, 200, { ok: true });
484
+ if (envelope.type === "event_callback") {
485
+ queueSlackEnvelope(envelope);
486
+ }
487
+ return;
488
+ }
489
+ if (!authorized(request, token)) {
490
+ respond(response, 401, { message: "Unauthorized" });
491
+ return;
492
+ }
493
+ const match = url.pathname.match(/^\/sessions\/([^/]+)$/);
494
+ if (!match?.[1]) {
495
+ respond(response, 404, { message: "Route not found" });
496
+ return;
497
+ }
498
+ const sessionId = decodeURIComponent(match[1]);
499
+ if (request.method === "POST") {
500
+ const body = (await readJson(request));
501
+ if (body.sessionId !== sessionId ||
502
+ (body.runtimeToken !== undefined &&
503
+ typeof body.runtimeToken !== "string")) {
504
+ respond(response, 400, { message: "Invalid session start request" });
505
+ return;
506
+ }
507
+ if (runtimes.has(sessionId)) {
508
+ respond(response, 200, { sessionId, running: true });
509
+ return;
510
+ }
511
+ await startRuntime(sessionId, body.runtimeToken);
512
+ respond(response, 201, { sessionId, running: true });
513
+ return;
514
+ }
515
+ if (request.method === "DELETE") {
516
+ const child = runtimes.get(sessionId);
517
+ if (child && child.exitCode === null)
518
+ child.kill("SIGTERM");
519
+ runtimes.delete(sessionId);
520
+ delete runtimeSessions.sessions[sessionId];
521
+ await persistRuntimeSessions();
522
+ respond(response, 200, { sessionId, running: false });
523
+ return;
524
+ }
525
+ respond(response, 405, { message: "Method not allowed" });
526
+ })().catch((error) => {
527
+ respond(response, 500, {
528
+ message: error instanceof Error ? error.message : String(error),
529
+ });
530
+ });
531
+ });
532
+ await new Promise((resolvePromise, reject) => {
533
+ server.once("error", reject);
534
+ server.listen(options.port, "127.0.0.1", () => {
535
+ server.off("error", reject);
536
+ resolvePromise();
537
+ });
538
+ });
539
+ const address = server.address();
540
+ if (!address || typeof address === "string") {
541
+ throw new Error("Blue dev manager did not receive a TCP address");
542
+ }
543
+ state.manager = `http://127.0.0.1:${String(address.port)}`;
544
+ if (slackEnabled) {
545
+ if (slackAppToken) {
546
+ if (!slackBotToken) {
547
+ throw new Error("SLACK_BOT_TOKEN is required when SLACK_APP_TOKEN enables Socket Mode");
548
+ }
549
+ slackSocket = new SocketModeClient({
550
+ appToken: slackAppToken,
551
+ logLevel: process.env.BLUE_DEBUG
552
+ ? LogLevel.DEBUG
553
+ : LogLevel.ERROR,
554
+ });
555
+ slackSocket.on("app_mention", ({ ack, body }) => {
556
+ void ack()
557
+ .then(() => queueSlackEnvelope(body))
558
+ .catch((error) => {
559
+ process.stderr.write(`blue slack: could not acknowledge event: ${error instanceof Error ? error.message : String(error)}\n`);
560
+ });
561
+ });
562
+ await slackSocket.start();
563
+ state.channels.slack = { mode: "socket" };
564
+ }
565
+ else {
566
+ state.channels.slack = {
567
+ mode: "http",
568
+ webhook: `${state.manager}/channels/slack/events`,
569
+ };
570
+ }
571
+ }
572
+ await writeFile(statePath, `${JSON.stringify(state, null, 2)}\n`, {
573
+ mode: 0o600,
574
+ });
575
+ return {
576
+ state,
577
+ async close() {
578
+ await slackSocket?.disconnect();
579
+ for (const runtime of runtimes.values()) {
580
+ if (runtime.exitCode === null)
581
+ runtime.kill("SIGTERM");
582
+ }
583
+ runtimes.clear();
584
+ await new Promise((resolvePromise) => server.close(() => resolvePromise()));
585
+ await rm(statePath, { force: true });
586
+ },
587
+ };
588
+ }
589
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/dev/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function authenticateOpenRouter(): Promise<string>;
2
+ export declare function readOpenRouterCredential(startDirectory?: string): Promise<string | undefined>;