mandala-computer-mcp 0.4.0 → 0.6.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.
- package/README.md +558 -29
- package/dist/api.d.ts +59 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +404 -33
- package/dist/api.js.map +1 -1
- package/dist/artifacts.d.ts +63 -0
- package/dist/artifacts.d.ts.map +1 -0
- package/dist/artifacts.js +81 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +52 -21
- package/dist/cli.js.map +1 -1
- package/dist/credentials.d.ts +33 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +395 -0
- package/dist/credentials.js.map +1 -0
- package/dist/errors.d.ts +122 -11
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +237 -41
- package/dist/errors.js.map +1 -1
- package/dist/executions.d.ts +43 -0
- package/dist/executions.d.ts.map +1 -0
- package/dist/executions.js +162 -0
- package/dist/executions.js.map +1 -0
- package/dist/format.d.ts +33 -8
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +107 -12
- package/dist/format.js.map +1 -1
- package/dist/http.d.ts +42 -0
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +383 -3
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/paths.d.ts +50 -2
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +65 -5
- package/dist/paths.js.map +1 -1
- package/dist/results.d.ts +97 -0
- package/dist/results.d.ts.map +1 -0
- package/dist/results.js +263 -0
- package/dist/results.js.map +1 -0
- package/dist/secret-errors.d.ts +59 -0
- package/dist/secret-errors.d.ts.map +1 -0
- package/dist/secret-errors.js +199 -0
- package/dist/secret-errors.js.map +1 -0
- package/dist/secret-store.d.ts +115 -0
- package/dist/secret-store.d.ts.map +1 -0
- package/dist/secret-store.js +105 -0
- package/dist/secret-store.js.map +1 -0
- package/dist/server.d.ts +3 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +60 -9
- package/dist/server.js.map +1 -1
- package/dist/session.d.ts +6 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +1 -1
- package/dist/session.js.map +1 -1
- package/dist/stdio.d.ts +5 -1
- package/dist/stdio.d.ts.map +1 -1
- package/dist/stdio.js +10 -4
- package/dist/stdio.js.map +1 -1
- package/dist/tool-filters.d.ts +38 -0
- package/dist/tool-filters.d.ts.map +1 -0
- package/dist/tool-filters.js +137 -0
- package/dist/tool-filters.js.map +1 -0
- package/dist/tools/account.d.ts +3 -0
- package/dist/tools/account.d.ts.map +1 -0
- package/dist/tools/account.js +122 -0
- package/dist/tools/account.js.map +1 -0
- package/dist/tools/activities.d.ts +3 -0
- package/dist/tools/activities.d.ts.map +1 -0
- package/dist/tools/activities.js +140 -0
- package/dist/tools/activities.js.map +1 -0
- package/dist/tools/agent.d.ts.map +1 -1
- package/dist/tools/agent.js +21 -9
- package/dist/tools/agent.js.map +1 -1
- package/dist/tools/artifacts.d.ts +3 -0
- package/dist/tools/artifacts.d.ts.map +1 -0
- package/dist/tools/artifacts.js +97 -0
- package/dist/tools/artifacts.js.map +1 -0
- package/dist/tools/chat.d.ts +6 -0
- package/dist/tools/chat.d.ts.map +1 -0
- package/dist/tools/chat.js +192 -0
- package/dist/tools/chat.js.map +1 -0
- package/dist/tools/computers.d.ts.map +1 -1
- package/dist/tools/computers.js +28 -16
- package/dist/tools/computers.js.map +1 -1
- package/dist/tools/directory.d.ts +13 -0
- package/dist/tools/directory.d.ts.map +1 -0
- package/dist/tools/directory.js +88 -0
- package/dist/tools/directory.js.map +1 -0
- package/dist/tools/executions.d.ts +3 -0
- package/dist/tools/executions.d.ts.map +1 -0
- package/dist/tools/executions.js +87 -0
- package/dist/tools/executions.js.map +1 -0
- package/dist/tools/guest.d.ts.map +1 -1
- package/dist/tools/guest.js +184 -35
- package/dist/tools/guest.js.map +1 -1
- package/dist/tools/input.d.ts +2 -0
- package/dist/tools/input.d.ts.map +1 -1
- package/dist/tools/input.js +31 -5
- package/dist/tools/input.js.map +1 -1
- package/dist/tools/results.d.ts +30 -0
- package/dist/tools/results.d.ts.map +1 -0
- package/dist/tools/results.js +106 -0
- package/dist/tools/results.js.map +1 -0
- package/dist/tools/secrets.d.ts +78 -0
- package/dist/tools/secrets.d.ts.map +1 -0
- package/dist/tools/secrets.js +448 -0
- package/dist/tools/secrets.js.map +1 -0
- package/dist/tools/signals.d.ts +3 -0
- package/dist/tools/signals.d.ts.map +1 -0
- package/dist/tools/signals.js +116 -0
- package/dist/tools/signals.js.map +1 -0
- package/dist/tools/snapshots.d.ts.map +1 -1
- package/dist/tools/snapshots.js +52 -10
- package/dist/tools/snapshots.js.map +1 -1
- package/dist/tools/ssh.d.ts +3 -0
- package/dist/tools/ssh.d.ts.map +1 -0
- package/dist/tools/ssh.js +186 -0
- package/dist/tools/ssh.js.map +1 -0
- package/dist/tools/webhooks.js +1 -1
- package/dist/tools/webhooks.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/** Finite, lossless presentations for stable reads over volatile guest output. */
|
|
2
|
+
import { isExecutionId } from './paths.js';
|
|
3
|
+
export const EXECUTION_OUTPUT_DEFAULT = 4096;
|
|
4
|
+
export const EXECUTION_OUTPUT_MAX = 16384;
|
|
5
|
+
const DIAGNOSTIC_AVAILABLE_MAX = 65536;
|
|
6
|
+
const DIAGNOSTIC_DISPLAY_MAX = 4096;
|
|
7
|
+
export const EXECUTION_RESULT_MAX = 256 * 1024;
|
|
8
|
+
/** Messages contain only field names we own, never an unexpected payload value. */
|
|
9
|
+
export class ExecutionValueError extends Error {
|
|
10
|
+
}
|
|
11
|
+
function invalid(field) {
|
|
12
|
+
throw new ExecutionValueError(`Invalid execution response: ${field}. No command was replayed.`);
|
|
13
|
+
}
|
|
14
|
+
export function executionComputerId(id) {
|
|
15
|
+
if (typeof id !== 'string' || !id.length || id.length > 256) {
|
|
16
|
+
throw new ExecutionValueError('Select a computer with use_computer or supply a computer_id of 1–256 characters.');
|
|
17
|
+
}
|
|
18
|
+
return id;
|
|
19
|
+
}
|
|
20
|
+
export function executionReadQuery(stdout, stderr, limit = EXECUTION_OUTPUT_DEFAULT) {
|
|
21
|
+
if (!Number.isSafeInteger(limit) || limit < 1 || limit > EXECUTION_OUTPUT_MAX) {
|
|
22
|
+
throw new ExecutionValueError(`limit must be an integer from 1 to ${EXECUTION_OUTPUT_MAX}.`);
|
|
23
|
+
}
|
|
24
|
+
for (const [field, value] of [
|
|
25
|
+
['stdout_offset', stdout],
|
|
26
|
+
['stderr_offset', stderr],
|
|
27
|
+
]) {
|
|
28
|
+
if (!Number.isSafeInteger(value) || value < 0 || value > Number.MAX_SAFE_INTEGER - limit) {
|
|
29
|
+
throw new ExecutionValueError(`${field} must be a safe nonnegative integer with room for limit.`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return { stdout_offset: stdout, stderr_offset: stderr, limit };
|
|
33
|
+
}
|
|
34
|
+
function record(value, executionId) {
|
|
35
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value))
|
|
36
|
+
invalid('expected an object');
|
|
37
|
+
const d = value;
|
|
38
|
+
if (!isExecutionId(d.execution_id) || d.execution_id !== executionId)
|
|
39
|
+
invalid('execution_id does not match the requested execution');
|
|
40
|
+
return d;
|
|
41
|
+
}
|
|
42
|
+
function integer(value, field) {
|
|
43
|
+
if (typeof value !== 'number' || !Number.isSafeInteger(value))
|
|
44
|
+
invalid(field);
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
function flag(value, field) {
|
|
48
|
+
if (typeof value !== 'boolean')
|
|
49
|
+
invalid(field);
|
|
50
|
+
return value;
|
|
51
|
+
}
|
|
52
|
+
function timestamp(value, field) {
|
|
53
|
+
if (typeof value !== 'string' || value.length > 35)
|
|
54
|
+
invalid(field);
|
|
55
|
+
const match = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.\d{1,9})?(Z|[+-]\d{2}:\d{2})$/.exec(value);
|
|
56
|
+
if (!match || match[0] !== value || !Number.isFinite(Date.parse(value)))
|
|
57
|
+
invalid(field);
|
|
58
|
+
const year = Number(match[1]);
|
|
59
|
+
const month = Number(match[2]);
|
|
60
|
+
const day = Number(match[3]);
|
|
61
|
+
const leap = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
|
|
62
|
+
const days = [31, leap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
63
|
+
if (month < 1 ||
|
|
64
|
+
month > 12 ||
|
|
65
|
+
day < 1 ||
|
|
66
|
+
day > days[month - 1] ||
|
|
67
|
+
Number(match[4]) > 23 ||
|
|
68
|
+
Number(match[5]) > 59 ||
|
|
69
|
+
Number(match[6]) > 59)
|
|
70
|
+
invalid(field);
|
|
71
|
+
return value;
|
|
72
|
+
}
|
|
73
|
+
export function executionMetadata(value, computerId, executionId) {
|
|
74
|
+
const d = record(value, executionId);
|
|
75
|
+
if (d.computer_id !== computerId)
|
|
76
|
+
invalid('computer_id does not match the requested computer');
|
|
77
|
+
const pid = integer(d.pid, 'pid');
|
|
78
|
+
if (pid <= 0)
|
|
79
|
+
invalid('pid');
|
|
80
|
+
const started = timestamp(d.started_at, 'started_at');
|
|
81
|
+
if (d.output_source !== 'volatile_guest_files')
|
|
82
|
+
invalid('output_source');
|
|
83
|
+
if (d.status !== 'running' && d.status !== 'exited' && d.status !== 'lost')
|
|
84
|
+
invalid('status');
|
|
85
|
+
const identity = {
|
|
86
|
+
execution_id: executionId,
|
|
87
|
+
computer_id: computerId,
|
|
88
|
+
pid,
|
|
89
|
+
status: d.status,
|
|
90
|
+
started_at: started,
|
|
91
|
+
output_source: 'volatile_guest_files',
|
|
92
|
+
};
|
|
93
|
+
if (d.status === 'exited') {
|
|
94
|
+
return {
|
|
95
|
+
...identity,
|
|
96
|
+
ended_at: timestamp(d.ended_at, 'ended_at'),
|
|
97
|
+
exit_code: integer(d.exit_code, 'exit_code'),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
if ('ended_at' in d || 'exit_code' in d)
|
|
101
|
+
invalid('non-exited state carries exit evidence');
|
|
102
|
+
return identity;
|
|
103
|
+
}
|
|
104
|
+
function bytes(value, field, max) {
|
|
105
|
+
if (typeof value !== 'string' ||
|
|
106
|
+
value.length > Math.ceil(max / 3) * 4 ||
|
|
107
|
+
!/^[A-Za-z0-9+/]*={0,2}$/.test(value) ||
|
|
108
|
+
value.length % 4 !== 0)
|
|
109
|
+
invalid(field);
|
|
110
|
+
const decoded = Buffer.from(value, 'base64');
|
|
111
|
+
if (decoded.length > max || decoded.toString('base64') !== value)
|
|
112
|
+
invalid(field);
|
|
113
|
+
return decoded;
|
|
114
|
+
}
|
|
115
|
+
/** No replacement characters, dropped BOM, split-character repair, or NUL in text. */
|
|
116
|
+
function present(name, data) {
|
|
117
|
+
try {
|
|
118
|
+
const decoded = new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(data);
|
|
119
|
+
if (!data.some((byte) => (byte < 32 && ![9, 10, 13].includes(byte)) || byte === 127) &&
|
|
120
|
+
Buffer.from(decoded, 'utf8').equals(data)) {
|
|
121
|
+
return { [name]: decoded };
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
/* Preserve incomplete or non-text bytes exactly as base64. */
|
|
126
|
+
}
|
|
127
|
+
return { [`${name}_b64`]: data.toString('base64') };
|
|
128
|
+
}
|
|
129
|
+
export function executionOutput(value, executionId, query) {
|
|
130
|
+
const d = record(value, executionId);
|
|
131
|
+
const stdout = bytes(d.stdout_b64, 'stdout_b64', query.limit);
|
|
132
|
+
const stderr = bytes(d.stderr_b64, 'stderr_b64', query.limit);
|
|
133
|
+
const diagnostic = bytes(d.diagnostic_b64, 'diagnostic_b64', DIAGNOSTIC_AVAILABLE_MAX);
|
|
134
|
+
const outOffset = integer(d.stdout_offset, 'stdout_offset');
|
|
135
|
+
const errOffset = integer(d.stderr_offset, 'stderr_offset');
|
|
136
|
+
if (outOffset !== query.stdout_offset + stdout.length)
|
|
137
|
+
invalid('stdout_offset does not match decoded bytes');
|
|
138
|
+
if (errOffset !== query.stderr_offset + stderr.length)
|
|
139
|
+
invalid('stderr_offset does not match decoded bytes');
|
|
140
|
+
const outMore = flag(d.stdout_more, 'stdout_more');
|
|
141
|
+
const errMore = flag(d.stderr_more, 'stderr_more');
|
|
142
|
+
if ((outMore && stdout.length !== query.limit) || (errMore && stderr.length !== query.limit))
|
|
143
|
+
invalid('more flag without a full stream chunk');
|
|
144
|
+
const prefix = diagnostic.subarray(0, DIAGNOSTIC_DISPLAY_MAX);
|
|
145
|
+
return {
|
|
146
|
+
execution_id: executionId,
|
|
147
|
+
...present('stdout', stdout),
|
|
148
|
+
...present('stderr', stderr),
|
|
149
|
+
stdout_bytes: stdout.length,
|
|
150
|
+
stderr_bytes: stderr.length,
|
|
151
|
+
stdout_offset: outOffset,
|
|
152
|
+
stderr_offset: errOffset,
|
|
153
|
+
stdout_more: outMore,
|
|
154
|
+
stderr_more: errMore,
|
|
155
|
+
...present('diagnostic', prefix),
|
|
156
|
+
diagnostic_available_bytes: diagnostic.length,
|
|
157
|
+
diagnostic_displayed_bytes: prefix.length,
|
|
158
|
+
diagnostic_display_truncated: prefix.length < diagnostic.length,
|
|
159
|
+
diagnostic_truncated: flag(d.diagnostic_truncated, 'diagnostic_truncated'),
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=executions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executions.js","sourceRoot":"","sources":["../src/executions.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAC7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAC1C,MAAM,wBAAwB,GAAG,KAAK,CAAC;AACvC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AACpC,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,GAAG,IAAI,CAAC;AAE/C,mFAAmF;AACnF,MAAM,OAAO,mBAAoB,SAAQ,KAAK;CAAG;AAEjD,SAAS,OAAO,CAAC,KAAa;IAC5B,MAAM,IAAI,mBAAmB,CAAC,+BAA+B,KAAK,4BAA4B,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAU;IAC5C,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAC5D,MAAM,IAAI,mBAAmB,CAC3B,kFAAkF,CACnF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,MAAc,EACd,MAAc,EACd,KAAK,GAAG,wBAAwB;IAEhC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,oBAAoB,EAAE,CAAC;QAC9E,MAAM,IAAI,mBAAmB,CAAC,sCAAsC,oBAAoB,GAAG,CAAC,CAAC;IAC/F,CAAC;IACD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI;QAC3B,CAAC,eAAe,EAAE,MAAM,CAAC;QACzB,CAAC,eAAe,EAAE,MAAM,CAAC;KACjB,EAAE,CAAC;QACX,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,MAAM,CAAC,gBAAgB,GAAG,KAAK,EAAE,CAAC;YACzF,MAAM,IAAI,mBAAmB,CAC3B,GAAG,KAAK,0DAA0D,CACnE,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACjE,CAAC;AAED,SAAS,MAAM,CAAC,KAAc,EAAE,WAAmB;IACjD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,WAAW;QAClE,OAAO,CAAC,qDAAqD,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,OAAO,CAAC,KAAc,EAAE,KAAa;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,IAAI,CAAC,KAAc,EAAE,KAAa;IACzC,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,KAAc,EAAE,KAAa;IAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACnE,MAAM,KAAK,GACT,oFAAoF,CAAC,IAAI,CACvF,KAAK,CACN,CAAC;IACJ,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACxF,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1E,IACE,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,EAAE;QACV,GAAG,GAAG,CAAC;QACP,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAE;QACtB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;QACrB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;QACrB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;QAErB,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,UAAkB,EAAE,WAAmB;IACvF,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACrC,IAAI,CAAC,CAAC,WAAW,KAAK,UAAU;QAAE,OAAO,CAAC,mDAAmD,CAAC,CAAC;IAC/F,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAClC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACtD,IAAI,CAAC,CAAC,aAAa,KAAK,sBAAsB;QAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACzE,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9F,MAAM,QAAQ,GAAG;QACf,YAAY,EAAE,WAAW;QACzB,WAAW,EAAE,UAAU;QACvB,GAAG;QACH,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,UAAU,EAAE,OAAO;QACnB,aAAa,EAAE,sBAAsB;KACtC,CAAC;IACF,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO;YACL,GAAG,QAAQ;YACX,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC;YAC3C,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC;SAC7C,CAAC;IACJ,CAAC;IACD,IAAI,UAAU,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,CAAC,wCAAwC,CAAC,CAAC;IAC3F,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,KAAK,CAAC,KAAc,EAAE,KAAa,EAAE,GAAW;IACvD,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;QACrC,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;QACrC,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;QAEtB,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7C,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,KAAK;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACjF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,sFAAsF;AACtF,SAAS,OAAO,CAAC,IAAY,EAAE,IAAY;IACzC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxF,IACE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC;YAChF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EACzC,CAAC;YACD,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8DAA8D;IAChE,CAAC;IACD,OAAO,EAAE,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAc,EACd,WAAmB,EACnB,KAA4C;IAE5C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,cAAc,EAAE,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;IACvF,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IAC5D,IAAI,SAAS,KAAK,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM;QACnD,OAAO,CAAC,4CAA4C,CAAC,CAAC;IACxD,IAAI,SAAS,KAAK,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM;QACnD,OAAO,CAAC,4CAA4C,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC;QAC1F,OAAO,CAAC,uCAAuC,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;IAC9D,OAAO;QACL,YAAY,EAAE,WAAW;QACzB,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC5B,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC5B,YAAY,EAAE,MAAM,CAAC,MAAM;QAC3B,YAAY,EAAE,MAAM,CAAC,MAAM;QAC3B,aAAa,EAAE,SAAS;QACxB,aAAa,EAAE,SAAS;QACxB,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,OAAO;QACpB,GAAG,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC;QAChC,0BAA0B,EAAE,UAAU,CAAC,MAAM;QAC7C,0BAA0B,EAAE,MAAM,CAAC,MAAM;QACzC,4BAA4B,EAAE,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM;QAC/D,oBAAoB,EAAE,IAAI,CAAC,CAAC,CAAC,oBAAoB,EAAE,sBAAsB,CAAC;KAC3E,CAAC;AACJ,CAAC"}
|
package/dist/format.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { APIError } from './errors.js';
|
|
2
3
|
/** A plain text result. */
|
|
3
4
|
export declare const text: (s: string) => CallToolResult;
|
|
4
5
|
/** A JSON result, pretty-printed — models read indented JSON more reliably than one line. */
|
|
@@ -52,17 +53,24 @@ export declare function isInlineImage(contentType: string): boolean;
|
|
|
52
53
|
* it would have to open with something else.
|
|
53
54
|
*/
|
|
54
55
|
export declare function image(bytes: Uint8Array, mimeType: string, note?: string): CallToolResult;
|
|
56
|
+
/** Only bounded diagnostic scalars enter a tool result; full evidence stays on APIError. */
|
|
57
|
+
export declare function errorMetadata(source: APIError | Record<string, unknown>): {
|
|
58
|
+
fields: Record<string, string | number>;
|
|
59
|
+
omitted: boolean;
|
|
60
|
+
};
|
|
61
|
+
export declare function withErrorMetadata(result: CallToolResult, source: APIError | Record<string, unknown>): CallToolResult;
|
|
62
|
+
/** Keep scalar error prose, without displaying a serialized response body as its message. */
|
|
63
|
+
export declare function apiErrorMessage(error: APIError): string;
|
|
55
64
|
/**
|
|
56
|
-
*
|
|
57
|
-
* as a protocol error.
|
|
65
|
+
* What to tell a model about a `503`, or `undefined` for anything else.
|
|
58
66
|
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* again rather than to give up or to report a broken tool. So everything the
|
|
63
|
-
* platform refuses comes back as content with `isError`.
|
|
67
|
+
* Two answers, told apart by the request's method, and the same split
|
|
68
|
+
* isTransient makes: a GET or HEAD can be sent again shortly; any change may
|
|
69
|
+
* already have happened, so the current state is read first.
|
|
64
70
|
*/
|
|
65
|
-
export declare function
|
|
71
|
+
export declare function unavailableAdvice(err: APIError): string | undefined;
|
|
72
|
+
/** A model-visible refusal. A projected run failure must withhold reason-based replay advice. */
|
|
73
|
+
export declare function failed(err: unknown, includeReasonAdvice?: boolean): CallToolResult;
|
|
66
74
|
/** Run a tool body, turning anything it throws into a result the model can read. */
|
|
67
75
|
export declare function guarded(fn: () => Promise<CallToolResult>): Promise<CallToolResult>;
|
|
68
76
|
export type Computer = {
|
|
@@ -121,6 +129,23 @@ export type Computer = {
|
|
|
121
129
|
* wrote before reading the computer back. See `nothingAdmitted`.
|
|
122
130
|
*/
|
|
123
131
|
running_ram_mb?: number;
|
|
132
|
+
/**
|
|
133
|
+
* The secrets bound to this computer, as references (secret id, the revision
|
|
134
|
+
* last delivered, and exactly one of `env` or `file`). Never a value. The
|
|
135
|
+
* whole `secrets*` group is absent on a computer that holds none.
|
|
136
|
+
*/
|
|
137
|
+
secrets?: unknown[];
|
|
138
|
+
/**
|
|
139
|
+
* Whether the desktop is missing a change to its secrets that a restart would
|
|
140
|
+
* deliver. Three answers: `true` (a restart delivers it), `false` (nothing
|
|
141
|
+
* pending), and `null` — the platform could not check, which is not `false`.
|
|
142
|
+
* Only ever true of a running or suspended computer.
|
|
143
|
+
*/
|
|
144
|
+
secrets_pending?: boolean | null;
|
|
145
|
+
/** Why the last delivering start was stopped, in one fixed sentence. Never a value. */
|
|
146
|
+
secrets_error?: string;
|
|
147
|
+
secrets_generation?: number;
|
|
148
|
+
secrets_applied?: unknown;
|
|
124
149
|
vnc?: Record<string, unknown>;
|
|
125
150
|
};
|
|
126
151
|
/**
|
package/dist/format.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
|
package/dist/format.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { APIError, MandalaError, reasonAdvice, statusAdvice } from './errors.js';
|
|
1
|
+
import { APIError, MandalaError, outcomeUnknownOn503, platformSaid, reasonAdvice, statusAdvice, UnavailableError, } from './errors.js';
|
|
2
2
|
/** A plain text result. */
|
|
3
3
|
export const text = (s) => ({ content: [{ type: 'text', text: s }] });
|
|
4
4
|
/** A JSON result, pretty-printed — models read indented JSON more reliably than one line. */
|
|
@@ -69,18 +69,87 @@ export function image(bytes, mimeType, note) {
|
|
|
69
69
|
content.unshift({ type: 'text', text: note });
|
|
70
70
|
return { content };
|
|
71
71
|
}
|
|
72
|
+
/** Only bounded diagnostic scalars enter a tool result; full evidence stays on APIError. */
|
|
73
|
+
export function errorMetadata(source) {
|
|
74
|
+
const data = source instanceof APIError
|
|
75
|
+
? {
|
|
76
|
+
status: source.status,
|
|
77
|
+
reason: source.reason,
|
|
78
|
+
request_id: source.requestId,
|
|
79
|
+
allow: source.allow,
|
|
80
|
+
www_authenticate: source.wwwAuthenticate,
|
|
81
|
+
retry_after_ms: source.retryAfterMs,
|
|
82
|
+
}
|
|
83
|
+
: source;
|
|
84
|
+
const fields = {};
|
|
85
|
+
let omitted = false;
|
|
86
|
+
for (const [name, limit] of Object.entries({
|
|
87
|
+
reason: 128,
|
|
88
|
+
request_id: 256,
|
|
89
|
+
allow: 512,
|
|
90
|
+
www_authenticate: 512,
|
|
91
|
+
})) {
|
|
92
|
+
const value = data[name];
|
|
93
|
+
if (typeof value !== 'string' || !value.trim())
|
|
94
|
+
continue;
|
|
95
|
+
if (value.length > limit) {
|
|
96
|
+
omitted = true;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
fields[name] = value.replace(/\b(?:com_|sk-)[A-Za-z0-9_-]+/g, '[redacted]');
|
|
100
|
+
}
|
|
101
|
+
for (const name of ['status', 'retry_after_ms']) {
|
|
102
|
+
const value = data[name];
|
|
103
|
+
if (typeof value === 'number' && Number.isFinite(value) && value >= 0)
|
|
104
|
+
fields[name] = value;
|
|
105
|
+
}
|
|
106
|
+
return { fields, omitted };
|
|
107
|
+
}
|
|
108
|
+
export function withErrorMetadata(result, source) {
|
|
109
|
+
const { fields, omitted } = errorMetadata(source);
|
|
110
|
+
if (!Object.keys(fields).some((name) => name !== 'status') && !omitted)
|
|
111
|
+
return result;
|
|
112
|
+
return {
|
|
113
|
+
...result,
|
|
114
|
+
content: [
|
|
115
|
+
...result.content,
|
|
116
|
+
...said(`Response metadata:${omitted ? ' Oversized diagnostic metadata was omitted.' : ''}`, fields).content,
|
|
117
|
+
],
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/** Keep scalar error prose, without displaying a serialized response body as its message. */
|
|
121
|
+
export function apiErrorMessage(error) {
|
|
122
|
+
const named = platformSaid(error.body);
|
|
123
|
+
if (named !== undefined)
|
|
124
|
+
return named;
|
|
125
|
+
// An unreadable or unclassified JSON envelope can leave a bounded JSON prefix
|
|
126
|
+
// in message. It is diagnostic body content, not a whitelist of display fields.
|
|
127
|
+
// Tailored transport warnings and ordinary text messages remain unchanged.
|
|
128
|
+
if (error.body !== undefined && /^\s*[[{]/.test(error.message))
|
|
129
|
+
return `HTTP ${error.status}`;
|
|
130
|
+
return error.message;
|
|
131
|
+
}
|
|
72
132
|
/**
|
|
73
|
-
*
|
|
74
|
-
* as a protocol error.
|
|
133
|
+
* What to tell a model about a `503`, or `undefined` for anything else.
|
|
75
134
|
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
* again rather than to give up or to report a broken tool. So everything the
|
|
80
|
-
* platform refuses comes back as content with `isError`.
|
|
135
|
+
* Two answers, told apart by the request's method, and the same split
|
|
136
|
+
* isTransient makes: a GET or HEAD can be sent again shortly; any change may
|
|
137
|
+
* already have happened, so the current state is read first.
|
|
81
138
|
*/
|
|
82
|
-
export function
|
|
83
|
-
|
|
139
|
+
export function unavailableAdvice(err) {
|
|
140
|
+
if (!(err instanceof UnavailableError))
|
|
141
|
+
return undefined;
|
|
142
|
+
return outcomeUnknownOn503(err)
|
|
143
|
+
? 'something this depends on could not answer right now, and THIS CHANGE MAY OR MAY NOT HAVE HAPPENED: a failure after the request was sent is answered the same way. Read the current state before sending it again — repeating a create, a command, a clone or a snapshot blind can do it twice'
|
|
144
|
+
: 'something this depends on could not answer right now; the same request can be sent again shortly';
|
|
145
|
+
}
|
|
146
|
+
/** A model-visible refusal. A projected run failure must withhold reason-based replay advice. */
|
|
147
|
+
export function failed(err, includeReasonAdvice = true) {
|
|
148
|
+
const message = err instanceof APIError
|
|
149
|
+
? apiErrorMessage(err)
|
|
150
|
+
: err instanceof MandalaError || err instanceof Error
|
|
151
|
+
? err.message
|
|
152
|
+
: String(err);
|
|
84
153
|
const status = err?.status;
|
|
85
154
|
const withStatus = status && message !== `HTTP ${status}` ? `${message} (HTTP ${status})` : message;
|
|
86
155
|
// The platform's classification of the refusal, as the sentence it means
|
|
@@ -103,13 +172,30 @@ export function failed(err) {
|
|
|
103
172
|
// call works once it finishes", which is exactly the replay this is here to
|
|
104
173
|
// stop (Codex review). Every other status keeps the platform's word ahead of
|
|
105
174
|
// anything generic, which is where it belongs: it is specific to one refusal.
|
|
106
|
-
|
|
175
|
+
//
|
|
176
|
+
// A 503 answered to a change is the one status whose advice outranks the
|
|
177
|
+
// platform's word: the change may or may not have happened, and a reason
|
|
178
|
+
// saying "worth sending again" would invite the blind replay of a create or a
|
|
179
|
+
// command that the platform's own docs warn against (OPL-5026).
|
|
180
|
+
const advice = err instanceof APIError
|
|
181
|
+
? (unavailableAdvice(err) ??
|
|
182
|
+
statusAdvice(err.status, err.reason) ??
|
|
183
|
+
(includeReasonAdvice &&
|
|
184
|
+
![404, 405].includes(err.status) &&
|
|
185
|
+
(!err.body ||
|
|
186
|
+
typeof err.body !== 'object' ||
|
|
187
|
+
!('error' in err.body) ||
|
|
188
|
+
typeof err.body.error !== 'object')
|
|
189
|
+
? reasonAdvice(err.reason)
|
|
190
|
+
: undefined))
|
|
191
|
+
: undefined;
|
|
107
192
|
const line = advice ? `${withStatus} — ${advice}` : withStatus;
|
|
108
193
|
const kept = err instanceof APIError ? keptWork(err.body) : undefined;
|
|
109
|
-
|
|
194
|
+
const result = {
|
|
110
195
|
isError: true,
|
|
111
196
|
content: [{ type: 'text', text: kept ? `${line}\n\n${kept}` : line }],
|
|
112
197
|
};
|
|
198
|
+
return err instanceof APIError ? withErrorMetadata(result, err) : result;
|
|
113
199
|
}
|
|
114
200
|
/**
|
|
115
201
|
* How much of a retained-work record goes into a model's context.
|
|
@@ -282,6 +368,15 @@ export function describe(c) {
|
|
|
282
368
|
bits.push(`suspended ${c.suspended.at}`);
|
|
283
369
|
if (c.unreachable)
|
|
284
370
|
bits.push('UNREACHABLE — its hypervisor could not be reached');
|
|
371
|
+
// Secrets, only where there is something to say: `false` and absent say
|
|
372
|
+
// nothing, and `null` is the platform saying it could not check — not that
|
|
373
|
+
// nothing is pending.
|
|
374
|
+
if (c.secrets_pending === true)
|
|
375
|
+
bits.push('a change to its secrets is pending until it restarts');
|
|
376
|
+
else if (c.secrets_pending === null)
|
|
377
|
+
bits.push('whether its secrets are current is unknown until it restarts');
|
|
378
|
+
if (typeof c.secrets_error === 'string' && c.secrets_error.trim())
|
|
379
|
+
bits.push(`secrets not delivered: ${c.secrets_error.trim()}`);
|
|
285
380
|
return bits.join(' · ');
|
|
286
381
|
}
|
|
287
382
|
//# sourceMappingURL=format.js.map
|
package/dist/format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
|
package/dist/http.d.ts
CHANGED
|
@@ -12,7 +12,49 @@ export type HttpConfig = Omit<ServerConfig, 'apiKey' | 'activity'> & {
|
|
|
12
12
|
maxSessions?: number;
|
|
13
13
|
/** How many requests may retain a parsed body above 256 KiB at once. */
|
|
14
14
|
maxLargeBodyParses?: number;
|
|
15
|
+
/**
|
|
16
|
+
* The OAuth protected-resource metadata URL (RFC 9728) of this server, for
|
|
17
|
+
* the hosted install (OPL-4982). Setting it turns on the OAuth answers: a
|
|
18
|
+
* request with no bearer, or whose bearer the platform refused, is a 401
|
|
19
|
+
* carrying {@link bearerChallenge}, which is how an MCP client discovers
|
|
20
|
+
* where to authorize and knows to refresh. Unset, nothing changes.
|
|
21
|
+
*/
|
|
22
|
+
resourceMetadataUrl?: string;
|
|
23
|
+
/**
|
|
24
|
+
* The platform's shared secret for this service, sent as
|
|
25
|
+
* `X-Mandala-MCP-Service` on every platform request a session makes. Needed
|
|
26
|
+
* for the platform to take an OAuth access token at all. Never logged.
|
|
27
|
+
*/
|
|
28
|
+
serviceSecret?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Hosted mode: how long a bearer the platform accepted is taken on trust
|
|
31
|
+
* before it is checked again, in ms. Default 60 s.
|
|
32
|
+
*/
|
|
33
|
+
bearerCheckTtlMs?: number;
|
|
34
|
+
/**
|
|
35
|
+
* Hosted mode: refused initializes one source may make per minute before it
|
|
36
|
+
* is answered 429 without asking the platform. Default 20.
|
|
37
|
+
*/
|
|
38
|
+
maxFailedInitializes?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Hosted mode: once a source has spent that budget, how often it may still
|
|
41
|
+
* have one new bearer checked, in ms. Default 5 s.
|
|
42
|
+
*/
|
|
43
|
+
exhaustedProbeIntervalMs?: number;
|
|
44
|
+
/** The SDK's SSE keep-alive interval, in ms. For tests; default 15 s. */
|
|
45
|
+
sseKeepAliveMs?: number;
|
|
15
46
|
};
|
|
47
|
+
/** The OAuth scope the hosted resource asks for. */
|
|
48
|
+
export declare const MCP_SCOPE = "mcp:tools";
|
|
49
|
+
/**
|
|
50
|
+
* The `WWW-Authenticate` value of every OAuth refusal this server makes.
|
|
51
|
+
*
|
|
52
|
+
* The same header whether no bearer was sent or the platform refused one: RFC
|
|
53
|
+
* 9728 §5.1 has a client find the authorization server through
|
|
54
|
+
* `resource_metadata`, and the MCP authorization spec has it refresh or
|
|
55
|
+
* re-authorize on any 401 that carries it.
|
|
56
|
+
*/
|
|
57
|
+
export declare function bearerChallenge(resourceMetadataUrl: string): string;
|
|
16
58
|
export declare function isLoopbackHost(host: string): boolean;
|
|
17
59
|
/**
|
|
18
60
|
* One operator-supplied allowlist entry, as the Host headers it should match.
|
package/dist/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AASxC,OAAO,EAA6C,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3F,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,UAAU,CAAC,GAAG;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAyBF,oDAAoD;AACpD,eAAO,MAAM,SAAS,cAAc,CAAC;AAErC;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAEnE;AA+FD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUpD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAWlE;AA+BD;;;;;;;;;;GAUG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAs+B9D"}
|