@agent-deck/backend 1.2.8 → 1.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/lib/agent-deck-context.d.ts +1 -1
  3. package/dist/lib/agent-deck-context.d.ts.map +1 -1
  4. package/dist/lib/agent-deck-context.js +7 -26
  5. package/dist/lib/agent-deck-context.js.map +1 -1
  6. package/dist/lib/client-scope.d.ts +4 -0
  7. package/dist/lib/client-scope.d.ts.map +1 -1
  8. package/dist/lib/client-scope.js +15 -1
  9. package/dist/lib/client-scope.js.map +1 -1
  10. package/dist/mcp-server.d.ts +8 -1
  11. package/dist/mcp-server.d.ts.map +1 -1
  12. package/dist/mcp-server.js +82 -216
  13. package/dist/mcp-server.js.map +1 -1
  14. package/dist/mcp-session-binding.d.ts +3 -4
  15. package/dist/mcp-session-binding.d.ts.map +1 -1
  16. package/dist/mcp-session-binding.js +3 -10
  17. package/dist/mcp-session-binding.js.map +1 -1
  18. package/dist/routes/scope.d.ts.map +1 -1
  19. package/dist/routes/scope.js +78 -58
  20. package/dist/routes/scope.js.map +1 -1
  21. package/dist/scope/badge.d.ts +3 -0
  22. package/dist/scope/badge.d.ts.map +1 -0
  23. package/dist/scope/badge.js +23 -0
  24. package/dist/scope/badge.js.map +1 -0
  25. package/dist/scope/bindings-sidecar.d.ts +2 -5
  26. package/dist/scope/bindings-sidecar.d.ts.map +1 -1
  27. package/dist/scope/bindings-sidecar.js +13 -17
  28. package/dist/scope/bindings-sidecar.js.map +1 -1
  29. package/dist/scope/display.d.ts +3 -3
  30. package/dist/scope/display.d.ts.map +1 -1
  31. package/dist/scope/display.js +41 -31
  32. package/dist/scope/display.js.map +1 -1
  33. package/dist/scope/live-display-registry.d.ts +25 -0
  34. package/dist/scope/live-display-registry.d.ts.map +1 -0
  35. package/dist/scope/live-display-registry.js +64 -0
  36. package/dist/scope/live-display-registry.js.map +1 -0
  37. package/dist/server/index.d.ts +2 -0
  38. package/dist/server/index.d.ts.map +1 -1
  39. package/dist/server/index.js +3 -0
  40. package/dist/server/index.js.map +1 -1
  41. package/package.json +2 -2
  42. package/static-ui/assets/index-CQoBRW1p.js +409 -0
  43. package/static-ui/assets/index-wleyGzod.css +1 -0
  44. package/static-ui/index.html +2 -2
  45. package/static-ui/assets/index-BnvBkGNu.js +0 -404
  46. package/static-ui/assets/index-D2upmaZj.css +0 -1
@@ -3,11 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.readBindingForSession = readBindingForSession;
6
+ exports.upsertWorkspaceDisplayBinding = upsertWorkspaceDisplayBinding;
7
7
  exports.readBindingForDisplay = readBindingForDisplay;
8
- exports.upsertBindingForSession = upsertBindingForSession;
9
8
  exports.readBindingForWorkspace = readBindingForWorkspace;
10
- exports.upsertBindingForWorkspace = upsertBindingForWorkspace;
11
9
  const promises_1 = __importDefault(require("node:fs/promises"));
12
10
  const node_path_1 = __importDefault(require("node:path"));
13
11
  const shared_1 = require("@agent-deck/shared");
@@ -34,28 +32,26 @@ async function writeBindingsFile(bindings) {
34
32
  await promises_1.default.mkdir(node_path_1.default.dirname(filePath), { recursive: true });
35
33
  await promises_1.default.writeFile(filePath, `${JSON.stringify(bindings, null, 2)}\n`, 'utf8');
36
34
  }
37
- async function readBindingForSession(sessionId) {
35
+ function pruneLegacySessionKeys(bindings) {
36
+ for (const key of Object.keys(bindings)) {
37
+ if ((0, shared_1.isBindingSidecarSessionKey)(key)) {
38
+ delete bindings[key];
39
+ }
40
+ }
41
+ }
42
+ /** Write workspace-keyed binding for terminal status line; prune orphaned MCP session UUID keys. */
43
+ async function upsertWorkspaceDisplayBinding(workspaceRoot, entry) {
38
44
  const bindings = await readBindingsFile();
39
- return bindings[sessionId.trim()] ?? null;
45
+ bindings[(0, shared_1.normalizeWorkspaceRoot)(workspaceRoot)] = entry;
46
+ pruneLegacySessionKeys(bindings);
47
+ await writeBindingsFile(bindings);
40
48
  }
41
49
  async function readBindingForDisplay(options) {
42
50
  const bindings = await readBindingsFile();
43
51
  return (0, shared_1.resolveBindingEntry)(bindings, options);
44
52
  }
45
- async function upsertBindingForSession(sessionId, entry) {
46
- const bindings = await readBindingsFile();
47
- bindings[sessionId.trim()] = entry;
48
- await writeBindingsFile(bindings);
49
- }
50
- /** @deprecated Legacy workspace-keyed sidecar; status display is session-scoped. */
51
53
  async function readBindingForWorkspace(workspaceRoot) {
52
54
  const bindings = await readBindingsFile();
53
55
  return (0, shared_1.lookupWorkspaceBinding)(bindings, workspaceRoot);
54
56
  }
55
- /** @deprecated Legacy workspace-keyed sidecar; use upsertBindingForSession. */
56
- async function upsertBindingForWorkspace(workspaceRoot, entry) {
57
- const bindings = await readBindingsFile();
58
- bindings[(0, shared_1.normalizeWorkspaceRoot)(workspaceRoot)] = entry;
59
- await writeBindingsFile(bindings);
60
- }
61
57
  //# sourceMappingURL=bindings-sidecar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bindings-sidecar.js","sourceRoot":"","sources":["../../src/scope/bindings-sidecar.ts"],"names":[],"mappings":";;;;;AAuCA,sDAGC;AAED,sDAMC;AAED,0DAOC;AAGD,0DAGC;AAGD,8DAOC;AA3ED,gEAAkC;AAClC,0DAA6B;AAC7B,+CAS4B;AAE5B,KAAK,UAAU,gBAAgB;IAC7B,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,KAAK,MAAM,QAAQ,IAAI,IAAA,mCAA0B,GAAE,EAAE,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,2BAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,QAAsB;IACrD,MAAM,QAAQ,GAAG,IAAA,gCAAuB,GAAE,CAAC;IAC3C,MAAM,kBAAE,CAAC,KAAK,CAAC,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,kBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACjF,CAAC;AAEM,KAAK,UAAU,qBAAqB,CAAC,SAAiB;IAC3D,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC1C,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC;AAC5C,CAAC;AAEM,KAAK,UAAU,qBAAqB,CAAC,OAG3C;IACC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC1C,OAAO,IAAA,4BAAmB,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAEM,KAAK,UAAU,uBAAuB,CAC3C,SAAiB,EACjB,KAAmB;IAEnB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC;IACnC,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED,oFAAoF;AAC7E,KAAK,UAAU,uBAAuB,CAAC,aAAqB;IACjE,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC1C,OAAO,IAAA,+BAAsB,EAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AACzD,CAAC;AAED,+EAA+E;AACxE,KAAK,UAAU,yBAAyB,CAC7C,aAAqB,EACrB,KAAmB;IAEnB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC1C,QAAQ,CAAC,IAAA,+BAAsB,EAAC,aAAa,CAAC,CAAC,GAAG,KAAK,CAAC;IACxD,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"bindings-sidecar.js","sourceRoot":"","sources":["../../src/scope/bindings-sidecar.ts"],"names":[],"mappings":";;;;;AAiDA,sEAQC;AAED,sDAMC;AAED,0DAGC;AAtED,gEAAkC;AAClC,0DAA6B;AAC7B,+CAU4B;AAE5B,KAAK,UAAU,gBAAgB;IAC7B,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,KAAK,MAAM,QAAQ,IAAI,IAAA,mCAA0B,GAAE,EAAE,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,2BAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,QAAsB;IACrD,MAAM,QAAQ,GAAG,IAAA,gCAAuB,GAAE,CAAC;IAC3C,MAAM,kBAAE,CAAC,KAAK,CAAC,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,kBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAsB;IACpD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,IAAI,IAAA,mCAA0B,EAAC,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC;AAED,oGAAoG;AAC7F,KAAK,UAAU,6BAA6B,CACjD,aAAqB,EACrB,KAAmB;IAEnB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC1C,QAAQ,CAAC,IAAA,+BAAsB,EAAC,aAAa,CAAC,CAAC,GAAG,KAAK,CAAC;IACxD,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAEM,KAAK,UAAU,qBAAqB,CAAC,OAG3C;IACC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC1C,OAAO,IAAA,4BAAmB,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAEM,KAAK,UAAU,uBAAuB,CAAC,aAAqB;IACjE,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC1C,OAAO,IAAA,+BAAsB,EAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AACzD,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import { DeckDisplay } from '@agent-deck/shared';
2
2
  import { DatabaseManager } from '../models/database';
3
+ import { LiveDisplayRegistry } from './live-display-registry';
3
4
  export type ResolveDeckDisplayInput = {
4
- sessionId?: string;
5
5
  workspaceRoot: string;
6
6
  };
7
- /** Resolve bound-deck display for a CLI/MCP session (session sidecar → env → manifest → unbound). */
8
- export declare function resolveDeckDisplay(input: ResolveDeckDisplayInput, db: DatabaseManager): Promise<DeckDisplay>;
7
+ /** Resolve bound-deck display from live MCP session registry only (no sidecar/manifest guessing). */
8
+ export declare function resolveDeckDisplay(input: ResolveDeckDisplayInput, db: DatabaseManager, registry: LiveDisplayRegistry): Promise<DeckDisplay>;
9
9
  //# sourceMappingURL=display.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/scope/display.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EAIZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAMrD,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AA+BF,qGAAqG;AACrG,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,uBAAuB,EAC9B,EAAE,EAAE,eAAe,GAClB,OAAO,CAAC,WAAW,CAAC,CA6BtB"}
1
+ {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/scope/display.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAIZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAK9D,MAAM,MAAM,uBAAuB,GAAG;IACpC,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAgEF,qGAAqG;AACrG,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,uBAAuB,EAC9B,EAAE,EAAE,eAAe,EACnB,QAAQ,EAAE,mBAAmB,GAC5B,OAAO,CAAC,WAAW,CAAC,CAetB"}
@@ -2,56 +2,66 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.resolveDeckDisplay = resolveDeckDisplay;
4
4
  const shared_1 = require("@agent-deck/shared");
5
- const repo_deck_1 = require("./repo-deck");
6
- const bindings_sidecar_1 = require("./bindings-sidecar");
7
5
  const EMPTY_COUNTS = { mcp: 0, credentials: 0, playbooks: 0 };
6
+ const DEFAULT_MCP_PORT = 11112;
7
+ async function isMcpServerUp() {
8
+ const host = process.env.AGENT_DECK_HOST?.trim() || '127.0.0.1';
9
+ const parsed = Number.parseInt(process.env.AGENT_DECK_MCP_PORT ?? '', 10);
10
+ const port = Number.isFinite(parsed) ? parsed : DEFAULT_MCP_PORT;
11
+ const controller = new AbortController();
12
+ const timer = setTimeout(() => controller.abort(), 800);
13
+ try {
14
+ const response = await fetch(`http://${host}:${port}/health`, { signal: controller.signal });
15
+ if (!response.ok) {
16
+ return false;
17
+ }
18
+ const body = (await response.json());
19
+ return body.service === 'agent-deck-mcp-server';
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ finally {
25
+ clearTimeout(timer);
26
+ }
27
+ }
8
28
  function buildDisplay(input, source, deck, options) {
9
29
  const agentDeckOnline = options?.agentDeckOnline ?? true;
10
- const cardCounts = deck ? (0, shared_1.countDeckCards)(deck) : options?.sidecar?.cardCounts ?? EMPTY_COUNTS;
11
- const deckName = deck?.name ?? options?.sidecar?.deckName ?? null;
12
- const deckId = deck?.id ?? options?.sidecar?.deckId ?? null;
13
- const updatedAt = options?.sidecar?.updatedAt;
30
+ const mcpOnline = options?.mcpOnline ?? true;
31
+ const cardCounts = deck ? (0, shared_1.countDeckCards)(deck) : options?.liveCardCounts ?? EMPTY_COUNTS;
32
+ const deckName = deck?.name ?? options?.liveDeckName ?? null;
33
+ const deckId = deck?.id ?? null;
34
+ const updatedAt = options?.updatedAt;
14
35
  return {
15
36
  workspaceRoot: input.workspaceRoot,
16
- sessionId: input.sessionId ?? null,
17
37
  deckId,
18
38
  deckName,
19
39
  source,
20
40
  cardCounts,
21
- oauthWarningCount: options?.sidecar?.oauthWarningCount,
22
41
  agentDeckOnline,
42
+ mcpOnline,
23
43
  updatedAt,
24
44
  displayLine: (0, shared_1.formatDisplayLine)(deckName, cardCounts, {
25
45
  offline: !agentDeckOnline,
46
+ mcpOffline: agentDeckOnline && !mcpOnline,
26
47
  updatedAt,
27
48
  }),
28
49
  };
29
50
  }
30
- /** Resolve bound-deck display for a CLI/MCP session (session sidecar → env → manifest → unbound). */
31
- async function resolveDeckDisplay(input, db) {
51
+ /** Resolve bound-deck display from live MCP session registry only (no sidecar/manifest guessing). */
52
+ async function resolveDeckDisplay(input, db, registry) {
32
53
  const normalizedRoot = input.workspaceRoot.trim();
33
- const sessionId = input.sessionId?.trim();
34
- const sidecar = await (0, bindings_sidecar_1.readBindingForDisplay)({ sessionId, workspaceRoot: normalizedRoot });
35
- if (sidecar) {
36
- const deck = await db.getDeck(sidecar.deckId);
37
- return buildDisplay({ sessionId, workspaceRoot: normalizedRoot }, sidecar.source, deck, {
38
- sidecar,
54
+ const live = registry.findForWorkspace(normalizedRoot);
55
+ const mcpOnline = live ? true : await isMcpServerUp();
56
+ if (live) {
57
+ const deck = await db.getDeck(live.deckId);
58
+ return buildDisplay({ workspaceRoot: normalizedRoot }, live.source, deck, {
59
+ mcpOnline,
60
+ updatedAt: live.updatedAt,
61
+ liveDeckName: live.deckName,
62
+ liveCardCounts: live.cardCounts,
39
63
  });
40
64
  }
41
- const envDeckId = process.env.AGENT_DECK_DECK_ID?.trim();
42
- if (envDeckId) {
43
- const deck = await db.getDeck(envDeckId);
44
- if (deck) {
45
- return buildDisplay({ sessionId, workspaceRoot: normalizedRoot }, 'env', deck);
46
- }
47
- }
48
- const manifest = await (0, repo_deck_1.loadRepoDeckManifest)(normalizedRoot);
49
- if (manifest) {
50
- const deck = await db.getDeck(manifest.deck_id);
51
- if (deck) {
52
- return buildDisplay({ sessionId, workspaceRoot: normalizedRoot }, 'repo_manifest', deck);
53
- }
54
- }
55
- return buildDisplay({ sessionId, workspaceRoot: normalizedRoot }, 'unbound', null);
65
+ return buildDisplay({ workspaceRoot: normalizedRoot }, 'unbound', null, { mcpOnline });
56
66
  }
57
67
  //# sourceMappingURL=display.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/scope/display.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/scope/display.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { DeckCardCounts, DeckDisplaySource } from '@agent-deck/shared';
2
+ export type LiveDisplayEntry = {
3
+ mcpSessionId: string;
4
+ workspaceRoot: string;
5
+ deckId: string;
6
+ deckName: string;
7
+ source: Exclude<DeckDisplaySource, 'unbound'>;
8
+ cardCounts: DeckCardCounts;
9
+ updatedAt: string;
10
+ badge: string;
11
+ clientName?: string;
12
+ lastActivityAt: string;
13
+ };
14
+ export type LiveDisplayUpsert = Omit<LiveDisplayEntry, 'badge' | 'lastActivityAt'>;
15
+ /** In-memory registry of live MCP session binds (status line reads reality only). */
16
+ export declare class LiveDisplayRegistry {
17
+ private bySessionId;
18
+ upsert(input: LiveDisplayUpsert): LiveDisplayEntry;
19
+ remove(mcpSessionId: string): void;
20
+ touch(mcpSessionId: string, at: string): void;
21
+ list(): LiveDisplayEntry[];
22
+ /** Nearest workspace bind walking up from workspaceRoot (monorepo walk-up). */
23
+ findForWorkspace(workspaceRoot: string): LiveDisplayEntry | null;
24
+ }
25
+ //# sourceMappingURL=live-display-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-display-registry.d.ts","sourceRoot":"","sources":["../../src/scope/live-display-registry.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,iBAAiB,EAElB,MAAM,oBAAoB,CAAC;AAG5B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;IAC9C,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,gBAAgB,CAAC,CAAC;AAEnF,qFAAqF;AACrF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAuC;IAE1D,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,gBAAgB;IAelD,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAIlC,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAO7C,IAAI,IAAI,gBAAgB,EAAE;IAM1B,+EAA+E;IAC/E,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;CAwBjE"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LiveDisplayRegistry = void 0;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ const shared_1 = require("@agent-deck/shared");
9
+ const badge_1 = require("./badge");
10
+ /** In-memory registry of live MCP session binds (status line reads reality only). */
11
+ class LiveDisplayRegistry {
12
+ bySessionId = new Map();
13
+ upsert(input) {
14
+ const existing = this.bySessionId.get(input.mcpSessionId);
15
+ const badge = existing?.badge ??
16
+ (0, badge_1.assignBadge)(new Set([...this.bySessionId.values()].map((entry) => entry.badge)));
17
+ const entry = {
18
+ ...input,
19
+ clientName: input.clientName ?? existing?.clientName,
20
+ badge,
21
+ lastActivityAt: input.updatedAt,
22
+ };
23
+ this.bySessionId.set(input.mcpSessionId, entry);
24
+ return entry;
25
+ }
26
+ remove(mcpSessionId) {
27
+ this.bySessionId.delete(mcpSessionId);
28
+ }
29
+ touch(mcpSessionId, at) {
30
+ const entry = this.bySessionId.get(mcpSessionId);
31
+ if (entry && at > entry.lastActivityAt) {
32
+ entry.lastActivityAt = at;
33
+ }
34
+ }
35
+ list() {
36
+ return [...this.bySessionId.values()].sort((a, b) => a.lastActivityAt < b.lastActivityAt ? 1 : a.lastActivityAt > b.lastActivityAt ? -1 : 0);
37
+ }
38
+ /** Nearest workspace bind walking up from workspaceRoot (monorepo walk-up). */
39
+ findForWorkspace(workspaceRoot) {
40
+ let current = (0, shared_1.normalizeWorkspaceRoot)(workspaceRoot);
41
+ while (true) {
42
+ let best = null;
43
+ for (const entry of this.bySessionId.values()) {
44
+ if ((0, shared_1.normalizeWorkspaceRoot)(entry.workspaceRoot) !== current) {
45
+ continue;
46
+ }
47
+ if (!best || entry.updatedAt > best.updatedAt) {
48
+ best = entry;
49
+ }
50
+ }
51
+ if (best) {
52
+ return best;
53
+ }
54
+ const parent = node_path_1.default.dirname(current);
55
+ if (parent === current) {
56
+ break;
57
+ }
58
+ current = parent;
59
+ }
60
+ return null;
61
+ }
62
+ }
63
+ exports.LiveDisplayRegistry = LiveDisplayRegistry;
64
+ //# sourceMappingURL=live-display-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-display-registry.js","sourceRoot":"","sources":["../../src/scope/live-display-registry.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA6B;AAC7B,+CAI4B;AAC5B,mCAAsC;AAiBtC,qFAAqF;AACrF,MAAa,mBAAmB;IACtB,WAAW,GAAG,IAAI,GAAG,EAA4B,CAAC;IAE1D,MAAM,CAAC,KAAwB;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,KAAK,GACT,QAAQ,EAAE,KAAK;YACf,IAAA,mBAAW,EAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnF,MAAM,KAAK,GAAqB;YAC9B,GAAG,KAAK;YACR,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,QAAQ,EAAE,UAAU;YACpD,KAAK;YACL,cAAc,EAAE,KAAK,CAAC,SAAS;SAChC,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,YAAoB;QACzB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,YAAoB,EAAE,EAAU;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;YACvC,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAClD,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACvF,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,gBAAgB,CAAC,aAAqB;QACpC,IAAI,OAAO,GAAG,IAAA,+BAAsB,EAAC,aAAa,CAAC,CAAC;QACpD,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,IAAI,GAA4B,IAAI,CAAC;YACzC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC9C,IAAI,IAAA,+BAAsB,EAAC,KAAK,CAAC,aAAa,CAAC,KAAK,OAAO,EAAE,CAAC;oBAC5D,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC9C,IAAI,GAAG,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YACD,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,MAAM,GAAG,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBACvB,MAAM;YACR,CAAC;YACD,OAAO,GAAG,MAAM,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA5DD,kDA4DC"}
@@ -6,6 +6,7 @@ import { ServiceStatusUpdate, DeckUpdate, WebSocketMessage } from '@agent-deck/s
6
6
  import { CredentialManager, OAuthClientSecretVault, OAuthTokenVault } from '../vault';
7
7
  import { CollectionWarningService } from '../services/collection-warning-service';
8
8
  import { PlaybookManager } from '../playbooks/playbook-manager';
9
+ import { LiveDisplayRegistry } from '../scope/live-display-registry';
9
10
  export declare function createServer(): Promise<import("fastify").FastifyInstance<import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>, import("http").IncomingMessage, import("http").ServerResponse<import("http").IncomingMessage>, import("fastify").FastifyBaseLogger, import("fastify").FastifyTypeProviderDefault>>;
10
11
  declare module 'fastify' {
11
12
  interface FastifyInstance {
@@ -18,6 +19,7 @@ declare module 'fastify' {
18
19
  credentialManager: CredentialManager;
19
20
  playbookManager: PlaybookManager;
20
21
  collectionWarningService: CollectionWarningService;
22
+ liveDisplayRegistry: LiveDisplayRegistry;
21
23
  broadcastServiceUpdate: (update: ServiceStatusUpdate) => void;
22
24
  broadcastDeckUpdate: (update: DeckUpdate) => void;
23
25
  broadcastToAll: (message: WebSocketMessage) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAUzD,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAqB,iBAAiB,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEzG,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAElF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAIhE,wBAAsB,YAAY,qUAgHjC;AAGD,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,eAAe;QACvB,EAAE,EAAE,eAAe,CAAC;QACpB,cAAc,EAAE,cAAc,CAAC;QAC/B,SAAS,EAAE,gBAAgB,CAAC;QAC5B,YAAY,EAAE,YAAY,CAAC;QAC3B,sBAAsB,EAAE,sBAAsB,CAAC;QAC/C,eAAe,EAAE,eAAe,CAAC;QACjC,iBAAiB,EAAE,iBAAiB,CAAC;QACrC,eAAe,EAAE,eAAe,CAAC;QACjC,wBAAwB,EAAE,wBAAwB,CAAC;QACnD,sBAAsB,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;QAC9D,mBAAmB,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;QAClD,cAAc,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;KACrD;CACF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAUzD,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAqB,iBAAiB,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEzG,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAElF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE,wBAAsB,YAAY,qUAkHjC;AAGD,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,eAAe;QACvB,EAAE,EAAE,eAAe,CAAC;QACpB,cAAc,EAAE,cAAc,CAAC;QAC/B,SAAS,EAAE,gBAAgB,CAAC;QAC5B,YAAY,EAAE,YAAY,CAAC;QAC3B,sBAAsB,EAAE,sBAAsB,CAAC;QAC/C,eAAe,EAAE,eAAe,CAAC;QACjC,iBAAiB,EAAE,iBAAiB,CAAC;QACrC,eAAe,EAAE,eAAe,CAAC;QACjC,wBAAwB,EAAE,wBAAwB,CAAC;QACnD,mBAAmB,EAAE,mBAAmB,CAAC;QACzC,sBAAsB,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;QAC9D,mBAAmB,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;QAClD,cAAc,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;KACrD;CACF"}
@@ -30,6 +30,7 @@ const collection_1 = require("../routes/collection");
30
30
  const playbook_manager_1 = require("../playbooks/playbook-manager");
31
31
  const version_1 = require("../lib/version");
32
32
  const seed_default_services_1 = require("../data/seed-default-services");
33
+ const live_display_registry_1 = require("../scope/live-display-registry");
33
34
  async function createServer() {
34
35
  const fastify = (0, fastify_1.default)({
35
36
  logger: {
@@ -60,6 +61,7 @@ async function createServer() {
60
61
  void serviceManager.backfillMissingIcons();
61
62
  const playbookManager = new playbook_manager_1.PlaybookManager(db);
62
63
  const collectionWarningService = new collection_warning_service_1.CollectionWarningService();
64
+ const liveDisplayRegistry = new live_display_registry_1.LiveDisplayRegistry();
63
65
  // Register routes
64
66
  await fastify.register(websocket_2.registerWebSocketRoutes, { prefix: '/api/ws' });
65
67
  await fastify.register(services_1.registerServiceRoutes, { prefix: '/api/services' });
@@ -111,6 +113,7 @@ async function createServer() {
111
113
  fastify.decorate('credentialManager', credentialManager);
112
114
  fastify.decorate('playbookManager', playbookManager);
113
115
  fastify.decorate('collectionWarningService', collectionWarningService);
116
+ fastify.decorate('liveDisplayRegistry', liveDisplayRegistry);
114
117
  // Add broadcast decorators for WebSocket functionality
115
118
  fastify.decorate('broadcastServiceUpdate', (update) => {
116
119
  console.log('Broadcasting service update:', update);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-deck/backend",
3
- "version": "1.2.8",
3
+ "version": "1.2.10",
4
4
  "description": "Agent Deck backend API, MCP server, and vault",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -37,7 +37,7 @@
37
37
  "prepublishOnly": "node ../../scripts/pre-publish-check.mjs && npm run build"
38
38
  },
39
39
  "dependencies": {
40
- "@agent-deck/shared": "^1.2.8",
40
+ "@agent-deck/shared": "^1.2.10",
41
41
  "@fastify/cors": "^10.0.0",
42
42
  "@fastify/static": "^8.0.0",
43
43
  "@fastify/websocket": "^11.2.0",