@cyanheads/mcp-ts-core 0.13.9 → 0.13.11

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 (192) hide show
  1. package/AGENTS.md +41 -15
  2. package/CLAUDE.md +41 -15
  3. package/README.md +37 -11
  4. package/biome.json +1 -1
  5. package/changelog/0.13.x/0.13.10.md +118 -0
  6. package/changelog/0.13.x/0.13.11.md +113 -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/config/index.d.ts +3 -0
  16. package/dist/config/index.d.ts.map +1 -1
  17. package/dist/config/index.js +11 -0
  18. package/dist/config/index.js.map +1 -1
  19. package/dist/core/app.d.ts.map +1 -1
  20. package/dist/core/app.js +15 -1
  21. package/dist/core/app.js.map +1 -1
  22. package/dist/core/context.d.ts +92 -22
  23. package/dist/core/context.d.ts.map +1 -1
  24. package/dist/core/context.js +65 -16
  25. package/dist/core/context.js.map +1 -1
  26. package/dist/core/index.d.ts +1 -1
  27. package/dist/core/index.d.ts.map +1 -1
  28. package/dist/core/index.js.map +1 -1
  29. package/dist/core/worker.d.ts +6 -0
  30. package/dist/core/worker.d.ts.map +1 -1
  31. package/dist/core/worker.js +1 -0
  32. package/dist/core/worker.js.map +1 -1
  33. package/dist/linter/rules/error-contract-rules.d.ts +3 -44
  34. package/dist/linter/rules/error-contract-rules.d.ts.map +1 -1
  35. package/dist/linter/rules/error-contract-rules.js +8 -144
  36. package/dist/linter/rules/error-contract-rules.js.map +1 -1
  37. package/dist/linter/rules/index.d.ts +1 -1
  38. package/dist/linter/rules/index.d.ts.map +1 -1
  39. package/dist/linter/rules/index.js +1 -1
  40. package/dist/linter/rules/index.js.map +1 -1
  41. package/dist/linter/rules/resource-rules.d.ts.map +1 -1
  42. package/dist/linter/rules/resource-rules.js +1 -2
  43. package/dist/linter/rules/resource-rules.js.map +1 -1
  44. package/dist/linter/rules/tool-rules.d.ts.map +1 -1
  45. package/dist/linter/rules/tool-rules.js +1 -2
  46. package/dist/linter/rules/tool-rules.js.map +1 -1
  47. package/dist/mcp-server/handlerContext.d.ts +26 -13
  48. package/dist/mcp-server/handlerContext.d.ts.map +1 -1
  49. package/dist/mcp-server/handlerContext.js +32 -17
  50. package/dist/mcp-server/handlerContext.js.map +1 -1
  51. package/dist/mcp-server/inputRequired.d.ts +120 -8
  52. package/dist/mcp-server/inputRequired.d.ts.map +1 -1
  53. package/dist/mcp-server/inputRequired.js +177 -12
  54. package/dist/mcp-server/inputRequired.js.map +1 -1
  55. package/dist/mcp-server/prompts/prompt-registration.d.ts +10 -2
  56. package/dist/mcp-server/prompts/prompt-registration.d.ts.map +1 -1
  57. package/dist/mcp-server/prompts/prompt-registration.js +49 -11
  58. package/dist/mcp-server/prompts/prompt-registration.js.map +1 -1
  59. package/dist/mcp-server/resources/resource-registration.d.ts +4 -2
  60. package/dist/mcp-server/resources/resource-registration.d.ts.map +1 -1
  61. package/dist/mcp-server/resources/resource-registration.js +6 -4
  62. package/dist/mcp-server/resources/resource-registration.js.map +1 -1
  63. package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts +4 -3
  64. package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts.map +1 -1
  65. package/dist/mcp-server/resources/utils/resourceHandlerFactory.js +60 -21
  66. package/dist/mcp-server/resources/utils/resourceHandlerFactory.js.map +1 -1
  67. package/dist/mcp-server/server.d.ts +9 -0
  68. package/dist/mcp-server/server.d.ts.map +1 -1
  69. package/dist/mcp-server/server.js +14 -13
  70. package/dist/mcp-server/server.js.map +1 -1
  71. package/dist/mcp-server/tools/tool-registration.d.ts +7 -3
  72. package/dist/mcp-server/tools/tool-registration.d.ts.map +1 -1
  73. package/dist/mcp-server/tools/tool-registration.js +9 -5
  74. package/dist/mcp-server/tools/tool-registration.js.map +1 -1
  75. package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts +17 -9
  76. package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts.map +1 -1
  77. package/dist/mcp-server/tools/utils/toolHandlerFactory.js +91 -50
  78. package/dist/mcp-server/tools/utils/toolHandlerFactory.js.map +1 -1
  79. package/dist/mcp-server/transports/http/httpErrorHandler.d.ts.map +1 -1
  80. package/dist/mcp-server/transports/http/httpErrorHandler.js +7 -1
  81. package/dist/mcp-server/transports/http/httpErrorHandler.js.map +1 -1
  82. package/dist/services/mirror/sqlite/handle.d.ts +11 -5
  83. package/dist/services/mirror/sqlite/handle.d.ts.map +1 -1
  84. package/dist/services/mirror/sqlite/handle.js +46 -8
  85. package/dist/services/mirror/sqlite/handle.js.map +1 -1
  86. package/dist/services/mirror/sqlite/sqliteMirrorStore.d.ts +6 -1
  87. package/dist/services/mirror/sqlite/sqliteMirrorStore.d.ts.map +1 -1
  88. package/dist/services/mirror/sqlite/sqliteMirrorStore.js.map +1 -1
  89. package/dist/testing/apps/browser.d.ts +27 -0
  90. package/dist/testing/apps/browser.d.ts.map +1 -0
  91. package/dist/testing/apps/browser.js +162 -0
  92. package/dist/testing/apps/browser.js.map +1 -0
  93. package/dist/testing/apps/cdp-pipe.d.ts +79 -0
  94. package/dist/testing/apps/cdp-pipe.d.ts.map +1 -0
  95. package/dist/testing/apps/cdp-pipe.js +200 -0
  96. package/dist/testing/apps/cdp-pipe.js.map +1 -0
  97. package/dist/testing/apps/csp.d.ts +17 -0
  98. package/dist/testing/apps/csp.d.ts.map +1 -0
  99. package/dist/testing/apps/csp.js +50 -0
  100. package/dist/testing/apps/csp.js.map +1 -0
  101. package/dist/testing/apps/host-pages.d.ts +47 -0
  102. package/dist/testing/apps/host-pages.d.ts.map +1 -0
  103. package/dist/testing/apps/host-pages.js +138 -0
  104. package/dist/testing/apps/host-pages.js.map +1 -0
  105. package/dist/testing/apps/index.d.ts +167 -0
  106. package/dist/testing/apps/index.d.ts.map +1 -0
  107. package/dist/testing/apps/index.js +36 -0
  108. package/dist/testing/apps/index.js.map +1 -0
  109. package/dist/testing/apps/partial-json.d.ts +14 -0
  110. package/dist/testing/apps/partial-json.d.ts.map +1 -0
  111. package/dist/testing/apps/partial-json.js +71 -0
  112. package/dist/testing/apps/partial-json.js.map +1 -0
  113. package/dist/testing/apps/run.d.ts +13 -0
  114. package/dist/testing/apps/run.d.ts.map +1 -0
  115. package/dist/testing/apps/run.js +659 -0
  116. package/dist/testing/apps/run.js.map +1 -0
  117. package/dist/testing/index.d.ts +17 -2
  118. package/dist/testing/index.d.ts.map +1 -1
  119. package/dist/testing/index.js +21 -7
  120. package/dist/testing/index.js.map +1 -1
  121. package/dist/types-global/errors.d.ts +18 -15
  122. package/dist/types-global/errors.d.ts.map +1 -1
  123. package/dist/utils/index.d.ts +1 -1
  124. package/dist/utils/index.d.ts.map +1 -1
  125. package/dist/utils/index.js +1 -1
  126. package/dist/utils/index.js.map +1 -1
  127. package/dist/utils/internal/error-handler/errorHandler.d.ts +5 -4
  128. package/dist/utils/internal/error-handler/errorHandler.d.ts.map +1 -1
  129. package/dist/utils/internal/error-handler/errorHandler.js +9 -7
  130. package/dist/utils/internal/error-handler/errorHandler.js.map +1 -1
  131. package/dist/utils/internal/error-handler/types.d.ts +3 -1
  132. package/dist/utils/internal/error-handler/types.d.ts.map +1 -1
  133. package/dist/utils/internal/logger.d.ts +21 -1
  134. package/dist/utils/internal/logger.d.ts.map +1 -1
  135. package/dist/utils/internal/logger.js +31 -14
  136. package/dist/utils/internal/logger.js.map +1 -1
  137. package/dist/utils/internal/performance.d.ts +7 -3
  138. package/dist/utils/internal/performance.d.ts.map +1 -1
  139. package/dist/utils/internal/performance.js +16 -9
  140. package/dist/utils/internal/performance.js.map +1 -1
  141. package/dist/utils/internal/telemetryMessages.d.ts +0 -1
  142. package/dist/utils/internal/telemetryMessages.d.ts.map +1 -1
  143. package/dist/utils/internal/telemetryMessages.js +0 -1
  144. package/dist/utils/internal/telemetryMessages.js.map +1 -1
  145. package/dist/utils/security/sanitization.d.ts +16 -13
  146. package/dist/utils/security/sanitization.d.ts.map +1 -1
  147. package/dist/utils/security/sanitization.js +74 -33
  148. package/dist/utils/security/sanitization.js.map +1 -1
  149. package/dist/utils/telemetry/attributes.d.ts +12 -5
  150. package/dist/utils/telemetry/attributes.d.ts.map +1 -1
  151. package/dist/utils/telemetry/attributes.js +12 -5
  152. package/dist/utils/telemetry/attributes.js.map +1 -1
  153. package/framework-skills/add-app-tool/SKILL.md +2 -1
  154. package/framework-skills/add-service/SKILL.md +3 -12
  155. package/framework-skills/add-test/SKILL.md +20 -17
  156. package/framework-skills/add-tool/SKILL.md +30 -34
  157. package/framework-skills/api-config/SKILL.md +12 -2
  158. package/framework-skills/api-context/SKILL.md +156 -41
  159. package/framework-skills/api-errors/SKILL.md +43 -47
  160. package/framework-skills/api-linter/SKILL.md +5 -29
  161. package/framework-skills/api-mirror/SKILL.md +4 -3
  162. package/framework-skills/api-telemetry/SKILL.md +16 -10
  163. package/framework-skills/api-testing/SKILL.md +47 -11
  164. package/framework-skills/api-utils/SKILL.md +3 -3
  165. package/framework-skills/api-workers/SKILL.md +3 -1
  166. package/framework-skills/code-simplifier/SKILL.md +2 -2
  167. package/framework-skills/design-mcp-server/SKILL.md +5 -5
  168. package/framework-skills/field-test/SKILL.md +53 -8
  169. package/framework-skills/git-wrapup/SKILL.md +2 -2
  170. package/framework-skills/orchestrations/SKILL.md +1 -1
  171. package/framework-skills/orchestrations/workflows/greenfield-build.md +2 -2
  172. package/framework-skills/polish-docs-meta/SKILL.md +4 -3
  173. package/framework-skills/polish-docs-meta/references/server-json.md +24 -26
  174. package/framework-skills/release-and-publish/SKILL.md +3 -3
  175. package/framework-skills/release-pr-review/SKILL.md +6 -6
  176. package/framework-skills/security-pass/SKILL.md +8 -7
  177. package/framework-skills/setup/SKILL.md +2 -2
  178. package/package.json +38 -22
  179. package/scripts/devcheck.ts +43 -21
  180. package/scripts/install-otel.ts +84 -0
  181. package/scripts/lint-packaging.ts +279 -28
  182. package/scripts/prune-musl-packages.ts +146 -0
  183. package/templates/.env.example +2 -0
  184. package/templates/.github/workflows/codeql.yml +10 -1
  185. package/templates/AGENTS.md +5 -4
  186. package/templates/CLAUDE.md +5 -4
  187. package/templates/Dockerfile +76 -50
  188. package/templates/_.dockerignore +3 -5
  189. package/templates/_.gitignore +4 -4
  190. package/templates/package.json +4 -4
  191. package/templates/server.json +7 -21
  192. package/templates/src/mcp-server/tools/definitions/echo.tool.ts +3 -8
@@ -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"}
@@ -0,0 +1,200 @@
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 { spawn } from 'node:child_process';
14
+ /** A command that failed; an aborted command rejects with its signal's reason instead. */
15
+ export class CdpError extends Error {
16
+ name = 'CdpError';
17
+ kind;
18
+ method;
19
+ code;
20
+ constructor(kind, method, message, code) {
21
+ super(`${method}: ${message}`);
22
+ this.kind = kind;
23
+ this.method = method;
24
+ this.code = code;
25
+ }
26
+ }
27
+ /** A CDP connection over a pair of streams: `input` from the browser, `output` to it. */
28
+ export class CdpPipe {
29
+ #output;
30
+ #pending = new Map();
31
+ #listeners = new Map();
32
+ #closed = Promise.withResolvers();
33
+ #nextId = 1;
34
+ #isClosed = false;
35
+ #closeReason = '';
36
+ #partial = [];
37
+ constructor(input, output) {
38
+ this.#output = output;
39
+ input.on('data', (chunk) => this.#receive(chunk));
40
+ input.on('end', () => this.close('the browser closed the DevTools pipe'));
41
+ input.on('error', (err) => this.close(`the DevTools pipe failed: ${err.message}`));
42
+ output.on('error', (err) => this.close(`the DevTools pipe failed: ${err.message}`));
43
+ }
44
+ /** Resolves once the pipe has closed, from either end. */
45
+ get closed() {
46
+ return this.#closed.promise;
47
+ }
48
+ get isClosed() {
49
+ return this.#isClosed;
50
+ }
51
+ /** Send one command and resolve with its result. */
52
+ send(method, params = {}, options = {}) {
53
+ const { sessionId, signal } = options;
54
+ if (signal?.aborted)
55
+ return Promise.reject(signal.reason);
56
+ if (this.#isClosed)
57
+ return Promise.reject(new CdpError('closed', method, this.#closeReason));
58
+ const id = this.#nextId++;
59
+ const { promise, resolve, reject } = Promise.withResolvers();
60
+ const onAbort = () => {
61
+ this.#pending.delete(id);
62
+ reject(signal?.reason);
63
+ };
64
+ signal?.addEventListener('abort', onAbort, { once: true });
65
+ this.#pending.set(id, {
66
+ method,
67
+ sessionId,
68
+ resolve: resolve,
69
+ reject,
70
+ release: () => signal?.removeEventListener('abort', onAbort),
71
+ });
72
+ const message = { id, method, params, ...(sessionId !== undefined && { sessionId }) };
73
+ this.#output.write(`${JSON.stringify(message)}\0`);
74
+ return promise;
75
+ }
76
+ /** Call `listener` for every `method` event until the returned function is called. */
77
+ on(method, listener) {
78
+ let listeners = this.#listeners.get(method);
79
+ if (!listeners) {
80
+ listeners = new Set();
81
+ this.#listeners.set(method, listeners);
82
+ }
83
+ const entry = listener;
84
+ listeners.add(entry);
85
+ return () => listeners.delete(entry);
86
+ }
87
+ /**
88
+ * End the pipe to the browser (Chromium exits on reading EOF) and reject every pending
89
+ * command as `closed`. Idempotent.
90
+ */
91
+ close(reason = 'the DevTools pipe was closed') {
92
+ if (this.#isClosed)
93
+ return;
94
+ this.#isClosed = true;
95
+ this.#closeReason = reason;
96
+ this.#partial = [];
97
+ if (!this.#output.writableEnded && !this.#output.destroyed)
98
+ this.#output.end();
99
+ for (const pending of this.#pending.values()) {
100
+ pending.release();
101
+ pending.reject(new CdpError('closed', pending.method, reason));
102
+ }
103
+ this.#pending.clear();
104
+ this.#closed.resolve();
105
+ }
106
+ #receive(chunk) {
107
+ let start = 0;
108
+ for (let end = chunk.indexOf(0); end !== -1; end = chunk.indexOf(0, start)) {
109
+ if (this.#isClosed)
110
+ return;
111
+ this.#partial.push(chunk.subarray(start, end));
112
+ const text = Buffer.concat(this.#partial).toString('utf8');
113
+ this.#partial = [];
114
+ this.#dispatch(text);
115
+ start = end + 1;
116
+ }
117
+ if (start < chunk.length && !this.#isClosed) {
118
+ this.#partial.push(Buffer.from(chunk.subarray(start)));
119
+ }
120
+ }
121
+ #dispatch(text) {
122
+ let message;
123
+ try {
124
+ message = JSON.parse(text);
125
+ }
126
+ catch {
127
+ this.close(`the browser sent a message that is not JSON: ${text.slice(0, 80)}`);
128
+ return;
129
+ }
130
+ if (message.id !== undefined) {
131
+ this.#settle(message.id, message);
132
+ return;
133
+ }
134
+ if (message.method === undefined)
135
+ return;
136
+ const params = message.params ?? {};
137
+ if (message.method === 'Target.detachedFromTarget')
138
+ this.#detach(params.sessionId);
139
+ for (const listener of this.#listeners.get(message.method) ?? []) {
140
+ listener(params, message.sessionId);
141
+ }
142
+ }
143
+ #settle(id, message) {
144
+ const pending = this.#pending.get(id);
145
+ if (!pending)
146
+ return;
147
+ this.#pending.delete(id);
148
+ pending.release();
149
+ const { error } = message;
150
+ if (error) {
151
+ const detail = error.data ? `${error.message} (${error.data})` : error.message;
152
+ pending.reject(new CdpError('protocol', pending.method, detail, error.code));
153
+ }
154
+ else {
155
+ pending.resolve(message.result ?? {});
156
+ }
157
+ }
158
+ #detach(sessionId) {
159
+ for (const [id, pending] of this.#pending) {
160
+ if (pending.sessionId !== sessionId)
161
+ continue;
162
+ this.#pending.delete(id);
163
+ pending.release();
164
+ pending.reject(new CdpError('detached', pending.method, `session ${String(sessionId)} detached`));
165
+ }
166
+ }
167
+ }
168
+ const STDERR_TAIL_CHARS = 8 * 1024;
169
+ /**
170
+ * Spawn `executable` with a CDP pipe on its fds 3 (commands in) and 4 (messages out).
171
+ * Rejects with the spawn error (`ENOENT`, `EACCES`, ...) when the process cannot start.
172
+ * Stdin and stdout are discarded.
173
+ */
174
+ export async function spawnPiped(executable, args) {
175
+ const child = spawn(executable, args, {
176
+ stdio: ['ignore', 'ignore', 'pipe', 'pipe', 'pipe'],
177
+ });
178
+ const exited = new Promise((resolve) => child.once('exit', (code, signal) => resolve({ code, signal })));
179
+ await new Promise((resolve, reject) => {
180
+ child.once('spawn', resolve);
181
+ child.once('error', reject);
182
+ });
183
+ const cdp = new CdpPipe(child.stdio[4], child.stdio[3]);
184
+ void exited.then(({ code, signal }) => cdp.close(`the browser exited ${signal ? `on ${signal}` : `with code ${code}`}`));
185
+ let tail = '';
186
+ child.stderr?.setEncoding('utf8').on('data', (text) => {
187
+ tail = (tail + text).slice(-STDERR_TAIL_CHARS);
188
+ });
189
+ return {
190
+ pid: child.pid,
191
+ cdp,
192
+ exited,
193
+ stderrTail: () => tail,
194
+ kill: () => {
195
+ if (child.exitCode === null && child.signalCode === null)
196
+ child.kill('SIGKILL');
197
+ },
198
+ };
199
+ }
200
+ //# sourceMappingURL=cdp-pipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdp-pipe.js","sourceRoot":"","sources":["../../../src/testing/apps/cdp-pipe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @fileoverview Builds the `Content-Security-Policy` header the sandbox applies to an MCP
3
+ * Apps view, from the resource's `_meta.ui.csp`, as the MCP Apps specification prescribes
4
+ * ("Content Security Policy Enforcement"; "Restrictive Default" when no metadata is given).
5
+ * `eval` stays blocked: no `'unsafe-eval'` is ever added.
6
+ * @module src/testing/apps/csp
7
+ */
8
+ /** The domain lists of a resource's `_meta.ui.csp`. */
9
+ export interface AppCspMetadata {
10
+ baseUriDomains?: string[];
11
+ connectDomains?: string[];
12
+ frameDomains?: string[];
13
+ resourceDomains?: string[];
14
+ }
15
+ /** The CSP header value for a view whose resource declared `csp` (or nothing). */
16
+ export declare function buildCsp(csp: AppCspMetadata | undefined): string;
17
+ //# sourceMappingURL=csp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csp.d.ts","sourceRoot":"","sources":["../../../src/testing/apps/csp.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,uDAAuD;AACvD,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAiBD,kFAAkF;AAClF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,CA4BhE"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @fileoverview Builds the `Content-Security-Policy` header the sandbox applies to an MCP
3
+ * Apps view, from the resource's `_meta.ui.csp`, as the MCP Apps specification prescribes
4
+ * ("Content Security Policy Enforcement"; "Restrictive Default" when no metadata is given).
5
+ * `eval` stays blocked: no `'unsafe-eval'` is ever added.
6
+ * @module src/testing/apps/csp
7
+ */
8
+ import { validationError } from '../../types-global/errors.js';
9
+ const RESTRICTIVE_DEFAULT = [
10
+ "default-src 'none'",
11
+ "script-src 'self' 'unsafe-inline'",
12
+ "style-src 'self' 'unsafe-inline'",
13
+ "img-src 'self' data:",
14
+ "media-src 'self' data:",
15
+ "connect-src 'none'",
16
+ "frame-src 'none'",
17
+ "object-src 'none'",
18
+ "base-uri 'self'",
19
+ ].join('; ');
20
+ /** Characters that would let a domain entry end its directive or add a source keyword. */
21
+ const UNSAFE_ENTRY = /[;\r\n'"\s,]/;
22
+ /** The CSP header value for a view whose resource declared `csp` (or nothing). */
23
+ export function buildCsp(csp) {
24
+ if (!csp)
25
+ return RESTRICTIVE_DEFAULT;
26
+ const list = (field) => {
27
+ const entries = csp[field] ?? [];
28
+ for (const entry of entries) {
29
+ if (typeof entry !== 'string' || entry === '' || UNSAFE_ENTRY.test(entry)) {
30
+ throw validationError(`The resource's _meta.ui.csp.${field} holds ${JSON.stringify(entry)}, which is not a plain origin. Remove separators, quotes, and whitespace from CSP domain entries.`, { reason: 'invalid_csp_entry', field });
31
+ }
32
+ }
33
+ return entries.join(' ');
34
+ };
35
+ const resources = list('resourceDomains');
36
+ const withSources = (head, sources) => (sources ? `${head} ${sources}` : head);
37
+ return [
38
+ "default-src 'none'",
39
+ withSources("script-src 'self' 'unsafe-inline'", resources),
40
+ withSources("style-src 'self' 'unsafe-inline'", resources),
41
+ withSources("connect-src 'self'", list('connectDomains')),
42
+ withSources("img-src 'self' data:", resources),
43
+ withSources("font-src 'self'", resources),
44
+ withSources("media-src 'self' data:", resources),
45
+ `frame-src ${list('frameDomains') || "'none'"}`,
46
+ "object-src 'none'",
47
+ `base-uri ${list('baseUriDomains') || "'self'"}`,
48
+ ].join('; ');
49
+ }
50
+ //# sourceMappingURL=csp.js.map