@cyanheads/mcp-ts-core 0.13.10 → 0.13.12

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 (153) hide show
  1. package/AGENTS.md +9 -6
  2. package/CLAUDE.md +9 -6
  3. package/README.md +29 -3
  4. package/biome.json +1 -1
  5. package/changelog/0.13.x/0.13.11.md +113 -0
  6. package/changelog/0.13.x/0.13.12.md +50 -0
  7. package/dist/cli/app-render.d.ts +11 -0
  8. package/dist/cli/app-render.d.ts.map +1 -0
  9. package/dist/cli/app-render.js +150 -0
  10. package/dist/cli/app-render.js.map +1 -0
  11. package/dist/cli/init.d.ts +2 -1
  12. package/dist/cli/init.d.ts.map +1 -1
  13. package/dist/cli/init.js +10 -2
  14. package/dist/cli/init.js.map +1 -1
  15. package/dist/core/context.d.ts +3 -2
  16. package/dist/core/context.d.ts.map +1 -1
  17. package/dist/core/context.js +25 -16
  18. package/dist/core/context.js.map +1 -1
  19. package/dist/mcp-server/handlerContext.d.ts +14 -8
  20. package/dist/mcp-server/handlerContext.d.ts.map +1 -1
  21. package/dist/mcp-server/handlerContext.js +16 -9
  22. package/dist/mcp-server/handlerContext.js.map +1 -1
  23. package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts.map +1 -1
  24. package/dist/mcp-server/resources/utils/resourceHandlerFactory.js +15 -7
  25. package/dist/mcp-server/resources/utils/resourceHandlerFactory.js.map +1 -1
  26. package/dist/mcp-server/tools/utils/inputPrevalidation.d.ts +8 -2
  27. package/dist/mcp-server/tools/utils/inputPrevalidation.d.ts.map +1 -1
  28. package/dist/mcp-server/tools/utils/inputPrevalidation.js +18 -7
  29. package/dist/mcp-server/tools/utils/inputPrevalidation.js.map +1 -1
  30. package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts.map +1 -1
  31. package/dist/mcp-server/tools/utils/toolHandlerFactory.js +79 -8
  32. package/dist/mcp-server/tools/utils/toolHandlerFactory.js.map +1 -1
  33. package/dist/mcp-server/transports/auth/lib/authUtils.d.ts +20 -0
  34. package/dist/mcp-server/transports/auth/lib/authUtils.d.ts.map +1 -1
  35. package/dist/mcp-server/transports/auth/lib/authUtils.js +28 -2
  36. package/dist/mcp-server/transports/auth/lib/authUtils.js.map +1 -1
  37. package/dist/mcp-server/transports/auth/lib/checkScopes.d.ts.map +1 -1
  38. package/dist/mcp-server/transports/auth/lib/checkScopes.js +2 -1
  39. package/dist/mcp-server/transports/auth/lib/checkScopes.js.map +1 -1
  40. package/dist/mcp-server/transports/http/httpErrorHandler.d.ts.map +1 -1
  41. package/dist/mcp-server/transports/http/httpErrorHandler.js +4 -2
  42. package/dist/mcp-server/transports/http/httpErrorHandler.js.map +1 -1
  43. package/dist/services/mirror/sqlite/handle.d.ts +22 -5
  44. package/dist/services/mirror/sqlite/handle.d.ts.map +1 -1
  45. package/dist/services/mirror/sqlite/handle.js +61 -12
  46. package/dist/services/mirror/sqlite/handle.js.map +1 -1
  47. package/dist/services/mirror/sqlite/sqliteMirrorStore.d.ts +6 -1
  48. package/dist/services/mirror/sqlite/sqliteMirrorStore.d.ts.map +1 -1
  49. package/dist/services/mirror/sqlite/sqliteMirrorStore.js +3 -2
  50. package/dist/services/mirror/sqlite/sqliteMirrorStore.js.map +1 -1
  51. package/dist/testing/apps/browser.d.ts +27 -0
  52. package/dist/testing/apps/browser.d.ts.map +1 -0
  53. package/dist/testing/apps/browser.js +162 -0
  54. package/dist/testing/apps/browser.js.map +1 -0
  55. package/dist/testing/apps/cdp-pipe.d.ts +79 -0
  56. package/dist/testing/apps/cdp-pipe.d.ts.map +1 -0
  57. package/dist/testing/apps/cdp-pipe.js +200 -0
  58. package/dist/testing/apps/cdp-pipe.js.map +1 -0
  59. package/dist/testing/apps/csp.d.ts +17 -0
  60. package/dist/testing/apps/csp.d.ts.map +1 -0
  61. package/dist/testing/apps/csp.js +50 -0
  62. package/dist/testing/apps/csp.js.map +1 -0
  63. package/dist/testing/apps/host-pages.d.ts +47 -0
  64. package/dist/testing/apps/host-pages.d.ts.map +1 -0
  65. package/dist/testing/apps/host-pages.js +138 -0
  66. package/dist/testing/apps/host-pages.js.map +1 -0
  67. package/dist/testing/apps/index.d.ts +167 -0
  68. package/dist/testing/apps/index.d.ts.map +1 -0
  69. package/dist/testing/apps/index.js +36 -0
  70. package/dist/testing/apps/index.js.map +1 -0
  71. package/dist/testing/apps/partial-json.d.ts +14 -0
  72. package/dist/testing/apps/partial-json.d.ts.map +1 -0
  73. package/dist/testing/apps/partial-json.js +71 -0
  74. package/dist/testing/apps/partial-json.js.map +1 -0
  75. package/dist/testing/apps/run.d.ts +13 -0
  76. package/dist/testing/apps/run.d.ts.map +1 -0
  77. package/dist/testing/apps/run.js +659 -0
  78. package/dist/testing/apps/run.js.map +1 -0
  79. package/dist/utils/index.d.ts +1 -1
  80. package/dist/utils/index.d.ts.map +1 -1
  81. package/dist/utils/index.js +1 -1
  82. package/dist/utils/index.js.map +1 -1
  83. package/dist/utils/internal/error-handler/errorHandler.d.ts +1 -0
  84. package/dist/utils/internal/error-handler/errorHandler.d.ts.map +1 -1
  85. package/dist/utils/internal/error-handler/errorHandler.js +22 -11
  86. package/dist/utils/internal/error-handler/errorHandler.js.map +1 -1
  87. package/dist/utils/internal/error-handler/helpers.d.ts +16 -5
  88. package/dist/utils/internal/error-handler/helpers.d.ts.map +1 -1
  89. package/dist/utils/internal/error-handler/helpers.js +12 -7
  90. package/dist/utils/internal/error-handler/helpers.js.map +1 -1
  91. package/dist/utils/internal/error-handler/types.d.ts +11 -4
  92. package/dist/utils/internal/error-handler/types.d.ts.map +1 -1
  93. package/dist/utils/internal/logger.d.ts +21 -1
  94. package/dist/utils/internal/logger.d.ts.map +1 -1
  95. package/dist/utils/internal/logger.js +31 -14
  96. package/dist/utils/internal/logger.js.map +1 -1
  97. package/dist/utils/internal/observabilityCap.d.ts +35 -0
  98. package/dist/utils/internal/observabilityCap.d.ts.map +1 -0
  99. package/dist/utils/internal/observabilityCap.js +43 -0
  100. package/dist/utils/internal/observabilityCap.js.map +1 -0
  101. package/dist/utils/internal/performance.d.ts +3 -1
  102. package/dist/utils/internal/performance.d.ts.map +1 -1
  103. package/dist/utils/internal/performance.js +8 -3
  104. package/dist/utils/internal/performance.js.map +1 -1
  105. package/dist/utils/network/fetchWithTimeout.d.ts +3 -1
  106. package/dist/utils/network/fetchWithTimeout.d.ts.map +1 -1
  107. package/dist/utils/network/fetchWithTimeout.js +70 -16
  108. package/dist/utils/network/fetchWithTimeout.js.map +1 -1
  109. package/dist/utils/network/retry.d.ts +22 -2
  110. package/dist/utils/network/retry.d.ts.map +1 -1
  111. package/dist/utils/network/retry.js +29 -1
  112. package/dist/utils/network/retry.js.map +1 -1
  113. package/dist/utils/security/sanitization.d.ts +16 -13
  114. package/dist/utils/security/sanitization.d.ts.map +1 -1
  115. package/dist/utils/security/sanitization.js +74 -33
  116. package/dist/utils/security/sanitization.js.map +1 -1
  117. package/dist/utils/telemetry/attributes.d.ts +7 -1
  118. package/dist/utils/telemetry/attributes.d.ts.map +1 -1
  119. package/dist/utils/telemetry/attributes.js +7 -1
  120. package/dist/utils/telemetry/attributes.js.map +1 -1
  121. package/framework-skills/add-app-tool/SKILL.md +2 -1
  122. package/framework-skills/add-test/SKILL.md +15 -15
  123. package/framework-skills/add-tool/SKILL.md +2 -2
  124. package/framework-skills/api-auth/SKILL.md +3 -1
  125. package/framework-skills/api-canvas/SKILL.md +2 -2
  126. package/framework-skills/api-config/SKILL.md +11 -2
  127. package/framework-skills/api-context/SKILL.md +5 -5
  128. package/framework-skills/api-errors/SKILL.md +6 -6
  129. package/framework-skills/api-mirror/SKILL.md +6 -3
  130. package/framework-skills/api-telemetry/SKILL.md +15 -9
  131. package/framework-skills/api-testing/SKILL.md +5 -1
  132. package/framework-skills/api-utils/SKILL.md +5 -5
  133. package/framework-skills/code-simplifier/SKILL.md +2 -2
  134. package/framework-skills/field-test/SKILL.md +53 -8
  135. package/framework-skills/git-wrapup/SKILL.md +4 -4
  136. package/framework-skills/orchestrations/SKILL.md +1 -1
  137. package/framework-skills/orchestrations/workflows/greenfield-build.md +2 -2
  138. package/framework-skills/polish-docs-meta/SKILL.md +4 -3
  139. package/framework-skills/polish-docs-meta/references/server-json.md +24 -26
  140. package/framework-skills/release-and-publish/SKILL.md +2 -2
  141. package/framework-skills/release-pr-review/SKILL.md +5 -5
  142. package/framework-skills/setup/SKILL.md +2 -2
  143. package/framework-skills/tool-defs-analysis/SKILL.md +2 -2
  144. package/package.json +38 -23
  145. package/scripts/devcheck.ts +43 -21
  146. package/scripts/lint-packaging.ts +91 -1
  147. package/scripts/prune-musl-packages.ts +146 -0
  148. package/templates/.github/workflows/codeql.yml +10 -1
  149. package/templates/Dockerfile +13 -4
  150. package/templates/_.dockerignore +3 -5
  151. package/templates/_.gitignore +4 -4
  152. package/templates/package.json +4 -4
  153. package/templates/server.json +7 -21
@@ -10,7 +10,8 @@
10
10
  * @module services/mirror/sqlite/handle
11
11
  */
12
12
  import { mkdir } from 'node:fs/promises';
13
- import { dirname, resolve as resolvePath } from 'node:path';
13
+ import { basename, dirname, resolve as resolvePath } from 'node:path';
14
+ import { setTimeout as delay } from 'node:timers/promises';
14
15
  import { configurationError, databaseError, McpError } from '../../../types-global/errors.js';
15
16
  import { runtimeCaps } from '../../../utils/internal/runtime.js';
16
17
  /**
@@ -21,6 +22,15 @@ import { runtimeCaps } from '../../../utils/internal/runtime.js';
21
22
  */
22
23
  const BUN_SQLITE_SPECIFIER = 'bun:sqlite';
23
24
  const BETTER_SQLITE3_SPECIFIER = 'better-sqlite3';
25
+ /** Pause between attempts to switch a contended file to WAL. */
26
+ const WAL_RETRY_INTERVAL_MS = 10;
27
+ /**
28
+ * The caller-facing `data.recovery.hint` on a store that fails to open or
29
+ * initialize. Worded to hold for every cause — a lock another process still
30
+ * holds (`SQLITE_BUSY`), missing permissions, a corrupted file, a failed
31
+ * migration — since none of them is something the request can change.
32
+ */
33
+ export const MIRROR_STORE_UNAVAILABLE_HINT = "The server could not use its local mirror store, and changing the request will not help. Try again later, and report the failure to the server's operator if it persists.";
24
34
  /** Adapts a driver to the runtime-neutral {@link SqliteHandle}; `close` is driver-specific. */
25
35
  function wrapDriver(db, close) {
26
36
  return {
@@ -41,31 +51,70 @@ function wrapDriver(db, close) {
41
51
  }
42
52
  /**
43
53
  * Open (or create) a SQLite database at `path`, picking the driver for the
44
- * current runtime. Creates the parent directory, enables WAL, and sets
45
- * `busy_timeout` so a refresh writer and reader processes coexist without
46
- * spurious `database is locked` errors.
54
+ * current runtime. Creates the parent directory, sets `busy_timeout` before
55
+ * anything reads the file, then enables WAL, so a refresh writer and reader
56
+ * processes coexist without spurious `database is locked` errors. An open that
57
+ * meets another connection's lock waits it out for up to `busyTimeoutMs`.
47
58
  *
48
59
  * Throws `ConfigurationError` on Node when `better-sqlite3` is not installed,
49
- * and `DatabaseError` for any other open failure.
60
+ * and `DatabaseError` for any other open failure — creating the parent
61
+ * directory included — with the driver or filesystem error on `cause` and the
62
+ * connection already closed. Neither error carries the path, since a handler
63
+ * forwards message and `data` to the caller: the `DatabaseError` names the
64
+ * store by its basename and its `data` holds only a recovery hint, and the
65
+ * `ConfigurationError` carries no `data`.
50
66
  */
51
67
  export async function openSqliteHandle(path, options = {}) {
52
- await mkdir(dirname(resolvePath(path)), { recursive: true });
68
+ const startedAt = performance.now();
53
69
  const busyTimeoutMs = options.busyTimeoutMs ?? 5000;
54
70
  let handle;
55
71
  try {
72
+ await mkdir(dirname(resolvePath(path)), { recursive: true });
56
73
  handle = runtimeCaps.isBun ? await openBunHandle(path) : await openBetterSqlite3Handle(path);
74
+ // One statement per call: bun:sqlite's multi-statement `exec` drops the
75
+ // step error of a statement followed by more text (oven-sh/bun#37415).
76
+ // NORMAL synchronous is the WAL-recommended durability/throughput balance.
77
+ handle.exec(`PRAGMA busy_timeout = ${busyTimeoutMs}`);
78
+ await enableWal(handle, startedAt + busyTimeoutMs);
79
+ handle.exec('PRAGMA synchronous = NORMAL');
80
+ handle.exec('PRAGMA foreign_keys = ON');
81
+ return handle;
57
82
  }
58
83
  catch (err) {
84
+ handle?.close();
59
85
  // The Node path throws a ConfigurationError when better-sqlite3 is absent —
60
86
  // preserve it rather than masking it as a generic open failure.
61
87
  if (err instanceof McpError)
62
88
  throw err;
63
- throw databaseError(`Failed to open mirror store at ${path}`, { path }, { cause: err });
89
+ throw databaseError(`Failed to open mirror store "${basename(path)}".`, { recovery: { hint: MIRROR_STORE_UNAVAILABLE_HINT } }, { cause: err });
64
90
  }
65
- // Connection pragmas. WAL allows one writer + concurrent readers; NORMAL
66
- // synchronous is the WAL-recommended durability/throughput balance.
67
- handle.exec(`PRAGMA journal_mode = WAL; PRAGMA synchronous = NORMAL; PRAGMA foreign_keys = ON; PRAGMA busy_timeout = ${busyTimeoutMs};`);
68
- return handle;
91
+ }
92
+ /**
93
+ * Switch the connection to WAL, which lets one writer and concurrent readers
94
+ * share the file. The switch is the open's first read of the file, and the
95
+ * busy handler waits out a lock met there. Converting a rollback-mode file
96
+ * also takes a RESERVED lock, which SQLite never waits for through the busy
97
+ * handler (it fails at once to avoid deadlock), so a `SQLITE_BUSY*` result is
98
+ * retried here until `deadline`. Runs through `prepare().get()` so a step
99
+ * error always surfaces, on `bun:sqlite` too.
100
+ */
101
+ async function enableWal(handle, deadline) {
102
+ for (;;) {
103
+ try {
104
+ handle.prepare('PRAGMA journal_mode = WAL').get();
105
+ return;
106
+ }
107
+ catch (err) {
108
+ if (!isBusy(err) || performance.now() >= deadline)
109
+ throw err;
110
+ await delay(WAL_RETRY_INTERVAL_MS);
111
+ }
112
+ }
113
+ }
114
+ /** Both drivers name the extended result code on `code`: `SQLITE_BUSY`, `SQLITE_BUSY_RECOVERY`, … */
115
+ function isBusy(err) {
116
+ const code = err.code;
117
+ return typeof code === 'string' && code.startsWith('SQLITE_BUSY');
69
118
  }
70
119
  /**
71
120
  * Bun driver. Closes with `close(true)` so statements the store still holds
@@ -85,7 +134,7 @@ async function openBetterSqlite3Handle(path) {
85
134
  }
86
135
  catch (err) {
87
136
  /* istanbul ignore next -- missing-dep path; better-sqlite3 is installed in the test env */
88
- throw configurationError('Install "better-sqlite3" to use the SQLite mirror store on Node: bun add better-sqlite3', { path }, { cause: err });
137
+ throw configurationError('Install "better-sqlite3" to use the SQLite mirror store on Node: bun add better-sqlite3', undefined, { cause: err });
89
138
  }
90
139
  const db = new mod.default(path);
91
140
  return wrapDriver(db, () => db.close());
@@ -1 +1 @@
1
- {"version":3,"file":"handle.js","sourceRoot":"","sources":["../../../../src/services/mirror/sqlite/handle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handle.js","sourceRoot":"","sources":["../../../../src/services/mirror/sqlite/handle.ts"],"names":[],"mappings":"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"}
@@ -28,7 +28,12 @@ export interface SqliteMirrorStoreLimits {
28
28
  }
29
29
  /** Configuration for {@link sqliteMirrorStore}. */
30
30
  export interface SqliteMirrorStoreSpec extends SchemaSpec {
31
- /** `PRAGMA busy_timeout` in ms. Default 5000. */
31
+ /**
32
+ * How long, in ms, a statement waits on another connection's lock
33
+ * (`PRAGMA busy_timeout`). It bounds the store's open too: the open retries
34
+ * the switch to WAL under another connection's lock until this much time has
35
+ * passed. Default 5000.
36
+ */
32
37
  busyTimeoutMs?: number;
33
38
  /** Query and batch ceilings. Omitted fields stay unbounded. */
34
39
  limits?: SqliteMirrorStoreLimits;
@@ -1 +1 @@
1
- {"version":3,"file":"sqliteMirrorStore.d.ts","sourceRoot":"","sources":["../../../../src/services/mirror/sqlite/sqliteMirrorStore.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAEV,SAAS,EAET,WAAW,EAMZ,MAAM,aAAa,CAAC;AAErB,OAAO,EAAkB,KAAK,UAAU,EAAsB,MAAM,aAAa,CAAC;AAElF;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mGAAmG;IACnG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,mDAAmD;AACnD,MAAM,WAAW,qBAAsB,SAAQ,UAAU;IACvD,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,mFAAmF;IACnF,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAkBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,WAAW,CAoO1E"}
1
+ {"version":3,"file":"sqliteMirrorStore.d.ts","sourceRoot":"","sources":["../../../../src/services/mirror/sqlite/sqliteMirrorStore.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAEV,SAAS,EAET,WAAW,EAMZ,MAAM,aAAa,CAAC;AAOrB,OAAO,EAAkB,KAAK,UAAU,EAAsB,MAAM,aAAa,CAAC;AAElF;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mGAAmG;IACnG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,mDAAmD;AACnD,MAAM,WAAW,qBAAsB,SAAQ,UAAU;IACvD;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,mFAAmF;IACnF,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAkBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,WAAW,CAoO1E"}
@@ -6,8 +6,9 @@
6
6
  * synchronous driver calls.
7
7
  * @module services/mirror/sqlite/sqliteMirrorStore
8
8
  */
9
+ import { basename } from 'node:path';
9
10
  import { databaseError, validationError } from '../../../types-global/errors.js';
10
- import { openSqliteHandle } from './handle.js';
11
+ import { MIRROR_STORE_UNAVAILABLE_HINT, openSqliteHandle, } from './handle.js';
11
12
  import { buildSchemaSql, validateSchemaSpec } from './schema.js';
12
13
  const SQL_OP = {
13
14
  eq: '=',
@@ -48,7 +49,7 @@ export function sqliteMirrorStore(spec) {
48
49
  }
49
50
  catch (err) {
50
51
  handle.close();
51
- throw databaseError(`Failed to initialize mirror store at ${spec.path}`, { path: spec.path }, { cause: err });
52
+ throw databaseError(`Failed to initialize mirror store "${basename(spec.path)}".`, { recovery: { hint: MIRROR_STORE_UNAVAILABLE_HINT } }, { cause: err });
52
53
  }
53
54
  opened = { handle, allColumns, hasFts: ftsColumns.length > 0 };
54
55
  return opened;
@@ -1 +1 @@
1
- {"version":3,"file":"sqliteMirrorStore.js","sourceRoot":"","sources":["../../../../src/services/mirror/sqlite/sqliteMirrorStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqliteMirrorStore.js","sourceRoot":"","sources":["../../../../src/services/mirror/sqlite/sqliteMirrorStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @fileoverview Browser discovery, launch, and teardown for the headless MCP Apps host.
3
+ * Only `chrome-headless-shell` is used: the newest build in Puppeteer's cache, or an
4
+ * explicit executable path. Installed Chrome, Edge, Brave, and Chromium are never searched.
5
+ * Each launch gets a fresh profile directory; teardown stops the process by its own PID
6
+ * and deletes the profile.
7
+ * @module src/testing/apps/browser
8
+ */
9
+ import { type PipedProcess } from './cdp-pipe.js';
10
+ /** Environment variable naming the browser executable; when set, the only candidate. */
11
+ export declare const BROWSER_PATH_ENV = "MCP_APPS_BROWSER_PATH";
12
+ /**
13
+ * The executable to launch. An explicit path (option, then `MCP_APPS_BROWSER_PATH`) that is
14
+ * not an executable file fails with no fallback; otherwise the newest cached build.
15
+ */
16
+ export declare function discoverBrowser(explicitPath?: string): Promise<string>;
17
+ /** A launched browser with its throwaway profile. */
18
+ export interface LaunchedBrowser {
19
+ /** Stop the process by its PID and delete the profile directory. Idempotent. */
20
+ close(): Promise<void>;
21
+ readonly executable: string;
22
+ readonly process: PipedProcess;
23
+ readonly profileDir: string;
24
+ }
25
+ /** Launch `executable` headless over a CDP pipe on a fresh profile. */
26
+ export declare function launchBrowser(executable: string): Promise<LaunchedBrowser>;
27
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/testing/apps/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,OAAO,EAAE,KAAK,YAAY,EAAc,MAAM,eAAe,CAAC;AAE9D,wFAAwF;AACxF,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AA4BxD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmB5E;AAED,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC9B,gFAAgF;IAChF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,uEAAuE;AACvE,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA4ChF"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * @fileoverview Browser discovery, launch, and teardown for the headless MCP Apps host.
3
+ * Only `chrome-headless-shell` is used: the newest build in Puppeteer's cache, or an
4
+ * explicit executable path. Installed Chrome, Edge, Brave, and Chromium are never searched.
5
+ * Each launch gets a fresh profile directory; teardown stops the process by its own PID
6
+ * and deletes the profile.
7
+ * @module src/testing/apps/browser
8
+ */
9
+ import { constants } from 'node:fs';
10
+ import { access, mkdtemp, readdir, rm, stat } from 'node:fs/promises';
11
+ import os from 'node:os';
12
+ import path from 'node:path';
13
+ import { configurationError } from '../../types-global/errors.js';
14
+ import { spawnPiped } from './cdp-pipe.js';
15
+ /** Environment variable naming the browser executable; when set, the only candidate. */
16
+ export const BROWSER_PATH_ENV = 'MCP_APPS_BROWSER_PATH';
17
+ /** `--path` matters: without it `@puppeteer/browsers` installs into the working directory. */
18
+ const INSTALL_HINT = 'npx @puppeteer/browsers install chrome-headless-shell@stable --path ~/.cache/puppeteer';
19
+ /** Launch flags, besides the profile directory. */
20
+ const LAUNCH_FLAGS = [
21
+ '--headless',
22
+ '--remote-debugging-pipe',
23
+ '--no-first-run',
24
+ '--no-default-browser-check',
25
+ '--disable-background-networking',
26
+ '--disable-component-update',
27
+ '--disable-default-apps',
28
+ '--disable-domain-reliability',
29
+ '--disable-extensions',
30
+ '--disable-sync',
31
+ '--disable-breakpad',
32
+ '--no-pings',
33
+ '--mute-audio',
34
+ '--hide-scrollbars',
35
+ '--site-per-process',
36
+ ];
37
+ const browserUnavailable = (message, options) => configurationError(message, { reason: 'browser_unavailable' }, options);
38
+ /**
39
+ * The executable to launch. An explicit path (option, then `MCP_APPS_BROWSER_PATH`) that is
40
+ * not an executable file fails with no fallback; otherwise the newest cached build.
41
+ */
42
+ export async function discoverBrowser(explicitPath) {
43
+ const browserPath = explicitPath ?? (process.env[BROWSER_PATH_ENV] || undefined);
44
+ if (browserPath !== undefined) {
45
+ const problem = await launchProblem(browserPath);
46
+ if (problem)
47
+ throw browserUnavailable(`The browser path ${browserPath} ${problem}`);
48
+ return browserPath;
49
+ }
50
+ const folder = puppeteerPlatform(process.platform, process.arch);
51
+ if (!folder) {
52
+ throw browserUnavailable(`No browser found: chrome-headless-shell has no build for ${process.platform}/${process.arch}.`);
53
+ }
54
+ const root = path.join(os.homedir(), '.cache', 'puppeteer', 'chrome-headless-shell');
55
+ const found = await newestHeadlessShell(root, folder);
56
+ if (found)
57
+ return found;
58
+ throw browserUnavailable(`No browser found: ${root} holds no chrome-headless-shell build for ${folder}. Install one with \`${INSTALL_HINT}\`, or pass an executable path (--browser, or ${BROWSER_PATH_ENV}).`);
59
+ }
60
+ /** Launch `executable` headless over a CDP pipe on a fresh profile. */
61
+ export async function launchBrowser(executable) {
62
+ const profileDir = await mkdtemp(path.join(os.tmpdir(), 'mcp-apps-host-'));
63
+ const proc = await spawnPiped(executable, [
64
+ ...LAUNCH_FLAGS,
65
+ `--user-data-dir=${profileDir}`,
66
+ 'about:blank',
67
+ ]).catch(async (err) => {
68
+ await rm(profileDir, { recursive: true, force: true });
69
+ throw browserUnavailable(`Could not launch ${executable}: ${errorMessage(err)}`, {
70
+ cause: err,
71
+ });
72
+ });
73
+ let closing;
74
+ const close = () => {
75
+ closing ??= (async () => {
76
+ if (!proc.cdp.isClosed) {
77
+ await proc.cdp
78
+ .send('Browser.close', {}, { signal: AbortSignal.timeout(2_000) })
79
+ .catch(() => { });
80
+ }
81
+ const exited = await Promise.race([
82
+ proc.exited.then(() => true),
83
+ new Promise((resolve) => setTimeout(() => resolve(false), 3_000).unref()),
84
+ ]);
85
+ if (!exited) {
86
+ proc.kill();
87
+ await proc.exited;
88
+ }
89
+ proc.cdp.close();
90
+ await rm(profileDir, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 });
91
+ })();
92
+ return closing;
93
+ };
94
+ try {
95
+ await proc.cdp.send('Browser.getVersion', {}, { signal: AbortSignal.timeout(15_000) });
96
+ }
97
+ catch (err) {
98
+ await close();
99
+ const stderr = proc.stderrTail().trim().split('\n').at(-1);
100
+ throw browserUnavailable(`The browser at ${executable} failed to start: ${errorMessage(err)}${stderr ? ` (${stderr})` : ''}`, { cause: err });
101
+ }
102
+ return { executable, process: proc, profileDir, close };
103
+ }
104
+ function errorMessage(err) {
105
+ return err instanceof Error ? err.message : String(err);
106
+ }
107
+ /** The platform prefix `@puppeteer/browsers` gives each build folder in its cache. */
108
+ function puppeteerPlatform(platform, arch) {
109
+ switch (platform) {
110
+ case 'darwin':
111
+ return arch === 'arm64' ? 'mac_arm' : 'mac';
112
+ case 'linux':
113
+ return arch === 'arm64' ? 'linux_arm' : 'linux';
114
+ case 'win32':
115
+ return arch === 'x64' || arch === 'arm64' ? 'win64' : 'win32';
116
+ default:
117
+ return undefined;
118
+ }
119
+ }
120
+ /** The executable of the newest `<folder>-<buildId>` build under `root`. */
121
+ async function newestHeadlessShell(root, folder) {
122
+ const prefix = `${folder}-`;
123
+ const exe = folder.startsWith('win') ? 'chrome-headless-shell.exe' : 'chrome-headless-shell';
124
+ const builds = (await readdir(root).catch(() => []))
125
+ .filter((name) => name.startsWith(prefix) && /^\d+(\.\d+)*$/.test(name.slice(prefix.length)))
126
+ .sort((a, b) => compareBuildIds(b.slice(prefix.length), a.slice(prefix.length)));
127
+ for (const build of builds) {
128
+ const dir = path.join(root, build);
129
+ for (const sub of await readdir(dir).catch(() => [])) {
130
+ if (!sub.startsWith('chrome-headless-shell-'))
131
+ continue;
132
+ const file = path.join(dir, sub, exe);
133
+ if (!(await launchProblem(file)))
134
+ return file;
135
+ }
136
+ }
137
+ return undefined;
138
+ }
139
+ function compareBuildIds(a, b) {
140
+ const x = a.split('.').map(Number);
141
+ const y = b.split('.').map(Number);
142
+ for (let i = 0; i < Math.max(x.length, y.length); i++) {
143
+ const diff = (x[i] ?? 0) - (y[i] ?? 0);
144
+ if (diff !== 0)
145
+ return diff;
146
+ }
147
+ return 0;
148
+ }
149
+ /** Why `file` cannot be launched, as the end of a sentence; undefined when it can. */
150
+ async function launchProblem(file) {
151
+ const info = await stat(file).catch((err) => err);
152
+ if (info instanceof Error) {
153
+ return info.code === 'ENOENT' || info.code === 'ENOTDIR'
154
+ ? 'does not exist.'
155
+ : `cannot be read (${info.code}).`;
156
+ }
157
+ if (!info.isFile())
158
+ return 'is not a file. Point it at the browser executable itself.';
159
+ const runnable = await access(file, constants.X_OK).then(() => true, () => false);
160
+ return runnable ? undefined : 'is not executable.';
161
+ }
162
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/testing/apps/browser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * @fileoverview Chrome DevTools Protocol client over `--remote-debugging-pipe`. The
3
+ * browser reads commands from its fd 3 and writes responses and events to its fd 4, each
4
+ * message one JSON text ended by a NUL byte. No DevTools port is opened, and Chromium
5
+ * exits when fd 3 closes, so a harness that dies takes its browser with it.
6
+ *
7
+ * Sessions are flat: a command for a target carries the `sessionId` from
8
+ * `Target.attachToTarget({ flatten: true })` or `Target.setAutoAttach({ flatten: true })`,
9
+ * and events arrive on one stream tagged with theirs. Events are dispatched synchronously
10
+ * in arrival order, so subscribe before sending the command whose events you need.
11
+ * @module src/testing/apps/cdp-pipe
12
+ */
13
+ import type { Readable, Writable } from 'node:stream';
14
+ /** CDP params and results: JSON objects whose shape is the method's. */
15
+ export type CdpObject = Record<string, unknown>;
16
+ /**
17
+ * Why a command returned no result:
18
+ * - `protocol` — the browser answered with a CDP error, whose number is `code`;
19
+ * - `closed` — the pipe closed first: the browser exited or crashed, or `close()` ran;
20
+ * - `detached` — the command's session ended first (`Target.detachedFromTarget`).
21
+ */
22
+ export type CdpErrorKind = 'protocol' | 'closed' | 'detached';
23
+ /** A command that failed; an aborted command rejects with its signal's reason instead. */
24
+ export declare class CdpError extends Error {
25
+ readonly name = "CdpError";
26
+ readonly kind: CdpErrorKind;
27
+ readonly method: string;
28
+ readonly code: number | undefined;
29
+ constructor(kind: CdpErrorKind, method: string, message: string, code?: number);
30
+ }
31
+ /** Per-command options. */
32
+ export interface SendOptions {
33
+ /** The target session; omit for the browser session. */
34
+ sessionId?: string | undefined;
35
+ /** Rejects the command with the signal's reason; a response arriving after is dropped. */
36
+ signal?: AbortSignal | undefined;
37
+ }
38
+ /** Receives one event's params and the session it arrived on (undefined: the browser). */
39
+ export type CdpListener<P = CdpObject> = (params: P, sessionId: string | undefined) => void;
40
+ /** A CDP connection over a pair of streams: `input` from the browser, `output` to it. */
41
+ export declare class CdpPipe {
42
+ #private;
43
+ constructor(input: Readable, output: Writable);
44
+ /** Resolves once the pipe has closed, from either end. */
45
+ get closed(): Promise<void>;
46
+ get isClosed(): boolean;
47
+ /** Send one command and resolve with its result. */
48
+ send<R = CdpObject>(method: string, params?: CdpObject, options?: SendOptions): Promise<R>;
49
+ /** Call `listener` for every `method` event until the returned function is called. */
50
+ on<P = CdpObject>(method: string, listener: CdpListener<P>): () => void;
51
+ /**
52
+ * End the pipe to the browser (Chromium exits on reading EOF) and reject every pending
53
+ * command as `closed`. Idempotent.
54
+ */
55
+ close(reason?: string): void;
56
+ }
57
+ /** How a spawned process ended: an exit code, or the signal that killed it. */
58
+ export interface ProcessExit {
59
+ code: number | null;
60
+ signal: NodeJS.Signals | null;
61
+ }
62
+ /** A browser process with its CDP pipe on fds 3 and 4. */
63
+ export interface PipedProcess {
64
+ readonly cdp: CdpPipe;
65
+ /** Settles when the process exits; never rejects. */
66
+ readonly exited: Promise<ProcessExit>;
67
+ /** SIGKILL this process by its own PID. A no-op once it has exited. */
68
+ kill(): void;
69
+ readonly pid: number;
70
+ /** The last 8 KiB of the process's stderr. */
71
+ stderrTail(): string;
72
+ }
73
+ /**
74
+ * Spawn `executable` with a CDP pipe on its fds 3 (commands in) and 4 (messages out).
75
+ * Rejects with the spawn error (`ENOENT`, `EACCES`, ...) when the process cannot start.
76
+ * Stdin and stdout are discarded.
77
+ */
78
+ export declare function spawnPiped(executable: string, args: readonly string[]): Promise<PipedProcess>;
79
+ //# sourceMappingURL=cdp-pipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdp-pipe.d.ts","sourceRoot":"","sources":["../../../src/testing/apps/cdp-pipe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEtD,wEAAwE;AACxE,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE9D,0FAA0F;AAC1F,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAkB,IAAI,cAAc;IACpC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,YAAY,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAK7E;CACF;AAED,2BAA2B;AAC3B,MAAM,WAAW,WAAW;IAC1B,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,0FAA0F;IAC1F,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAClC;AAED,0FAA0F;AAC1F,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;AAmB5F,yFAAyF;AACzF,qBAAa,OAAO;;IAUlB,YAAY,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAM5C;IAED,0DAA0D;IAC1D,IAAI,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1B;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,oDAAoD;IACpD,IAAI,CAAC,CAAC,GAAG,SAAS,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,SAAc,EACtB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,CAAC,CAAC,CAqBZ;IAED,sFAAsF;IACtF,EAAE,CAAC,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAStE;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,SAAiC,GAAG,IAAI,CAYnD;CA6DF;AAED,+EAA+E;AAC/E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;CAC/B;AAED,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACtC,uEAAuE;IACvE,IAAI,IAAI,IAAI,CAAC;IACb,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,UAAU,IAAI,MAAM,CAAC;CACtB;AAID;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB,OAAO,CAAC,YAAY,CAAC,CA8BvB"}