@agent-deck/backend 1.2.9 → 1.3.0

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 (50) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/cli-runtime.d.ts +40 -0
  3. package/dist/cli-runtime.d.ts.map +1 -1
  4. package/dist/cli-runtime.js +67 -0
  5. package/dist/cli-runtime.js.map +1 -1
  6. package/dist/lib/agent-deck-context.d.ts +1 -1
  7. package/dist/lib/agent-deck-context.d.ts.map +1 -1
  8. package/dist/lib/agent-deck-context.js +7 -26
  9. package/dist/lib/agent-deck-context.js.map +1 -1
  10. package/dist/mcp-server.d.ts +9 -1
  11. package/dist/mcp-server.d.ts.map +1 -1
  12. package/dist/mcp-server.js +64 -835
  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/mcp-tools/deck-card-ops.d.ts +21 -0
  19. package/dist/mcp-tools/deck-card-ops.d.ts.map +1 -0
  20. package/dist/mcp-tools/deck-card-ops.js +94 -0
  21. package/dist/mcp-tools/deck-card-ops.js.map +1 -0
  22. package/dist/mcp-tools/profile.d.ts +17 -0
  23. package/dist/mcp-tools/profile.d.ts.map +1 -0
  24. package/dist/mcp-tools/profile.js +25 -0
  25. package/dist/mcp-tools/profile.js.map +1 -0
  26. package/dist/mcp-tools/register.d.ts +49 -0
  27. package/dist/mcp-tools/register.d.ts.map +1 -0
  28. package/dist/mcp-tools/register.js +635 -0
  29. package/dist/mcp-tools/register.js.map +1 -0
  30. package/dist/mcp-tools/test-harness.d.ts +31 -0
  31. package/dist/mcp-tools/test-harness.d.ts.map +1 -0
  32. package/dist/mcp-tools/test-harness.js +108 -0
  33. package/dist/mcp-tools/test-harness.js.map +1 -0
  34. package/dist/routes/scope.d.ts.map +1 -1
  35. package/dist/routes/scope.js +29 -59
  36. package/dist/routes/scope.js.map +1 -1
  37. package/dist/scope/badge.d.ts +3 -0
  38. package/dist/scope/badge.d.ts.map +1 -0
  39. package/dist/scope/badge.js +23 -0
  40. package/dist/scope/badge.js.map +1 -0
  41. package/dist/scope/live-display-registry.d.ts +7 -1
  42. package/dist/scope/live-display-registry.d.ts.map +1 -1
  43. package/dist/scope/live-display-registry.js +22 -2
  44. package/dist/scope/live-display-registry.js.map +1 -1
  45. package/package.json +2 -2
  46. package/static-ui/assets/index-CQoBRW1p.js +409 -0
  47. package/static-ui/assets/index-wleyGzod.css +1 -0
  48. package/static-ui/index.html +2 -2
  49. package/static-ui/assets/index-BnvBkGNu.js +0 -404
  50. package/static-ui/assets/index-D2upmaZj.css +0 -1
@@ -1,12 +1,79 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlaybookDependencyError = void 0;
3
4
  exports.createCliCredentialManager = createCliCredentialManager;
5
+ exports.createCliCollectionAdmin = createCliCollectionAdmin;
4
6
  const database_1 = require("./models/database");
5
7
  const paths_1 = require("./lib/paths");
6
8
  const vault_1 = require("./vault");
9
+ const playbook_manager_1 = require("./playbooks/playbook-manager");
10
+ Object.defineProperty(exports, "PlaybookDependencyError", { enumerable: true, get: function () { return playbook_manager_1.PlaybookDependencyError; } });
7
11
  /** Shared credential manager for the agent-deck CLI (vault + exec). */
8
12
  function createCliCredentialManager() {
9
13
  const db = new database_1.DatabaseManager((0, paths_1.resolveDatabasePath)());
10
14
  return new vault_1.CredentialManager(db, (0, vault_1.createSecretStore)());
11
15
  }
16
+ /**
17
+ * Rare collection/deck ops for the CLI (not MCP).
18
+ * Delete service/playbook/deck — same dependency checks as the dashboard API.
19
+ */
20
+ function createCliCollectionAdmin() {
21
+ const db = new database_1.DatabaseManager((0, paths_1.resolveDatabasePath)());
22
+ const playbooks = new playbook_manager_1.PlaybookManager(db);
23
+ return {
24
+ async deleteService(id) {
25
+ const service = await db.getService(id);
26
+ if (!service) {
27
+ return { ok: false, error: `Service not found: ${id}` };
28
+ }
29
+ const dependents = await db.getPlaybooksDependingOnService(id);
30
+ if (dependents.length > 0) {
31
+ const titles = dependents.map((playbook) => playbook.title).join(', ');
32
+ return {
33
+ ok: false,
34
+ error: `Cannot delete MCP "${service.name}": referenced by playbook(s): ${titles}`,
35
+ };
36
+ }
37
+ const deleted = await db.deleteService(id);
38
+ if (!deleted) {
39
+ return { ok: false, error: `Service not found: ${id}` };
40
+ }
41
+ return { ok: true };
42
+ },
43
+ async deletePlaybook(id) {
44
+ const deleted = await playbooks.delete(id);
45
+ if (!deleted) {
46
+ return { ok: false, error: `Playbook not found: ${id}` };
47
+ }
48
+ return { ok: true };
49
+ },
50
+ async deleteDeck(id) {
51
+ const deck = await db.getDeck(id);
52
+ if (!deck) {
53
+ return { ok: false, error: `Deck not found: ${id}` };
54
+ }
55
+ const deleted = await db.deleteDeck(id);
56
+ if (!deleted) {
57
+ return { ok: false, error: `Deck not found: ${id}` };
58
+ }
59
+ return { ok: true };
60
+ },
61
+ async listServices() {
62
+ const services = await db.getAllServices();
63
+ return services.map((service) => ({
64
+ id: service.id,
65
+ name: service.name,
66
+ type: service.type,
67
+ }));
68
+ },
69
+ async listPlaybooks() {
70
+ const items = await playbooks.list();
71
+ return items.map((playbook) => ({ id: playbook.id, title: playbook.title }));
72
+ },
73
+ async listDecks() {
74
+ const decks = await db.getAllDecks();
75
+ return decks.map((deck) => ({ id: deck.id, name: deck.name }));
76
+ },
77
+ };
78
+ }
12
79
  //# sourceMappingURL=cli-runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-runtime.js","sourceRoot":"","sources":["../src/cli-runtime.ts"],"names":[],"mappings":";;AAKA,gEAGC;AARD,gDAAoD;AACpD,uCAAkD;AAClD,mCAA+D;AAE/D,uEAAuE;AACvE,SAAgB,0BAA0B;IACxC,MAAM,EAAE,GAAG,IAAI,0BAAe,CAAC,IAAA,2BAAmB,GAAE,CAAC,CAAC;IACtD,OAAO,IAAI,yBAAiB,CAAC,EAAE,EAAE,IAAA,yBAAiB,GAAE,CAAC,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"cli-runtime.js","sourceRoot":"","sources":["../src/cli-runtime.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,6 @@ import { DatabaseManager } from '../models/database';
3
3
  export declare class AgentDeckContextError extends Error {
4
4
  constructor(message: string);
5
5
  }
6
- /** Resolve which deck an agent request is scoped to (workspace manifest or explicit deck id). */
6
+ /** Resolve which deck an agent request is scoped to (session deck id header only). */
7
7
  export declare function resolveAgentDeckId(request: FastifyRequest, db: DatabaseManager): Promise<string>;
8
8
  //# sourceMappingURL=agent-deck-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-deck-context.d.ts","sourceRoot":"","sources":["../../src/lib/agent-deck-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAKzC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAOD,iGAAiG;AACjG,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EACvB,EAAE,EAAE,eAAe,GAClB,OAAO,CAAC,MAAM,CAAC,CAwCjB"}
1
+ {"version":3,"file":"agent-deck-context.d.ts","sourceRoot":"","sources":["../../src/lib/agent-deck-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAOD,sFAAsF;AACtF,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EACvB,EAAE,EAAE,eAAe,GAClB,OAAO,CAAC,MAAM,CAAC,CAajB"}
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AgentDeckContextError = void 0;
4
4
  exports.resolveAgentDeckId = resolveAgentDeckId;
5
5
  const shared_1 = require("@agent-deck/shared");
6
- const repo_deck_1 = require("../scope/repo-deck");
7
6
  class AgentDeckContextError extends Error {
8
7
  constructor(message) {
9
8
  super(message);
@@ -15,34 +14,16 @@ function headerValue(request, name) {
15
14
  const value = request.headers[name];
16
15
  return typeof value === 'string' && value.trim() ? value.trim() : undefined;
17
16
  }
18
- /** Resolve which deck an agent request is scoped to (workspace manifest or explicit deck id). */
17
+ /** Resolve which deck an agent request is scoped to (session deck id header only). */
19
18
  async function resolveAgentDeckId(request, db) {
20
19
  const deckIdHeader = headerValue(request, shared_1.AGENT_DECK_DECK_ID_HEADER);
21
- if (deckIdHeader) {
22
- const deck = await db.getDeck(deckIdHeader);
23
- if (!deck) {
24
- throw new AgentDeckContextError(`Deck not found: ${deckIdHeader}`);
25
- }
26
- return deckIdHeader;
20
+ if (!deckIdHeader) {
21
+ throw new AgentDeckContextError('No bound deck call bind_workspace with deckId (use get_decks to list decks) or switch_bound_deck');
27
22
  }
28
- const workspaceRoot = headerValue(request, shared_1.AGENT_DECK_WORKSPACE_HEADER);
29
- if (workspaceRoot) {
30
- let manifest;
31
- try {
32
- manifest = await (0, repo_deck_1.loadRepoDeckManifest)(workspaceRoot);
33
- }
34
- catch (error) {
35
- throw new AgentDeckContextError(error instanceof repo_deck_1.RepoDeckManifestError ? error.message : 'Failed to load repo deck manifest');
36
- }
37
- if (!manifest) {
38
- throw new AgentDeckContextError(`No ${'.agent-deck/deck.yaml'} found in workspace: ${workspaceRoot}`);
39
- }
40
- const deck = await db.getDeck(manifest.deck_id);
41
- if (!deck) {
42
- throw new AgentDeckContextError(`deck_id in repo manifest not found in Agent Deck: ${manifest.deck_id}`);
43
- }
44
- return manifest.deck_id;
23
+ const deck = await db.getDeck(deckIdHeader);
24
+ if (!deck) {
25
+ throw new AgentDeckContextError(`Deck not found: ${deckIdHeader}`);
45
26
  }
46
- throw new AgentDeckContextError('Agent deck context required: set x-agent-deck-workspace (with .agent-deck/deck.yaml) or x-agent-deck-deck-id');
27
+ return deckIdHeader;
47
28
  }
48
29
  //# sourceMappingURL=agent-deck-context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-deck-context.js","sourceRoot":"","sources":["../../src/lib/agent-deck-context.ts"],"names":[],"mappings":";;;AAqBA,gDA2CC;AA/DD,+CAG4B;AAE5B,kDAAiF;AAEjF,MAAa,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AALD,sDAKC;AAED,SAAS,WAAW,CAAC,OAAuB,EAAE,IAAY;IACxD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED,iGAAiG;AAC1F,KAAK,UAAU,kBAAkB,CACtC,OAAuB,EACvB,EAAmB;IAEnB,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,EAAE,kCAAyB,CAAC,CAAC;IACrE,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,qBAAqB,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,EAAE,oCAA2B,CAAC,CAAC;IACxE,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,QAAQ,CAAC;QACb,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAA,gCAAoB,EAAC,aAAa,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,qBAAqB,CAC7B,KAAK,YAAY,iCAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mCAAmC,CAC7F,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,qBAAqB,CAC7B,MAAM,uBAAuB,wBAAwB,aAAa,EAAE,CACrE,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,qBAAqB,CAC7B,qDAAqD,QAAQ,CAAC,OAAO,EAAE,CACxE,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC1B,CAAC;IAED,MAAM,IAAI,qBAAqB,CAC7B,8GAA8G,CAC/G,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"agent-deck-context.js","sourceRoot":"","sources":["../../src/lib/agent-deck-context.ts"],"names":[],"mappings":";;;AAiBA,gDAgBC;AAhCD,+CAA+D;AAG/D,MAAa,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AALD,sDAKC;AAED,SAAS,WAAW,CAAC,OAAuB,EAAE,IAAY;IACxD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED,sFAAsF;AAC/E,KAAK,UAAU,kBAAkB,CACtC,OAAuB,EACvB,EAAmB;IAEnB,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,EAAE,kCAAyB,CAAC,CAAC;IACrE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,qBAAqB,CAC7B,oGAAoG,CACrG,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,qBAAqB,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -1,22 +1,30 @@
1
1
  import express from 'express';
2
+ import { McpToolProfile } from './mcp-tools/profile';
2
3
  export declare class AgentDeckMCPServer {
3
4
  private port;
4
5
  private app;
5
6
  private backendUrl;
7
+ private toolProfile;
6
8
  private sessions;
7
9
  /** Set only while registerTools/registerResources run for a new session server. */
8
10
  private mcpServerForRegistration;
9
11
  /** Per-session workspace + optional deck override (see mcp-session-binding.ts). */
10
12
  private sessionBinding;
11
13
  private activeSessionId;
14
+ /** Session badge from the backend registry (POST /api/scope/live-display response). */
15
+ private badgeBySession;
16
+ private lastTouchAtMs;
12
17
  private get server();
13
- constructor(port?: number, backendUrl?: string);
18
+ constructor(port?: number, backendUrl?: string, toolProfile?: McpToolProfile);
14
19
  private createMcpServer;
15
20
  private getSessionId;
16
21
  private getAgentHeaders;
17
22
  private fetchDeck;
18
23
  private buildBindingPayload;
19
24
  private registerLiveDisplay;
25
+ private static readonly TOUCH_DEBOUNCE_MS;
26
+ /** Fire-and-forget lastActivityAt bump; only for sessions the registry knows. */
27
+ private touchLiveDisplay;
20
28
  private unregisterLiveDisplay;
21
29
  private callBackendAPI;
22
30
  private getBoundDeckId;
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAUA,OAAO,OAA8B,MAAM,SAAS,CAAC;AA0BrD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAiC;IACjD,mFAAmF;IACnF,OAAO,CAAC,wBAAwB,CAAwB;IACxD,mFAAmF;IACnF,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,eAAe,CAAqB;IAE5C,OAAO,KAAK,MAAM,GAKjB;gBAEW,IAAI,GAAE,MAAa,EAAE,UAAU,GAAE,MAAgC;IAc7E,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,eAAe;YAIT,SAAS;YAkBT,mBAAmB;YAYnB,mBAAmB;YA0BnB,qBAAqB;YAUrB,cAAc;YAwCd,cAAc;IAQ5B,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,SAAS;IAIjB,6EAA6E;IAC7E,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,UAAU;IAy2BlB,OAAO,CAAC,cAAc;IA8MtB,OAAO,CAAC,WAAW;IA2CnB,OAAO,CAAC,kBAAkB;YAKZ,aAAa;YAwDb,uBAAuB;IAiB/B,KAAK;IAmCL,IAAI;CAeX"}
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AASA,OAAO,OAA8B,MAAM,SAAS,CAAC;AASrD,OAAO,EAAE,cAAc,EAAyB,MAAM,qBAAqB,CAAC;AAY5E,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,QAAQ,CAAiC;IACjD,mFAAmF;IACnF,OAAO,CAAC,wBAAwB,CAAwB;IACxD,mFAAmF;IACnF,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,eAAe,CAAqB;IAC5C,uFAAuF;IACvF,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,aAAa,CAA6B;IAElD,OAAO,KAAK,MAAM,GAKjB;gBAGC,IAAI,GAAE,MAAa,EACnB,UAAU,GAAE,MAAgC,EAC5C,WAAW,CAAC,EAAE,cAAc;IAgB9B,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,eAAe;YAIT,SAAS;YAkBT,mBAAmB;YAgBnB,mBAAmB;IA+BjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAElD,iFAAiF;IACjF,OAAO,CAAC,gBAAgB;YAmBV,qBAAqB;YAUrB,cAAc;YAwCd,cAAc;IAQ5B,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,SAAS;IAIjB,6EAA6E;IAC7E,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,cAAc;IA8MtB,OAAO,CAAC,WAAW;IA4CnB,OAAO,CAAC,kBAAkB;YAKZ,aAAa;YA2Db,uBAAuB;IAkB/B,KAAK;IAiCL,IAAI;CAeX"}