agent-discover 1.2.3 → 1.2.5

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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,24 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.2.5] - 2026-04-12
9
+
10
+ ### Fixed
11
+
12
+ - **Multi-process hydrate no longer corrupts `servers.active`.** The per-process `McpProxy.activeServers` map used to be rebuilt on every context creation, so every fresh stdio child (one per connected MCP client) raced to spawn a duplicate child for the same server, and whichever lost the race flipped `active = 0` via `setActive(name, false)` in the `catch` branch of the hydrate IIFE. Real symptom: a server that `registry.activate` had just successfully activated would appear as "Inactive" in the dashboard seconds later, even though the stdio child that ran the activate still had a live bridge. Fix: extracted the hydrate logic into an exported `hydrateActiveServers(ctx)` function, removed the auto-invocation from `createContext`, and only call it from `src/index.ts` after `startDashboard` binds successfully — so only the primary process (the one that owns port 3424) rebuilds the map. Secondary stdio children leave the DB flag alone. Hydrate failures in the primary process are now informational log lines only — they never flip `active = 0`, because a failed hydrate is often a transient spawn race and we should not punish the DB state that the REST + WS dashboard depends on.
13
+ - **`HEALTH_CHECK_TIMEOUT_MS` raised from 5 s to 60 s** (`src/domain/health.ts`). When a health probe arrives for a server that is not currently in the local process's proxy map, the health service runs a full activate / deactivate cycle — which for an `npx -y mcp-remote …` wrapper involves npm cold-start, package download, HTTP handshake with the remote, and `tools/list`. 5 s was never enough; every cold probe returned `{status:"unhealthy", latency_ms:5141, error:"Health check timed out"}` and the dashboard surfaced the server as Unhealthy even when a plain `proxy_call` round-tripped fine. 60 s matches `ACTIVATE_TIMEOUT_MS` in `src/domain/proxy.ts`.
14
+ - **Hydrate is idempotent.** The new `hydrateActiveServers` skips any server where `proxy.isActive(name)` is already true, so calling it twice in the same process (e.g. future use of `hydrateActiveServers` as an imperative refresh) never throws `"Server already active"`.
15
+
16
+ ### Added
17
+
18
+ - **`tests/domain/hydrate.test.ts`** — unit coverage for `hydrateActiveServers`: empty-DB no-op, does not flip `active = 0` when `proxy.activate` throws, skips already-active servers, and happy-path restores an entry into the in-memory proxy map.
19
+
20
+ ## [1.2.4] - 2026-04-11
21
+
22
+ ### Fixed
23
+
24
+ - **`src/ui/app.js`** `initTheme()`: added a null-guard before attaching the click handler on `#theme-toggle`. The element is absent when agent-discover's UI is mounted as an embedded plugin inside agent-desk's shadow DOM (the host drives theming), and the unguarded `toggle.addEventListener` was throwing `TypeError: Cannot read properties of null` during plugin init. That crash cascaded into (a) the Discover view rendering completely blank in agent-desk, and (b) every view switch firing a renderer pageerror. The sibling `updateThemeIcon` helper already had the guard; `initTheme` just forgot. One-line fix: `if (!toggle) return;` before the listener wiring.
25
+
8
26
  ## [1.2.3] - 2026-04-09
9
27
 
10
28
  ### Documentation
@@ -2,7 +2,7 @@
2
2
  "id": "agent-discover",
3
3
  "name": "Discover",
4
4
  "icon": "explore",
5
- "version": "1.2.3",
5
+ "version": "1.2.5",
6
6
  "description": "MCP server registry — browse, install, configure, monitor",
7
7
  "ui": "./dist/ui/app.js",
8
8
  "css": "./dist/ui/styles.css",
package/dist/context.d.ts CHANGED
@@ -20,4 +20,5 @@ export interface AppContext {
20
20
  close(): void;
21
21
  }
22
22
  export declare function createContext(dbOptions?: DbOptions): AppContext;
23
+ export declare function hydrateActiveServers(ctx: AppContext): Promise<void>;
23
24
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAOA,OAAO,EAAY,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,CAqE/D"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAOA,OAAO,EAAY,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,CAsC/D;AAkBD,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBzE"}
package/dist/context.js CHANGED
@@ -30,34 +30,6 @@ export function createContext(dbOptions) {
30
30
  const server = registry.getByName(name);
31
31
  return server ? server.id : null;
32
32
  });
33
- // Hydrate the in-process proxy from servers marked active in the DB.
34
- // Activation lives in McpProxy.activeServers (in-memory) but the DB-backed
35
- // active flag is the cross-process source of truth, so each new instance
36
- // (e.g. a fresh stdio child spawned by an MCP client) re-establishes its
37
- // own proxy connections to the same set of child servers.
38
- void (async () => {
39
- const activeRows = db.queryAll('SELECT name FROM servers WHERE active = 1 AND installed = 1');
40
- for (const row of activeRows) {
41
- const server = registry.getByName(row.name);
42
- if (!server)
43
- continue;
44
- try {
45
- await proxy.activate({
46
- name: server.name,
47
- command: server.command ?? undefined,
48
- args: server.args,
49
- env: server.env,
50
- transport: server.transport,
51
- url: server.homepage ?? undefined,
52
- });
53
- }
54
- catch (err) {
55
- process.stderr.write(`[agent-discover] failed to hydrate active server "${server.name}": ${err instanceof Error ? err.message : String(err)}\n`);
56
- // Clear the stale active flag so we don't retry forever
57
- registry.setActive(server.name, false);
58
- }
59
- }
60
- })();
61
33
  return {
62
34
  db,
63
35
  events,
@@ -78,4 +50,43 @@ export function createContext(dbOptions) {
78
50
  },
79
51
  };
80
52
  }
53
+ // Hydrate the in-process proxy from servers marked active in the DB. The
54
+ // McpProxy.activeServers map is per-process, but the DB-backed `active` flag
55
+ // is the cross-process source of truth, so a fresh process can rebuild its
56
+ // live children by replaying it.
57
+ //
58
+ // Only the primary process (the one that successfully binds the dashboard
59
+ // port) should call this. Running hydrate in every stdio child — which is
60
+ // what happened before v1.2.5 — races on duplicate child spawning, and the
61
+ // losers used to flip the DB flag to 0 on failure, which surfaced as a
62
+ // dashboard server that flickered between Active and Inactive depending on
63
+ // which stdio child ran last.
64
+ //
65
+ // Hydrate failures here are logged but never flip the DB flag. The health
66
+ // probe is the one responsible for surfacing a dead child, and a failed
67
+ // hydrate in a secondary process is informational only — another process
68
+ // may already hold a live bridge.
69
+ export async function hydrateActiveServers(ctx) {
70
+ const activeRows = ctx.db.queryAll('SELECT name FROM servers WHERE active = 1 AND installed = 1');
71
+ for (const row of activeRows) {
72
+ const server = ctx.registry.getByName(row.name);
73
+ if (!server)
74
+ continue;
75
+ if (ctx.proxy.isActive(server.name))
76
+ continue;
77
+ try {
78
+ await ctx.proxy.activate({
79
+ name: server.name,
80
+ command: server.command ?? undefined,
81
+ args: server.args,
82
+ env: server.env,
83
+ transport: server.transport,
84
+ url: server.homepage ?? undefined,
85
+ });
86
+ }
87
+ catch (err) {
88
+ process.stderr.write(`[agent-discover] failed to hydrate active server "${server.name}": ${err instanceof Error ? err.message : String(err)}\n`);
89
+ }
90
+ }
91
+ }
81
92
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,uCAAuC;AACvC,EAAE;AACF,sEAAsE;AACtE,sEAAsE;AACtE,gFAAgF;AAEhF,OAAO,EAAE,QAAQ,EAA2B,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAerD,MAAM,UAAU,aAAa,CAAC,SAAqB;IACjD,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC9B,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAE5C,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,mBAAmB,CAAC,CAAC,IAAY,EAAE,EAAE;QACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,EAAE;QACF,MAAM;QACN,QAAQ;QACR,KAAK;QACL,WAAW;QACX,SAAS;QACT,OAAO;QACP,MAAM;QACN,OAAO;QACP,KAAK;YACH,IAAI,MAAM;gBAAE,OAAO;YACnB,MAAM,GAAG,IAAI,CAAC;YACd,KAAK,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;KACF,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,6EAA6E;AAC7E,2EAA2E;AAC3E,iCAAiC;AACjC,EAAE;AACF,0EAA0E;AAC1E,0EAA0E;AAC1E,2EAA2E;AAC3E,uEAAuE;AACvE,2EAA2E;AAC3E,8BAA8B;AAC9B,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,yEAAyE;AACzE,kCAAkC;AAClC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAe;IACxD,MAAM,UAAU,GAAG,GAAG,CAAC,EAAE,CAAC,QAAQ,CAChC,6DAA6D,CAC9D,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,SAAS;QAC9C,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,SAAS;gBACpC,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,GAAG,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;aAClC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qDAAqD,MAAM,CAAC,IAAI,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAC3H,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/domain/health.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAaD,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,QAAQ;IAG5B,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmFzD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAW/B,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;CAWxC"}
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/domain/health.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAShD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAaD,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,QAAQ;IAG5B,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmFzD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAW/B,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;CAWxC"}
@@ -4,7 +4,12 @@
4
4
  // Monitors the health of registered MCP servers by attempting to connect
5
5
  // and list tools. Updates health_status and last_health_check in the DB.
6
6
  // =============================================================================
7
- const HEALTH_CHECK_TIMEOUT_MS = 5_000;
7
+ // Matches ACTIVATE_TIMEOUT_MS in proxy.ts — a health probe that isn't already
8
+ // active spawns a real child (e.g. `npx -y mcp-remote …`) and does the full
9
+ // MCP handshake, which easily exceeds a few seconds on cold start. 5 s was
10
+ // always unhealthy for remote-wrapped servers, causing spurious "unhealthy"
11
+ // flags and a false Inactive status in the dashboard.
12
+ const HEALTH_CHECK_TIMEOUT_MS = 60_000;
8
13
  export class HealthService {
9
14
  db;
10
15
  proxy;
@@ -1 +1 @@
1
- {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/domain/health.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/domain/health.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,wCAAwC;AACxC,EAAE;AACF,yEAAyE;AACzE,yEAAyE;AACzE,gFAAgF;AAMhF,8EAA8E;AAC9E,4EAA4E;AAC5E,2EAA2E;AAC3E,4EAA4E;AAC5E,sDAAsD;AACtD,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAyBvC,MAAM,OAAO,aAAa;IAEL;IACA;IAFnB,YACmB,EAAM,EACN,KAAe;QADf,OAAE,GAAF,EAAE,CAAI;QACN,UAAK,GAAL,KAAK,CAAU;IAC/B,CAAC;IAEJ,KAAK,CAAC,WAAW,CAAC,QAAgB;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAkB,oCAAoC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChG,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;QAC3E,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,MAAyB,CAAC;QAE9B,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,iDAAiD;YACjD,IAAI,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;gBACnC,MAAM,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;YACtD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;gBACnC,MAAM,GAAG;oBACP,MAAM,EAAE,WAAW;oBACnB,UAAU,EAAE,OAAO;oBACnB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACxD,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACvB,qDAAqD;YACrD,IAAI,CAAC;gBACH,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;oBAC1C,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAa;oBACtC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAA2B;iBACnD,CAAC,CAAC;gBAEH,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAC7D,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,EAAE,uBAAuB,CAAC,CACvF,CAAC;gBAEF,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC;gBACtD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;gBAEnC,yBAAyB;gBACzB,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACxC,CAAC;gBAAC,MAAM,CAAC;oBACP,YAAY;gBACd,CAAC;gBAED,MAAM,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;YACtD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;gBACnC,kBAAkB;gBAClB,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACxC,CAAC;gBAAC,MAAM,CAAC;oBACP,YAAY;gBACd,CAAC;gBACD,MAAM,GAAG;oBACP,MAAM,EAAE,WAAW;oBACnB,UAAU,EAAE,OAAO;oBACnB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACxD,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;QAClF,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC,EAAE,CAAC,GAAG,CACT;kFAC0E,EAC1E,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAC1B,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,EAAE,CAAC,GAAG,CACT;mDAC2C,EAC3C,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAC1B,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAiB,4CAA4C,CAAC,CAAC;QAC5F,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACP,gCAAgC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS,CAAC,QAAgB;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAkB,oCAAoC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChG,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QACjE,CAAC;QACD,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,aAAa,IAAI,SAAS;YACtC,UAAU,EAAE,GAAG,CAAC,iBAAiB,IAAI,IAAI;YACzC,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,CAAC;SAClC,CAAC;IACJ,CAAC;CACF"}
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@
9
9
  // servers (activate/deactivate/uninstall).
10
10
  // =============================================================================
11
11
  import { startMcpServer } from 'agent-common';
12
- import { createContext } from './context.js';
12
+ import { createContext, hydrateActiveServers } from './context.js';
13
13
  import { readPackageMeta } from './package-meta.js';
14
14
  import { createToolHandler, getToolList } from './transport/mcp.js';
15
15
  import { startDashboard } from './server.js';
@@ -26,6 +26,11 @@ function tryStartDashboard() {
26
26
  startDashboard(appContext, DASHBOARD_PORT)
27
27
  .then((dashboardServer) => {
28
28
  dashboard = dashboardServer;
29
+ // Only the primary process (the one that bound the dashboard port)
30
+ // re-establishes the proxy map from DB-backed active servers. Secondary
31
+ // stdio children of subsequent MCP clients skip hydrate so they don't
32
+ // race on duplicate child spawning.
33
+ void hydrateActiveServers(appContext);
29
34
  })
30
35
  .catch(() => {
31
36
  process.stderr.write(`[agent-discover] Dashboard port ${DASHBOARD_PORT} in use — another instance is serving.\n`);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,gFAAgF;AAChF,4DAA4D;AAC5D,EAAE;AACF,iFAAiF;AACjF,2EAA2E;AAC3E,gEAAgE;AAChE,wEAAwE;AACxE,2CAA2C;AAC3C,gFAAgF;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAwB,MAAM,aAAa,CAAC;AAEnE,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;AACtC,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AAE/E,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;AACnC,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAEjD,IAAI,SAAS,GAA2B,IAAI,CAAC;AAC7C,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAE/B,SAAS,iBAAiB;IACxB,IAAI,SAAS,IAAI,kBAAkB;QAAE,OAAO;IAC5C,kBAAkB,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC;SACvC,IAAI,CAAC,CAAC,eAAe,EAAE,EAAE;QACxB,SAAS,GAAG,eAAe,CAAC;IAC9B,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,EAAE;QACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mCAAmC,cAAc,0CAA0C,CAC5F,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC;AAED,cAAc,CAAC;IACb,UAAU,EAAE,WAAW;IACvB,KAAK,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;IACpC,UAAU;IACV,YAAY,EAAE,iBAAiB;IAC/B,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;IAC9C,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QACnC,IACE,IAAI,KAAK,UAAU;YACnB,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,EAC3F,CAAC;YACD,MAAM,CAAC,kCAAkC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,QAAQ,EAAE,gBAAgB;CAC3B,CAAC,CAAC;AAEH,SAAS,OAAO;IACd,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IACD,UAAU,CAAC,KAAK,EAAE,CAAC;AACrB,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,EAAE,CAAC;IACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,OAAO,EAAE,CAAC;IACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,gFAAgF;AAChF,4DAA4D;AAC5D,EAAE;AACF,iFAAiF;AACjF,2EAA2E;AAC3E,gEAAgE;AAChE,wEAAwE;AACxE,2CAA2C;AAC3C,gFAAgF;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAwB,MAAM,aAAa,CAAC;AAEnE,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;AACtC,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AAE/E,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;AACnC,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAEjD,IAAI,SAAS,GAA2B,IAAI,CAAC;AAC7C,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAE/B,SAAS,iBAAiB;IACxB,IAAI,SAAS,IAAI,kBAAkB;QAAE,OAAO;IAC5C,kBAAkB,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC;SACvC,IAAI,CAAC,CAAC,eAAe,EAAE,EAAE;QACxB,SAAS,GAAG,eAAe,CAAC;QAC5B,mEAAmE;QACnE,wEAAwE;QACxE,sEAAsE;QACtE,oCAAoC;QACpC,KAAK,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,EAAE;QACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mCAAmC,cAAc,0CAA0C,CAC5F,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC;AAED,cAAc,CAAC;IACb,UAAU,EAAE,WAAW;IACvB,KAAK,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;IACpC,UAAU;IACV,YAAY,EAAE,iBAAiB;IAC/B,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;IAC9C,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QACnC,IACE,IAAI,KAAK,UAAU;YACnB,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,EAC3F,CAAC;YACD,MAAM,CAAC,kCAAkC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,QAAQ,EAAE,gBAAgB;CAC3B,CAAC,CAAC;AAEH,SAAS,OAAO;IACd,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IACD,UAAU,CAAC,KAAK,EAAE,CAAC;AACrB,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,EAAE,CAAC;IACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,OAAO,EAAE,CAAC;IACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC"}
package/dist/ui/app.js CHANGED
@@ -107,6 +107,11 @@
107
107
  document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light';
108
108
  updateThemeIcon(currentTheme);
109
109
 
110
+ // When mounted as an embedded plugin inside agent-desk, the shadow root
111
+ // may not contain a #theme-toggle element (the host drives theming).
112
+ // Bail out gracefully instead of throwing on the click wiring.
113
+ if (!toggle) return;
114
+
110
115
  toggle.addEventListener('click', function () {
111
116
  var isDark = document.documentElement.getAttribute('data-theme') === 'dark';
112
117
  var next = isDark ? 'light' : 'dark';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-discover",
3
- "version": "1.2.3",
3
+ "version": "1.2.5",
4
4
  "mcpName": "io.github.keshrath/agent-discover",
5
5
  "description": "MCP server registry and marketplace — discover, install, activate, and manage MCP tools on demand",
6
6
  "type": "module",