obyte-mcp 0.1.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 (69) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +551 -0
  3. package/dist/cliArgs.d.ts +15 -0
  4. package/dist/cliArgs.js +97 -0
  5. package/dist/cliArgs.js.map +1 -0
  6. package/dist/config.d.ts +4 -0
  7. package/dist/config.js +77 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/configSnippets.d.ts +5 -0
  10. package/dist/configSnippets.js +71 -0
  11. package/dist/configSnippets.js.map +1 -0
  12. package/dist/constants.d.ts +16 -0
  13. package/dist/constants.js +17 -0
  14. package/dist/constants.js.map +1 -0
  15. package/dist/diagnostics.d.ts +10 -0
  16. package/dist/diagnostics.js +31 -0
  17. package/dist/diagnostics.js.map +1 -0
  18. package/dist/doctor.d.ts +6 -0
  19. package/dist/doctor.js +45 -0
  20. package/dist/doctor.js.map +1 -0
  21. package/dist/envelope.d.ts +6 -0
  22. package/dist/envelope.js +182 -0
  23. package/dist/envelope.js.map +1 -0
  24. package/dist/errors.d.ts +7 -0
  25. package/dist/errors.js +22 -0
  26. package/dist/errors.js.map +1 -0
  27. package/dist/index.d.ts +2 -0
  28. package/dist/index.js +59 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/jsonUtils.d.ts +6 -0
  31. package/dist/jsonUtils.js +52 -0
  32. package/dist/jsonUtils.js.map +1 -0
  33. package/dist/limiter.d.ts +9 -0
  34. package/dist/limiter.js +36 -0
  35. package/dist/limiter.js.map +1 -0
  36. package/dist/obyteClient.d.ts +41 -0
  37. package/dist/obyteClient.js +181 -0
  38. package/dist/obyteClient.js.map +1 -0
  39. package/dist/prompts.d.ts +2 -0
  40. package/dist/prompts.js +91 -0
  41. package/dist/prompts.js.map +1 -0
  42. package/dist/resources.d.ts +3 -0
  43. package/dist/resources.js +100 -0
  44. package/dist/resources.js.map +1 -0
  45. package/dist/schemas.d.ts +113 -0
  46. package/dist/schemas.js +93 -0
  47. package/dist/schemas.js.map +1 -0
  48. package/dist/secretGuard.d.ts +1 -0
  49. package/dist/secretGuard.js +41 -0
  50. package/dist/secretGuard.js.map +1 -0
  51. package/dist/server.d.ts +2 -0
  52. package/dist/server.js +41 -0
  53. package/dist/server.js.map +1 -0
  54. package/dist/setup.d.ts +8 -0
  55. package/dist/setup.js +47 -0
  56. package/dist/setup.js.map +1 -0
  57. package/dist/symbols.d.ts +12 -0
  58. package/dist/symbols.js +93 -0
  59. package/dist/symbols.js.map +1 -0
  60. package/dist/toolResult.d.ts +6 -0
  61. package/dist/toolResult.js +6 -0
  62. package/dist/toolResult.js.map +1 -0
  63. package/dist/tools.d.ts +4 -0
  64. package/dist/tools.js +294 -0
  65. package/dist/tools.js.map +1 -0
  66. package/dist/types.d.ts +65 -0
  67. package/dist/types.js +2 -0
  68. package/dist/types.js.map +1 -0
  69. package/package.json +44 -0
package/dist/config.js ADDED
@@ -0,0 +1,77 @@
1
+ import { DEFAULT_MAX_CONCURRENCY, DEFAULT_MAX_OUTPUT_BYTES, DEFAULT_TIMEOUT_MS, MAINNET_HUB, MAINNET_TOKEN_REGISTRY_ADDRESS, MAX_MAX_CONCURRENCY, MAX_MAX_OUTPUT_BYTES, MAX_TIMEOUT_MS, MIN_MAX_CONCURRENCY, MIN_MAX_OUTPUT_BYTES, MIN_TIMEOUT_MS, TESTNET_HUB } from "./constants.js";
2
+ import { ObyteMcpError } from "./errors.js";
3
+ export function parseNetwork(value, source) {
4
+ if (value === undefined || value === "")
5
+ return undefined;
6
+ if (value === "mainnet" || value === "testnet")
7
+ return value;
8
+ throw new ObyteMcpError("CONFIG_ERROR", `${source} must be "mainnet" or "testnet"`, { value });
9
+ }
10
+ export function buildRuntimeConfig(env = process.env, cli = {}) {
11
+ const envNetwork = parseNetwork(env.OBYTE_NETWORK, "OBYTE_NETWORK");
12
+ const network = envNetwork ?? cli.network ?? "mainnet";
13
+ const networkSource = envNetwork ? "env" : cli.network ? "cli" : "default";
14
+ const envHub = normalizeHubAddress(env.OBYTE_HUB_ADDRESS);
15
+ const cliHub = normalizeHubAddress(cli.hubAddress);
16
+ const hubAddress = envHub ?? cliHub ?? (network === "testnet" ? TESTNET_HUB : MAINNET_HUB);
17
+ const hubSource = envHub ? "env" : cliHub ? "cli" : "default";
18
+ const envRegistry = normalizeOptionalString(env.OBYTE_TOKEN_REGISTRY_ADDRESS);
19
+ const cliRegistry = normalizeOptionalString(cli.tokenRegistryAddress);
20
+ const tokenRegistryAddress = envRegistry ?? cliRegistry ?? (network === "mainnet" ? MAINNET_TOKEN_REGISTRY_ADDRESS : undefined);
21
+ const registrySource = envRegistry ? "env" : cliRegistry ? "cli" : network === "mainnet" ? "default" : "unset";
22
+ const timeoutMs = pickBoundedNumber(env.OBYTE_REQUEST_TIMEOUT_MS, cli.timeoutMs, DEFAULT_TIMEOUT_MS, MIN_TIMEOUT_MS, MAX_TIMEOUT_MS, "OBYTE_REQUEST_TIMEOUT_MS");
23
+ const maxConcurrency = pickBoundedNumber(env.OBYTE_MAX_CONCURRENCY, cli.maxConcurrency, DEFAULT_MAX_CONCURRENCY, MIN_MAX_CONCURRENCY, MAX_MAX_CONCURRENCY, "OBYTE_MAX_CONCURRENCY");
24
+ const maxOutputBytes = pickBoundedNumber(env.OBYTE_MAX_OUTPUT_BYTES, cli.maxOutputBytes, DEFAULT_MAX_OUTPUT_BYTES, MIN_MAX_OUTPUT_BYTES, MAX_MAX_OUTPUT_BYTES, "OBYTE_MAX_OUTPUT_BYTES");
25
+ return {
26
+ network,
27
+ hubAddress,
28
+ tokenRegistryAddress,
29
+ timeoutMs,
30
+ maxConcurrency,
31
+ maxOutputBytes,
32
+ source: {
33
+ network: networkSource,
34
+ hubAddress: hubSource,
35
+ tokenRegistryAddress: registrySource,
36
+ timeoutMs: env.OBYTE_REQUEST_TIMEOUT_MS ? "env" : cli.timeoutMs !== undefined ? "cli" : "default",
37
+ maxConcurrency: env.OBYTE_MAX_CONCURRENCY ? "env" : cli.maxConcurrency !== undefined ? "cli" : "default",
38
+ maxOutputBytes: env.OBYTE_MAX_OUTPUT_BYTES ? "env" : cli.maxOutputBytes !== undefined ? "cli" : "default"
39
+ }
40
+ };
41
+ }
42
+ export function normalizeHubAddress(value) {
43
+ const raw = normalizeOptionalString(value);
44
+ if (!raw)
45
+ return undefined;
46
+ let parsed;
47
+ try {
48
+ parsed = new URL(raw);
49
+ }
50
+ catch {
51
+ throw new ObyteMcpError("CONFIG_ERROR", "Hub address must be a valid URL", { value: raw });
52
+ }
53
+ if (parsed.username || parsed.password) {
54
+ throw new ObyteMcpError("CONFIG_ERROR", "Hub address must not include credentials");
55
+ }
56
+ const hostname = parsed.hostname.toLowerCase();
57
+ const isLocalhost = hostname === "localhost" || hostname === "127.0.0.1" || hostname === "::1" || hostname === "[::1]";
58
+ if (parsed.protocol !== "https:" && !(parsed.protocol === "http:" && isLocalhost)) {
59
+ throw new ObyteMcpError("CONFIG_ERROR", "Custom hub URL must use https, except http localhost is allowed for development", { value: raw });
60
+ }
61
+ parsed.hash = "";
62
+ return parsed.toString().replace(/\/+$/, "");
63
+ }
64
+ function normalizeOptionalString(value) {
65
+ const trimmed = value?.trim();
66
+ return trimmed ? trimmed : undefined;
67
+ }
68
+ function pickBoundedNumber(envValue, cliValue, defaultValue, min, max, label) {
69
+ const raw = envValue !== undefined && envValue !== "" ? Number(envValue) : cliValue;
70
+ if (raw === undefined)
71
+ return defaultValue;
72
+ if (!Number.isInteger(raw) || raw < min || raw > max) {
73
+ throw new ObyteMcpError("CONFIG_ERROR", `${label} must be an integer from ${min} to ${max}`, { value: raw });
74
+ }
75
+ return raw;
76
+ }
77
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ClientName } from "./cliArgs.js";
2
+ import type { CliOptions, Network, RuntimeConfig } from "./types.js";
3
+ export declare function configSnippet(client: ClientName, config: RuntimeConfig): string;
4
+ export declare function allConfigSnippets(config: RuntimeConfig): string;
5
+ export declare function cliOptionsFromNetwork(network: Network): CliOptions;
@@ -0,0 +1,71 @@
1
+ export function configSnippet(client, config) {
2
+ if (client === "claude-code")
3
+ return claudeCodeCommand(config);
4
+ if (client === "claude-desktop")
5
+ return claudeDesktopJson(config);
6
+ return codexJson(config);
7
+ }
8
+ export function allConfigSnippets(config) {
9
+ return `# Codex
10
+
11
+ ${codexJson(config)}
12
+
13
+ # Claude Desktop
14
+
15
+ ${claudeDesktopJson(config)}
16
+
17
+ # Claude Code
18
+
19
+ ${claudeCodeCommand(config)}
20
+ `;
21
+ }
22
+ export function cliOptionsFromNetwork(network) {
23
+ return { network };
24
+ }
25
+ function commandArgs(config) {
26
+ const args = ["-y", "obyte-mcp", "--network", config.network];
27
+ if (config.source.hubAddress !== "default")
28
+ args.push("--hub", config.hubAddress);
29
+ if (config.tokenRegistryAddress && config.source.tokenRegistryAddress !== "default") {
30
+ args.push("--token-registry", config.tokenRegistryAddress);
31
+ }
32
+ return args;
33
+ }
34
+ function codexJson(config) {
35
+ return fencedJson({
36
+ mcpServers: {
37
+ obyte: {
38
+ command: "npx",
39
+ args: commandArgs(config)
40
+ }
41
+ }
42
+ });
43
+ }
44
+ function claudeDesktopJson(config) {
45
+ return fencedJson({
46
+ mcpServers: {
47
+ obyte: {
48
+ command: "npx",
49
+ args: commandArgs(config)
50
+ }
51
+ }
52
+ });
53
+ }
54
+ function claudeCodeCommand(config) {
55
+ return `\`\`\`bash
56
+ claude mcp add --transport stdio obyte -- npx ${commandArgs(config).map(shellQuote).join(" ")}
57
+ \`\`\`
58
+
59
+ The \`--\` before \`npx\` is required. Without it, Claude Code can parse server flags as Claude flags.`;
60
+ }
61
+ function fencedJson(value) {
62
+ return `\`\`\`json
63
+ ${JSON.stringify(value, null, 2)}
64
+ \`\`\``;
65
+ }
66
+ function shellQuote(value) {
67
+ if (/^[A-Za-z0-9._/:=-]+$/.test(value))
68
+ return value;
69
+ return `'${value.replace(/'/g, "'\\''")}'`;
70
+ }
71
+ //# sourceMappingURL=configSnippets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configSnippets.js","sourceRoot":"","sources":["../src/configSnippets.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,aAAa,CAAC,MAAkB,EAAE,MAAqB;IACrE,IAAI,MAAM,KAAK,aAAa;QAAE,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC/D,IAAI,MAAM,KAAK,gBAAgB;QAAE,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAClE,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAqB;IACrD,OAAO;;EAEP,SAAS,CAAC,MAAM,CAAC;;;;EAIjB,iBAAiB,CAAC,MAAM,CAAC;;;;EAIzB,iBAAiB,CAAC,MAAM,CAAC;CAC1B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC;AAED,SAAS,WAAW,CAAC,MAAqB;IACxC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAClF,IAAI,MAAM,CAAC,oBAAoB,IAAI,MAAM,CAAC,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;QACpF,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,MAAqB;IACtC,OAAO,UAAU,CAAC;QAChB,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC;aAC1B;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAqB;IAC9C,OAAO,UAAU,CAAC;QAChB,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC;aAC1B;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAqB;IAC9C,OAAO;gDACuC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;;;uGAGU,CAAC;AACxG,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO;EACP,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;OACzB,CAAC;AACR,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,16 @@
1
+ export declare const PACKAGE_NAME = "obyte-mcp";
2
+ export declare const PACKAGE_VERSION = "0.1.0";
3
+ export declare const MAINNET_HUB = "https://obyte.org/api";
4
+ export declare const TESTNET_HUB = "https://testnet.obyte.org/api";
5
+ export declare const MAINNET_TOKEN_REGISTRY_ADDRESS = "O6H6ZIFI57X3PLTYHOCVYPP5A553CYFQ";
6
+ export declare const DEFAULT_TIMEOUT_MS = 20000;
7
+ export declare const MIN_TIMEOUT_MS = 1000;
8
+ export declare const MAX_TIMEOUT_MS = 120000;
9
+ export declare const DEFAULT_MAX_CONCURRENCY = 4;
10
+ export declare const MIN_MAX_CONCURRENCY = 1;
11
+ export declare const MAX_MAX_CONCURRENCY = 10;
12
+ export declare const DEFAULT_MAX_OUTPUT_BYTES = 262144;
13
+ export declare const MIN_MAX_OUTPUT_BYTES = 16384;
14
+ export declare const MAX_MAX_OUTPUT_BYTES = 1048576;
15
+ export declare const WITNESSES_CACHE_TTL_MS: number;
16
+ export declare const MAX_JSON_PAYLOAD_BYTES: number;
@@ -0,0 +1,17 @@
1
+ export const PACKAGE_NAME = "obyte-mcp";
2
+ export const PACKAGE_VERSION = "0.1.0";
3
+ export const MAINNET_HUB = "https://obyte.org/api";
4
+ export const TESTNET_HUB = "https://testnet.obyte.org/api";
5
+ export const MAINNET_TOKEN_REGISTRY_ADDRESS = "O6H6ZIFI57X3PLTYHOCVYPP5A553CYFQ";
6
+ export const DEFAULT_TIMEOUT_MS = 20_000;
7
+ export const MIN_TIMEOUT_MS = 1_000;
8
+ export const MAX_TIMEOUT_MS = 120_000;
9
+ export const DEFAULT_MAX_CONCURRENCY = 4;
10
+ export const MIN_MAX_CONCURRENCY = 1;
11
+ export const MAX_MAX_CONCURRENCY = 10;
12
+ export const DEFAULT_MAX_OUTPUT_BYTES = 262_144;
13
+ export const MIN_MAX_OUTPUT_BYTES = 16_384;
14
+ export const MAX_MAX_OUTPUT_BYTES = 1_048_576;
15
+ export const WITNESSES_CACHE_TTL_MS = 10 * 60 * 1000;
16
+ export const MAX_JSON_PAYLOAD_BYTES = 64 * 1024;
17
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AACxC,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AAEvC,MAAM,CAAC,MAAM,WAAW,GAAG,uBAAuB,CAAC;AACnD,MAAM,CAAC,MAAM,WAAW,GAAG,+BAA+B,CAAC;AAC3D,MAAM,CAAC,MAAM,8BAA8B,GAAG,kCAAkC,CAAC;AAEjF,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AACzC,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC;AACpC,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAEtC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC,MAAM,CAAC,MAAM,wBAAwB,GAAG,OAAO,CAAC;AAChD,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAC3C,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAE9C,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACrD,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,IAAI,CAAC"}
@@ -0,0 +1,10 @@
1
+ export type DiagnosticLevel = "debug" | "info" | "warn" | "error";
2
+ export interface DiagnosticEvent {
3
+ level: DiagnosticLevel;
4
+ event: string;
5
+ message: string;
6
+ request_id?: string;
7
+ tool?: string;
8
+ details?: unknown;
9
+ }
10
+ export declare function writeDiagnostic(diagnostic: DiagnosticEvent): void;
@@ -0,0 +1,31 @@
1
+ import { PACKAGE_NAME } from "./constants.js";
2
+ export function writeDiagnostic(diagnostic) {
3
+ const line = {
4
+ ts: new Date().toISOString(),
5
+ package: PACKAGE_NAME,
6
+ level: diagnostic.level,
7
+ event: diagnostic.event,
8
+ request_id: diagnostic.request_id,
9
+ tool: diagnostic.tool,
10
+ message: diagnostic.message,
11
+ details: redactDiagnostics(diagnostic.details)
12
+ };
13
+ process.stderr.write(`${JSON.stringify(line)}\n`);
14
+ }
15
+ function redactDiagnostics(value) {
16
+ if (value === null || typeof value !== "object")
17
+ return value;
18
+ if (Array.isArray(value))
19
+ return value.map(redactDiagnostics);
20
+ const result = {};
21
+ for (const [key, child] of Object.entries(value)) {
22
+ if (/private|secret|seed|mnemonic|passphrase|xprv/i.test(key)) {
23
+ result[key] = "[redacted]";
24
+ }
25
+ else {
26
+ result[key] = redactDiagnostics(child);
27
+ }
28
+ }
29
+ return result;
30
+ }
31
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAa9C,MAAM,UAAU,eAAe,CAAC,UAA2B;IACzD,MAAM,IAAI,GAAG;QACX,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5B,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,UAAU,EAAE,UAAU,CAAC,UAAU;QACjC,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,OAAO,EAAE,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC;KAC/C,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAE9D,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;QAC5E,IAAI,+CAA+C,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9D,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { CliOptions } from "./types.js";
2
+ interface DoctorOptions {
3
+ json: boolean;
4
+ }
5
+ export declare function runDoctor(cliOptions: CliOptions, options: DoctorOptions): Promise<void>;
6
+ export {};
package/dist/doctor.js ADDED
@@ -0,0 +1,45 @@
1
+ import { buildRuntimeConfig } from "./config.js";
2
+ import { PACKAGE_NAME, PACKAGE_VERSION } from "./constants.js";
3
+ import { ObyteMcpError } from "./errors.js";
4
+ export async function runDoctor(cliOptions, options) {
5
+ const checks = [];
6
+ let config;
7
+ checks.push(checkNodeVersion());
8
+ try {
9
+ config = buildRuntimeConfig(process.env, cliOptions);
10
+ checks.push({ name: "config", ok: true, message: "Runtime config is valid" });
11
+ }
12
+ catch (error) {
13
+ checks.push({
14
+ name: "config",
15
+ ok: false,
16
+ message: error instanceof ObyteMcpError ? error.message : String(error)
17
+ });
18
+ }
19
+ const result = {
20
+ package: PACKAGE_NAME,
21
+ version: PACKAGE_VERSION,
22
+ ok: checks.every((check) => check.ok),
23
+ checks,
24
+ config
25
+ };
26
+ if (options.json) {
27
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
28
+ }
29
+ else {
30
+ process.stdout.write(`${PACKAGE_NAME} ${PACKAGE_VERSION} doctor\n`);
31
+ for (const check of checks) {
32
+ process.stdout.write(`${check.ok ? "ok" : "fail"} ${check.name}: ${check.message}\n`);
33
+ }
34
+ }
35
+ if (!result.ok)
36
+ process.exitCode = 1;
37
+ }
38
+ function checkNodeVersion() {
39
+ const major = Number(process.versions.node.split(".")[0]);
40
+ if (major >= 20) {
41
+ return { name: "node", ok: true, message: `Node ${process.versions.node}` };
42
+ }
43
+ return { name: "node", ok: false, message: `Node >=20 is required, current ${process.versions.node}` };
44
+ }
45
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAa5C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAAsB,EAAE,OAAsB;IAC5E,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,IAAI,MAAe,CAAC;IAEpB,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;IAChF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,KAAK,YAAY,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SACxE,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,eAAe;QACxB,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM;QACN,MAAM;KACP,CAAC;IAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,IAAI,eAAe,WAAW,CAAC,CAAC;QACpE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,gBAAgB;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;IAC9E,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,kCAAkC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;AACzG,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { RuntimeConfig, ToolEnvelope, ToolExecutionContext } from "./types.js";
2
+ export declare function createToolContext(config: RuntimeConfig, toolName: string): ToolExecutionContext;
3
+ export declare function successEnvelope(context: ToolExecutionContext, data: unknown): ToolEnvelope;
4
+ export declare function errorEnvelope(context: ToolExecutionContext, error: unknown): ToolEnvelope;
5
+ export declare function envelopeToText(envelope: ToolEnvelope, maxOutputBytes: number): string;
6
+ export declare function executeEnvelope<T>(config: RuntimeConfig, toolName: string, retryCounter: () => number, handler: (context: ToolExecutionContext) => Promise<T>): Promise<string>;
@@ -0,0 +1,182 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { ObyteMcpError, toObyteMcpError } from "./errors.js";
3
+ import { sortKnownMapOutputs } from "./jsonUtils.js";
4
+ export function createToolContext(config, toolName) {
5
+ return {
6
+ config,
7
+ requestId: randomUUID(),
8
+ toolName,
9
+ startedAt: Date.now(),
10
+ retryCount: 0
11
+ };
12
+ }
13
+ export function successEnvelope(context, data) {
14
+ return {
15
+ ok: true,
16
+ meta: {
17
+ network: context.config.network,
18
+ hub: context.config.hubAddress,
19
+ tool: context.toolName,
20
+ request_id: context.requestId,
21
+ duration_ms: Date.now() - context.startedAt,
22
+ retry_count: context.retryCount,
23
+ truncated: false
24
+ },
25
+ data: sortKnownMapOutputs(context.toolName, data)
26
+ };
27
+ }
28
+ export function errorEnvelope(context, error) {
29
+ const normalized = toObyteMcpError(error);
30
+ return {
31
+ ok: false,
32
+ meta: {
33
+ network: context.config.network,
34
+ hub: context.config.hubAddress,
35
+ tool: context.toolName,
36
+ request_id: context.requestId,
37
+ duration_ms: Date.now() - context.startedAt,
38
+ retry_count: context.retryCount,
39
+ truncated: false
40
+ },
41
+ error: {
42
+ code: normalized.code,
43
+ message: normalized.message,
44
+ details: normalized.details
45
+ }
46
+ };
47
+ }
48
+ export function envelopeToText(envelope, maxOutputBytes) {
49
+ const serialized = JSON.stringify(envelope, null, 2);
50
+ const initialBytes = Buffer.byteLength(serialized, "utf8");
51
+ if (initialBytes <= maxOutputBytes)
52
+ return serialized;
53
+ if (!envelope.ok) {
54
+ return JSON.stringify(outputTooLargeEnvelope(envelope, initialBytes, maxOutputBytes), null, 2);
55
+ }
56
+ const truncated = structuredClone(envelope);
57
+ if (!truncated.ok)
58
+ return JSON.stringify(outputTooLargeEnvelope(envelope, initialBytes, maxOutputBytes), null, 2);
59
+ truncated.meta.truncated = true;
60
+ truncated.meta.output_bytes_before_truncation = initialBytes;
61
+ truncated.meta.truncation_reason = "response exceeded OBYTE_MAX_OUTPUT_BYTES";
62
+ truncated.data = truncateValue(truncated.data, Math.max(1024, Math.floor(maxOutputBytes * 0.7)));
63
+ let text = JSON.stringify(truncated, null, 2);
64
+ let bytes = Buffer.byteLength(text, "utf8");
65
+ while (bytes > maxOutputBytes && truncated.ok) {
66
+ truncated.data = truncateValue(truncated.data, Math.max(256, Math.floor(maxOutputBytes * 0.45)));
67
+ text = JSON.stringify(truncated, null, 2);
68
+ bytes = Buffer.byteLength(text, "utf8");
69
+ if (isTerminalTruncation(truncated.data))
70
+ break;
71
+ }
72
+ if (bytes > maxOutputBytes) {
73
+ return JSON.stringify(outputTooLargeEnvelope(envelope, initialBytes, maxOutputBytes), null, 2);
74
+ }
75
+ if (truncated.ok)
76
+ truncated.meta.output_bytes_after_truncation = bytes;
77
+ return JSON.stringify(truncated, null, 2);
78
+ }
79
+ function outputTooLargeEnvelope(original, initialBytes, maxOutputBytes) {
80
+ return {
81
+ ok: false,
82
+ meta: {
83
+ ...original.meta,
84
+ truncated: false,
85
+ output_bytes_before_truncation: initialBytes,
86
+ truncation_reason: "response exceeded OBYTE_MAX_OUTPUT_BYTES and could not be safely truncated"
87
+ },
88
+ error: {
89
+ code: "OUTPUT_TOO_LARGE",
90
+ message: "Tool response exceeded configured output limit",
91
+ details: { initialBytes, maxOutputBytes }
92
+ }
93
+ };
94
+ }
95
+ function truncateValue(value, budgetBytes) {
96
+ if (value === null || typeof value === "number" || typeof value === "boolean")
97
+ return value;
98
+ if (typeof value === "string")
99
+ return truncateString(value, budgetBytes);
100
+ if (Array.isArray(value))
101
+ return truncateArray(value, budgetBytes);
102
+ if (typeof value === "object")
103
+ return truncateObject(value, budgetBytes);
104
+ return String(value);
105
+ }
106
+ function truncateArray(value, budgetBytes) {
107
+ const result = [];
108
+ for (let index = 0; index < value.length; index += 1) {
109
+ let childBudget = Math.floor(budgetBytes / Math.max(1, value.length));
110
+ let child = truncateValue(value[index], childBudget);
111
+ let candidate = [...result, child];
112
+ while (Buffer.byteLength(JSON.stringify(candidate), "utf8") > budgetBytes && childBudget > 128) {
113
+ childBudget = Math.floor(childBudget * 0.7);
114
+ child = truncateValue(value[index], childBudget);
115
+ candidate = [...result, child];
116
+ }
117
+ if (Buffer.byteLength(JSON.stringify(candidate), "utf8") > budgetBytes) {
118
+ result.push({ __truncated__: true, omitted_items: value.length - index });
119
+ return result;
120
+ }
121
+ result.push(candidate[candidate.length - 1]);
122
+ }
123
+ return result;
124
+ }
125
+ function truncateObject(value, budgetBytes) {
126
+ const result = {};
127
+ const entries = Object.entries(value);
128
+ for (let index = 0; index < entries.length; index += 1) {
129
+ const [key, child] = entries[index];
130
+ let childBudget = Math.floor(budgetBytes / Math.max(1, entries.length));
131
+ let truncatedChild = truncateValue(child, childBudget);
132
+ let candidate = {
133
+ ...result,
134
+ [key]: truncatedChild
135
+ };
136
+ while (Buffer.byteLength(JSON.stringify(candidate), "utf8") > budgetBytes && childBudget > 128) {
137
+ childBudget = Math.floor(childBudget * 0.7);
138
+ truncatedChild = truncateValue(child, childBudget);
139
+ candidate = {
140
+ ...result,
141
+ [key]: truncatedChild
142
+ };
143
+ }
144
+ if (Buffer.byteLength(JSON.stringify(candidate), "utf8") > budgetBytes) {
145
+ result.__truncated_keys__ = entries.slice(index).map(([entryKey]) => entryKey);
146
+ return result;
147
+ }
148
+ result[key] = candidate[key];
149
+ }
150
+ return result;
151
+ }
152
+ function truncateString(value, budgetBytes) {
153
+ const suffix = "...[truncated]";
154
+ if (Buffer.byteLength(value, "utf8") <= budgetBytes)
155
+ return value;
156
+ const target = Math.max(0, budgetBytes - Buffer.byteLength(suffix, "utf8"));
157
+ let current = "";
158
+ for (const char of value) {
159
+ if (Buffer.byteLength(current + char, "utf8") > target)
160
+ break;
161
+ current += char;
162
+ }
163
+ return current + suffix;
164
+ }
165
+ function isTerminalTruncation(value) {
166
+ return typeof value === "string" || value === null || typeof value !== "object";
167
+ }
168
+ export async function executeEnvelope(config, toolName, retryCounter, handler) {
169
+ const beforeRetries = retryCounter();
170
+ const context = createToolContext(config, toolName);
171
+ try {
172
+ const data = await handler(context);
173
+ context.retryCount = retryCounter() - beforeRetries;
174
+ return envelopeToText(successEnvelope(context, data), config.maxOutputBytes);
175
+ }
176
+ catch (error) {
177
+ context.retryCount = retryCounter() - beforeRetries;
178
+ const envelope = error instanceof ObyteMcpError ? errorEnvelope(context, error) : errorEnvelope(context, error);
179
+ return envelopeToText(envelope, config.maxOutputBytes);
180
+ }
181
+ }
182
+ //# sourceMappingURL=envelope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../src/envelope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ErrorCode } from "./types.js";
2
+ export declare class ObyteMcpError extends Error {
3
+ readonly code: ErrorCode;
4
+ readonly details?: unknown;
5
+ constructor(code: ErrorCode, message: string, details?: unknown);
6
+ }
7
+ export declare function toObyteMcpError(error: unknown): ObyteMcpError;
package/dist/errors.js ADDED
@@ -0,0 +1,22 @@
1
+ export class ObyteMcpError extends Error {
2
+ code;
3
+ details;
4
+ constructor(code, message, details) {
5
+ super(message);
6
+ this.name = "ObyteMcpError";
7
+ this.code = code;
8
+ this.details = details;
9
+ }
10
+ }
11
+ export function toObyteMcpError(error) {
12
+ if (error instanceof ObyteMcpError)
13
+ return error;
14
+ if (error instanceof Error) {
15
+ if (error.name === "AbortError") {
16
+ return new ObyteMcpError("TIMEOUT", "Hub request timed out");
17
+ }
18
+ return new ObyteMcpError("INTERNAL_ERROR", error.message);
19
+ }
20
+ return new ObyteMcpError("INTERNAL_ERROR", "Unknown internal error");
21
+ }
22
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,IAAI,CAAY;IAChB,OAAO,CAAW;IAE3B,YAAY,IAAe,EAAE,OAAe,EAAE,OAAiB;QAC7D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,KAAK,YAAY,aAAa;QAAE,OAAO,KAAK,CAAC;IACjD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAChC,OAAO,IAAI,aAAa,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,IAAI,aAAa,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,IAAI,aAAa,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;AACvE,CAAC"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env node
2
+ import { PACKAGE_NAME, PACKAGE_VERSION } from "./constants.js";
3
+ import { parseCliArgs } from "./cliArgs.js";
4
+ import { buildRuntimeConfig } from "./config.js";
5
+ import { ObyteMcpError, toObyteMcpError } from "./errors.js";
6
+ import { runDoctor } from "./doctor.js";
7
+ import { runServer } from "./server.js";
8
+ import { runSetup } from "./setup.js";
9
+ async function main() {
10
+ const parsed = parseCliArgs(process.argv.slice(2));
11
+ if (parsed.command === "help") {
12
+ process.stdout.write(helpText());
13
+ return;
14
+ }
15
+ if (parsed.command === "version") {
16
+ process.stdout.write(`${PACKAGE_VERSION}\n`);
17
+ return;
18
+ }
19
+ if (parsed.command === "setup") {
20
+ await runSetup(parsed.options, parsed.setup);
21
+ return;
22
+ }
23
+ if (parsed.command === "doctor") {
24
+ await runDoctor(parsed.options, parsed.doctor);
25
+ return;
26
+ }
27
+ const config = buildRuntimeConfig(process.env, parsed.options);
28
+ await runServer(config);
29
+ }
30
+ function helpText() {
31
+ return `${PACKAGE_NAME} ${PACKAGE_VERSION}
32
+
33
+ Local stdio MCP server for querying Obyte hubs.
34
+
35
+ Usage:
36
+ ${PACKAGE_NAME} [--network mainnet|testnet] [--hub URL] [--token-registry ADDRESS]
37
+ ${PACKAGE_NAME} setup [--print-only] [--client codex|claude-desktop|claude-code] [--network mainnet|testnet]
38
+ ${PACKAGE_NAME} doctor [--json]
39
+ ${PACKAGE_NAME} --help
40
+ ${PACKAGE_NAME} --version
41
+
42
+ Options:
43
+ --network Obyte network, default mainnet
44
+ --hub Custom hub URL; https only, except http localhost
45
+ --token-registry Token registry AA address
46
+ --timeout-ms Hub request timeout, 1000..120000
47
+ --max-concurrency Max concurrent hub requests, 1..10
48
+ --max-output-bytes Max MCP tool response bytes, 16384..1048576
49
+
50
+ The default command starts MCP stdio. Do not print logs to stdout in this mode.
51
+ `;
52
+ }
53
+ main().catch((error) => {
54
+ const normalized = toObyteMcpError(error);
55
+ const body = normalized instanceof ObyteMcpError ? normalized : toObyteMcpError(error);
56
+ process.stderr.write(`${body.code}: ${body.message}\n`);
57
+ process.exitCode = 1;
58
+ });
59
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnD,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,eAAe,IAAI,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAC/B,MAAM,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,GAAG,YAAY,IAAI,eAAe;;;;;IAKvC,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;;;;;;;;;;;CAWf,CAAC;AACF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,UAAU,YAAY,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACvF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;IACxD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function jsonByteLength(value: unknown): number;
2
+ export declare function assertJsonSize(value: unknown, maxBytes?: number): void;
3
+ export declare function sortMapLike(value: unknown): unknown;
4
+ export declare function sortKnownMapOutputs(toolName: string, data: unknown): unknown;
5
+ export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
6
+ export declare function redactForError(value: unknown): unknown;