nomoreide 0.1.20 → 0.1.21

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.
@@ -1,21 +1,13 @@
1
1
  import http from "node:http";
2
2
  import { dirname, resolve } from "node:path";
3
3
  import { ConfigStore, ConfigValidationError, defaultGlobalConfigPath, } from "../core/config-store.js";
4
- import { readFile, writeFile, mkdir } from "node:fs/promises";
5
- import { GitManager } from "../core/git-manager.js";
6
- import { browseDirectory, ConfigFilePathError, detectConfigFiles, resolveConfigFile, validateJson, } from "../core/config-files.js";
7
- import { entriesFromLines, looksSecret, mergeEntries, readEnvFile, writeEnvFile, } from "../core/env-file.js";
8
4
  import { LogStore } from "../core/log-store.js";
9
- import { PortConflictError, ProcessManager } from "../core/process-manager.js";
5
+ import { ProcessManager } from "../core/process-manager.js";
10
6
  import { TimelineStore } from "../core/timeline-store.js";
11
7
  import { ToolCallStore } from "../core/tool-call-store.js";
12
- import { testServiceCommand } from "./service-tester.js";
13
- import { buildDashboardPayload, getSelectedGitRepository, readGitDiff, selectedGitCwd, } from "./dashboard.js";
14
- import { buildAgentInfo } from "./agent-info.js";
15
- import { buildUsageInfo } from "./usage-info.js";
16
- import { listDirectories } from "./directories.js";
17
- import { optionalFormValue, readForm, requiredFormValue, sendHead, sendHtml, sendJson, sendText, } from "./http-utils.js";
18
- import { readWebAppShell, sendStaticAsset } from "./static-assets.js";
8
+ import { sendHtml, sendJson } from "./http-utils.js";
9
+ import { routes } from "./routes/index.js";
10
+ import { errorMessage } from "./routes/context.js";
19
11
  export function createWebServer(options = {}) {
20
12
  const configStore = new ConfigStore(options.configPath ?? defaultGlobalConfigPath());
21
13
  const timelineStore = new TimelineStore({
@@ -29,19 +21,18 @@ export function createWebServer(options = {}) {
29
21
  manager.installShutdownHandlers();
30
22
  const cwd = options.cwd ?? process.cwd();
31
23
  const toolCallStore = options.toolCallStore ?? new ToolCallStore();
24
+ const services = {
25
+ configStore,
26
+ cwd,
27
+ logStore,
28
+ manager,
29
+ timelineStore,
30
+ toolCallStore,
31
+ };
32
32
  return {
33
33
  async start() {
34
34
  const server = http.createServer((request, response) => {
35
- void routeRequest({
36
- request,
37
- response,
38
- configStore,
39
- logStore,
40
- manager,
41
- timelineStore,
42
- cwd,
43
- toolCallStore,
44
- });
35
+ void routeRequest(services, request, response);
45
36
  });
46
37
  const port = options.port ?? 4317;
47
38
  await new Promise((resolveListen, rejectListen) => {
@@ -69,530 +60,22 @@ export function createWebServer(options = {}) {
69
60
  },
70
61
  };
71
62
  }
72
- async function routeRequest(options) {
73
- const { request, response, configStore, cwd, logStore, manager, timelineStore, toolCallStore, } = options;
63
+ /** Match the request against the route registry, falling back to a 404. */
64
+ async function routeRequest(services, request, response) {
74
65
  const url = new URL(request.url ?? "/", "http://127.0.0.1");
66
+ const method = request.method ?? "GET";
75
67
  try {
76
- if (request.method === "HEAD" &&
77
- (url.pathname === "/" || url.pathname === "/git" || url.pathname === "/agent")) {
78
- sendHead(response, "text/html; charset=utf-8");
79
- return;
80
- }
81
- if (request.method === "GET" && url.pathname === "/api/dashboard") {
82
- sendJson(response, await buildDashboardPayload({
83
- configStore,
84
- cwd,
85
- logStore,
86
- manager,
87
- timelineStore,
88
- }));
89
- return;
90
- }
91
- if (request.method === "GET" && url.pathname === "/api/health") {
92
- sendJson(response, { ok: true, app: "nomoreide" });
93
- return;
94
- }
95
- if (request.method === "GET" && url.pathname === "/api/agent") {
96
- sendJson(response, { ok: true, agent: await buildAgentInfo(cwd) });
97
- return;
98
- }
99
- if (request.method === "GET" && url.pathname === "/api/agent/usage") {
100
- sendJson(response, { ok: true, usage: await buildUsageInfo(cwd) });
101
- return;
102
- }
103
- if (request.method === "GET" && url.pathname === "/api/agent/tool-calls") {
104
- const limitParam = Number(url.searchParams.get("limit"));
105
- const limit = Number.isFinite(limitParam) && limitParam > 0 ? Math.min(limitParam, 500) : 100;
106
- sendJson(response, { ok: true, records: toolCallStore.recent(limit) });
107
- return;
108
- }
109
- if (request.method === "GET" && url.pathname === "/api/agent/tool-calls/stream") {
110
- response.writeHead(200, {
111
- "content-type": "text/event-stream",
112
- "cache-control": "no-cache, no-transform",
113
- connection: "keep-alive",
114
- });
115
- response.write(`retry: 2000\n\n`);
116
- for (const record of toolCallStore.recent(50)) {
117
- response.write(`event: tool-call\ndata: ${JSON.stringify(record)}\n\n`);
118
- }
119
- const heartbeat = setInterval(() => {
120
- response.write(`: ping\n\n`);
121
- }, 15000);
122
- const unsubscribe = toolCallStore.subscribe((record) => {
123
- response.write(`event: tool-call\ndata: ${JSON.stringify(record)}\n\n`);
124
- });
125
- request.on("close", () => {
126
- clearInterval(heartbeat);
127
- unsubscribe();
128
- });
129
- return;
130
- }
131
- if (request.method === "GET" && url.pathname === "/api/fs/directories") {
132
- sendJson(response, await listDirectories(url.searchParams.get("path")?.trim() || cwd));
133
- return;
134
- }
135
- if (request.method === "GET" && url.pathname === "/api/git/diff") {
136
- const config = await configStore.load();
137
- const selectedGitRepository = getSelectedGitRepository(config);
138
- const gitCwd = selectedGitRepository?.path ?? cwd;
139
- const selectedFile = url.searchParams.get("file")?.trim();
140
- if (!selectedFile) {
141
- sendJson(response, { ok: false, error: "file is required" }, 400);
142
- return;
143
- }
144
- const git = new GitManager(gitCwd);
145
- const status = await git.status();
146
- const selectedStatus = status.files.find((file) => file.path === selectedFile);
147
- const diff = selectedStatus
148
- ? await git.fileDiff(selectedStatus)
149
- : await readGitDiff(gitCwd, selectedFile);
150
- if (diff === undefined) {
151
- sendJson(response, { ok: false, error: "No changes or file not found." }, 404);
152
- return;
153
- }
154
- sendText(response, diff);
155
- return;
156
- }
157
- if (request.method === "GET" && url.pathname === "/api/git/files") {
158
- const gitCwd = await selectedGitCwd(configStore, cwd);
159
- try {
160
- const files = await new GitManager(gitCwd).listTrackedFiles();
161
- sendJson(response, { ok: true, files });
162
- }
163
- catch (error) {
164
- const message = error instanceof Error ? error.message : String(error);
165
- sendJson(response, { ok: false, error: message }, 400);
166
- }
167
- return;
168
- }
169
- if (request.method === "GET" && url.pathname === "/api/git/file") {
170
- const gitCwd = await selectedGitCwd(configStore, cwd);
171
- const path = url.searchParams.get("path")?.trim();
172
- if (!path) {
173
- sendJson(response, { ok: false, error: "path is required" }, 400);
174
- return;
175
- }
176
- try {
177
- const file = await new GitManager(gitCwd).readTrackedFile(path);
178
- sendJson(response, { ok: true, ...file });
179
- }
180
- catch (error) {
181
- const message = error instanceof Error ? error.message : String(error);
182
- sendJson(response, { ok: false, error: message }, 404);
183
- }
184
- return;
185
- }
186
- if (request.method === "GET" && url.pathname === "/api/git/commit") {
187
- const gitCwd = await selectedGitCwd(configStore, cwd);
188
- const hash = url.searchParams.get("hash")?.trim();
189
- const file = url.searchParams.get("file")?.trim() || undefined;
190
- if (!hash) {
191
- sendJson(response, { ok: false, error: "hash is required" }, 400);
68
+ for (const route of routes) {
69
+ const params = route.match(method, url);
70
+ if (params) {
71
+ await route.handle({ ...services, request, response, url, params });
192
72
  return;
193
73
  }
194
- try {
195
- const diff = await new GitManager(gitCwd).commitDiff(hash, file);
196
- sendText(response, diff);
197
- }
198
- catch (error) {
199
- const message = error instanceof Error ? error.message : String(error);
200
- sendJson(response, { ok: false, error: message }, 400);
201
- }
202
- return;
203
- }
204
- if (request.method === "GET" && url.pathname === "/api/git/commit/files") {
205
- const gitCwd = await selectedGitCwd(configStore, cwd);
206
- const hash = url.searchParams.get("hash")?.trim();
207
- if (!hash) {
208
- sendJson(response, { ok: false, error: "hash is required" }, 400);
209
- return;
210
- }
211
- try {
212
- const files = await new GitManager(gitCwd).commitFiles(hash);
213
- sendJson(response, { ok: true, files });
214
- }
215
- catch (error) {
216
- const message = error instanceof Error ? error.message : String(error);
217
- sendJson(response, { ok: false, error: message }, 400);
218
- }
219
- return;
220
- }
221
- if (request.method === "GET" && url.pathname === "/api/git/graph") {
222
- const gitCwd = await selectedGitCwd(configStore, cwd);
223
- const limitParam = url.searchParams.get("limit")?.trim();
224
- const parsedLimit = limitParam ? Number(limitParam) : 200;
225
- const limit = Number.isFinite(parsedLimit) && parsedLimit > 0
226
- ? Math.min(Math.floor(parsedLimit), 2000)
227
- : 200;
228
- const commits = await new GitManager(gitCwd).graph(limit);
229
- sendJson(response, { ok: true, commits });
230
- return;
231
- }
232
- if (request.method === "POST" && url.pathname === "/api/git/fetch") {
233
- const gitCwd = await selectedGitCwd(configStore, cwd);
234
- const output = await new GitManager(gitCwd).fetch();
235
- sendJson(response, { ok: true, output });
236
- return;
237
- }
238
- if (request.method === "POST" && url.pathname === "/api/git/branches") {
239
- const form = await readForm(request);
240
- const gitCwd = await selectedGitCwd(configStore, cwd);
241
- const output = await new GitManager(gitCwd).createBranch(requiredFormValue(form, "name"));
242
- sendJson(response, { ok: true, output });
243
- return;
244
- }
245
- if (request.method === "POST" && url.pathname === "/api/git/branches/switch") {
246
- const form = await readForm(request);
247
- const gitCwd = await selectedGitCwd(configStore, cwd);
248
- const output = await new GitManager(gitCwd).switchBranch(requiredFormValue(form, "name"));
249
- sendJson(response, { ok: true, output });
250
- return;
251
- }
252
- if (request.method === "GET" && url.pathname === "/api/status") {
253
- sendJson(response, { ok: true, status: manager.status() });
254
- return;
255
- }
256
- if (request.method === "POST" && url.pathname === "/api/services") {
257
- const form = await readForm(request);
258
- const portValue = form.get("port")?.trim();
259
- const port = portValue ? Number(portValue) : undefined;
260
- const kind = (optionalFormValue(form, "kind") ?? "local");
261
- const name = requiredFormValue(form, "name");
262
- const description = optionalFormValue(form, "description");
263
- const definition = kind === "docker-compose"
264
- ? {
265
- name,
266
- kind: "docker-compose",
267
- cwd: requiredFormValue(form, "cwd"),
268
- composeFile: optionalFormValue(form, "composeFile"),
269
- composeService: requiredFormValue(form, "composeService"),
270
- port,
271
- description,
272
- }
273
- : kind === "ssh"
274
- ? {
275
- name,
276
- kind: "ssh",
277
- host: requiredFormValue(form, "host"),
278
- cwd: requiredFormValue(form, "cwd"),
279
- command: requiredFormValue(form, "command"),
280
- port,
281
- description,
282
- }
283
- : {
284
- name,
285
- command: requiredFormValue(form, "command"),
286
- cwd: requiredFormValue(form, "cwd"),
287
- port,
288
- description,
289
- };
290
- const config = await configStore.registerService(definition);
291
- sendJson(response, { ok: true, config });
292
- return;
293
- }
294
- if (request.method === "POST" && url.pathname === "/api/services/test") {
295
- const form = await readForm(request);
296
- const portValue = form.get("port")?.trim();
297
- sendJson(response, await testServiceCommand({
298
- command: requiredFormValue(form, "command"),
299
- cwd: requiredFormValue(form, "cwd"),
300
- port: portValue ? Number(portValue) : undefined,
301
- }));
302
- return;
303
- }
304
- if (request.method === "POST" && url.pathname === "/api/bundles") {
305
- const form = await readForm(request);
306
- const services = requiredFormValue(form, "services")
307
- .split(",")
308
- .map((service) => service.trim())
309
- .filter(Boolean);
310
- const config = await configStore.registerBundle({
311
- name: requiredFormValue(form, "name"),
312
- services,
313
- }, optionalFormValue(form, "originalName"));
314
- sendJson(response, { ok: true, config });
315
- return;
316
- }
317
- if (request.method === "POST" && url.pathname === "/api/git/repositories") {
318
- const form = await readForm(request);
319
- const config = await configStore.registerGitRepository({
320
- name: requiredFormValue(form, "name"),
321
- path: requiredFormValue(form, "path"),
322
- });
323
- sendJson(response, { ok: true, config });
324
- return;
325
- }
326
- if (request.method === "POST" && url.pathname === "/api/git/select") {
327
- const form = await readForm(request);
328
- const config = await configStore.selectGitRepository(requiredFormValue(form, "name"));
329
- sendJson(response, { ok: true, config });
330
- return;
331
- }
332
- const configFilesMatch = url.pathname.match(/^\/api\/services\/([^/]+)\/config-files$/);
333
- if (configFilesMatch) {
334
- if (request.method !== "GET") {
335
- sendJson(response, { ok: false, error: "Method not allowed" }, 405);
336
- return;
337
- }
338
- const name = decodeURIComponent(configFilesMatch[1]);
339
- const serviceCwd = await getServiceCwd(configStore, name);
340
- if (!serviceCwd) {
341
- sendJson(response, { ok: false, error: `Service "${name}" has no working directory.` }, 400);
342
- return;
343
- }
344
- const files = await detectConfigFiles(serviceCwd);
345
- sendJson(response, { ok: true, cwd: serviceCwd, files });
346
- return;
347
- }
348
- const browseMatch = url.pathname.match(/^\/api\/services\/([^/]+)\/config-browse$/);
349
- if (browseMatch) {
350
- if (request.method !== "GET") {
351
- sendJson(response, { ok: false, error: "Method not allowed" }, 405);
352
- return;
353
- }
354
- const name = decodeURIComponent(browseMatch[1]);
355
- const serviceCwd = await getServiceCwd(configStore, name);
356
- if (!serviceCwd) {
357
- sendJson(response, { ok: false, error: `Service "${name}" has no working directory.` }, 400);
358
- return;
359
- }
360
- try {
361
- const result = await browseDirectory(serviceCwd, url.searchParams.get("path")?.trim() || undefined);
362
- sendJson(response, { ok: true, ...result });
363
- }
364
- catch (error) {
365
- const message = error instanceof Error ? error.message : String(error);
366
- sendJson(response, { ok: false, error: message }, error instanceof ConfigFilePathError ? 400 : 500);
367
- }
368
- return;
369
- }
370
- const configFileMatch = url.pathname.match(/^\/api\/services\/([^/]+)\/config-file$/);
371
- if (configFileMatch) {
372
- const name = decodeURIComponent(configFileMatch[1]);
373
- const serviceCwd = await getServiceCwd(configStore, name);
374
- if (!serviceCwd) {
375
- sendJson(response, { ok: false, error: `Service "${name}" has no working directory.` }, 400);
376
- return;
377
- }
378
- const requested = url.searchParams.get("path")?.trim();
379
- if (!requested) {
380
- sendJson(response, { ok: false, error: "path is required" }, 400);
381
- return;
382
- }
383
- let file;
384
- try {
385
- file = resolveConfigFile(serviceCwd, requested);
386
- }
387
- catch (error) {
388
- const message = error instanceof Error ? error.message : String(error);
389
- sendJson(response, { ok: false, error: message }, error instanceof ConfigFilePathError ? 400 : 500);
390
- return;
391
- }
392
- if (request.method === "GET") {
393
- if (file.format === "env") {
394
- const { exists, lines } = await readEnvFile(file.path);
395
- const entries = entriesFromLines(lines).map((entry) => ({
396
- key: entry.key,
397
- value: entry.value,
398
- secret: looksSecret(entry.key),
399
- }));
400
- sendJson(response, { ok: true, exists, format: file.format, path: file.path, relativePath: file.relativePath, entries });
401
- return;
402
- }
403
- const { content, exists } = await readTextFile(file.path);
404
- sendJson(response, { ok: true, exists, format: file.format, path: file.path, relativePath: file.relativePath, content });
405
- return;
406
- }
407
- if (request.method === "PUT") {
408
- const body = await readJsonBody(request);
409
- if (file.format === "env") {
410
- const parsed = parseEnvEntries(body);
411
- const { lines } = await readEnvFile(file.path);
412
- const merged = mergeEntries(lines, parsed);
413
- await writeEnvFile(file.path, merged);
414
- const entries = entriesFromLines(merged).map((entry) => ({
415
- key: entry.key,
416
- value: entry.value,
417
- secret: looksSecret(entry.key),
418
- }));
419
- sendJson(response, { ok: true, exists: true, format: file.format, path: file.path, relativePath: file.relativePath, entries });
420
- return;
421
- }
422
- const content = body?.content;
423
- if (typeof content !== "string") {
424
- sendJson(response, { ok: false, error: "content must be a string" }, 400);
425
- return;
426
- }
427
- if (file.format === "json") {
428
- try {
429
- validateJson(content);
430
- }
431
- catch (error) {
432
- const message = error instanceof Error ? error.message : String(error);
433
- sendJson(response, { ok: false, error: message }, 400);
434
- return;
435
- }
436
- }
437
- await mkdir(dirname(file.path), { recursive: true });
438
- await writeFile(file.path, content);
439
- sendJson(response, { ok: true, exists: true, format: file.format, path: file.path, relativePath: file.relativePath, content });
440
- return;
441
- }
442
- sendJson(response, { ok: false, error: "Method not allowed" }, 405);
443
- return;
444
- }
445
- const inspectorMatch = url.pathname.match(/^\/api\/services\/([^/]+)\/inspector$/);
446
- if (inspectorMatch) {
447
- if (request.method !== "POST") {
448
- sendJson(response, { ok: false, error: "Method not allowed" }, 405);
449
- return;
450
- }
451
- const name = decodeURIComponent(inspectorMatch[1]);
452
- const form = await readForm(request);
453
- const enabled = form.get("enabled") === "true" || form.get("enabled") === "1";
454
- const status = await manager.setInspectorEnabled(name, enabled);
455
- sendJson(response, { ok: true, status });
456
- return;
457
- }
458
- const serviceMatch = url.pathname.match(/^\/api\/services\/([^/]+)\/(start|stop|restart|logs)$/);
459
- if (serviceMatch) {
460
- const [, encodedName, action] = serviceMatch;
461
- const name = decodeURIComponent(encodedName);
462
- if (request.method === "GET" && action === "logs") {
463
- sendJson(response, { ok: true, logs: logStore.read(name, 200) });
464
- return;
465
- }
466
- if (request.method !== "POST") {
467
- sendJson(response, { ok: false, error: "Method not allowed" }, 405);
468
- return;
469
- }
470
- try {
471
- let startOptions = {};
472
- if (action === "start" || action === "restart") {
473
- const form = await readForm(request).catch(() => new URLSearchParams());
474
- if (form.get("strategy") === "killHolder") {
475
- startOptions = { killHolder: true };
476
- }
477
- }
478
- const status = action === "start"
479
- ? await manager.startService(name, startOptions)
480
- : action === "stop"
481
- ? await manager.stopService(name)
482
- : await manager.restartService(name, startOptions);
483
- sendJson(response, { ok: true, status });
484
- }
485
- catch (error) {
486
- if (error instanceof PortConflictError) {
487
- sendJson(response, {
488
- ok: false,
489
- error: error.message,
490
- conflict: {
491
- code: error.code,
492
- port: error.port,
493
- holder: error.holder,
494
- },
495
- }, 409);
496
- return;
497
- }
498
- throw error;
499
- }
500
- return;
501
- }
502
- const bundleMatch = url.pathname.match(/^\/api\/bundles\/([^/]+)\/(start|stop|restart)$/);
503
- if (bundleMatch) {
504
- if (request.method !== "POST") {
505
- sendJson(response, { ok: false, error: "Method not allowed" }, 405);
506
- return;
507
- }
508
- const [, encodedName, action] = bundleMatch;
509
- const name = decodeURIComponent(encodedName);
510
- const statuses = action === "start"
511
- ? await manager.startBundle(name)
512
- : action === "stop"
513
- ? await manager.stopBundle(name)
514
- : await manager.restartBundle(name);
515
- sendJson(response, { ok: true, statuses });
516
- return;
517
- }
518
- if (request.method === "GET" && url.pathname.startsWith("/assets/")) {
519
- if (await sendStaticAsset(response, url.pathname)) {
520
- return;
521
- }
522
- }
523
- if (request.method === "GET" &&
524
- (url.pathname === "/" || url.pathname === "/git" || url.pathname === "/agent")) {
525
- sendHtml(response, await readWebAppShell());
526
- return;
527
74
  }
528
75
  sendHtml(response, "Not found", 404);
529
76
  }
530
77
  catch (error) {
531
- sendJson(response, { ok: false, error: error instanceof Error ? error.message : String(error) }, error instanceof ConfigValidationError ? 400 : 500);
532
- }
533
- }
534
- async function readJsonBody(request) {
535
- const chunks = [];
536
- for await (const chunk of request) {
537
- chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
538
- }
539
- const text = Buffer.concat(chunks).toString("utf8");
540
- if (!text)
541
- return undefined;
542
- try {
543
- return JSON.parse(text);
544
- }
545
- catch {
546
- throw new Error("Request body must be valid JSON.");
547
- }
548
- }
549
- function parseEnvEntries(body) {
550
- if (!body || typeof body !== "object") {
551
- throw new Error("entries array is required.");
552
- }
553
- const raw = body.entries;
554
- if (!Array.isArray(raw)) {
555
- throw new Error("entries must be an array.");
556
- }
557
- const seen = new Set();
558
- const result = [];
559
- for (const item of raw) {
560
- if (!item || typeof item !== "object") {
561
- throw new Error("each entry must be { key, value }.");
562
- }
563
- const { key, value } = item;
564
- if (typeof key !== "string" || !/^[A-Za-z_][A-Za-z0-9_.]*$/.test(key)) {
565
- throw new Error(`invalid env key: ${JSON.stringify(key)}`);
566
- }
567
- if (typeof value !== "string") {
568
- throw new Error(`value for "${key}" must be a string.`);
569
- }
570
- if (seen.has(key)) {
571
- throw new Error(`duplicate env key: ${key}`);
572
- }
573
- seen.add(key);
574
- result.push({ key, value });
575
- }
576
- return result;
577
- }
578
- async function getServiceCwd(configStore, name) {
579
- const config = await configStore.load();
580
- const service = config.services.find((item) => item.name === name);
581
- if (!service) {
582
- throw new Error(`Service "${name}" not found.`);
583
- }
584
- return service.cwd;
585
- }
586
- async function readTextFile(path) {
587
- try {
588
- const content = await readFile(path, "utf8");
589
- return { content, exists: true };
590
- }
591
- catch (error) {
592
- if (error.code === "ENOENT") {
593
- return { content: "", exists: false };
594
- }
595
- throw error;
78
+ sendJson(response, { ok: false, error: errorMessage(error) }, error instanceof ConfigValidationError ? 400 : 500);
596
79
  }
597
80
  }
598
81
  function timelineBaseDir(logDir) {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAmD,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAsB,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAoBnD,MAAM,UAAU,eAAe,CAAC,UAA4B,EAAE;IAC5D,MAAM,WAAW,GAAG,IAAI,WAAW,CACjC,OAAO,CAAC,UAAU,IAAI,uBAAuB,EAAE,CAChD,CAAC;IACF,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC;QACtC,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC;KACzC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;QAC5B,OAAO,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC;QACpE,aAAa;KACd,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;IAC7E,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAClC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,aAAa,EAAE,CAAC;IAEnE,MAAM,QAAQ,GAAkB;QAC9B,WAAW;QACX,GAAG;QACH,QAAQ;QACR,OAAO;QACP,aAAa;QACb,aAAa;KACd,CAAC;IAEF,OAAO;QACL,KAAK,CAAC,KAAK;YACT,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;gBACrD,KAAK,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;YAElC,MAAM,IAAI,OAAO,CAAO,CAAC,aAAa,EAAE,YAAY,EAAE,EAAE;gBACtD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;gBACnC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;YAC1D,CAAC,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAEhF,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,GAAG,EAAE,oBAAoB,UAAU,EAAE;gBACrC,KAAK,CAAC,IAAI;oBACR,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;oBACxB,MAAM,IAAI,OAAO,CAAO,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE;wBACpD,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;4BACrB,IAAI,KAAK,EAAE,CAAC;gCACV,WAAW,CAAC,KAAK,CAAC,CAAC;gCACnB,OAAO;4BACT,CAAC;4BACD,YAAY,EAAE,CAAC;wBACjB,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,KAAK,UAAU,YAAY,CACzB,QAAuB,EACvB,OAAwB,EACxB,QAAwB;IAExB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;IAEvC,IAAI,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACxC,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;gBACpE,OAAO;YACT,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,CACN,QAAQ,EACR,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EACzC,KAAK,YAAY,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CACnD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,MAA0B;IACjD,OAAO,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;AAClF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nomoreide",
3
- "version": "0.1.20",
3
+ "version": "0.1.21",
4
4
  "description": "An AI-native terminal workbench for services, Git review, logs, and MCP workflows.",
5
5
  "repository": {
6
6
  "type": "git",