nomoreide 0.1.32 → 0.1.33

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,6 +1,7 @@
1
1
  import type { ConfigStore } from "./config-store.js";
2
2
  import type { LogStore } from "./log-store.js";
3
3
  import { type PortHolder } from "./port-utils.js";
4
+ import { type ServiceRegistry } from "./service-registry.js";
4
5
  import type { TimelineStore } from "./timeline-store.js";
5
6
  import type { ServiceStatus } from "./types.js";
6
7
  interface ProcessManagerOptions {
@@ -8,6 +9,13 @@ interface ProcessManagerOptions {
8
9
  logStore: LogStore;
9
10
  stopTimeoutMs?: number;
10
11
  timelineStore?: TimelineStore;
12
+ /**
13
+ * Shared cross-session view of running services. When provided, the manager
14
+ * adopts services started by other sessions instead of spawning duplicates,
15
+ * and can stop services it did not spawn itself. Omit for an isolated manager
16
+ * (e.g. in tests) — behavior is then identical to a single-session manager.
17
+ */
18
+ registry?: ServiceRegistry;
11
19
  }
12
20
  export interface NoMoreIdeStatus {
13
21
  services: Record<string, ServiceStatus>;
@@ -28,6 +36,7 @@ export declare class ProcessManager {
28
36
  private readonly logStore;
29
37
  private readonly stopTimeoutMs;
30
38
  private readonly timelineStore?;
39
+ private readonly registry?;
31
40
  constructor(options: ProcessManagerOptions);
32
41
  startService(name: string, options?: StartServiceOptions): Promise<ServiceStatus>;
33
42
  stopService(name: string): Promise<ServiceStatus>;
@@ -45,6 +54,12 @@ export declare class ProcessManager {
45
54
  installShutdownHandlers(): () => void;
46
55
  status(): NoMoreIdeStatus;
47
56
  statusWithResources(): Promise<NoMoreIdeStatus>;
57
+ /**
58
+ * Fold in services started by sibling sessions. A registry entry wins only
59
+ * when this session has no running view of that service, so a locally-owned
60
+ * "running" status is never overwritten by the shared snapshot.
61
+ */
62
+ private mergeRegistry;
48
63
  private startDockerComposeService;
49
64
  private stopDockerComposeService;
50
65
  readDockerServiceLogs(name: string, tail?: number): Promise<string>;
@@ -3,6 +3,7 @@ import { readDockerServiceLogs, readDockerServiceStatus, startDockerService, sto
3
3
  import { startHttpInspector, } from "./http-inspector.js";
4
4
  import { getPortHolder, isPortAvailable } from "./port-utils.js";
5
5
  import { readProcessTree } from "./process-tree.js";
6
+ import { isPidAlive, } from "./service-registry.js";
6
7
  import { createSshCommand } from "./ssh-service-runner.js";
7
8
  export class PortConflictError extends Error {
8
9
  code = "PORT_IN_USE";
@@ -24,11 +25,13 @@ export class ProcessManager {
24
25
  logStore;
25
26
  stopTimeoutMs;
26
27
  timelineStore;
28
+ registry;
27
29
  constructor(options) {
28
30
  this.configStore = options.configStore;
29
31
  this.logStore = options.logStore;
30
32
  this.stopTimeoutMs = options.stopTimeoutMs ?? 3000;
31
33
  this.timelineStore = options.timelineStore;
34
+ this.registry = options.registry;
32
35
  }
33
36
  async startService(name, options = {}) {
34
37
  const service = await this.getService(name);
@@ -40,6 +43,13 @@ export class ProcessManager {
40
43
  if (kind === "docker-compose") {
41
44
  return this.startDockerComposeService(name, service);
42
45
  }
46
+ // Another session may already be running this exact service. Adopt its
47
+ // status instead of spawning a duplicate — this also covers portless
48
+ // services, where the port check below cannot detect the conflict.
49
+ const tracked = this.registry?.get(name);
50
+ if (tracked) {
51
+ return registryEntryToStatus(tracked);
52
+ }
43
53
  if (service.port && !(await isPortAvailable(service.port))) {
44
54
  const holder = await getPortHolder(service.port);
45
55
  if (options.killHolder && holder) {
@@ -66,6 +76,18 @@ export class ProcessManager {
66
76
  },
67
77
  };
68
78
  this.runtimes.set(name, runtime);
79
+ if (child.pid) {
80
+ this.registry?.record({
81
+ name,
82
+ pid: child.pid,
83
+ pgid: child.pid, // detached spawn → child.pid is the process-group leader
84
+ port: service.port,
85
+ kind,
86
+ host: kind === "ssh" ? service.host : undefined,
87
+ startedAt: runtime.status.startedAt ?? new Date().toISOString(),
88
+ ownerPid: process.pid,
89
+ });
90
+ }
69
91
  void this.appendTimeline({
70
92
  kind: "service.lifecycle",
71
93
  service: name,
@@ -87,6 +109,7 @@ export class ProcessManager {
87
109
  signal,
88
110
  };
89
111
  runtime.child = undefined;
112
+ this.registry?.remove(name);
90
113
  void this.stopInspector(runtime);
91
114
  void this.appendTimeline({
92
115
  kind: "service.lifecycle",
@@ -107,6 +130,7 @@ export class ProcessManager {
107
130
  exitCode: 1,
108
131
  signal: null,
109
132
  };
133
+ this.registry?.remove(name);
110
134
  void this.logStore.append(name, "stderr", error.message);
111
135
  void this.appendTimeline({
112
136
  kind: "service.lifecycle",
@@ -124,6 +148,13 @@ export class ProcessManager {
124
148
  return this.stopDockerComposeService(name, runtime);
125
149
  }
126
150
  if (!runtime?.child || runtime.status.state !== "running") {
151
+ // No live child in this session — a sibling session may own it. If the
152
+ // registry has a live entry, signal its process group to stop it.
153
+ const tracked = this.registry?.get(name);
154
+ if (tracked) {
155
+ await stopByPid(tracked.pid, tracked.pgid, this.stopTimeoutMs);
156
+ this.registry?.remove(name);
157
+ }
127
158
  const stopped = { name, state: "stopped" };
128
159
  this.runtimes.set(name, { status: stopped, stopping: false });
129
160
  void this.appendTimeline({
@@ -262,6 +293,9 @@ export class ProcessManager {
262
293
  continue;
263
294
  signalProcessTree(runtime.child, signal);
264
295
  }
296
+ // Drop this session's entries synchronously; the async exit handlers above
297
+ // may not run before the host process exits.
298
+ this.registry?.removeOwnedBy(process.pid);
265
299
  }
266
300
  installShutdownHandlers() {
267
301
  let firing = false;
@@ -289,12 +323,12 @@ export class ProcessManager {
289
323
  };
290
324
  }
291
325
  status() {
292
- return {
293
- services: Object.fromEntries([...this.runtimes.entries()].map(([name, runtime]) => [
294
- name,
295
- { ...runtime.status },
296
- ])),
297
- };
326
+ const services = {};
327
+ for (const [name, runtime] of this.runtimes.entries()) {
328
+ services[name] = { ...runtime.status };
329
+ }
330
+ this.mergeRegistry(services);
331
+ return { services };
298
332
  }
299
333
  async statusWithResources() {
300
334
  const services = {};
@@ -306,8 +340,29 @@ export class ProcessManager {
306
340
  status.inspector = this.inspectorStatus(runtime);
307
341
  services[name] = status;
308
342
  }
343
+ this.mergeRegistry(services);
344
+ for (const status of Object.values(services)) {
345
+ if (status.pid && status.state === "running" && !status.processTree) {
346
+ status.processTree = await readProcessTree(status.pid);
347
+ }
348
+ }
309
349
  return { services };
310
350
  }
351
+ /**
352
+ * Fold in services started by sibling sessions. A registry entry wins only
353
+ * when this session has no running view of that service, so a locally-owned
354
+ * "running" status is never overwritten by the shared snapshot.
355
+ */
356
+ mergeRegistry(services) {
357
+ if (!this.registry)
358
+ return;
359
+ for (const entry of this.registry.list()) {
360
+ const local = services[entry.name];
361
+ if (!local || local.state !== "running") {
362
+ services[entry.name] = registryEntryToStatus(entry);
363
+ }
364
+ }
365
+ }
311
366
  async startDockerComposeService(name, service) {
312
367
  const target = toDockerTarget(name, service);
313
368
  const info = await startDockerService(target);
@@ -392,6 +447,7 @@ export class ProcessManager {
392
447
  const runtime = this.runtimes.get(service);
393
448
  if (runtime) {
394
449
  runtime.status = { ...runtime.status, url };
450
+ this.registry?.update(service, { url });
395
451
  void this.maybeStartInspector(service);
396
452
  }
397
453
  void this.appendTimeline({
@@ -422,6 +478,49 @@ export class ProcessManager {
422
478
  function resolveKind(service) {
423
479
  return service.kind ?? "local";
424
480
  }
481
+ function registryEntryToStatus(entry) {
482
+ return {
483
+ name: entry.name,
484
+ state: "running",
485
+ kind: entry.kind,
486
+ pid: entry.pid,
487
+ url: entry.url,
488
+ host: entry.host,
489
+ startedAt: entry.startedAt,
490
+ };
491
+ }
492
+ /**
493
+ * Stop a process by pid when we hold no ChildProcess handle for it (it was
494
+ * spawned by another session). Signals the whole process group, then escalates
495
+ * to SIGKILL if it has not exited within the timeout.
496
+ */
497
+ async function stopByPid(pid, pgid, timeoutMs) {
498
+ signalPid(pid, pgid, "SIGTERM");
499
+ const deadline = Date.now() + timeoutMs;
500
+ while (Date.now() < deadline) {
501
+ if (!isPidAlive(pid))
502
+ return;
503
+ await new Promise((resolve) => setTimeout(resolve, 50));
504
+ }
505
+ signalPid(pid, pgid, "SIGKILL");
506
+ }
507
+ function signalPid(pid, pgid, signal) {
508
+ const group = pgid ?? pid;
509
+ try {
510
+ // Negative pid signals the whole process group (detached spawn → pgid===pid).
511
+ process.kill(-group, signal);
512
+ }
513
+ catch (error) {
514
+ if (error.code === "ESRCH")
515
+ return;
516
+ try {
517
+ process.kill(pid, signal);
518
+ }
519
+ catch {
520
+ // ignore
521
+ }
522
+ }
523
+ }
425
524
  function toDockerTarget(name, service) {
426
525
  if (!service.cwd || !service.composeService) {
427
526
  throw new Error(`Service "${name}" is missing docker-compose cwd or composeService.`);
@@ -1 +1 @@
1
- {"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../../src/core/process-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../../src/core/process-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { ServiceKind } from "./types.js";
2
+ /**
3
+ * One running service spawned by some session's ProcessManager. Persisted so
4
+ * every session (and the shared web UI process) sees the same set and can
5
+ * adopt/stop a service it did not spawn itself.
6
+ *
7
+ * Only `local`/`ssh` services are tracked here — they are the ones spawned with
8
+ * a real OS pid via `spawn(... detached)`, so liveness can be probed with
9
+ * `process.kill(pid, 0)`. docker-compose services dedupe through compose itself.
10
+ */
11
+ export interface ServiceRegistryEntry {
12
+ name: string;
13
+ /** pid of the spawned process (also the process-group leader: detached spawn). */
14
+ pid: number;
15
+ /** process-group id, equal to `pid` for detached spawns; used for group signals. */
16
+ pgid?: number;
17
+ port?: number;
18
+ url?: string;
19
+ kind: ServiceKind;
20
+ host?: string;
21
+ startedAt: string;
22
+ /** pid of the manager process that spawned it (for owner-scoped cleanup). */
23
+ ownerPid: number;
24
+ }
25
+ /**
26
+ * Shared, project-local view of running services, persisted at
27
+ * `.nomoreide/runtime.json`. Reads never mutate the file; mutations rewrite it
28
+ * atomically (temp + rename) and drop any entries whose pid has died, so stale
29
+ * entries from a crashed session self-heal on the next write.
30
+ */
31
+ export declare class ServiceRegistry {
32
+ private readonly path;
33
+ constructor(path: string);
34
+ list(): ServiceRegistryEntry[];
35
+ get(name: string): ServiceRegistryEntry | null;
36
+ record(entry: ServiceRegistryEntry): void;
37
+ update(name: string, patch: Partial<ServiceRegistryEntry>): void;
38
+ remove(name: string): void;
39
+ removeOwnedBy(ownerPid: number): void;
40
+ private pruned;
41
+ private read;
42
+ private write;
43
+ }
44
+ /**
45
+ * The shared registry lives next to the project logs: `.nomoreide/runtime.json`.
46
+ * `logDir` is `.nomoreide/logs`, so its parent is the `.nomoreide` root.
47
+ */
48
+ export declare function defaultRuntimeRegistryPath(logDir: string): string;
49
+ /** `true` while the pid exists (including when owned by another user — EPERM). */
50
+ export declare function isPidAlive(pid: number): boolean;
@@ -0,0 +1,98 @@
1
+ import { mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
2
+ import { dirname, resolve } from "node:path";
3
+ /**
4
+ * Shared, project-local view of running services, persisted at
5
+ * `.nomoreide/runtime.json`. Reads never mutate the file; mutations rewrite it
6
+ * atomically (temp + rename) and drop any entries whose pid has died, so stale
7
+ * entries from a crashed session self-heal on the next write.
8
+ */
9
+ export class ServiceRegistry {
10
+ path;
11
+ constructor(path) {
12
+ this.path = path;
13
+ }
14
+ list() {
15
+ return Object.values(this.read()).filter((entry) => isPidAlive(entry.pid));
16
+ }
17
+ get(name) {
18
+ const entry = this.read()[name];
19
+ return entry && isPidAlive(entry.pid) ? entry : null;
20
+ }
21
+ record(entry) {
22
+ const all = this.pruned();
23
+ all[entry.name] = entry;
24
+ this.write(all);
25
+ }
26
+ update(name, patch) {
27
+ const all = this.pruned();
28
+ const existing = all[name];
29
+ if (!existing)
30
+ return;
31
+ all[name] = { ...existing, ...patch };
32
+ this.write(all);
33
+ }
34
+ remove(name) {
35
+ const all = this.pruned();
36
+ if (name in all) {
37
+ delete all[name];
38
+ }
39
+ this.write(all);
40
+ }
41
+ removeOwnedBy(ownerPid) {
42
+ const all = this.read();
43
+ let changed = false;
44
+ for (const [name, entry] of Object.entries(all)) {
45
+ if (entry.ownerPid === ownerPid || !isPidAlive(entry.pid)) {
46
+ delete all[name];
47
+ changed = true;
48
+ }
49
+ }
50
+ if (changed)
51
+ this.write(all);
52
+ }
53
+ pruned() {
54
+ const all = this.read();
55
+ for (const [name, entry] of Object.entries(all)) {
56
+ if (!isPidAlive(entry.pid))
57
+ delete all[name];
58
+ }
59
+ return all;
60
+ }
61
+ read() {
62
+ try {
63
+ const parsed = JSON.parse(readFileSync(this.path, "utf8"));
64
+ if (!parsed || typeof parsed !== "object")
65
+ return {};
66
+ return parsed;
67
+ }
68
+ catch {
69
+ return {};
70
+ }
71
+ }
72
+ write(all) {
73
+ mkdirSync(dirname(this.path), { recursive: true });
74
+ const tmp = `${this.path}.${process.pid}.tmp`;
75
+ writeFileSync(tmp, `${JSON.stringify(all, null, 2)}\n`);
76
+ renameSync(tmp, this.path);
77
+ }
78
+ }
79
+ /**
80
+ * The shared registry lives next to the project logs: `.nomoreide/runtime.json`.
81
+ * `logDir` is `.nomoreide/logs`, so its parent is the `.nomoreide` root.
82
+ */
83
+ export function defaultRuntimeRegistryPath(logDir) {
84
+ return resolve(dirname(resolve(logDir)), "runtime.json");
85
+ }
86
+ /** `true` while the pid exists (including when owned by another user — EPERM). */
87
+ export function isPidAlive(pid) {
88
+ if (!pid || pid <= 0)
89
+ return false;
90
+ try {
91
+ process.kill(pid, 0);
92
+ return true;
93
+ }
94
+ catch (error) {
95
+ return error.code === "EPERM";
96
+ }
97
+ }
98
+ //# sourceMappingURL=service-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-registry.js","sourceRoot":"","sources":["../../src/core/service-registry.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { DbPeek } from "../core/db-peek.js";
5
5
  import { ErrorInbox } from "../core/error-inbox.js";
6
6
  import { LogStore } from "../core/log-store.js";
7
7
  import { ProcessManager } from "../core/process-manager.js";
8
+ import { defaultRuntimeRegistryPath, ServiceRegistry, } from "../core/service-registry.js";
8
9
  import { TimelineStore } from "../core/timeline-store.js";
9
10
  import { ToolCallStore } from "../core/tool-call-store.js";
10
11
  import { createUiLifecycleManager, } from "../web/ui-lifecycle.js";
@@ -21,7 +22,13 @@ export function createNoMoreIdeMcpServer(options = {}) {
21
22
  baseDir: logDir,
22
23
  timelineStore,
23
24
  });
24
- const manager = new ProcessManager({ configStore, logStore, timelineStore });
25
+ const registry = new ServiceRegistry(defaultRuntimeRegistryPath(logDir));
26
+ const manager = new ProcessManager({
27
+ configStore,
28
+ logStore,
29
+ timelineStore,
30
+ registry,
31
+ });
25
32
  const errorInbox = new ErrorInbox({ logStore, configStore });
26
33
  const dbPeek = new DbPeek({ configStore });
27
34
  const toolCallStore = new ToolCallStore();
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,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,EACL,wBAAwB,GAEzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAyBxD,MAAM,UAAU,wBAAwB,CACtC,UAA2C,EAAE;IAE7C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,uBAAuB,EAAE,CAAC;IACnE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,IAAI,WAAW,CACjC,UAAU,CACX,CAAC;IACF,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC;QACtC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;KAClC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;QAC5B,OAAO,EAAE,MAAM;QACf,aAAa;KACd,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;IAC7E,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,MAAM,WAAW,GACf,OAAO,CAAC,WAAW;QACnB,wBAAwB,CAAC;YACvB,UAAU;YACV,MAAM;YACN,IAAI,EAAE,OAAO,CAAC,MAAM;YACpB,aAAa;SACd,CAAC,CAAC;IACL,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC;QACzB,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IACH,sBAAsB,CAAC;QACrB,MAAM;QACN,WAAW;QACX,MAAM;QACN,UAAU;QACV,QAAQ;QACR,OAAO;QACP,aAAa;QACb,WAAW;QACX,aAAa;KACd,CAAC,CAAC;IAEH,OAAO;QACL,MAAM;QACN,WAAW;QACX,UAAU;QACV,QAAQ;QACR,OAAO;QACP,WAAW;QACX,aAAa;QACb,SAAS,EAAE,oBAAoB;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAA0C,EAAE;IAE5C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,EAAE,IAAI,wBAAwB,EAAE,CAAC;IACvE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IACxC,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;QACxB,OAA8B,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC;IACpE,CAAC;IACD,IAAI,GAAG,CAAC,iBAAiB,KAAK,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,WAAW,CAAC,aAAa,EAAE,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oCACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,IAAI,CACL,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -42,4 +42,4 @@ https://github.com/highlightjs/highlight.js/issues/2277`),Ft=ue,lt=Ae),Ge===void
42
42
  `).map(ES):s.split(`
43
43
  `).map(r=>{if(!r)return"";try{return wS.highlight(r,{language:t,ignoreIllegals:!0}).value}catch{return ES(r)}})}function ES(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Uj({content:e,path:t}){const s=E.useMemo(()=>Pj(t),[t]),r=E.useMemo(()=>Ij(e,s),[e,s]),o=`${Math.max(2,String(r.length).length)}ch`;return u.jsx("div",{className:"min-w-max font-mono text-[12px] leading-[1.5]",children:r.map((l,d)=>u.jsxs("div",{className:"flex",children:[u.jsx("span",{className:"shrink-0 select-none border-r border-zinc-200 bg-zinc-100 px-2 text-right text-zinc-400",style:{minWidth:`calc(${o} + 1rem)`},children:d+1}),u.jsx("span",{className:"hljs whitespace-pre px-3 text-zinc-800",dangerouslySetInnerHTML:{__html:l||" "}})]},d))})}function Hj({path:e,isModified:t,onViewDiff:s}){const[r,o]=E.useState(null),[l,d]=E.useState(null),[f,m]=E.useState(!1);return E.useEffect(()=>{if(!e){o(null);return}let h=!0;return m(!0),d(null),eT(e).then(_=>{h&&(o(_),m(!1))}).catch(_=>{h&&(d(_ instanceof Error?_.message:String(_)),m(!1))}),()=>{h=!1}},[e]),e?u.jsxs("section",{className:"flex min-h-0 min-w-0 flex-col border-l border-border bg-white",children:[u.jsxs("div",{className:"flex shrink-0 items-center justify-between gap-3 border-b border-border px-3 py-1.5",children:[u.jsxs("div",{className:"min-w-0",children:[u.jsx("h2",{className:"truncate text-[13px] font-semibold tracking-tight",children:e}),u.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-[10px] text-muted-foreground",children:[u.jsx("span",{children:"Read-only view of tracked file."}),r?.truncated?u.jsx("span",{className:"text-amber-700",children:"Truncated — file exceeds 1MB."}):null,r?.binary?u.jsx("span",{className:"text-amber-700",children:"Binary file."}):null]})]}),t?u.jsx(fe,{onClick:s,size:"sm",type:"button",variant:"outline",children:"View diff"}):null]}),u.jsx("div",{className:"min-h-0 flex-1 overflow-auto bg-zinc-50",children:l?u.jsx("div",{className:"p-4",children:u.jsx(ht,{variant:"destructive",children:l})}):f?u.jsx("div",{className:"p-4 text-[12px] text-muted-foreground",children:"Loading…"}):r?.binary?u.jsx("div",{className:"p-4 text-[12px] text-muted-foreground",children:"Cannot display binary content."}):r?u.jsx(Uj,{content:r.content,path:e}):null})]}):u.jsx("div",{className:"p-4",children:u.jsx(ht,{variant:"muted",className:"border-dashed p-12 text-center",children:"Select a file to view its contents."})})}function Fj({activeHunkIndex:e,filePaths:t,hunkCount:s,pendingNextFilePath:r,selectedFile:o}){if(s>0&&e<s-1)return{kind:"hunk",activeHunkIndex:e+1};const l=t.indexOf(o),d=t[l+1];return d?r===d?{kind:"file",filePath:d}:{kind:"confirm-next-file",filePath:d}:{kind:"none"}}function CS(e){const t={name:"",fullPath:"",children:new Map};for(const s of e){const r=s.name.split("/");let o=t;r.forEach((l,d)=>{let f=o.children.get(l);f||(f={name:l,fullPath:r.slice(0,d+1).join("/"),children:new Map},o.children.set(l,f)),o=f}),o.branch=s}return t}function NS({label:e,tree:t,onSelect:s,defaultOpen:r,forceOpen:o}){const[l,d]=E.useState(r??!1),f=o||l,m=t.children.size===0;return u.jsxs("div",{className:"mb-1",children:[u.jsxs("button",{type:"button",onClick:()=>d(h=>!h),className:"flex w-full items-center gap-1 px-2 py-0.5 text-left text-[11px] font-semibold uppercase tracking-wide text-muted-foreground hover:text-foreground",children:[f?u.jsx(Pn,{size:12}):u.jsx(ga,{size:12}),e,m?null:u.jsxs("span",{className:"ml-1 text-[10px] font-normal",children:["(",t.children.size,")"]})]}),f&&!m?u.jsx("ul",{children:Array.from(t.children.values()).map(h=>u.jsx(aC,{node:h,depth:1,onSelect:s,forceOpen:o},h.fullPath))}):null]})}function aC({node:e,depth:t,onSelect:s,forceOpen:r}){const[o,l]=E.useState(!0),d=r||o,f=e.children.size>0,m=e.branch,h={paddingLeft:`${t*10}px`};return!f&&m?u.jsx("li",{children:u.jsxs("button",{type:"button",onClick:()=>s(m),style:h,title:m.name,className:`flex w-full items-center gap-1.5 py-0.5 pr-2 text-left text-[12px] hover:bg-muted/60 ${m.current?"font-semibold text-emerald-700":""}`,children:[u.jsx(Yl,{size:11,className:"shrink-0 opacity-70"}),u.jsx("span",{className:"truncate",children:e.name}),m.current?u.jsx("span",{className:"text-[10px]",children:"●"}):null]})}):u.jsxs("li",{children:[u.jsxs("button",{type:"button",onClick:()=>{m?s(m):l(_=>!_)},style:h,className:"flex w-full items-center gap-1 py-0.5 pr-2 text-left text-[12px] hover:bg-muted/60",children:[f?d?u.jsx(Pn,{size:11}):u.jsx(ga,{size:11}):u.jsx("span",{className:"inline-block w-[11px]"}),u.jsx("span",{className:"truncate",children:e.name})]}),d&&f?u.jsx("ul",{children:Array.from(e.children.values()).map(_=>u.jsx(aC,{node:_,depth:t+1,onSelect:s,forceOpen:r},_.fullPath))}):null]})}function Vj({selectedCommit:e,selectedFile:t,diff:s,diffLoading:r,diffError:o}){return u.jsxs("section",{className:"flex min-h-0 min-w-0 flex-col bg-white border-b border-border",children:[u.jsx("div",{className:"flex shrink-0 items-center justify-between gap-3 border-b border-border px-3 py-1.5",children:u.jsxs("div",{className:"min-w-0",children:[u.jsx("h2",{className:"truncate text-[13px] font-semibold tracking-tight",children:t??(e?e.subject:"Commit")}),e?u.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-[10px] text-muted-foreground",children:[u.jsx("span",{className:"font-mono",children:e.hash.slice(0,12)}),u.jsxs("span",{children:[e.author," <",e.email,">"]}),u.jsx("span",{children:new Date(e.timestamp*1e3).toLocaleString()})]}):null]})}),u.jsx("div",{className:"relative min-h-0 min-w-0 flex-1",children:o?u.jsx("div",{className:"p-4",children:u.jsx(ht,{variant:"destructive",children:o})}):e?r?u.jsx("div",{className:"p-4 text-[12px] text-muted-foreground",children:"Loading diff…"}):s?u.jsx(nC,{activeHunkIndex:0,diff:s}):u.jsx("div",{className:"p-4",children:u.jsx(ht,{variant:"muted",className:"border-dashed p-6 text-center",children:e.parents.length>1?"Merge commit with no conflict resolution — no diff against the first parent.":"No textual changes in this commit."})}):u.jsx("div",{className:"p-4",children:u.jsx(ht,{variant:"muted",className:"border-dashed p-12 text-center",children:"Select a commit to inspect its diff."})})})]})}function $j({files:e,filesError:t,selectedHash:s,selectedFile:r,onSelect:o}){return u.jsxs("aside",{className:"flex min-h-0 flex-col overflow-hidden border-r border-border",children:[u.jsx("div",{className:"flex shrink-0 items-center justify-between gap-2 border-b border-border px-3 py-1.5",children:u.jsxs("h2",{className:"text-[13px] font-semibold tracking-tight",children:["Files",e.length?u.jsx("span",{className:"ml-2 text-[11px] font-normal text-muted-foreground",children:e.length}):null]})}),u.jsx("div",{className:"min-h-0 flex-1 overflow-auto",children:t?u.jsx("div",{className:"p-3",children:u.jsx(ht,{variant:"destructive",children:t})}):s?e.length===0?u.jsx("div",{className:"p-3 text-[12px] text-muted-foreground",children:"No file changes."}):u.jsx("ul",{className:"divide-y divide-border",children:e.map(l=>u.jsx("li",{children:u.jsxs("button",{onClick:()=>o(l.path),type:"button",title:l.path,className:`flex w-full items-center gap-2 px-2 py-1 text-left text-[12px] transition-colors hover:bg-muted/60 ${r===l.path?"bg-muted":""}`,children:[u.jsx("span",{className:qj(l.index),children:l.index.trim()||"·"}),u.jsx("span",{className:"truncate font-mono",children:l.path})]})},l.path))}):u.jsx("div",{className:"p-3 text-[12px] text-muted-foreground",children:"Select a commit to see its files."})})]})}function qj(e){const t="inline-flex h-4 w-4 shrink-0 items-center justify-center rounded text-[10px] font-bold";switch(e.trim().toUpperCase()){case"A":return`${t} bg-emerald-100 text-emerald-800`;case"D":return`${t} bg-red-100 text-red-800`;case"M":return`${t} bg-amber-100 text-amber-800`;case"R":return`${t} bg-blue-100 text-blue-800`;case"C":return`${t} bg-indigo-100 text-indigo-800`;default:return`${t} bg-slate-100 text-slate-700`}}const kS=["#3b82f6","#10b981","#f59e0b","#ec4899","#8b5cf6","#14b8a6","#ef4444","#84cc16"];function Ll(e){return kS[e%kS.length]}function Kj({lane:e,laneCount:t,edges:s,throughLanes:r,isMerge:o,height:l=28,laneWidth:d=14}){const m=Math.max(e+1,t,1)*d,h=l/2,_=jl(e,d),v=o?4:3.5;return u.jsxs("svg",{width:m,height:l,viewBox:`0 0 ${m} ${l}`,style:{flex:"0 0 auto",display:"block"},children:[r.map(b=>u.jsx("line",{x1:jl(b,d),y1:0,x2:jl(b,d),y2:l,stroke:Ll(b),strokeWidth:1.5},`t-${b}`)),u.jsx("line",{x1:_,y1:0,x2:_,y2:h,stroke:Ll(e),strokeWidth:1.5}),s.map((b,y)=>{const x=jl(b.fromLane,d),w=jl(b.toLane,d);if(x===w)return u.jsx("line",{x1:x,y1:h,x2:w,y2:l,stroke:Ll(b.toLane),strokeWidth:1.5},`e-${y}`);const N=h+(l-h)/2;return u.jsx("path",{d:`M ${x} ${h} C ${x} ${N}, ${w} ${N}, ${w} ${l}`,fill:"none",stroke:Ll(b.toLane),strokeWidth:1.5},`e-${y}`)}),u.jsx("circle",{cx:_,cy:h,r:v,fill:Ll(e),stroke:"var(--background, #fff)",strokeWidth:1.5})]})}function jl(e,t){return e*t+t/2}const TS=28;function Gj({commits:e,loading:t,error:s,selectedHash:r,maxLanes:o,rowRefs:l,onSelect:d,onLoadMore:f}){return u.jsxs("aside",{className:"flex min-h-0 flex-col overflow-hidden border-r border-border",children:[u.jsxs("div",{className:"flex shrink-0 items-center justify-between gap-2 border-b border-border px-3 py-1.5",children:[u.jsxs("h2",{className:"text-[13px] font-semibold tracking-tight",children:["Commit tree",e.length?u.jsxs("span",{className:"ml-2 text-[11px] font-normal text-muted-foreground",children:[e.length," commits"]}):null]}),u.jsx(fe,{disabled:t,onClick:f,size:"sm",type:"button",variant:"outline",children:"Load more"})]}),u.jsx("div",{className:"min-h-0 flex-1 overflow-auto",children:s?u.jsx("div",{className:"p-3",children:u.jsx(ht,{variant:"destructive",children:s})}):t&&e.length===0?u.jsx("div",{className:"p-3 text-[12px] text-muted-foreground",children:"Loading commits…"}):e.length===0?u.jsx("div",{className:"p-3 text-[12px] text-muted-foreground",children:"No commits."}):u.jsx("ul",{className:"divide-y divide-border",children:e.map(m=>u.jsx("li",{ref:h=>{h?l.current.set(m.hash,h):l.current.delete(m.hash)},children:u.jsxs("button",{onClick:()=>d(m.hash),type:"button",className:`flex w-full items-center gap-2 px-2 py-0.5 text-left transition-colors hover:bg-muted/60 ${r===m.hash?"bg-muted":""}`,style:{minHeight:TS},title:`${m.hash}
44
44
  ${m.author} <${m.email}>
45
- ${m.subject}`,children:[u.jsx(Kj,{lane:m.lane,laneCount:Math.max(m.laneCount,o),edges:m.edges,throughLanes:m.throughLanes,isMerge:m.parents.length>1,height:TS}),u.jsx("span",{className:"font-mono text-[10px] text-muted-foreground",children:m.hash.slice(0,7)}),u.jsxs("span",{className:"flex min-w-0 flex-1 items-center gap-1.5",children:[m.refs.map(h=>u.jsx("span",{className:Yj(h.kind),children:h.name},`${h.kind}-${h.name}`)),u.jsx("span",{className:"truncate text-[12px]",children:m.subject})]}),u.jsx("span",{className:"shrink-0 text-[10px] text-muted-foreground",children:m.author}),u.jsx("span",{className:"shrink-0 font-mono text-[10px] tabular-nums text-muted-foreground/70",title:new Date(m.timestamp*1e3).toLocaleString(),children:Wj(m.timestamp)})]})},m.hash))})})]})}function Wj(e){if(!e)return"";const t=Math.max(0,Math.floor(Date.now()/1e3-e));if(t<60)return`${t}s`;const s=Math.floor(t/60);if(s<60)return`${s}m`;const r=Math.floor(s/60);if(r<24)return`${r}h`;const o=Math.floor(r/24);if(o<30)return`${o}d`;const l=Math.floor(o/30);return l<12?`${l}mo`:`${Math.floor(l/12)}y`}function Yj(e){const t="rounded px-1.5 py-px text-[10px] font-medium";switch(e){case"head":return`${t} bg-emerald-100 text-emerald-800`;case"branch":return`${t} bg-blue-100 text-blue-800`;case"remote":return`${t} bg-slate-100 text-slate-700`;case"tag":return`${t} bg-amber-100 text-amber-800`}}const MS=200;function Xj(){const[e,t]=E.useState([]),[s,r]=E.useState(MS),[o,l]=E.useState(!0),[d,f]=E.useState(null),[m,h]=E.useState(null),[_,v]=E.useState([]),[b,y]=E.useState(null),[x,w]=E.useState(null),[N,A]=E.useState(""),[R,T]=E.useState(!1),[M,z]=E.useState(null);E.useEffect(()=>{let O=!0;return l(!0),f(null),X5(s).then(K=>{O&&(t(K),K.length>0&&!K.some(H=>H.hash===m)&&h(K[0].hash))}).catch(K=>{O&&f(K instanceof Error?K.message:String(K))}).finally(()=>{O&&l(!1)}),()=>{O=!1}},[s]),E.useEffect(()=>{if(!m){v([]),w(null);return}let O=!0;return y(null),Q5(m).then(K=>{O&&(v(K),w(K[0]?.path??null))}).catch(K=>{O&&y(K instanceof Error?K.message:String(K))}),()=>{O=!1}},[m]),E.useEffect(()=>{if(!m){A("");return}let O=!0;return z(null),T(!0),Z5(m,x??void 0).then(K=>{O&&A(K)}).catch(K=>{O&&z(K instanceof Error?K.message:String(K))}).finally(()=>{O&&T(!1)}),()=>{O=!1}},[m,x]);const U=E.useMemo(()=>e.reduce((O,K)=>Math.max(O,K.laneCount),1),[e]),j=e.find(O=>O.hash===m)??null;return{commits:e,loading:o,error:d,selectedHash:m,setSelectedHash:h,files:_,filesError:b,selectedFile:x,setSelectedFile:w,diff:N,diffLoading:R,diffError:M,maxLanes:U,selectedCommit:j,loadMore:()=>r(O=>O+MS)}}function Zj({branches:e=[]}){const{commits:t,loading:s,error:r,selectedHash:o,setSelectedHash:l,files:d,filesError:f,selectedFile:m,setSelectedFile:h,diff:_,diffLoading:v,diffError:b,maxLanes:y,selectedCommit:x,loadMore:w}=Xj(),[N,A]=E.useState(""),R=E.useMemo(()=>{const O=N.trim().toLowerCase();return O?e.filter(K=>K.name.toLowerCase().includes(O)):e},[e,N]),T=E.useMemo(()=>CS(R.filter(O=>!O.remote)),[R]),M=E.useMemo(()=>CS(R.filter(O=>O.remote)),[R]),z=N.trim().length>0,U=E.useRef(new Map);function j(O){const K=O.remote?"remote":"branch",H=t.find(J=>J.refs.some(I=>I.kind===K&&I.name===O.name));if(!H)return;l(H.hash);const G=U.current.get(H.hash);G&&G.scrollIntoView({block:"center",behavior:"smooth"})}return u.jsxs("div",{className:"grid h-full min-h-0 overflow-hidden border-0 bg-card/85 grid-cols-[220px_minmax(0,1fr)]",children:[u.jsxs("aside",{className:"flex min-h-0 flex-col overflow-hidden border-r border-border",children:[u.jsxs("div",{className:"flex shrink-0 flex-col gap-1 border-b border-border px-3 py-1.5",children:[u.jsx("h2",{className:"text-[13px] font-semibold tracking-tight",children:"Branches"}),u.jsx("input",{type:"search",value:N,onChange:O=>A(O.target.value),placeholder:"Search branches…",className:"w-full rounded border border-border bg-background px-2 py-1 text-[11px] outline-none focus:border-foreground"})]}),u.jsxs("div",{className:"min-h-0 flex-1 overflow-auto py-1",children:[u.jsx(NS,{label:"Local",tree:T,onSelect:j,defaultOpen:!0,forceOpen:z}),u.jsx(NS,{label:"Remote",tree:M,onSelect:j,forceOpen:z})]})]}),u.jsxs("div",{className:"grid min-h-0 min-w-0 grid-rows-[minmax(0,3fr)_minmax(0,2fr)]",children:[u.jsx(Vj,{selectedCommit:x,selectedFile:m,diff:_,diffLoading:v,diffError:b}),u.jsxs("div",{className:"grid min-h-0 min-w-0 grid-cols-[minmax(0,1fr)_280px]",children:[u.jsx(Gj,{commits:t,loading:s,error:r,selectedHash:o,maxLanes:y,rowRefs:U,onSelect:l,onLoadMore:w}),u.jsx($j,{files:d,filesError:f,selectedHash:o,selectedFile:m,onSelect:h})]})]})]})}function Qj({data:e}){const[t,s]=E.useState("changes"),[r,o]=E.useState("changes"),[l,d]=E.useState(e.git.status?.files[0]?.path??""),[f,m]=E.useState(""),[h,_]=E.useState([]),[v,b]=E.useState(null),[y,x]=E.useState(""),[w,N]=E.useState(null),[A,R]=E.useState(0),[T,M]=E.useState(null),z=e.git.status?.files??[],U=E.useMemo(()=>z.map(Z=>Z.path),[z]),j=E.useMemo(()=>H9(y),[y]);E.useEffect(()=>{const Z=e.git.status?.files[0]?.path??"";d(W=>W&&e.git.status?.files.some(D=>D.path===W)?W:Z)},[e.git.status?.files]),E.useEffect(()=>{if(r!=="all"||h.length>0)return;let Z=!0;return b(null),J5().then(W=>{Z&&_(W)}).catch(W=>{Z&&b(W instanceof Error?W.message:String(W))}),()=>{Z=!1}},[r,h.length]),E.useEffect(()=>{if(!l){x("");return}let Z=!0;return N(null),tT(l).then(W=>{Z&&(x(W),R(0),M(null))}).catch(W=>{Z&&N(W instanceof Error?W.message:String(W))}),()=>{Z=!1}},[l]);function O(Z){R(0),M(null),d(Z)}function K(){const Z=Fj({activeHunkIndex:A,filePaths:U,hunkCount:j.hunks,pendingNextFilePath:T,selectedFile:l});Z.kind==="hunk"?(M(null),R(Z.activeHunkIndex)):Z.kind==="confirm-next-file"?M(Z.filePath):Z.kind==="file"?O(Z.filePath):M(null)}function H(){if(M(null),A>0){R(D=>D-1);return}const Z=z.findIndex(D=>D.path===l),W=z[Z-1];W&&O(W.path)}const G=z.findIndex(Z=>Z.path===l),J=!!(j.hunks&&A<j.hunks-1||z[G+1]),I=!!(A>0||z[G-1]),ee=T?`End of file. Click Next again to open ${T}.`:null,q=Z=>`rounded px-2 py-0.5 text-[11px] font-medium transition-colors ${Z?"bg-foreground text-background":"text-muted-foreground hover:text-foreground"}`,k=Z=>`flex-1 px-2 py-0.5 text-[11px] font-medium transition-colors ${Z?"bg-foreground text-background":"text-muted-foreground hover:text-foreground"}`,F=E.useMemo(()=>new Set(z.map(Z=>Z.path)),[z]);function V(){f&&(o("changes"),O(f))}return u.jsxs("div",{className:"flex h-full min-h-0 flex-col overflow-hidden bg-card/85",children:[u.jsxs("div",{className:"flex shrink-0 items-center gap-1 border-b border-border bg-card/95 px-3 py-1",children:[u.jsx("button",{type:"button",className:q(t==="changes"),onClick:()=>s("changes"),children:"Changes"}),u.jsx("button",{type:"button",className:q(t==="graph"),onClick:()=>s("graph"),children:"Tree"})]}),u.jsx("div",{className:"min-h-0 flex-1",children:t==="graph"?u.jsx(Zj,{branches:e.git.branches??[]}):u.jsxs("div",{className:"grid h-full min-h-0 overflow-hidden border-0 bg-card/85 xl:grid-cols-[320px_minmax(0,1fr)]",children:[u.jsxs("aside",{className:"flex min-h-0 flex-col overflow-hidden",children:[u.jsxs("div",{className:"flex shrink-0 gap-0.5 border-b border-border bg-card/95 p-1",children:[u.jsx("button",{className:k(r==="changes"),onClick:()=>o("changes"),type:"button",children:"Changes"}),u.jsx("button",{className:k(r==="all"),onClick:()=>o("all"),type:"button",children:"All files"})]}),r==="changes"?u.jsx(q9,{branch:e.git.status?.branch||void 0,error:e.git.error,files:e.git.status?.files??[],selectedFile:l,onSelectFile:O,root:e.git.cwd}):v?u.jsx(ht,{variant:"destructive",className:"m-3",children:v}):u.jsx(Z9,{branch:e.git.status?.branch||void 0,onSelectFile:m,paths:h,root:e.git.cwd,selectedFile:f,status:e.git.status?.files??[]})]}),r==="all"?u.jsx(Hj,{isModified:F.has(f),onViewDiff:V,path:f}):u.jsxs("section",{className:"flex min-h-0 min-w-0 flex-col border-l border-border bg-white",children:[u.jsxs("div",{className:"flex shrink-0 items-center justify-between gap-3 border-b border-border px-3 py-1.5",children:[u.jsxs("div",{className:"min-w-0",children:[u.jsx("h2",{className:"truncate text-[13px] font-semibold tracking-tight",children:l||"Diff"}),u.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-[10px] text-muted-foreground",children:[u.jsx("span",{children:"Long rows wrap inside the editor pane."}),j.additions||j.deletions?u.jsxs("span",{className:"flex items-center gap-1 font-mono",children:[u.jsxs("span",{className:"text-emerald-700",children:["+",j.additions]}),u.jsxs("span",{className:"text-red-700",children:["-",j.deletions]})]}):null]})]}),u.jsxs("div",{className:"flex shrink-0 items-center gap-1.5",children:[ee?u.jsx("span",{className:"max-w-72 truncate rounded border border-amber-200 bg-amber-50 px-2 py-1 text-[11px] text-amber-900",children:ee}):null,u.jsxs(fe,{disabled:!l||!I,onClick:H,size:"sm",type:"button",variant:"outline",children:[u.jsx(TN,{}),"Previous"]}),u.jsxs(fe,{disabled:!l||!J,onClick:K,size:"sm",type:"button",variant:"outline",children:[u.jsx(NN,{}),"Next"]})]})]}),u.jsx("div",{className:"relative min-h-0 min-w-0 flex-1",children:w?u.jsx("div",{className:"p-4",children:u.jsx(ht,{variant:"destructive",children:w})}):l?u.jsx(nC,{activeHunkIndex:A,diff:y||"No unstaged diff for this file."}):u.jsx("div",{className:"p-4",children:u.jsx(ht,{variant:"muted",className:"border-dashed p-12 text-center",children:"Select a changed file to inspect its diff."})})})]})]})})]})}function Jj({initialPath:e,onSelect:t,selectedPath:s}){const[r,o]=E.useState(e),[l,d]=E.useState(null),[f,m]=E.useState(null),[h,_]=E.useState(!1),v=eB(l);return E.useEffect(()=>{o(e)},[e]),E.useEffect(()=>{let b=!0;return _(!0),m(null),ZS(r).then(y=>{b&&(d(y),t(y.path))}).catch(y=>{b&&m(y instanceof Error?y.message:String(y))}).finally(()=>{b&&_(!1)}),()=>{b=!1}},[r,t]),u.jsxs("div",{className:"rounded-md border border-border bg-background",children:[u.jsxs("div",{className:"flex items-center gap-2 border-b border-border p-2",children:[v?u.jsx(fe,{"aria-label":"Open parent folder",onClick:()=>l&&o(l.parent),size:"icon",type:"button",variant:"ghost",children:u.jsx(Pn,{className:"rotate-90"})}):null,u.jsx("div",{className:"min-w-0 flex-1 truncate font-mono text-xs text-muted-foreground",children:l?.path??r}),h?u.jsx(Zs,{className:"size-4 animate-spin text-muted-foreground"}):null]}),u.jsxs("div",{className:"max-h-56 overflow-auto p-1",children:[f?u.jsx(ht,{variant:"destructive",className:"m-1",children:f}):null,!f&&l?.entries.length===0?u.jsx(ht,{variant:"muted",className:"m-1 text-center",children:"No folders here."}):null,l?.entries.map(b=>u.jsxs(fe,{className:pe("h-8 w-full justify-start rounded-sm px-2 text-left",s===b.path&&"bg-muted"),onClick:()=>o(b.path),title:b.path,type:"button",variant:"ghost",children:[u.jsx(_a,{className:"text-accent"}),u.jsx("span",{className:"truncate",children:b.name})]},b.path))]})]})}function eB(e){return!!(e&&e.parent!==e.path)}function AS(e){return e.split(/[\\/]/).filter(Boolean).pop()??"project"}function tB({data:e,onRefresh:t}){const[s,r]=E.useState(!1),[o,l]=E.useState(e.git.cwd),[d,f]=E.useState(null),[m,h]=E.useState(!1),[_,v]=E.useState(e.git.cwd),b=E.useRef(null),y=e.git.selectedRepository,x=y?.name??AS(e.git.cwd),{error:w,success:N}=ls(),A=sB({gitCwd:e.git.cwd});E.useEffect(()=>{l(e.git.cwd),v(e.git.cwd)},[e.git.cwd]),E.useEffect(()=>{if(!s)return;function j(O){b.current&&O.target instanceof Node&&!b.current.contains(O.target)&&r(!1)}return document.addEventListener("mousedown",j),()=>document.removeEventListener("mousedown",j)},[s]);async function R(j){try{await Gi("/api/git/select",{name:j}),r(!1),await t(),N(`Switched to ${j}.`)}catch(O){w(O instanceof Error?O.message:String(O))}}async function T(j){const O=j.trim();if(!iB(O)){const K="Please add an absolute path. Paths beginning with ~ are not expanded here.";return f(K),w(K),!1}try{const K=AS(O);return await Gi("/api/git/repositories",{name:K,path:O}),f(null),await t(),N(`Added Git project ${K}.`),!0}catch(K){const H=K instanceof Error?K.message:String(K);return f(H),w(H),!1}}async function M(j){try{await iT(j),await t(),N(`Removed Git project ${j}.`)}catch(O){w(O instanceof Error?O.message:String(O))}}async function z(j){j.preventDefault(),await T(o)&&r(!1)}function U(){f(null),v(A.selectedPath),h(!0)}return u.jsxs("div",{className:"relative z-50 flex items-center gap-2",ref:b,children:[u.jsxs(fe,{className:"max-w-[220px] justify-start gap-2 rounded-md border-border bg-card",onClick:()=>r(j=>!j),size:"sm",type:"button",variant:"outline",children:[u.jsx(_a,{className:"text-muted-foreground"}),u.jsx("span",{className:"truncate",children:x}),u.jsx(Pn,{className:pe("ml-auto transition-transform",s&&"rotate-180")})]}),u.jsx(fe,{"aria-label":"Add Git project",onClick:U,size:"sm",type:"button",variant:"outline",children:u.jsx(Es,{})}),s?u.jsxs("div",{className:"absolute right-0 top-10 z-50 w-[min(380px,calc(100vw-2rem))] overflow-hidden rounded-lg border border-border bg-card shadow-lg",children:[u.jsxs("div",{className:"flex items-center gap-2 border-b border-border px-3 py-2",children:[u.jsx(ZN,{className:"size-3.5 text-muted-foreground"}),u.jsx("div",{className:"text-xs font-semibold",children:"Git Projects"}),u.jsx(Ve,{className:"ml-auto h-5 px-1.5 text-[10px]",variant:"outline",children:e.config.gitRepositories.length})]}),u.jsx("div",{className:"max-h-72 overflow-auto",children:e.config.gitRepositories.length?u.jsx("div",{className:"divide-y divide-border",children:e.config.gitRepositories.map(j=>{const O=j.name===y?.name;return u.jsxs("div",{className:pe("group grid w-full grid-cols-[1fr_auto_auto] items-center gap-2 px-3 py-1.5 text-left transition-colors hover:bg-muted",O&&"bg-muted/70"),children:[u.jsxs("button",{className:"min-w-0 text-left",onClick:()=>{R(j.name)},type:"button",children:[u.jsx("span",{className:"block truncate text-sm font-medium leading-tight",children:j.name}),u.jsx("span",{className:"block truncate font-mono text-[10px] leading-tight text-muted-foreground",children:j.path})]}),O?u.jsx(ac,{className:"size-3.5"}):u.jsx("span",{className:"size-3.5"}),u.jsx(fe,{"aria-label":`Remove ${j.name}`,className:"size-6 opacity-0 transition-opacity group-hover:opacity-100",onClick:()=>{M(j.name)},size:"icon",title:`Remove ${j.name}`,type:"button",variant:"ghost",children:u.jsx(lc,{className:"size-3.5 text-destructive"})})]},j.name)})}):u.jsx("div",{className:"px-3 py-6 text-center text-xs text-muted-foreground",children:"No saved Git projects yet."})}),u.jsxs("div",{className:"border-t border-border bg-muted/20 p-2",children:[u.jsxs("form",{className:"flex gap-1.5",onSubmit:z,children:[u.jsx(bt,{"aria-label":"Paste absolute path",className:"h-7 flex-1 px-2 font-mono text-[11px]",onChange:j=>{l(j.target.value),f(null)},placeholder:"/absolute/path",value:o}),u.jsxs(fe,{className:"h-7 px-2 text-[11px]",size:"sm",type:"submit",children:[u.jsx(Es,{className:"size-3"}),"Add"]}),u.jsx(fe,{"aria-label":"Browse and add Git project",className:"h-7 px-2",onClick:U,size:"sm",type:"button",variant:"outline",children:u.jsx(hk,{className:"size-3"})})]}),d?u.jsx("div",{className:"mt-1.5 truncate text-[10px] text-destructive",children:d}):null]})]}):null,m?u.jsx(nB,{confirmLabel:A.confirmLabel,errorMessage:d,initialPath:A.initialPath,selectedPath:_,title:"Add Git Project",onCancel:()=>h(!1),onSelect:v,onUse:async()=>{await T(_)&&(h(!1),r(!1))}}):null]})}function iB(e){return e.startsWith("/")}function sB({gitCwd:e}){return{confirmLabel:"Add Git project",initialPath:e,selectedPath:e}}function nB({confirmLabel:e="Use this folder",errorMessage:t,initialPath:s,onCancel:r,onSelect:o,onUse:l,selectedPath:d,title:f="Choose Git Project Folder"}){return s0.createPortal(u.jsx("div",{className:"fixed inset-0 z-[1000] grid place-items-center bg-black/35 px-4",children:u.jsxs("div",{className:"w-full max-w-2xl rounded-xl border border-border bg-card p-4 shadow-xl",children:[u.jsxs("div",{className:"mb-3 flex items-center gap-3",children:[u.jsx("div",{className:"flex size-8 items-center justify-center rounded-lg border border-border bg-background",children:u.jsx(_a,{className:"size-4"})}),u.jsxs("div",{className:"min-w-0 flex-1",children:[u.jsx("div",{className:"text-sm font-semibold",children:f}),u.jsx("div",{className:"truncate font-mono text-xs text-muted-foreground",children:d})]}),u.jsx(fe,{"aria-label":"Close folder picker",onClick:r,size:"icon",variant:"ghost",children:u.jsx(rn,{})})]}),u.jsx(Jj,{initialPath:s,onSelect:o,selectedPath:d}),t?u.jsx("div",{className:"mt-3 rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive",children:t}):null,u.jsxs("div",{className:"mt-4 flex justify-end gap-2",children:[u.jsx(fe,{onClick:r,type:"button",variant:"outline",children:"Cancel"}),u.jsx(fe,{onClick:()=>{l()},type:"button",children:e})]})]})}),document.body)}function rB({branches:e,currentBranch:t,disabled:s,onRefresh:r}){const[o,l]=E.useState(!1),[d,f]=E.useState(""),[m,h]=E.useState(null),[_,v]=E.useState(null),[b,y]=E.useState(null),x=e.filter(M=>!M.remote),w=e.filter(M=>M.remote);async function N(M,z){h(M),y(null),v(null);try{await z(),await r()}catch(U){y(U instanceof Error?U.message:String(U))}finally{h(null)}}async function A(M){await N(`switch:${M}`,async()=>{await Gi("/api/git/branches/switch",{name:M}),l(!1)})}async function R(){await N("fetch",async()=>{await Gi("/api/git/fetch",{}),v("Fetched latest branch refs.")})}async function T(M){M.preventDefault();const z=d.trim();if(!z){y("Branch name is required.");return}await N("create",async()=>{await Gi("/api/git/branches",{name:z}),f(""),l(!1)})}return u.jsxs("div",{className:"fixed bottom-12 right-4 z-50 flex items-end",children:[o?u.jsxs("div",{"aria-label":"Switch Git branch",className:"mb-11 w-[min(460px,calc(100vw-2rem))] rounded-lg border border-border bg-card shadow-xl",role:"dialog",children:[u.jsxs("div",{className:"flex items-center justify-between gap-3 border-b border-border p-3",children:[u.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[u.jsx(Yl,{className:"size-4 text-muted-foreground"}),u.jsx("span",{className:"truncate text-sm font-semibold",children:t||"Branches"})]}),u.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[u.jsx(fe,{"aria-label":"Fetch branches",disabled:s||m!==null,onClick:()=>{R()},size:"icon",title:"Fetch branches",type:"button",variant:"ghost",children:u.jsx(VS,{className:pe(m==="fetch"&&"animate-spin")})}),u.jsx(fe,{"aria-label":"Close branch dialog",onClick:()=>l(!1),size:"icon",type:"button",variant:"ghost",children:u.jsx(rn,{})})]})]}),u.jsx("div",{className:"max-h-72 overflow-auto",children:e.length?u.jsxs(u.Fragment,{children:[u.jsx(RS,{branches:x,busy:m!==null,disabled:s,label:"Local",onSwitch:A}),u.jsx(RS,{branches:w,busy:m!==null,disabled:s,label:"Remote",onSwitch:A})]}):u.jsx("div",{className:"px-3 py-6 text-center text-sm text-muted-foreground",children:"No branches found."})}),u.jsxs("div",{className:"border-t border-border p-3",children:[u.jsxs("form",{className:"grid gap-2 sm:grid-cols-[1fr_auto]",onSubmit:T,children:[u.jsx(bt,{"aria-label":"New branch name",disabled:s||m!==null,onChange:M=>{f(M.target.value),y(null),v(null)},placeholder:"feature/new-work",value:d}),u.jsxs(fe,{disabled:s||m!==null,type:"submit",children:[u.jsx(bk,{}),"Create"]})]}),b||_?u.jsx(ht,{className:"mt-3 px-3 py-2 text-xs",variant:b?"destructive":"muted",children:b??_}):null]})]}):null,u.jsxs(fe,{className:"h-8 max-w-[260px] gap-2 rounded-md shadow-lg",disabled:s,onClick:()=>l(M=>!M),size:"sm",title:"Switch Git branch",type:"button",variant:"default",children:[u.jsx(Yl,{className:"size-4"}),u.jsx("span",{className:"truncate font-mono text-xs",children:t||"No branch"}),u.jsx(Pn,{className:pe("size-4 transition-transform",o&&"rotate-180")})]})]})}function RS({branches:e,busy:t,disabled:s,label:r,onSwitch:o}){return u.jsxs("section",{children:[u.jsx("div",{className:"border-b border-border bg-muted/60 px-3 py-1.5 text-[11px] font-semibold uppercase text-muted-foreground",children:r}),e.length?e.map(l=>u.jsxs("button",{className:pe("grid w-full grid-cols-[1fr_auto] items-center gap-2 border-b border-border px-3 py-2 text-left text-sm last:border-b-0 hover:bg-muted",l.current&&"bg-muted/70"),disabled:s||t||l.current,onClick:()=>{o(l.name)},type:"button",children:[u.jsxs("span",{className:"min-w-0",children:[u.jsx("span",{className:"block truncate font-medium",children:l.name}),l.upstream?u.jsxs("span",{className:"block truncate font-mono text-[11px] text-muted-foreground",children:["tracks ",l.upstream]}):null]}),u.jsx(Ve,{variant:l.current?"success":l.remote?"outline":"secondary",children:l.current?"current":l.remote?"remote":"local"})]},`${l.remote?"remote":"local"}:${l.name}`)):u.jsxs("div",{className:"border-b border-border px-3 py-3 text-sm text-muted-foreground",children:["No ",r.toLowerCase()," branches."]})]})}function aB(e=!1){return pe("group/sidebar hidden h-full shrink-0 overflow-x-hidden overflow-y-auto border-r border-border bg-card/85 py-5 backdrop-blur transition-[width,padding] duration-200 md:flex md:flex-col",e?"w-64 px-4":"w-16 px-2 hover:w-64 hover:px-4")}function oB(e,t=!1){return pe("relative grid h-12 grid-cols-[48px_minmax(0,1fr)] items-center justify-start gap-0 overflow-hidden rounded-md px-0 text-[15px] font-medium transition-[background-color,color,width] duration-150",t?"w-full":"w-12 group-hover/sidebar:w-full",e?"bg-primary text-primary-foreground hover:bg-primary/90":"hover:bg-muted")}function lB(e=!1,t=!1){return pe("min-w-0 overflow-hidden text-left text-current transition duration-150 whitespace-pre",e?"translate-x-1 opacity-100":"opacity-0 group-hover/sidebar:translate-x-1 group-hover/sidebar:opacity-100",t?"pr-10":"pr-3")}function cB(e=!1){return pe("flex size-12 items-center justify-center text-current transition-transform duration-150 [&_svg]:size-5",e?"translate-x-0":"-translate-x-px group-hover/sidebar:translate-x-0")}function uB({docked:e,onToggleDock:t}){return u.jsxs("div",{className:pe("mt-auto flex h-10 min-w-0 items-center overflow-hidden border-t border-border/60 text-[11px] text-muted-foreground transition-[height,opacity,width] duration-150",e?"w-full justify-start opacity-100":"w-12 justify-center group-hover/sidebar:w-full group-hover/sidebar:justify-start group-hover/sidebar:opacity-100"),children:[u.jsxs("span",{className:pe("flex min-w-0 items-center gap-1.5 overflow-hidden whitespace-pre transition-[opacity,width] duration-150",e?"flex-1 opacity-100":"w-0 flex-none opacity-0 group-hover/sidebar:w-auto group-hover/sidebar:flex-1 group-hover/sidebar:opacity-100"),children:[u.jsx("span",{children:"Made with"}),u.jsx(xk,{"aria-label":"love",className:"size-3 shrink-0 fill-red-500 text-red-500"}),u.jsx("span",{children:"by Robert Wang"}),u.jsx("a",{"aria-label":"Robert Wang on LinkedIn",className:"shrink-0 rounded p-0.5 text-muted-foreground transition-colors hover:bg-muted hover:text-[#0A66C2]",href:"https://www.linkedin.com/in/robert-wang-cs/",rel:"noopener noreferrer",target:"_blank",title:"LinkedIn",children:u.jsx("svg",{"aria-hidden":!0,className:"size-3 fill-current",role:"img",viewBox:"0 0 24 24",children:u.jsx("path",{d:"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.063 2.063 0 1 1 0-4.126 2.063 2.063 0 0 1 0 4.126zM7.119 20.452H3.554V9h3.565v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.225 0z"})})})]}),u.jsx("button",{"aria-label":e?"Undock sidebar":"Dock sidebar","aria-pressed":e,className:pe("flex size-8 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground [&_svg]:size-4",e?"ml-auto bg-muted text-foreground":"group-hover/sidebar:ml-auto"),onClick:t,title:e?"Undock sidebar":"Dock sidebar",type:"button",children:e?u.jsx(Vk,{}):u.jsx(qk,{})})]})}function dB({className:e}){return u.jsxs("div",{className:pe("min-w-0",e),children:[u.jsxs("div",{className:"flex items-baseline gap-1.5",children:[u.jsx("div",{className:"text-sm font-semibold",children:"NoMoreIDE"}),u.jsxs("div",{className:"font-mono text-[10px] text-muted-foreground",children:["v","0.1.32"]})]}),u.jsx("div",{className:"font-mono text-[11px] text-muted-foreground",children:"127.0.0.1 console"})]})}function hB(){const[e,t]=E.useState(()=>window.location.pathname.startsWith("/agent")?"agent":window.location.pathname.startsWith("/errors")?"errors":window.location.pathname.startsWith("/database")?"database":window.location.pathname.startsWith("/terminal")?"terminal":window.location.pathname.startsWith("/git")?"git":"services"),[s,r]=E.useState(null),[o,l]=E.useState(null),[d,f]=E.useState(!0),{error:m,success:h}=ls(),[_,v]=E.useState(()=>window.localStorage.getItem("nomoreide:sidebar-docked")==="true"),b=E.useCallback(async(x={})=>{x.silent||f(!0),l(null);try{r(await rT()),x.notify&&h("Dashboard refreshed.")}catch(w){const N=w instanceof Error?w.message:String(w);l(N),m(N)}finally{f(!1)}},[m,h]);E.useEffect(()=>{b()},[b]),E.useEffect(()=>{function x(){document.visibilityState==="visible"&&b({silent:!0})}const w=window.setInterval(x,5e3);return window.addEventListener("focus",x),document.addEventListener("visibilitychange",x),()=>{window.clearInterval(w),window.removeEventListener("focus",x),document.removeEventListener("visibilitychange",x)}},[e,b]),E.useEffect(()=>{const x=e==="git"?"/git":e==="agent"?"/agent":e==="errors"?"/errors":e==="database"?"/database":e==="terminal"?"/terminal":"/";window.location.pathname!==x&&window.history.pushState(null,"",x)},[e]),E.useEffect(()=>{window.localStorage.setItem("nomoreide:sidebar-docked",String(_))},[_]);const y=E.useMemo(()=>s?Object.values(s.runtime.services).filter(x=>x.state==="running").length:0,[s]);return u.jsxs("div",{className:"h-screen overflow-hidden pb-9",children:[u.jsxs("div",{className:"mx-auto flex h-full max-w-[1500px]",children:[u.jsxs("aside",{className:aB(_),children:[u.jsxs("div",{className:pe("grid h-12 grid-cols-[48px_minmax(0,1fr)] items-center overflow-hidden transition-[width] duration-150",_?"w-full":"w-12 group-hover/sidebar:w-full"),children:[u.jsx("div",{className:"flex size-12 items-center justify-center",children:u.jsx("div",{className:"flex size-9 items-center justify-center overflow-hidden rounded-md bg-primary",children:u.jsx("img",{alt:"NoMoreIDE",className:"size-full object-cover",src:O5})})}),u.jsx(dB,{className:pe("min-w-0 translate-x-1 overflow-hidden transition-opacity duration-200",_?"opacity-100":"opacity-0 group-hover/sidebar:opacity-100")})]}),u.jsxs("nav",{className:"mt-5 grid flex-1 content-start gap-1",children:[u.jsx(co,{active:e==="services",badge:y,docked:_,icon:u.jsx(d5,{}),label:"Services",onClick:()=>t("services")}),u.jsx(co,{active:e==="git",docked:_,icon:u.jsx(Yl,{}),label:"Git Review",onClick:()=>t("git")}),u.jsx(co,{active:e==="errors",docked:_,icon:u.jsx(fp,{}),label:"Error Inbox",onClick:()=>t("errors")}),u.jsx(co,{active:e==="database",docked:_,icon:u.jsx(oc,{}),label:"Database",onClick:()=>t("database")}),u.jsx(co,{active:e==="terminal",docked:_,icon:u.jsx(v5,{}),label:"Terminal",onClick:()=>t("terminal")}),u.jsx(co,{active:e==="agent",docked:_,icon:u.jsx(Wl,{}),label:"Agent",onClick:()=>t("agent")})]}),u.jsx(uB,{docked:_,onToggleDock:()=>v(x=>!x)})]}),u.jsxs("main",{className:"flex h-full min-w-0 flex-1 flex-col px-0 py-0",children:[u.jsxs("header",{className:pe("relative z-40 flex shrink-0 flex-wrap items-center justify-between gap-3 border border-border bg-card/90 px-4 py-3 backdrop-blur","border-x-0 border-t-0 border-b"),children:[u.jsxs("div",{className:"flex items-center gap-3",children:[u.jsx(Gk,{className:"size-4 text-muted-foreground md:hidden"}),u.jsxs("div",{children:[u.jsx("h1",{className:"text-lg font-semibold tracking-tight",children:e==="git"?"Git Review":e==="agent"?"Agent":e==="errors"?"Error Inbox":e==="database"?"Database":e==="terminal"?"Terminal":"Services"}),u.jsx("p",{className:"font-mono text-xs text-muted-foreground",children:s?.git.selectedRepository?.name??s?.git.cwd??"Local workspace"})]})]}),u.jsxs("div",{className:"flex items-center gap-2",children:[o?u.jsx(Ve,{variant:"danger",children:o}):null,s&&e==="git"?u.jsx(tB,{data:s,onRefresh:b}):null,u.jsxs(fe,{onClick:()=>{b({notify:!0})},size:"sm",title:"Refresh dashboard",variant:"outline",children:[u.jsx(VS,{className:pe(d&&"animate-spin")}),"Refresh"]})]})]}),d&&!s?u.jsx(ht,{variant:"muted",children:"Loading NoMoreIDE state..."}):null,u.jsxs("div",{className:"min-h-0 flex-1 overflow-hidden",children:[s&&e==="services"?u.jsx(x7,{data:s,onRefresh:b}):null,s&&e==="git"?u.jsx(Qj,{data:s}):null,e==="agent"?u.jsx(b8,{}):null,e==="errors"?u.jsx(oD,{}):null,e==="database"?u.jsx(iD,{}):null,e==="terminal"?u.jsx(I9,{}):null]})]})]}),s&&e==="git"?u.jsx(rB,{branches:s.git.branches,currentBranch:s.git.status?.branch||void 0,disabled:!s.git.status,onRefresh:b}):null,u.jsx(B8,{onOpenAgentPage:e==="agent"?void 0:()=>t("agent")})]})}function co({active:e,badge:t,docked:s,icon:r,label:o,onClick:l}){return u.jsxs(fe,{"aria-label":o,title:o,className:oB(e,s),variant:"ghost",onClick:l,type:"button",children:[u.jsx("span",{className:cB(s),children:r}),u.jsx("span",{className:lB(s,t!==void 0),children:o}),t!==void 0?u.jsx(Ve,{appearance:t>0?"solid":"outline",className:pe("min-w-6 justify-center px-1.5 font-mono shadow-none",e?"border-primary-foreground/40 bg-primary-foreground/15 text-primary-foreground":t>0?"":"border-border bg-background text-muted-foreground","absolute right-1.5 top-1.5 h-4 min-w-4 rounded-full px-1 text-[10px] leading-none shadow-none group-hover/sidebar:right-2 group-hover/sidebar:top-1/2 group-hover/sidebar:-translate-y-1/2 group-hover/sidebar:text-xs",s&&"right-2 top-1/2 -translate-y-1/2 text-xs"),size:"small",variant:t>0?"success":"outline",children:t}):null]})}OS.createRoot(document.getElementById("root")).render(u.jsx(E.StrictMode,{children:u.jsx(hB,{})}));
45
+ ${m.subject}`,children:[u.jsx(Kj,{lane:m.lane,laneCount:Math.max(m.laneCount,o),edges:m.edges,throughLanes:m.throughLanes,isMerge:m.parents.length>1,height:TS}),u.jsx("span",{className:"font-mono text-[10px] text-muted-foreground",children:m.hash.slice(0,7)}),u.jsxs("span",{className:"flex min-w-0 flex-1 items-center gap-1.5",children:[m.refs.map(h=>u.jsx("span",{className:Yj(h.kind),children:h.name},`${h.kind}-${h.name}`)),u.jsx("span",{className:"truncate text-[12px]",children:m.subject})]}),u.jsx("span",{className:"shrink-0 text-[10px] text-muted-foreground",children:m.author}),u.jsx("span",{className:"shrink-0 font-mono text-[10px] tabular-nums text-muted-foreground/70",title:new Date(m.timestamp*1e3).toLocaleString(),children:Wj(m.timestamp)})]})},m.hash))})})]})}function Wj(e){if(!e)return"";const t=Math.max(0,Math.floor(Date.now()/1e3-e));if(t<60)return`${t}s`;const s=Math.floor(t/60);if(s<60)return`${s}m`;const r=Math.floor(s/60);if(r<24)return`${r}h`;const o=Math.floor(r/24);if(o<30)return`${o}d`;const l=Math.floor(o/30);return l<12?`${l}mo`:`${Math.floor(l/12)}y`}function Yj(e){const t="rounded px-1.5 py-px text-[10px] font-medium";switch(e){case"head":return`${t} bg-emerald-100 text-emerald-800`;case"branch":return`${t} bg-blue-100 text-blue-800`;case"remote":return`${t} bg-slate-100 text-slate-700`;case"tag":return`${t} bg-amber-100 text-amber-800`}}const MS=200;function Xj(){const[e,t]=E.useState([]),[s,r]=E.useState(MS),[o,l]=E.useState(!0),[d,f]=E.useState(null),[m,h]=E.useState(null),[_,v]=E.useState([]),[b,y]=E.useState(null),[x,w]=E.useState(null),[N,A]=E.useState(""),[R,T]=E.useState(!1),[M,z]=E.useState(null);E.useEffect(()=>{let O=!0;return l(!0),f(null),X5(s).then(K=>{O&&(t(K),K.length>0&&!K.some(H=>H.hash===m)&&h(K[0].hash))}).catch(K=>{O&&f(K instanceof Error?K.message:String(K))}).finally(()=>{O&&l(!1)}),()=>{O=!1}},[s]),E.useEffect(()=>{if(!m){v([]),w(null);return}let O=!0;return y(null),Q5(m).then(K=>{O&&(v(K),w(K[0]?.path??null))}).catch(K=>{O&&y(K instanceof Error?K.message:String(K))}),()=>{O=!1}},[m]),E.useEffect(()=>{if(!m){A("");return}let O=!0;return z(null),T(!0),Z5(m,x??void 0).then(K=>{O&&A(K)}).catch(K=>{O&&z(K instanceof Error?K.message:String(K))}).finally(()=>{O&&T(!1)}),()=>{O=!1}},[m,x]);const U=E.useMemo(()=>e.reduce((O,K)=>Math.max(O,K.laneCount),1),[e]),j=e.find(O=>O.hash===m)??null;return{commits:e,loading:o,error:d,selectedHash:m,setSelectedHash:h,files:_,filesError:b,selectedFile:x,setSelectedFile:w,diff:N,diffLoading:R,diffError:M,maxLanes:U,selectedCommit:j,loadMore:()=>r(O=>O+MS)}}function Zj({branches:e=[]}){const{commits:t,loading:s,error:r,selectedHash:o,setSelectedHash:l,files:d,filesError:f,selectedFile:m,setSelectedFile:h,diff:_,diffLoading:v,diffError:b,maxLanes:y,selectedCommit:x,loadMore:w}=Xj(),[N,A]=E.useState(""),R=E.useMemo(()=>{const O=N.trim().toLowerCase();return O?e.filter(K=>K.name.toLowerCase().includes(O)):e},[e,N]),T=E.useMemo(()=>CS(R.filter(O=>!O.remote)),[R]),M=E.useMemo(()=>CS(R.filter(O=>O.remote)),[R]),z=N.trim().length>0,U=E.useRef(new Map);function j(O){const K=O.remote?"remote":"branch",H=t.find(J=>J.refs.some(I=>I.kind===K&&I.name===O.name));if(!H)return;l(H.hash);const G=U.current.get(H.hash);G&&G.scrollIntoView({block:"center",behavior:"smooth"})}return u.jsxs("div",{className:"grid h-full min-h-0 overflow-hidden border-0 bg-card/85 grid-cols-[220px_minmax(0,1fr)]",children:[u.jsxs("aside",{className:"flex min-h-0 flex-col overflow-hidden border-r border-border",children:[u.jsxs("div",{className:"flex shrink-0 flex-col gap-1 border-b border-border px-3 py-1.5",children:[u.jsx("h2",{className:"text-[13px] font-semibold tracking-tight",children:"Branches"}),u.jsx("input",{type:"search",value:N,onChange:O=>A(O.target.value),placeholder:"Search branches…",className:"w-full rounded border border-border bg-background px-2 py-1 text-[11px] outline-none focus:border-foreground"})]}),u.jsxs("div",{className:"min-h-0 flex-1 overflow-auto py-1",children:[u.jsx(NS,{label:"Local",tree:T,onSelect:j,defaultOpen:!0,forceOpen:z}),u.jsx(NS,{label:"Remote",tree:M,onSelect:j,forceOpen:z})]})]}),u.jsxs("div",{className:"grid min-h-0 min-w-0 grid-rows-[minmax(0,3fr)_minmax(0,2fr)]",children:[u.jsx(Vj,{selectedCommit:x,selectedFile:m,diff:_,diffLoading:v,diffError:b}),u.jsxs("div",{className:"grid min-h-0 min-w-0 grid-cols-[minmax(0,1fr)_280px]",children:[u.jsx(Gj,{commits:t,loading:s,error:r,selectedHash:o,maxLanes:y,rowRefs:U,onSelect:l,onLoadMore:w}),u.jsx($j,{files:d,filesError:f,selectedHash:o,selectedFile:m,onSelect:h})]})]})]})}function Qj({data:e}){const[t,s]=E.useState("changes"),[r,o]=E.useState("changes"),[l,d]=E.useState(e.git.status?.files[0]?.path??""),[f,m]=E.useState(""),[h,_]=E.useState([]),[v,b]=E.useState(null),[y,x]=E.useState(""),[w,N]=E.useState(null),[A,R]=E.useState(0),[T,M]=E.useState(null),z=e.git.status?.files??[],U=E.useMemo(()=>z.map(Z=>Z.path),[z]),j=E.useMemo(()=>H9(y),[y]);E.useEffect(()=>{const Z=e.git.status?.files[0]?.path??"";d(W=>W&&e.git.status?.files.some(D=>D.path===W)?W:Z)},[e.git.status?.files]),E.useEffect(()=>{if(r!=="all"||h.length>0)return;let Z=!0;return b(null),J5().then(W=>{Z&&_(W)}).catch(W=>{Z&&b(W instanceof Error?W.message:String(W))}),()=>{Z=!1}},[r,h.length]),E.useEffect(()=>{if(!l){x("");return}let Z=!0;return N(null),tT(l).then(W=>{Z&&(x(W),R(0),M(null))}).catch(W=>{Z&&N(W instanceof Error?W.message:String(W))}),()=>{Z=!1}},[l]);function O(Z){R(0),M(null),d(Z)}function K(){const Z=Fj({activeHunkIndex:A,filePaths:U,hunkCount:j.hunks,pendingNextFilePath:T,selectedFile:l});Z.kind==="hunk"?(M(null),R(Z.activeHunkIndex)):Z.kind==="confirm-next-file"?M(Z.filePath):Z.kind==="file"?O(Z.filePath):M(null)}function H(){if(M(null),A>0){R(D=>D-1);return}const Z=z.findIndex(D=>D.path===l),W=z[Z-1];W&&O(W.path)}const G=z.findIndex(Z=>Z.path===l),J=!!(j.hunks&&A<j.hunks-1||z[G+1]),I=!!(A>0||z[G-1]),ee=T?`End of file. Click Next again to open ${T}.`:null,q=Z=>`rounded px-2 py-0.5 text-[11px] font-medium transition-colors ${Z?"bg-foreground text-background":"text-muted-foreground hover:text-foreground"}`,k=Z=>`flex-1 px-2 py-0.5 text-[11px] font-medium transition-colors ${Z?"bg-foreground text-background":"text-muted-foreground hover:text-foreground"}`,F=E.useMemo(()=>new Set(z.map(Z=>Z.path)),[z]);function V(){f&&(o("changes"),O(f))}return u.jsxs("div",{className:"flex h-full min-h-0 flex-col overflow-hidden bg-card/85",children:[u.jsxs("div",{className:"flex shrink-0 items-center gap-1 border-b border-border bg-card/95 px-3 py-1",children:[u.jsx("button",{type:"button",className:q(t==="changes"),onClick:()=>s("changes"),children:"Changes"}),u.jsx("button",{type:"button",className:q(t==="graph"),onClick:()=>s("graph"),children:"Tree"})]}),u.jsx("div",{className:"min-h-0 flex-1",children:t==="graph"?u.jsx(Zj,{branches:e.git.branches??[]}):u.jsxs("div",{className:"grid h-full min-h-0 overflow-hidden border-0 bg-card/85 xl:grid-cols-[320px_minmax(0,1fr)]",children:[u.jsxs("aside",{className:"flex min-h-0 flex-col overflow-hidden",children:[u.jsxs("div",{className:"flex shrink-0 gap-0.5 border-b border-border bg-card/95 p-1",children:[u.jsx("button",{className:k(r==="changes"),onClick:()=>o("changes"),type:"button",children:"Changes"}),u.jsx("button",{className:k(r==="all"),onClick:()=>o("all"),type:"button",children:"All files"})]}),r==="changes"?u.jsx(q9,{branch:e.git.status?.branch||void 0,error:e.git.error,files:e.git.status?.files??[],selectedFile:l,onSelectFile:O,root:e.git.cwd}):v?u.jsx(ht,{variant:"destructive",className:"m-3",children:v}):u.jsx(Z9,{branch:e.git.status?.branch||void 0,onSelectFile:m,paths:h,root:e.git.cwd,selectedFile:f,status:e.git.status?.files??[]})]}),r==="all"?u.jsx(Hj,{isModified:F.has(f),onViewDiff:V,path:f}):u.jsxs("section",{className:"flex min-h-0 min-w-0 flex-col border-l border-border bg-white",children:[u.jsxs("div",{className:"flex shrink-0 items-center justify-between gap-3 border-b border-border px-3 py-1.5",children:[u.jsxs("div",{className:"min-w-0",children:[u.jsx("h2",{className:"truncate text-[13px] font-semibold tracking-tight",children:l||"Diff"}),u.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-[10px] text-muted-foreground",children:[u.jsx("span",{children:"Long rows wrap inside the editor pane."}),j.additions||j.deletions?u.jsxs("span",{className:"flex items-center gap-1 font-mono",children:[u.jsxs("span",{className:"text-emerald-700",children:["+",j.additions]}),u.jsxs("span",{className:"text-red-700",children:["-",j.deletions]})]}):null]})]}),u.jsxs("div",{className:"flex shrink-0 items-center gap-1.5",children:[ee?u.jsx("span",{className:"max-w-72 truncate rounded border border-amber-200 bg-amber-50 px-2 py-1 text-[11px] text-amber-900",children:ee}):null,u.jsxs(fe,{disabled:!l||!I,onClick:H,size:"sm",type:"button",variant:"outline",children:[u.jsx(TN,{}),"Previous"]}),u.jsxs(fe,{disabled:!l||!J,onClick:K,size:"sm",type:"button",variant:"outline",children:[u.jsx(NN,{}),"Next"]})]})]}),u.jsx("div",{className:"relative min-h-0 min-w-0 flex-1",children:w?u.jsx("div",{className:"p-4",children:u.jsx(ht,{variant:"destructive",children:w})}):l?u.jsx(nC,{activeHunkIndex:A,diff:y||"No unstaged diff for this file."}):u.jsx("div",{className:"p-4",children:u.jsx(ht,{variant:"muted",className:"border-dashed p-12 text-center",children:"Select a changed file to inspect its diff."})})})]})]})})]})}function Jj({initialPath:e,onSelect:t,selectedPath:s}){const[r,o]=E.useState(e),[l,d]=E.useState(null),[f,m]=E.useState(null),[h,_]=E.useState(!1),v=eB(l);return E.useEffect(()=>{o(e)},[e]),E.useEffect(()=>{let b=!0;return _(!0),m(null),ZS(r).then(y=>{b&&(d(y),t(y.path))}).catch(y=>{b&&m(y instanceof Error?y.message:String(y))}).finally(()=>{b&&_(!1)}),()=>{b=!1}},[r,t]),u.jsxs("div",{className:"rounded-md border border-border bg-background",children:[u.jsxs("div",{className:"flex items-center gap-2 border-b border-border p-2",children:[v?u.jsx(fe,{"aria-label":"Open parent folder",onClick:()=>l&&o(l.parent),size:"icon",type:"button",variant:"ghost",children:u.jsx(Pn,{className:"rotate-90"})}):null,u.jsx("div",{className:"min-w-0 flex-1 truncate font-mono text-xs text-muted-foreground",children:l?.path??r}),h?u.jsx(Zs,{className:"size-4 animate-spin text-muted-foreground"}):null]}),u.jsxs("div",{className:"max-h-56 overflow-auto p-1",children:[f?u.jsx(ht,{variant:"destructive",className:"m-1",children:f}):null,!f&&l?.entries.length===0?u.jsx(ht,{variant:"muted",className:"m-1 text-center",children:"No folders here."}):null,l?.entries.map(b=>u.jsxs(fe,{className:pe("h-8 w-full justify-start rounded-sm px-2 text-left",s===b.path&&"bg-muted"),onClick:()=>o(b.path),title:b.path,type:"button",variant:"ghost",children:[u.jsx(_a,{className:"text-accent"}),u.jsx("span",{className:"truncate",children:b.name})]},b.path))]})]})}function eB(e){return!!(e&&e.parent!==e.path)}function AS(e){return e.split(/[\\/]/).filter(Boolean).pop()??"project"}function tB({data:e,onRefresh:t}){const[s,r]=E.useState(!1),[o,l]=E.useState(e.git.cwd),[d,f]=E.useState(null),[m,h]=E.useState(!1),[_,v]=E.useState(e.git.cwd),b=E.useRef(null),y=e.git.selectedRepository,x=y?.name??AS(e.git.cwd),{error:w,success:N}=ls(),A=sB({gitCwd:e.git.cwd});E.useEffect(()=>{l(e.git.cwd),v(e.git.cwd)},[e.git.cwd]),E.useEffect(()=>{if(!s)return;function j(O){b.current&&O.target instanceof Node&&!b.current.contains(O.target)&&r(!1)}return document.addEventListener("mousedown",j),()=>document.removeEventListener("mousedown",j)},[s]);async function R(j){try{await Gi("/api/git/select",{name:j}),r(!1),await t(),N(`Switched to ${j}.`)}catch(O){w(O instanceof Error?O.message:String(O))}}async function T(j){const O=j.trim();if(!iB(O)){const K="Please add an absolute path. Paths beginning with ~ are not expanded here.";return f(K),w(K),!1}try{const K=AS(O);return await Gi("/api/git/repositories",{name:K,path:O}),f(null),await t(),N(`Added Git project ${K}.`),!0}catch(K){const H=K instanceof Error?K.message:String(K);return f(H),w(H),!1}}async function M(j){try{await iT(j),await t(),N(`Removed Git project ${j}.`)}catch(O){w(O instanceof Error?O.message:String(O))}}async function z(j){j.preventDefault(),await T(o)&&r(!1)}function U(){f(null),v(A.selectedPath),h(!0)}return u.jsxs("div",{className:"relative z-50 flex items-center gap-2",ref:b,children:[u.jsxs(fe,{className:"max-w-[220px] justify-start gap-2 rounded-md border-border bg-card",onClick:()=>r(j=>!j),size:"sm",type:"button",variant:"outline",children:[u.jsx(_a,{className:"text-muted-foreground"}),u.jsx("span",{className:"truncate",children:x}),u.jsx(Pn,{className:pe("ml-auto transition-transform",s&&"rotate-180")})]}),u.jsx(fe,{"aria-label":"Add Git project",onClick:U,size:"sm",type:"button",variant:"outline",children:u.jsx(Es,{})}),s?u.jsxs("div",{className:"absolute right-0 top-10 z-50 w-[min(380px,calc(100vw-2rem))] overflow-hidden rounded-lg border border-border bg-card shadow-lg",children:[u.jsxs("div",{className:"flex items-center gap-2 border-b border-border px-3 py-2",children:[u.jsx(ZN,{className:"size-3.5 text-muted-foreground"}),u.jsx("div",{className:"text-xs font-semibold",children:"Git Projects"}),u.jsx(Ve,{className:"ml-auto h-5 px-1.5 text-[10px]",variant:"outline",children:e.config.gitRepositories.length})]}),u.jsx("div",{className:"max-h-72 overflow-auto",children:e.config.gitRepositories.length?u.jsx("div",{className:"divide-y divide-border",children:e.config.gitRepositories.map(j=>{const O=j.name===y?.name;return u.jsxs("div",{className:pe("group grid w-full grid-cols-[1fr_auto_auto] items-center gap-2 px-3 py-1.5 text-left transition-colors hover:bg-muted",O&&"bg-muted/70"),children:[u.jsxs("button",{className:"min-w-0 text-left",onClick:()=>{R(j.name)},type:"button",children:[u.jsx("span",{className:"block truncate text-sm font-medium leading-tight",children:j.name}),u.jsx("span",{className:"block truncate font-mono text-[10px] leading-tight text-muted-foreground",children:j.path})]}),O?u.jsx(ac,{className:"size-3.5"}):u.jsx("span",{className:"size-3.5"}),u.jsx(fe,{"aria-label":`Remove ${j.name}`,className:"size-6 opacity-0 transition-opacity group-hover:opacity-100",onClick:()=>{M(j.name)},size:"icon",title:`Remove ${j.name}`,type:"button",variant:"ghost",children:u.jsx(lc,{className:"size-3.5 text-destructive"})})]},j.name)})}):u.jsx("div",{className:"px-3 py-6 text-center text-xs text-muted-foreground",children:"No saved Git projects yet."})}),u.jsxs("div",{className:"border-t border-border bg-muted/20 p-2",children:[u.jsxs("form",{className:"flex gap-1.5",onSubmit:z,children:[u.jsx(bt,{"aria-label":"Paste absolute path",className:"h-7 flex-1 px-2 font-mono text-[11px]",onChange:j=>{l(j.target.value),f(null)},placeholder:"/absolute/path",value:o}),u.jsxs(fe,{className:"h-7 px-2 text-[11px]",size:"sm",type:"submit",children:[u.jsx(Es,{className:"size-3"}),"Add"]}),u.jsx(fe,{"aria-label":"Browse and add Git project",className:"h-7 px-2",onClick:U,size:"sm",type:"button",variant:"outline",children:u.jsx(hk,{className:"size-3"})})]}),d?u.jsx("div",{className:"mt-1.5 truncate text-[10px] text-destructive",children:d}):null]})]}):null,m?u.jsx(nB,{confirmLabel:A.confirmLabel,errorMessage:d,initialPath:A.initialPath,selectedPath:_,title:"Add Git Project",onCancel:()=>h(!1),onSelect:v,onUse:async()=>{await T(_)&&(h(!1),r(!1))}}):null]})}function iB(e){return e.startsWith("/")}function sB({gitCwd:e}){return{confirmLabel:"Add Git project",initialPath:e,selectedPath:e}}function nB({confirmLabel:e="Use this folder",errorMessage:t,initialPath:s,onCancel:r,onSelect:o,onUse:l,selectedPath:d,title:f="Choose Git Project Folder"}){return s0.createPortal(u.jsx("div",{className:"fixed inset-0 z-[1000] grid place-items-center bg-black/35 px-4",children:u.jsxs("div",{className:"w-full max-w-2xl rounded-xl border border-border bg-card p-4 shadow-xl",children:[u.jsxs("div",{className:"mb-3 flex items-center gap-3",children:[u.jsx("div",{className:"flex size-8 items-center justify-center rounded-lg border border-border bg-background",children:u.jsx(_a,{className:"size-4"})}),u.jsxs("div",{className:"min-w-0 flex-1",children:[u.jsx("div",{className:"text-sm font-semibold",children:f}),u.jsx("div",{className:"truncate font-mono text-xs text-muted-foreground",children:d})]}),u.jsx(fe,{"aria-label":"Close folder picker",onClick:r,size:"icon",variant:"ghost",children:u.jsx(rn,{})})]}),u.jsx(Jj,{initialPath:s,onSelect:o,selectedPath:d}),t?u.jsx("div",{className:"mt-3 rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive",children:t}):null,u.jsxs("div",{className:"mt-4 flex justify-end gap-2",children:[u.jsx(fe,{onClick:r,type:"button",variant:"outline",children:"Cancel"}),u.jsx(fe,{onClick:()=>{l()},type:"button",children:e})]})]})}),document.body)}function rB({branches:e,currentBranch:t,disabled:s,onRefresh:r}){const[o,l]=E.useState(!1),[d,f]=E.useState(""),[m,h]=E.useState(null),[_,v]=E.useState(null),[b,y]=E.useState(null),x=e.filter(M=>!M.remote),w=e.filter(M=>M.remote);async function N(M,z){h(M),y(null),v(null);try{await z(),await r()}catch(U){y(U instanceof Error?U.message:String(U))}finally{h(null)}}async function A(M){await N(`switch:${M}`,async()=>{await Gi("/api/git/branches/switch",{name:M}),l(!1)})}async function R(){await N("fetch",async()=>{await Gi("/api/git/fetch",{}),v("Fetched latest branch refs.")})}async function T(M){M.preventDefault();const z=d.trim();if(!z){y("Branch name is required.");return}await N("create",async()=>{await Gi("/api/git/branches",{name:z}),f(""),l(!1)})}return u.jsxs("div",{className:"fixed bottom-12 right-4 z-50 flex items-end",children:[o?u.jsxs("div",{"aria-label":"Switch Git branch",className:"mb-11 w-[min(460px,calc(100vw-2rem))] rounded-lg border border-border bg-card shadow-xl",role:"dialog",children:[u.jsxs("div",{className:"flex items-center justify-between gap-3 border-b border-border p-3",children:[u.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[u.jsx(Yl,{className:"size-4 text-muted-foreground"}),u.jsx("span",{className:"truncate text-sm font-semibold",children:t||"Branches"})]}),u.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[u.jsx(fe,{"aria-label":"Fetch branches",disabled:s||m!==null,onClick:()=>{R()},size:"icon",title:"Fetch branches",type:"button",variant:"ghost",children:u.jsx(VS,{className:pe(m==="fetch"&&"animate-spin")})}),u.jsx(fe,{"aria-label":"Close branch dialog",onClick:()=>l(!1),size:"icon",type:"button",variant:"ghost",children:u.jsx(rn,{})})]})]}),u.jsx("div",{className:"max-h-72 overflow-auto",children:e.length?u.jsxs(u.Fragment,{children:[u.jsx(RS,{branches:x,busy:m!==null,disabled:s,label:"Local",onSwitch:A}),u.jsx(RS,{branches:w,busy:m!==null,disabled:s,label:"Remote",onSwitch:A})]}):u.jsx("div",{className:"px-3 py-6 text-center text-sm text-muted-foreground",children:"No branches found."})}),u.jsxs("div",{className:"border-t border-border p-3",children:[u.jsxs("form",{className:"grid gap-2 sm:grid-cols-[1fr_auto]",onSubmit:T,children:[u.jsx(bt,{"aria-label":"New branch name",disabled:s||m!==null,onChange:M=>{f(M.target.value),y(null),v(null)},placeholder:"feature/new-work",value:d}),u.jsxs(fe,{disabled:s||m!==null,type:"submit",children:[u.jsx(bk,{}),"Create"]})]}),b||_?u.jsx(ht,{className:"mt-3 px-3 py-2 text-xs",variant:b?"destructive":"muted",children:b??_}):null]})]}):null,u.jsxs(fe,{className:"h-8 max-w-[260px] gap-2 rounded-md shadow-lg",disabled:s,onClick:()=>l(M=>!M),size:"sm",title:"Switch Git branch",type:"button",variant:"default",children:[u.jsx(Yl,{className:"size-4"}),u.jsx("span",{className:"truncate font-mono text-xs",children:t||"No branch"}),u.jsx(Pn,{className:pe("size-4 transition-transform",o&&"rotate-180")})]})]})}function RS({branches:e,busy:t,disabled:s,label:r,onSwitch:o}){return u.jsxs("section",{children:[u.jsx("div",{className:"border-b border-border bg-muted/60 px-3 py-1.5 text-[11px] font-semibold uppercase text-muted-foreground",children:r}),e.length?e.map(l=>u.jsxs("button",{className:pe("grid w-full grid-cols-[1fr_auto] items-center gap-2 border-b border-border px-3 py-2 text-left text-sm last:border-b-0 hover:bg-muted",l.current&&"bg-muted/70"),disabled:s||t||l.current,onClick:()=>{o(l.name)},type:"button",children:[u.jsxs("span",{className:"min-w-0",children:[u.jsx("span",{className:"block truncate font-medium",children:l.name}),l.upstream?u.jsxs("span",{className:"block truncate font-mono text-[11px] text-muted-foreground",children:["tracks ",l.upstream]}):null]}),u.jsx(Ve,{variant:l.current?"success":l.remote?"outline":"secondary",children:l.current?"current":l.remote?"remote":"local"})]},`${l.remote?"remote":"local"}:${l.name}`)):u.jsxs("div",{className:"border-b border-border px-3 py-3 text-sm text-muted-foreground",children:["No ",r.toLowerCase()," branches."]})]})}function aB(e=!1){return pe("group/sidebar hidden h-full shrink-0 overflow-x-hidden overflow-y-auto border-r border-border bg-card/85 py-5 backdrop-blur transition-[width,padding] duration-200 md:flex md:flex-col",e?"w-64 px-4":"w-16 px-2 hover:w-64 hover:px-4")}function oB(e,t=!1){return pe("relative grid h-12 grid-cols-[48px_minmax(0,1fr)] items-center justify-start gap-0 overflow-hidden rounded-md px-0 text-[15px] font-medium transition-[background-color,color,width] duration-150",t?"w-full":"w-12 group-hover/sidebar:w-full",e?"bg-primary text-primary-foreground hover:bg-primary/90":"hover:bg-muted")}function lB(e=!1,t=!1){return pe("min-w-0 overflow-hidden text-left text-current transition duration-150 whitespace-pre",e?"translate-x-1 opacity-100":"opacity-0 group-hover/sidebar:translate-x-1 group-hover/sidebar:opacity-100",t?"pr-10":"pr-3")}function cB(e=!1){return pe("flex size-12 items-center justify-center text-current transition-transform duration-150 [&_svg]:size-5",e?"translate-x-0":"-translate-x-px group-hover/sidebar:translate-x-0")}function uB({docked:e,onToggleDock:t}){return u.jsxs("div",{className:pe("mt-auto flex h-10 min-w-0 items-center overflow-hidden border-t border-border/60 text-[11px] text-muted-foreground transition-[height,opacity,width] duration-150",e?"w-full justify-start opacity-100":"w-12 justify-center group-hover/sidebar:w-full group-hover/sidebar:justify-start group-hover/sidebar:opacity-100"),children:[u.jsxs("span",{className:pe("flex min-w-0 items-center gap-1.5 overflow-hidden whitespace-pre transition-[opacity,width] duration-150",e?"flex-1 opacity-100":"w-0 flex-none opacity-0 group-hover/sidebar:w-auto group-hover/sidebar:flex-1 group-hover/sidebar:opacity-100"),children:[u.jsx("span",{children:"Made with"}),u.jsx(xk,{"aria-label":"love",className:"size-3 shrink-0 fill-red-500 text-red-500"}),u.jsx("span",{children:"by Robert Wang"}),u.jsx("a",{"aria-label":"Robert Wang on LinkedIn",className:"shrink-0 rounded p-0.5 text-muted-foreground transition-colors hover:bg-muted hover:text-[#0A66C2]",href:"https://www.linkedin.com/in/robert-wang-cs/",rel:"noopener noreferrer",target:"_blank",title:"LinkedIn",children:u.jsx("svg",{"aria-hidden":!0,className:"size-3 fill-current",role:"img",viewBox:"0 0 24 24",children:u.jsx("path",{d:"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.063 2.063 0 1 1 0-4.126 2.063 2.063 0 0 1 0 4.126zM7.119 20.452H3.554V9h3.565v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.225 0z"})})})]}),u.jsx("button",{"aria-label":e?"Undock sidebar":"Dock sidebar","aria-pressed":e,className:pe("flex size-8 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground [&_svg]:size-4",e?"ml-auto bg-muted text-foreground":"group-hover/sidebar:ml-auto"),onClick:t,title:e?"Undock sidebar":"Dock sidebar",type:"button",children:e?u.jsx(Vk,{}):u.jsx(qk,{})})]})}function dB({className:e}){return u.jsxs("div",{className:pe("min-w-0",e),children:[u.jsxs("div",{className:"flex items-baseline gap-1.5",children:[u.jsx("div",{className:"text-sm font-semibold",children:"NoMoreIDE"}),u.jsxs("div",{className:"font-mono text-[10px] text-muted-foreground",children:["v","0.1.33"]})]}),u.jsx("div",{className:"font-mono text-[11px] text-muted-foreground",children:"127.0.0.1 console"})]})}function hB(){const[e,t]=E.useState(()=>window.location.pathname.startsWith("/agent")?"agent":window.location.pathname.startsWith("/errors")?"errors":window.location.pathname.startsWith("/database")?"database":window.location.pathname.startsWith("/terminal")?"terminal":window.location.pathname.startsWith("/git")?"git":"services"),[s,r]=E.useState(null),[o,l]=E.useState(null),[d,f]=E.useState(!0),{error:m,success:h}=ls(),[_,v]=E.useState(()=>window.localStorage.getItem("nomoreide:sidebar-docked")==="true"),b=E.useCallback(async(x={})=>{x.silent||f(!0),l(null);try{r(await rT()),x.notify&&h("Dashboard refreshed.")}catch(w){const N=w instanceof Error?w.message:String(w);l(N),m(N)}finally{f(!1)}},[m,h]);E.useEffect(()=>{b()},[b]),E.useEffect(()=>{function x(){document.visibilityState==="visible"&&b({silent:!0})}const w=window.setInterval(x,5e3);return window.addEventListener("focus",x),document.addEventListener("visibilitychange",x),()=>{window.clearInterval(w),window.removeEventListener("focus",x),document.removeEventListener("visibilitychange",x)}},[e,b]),E.useEffect(()=>{const x=e==="git"?"/git":e==="agent"?"/agent":e==="errors"?"/errors":e==="database"?"/database":e==="terminal"?"/terminal":"/";window.location.pathname!==x&&window.history.pushState(null,"",x)},[e]),E.useEffect(()=>{window.localStorage.setItem("nomoreide:sidebar-docked",String(_))},[_]);const y=E.useMemo(()=>s?Object.values(s.runtime.services).filter(x=>x.state==="running").length:0,[s]);return u.jsxs("div",{className:"h-screen overflow-hidden pb-9",children:[u.jsxs("div",{className:"mx-auto flex h-full max-w-[1500px]",children:[u.jsxs("aside",{className:aB(_),children:[u.jsxs("div",{className:pe("grid h-12 grid-cols-[48px_minmax(0,1fr)] items-center overflow-hidden transition-[width] duration-150",_?"w-full":"w-12 group-hover/sidebar:w-full"),children:[u.jsx("div",{className:"flex size-12 items-center justify-center",children:u.jsx("div",{className:"flex size-9 items-center justify-center overflow-hidden rounded-md bg-primary",children:u.jsx("img",{alt:"NoMoreIDE",className:"size-full object-cover",src:O5})})}),u.jsx(dB,{className:pe("min-w-0 translate-x-1 overflow-hidden transition-opacity duration-200",_?"opacity-100":"opacity-0 group-hover/sidebar:opacity-100")})]}),u.jsxs("nav",{className:"mt-5 grid flex-1 content-start gap-1",children:[u.jsx(co,{active:e==="services",badge:y,docked:_,icon:u.jsx(d5,{}),label:"Services",onClick:()=>t("services")}),u.jsx(co,{active:e==="git",docked:_,icon:u.jsx(Yl,{}),label:"Git Review",onClick:()=>t("git")}),u.jsx(co,{active:e==="errors",docked:_,icon:u.jsx(fp,{}),label:"Error Inbox",onClick:()=>t("errors")}),u.jsx(co,{active:e==="database",docked:_,icon:u.jsx(oc,{}),label:"Database",onClick:()=>t("database")}),u.jsx(co,{active:e==="terminal",docked:_,icon:u.jsx(v5,{}),label:"Terminal",onClick:()=>t("terminal")}),u.jsx(co,{active:e==="agent",docked:_,icon:u.jsx(Wl,{}),label:"Agent",onClick:()=>t("agent")})]}),u.jsx(uB,{docked:_,onToggleDock:()=>v(x=>!x)})]}),u.jsxs("main",{className:"flex h-full min-w-0 flex-1 flex-col px-0 py-0",children:[u.jsxs("header",{className:pe("relative z-40 flex shrink-0 flex-wrap items-center justify-between gap-3 border border-border bg-card/90 px-4 py-3 backdrop-blur","border-x-0 border-t-0 border-b"),children:[u.jsxs("div",{className:"flex items-center gap-3",children:[u.jsx(Gk,{className:"size-4 text-muted-foreground md:hidden"}),u.jsxs("div",{children:[u.jsx("h1",{className:"text-lg font-semibold tracking-tight",children:e==="git"?"Git Review":e==="agent"?"Agent":e==="errors"?"Error Inbox":e==="database"?"Database":e==="terminal"?"Terminal":"Services"}),u.jsx("p",{className:"font-mono text-xs text-muted-foreground",children:s?.git.selectedRepository?.name??s?.git.cwd??"Local workspace"})]})]}),u.jsxs("div",{className:"flex items-center gap-2",children:[o?u.jsx(Ve,{variant:"danger",children:o}):null,s&&e==="git"?u.jsx(tB,{data:s,onRefresh:b}):null,u.jsxs(fe,{onClick:()=>{b({notify:!0})},size:"sm",title:"Refresh dashboard",variant:"outline",children:[u.jsx(VS,{className:pe(d&&"animate-spin")}),"Refresh"]})]})]}),d&&!s?u.jsx(ht,{variant:"muted",children:"Loading NoMoreIDE state..."}):null,u.jsxs("div",{className:"min-h-0 flex-1 overflow-hidden",children:[s&&e==="services"?u.jsx(x7,{data:s,onRefresh:b}):null,s&&e==="git"?u.jsx(Qj,{data:s}):null,e==="agent"?u.jsx(b8,{}):null,e==="errors"?u.jsx(oD,{}):null,e==="database"?u.jsx(iD,{}):null,e==="terminal"?u.jsx(I9,{}):null]})]})]}),s&&e==="git"?u.jsx(rB,{branches:s.git.branches,currentBranch:s.git.status?.branch||void 0,disabled:!s.git.status,onRefresh:b}):null,u.jsx(B8,{onOpenAgentPage:e==="agent"?void 0:()=>t("agent")})]})}function co({active:e,badge:t,docked:s,icon:r,label:o,onClick:l}){return u.jsxs(fe,{"aria-label":o,title:o,className:oB(e,s),variant:"ghost",onClick:l,type:"button",children:[u.jsx("span",{className:cB(s),children:r}),u.jsx("span",{className:lB(s,t!==void 0),children:o}),t!==void 0?u.jsx(Ve,{appearance:t>0?"solid":"outline",className:pe("min-w-6 justify-center px-1.5 font-mono shadow-none",e?"border-primary-foreground/40 bg-primary-foreground/15 text-primary-foreground":t>0?"":"border-border bg-background text-muted-foreground","absolute right-1.5 top-1.5 h-4 min-w-4 rounded-full px-1 text-[10px] leading-none shadow-none group-hover/sidebar:right-2 group-hover/sidebar:top-1/2 group-hover/sidebar:-translate-y-1/2 group-hover/sidebar:text-xs",s&&"right-2 top-1/2 -translate-y-1/2 text-xs"),size:"small",variant:t>0?"success":"outline",children:t}):null]})}OS.createRoot(document.getElementById("root")).render(u.jsx(E.StrictMode,{children:u.jsx(hB,{})}));
@@ -5,7 +5,7 @@
5
5
  <link rel="icon" type="image/svg+xml" href="/assets/nomoreide-favicon-Ds7Tgj9p.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>NoMoreIDE</title>
8
- <script type="module" crossorigin src="/assets/index-ChkTuULV.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-DHmbWLCJ.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-Duh8SZvs.css">
10
10
  </head>
11
11
  <body>
@@ -6,6 +6,7 @@ import { DbPeek } from "../core/db-peek.js";
6
6
  import { ErrorInbox } from "../core/error-inbox.js";
7
7
  import { LogStore } from "../core/log-store.js";
8
8
  import { ProcessManager } from "../core/process-manager.js";
9
+ import { defaultRuntimeRegistryPath, ServiceRegistry, } from "../core/service-registry.js";
9
10
  import { ApprovalBroker } from "../core/approval-broker.js";
10
11
  import { ReproBundleBuilder } from "../core/repro-bundle.js";
11
12
  import { TerminalSessionManager, } from "../core/terminal-manager.js";
@@ -20,11 +21,18 @@ export function createWebServer(options = {}) {
20
21
  const timelineStore = new TimelineStore({
21
22
  baseDir: timelineBaseDir(options.logDir),
22
23
  });
24
+ const logDir = options.logDir ?? resolve(process.cwd(), ".nomoreide/logs");
23
25
  const logStore = new LogStore({
24
- baseDir: options.logDir ?? resolve(process.cwd(), ".nomoreide/logs"),
26
+ baseDir: logDir,
25
27
  timelineStore,
26
28
  });
27
- const manager = new ProcessManager({ configStore, logStore, timelineStore });
29
+ const registry = new ServiceRegistry(defaultRuntimeRegistryPath(logDir));
30
+ const manager = new ProcessManager({
31
+ configStore,
32
+ logStore,
33
+ timelineStore,
34
+ registry,
35
+ });
28
36
  manager.installShutdownHandlers();
29
37
  const cwd = options.cwd ?? process.cwd();
30
38
  const toolCallStore = options.toolCallStore ?? new ToolCallStore();
@@ -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.32",
3
+ "version": "0.1.33",
4
4
  "description": "An AI-native terminal workbench for services, Git review, logs, and MCP workflows.",
5
5
  "repository": {
6
6
  "type": "git",