@tempoxyz/mercator 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +208 -0
  2. package/THIRD_PARTY_NOTICES.md +11 -0
  3. package/dist/agents.d.ts +26 -0
  4. package/dist/agents.js +152 -0
  5. package/dist/agents.js.map +1 -0
  6. package/dist/bin.d.ts +2 -0
  7. package/dist/bin.js +4 -0
  8. package/dist/bin.js.map +1 -0
  9. package/dist/client-selection.d.ts +13 -0
  10. package/dist/client-selection.js +97 -0
  11. package/dist/client-selection.js.map +1 -0
  12. package/dist/clients.d.ts +70 -0
  13. package/dist/clients.js +282 -0
  14. package/dist/clients.js.map +1 -0
  15. package/dist/codex-plugin.d.ts +52 -0
  16. package/dist/codex-plugin.js +417 -0
  17. package/dist/codex-plugin.js.map +1 -0
  18. package/dist/command.d.ts +17 -0
  19. package/dist/command.js +59 -0
  20. package/dist/command.js.map +1 -0
  21. package/dist/doctor.d.ts +10 -0
  22. package/dist/doctor.js +105 -0
  23. package/dist/doctor.js.map +1 -0
  24. package/dist/globe-frames.d.ts +6 -0
  25. package/dist/globe-frames.js +208 -0
  26. package/dist/globe-frames.js.map +1 -0
  27. package/dist/globe.d.ts +12 -0
  28. package/dist/globe.js +73 -0
  29. package/dist/globe.js.map +1 -0
  30. package/dist/index.d.ts +118 -0
  31. package/dist/index.js +568 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/native-payments.d.ts +34 -0
  34. package/dist/native-payments.js +191 -0
  35. package/dist/native-payments.js.map +1 -0
  36. package/dist/plugin-bundle/.codex-plugin/plugin.json +35 -0
  37. package/dist/plugin-bundle/.mcp.json +9 -0
  38. package/dist/plugin-bundle/README.md +26 -0
  39. package/dist/plugin-bundle/assets/favicon.svg +7 -0
  40. package/dist/plugin-bundle/assets/mercator-overview.png +0 -0
  41. package/dist/plugin-bundle/assets/service-network.png +0 -0
  42. package/dist/plugin-bundle/assets/workflow-composition.png +0 -0
  43. package/dist/setup-progress.d.ts +13 -0
  44. package/dist/setup-progress.js +22 -0
  45. package/dist/setup-progress.js.map +1 -0
  46. package/dist/submit.d.ts +15 -0
  47. package/dist/submit.js +127 -0
  48. package/dist/submit.js.map +1 -0
  49. package/dist/wallet.d.ts +77 -0
  50. package/dist/wallet.js +319 -0
  51. package/dist/wallet.js.map +1 -0
  52. package/package.json +56 -0
@@ -0,0 +1,417 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { cp, lstat, mkdir, readFile, realpath, rename, rm, stat, writeFile, } from 'node:fs/promises';
3
+ import { homedir } from 'node:os';
4
+ import { dirname, join, posix, win32 } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ /** Stable plugin identifier used by the bundle and marketplace entry. */
7
+ const PLUGIN_NAME = 'mercator';
8
+ /** Home-relative source path resolved by the personal marketplace. */
9
+ const PLUGIN_SOURCE_PATH = './.local/share/mercator/plugins/mercator';
10
+ /** Maximum time to wait for another Mercator process to finish updating the plugin index. */
11
+ const LOCK_TIMEOUT_MS = 10_000;
12
+ /** Delay between attempts to acquire the Mercator plugin lock. */
13
+ const LOCK_RETRY_MS = 25;
14
+ /** Resolves native or simulated platform paths for packaged-install verification. */
15
+ export function resolveCodexPluginPaths(home, platform = process.platform) {
16
+ const path = platform === 'win32' ? win32 : posix;
17
+ const marketplacePath = path.join(home, '.agents', 'plugins', 'marketplace.json');
18
+ return {
19
+ lockPath: `${marketplacePath}.mercator.lock`,
20
+ marketplacePath,
21
+ pluginPath: path.join(home, '.local', 'share', 'mercator', 'plugins', PLUGIN_NAME),
22
+ };
23
+ }
24
+ /** Installs Mercator into the personal marketplace without requiring the Codex CLI. */
25
+ export async function installCodexPlugin(options = {}) {
26
+ const home = options.home ?? homedir();
27
+ const { lockPath, marketplacePath, pluginPath } = resolveCodexPluginPaths(home);
28
+ const pluginSource = options.pluginSource ?? fileURLToPath(new URL('./plugin-bundle', import.meta.url));
29
+ const desiredVersion = await bundledPluginVersion(pluginSource, options.packageVersion ?? '0.0.0');
30
+ const initial = await readPluginState(marketplacePath, pluginPath);
31
+ assertNoPluginConflict(initial, marketplacePath, pluginPath);
32
+ if (initial.directory.version === desiredVersion && initial.marketplaceCurrent) {
33
+ return {
34
+ marketplacePath,
35
+ pluginPath,
36
+ reloadRequired: false,
37
+ status: 'already_configured',
38
+ };
39
+ }
40
+ if (options.dryRun) {
41
+ return { marketplacePath, pluginPath, reloadRequired: true, status: 'planned' };
42
+ }
43
+ return withPluginLock(lockPath, async () => {
44
+ const current = await readPluginState(marketplacePath, pluginPath);
45
+ assertNoPluginConflict(current, marketplacePath, pluginPath);
46
+ if (current.directory.version === desiredVersion && current.marketplaceCurrent) {
47
+ return {
48
+ marketplacePath,
49
+ pluginPath,
50
+ reloadRequired: false,
51
+ status: 'already_configured',
52
+ };
53
+ }
54
+ await replacePluginDirectory(pluginSource, pluginPath, desiredVersion);
55
+ await writeJsonFile(marketplacePath, mergeMarketplace(current.marketplace, marketplacePath));
56
+ return {
57
+ marketplacePath,
58
+ pluginPath,
59
+ reloadRequired: true,
60
+ status: current.directory.version === undefined ? 'configured' : 'updated',
61
+ };
62
+ });
63
+ }
64
+ /** Inspects the installed bundle and local registration without changing either. */
65
+ export async function inspectCodexPlugin(options = {}) {
66
+ const home = options.home ?? homedir();
67
+ const { marketplacePath, pluginPath } = resolveCodexPluginPaths(home);
68
+ const pluginSource = options.pluginSource ?? fileURLToPath(new URL('./plugin-bundle', import.meta.url));
69
+ const expectedVersion = await bundledPluginVersion(pluginSource, options.packageVersion ?? '0.0.0');
70
+ try {
71
+ const state = await readPluginState(marketplacePath, pluginPath);
72
+ assertNoPluginConflict(state, marketplacePath, pluginPath);
73
+ const status = state.directory.version === expectedVersion && state.marketplaceCurrent
74
+ ? 'ready'
75
+ : state.directory.version === undefined || !state.registered
76
+ ? 'missing'
77
+ : 'outdated';
78
+ return {
79
+ expectedVersion,
80
+ ...(state.directory.version ? { installedVersion: state.directory.version } : {}),
81
+ marketplacePath,
82
+ pluginPath,
83
+ registered: state.registered,
84
+ reloadRequired: status === 'outdated',
85
+ status,
86
+ };
87
+ }
88
+ catch (error) {
89
+ return {
90
+ error: error instanceof Error ? error.message : String(error),
91
+ expectedVersion,
92
+ marketplacePath,
93
+ pluginPath,
94
+ registered: false,
95
+ reloadRequired: false,
96
+ status: 'conflict',
97
+ };
98
+ }
99
+ }
100
+ /** Removes only the plugin bundle and marketplace entry owned by Mercator CLI. */
101
+ export async function removeCodexPlugin(options = {}) {
102
+ const home = options.home ?? homedir();
103
+ const { lockPath, marketplacePath, pluginPath } = resolveCodexPluginPaths(home);
104
+ const remove = async () => {
105
+ const state = await readPluginState(marketplacePath, pluginPath);
106
+ assertNoPluginConflict(state, marketplacePath, pluginPath);
107
+ const hasManagedState = state.registered || state.directory.managed;
108
+ if (!hasManagedState) {
109
+ return {
110
+ marketplacePath,
111
+ pluginPath,
112
+ reloadRequired: false,
113
+ status: 'missing',
114
+ };
115
+ }
116
+ if (options.dryRun) {
117
+ return {
118
+ marketplacePath,
119
+ pluginPath,
120
+ reloadRequired: state.registered,
121
+ status: 'planned',
122
+ };
123
+ }
124
+ if (state.registered && state.marketplace) {
125
+ await writeJsonFile(marketplacePath, removeMarketplaceEntry(state.marketplace));
126
+ }
127
+ if (state.directory.managed)
128
+ await rm(pluginPath, { recursive: true });
129
+ return {
130
+ marketplacePath,
131
+ pluginPath,
132
+ reloadRequired: state.registered,
133
+ status: 'removed',
134
+ };
135
+ };
136
+ return options.dryRun ? remove() : withPluginLock(lockPath, remove);
137
+ }
138
+ async function bundledPluginVersion(source, packageVersion) {
139
+ const manifestPath = join(source, '.codex-plugin', 'plugin.json');
140
+ const manifest = parseRecord(await readFile(manifestPath, 'utf8'), manifestPath);
141
+ if (typeof manifest.version !== 'string' || manifest.version.length === 0) {
142
+ throw new Error(`Mercator plugin manifest has no version: ${manifestPath}`);
143
+ }
144
+ const baseVersion = manifest.version.split('+', 1)[0];
145
+ const cachebuster = packageVersion.replaceAll(/[^0-9A-Za-z-]+/g, '.');
146
+ return `${baseVersion}+codex.cli-${cachebuster}`;
147
+ }
148
+ async function readPluginDirectory(pluginPath) {
149
+ try {
150
+ const pathStats = await lstat(pluginPath);
151
+ if (!pathStats.isDirectory() || pathStats.isSymbolicLink()) {
152
+ return { error: 'Plugin path is not a managed directory', managed: false };
153
+ }
154
+ }
155
+ catch (error) {
156
+ if (isMissingFile(error))
157
+ return { managed: false };
158
+ throw error;
159
+ }
160
+ const manifestPath = join(pluginPath, '.codex-plugin', 'plugin.json');
161
+ try {
162
+ const manifest = parseRecord(await readFile(manifestPath, 'utf8'), manifestPath);
163
+ const version = typeof manifest.version === 'string' ? manifest.version : undefined;
164
+ const managed = manifest.name === PLUGIN_NAME && version?.includes('+codex.cli-') === true;
165
+ return {
166
+ ...(managed ? {} : { error: 'Plugin directory is not owned by Mercator CLI' }),
167
+ managed,
168
+ ...(version ? { version } : {}),
169
+ };
170
+ }
171
+ catch (error) {
172
+ return {
173
+ error: isMissingFile(error)
174
+ ? 'Plugin directory has no manifest'
175
+ : error instanceof Error
176
+ ? error.message
177
+ : String(error),
178
+ managed: false,
179
+ };
180
+ }
181
+ }
182
+ async function readMarketplace(path) {
183
+ try {
184
+ return parseRecord(await readFile(path, 'utf8'), path);
185
+ }
186
+ catch (error) {
187
+ if (isMissingFile(error))
188
+ return undefined;
189
+ throw error;
190
+ }
191
+ }
192
+ function mergeMarketplace(marketplace, marketplacePath) {
193
+ const existing = marketplace ?? {};
194
+ const plugins = existing.plugins ?? [];
195
+ if (!Array.isArray(plugins)) {
196
+ throw new Error(`Personal marketplace plugins must be an array: ${marketplacePath}`);
197
+ }
198
+ const existingIndex = plugins.findIndex((plugin) => isRecord(plugin) && plugin.name === PLUGIN_NAME);
199
+ const existingPlugin = existingIndex >= 0 ? plugins[existingIndex] : undefined;
200
+ if (isRecord(existingPlugin) && !isManagedPluginSource(existingPlugin.source)) {
201
+ throw new Error(`Mercator already exists in ${marketplacePath} with a different source. Remove that entry before installing the CLI-managed plugin.`);
202
+ }
203
+ const pluginEntry = {
204
+ ...(isRecord(existingPlugin) ? existingPlugin : {}),
205
+ category: 'Productivity',
206
+ name: PLUGIN_NAME,
207
+ policy: {
208
+ authentication: 'ON_INSTALL',
209
+ installation: 'INSTALLED_BY_DEFAULT',
210
+ },
211
+ source: {
212
+ path: PLUGIN_SOURCE_PATH,
213
+ source: 'local',
214
+ },
215
+ };
216
+ const updatedPlugins = [...plugins];
217
+ if (existingIndex >= 0)
218
+ updatedPlugins[existingIndex] = pluginEntry;
219
+ else
220
+ updatedPlugins.push(pluginEntry);
221
+ return {
222
+ ...existing,
223
+ interface: {
224
+ displayName: 'Personal',
225
+ ...(isRecord(existing.interface) ? existing.interface : {}),
226
+ },
227
+ name: typeof existing.name === 'string' ? existing.name : 'personal',
228
+ plugins: updatedPlugins,
229
+ };
230
+ }
231
+ function removeMarketplaceEntry(marketplace) {
232
+ return {
233
+ ...marketplace,
234
+ plugins: (marketplace.plugins ?? []).filter((plugin) => !(isRecord(plugin) && plugin.name === PLUGIN_NAME)),
235
+ };
236
+ }
237
+ async function readPluginState(marketplacePath, pluginPath) {
238
+ const [marketplace, directory] = await Promise.all([
239
+ readMarketplace(marketplacePath),
240
+ readPluginDirectory(pluginPath),
241
+ ]);
242
+ const plugins = marketplace?.plugins ?? [];
243
+ if (!Array.isArray(plugins)) {
244
+ throw new Error(`Personal marketplace plugins must be an array: ${marketplacePath}`);
245
+ }
246
+ const entry = plugins.find((plugin) => isRecord(plugin) && plugin.name === PLUGIN_NAME);
247
+ const registered = isRecord(entry) && isManagedPluginSource(entry.source);
248
+ if (entry !== undefined && !registered) {
249
+ throw new Error(`Mercator already exists in ${marketplacePath} with a different source.`);
250
+ }
251
+ const desiredMarketplace = mergeMarketplace(marketplace, marketplacePath);
252
+ return {
253
+ directory,
254
+ ...(marketplace ? { marketplace } : {}),
255
+ marketplaceCurrent: JSON.stringify(marketplace) === JSON.stringify(desiredMarketplace),
256
+ registered,
257
+ };
258
+ }
259
+ function assertNoPluginConflict(state, marketplacePath, pluginPath) {
260
+ if (state.directory.error) {
261
+ throw new Error(`${state.directory.error}: ${pluginPath}`);
262
+ }
263
+ if (state.registered &&
264
+ !state.directory.managed &&
265
+ state.directory.version !== undefined) {
266
+ throw new Error(`Registered Mercator plugin is not CLI-managed: ${marketplacePath}`);
267
+ }
268
+ }
269
+ function isManagedPluginSource(source) {
270
+ return (isRecord(source) && source.source === 'local' && source.path === PLUGIN_SOURCE_PATH);
271
+ }
272
+ async function replacePluginDirectory(source, target, version) {
273
+ const parent = dirname(target);
274
+ const staging = join(parent, `.mercator-plugin-${randomUUID()}`);
275
+ const backup = join(parent, `.mercator-plugin-backup-${randomUUID()}`);
276
+ await mkdir(parent, { recursive: true });
277
+ await cp(source, staging, { recursive: true });
278
+ const manifestPath = join(staging, '.codex-plugin', 'plugin.json');
279
+ const manifest = parseRecord(await readFile(manifestPath, 'utf8'), manifestPath);
280
+ await writeJsonFile(manifestPath, { ...manifest, version });
281
+ let movedExisting = false;
282
+ try {
283
+ try {
284
+ await rename(target, backup);
285
+ movedExisting = true;
286
+ }
287
+ catch (error) {
288
+ if (!isMissingFile(error))
289
+ throw error;
290
+ }
291
+ await rename(staging, target);
292
+ }
293
+ catch (error) {
294
+ await rm(staging, { force: true, recursive: true });
295
+ if (movedExisting)
296
+ await rename(backup, target);
297
+ throw error;
298
+ }
299
+ if (movedExisting)
300
+ await rm(backup, { force: true, recursive: true });
301
+ }
302
+ async function writeJsonFile(path, value) {
303
+ let target = path;
304
+ let mode = 0o600;
305
+ let pathExists = false;
306
+ try {
307
+ const pathStats = await lstat(path);
308
+ pathExists = true;
309
+ if (pathStats.isSymbolicLink())
310
+ target = await realpath(path);
311
+ const targetStats = await stat(target);
312
+ if (!targetStats.isFile())
313
+ throw new Error(`Marketplace path is not a file: ${path}`);
314
+ mode = targetStats.mode & 0o777;
315
+ }
316
+ catch (error) {
317
+ if (!isMissingFile(error) || pathExists)
318
+ throw error;
319
+ }
320
+ await mkdir(dirname(target), { recursive: true });
321
+ const temporaryPath = `${target}.${randomUUID()}.tmp`;
322
+ await writeFile(temporaryPath, `${JSON.stringify(value, null, 2)}\n`, { mode });
323
+ try {
324
+ await rename(temporaryPath, target);
325
+ }
326
+ catch (error) {
327
+ if (!isWindowsReplaceError(error)) {
328
+ await rm(temporaryPath, { force: true });
329
+ throw error;
330
+ }
331
+ await replaceExistingFile(temporaryPath, target);
332
+ }
333
+ }
334
+ async function replaceExistingFile(source, target) {
335
+ const backup = `${target}.${randomUUID()}.bak`;
336
+ let movedExisting = false;
337
+ try {
338
+ await rename(target, backup);
339
+ movedExisting = true;
340
+ await rename(source, target);
341
+ }
342
+ catch (error) {
343
+ await rm(source, { force: true });
344
+ if (movedExisting)
345
+ await rename(backup, target);
346
+ throw error;
347
+ }
348
+ await rm(backup, { force: true });
349
+ }
350
+ async function withPluginLock(path, action) {
351
+ await mkdir(dirname(path), { recursive: true });
352
+ const deadline = Date.now() + LOCK_TIMEOUT_MS;
353
+ while (true) {
354
+ try {
355
+ await mkdir(path);
356
+ break;
357
+ }
358
+ catch (error) {
359
+ if (!isExistingFile(error))
360
+ throw error;
361
+ let lockStats;
362
+ try {
363
+ lockStats = await lstat(path);
364
+ }
365
+ catch (lockError) {
366
+ if (isMissingFile(lockError))
367
+ continue;
368
+ throw lockError;
369
+ }
370
+ if (!lockStats.isDirectory() || lockStats.isSymbolicLink()) {
371
+ throw new Error(`Mercator plugin lock path is not a directory: ${path}`);
372
+ }
373
+ if (Date.now() >= deadline) {
374
+ throw new Error(`Timed out waiting for Mercator plugin lock: ${path}`);
375
+ }
376
+ await delay(LOCK_RETRY_MS);
377
+ }
378
+ }
379
+ try {
380
+ return await action();
381
+ }
382
+ finally {
383
+ await rm(path, { force: true, recursive: true });
384
+ }
385
+ }
386
+ async function delay(milliseconds) {
387
+ await new Promise((resolve) => setTimeout(resolve, milliseconds));
388
+ }
389
+ function parseRecord(value, path) {
390
+ const parsed = JSON.parse(value);
391
+ if (!isRecord(parsed))
392
+ throw new Error(`Expected a JSON object: ${path}`);
393
+ return parsed;
394
+ }
395
+ function isRecord(value) {
396
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
397
+ }
398
+ function isMissingFile(error) {
399
+ return (typeof error === 'object' &&
400
+ error !== null &&
401
+ 'code' in error &&
402
+ error.code === 'ENOENT');
403
+ }
404
+ function isExistingFile(error) {
405
+ return (typeof error === 'object' &&
406
+ error !== null &&
407
+ 'code' in error &&
408
+ error.code === 'EEXIST');
409
+ }
410
+ function isWindowsReplaceError(error) {
411
+ return (process.platform === 'win32' &&
412
+ typeof error === 'object' &&
413
+ error !== null &&
414
+ 'code' in error &&
415
+ (error.code === 'EACCES' || error.code === 'EEXIST' || error.code === 'EPERM'));
416
+ }
417
+ //# sourceMappingURL=codex-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-plugin.js","sourceRoot":"","sources":["../src/codex-plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /** Result returned by a captured child process. */
2
+ export type CommandResult = {
3
+ code: number;
4
+ output: string;
5
+ };
6
+ /** Controls output collection and process lifetime for a captured command. */
7
+ export type CapturedCommandOptions = {
8
+ includeStderr?: boolean;
9
+ maxOutputBytes?: number;
10
+ timeoutMs?: number;
11
+ };
12
+ /** Returns whether an executable is available on the current process PATH. */
13
+ export declare function commandAvailable(command: string): Promise<boolean>;
14
+ /** Runs a command while inheriting the current terminal. */
15
+ export declare function runInteractiveCommand(command: string, args: string[]): Promise<void>;
16
+ /** Runs a command and returns bounded text output without throwing for process failures. */
17
+ export declare function runCapturedCommand(command: string, args: string[], options?: CapturedCommandOptions): Promise<CommandResult>;
@@ -0,0 +1,59 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { constants } from 'node:fs';
3
+ import { access } from 'node:fs/promises';
4
+ import { join } from 'node:path';
5
+ /** Returns whether an executable is available on the current process PATH. */
6
+ export async function commandAvailable(command) {
7
+ const paths = (process.env.PATH ?? '').split(process.platform === 'win32' ? ';' : ':');
8
+ const names = process.platform === 'win32' ? [`${command}.exe`, `${command}.cmd`] : [command];
9
+ for (const directory of paths) {
10
+ for (const name of names) {
11
+ try {
12
+ await access(join(directory, name), constants.X_OK);
13
+ return true;
14
+ }
15
+ catch {
16
+ // Continue searching PATH.
17
+ }
18
+ }
19
+ }
20
+ return false;
21
+ }
22
+ /** Runs a command while inheriting the current terminal. */
23
+ export async function runInteractiveCommand(command, args) {
24
+ await new Promise((resolve, reject) => {
25
+ const child = spawn(command, args, { stdio: 'inherit' });
26
+ child.once('error', reject);
27
+ child.once('exit', (code) => {
28
+ if (code === 0)
29
+ resolve();
30
+ else
31
+ reject(new Error(`${command} exited with status ${code ?? 'unknown'}`));
32
+ });
33
+ });
34
+ }
35
+ /** Runs a command and returns bounded text output without throwing for process failures. */
36
+ export async function runCapturedCommand(command, args, options = {}) {
37
+ return new Promise((resolve) => {
38
+ const child = spawn(command, args, {
39
+ stdio: ['ignore', 'pipe', 'pipe'],
40
+ ...(options.timeoutMs === undefined ? {} : { timeout: options.timeoutMs }),
41
+ });
42
+ let output = '';
43
+ const append = (chunk) => {
44
+ output += String(chunk);
45
+ if (options.maxOutputBytes !== undefined &&
46
+ Buffer.byteLength(output) > options.maxOutputBytes) {
47
+ child.kill();
48
+ }
49
+ };
50
+ child.stdout?.on('data', append);
51
+ if (options.includeStderr)
52
+ child.stderr?.on('data', append);
53
+ else
54
+ child.stderr?.resume();
55
+ child.once('error', () => resolve({ code: 1, output }));
56
+ child.once('exit', (code) => resolve({ code: code ?? 1, output }));
57
+ });
58
+ }
59
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type DoctorReport = {
2
+ discovery: 'failed' | 'ready';
3
+ endpoint: string;
4
+ error?: string;
5
+ paidExecution: 'not_verified';
6
+ serverVersion?: string;
7
+ tools: string[];
8
+ transport: 'failed' | 'ready';
9
+ };
10
+ export declare function diagnose(endpoint: string, fetcher?: typeof fetch, reportProgress?: (message: string) => void): Promise<DoctorReport>;
package/dist/doctor.js ADDED
@@ -0,0 +1,105 @@
1
+ const EXPECTED_TOOLS = [
2
+ 'search_services',
3
+ 'describe_service',
4
+ 'quote_plan',
5
+ 'create_job',
6
+ 'get_job',
7
+ 'create_job_review',
8
+ 'get_job_review',
9
+ 'send_product_feedback',
10
+ ];
11
+ export async function diagnose(endpoint, fetcher = fetch, reportProgress = () => undefined) {
12
+ const report = {
13
+ discovery: 'failed',
14
+ endpoint,
15
+ paidExecution: 'not_verified',
16
+ tools: [],
17
+ transport: 'failed',
18
+ };
19
+ let initialized;
20
+ reportProgress('Checking MCP transport...');
21
+ try {
22
+ initialized = await rpc(fetcher, endpoint, 'initialize', {
23
+ capabilities: {},
24
+ clientInfo: { name: 'mercator-doctor', version: '0.1.0' },
25
+ protocolVersion: '2025-11-25',
26
+ });
27
+ }
28
+ catch (error) {
29
+ report.error = errorMessage(error);
30
+ return report;
31
+ }
32
+ const serverInfo = initialized.serverInfo;
33
+ if (typeof serverInfo?.version === 'string')
34
+ report.serverVersion = serverInfo.version;
35
+ report.transport = 'ready';
36
+ let listed;
37
+ reportProgress('Checking MCP tool contract...');
38
+ try {
39
+ listed = await rpc(fetcher, endpoint, 'tools/list', {});
40
+ }
41
+ catch (error) {
42
+ report.error = errorMessage(error);
43
+ return report;
44
+ }
45
+ const tools = Array.isArray(listed.tools)
46
+ ? listed.tools.flatMap((tool) => {
47
+ if (!tool || typeof tool !== 'object' || !('name' in tool))
48
+ return [];
49
+ return typeof tool.name === 'string' ? [tool.name] : [];
50
+ })
51
+ : [];
52
+ report.tools = tools;
53
+ const missing = EXPECTED_TOOLS.filter((name) => !tools.includes(name));
54
+ if (missing.length > 0) {
55
+ report.error = `Missing expected tools: ${missing.join(', ')}`;
56
+ return report;
57
+ }
58
+ let searched;
59
+ reportProgress('Checking service discovery...');
60
+ try {
61
+ searched = await rpc(fetcher, endpoint, 'tools/call', {
62
+ arguments: { limit: 1, query: 'current web research' },
63
+ name: 'search_services',
64
+ });
65
+ }
66
+ catch (error) {
67
+ report.error = errorMessage(error);
68
+ return report;
69
+ }
70
+ report.discovery = Array.isArray(searched.content) ? 'ready' : 'failed';
71
+ if (report.discovery === 'failed') {
72
+ report.error = 'Discovery returned no MCP content';
73
+ return report;
74
+ }
75
+ return report;
76
+ }
77
+ function errorMessage(error) {
78
+ return error instanceof Error ? error.message : String(error);
79
+ }
80
+ async function rpc(fetcher, endpoint, method, params) {
81
+ const response = await fetcher(endpoint, {
82
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method, params }),
83
+ headers: {
84
+ accept: 'application/json, text/event-stream',
85
+ 'content-type': 'application/json',
86
+ },
87
+ method: 'POST',
88
+ signal: AbortSignal.timeout(15_000),
89
+ });
90
+ if (!response.ok)
91
+ throw new Error(`MCP request failed with HTTP ${response.status}`);
92
+ const body = await response.text();
93
+ const payload = /^data: (.+)$/m.exec(body)?.[1] ?? body;
94
+ const envelope = JSON.parse(payload);
95
+ if (envelope.error) {
96
+ throw new Error(typeof envelope.error.message === 'string'
97
+ ? envelope.error.message
98
+ : 'MCP request failed');
99
+ }
100
+ if (!envelope.result || typeof envelope.result !== 'object') {
101
+ throw new Error('MCP response is missing a result');
102
+ }
103
+ return envelope.result;
104
+ }
105
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}