nomoreide 0.1.19 → 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.
Files changed (35) hide show
  1. package/dist/core/config-files.d.ts +27 -0
  2. package/dist/core/config-files.js +154 -0
  3. package/dist/core/config-files.js.map +1 -0
  4. package/dist/core/env-file.d.ts +24 -0
  5. package/dist/core/env-file.js +122 -0
  6. package/dist/core/env-file.js.map +1 -0
  7. package/dist/web/client/assets/index-CBZsUFdB.js +23 -0
  8. package/dist/web/client/assets/index-y4GyM_JC.css +1 -0
  9. package/dist/web/client/index.html +2 -2
  10. package/dist/web/routes/agent-routes.d.ts +3 -0
  11. package/dist/web/routes/agent-routes.js +40 -0
  12. package/dist/web/routes/agent-routes.js.map +1 -0
  13. package/dist/web/routes/context.d.ts +39 -0
  14. package/dist/web/routes/context.js +48 -0
  15. package/dist/web/routes/context.js.map +1 -0
  16. package/dist/web/routes/dashboard-routes.d.ts +3 -0
  17. package/dist/web/routes/dashboard-routes.js +20 -0
  18. package/dist/web/routes/dashboard-routes.js.map +1 -0
  19. package/dist/web/routes/git-routes.d.ts +3 -0
  20. package/dist/web/routes/git-routes.js +125 -0
  21. package/dist/web/routes/git-routes.js.map +1 -0
  22. package/dist/web/routes/index.d.ts +10 -0
  23. package/dist/web/routes/index.js +20 -0
  24. package/dist/web/routes/index.js.map +1 -0
  25. package/dist/web/routes/service-routes.d.ts +3 -0
  26. package/dist/web/routes/service-routes.js +298 -0
  27. package/dist/web/routes/service-routes.js.map +1 -0
  28. package/dist/web/routes/shell-routes.d.ts +3 -0
  29. package/dist/web/routes/shell-routes.js +34 -0
  30. package/dist/web/routes/shell-routes.js.map +1 -0
  31. package/dist/web/server.js +21 -358
  32. package/dist/web/server.js.map +1 -1
  33. package/package.json +1 -1
  34. package/dist/web/client/assets/index-CZxkTcFO.js +0 -23
  35. package/dist/web/client/assets/index-Di8-pWM4.css +0 -1
@@ -1,18 +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 { GitManager } from "../core/git-manager.js";
5
4
  import { LogStore } from "../core/log-store.js";
6
- import { PortConflictError, ProcessManager } from "../core/process-manager.js";
5
+ import { ProcessManager } from "../core/process-manager.js";
7
6
  import { TimelineStore } from "../core/timeline-store.js";
8
7
  import { ToolCallStore } from "../core/tool-call-store.js";
9
- import { testServiceCommand } from "./service-tester.js";
10
- import { buildDashboardPayload, getSelectedGitRepository, readGitDiff, selectedGitCwd, } from "./dashboard.js";
11
- import { buildAgentInfo } from "./agent-info.js";
12
- import { buildUsageInfo } from "./usage-info.js";
13
- import { listDirectories } from "./directories.js";
14
- import { optionalFormValue, readForm, requiredFormValue, sendHead, sendHtml, sendJson, sendText, } from "./http-utils.js";
15
- 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";
16
11
  export function createWebServer(options = {}) {
17
12
  const configStore = new ConfigStore(options.configPath ?? defaultGlobalConfigPath());
18
13
  const timelineStore = new TimelineStore({
@@ -26,19 +21,18 @@ export function createWebServer(options = {}) {
26
21
  manager.installShutdownHandlers();
27
22
  const cwd = options.cwd ?? process.cwd();
28
23
  const toolCallStore = options.toolCallStore ?? new ToolCallStore();
24
+ const services = {
25
+ configStore,
26
+ cwd,
27
+ logStore,
28
+ manager,
29
+ timelineStore,
30
+ toolCallStore,
31
+ };
29
32
  return {
30
33
  async start() {
31
34
  const server = http.createServer((request, response) => {
32
- void routeRequest({
33
- request,
34
- response,
35
- configStore,
36
- logStore,
37
- manager,
38
- timelineStore,
39
- cwd,
40
- toolCallStore,
41
- });
35
+ void routeRequest(services, request, response);
42
36
  });
43
37
  const port = options.port ?? 4317;
44
38
  await new Promise((resolveListen, rejectListen) => {
@@ -66,353 +60,22 @@ export function createWebServer(options = {}) {
66
60
  },
67
61
  };
68
62
  }
69
- async function routeRequest(options) {
70
- 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) {
71
65
  const url = new URL(request.url ?? "/", "http://127.0.0.1");
66
+ const method = request.method ?? "GET";
72
67
  try {
73
- if (request.method === "HEAD" &&
74
- (url.pathname === "/" || url.pathname === "/git" || url.pathname === "/agent")) {
75
- sendHead(response, "text/html; charset=utf-8");
76
- return;
77
- }
78
- if (request.method === "GET" && url.pathname === "/api/dashboard") {
79
- sendJson(response, await buildDashboardPayload({
80
- configStore,
81
- cwd,
82
- logStore,
83
- manager,
84
- timelineStore,
85
- }));
86
- return;
87
- }
88
- if (request.method === "GET" && url.pathname === "/api/health") {
89
- sendJson(response, { ok: true, app: "nomoreide" });
90
- return;
91
- }
92
- if (request.method === "GET" && url.pathname === "/api/agent") {
93
- sendJson(response, { ok: true, agent: await buildAgentInfo(cwd) });
94
- return;
95
- }
96
- if (request.method === "GET" && url.pathname === "/api/agent/usage") {
97
- sendJson(response, { ok: true, usage: await buildUsageInfo(cwd) });
98
- return;
99
- }
100
- if (request.method === "GET" && url.pathname === "/api/agent/tool-calls") {
101
- const limitParam = Number(url.searchParams.get("limit"));
102
- const limit = Number.isFinite(limitParam) && limitParam > 0 ? Math.min(limitParam, 500) : 100;
103
- sendJson(response, { ok: true, records: toolCallStore.recent(limit) });
104
- return;
105
- }
106
- if (request.method === "GET" && url.pathname === "/api/agent/tool-calls/stream") {
107
- response.writeHead(200, {
108
- "content-type": "text/event-stream",
109
- "cache-control": "no-cache, no-transform",
110
- connection: "keep-alive",
111
- });
112
- response.write(`retry: 2000\n\n`);
113
- for (const record of toolCallStore.recent(50)) {
114
- response.write(`event: tool-call\ndata: ${JSON.stringify(record)}\n\n`);
115
- }
116
- const heartbeat = setInterval(() => {
117
- response.write(`: ping\n\n`);
118
- }, 15000);
119
- const unsubscribe = toolCallStore.subscribe((record) => {
120
- response.write(`event: tool-call\ndata: ${JSON.stringify(record)}\n\n`);
121
- });
122
- request.on("close", () => {
123
- clearInterval(heartbeat);
124
- unsubscribe();
125
- });
126
- return;
127
- }
128
- if (request.method === "GET" && url.pathname === "/api/fs/directories") {
129
- sendJson(response, await listDirectories(url.searchParams.get("path")?.trim() || cwd));
130
- return;
131
- }
132
- if (request.method === "GET" && url.pathname === "/api/git/diff") {
133
- const config = await configStore.load();
134
- const selectedGitRepository = getSelectedGitRepository(config);
135
- const gitCwd = selectedGitRepository?.path ?? cwd;
136
- const selectedFile = url.searchParams.get("file")?.trim();
137
- if (!selectedFile) {
138
- sendJson(response, { ok: false, error: "file is required" }, 400);
139
- return;
140
- }
141
- const git = new GitManager(gitCwd);
142
- const status = await git.status();
143
- const selectedStatus = status.files.find((file) => file.path === selectedFile);
144
- const diff = selectedStatus
145
- ? await git.fileDiff(selectedStatus)
146
- : await readGitDiff(gitCwd, selectedFile);
147
- if (diff === undefined) {
148
- sendJson(response, { ok: false, error: "No changes or file not found." }, 404);
149
- return;
150
- }
151
- sendText(response, diff);
152
- return;
153
- }
154
- if (request.method === "GET" && url.pathname === "/api/git/files") {
155
- const gitCwd = await selectedGitCwd(configStore, cwd);
156
- try {
157
- const files = await new GitManager(gitCwd).listTrackedFiles();
158
- sendJson(response, { ok: true, files });
159
- }
160
- catch (error) {
161
- const message = error instanceof Error ? error.message : String(error);
162
- sendJson(response, { ok: false, error: message }, 400);
163
- }
164
- return;
165
- }
166
- if (request.method === "GET" && url.pathname === "/api/git/file") {
167
- const gitCwd = await selectedGitCwd(configStore, cwd);
168
- const path = url.searchParams.get("path")?.trim();
169
- if (!path) {
170
- sendJson(response, { ok: false, error: "path is required" }, 400);
171
- return;
172
- }
173
- try {
174
- const file = await new GitManager(gitCwd).readTrackedFile(path);
175
- sendJson(response, { ok: true, ...file });
176
- }
177
- catch (error) {
178
- const message = error instanceof Error ? error.message : String(error);
179
- sendJson(response, { ok: false, error: message }, 404);
180
- }
181
- return;
182
- }
183
- if (request.method === "GET" && url.pathname === "/api/git/commit") {
184
- const gitCwd = await selectedGitCwd(configStore, cwd);
185
- const hash = url.searchParams.get("hash")?.trim();
186
- const file = url.searchParams.get("file")?.trim() || undefined;
187
- if (!hash) {
188
- sendJson(response, { ok: false, error: "hash is required" }, 400);
189
- return;
190
- }
191
- try {
192
- const diff = await new GitManager(gitCwd).commitDiff(hash, file);
193
- sendText(response, diff);
194
- }
195
- catch (error) {
196
- const message = error instanceof Error ? error.message : String(error);
197
- sendJson(response, { ok: false, error: message }, 400);
198
- }
199
- return;
200
- }
201
- if (request.method === "GET" && url.pathname === "/api/git/commit/files") {
202
- const gitCwd = await selectedGitCwd(configStore, cwd);
203
- const hash = url.searchParams.get("hash")?.trim();
204
- if (!hash) {
205
- 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 });
206
72
  return;
207
73
  }
208
- try {
209
- const files = await new GitManager(gitCwd).commitFiles(hash);
210
- sendJson(response, { ok: true, files });
211
- }
212
- catch (error) {
213
- const message = error instanceof Error ? error.message : String(error);
214
- sendJson(response, { ok: false, error: message }, 400);
215
- }
216
- return;
217
- }
218
- if (request.method === "GET" && url.pathname === "/api/git/graph") {
219
- const gitCwd = await selectedGitCwd(configStore, cwd);
220
- const limitParam = url.searchParams.get("limit")?.trim();
221
- const parsedLimit = limitParam ? Number(limitParam) : 200;
222
- const limit = Number.isFinite(parsedLimit) && parsedLimit > 0
223
- ? Math.min(Math.floor(parsedLimit), 2000)
224
- : 200;
225
- const commits = await new GitManager(gitCwd).graph(limit);
226
- sendJson(response, { ok: true, commits });
227
- return;
228
- }
229
- if (request.method === "POST" && url.pathname === "/api/git/fetch") {
230
- const gitCwd = await selectedGitCwd(configStore, cwd);
231
- const output = await new GitManager(gitCwd).fetch();
232
- sendJson(response, { ok: true, output });
233
- return;
234
- }
235
- if (request.method === "POST" && url.pathname === "/api/git/branches") {
236
- const form = await readForm(request);
237
- const gitCwd = await selectedGitCwd(configStore, cwd);
238
- const output = await new GitManager(gitCwd).createBranch(requiredFormValue(form, "name"));
239
- sendJson(response, { ok: true, output });
240
- return;
241
- }
242
- if (request.method === "POST" && url.pathname === "/api/git/branches/switch") {
243
- const form = await readForm(request);
244
- const gitCwd = await selectedGitCwd(configStore, cwd);
245
- const output = await new GitManager(gitCwd).switchBranch(requiredFormValue(form, "name"));
246
- sendJson(response, { ok: true, output });
247
- return;
248
- }
249
- if (request.method === "GET" && url.pathname === "/api/status") {
250
- sendJson(response, { ok: true, status: manager.status() });
251
- return;
252
- }
253
- if (request.method === "POST" && url.pathname === "/api/services") {
254
- const form = await readForm(request);
255
- const portValue = form.get("port")?.trim();
256
- const port = portValue ? Number(portValue) : undefined;
257
- const kind = (optionalFormValue(form, "kind") ?? "local");
258
- const name = requiredFormValue(form, "name");
259
- const description = optionalFormValue(form, "description");
260
- const definition = kind === "docker-compose"
261
- ? {
262
- name,
263
- kind: "docker-compose",
264
- cwd: requiredFormValue(form, "cwd"),
265
- composeFile: optionalFormValue(form, "composeFile"),
266
- composeService: requiredFormValue(form, "composeService"),
267
- port,
268
- description,
269
- }
270
- : kind === "ssh"
271
- ? {
272
- name,
273
- kind: "ssh",
274
- host: requiredFormValue(form, "host"),
275
- cwd: requiredFormValue(form, "cwd"),
276
- command: requiredFormValue(form, "command"),
277
- port,
278
- description,
279
- }
280
- : {
281
- name,
282
- command: requiredFormValue(form, "command"),
283
- cwd: requiredFormValue(form, "cwd"),
284
- port,
285
- description,
286
- };
287
- const config = await configStore.registerService(definition);
288
- sendJson(response, { ok: true, config });
289
- return;
290
- }
291
- if (request.method === "POST" && url.pathname === "/api/services/test") {
292
- const form = await readForm(request);
293
- const portValue = form.get("port")?.trim();
294
- sendJson(response, await testServiceCommand({
295
- command: requiredFormValue(form, "command"),
296
- cwd: requiredFormValue(form, "cwd"),
297
- port: portValue ? Number(portValue) : undefined,
298
- }));
299
- return;
300
- }
301
- if (request.method === "POST" && url.pathname === "/api/bundles") {
302
- const form = await readForm(request);
303
- const services = requiredFormValue(form, "services")
304
- .split(",")
305
- .map((service) => service.trim())
306
- .filter(Boolean);
307
- const config = await configStore.registerBundle({
308
- name: requiredFormValue(form, "name"),
309
- services,
310
- }, optionalFormValue(form, "originalName"));
311
- sendJson(response, { ok: true, config });
312
- return;
313
- }
314
- if (request.method === "POST" && url.pathname === "/api/git/repositories") {
315
- const form = await readForm(request);
316
- const config = await configStore.registerGitRepository({
317
- name: requiredFormValue(form, "name"),
318
- path: requiredFormValue(form, "path"),
319
- });
320
- sendJson(response, { ok: true, config });
321
- return;
322
- }
323
- if (request.method === "POST" && url.pathname === "/api/git/select") {
324
- const form = await readForm(request);
325
- const config = await configStore.selectGitRepository(requiredFormValue(form, "name"));
326
- sendJson(response, { ok: true, config });
327
- return;
328
- }
329
- const inspectorMatch = url.pathname.match(/^\/api\/services\/([^/]+)\/inspector$/);
330
- if (inspectorMatch) {
331
- if (request.method !== "POST") {
332
- sendJson(response, { ok: false, error: "Method not allowed" }, 405);
333
- return;
334
- }
335
- const name = decodeURIComponent(inspectorMatch[1]);
336
- const form = await readForm(request);
337
- const enabled = form.get("enabled") === "true" || form.get("enabled") === "1";
338
- const status = await manager.setInspectorEnabled(name, enabled);
339
- sendJson(response, { ok: true, status });
340
- return;
341
- }
342
- const serviceMatch = url.pathname.match(/^\/api\/services\/([^/]+)\/(start|stop|restart|logs)$/);
343
- if (serviceMatch) {
344
- const [, encodedName, action] = serviceMatch;
345
- const name = decodeURIComponent(encodedName);
346
- if (request.method === "GET" && action === "logs") {
347
- sendJson(response, { ok: true, logs: logStore.read(name, 200) });
348
- return;
349
- }
350
- if (request.method !== "POST") {
351
- sendJson(response, { ok: false, error: "Method not allowed" }, 405);
352
- return;
353
- }
354
- try {
355
- let startOptions = {};
356
- if (action === "start" || action === "restart") {
357
- const form = await readForm(request).catch(() => new URLSearchParams());
358
- if (form.get("strategy") === "killHolder") {
359
- startOptions = { killHolder: true };
360
- }
361
- }
362
- const status = action === "start"
363
- ? await manager.startService(name, startOptions)
364
- : action === "stop"
365
- ? await manager.stopService(name)
366
- : await manager.restartService(name, startOptions);
367
- sendJson(response, { ok: true, status });
368
- }
369
- catch (error) {
370
- if (error instanceof PortConflictError) {
371
- sendJson(response, {
372
- ok: false,
373
- error: error.message,
374
- conflict: {
375
- code: error.code,
376
- port: error.port,
377
- holder: error.holder,
378
- },
379
- }, 409);
380
- return;
381
- }
382
- throw error;
383
- }
384
- return;
385
- }
386
- const bundleMatch = url.pathname.match(/^\/api\/bundles\/([^/]+)\/(start|stop|restart)$/);
387
- if (bundleMatch) {
388
- if (request.method !== "POST") {
389
- sendJson(response, { ok: false, error: "Method not allowed" }, 405);
390
- return;
391
- }
392
- const [, encodedName, action] = bundleMatch;
393
- const name = decodeURIComponent(encodedName);
394
- const statuses = action === "start"
395
- ? await manager.startBundle(name)
396
- : action === "stop"
397
- ? await manager.stopBundle(name)
398
- : await manager.restartBundle(name);
399
- sendJson(response, { ok: true, statuses });
400
- return;
401
- }
402
- if (request.method === "GET" && url.pathname.startsWith("/assets/")) {
403
- if (await sendStaticAsset(response, url.pathname)) {
404
- return;
405
- }
406
- }
407
- if (request.method === "GET" &&
408
- (url.pathname === "/" || url.pathname === "/git" || url.pathname === "/agent")) {
409
- sendHtml(response, await readWebAppShell());
410
- return;
411
74
  }
412
75
  sendHtml(response, "Not found", 404);
413
76
  }
414
77
  catch (error) {
415
- sendJson(response, { ok: false, error: error instanceof Error ? error.message : String(error) }, error instanceof ConfigValidationError ? 400 : 500);
78
+ sendJson(response, { ok: false, error: errorMessage(error) }, error instanceof ConfigValidationError ? 400 : 500);
416
79
  }
417
80
  }
418
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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nomoreide",
3
- "version": "0.1.19",
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",