@agent-deck/backend 1.9.0 → 1.10.1

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.
@@ -2,6 +2,7 @@ import type { BundleV1, ExportRequest, ImportReport } from '@agent-deck/shared';
2
2
  import { CredentialManager } from './vault';
3
3
  import { PlaybookDependencyError } from './playbooks/playbook-manager';
4
4
  import { ExportBundleError, ImportBundleError } from './export-import';
5
+ import { type StoreReindexRecord } from './store';
5
6
  /** Shared credential manager for the agent-deck CLI (vault + exec). */
6
7
  export declare function createCliCredentialManager(): CredentialManager;
7
8
  /**
@@ -80,6 +81,14 @@ export declare function createCliStore(): {
80
81
  reindex(): Promise<import("./store").StoreReindexResult>;
81
82
  };
82
83
  export type CliStore = ReturnType<typeof createCliStore>;
84
+ /**
85
+ * Last reindex outcome for `status`/`doctor`.
86
+ *
87
+ * Deliberately not a DatabaseManager: its constructor migrates the schema — which
88
+ * includes renaming duplicate deck/credential names — and a diagnostic must neither
89
+ * create a database nor write to one the running backend holds open.
90
+ */
91
+ export declare function readLastStoreReindex(): StoreReindexRecord | null;
83
92
  export { PlaybookDependencyError, ExportBundleError, ImportBundleError };
84
93
  export { syncPlaybookStubs, readUseManifest, writeUseManifest, healUseManifest, type StubSyncResult, type PlaybookStubInput, } from './playbooks/stub-sync';
85
94
  //# sourceMappingURL=cli-runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-runtime.d.ts","sourceRoot":"","sources":["../src/cli-runtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGhF,OAAO,EAAqB,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAmB,MAAM,8BAA8B,CAAC;AACxF,OAAO,EAEL,iBAAiB,EAEjB,iBAAiB,EAElB,MAAM,iBAAiB,CAAC;AAQzB,uEAAuE;AACvE,wBAAgB,0BAA0B,IAAI,iBAAiB,CAI9D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB;sBAMZ,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;uBA8B5D,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;mBAQjE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;oBAa5D,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;qBASzD,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;iBAKjD,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;qBAKxC,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;kCAmBlE,MAAM,GACb,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;EAIvE;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE7E;;GAEG;AACH,wBAAgB,qBAAqB;6BAKnB,MAAM,WACT,aAAa,GACrB,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,QAAQ,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;8BAmB5D,MAAM,GAChB,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,YAAY,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;EAqBhF;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEvE,gDAAgD;AAChD,wBAAgB,cAAc;mBAIZ;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;;EAOtD;AAED,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAEzD,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;AAEzE,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"cli-runtime.d.ts","sourceRoot":"","sources":["../src/cli-runtime.ts"],"names":[],"mappings":"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"}
@@ -8,8 +8,11 @@ exports.createCliCredentialManager = createCliCredentialManager;
8
8
  exports.createCliCollectionAdmin = createCliCollectionAdmin;
9
9
  exports.createCliExportImport = createCliExportImport;
10
10
  exports.createCliStore = createCliStore;
11
+ exports.readLastStoreReindex = readLastStoreReindex;
11
12
  const promises_1 = __importDefault(require("node:fs/promises"));
13
+ const node_fs_1 = require("node:fs");
12
14
  const node_path_1 = __importDefault(require("node:path"));
15
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
13
16
  const database_1 = require("./models/database");
14
17
  const paths_1 = require("./lib/paths");
15
18
  const vault_1 = require("./vault");
@@ -170,6 +173,33 @@ function createCliStore() {
170
173
  },
171
174
  };
172
175
  }
176
+ /**
177
+ * Last reindex outcome for `status`/`doctor`.
178
+ *
179
+ * Deliberately not a DatabaseManager: its constructor migrates the schema — which
180
+ * includes renaming duplicate deck/credential names — and a diagnostic must neither
181
+ * create a database nor write to one the running backend holds open.
182
+ */
183
+ function readLastStoreReindex() {
184
+ const dbPath = (0, paths_1.resolveDatabasePath)();
185
+ if (!(0, node_fs_1.existsSync)(dbPath)) {
186
+ return null;
187
+ }
188
+ const db = new better_sqlite3_1.default(dbPath, { readonly: true, fileMustExist: true });
189
+ try {
190
+ const row = db
191
+ .prepare('SELECT value FROM store_meta WHERE key = ?')
192
+ .get(database_1.STORE_LAST_REINDEX);
193
+ return (0, store_1.parseReindexRecord)(row?.value ?? null);
194
+ }
195
+ catch {
196
+ // Pre-store_meta database — nothing recorded yet.
197
+ return null;
198
+ }
199
+ finally {
200
+ db.close();
201
+ }
202
+ }
173
203
  var stub_sync_1 = require("./playbooks/stub-sync");
174
204
  Object.defineProperty(exports, "syncPlaybookStubs", { enumerable: true, get: function () { return stub_sync_1.syncPlaybookStubs; } });
175
205
  Object.defineProperty(exports, "readUseManifest", { enumerable: true, get: function () { return stub_sync_1.readUseManifest; } });
@@ -1 +1 @@
1
- {"version":3,"file":"cli-runtime.js","sourceRoot":"","sources":["../src/cli-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-runtime.js","sourceRoot":"","sources":["../src/cli-runtime.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,29 +1,37 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const server_1 = require("./server");
4
+ const fatal_1 = require("./lib/fatal");
5
+ // The supervisor only sees this process's exit code, so every way out of here
6
+ // has to name itself in the log first.
7
+ (0, fatal_1.installFatalHandlers)('backend');
4
8
  async function start() {
9
+ const port = process.env.PORT ? parseInt(process.env.PORT) : 8000;
10
+ const host = process.env.HOST || '127.0.0.1';
11
+ (0, fatal_1.logProcessStart)('backend', { host, port });
5
12
  try {
6
13
  const server = await (0, server_1.createServer)();
7
- const port = process.env.PORT ? parseInt(process.env.PORT) : 8000;
8
- const host = process.env.HOST || '127.0.0.1';
9
14
  await server.listen({ port, host });
10
15
  console.log(`🚀 Agent Deck Backend server running on http://${host}:${port}`);
11
16
  console.log(`📊 Health check: http://${host}:${port}/health`);
12
17
  // Graceful shutdown
13
- process.on('SIGINT', async () => {
18
+ const shutdown = async (signal) => {
19
+ (0, fatal_1.logExit)('backend', 0, `signal ${signal}`);
14
20
  console.log('\n🛑 Shutting down server...');
15
- await server.close();
21
+ try {
22
+ await server.close();
23
+ }
24
+ catch (error) {
25
+ (0, fatal_1.logFatalAndExit)('backend', `shutdown after ${signal} failed`, error);
26
+ }
16
27
  process.exit(0);
17
- });
18
- process.on('SIGTERM', async () => {
19
- console.log('\n🛑 Shutting down server...');
20
- await server.close();
21
- process.exit(0);
22
- });
28
+ };
29
+ process.on('SIGINT', () => void shutdown('SIGINT'));
30
+ process.on('SIGTERM', () => void shutdown('SIGTERM'));
23
31
  }
24
32
  catch (error) {
25
- console.error('❌ Failed to start server:', error);
26
- process.exit(1);
33
+ // logFatalAndExit writes the message, the cause and a hint, synchronously.
34
+ (0, fatal_1.logFatalAndExit)('backend', `startup failed before listening on ${host}:${port}`, error);
27
35
  }
28
36
  }
29
37
  start();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,qCAAwC;AAExC,KAAK,UAAU,KAAK;IAClB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAY,GAAE,CAAC;QAEpC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,WAAW,CAAC;QAE7C,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAEpC,OAAO,CAAC,GAAG,CAAC,kDAAkD,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,IAAI,IAAI,SAAS,CAAC,CAAC;QAE9D,oBAAoB;QACpB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC9B,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAC5C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAC/B,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAC5C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IAEL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,qCAAwC;AACxC,uCAA8F;AAE9F,8EAA8E;AAC9E,uCAAuC;AACvC,IAAA,4BAAoB,EAAC,SAAS,CAAC,CAAC;AAEhC,KAAK,UAAU,KAAK;IAClB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,WAAW,CAAC;IAE7C,IAAA,uBAAe,EAAC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAY,GAAE,CAAC;QAEpC,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAEpC,OAAO,CAAC,GAAG,CAAC,kDAAkD,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,IAAI,IAAI,SAAS,CAAC,CAAC;QAE9D,oBAAoB;QACpB,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAsB,EAAE,EAAE;YAChD,IAAA,eAAO,EAAC,SAAS,EAAE,CAAC,EAAE,UAAU,MAAM,EAAE,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAC5C,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAA,uBAAe,EAAC,SAAS,EAAE,kBAAkB,MAAM,SAAS,EAAE,KAAK,CAAC,CAAC;YACvE,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,2EAA2E;QAC3E,IAAA,uBAAe,EAAC,SAAS,EAAE,sCAAsC,IAAI,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;IAC1F,CAAC;AACH,CAAC;AAED,KAAK,EAAE,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * A child that dies during startup must say why *before* it exits: the
3
+ * supervisor only ever sees an exit code, so an unexplained `process.exit(1)`
4
+ * leaves no diagnostic anywhere. Writes go straight to fd 2 (synchronously) so
5
+ * they survive the immediate exit.
6
+ */
7
+ export type FatalLabel = 'backend' | 'mcp';
8
+ export declare function describeFatalError(error: unknown): string;
9
+ /** Actionable hints for the failures that actually take this process down. */
10
+ export declare function fatalHint(error: unknown): string | null;
11
+ export declare function formatFatalLines(label: FatalLabel, phase: string, error: unknown): string[];
12
+ /**
13
+ * Synchronous write to fd 2 — process.exit() must not be able to drop it.
14
+ * `fd` is a seam for tests; production always writes to stderr.
15
+ */
16
+ export declare function writeLogSync(text: string, fd?: number, maxRetries?: number): void;
17
+ export declare function logFatal(label: FatalLabel, phase: string, error: unknown, fd?: number): void;
18
+ export declare function logFatalAndExit(label: FatalLabel, phase: string, error: unknown): never;
19
+ /** Startup fingerprint — makes "which Node ran this?" answerable after the fact. */
20
+ export declare function logProcessStart(label: FatalLabel, fields: Record<string, string | number>, fd?: number): void;
21
+ export declare function logExit(label: FatalLabel, exitCode: number, reason: string, fd?: number): void;
22
+ /**
23
+ * Crashes outside the startup try/catch (a rejected background promise, a throw
24
+ * from a route) otherwise exit non-zero with only Node's default trace — and
25
+ * nothing that names Agent Deck to grep for.
26
+ */
27
+ export declare function installFatalHandlers(label: FatalLabel): void;
28
+ //# sourceMappingURL=fatal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fatal.d.ts","sourceRoot":"","sources":["../../src/lib/fatal.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,KAAK,CAAC;AAE3C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CASzD;AAED,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAyBvD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAW3F;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAI,EAAE,UAAU,SAAO,GAAG,IAAI,CAmB1E;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,SAAI,GAAG,IAAI,CAQvF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,CAGvF;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACvC,EAAE,SAAI,GACL,IAAI,CAQN;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,SAAI,GAAG,IAAI,CAKzF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAO5D"}
@@ -0,0 +1,122 @@
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.describeFatalError = describeFatalError;
7
+ exports.fatalHint = fatalHint;
8
+ exports.formatFatalLines = formatFatalLines;
9
+ exports.writeLogSync = writeLogSync;
10
+ exports.logFatal = logFatal;
11
+ exports.logFatalAndExit = logFatalAndExit;
12
+ exports.logProcessStart = logProcessStart;
13
+ exports.logExit = logExit;
14
+ exports.installFatalHandlers = installFatalHandlers;
15
+ const node_fs_1 = __importDefault(require("node:fs"));
16
+ function describeFatalError(error) {
17
+ if (error instanceof Error) {
18
+ const code = error.code;
19
+ const head = code ? `${error.name} [${code}]: ${error.message}` : `${error.name}: ${error.message}`;
20
+ // error.stack repeats the message on its first line; keep only the frames.
21
+ const frames = error.stack?.split('\n').slice(1) ?? [];
22
+ return frames.length > 0 ? [head, ...frames].join('\n') : head;
23
+ }
24
+ return String(error);
25
+ }
26
+ /** Actionable hints for the failures that actually take this process down. */
27
+ function fatalHint(error) {
28
+ const detail = error instanceof Error ? `${error.message} ${error.code ?? ''}` : String(error);
29
+ if (detail.includes('NODE_MODULE_VERSION') || detail.includes('ERR_DLOPEN_FAILED')) {
30
+ return [
31
+ 'A native module was built for a different Node.js version than the one running this process.',
32
+ ` running node ${process.version} (NODE_MODULE_VERSION ${process.versions.modules})`,
33
+ ' Fix: run agent-deck with the Node version you installed it under, or rebuild:',
34
+ ' npm rebuild better-sqlite3',
35
+ ' agent-deck doctor',
36
+ ].join('\n');
37
+ }
38
+ if (detail.includes('EADDRINUSE')) {
39
+ return [
40
+ 'The configured port is already taken by another process.',
41
+ ' Fix: agent-deck stop (or free the port: lsof -ti :<port> -sTCP:LISTEN | xargs kill)',
42
+ ].join('\n');
43
+ }
44
+ if (detail.includes('SQLITE_') || detail.includes('database is locked')) {
45
+ return 'The Agent Deck database could not be opened. Check ~/.agent-deck/agent_deck.db permissions and that no other instance holds it.';
46
+ }
47
+ if (detail.includes('EACCES') || detail.includes('EPERM')) {
48
+ return 'Permission denied on a file or port Agent Deck needs. Check ownership of ~/.agent-deck.';
49
+ }
50
+ return null;
51
+ }
52
+ function formatFatalLines(label, phase, error) {
53
+ const lines = [
54
+ `[agent-deck] ${label} exiting (code 1): ${phase}`,
55
+ `[agent-deck] ${label} pid ${process.pid} node ${process.version} (NODE_MODULE_VERSION ${process.versions.modules})`,
56
+ `[agent-deck] ${label} cause: ${describeFatalError(error)}`,
57
+ ];
58
+ const hint = fatalHint(error);
59
+ if (hint) {
60
+ lines.push(...hint.split('\n').map((line) => `[agent-deck] ${label} hint: ${line}`));
61
+ }
62
+ return lines;
63
+ }
64
+ /**
65
+ * Synchronous write to fd 2 — process.exit() must not be able to drop it.
66
+ * `fd` is a seam for tests; production always writes to stderr.
67
+ */
68
+ function writeLogSync(text, fd = 2, maxRetries = 1000) {
69
+ const buffer = Buffer.from(text.endsWith('\n') ? text : `${text}\n`, 'utf8');
70
+ let offset = 0;
71
+ let retries = 0;
72
+ while (offset < buffer.length) {
73
+ try {
74
+ offset += node_fs_1.default.writeSync(fd, buffer, offset, buffer.length - offset);
75
+ }
76
+ catch (error) {
77
+ // A non-blocking stderr (a TTY, or a pipe whose reader stalled) answers
78
+ // EAGAIN. Retry, but bounded: spinning forever would hang the exit path
79
+ // this diagnostic exists to keep alive.
80
+ if (error.code === 'EAGAIN' && retries < maxRetries) {
81
+ retries += 1;
82
+ continue;
83
+ }
84
+ // Nothing left to try — never let logging mask the original failure.
85
+ return;
86
+ }
87
+ }
88
+ }
89
+ function logFatal(label, phase, error, fd = 2) {
90
+ const timestamp = new Date().toISOString();
91
+ writeLogSync(formatFatalLines(label, phase, error)
92
+ .map((line) => `${timestamp} ${line}`)
93
+ .join('\n'), fd);
94
+ }
95
+ function logFatalAndExit(label, phase, error) {
96
+ logFatal(label, phase, error);
97
+ process.exit(1);
98
+ }
99
+ /** Startup fingerprint — makes "which Node ran this?" answerable after the fact. */
100
+ function logProcessStart(label, fields, fd = 2) {
101
+ const detail = Object.entries(fields)
102
+ .map(([key, value]) => `${key}=${value}`)
103
+ .join(' ');
104
+ writeLogSync(`${new Date().toISOString()} [agent-deck] ${label} starting pid=${process.pid} node=${process.version} modules=${process.versions.modules} ${detail}`, fd);
105
+ }
106
+ function logExit(label, exitCode, reason, fd = 2) {
107
+ writeLogSync(`${new Date().toISOString()} [agent-deck] ${label} exiting (code ${exitCode}): ${reason}`, fd);
108
+ }
109
+ /**
110
+ * Crashes outside the startup try/catch (a rejected background promise, a throw
111
+ * from a route) otherwise exit non-zero with only Node's default trace — and
112
+ * nothing that names Agent Deck to grep for.
113
+ */
114
+ function installFatalHandlers(label) {
115
+ process.on('uncaughtException', (error) => {
116
+ logFatalAndExit(label, 'uncaught exception', error);
117
+ });
118
+ process.on('unhandledRejection', (reason) => {
119
+ logFatalAndExit(label, 'unhandled promise rejection', reason);
120
+ });
121
+ }
122
+ //# sourceMappingURL=fatal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fatal.js","sourceRoot":"","sources":["../../src/lib/fatal.ts"],"names":[],"mappings":"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"}
package/dist/mcp-index.js CHANGED
@@ -1,32 +1,38 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const mcp_server_1 = require("./mcp-server");
4
+ const fatal_1 = require("./lib/fatal");
5
+ (0, fatal_1.installFatalHandlers)('mcp');
4
6
  async function startMCPServer() {
7
+ const port = process.env.AGENT_DECK_MCP_PORT
8
+ ? Number.parseInt(process.env.AGENT_DECK_MCP_PORT, 10)
9
+ : 3001;
10
+ const host = process.env.AGENT_DECK_MCP_HOST ?? '127.0.0.1';
11
+ const backendUrl = process.env.AGENT_DECK_BACKEND_URL ?? 'http://127.0.0.1:8000';
12
+ (0, fatal_1.logProcessStart)('mcp', { host, port, backendUrl });
5
13
  try {
6
- const port = process.env.AGENT_DECK_MCP_PORT
7
- ? Number.parseInt(process.env.AGENT_DECK_MCP_PORT, 10)
8
- : 3001;
9
- const host = process.env.AGENT_DECK_MCP_HOST ?? '127.0.0.1';
10
- const backendUrl = process.env.AGENT_DECK_BACKEND_URL ?? 'http://127.0.0.1:8000';
11
14
  console.log('🚀 Starting Agent Deck MCP Server...');
12
15
  const mcpServer = new mcp_server_1.AgentDeckMCPServer(port, backendUrl, undefined, host);
13
16
  await mcpServer.start();
14
17
  console.log('✅ Agent Deck MCP Server is ready to accept connections');
15
18
  // Keep the process alive
16
- process.on('SIGINT', async () => {
19
+ const shutdown = async (signal) => {
20
+ (0, fatal_1.logExit)('mcp', 0, `signal ${signal}`);
17
21
  console.log('\n🛑 Shutting down MCP server...');
18
- await mcpServer.stop();
22
+ try {
23
+ await mcpServer.stop();
24
+ }
25
+ catch (error) {
26
+ (0, fatal_1.logFatalAndExit)('mcp', `shutdown after ${signal} failed`, error);
27
+ }
19
28
  process.exit(0);
20
- });
21
- process.on('SIGTERM', async () => {
22
- console.log('\n🛑 Shutting down MCP server...');
23
- await mcpServer.stop();
24
- process.exit(0);
25
- });
29
+ };
30
+ process.on('SIGINT', () => void shutdown('SIGINT'));
31
+ process.on('SIGTERM', () => void shutdown('SIGTERM'));
26
32
  }
27
33
  catch (error) {
28
- console.error('❌ Failed to start MCP server:', error);
29
- process.exit(1);
34
+ // logFatalAndExit writes the message, the cause and a hint, synchronously.
35
+ (0, fatal_1.logFatalAndExit)('mcp', `startup failed before listening on ${host}:${port}`, error);
30
36
  }
31
37
  }
32
38
  startMCPServer();
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-index.js","sourceRoot":"","sources":["../src/mcp-index.ts"],"names":[],"mappings":";;AAAA,6CAAkD;AAElD,KAAK,UAAU,cAAc;IAC3B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB;YAC1C,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC;YACtD,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,WAAW,CAAC;QAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,uBAAuB,CAAC;QAEjF,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QAEpD,MAAM,SAAS,GAAG,IAAI,+BAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAC5E,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;QAExB,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QAEtE,yBAAyB;QACzB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC9B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAChD,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAC/B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAChD,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IAEL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"mcp-index.js","sourceRoot":"","sources":["../src/mcp-index.ts"],"names":[],"mappings":";;AAAA,6CAAkD;AAClD,uCAA8F;AAE9F,IAAA,4BAAoB,EAAC,KAAK,CAAC,CAAC;AAE5B,KAAK,UAAU,cAAc;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB;QAC1C,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC;QACtD,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,WAAW,CAAC;IAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,uBAAuB,CAAC;IAEjF,IAAA,uBAAe,EAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QAEpD,MAAM,SAAS,GAAG,IAAI,+BAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAC5E,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;QAExB,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QAEtE,yBAAyB;QACzB,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAsB,EAAE,EAAE;YAChD,IAAA,eAAO,EAAC,KAAK,EAAE,CAAC,EAAE,UAAU,MAAM,EAAE,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAChD,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;YACzB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAA,uBAAe,EAAC,KAAK,EAAE,kBAAkB,MAAM,SAAS,EAAE,KAAK,CAAC,CAAC;YACnE,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,2EAA2E;QAC3E,IAAA,uBAAe,EAAC,KAAK,EAAE,sCAAsC,IAAI,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAED,cAAc,EAAE,CAAC"}
@@ -1,6 +1,8 @@
1
1
  import express from 'express';
2
2
  import { McpToolProfile } from './mcp-tools/profile';
3
3
  export declare class AgentDeckMCPServer {
4
+ /** Cap on remembered stale session ids — the tally is diagnostics, not a ledger. */
5
+ private static readonly STALE_SESSION_SAMPLE_LIMIT;
4
6
  private port;
5
7
  private host;
6
8
  private app;
@@ -17,6 +19,22 @@ export declare class AgentDeckMCPServer {
17
19
  private lastTouchAtMs;
18
20
  /** In-flight live-display unregisters so `stop()` can drain them before closing. */
19
21
  private unregisterTasks;
22
+ /** Changes on every process start — how a client detects it outlived the server. */
23
+ private readonly instanceId;
24
+ private readonly startedAt;
25
+ private staleSessionCount;
26
+ /** Pre-restart session id → whether its client has since re-initialized. */
27
+ private staleSessionsById;
28
+ /**
29
+ * Sessions this process issued and then closed. A late request on one of them is
30
+ * an ordinary end-of-session race, not a client left behind by a restart, and
31
+ * tallying it would make `agent-deck status` warn about a restart that never
32
+ * happened.
33
+ */
34
+ private closedSessionIds;
35
+ private staleSessionFirstAt;
36
+ private staleSessionLastAt;
37
+ private staleSessionLastId;
20
38
  private get server();
21
39
  constructor(port?: number, backendUrl?: string, toolProfile?: McpToolProfile, host?: string);
22
40
  /** Actual listening port (resolves OS-assigned `port: 0` after `start()`). */
@@ -47,6 +65,32 @@ export declare class AgentDeckMCPServer {
47
65
  private setupResources;
48
66
  private setupRoutes;
49
67
  private getSessionIdHeader;
68
+ private getStaleSessionStats;
69
+ /**
70
+ * A client that re-initializes after a restart names the session it lost, so we
71
+ * can stop counting it as stranded. Without this the tally only ever grows and
72
+ * `agent-deck status` would warn about clients that recovered on their own
73
+ * seconds earlier.
74
+ *
75
+ * Call this only once the replacement session exists: a handshake that is then
76
+ * rejected (launch-deck auth, a transport that fails to initialize) leaves the
77
+ * client just as stranded as before, and clearing the warning for it would hide
78
+ * exactly the case operators need to see.
79
+ */
80
+ private markStaleSessionRecovered;
81
+ /**
82
+ * Answer a request carrying a session id this process never issued (NOT-101).
83
+ *
84
+ * The streamable-HTTP spec says a server MUST reply 404 to an unknown
85
+ * `Mcp-Session-Id`, and that a client seeing 404 MUST re-initialize. The old
86
+ * 400 "Bad Request: No valid session ID provided" was indistinguishable from a
87
+ * malformed request, so bridges parked on it forever instead of reconnecting.
88
+ */
89
+ private sendSessionNotFound;
90
+ /** The wire half of a 404: the same answer whether or not the session was tallied. */
91
+ private sendSessionExpired;
92
+ /** Remember a session we closed ourselves, keeping the set bounded like the tally. */
93
+ private rememberClosedSession;
50
94
  private refreshRuntimeSession;
51
95
  private sendGrantRequired;
52
96
  private authenticateLaunchDeck;
@@ -63,5 +107,6 @@ export declare class AgentDeckMCPServer {
63
107
  private handleMcpSessionRequest;
64
108
  start(): Promise<express.Application>;
65
109
  stop(): Promise<void>;
110
+ private closeHttpServer;
66
111
  }
67
112
  //# sourceMappingURL=mcp-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAUA,OAAO,OAA8B,MAAM,SAAS,CAAC;AAYrD,OAAO,EAAE,cAAc,EAAyB,MAAM,qBAAqB,CAAC;AA2B5E,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,UAAU,CAA2B;IAC7C,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,uFAAuF;IACvF,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,aAAa,CAA6B;IAClD,oFAAoF;IACpF,OAAO,CAAC,eAAe,CAAoC;IAE3D,OAAO,KAAK,MAAM,GAKjB;gBAGC,IAAI,GAAE,MAAa,EACnB,UAAU,GAAE,MAAgC,EAC5C,WAAW,CAAC,EAAE,cAAc,EAC5B,IAAI,GAAE,MAAoB;IAiB5B,8EAA8E;IAC9E,OAAO,IAAI,MAAM;IAIjB;;;OAGG;IACH,OAAO,CAAC,eAAe;YAYT,SAAS;YAsBT,mBAAmB;YAoBnB,mBAAmB;IAiCjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAElD,iFAAiF;IACjF,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAS;IAEtD,mFAAmF;IACnF,OAAO,CAAC,MAAM,CAAC,mBAAmB;YAWpB,qBAAqB;YAmBrB,cAAc;YA4Cd,cAAc;IAQ5B,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,SAAS;IAIjB,6EAA6E;IAC7E,OAAO,CAAC,YAAY;YAYN,mBAAmB;IAmCjC,OAAO,CAAC,UAAU;IAwBlB,OAAO,CAAC,cAAc;IA8MtB,OAAO,CAAC,WAAW;IA4CnB,OAAO,CAAC,kBAAkB;YAKZ,qBAAqB;IAoBnC,OAAO,CAAC,iBAAiB;YAQX,sBAAsB;YA0DtB,wBAAwB;IActC;;;;;OAKG;YACW,oBAAoB;IAiClC,OAAO,CAAC,qBAAqB;YAQf,aAAa;YAgHb,uBAAuB;IAqB/B,KAAK;IAiDL,IAAI;CAiCX"}
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAWA,OAAO,OAA8B,MAAM,SAAS,CAAC;AAYrD,OAAO,EAAE,cAAc,EAAyB,MAAM,qBAAqB,CAAC;AAmD5E,qBAAa,kBAAkB;IAC7B,oFAAoF;IACpF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAO;IAEzD,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,UAAU,CAA2B;IAC7C,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,uFAAuF;IACvF,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,aAAa,CAA6B;IAClD,oFAAoF;IACpF,OAAO,CAAC,eAAe,CAAoC;IAC3D,oFAAoF;IACpF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;IACtD,OAAO,CAAC,iBAAiB,CAAK;IAC9B,4EAA4E;IAC5E,OAAO,CAAC,iBAAiB,CAA6D;IACtF;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,kBAAkB,CAAqB;IAE/C,OAAO,KAAK,MAAM,GAKjB;gBAGC,IAAI,GAAE,MAAa,EACnB,UAAU,GAAE,MAAgC,EAC5C,WAAW,CAAC,EAAE,cAAc,EAC5B,IAAI,GAAE,MAAoB;IAiB5B,8EAA8E;IAC9E,OAAO,IAAI,MAAM;IAIjB;;;OAGG;IACH,OAAO,CAAC,eAAe;YAYT,SAAS;YAsBT,mBAAmB;YAoBnB,mBAAmB;IAiCjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAElD,iFAAiF;IACjF,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAS;IAEtD,mFAAmF;IACnF,OAAO,CAAC,MAAM,CAAC,mBAAmB;YAWpB,qBAAqB;YAmBrB,cAAc;YA4Cd,cAAc;IAQ5B,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,SAAS;IAIjB,6EAA6E;IAC7E,OAAO,CAAC,YAAY;YAYN,mBAAmB;IAmCjC,OAAO,CAAC,UAAU;IAwBlB,OAAO,CAAC,cAAc;IA8MtB,OAAO,CAAC,WAAW;IAgDnB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,oBAAoB;IAyB5B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,yBAAyB;IAajC;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IAqC3B,sFAAsF;IACtF,OAAO,CAAC,kBAAkB;IAe1B,sFAAsF;IACtF,OAAO,CAAC,qBAAqB;YAUf,qBAAqB;IAoBnC,OAAO,CAAC,iBAAiB;YAQX,sBAAsB;YA0DtB,wBAAwB;IActC;;;;;OAKG;YACW,oBAAoB;IAiClC,OAAO,CAAC,qBAAqB;YAQf,aAAa;YA2Hb,uBAAuB;IAqB/B,KAAK;IAiDL,IAAI;YAwBI,eAAe;CAY9B"}