mcprigor 1.0.0-rc.1
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/LICENSE +17 -0
- package/README.md +233 -0
- package/dist/assertions.d.ts +4 -0
- package/dist/assertions.d.ts.map +1 -0
- package/dist/assertions.js +101 -0
- package/dist/assertions.js.map +1 -0
- package/dist/author.d.ts +57 -0
- package/dist/author.d.ts.map +1 -0
- package/dist/author.js +134 -0
- package/dist/author.js.map +1 -0
- package/dist/canonical.d.ts +4 -0
- package/dist/canonical.d.ts.map +1 -0
- package/dist/canonical.js +17 -0
- package/dist/canonical.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +265 -0
- package/dist/cli.js.map +1 -0
- package/dist/contract.d.ts +28 -0
- package/dist/contract.d.ts.map +1 -0
- package/dist/contract.js +138 -0
- package/dist/contract.js.map +1 -0
- package/dist/data.d.ts +24 -0
- package/dist/data.d.ts.map +1 -0
- package/dist/data.js +367 -0
- package/dist/data.js.map +1 -0
- package/dist/discovery.d.ts +6 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +82 -0
- package/dist/discovery.js.map +1 -0
- package/dist/errors.d.ts +19 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +40 -0
- package/dist/errors.js.map +1 -0
- package/dist/extension-host.d.ts +20 -0
- package/dist/extension-host.d.ts.map +1 -0
- package/dist/extension-host.js +52 -0
- package/dist/extension-host.js.map +1 -0
- package/dist/extension-sdk.d.ts +22 -0
- package/dist/extension-sdk.d.ts.map +1 -0
- package/dist/extension-sdk.js +3 -0
- package/dist/extension-sdk.js.map +1 -0
- package/dist/extension-worker.d.ts +2 -0
- package/dist/extension-worker.d.ts.map +1 -0
- package/dist/extension-worker.js +27 -0
- package/dist/extension-worker.js.map +1 -0
- package/dist/extensions.d.ts +15 -0
- package/dist/extensions.d.ts.map +1 -0
- package/dist/extensions.js +60 -0
- package/dist/extensions.js.map +1 -0
- package/dist/imports.d.ts +7 -0
- package/dist/imports.d.ts.map +1 -0
- package/dist/imports.js +41 -0
- package/dist/imports.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/language.d.ts +34 -0
- package/dist/language.d.ts.map +1 -0
- package/dist/language.js +102 -0
- package/dist/language.js.map +1 -0
- package/dist/loader.d.ts +4 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +51 -0
- package/dist/loader.js.map +1 -0
- package/dist/parity.d.ts +23 -0
- package/dist/parity.d.ts.map +1 -0
- package/dist/parity.js +77 -0
- package/dist/parity.js.map +1 -0
- package/dist/path.d.ts +3 -0
- package/dist/path.d.ts.map +1 -0
- package/dist/path.js +71 -0
- package/dist/path.js.map +1 -0
- package/dist/qa-advanced.d.ts +8 -0
- package/dist/qa-advanced.d.ts.map +1 -0
- package/dist/qa-advanced.js +239 -0
- package/dist/qa-advanced.js.map +1 -0
- package/dist/qa-language.d.ts +4 -0
- package/dist/qa-language.d.ts.map +1 -0
- package/dist/qa-language.js +385 -0
- package/dist/qa-language.js.map +1 -0
- package/dist/qa-loader.d.ts +4 -0
- package/dist/qa-loader.d.ts.map +1 -0
- package/dist/qa-loader.js +22 -0
- package/dist/qa-loader.js.map +1 -0
- package/dist/redact.d.ts +7 -0
- package/dist/redact.d.ts.map +1 -0
- package/dist/redact.js +63 -0
- package/dist/redact.js.map +1 -0
- package/dist/replay.d.ts +17 -0
- package/dist/replay.d.ts.map +1 -0
- package/dist/replay.js +48 -0
- package/dist/replay.js.map +1 -0
- package/dist/reporters.d.ts +6 -0
- package/dist/reporters.d.ts.map +1 -0
- package/dist/reporters.js +52 -0
- package/dist/reporters.js.map +1 -0
- package/dist/runner.d.ts +16 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +304 -0
- package/dist/runner.js.map +1 -0
- package/dist/schema.d.ts +446 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +117 -0
- package/dist/schema.js.map +1 -0
- package/dist/session.d.ts +5 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +111 -0
- package/dist/session.js.map +1 -0
- package/dist/snapshots.d.ts +28 -0
- package/dist/snapshots.d.ts.map +1 -0
- package/dist/snapshots.js +87 -0
- package/dist/snapshots.js.map +1 -0
- package/dist/starter.d.ts +3 -0
- package/dist/starter.d.ts.map +1 -0
- package/dist/starter.js +34 -0
- package/dist/starter.js.map +1 -0
- package/dist/state.d.ts +13 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +29 -0
- package/dist/state.js.map +1 -0
- package/dist/trace.d.ts +57 -0
- package/dist/trace.d.ts.map +1 -0
- package/dist/trace.js +94 -0
- package/dist/trace.js.map +1 -0
- package/dist/types.d.ts +245 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/workspace.d.ts +10 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +144 -0
- package/dist/workspace.js.map +1 -0
- package/docs/CLI-REFERENCE.md +167 -0
- package/docs/COMPATIBILITY.md +42 -0
- package/docs/CONTRACT-DRIFT.md +42 -0
- package/docs/DATA-AND-REUSE.md +213 -0
- package/docs/DATA-ENGINEERING.md +96 -0
- package/docs/ENGINEER-SETUP.md +176 -0
- package/docs/ERROR-MODEL.md +24 -0
- package/docs/EVIDENCE.md +58 -0
- package/docs/EXTENSION-SDK.md +76 -0
- package/docs/FILE-EXTENSION.md +52 -0
- package/docs/GETTING-STARTED.md +126 -0
- package/docs/GUIDED-AUTHORING.md +80 -0
- package/docs/LANDSCAPE.md +81 -0
- package/docs/LANGUAGE-SPEC.md +317 -0
- package/docs/MCP-NATIVE.md +111 -0
- package/docs/PLAIN-LANGUAGE-COOKBOOK.md +219 -0
- package/docs/QA-GUIDE.md +128 -0
- package/docs/QA-WORKSPACE.md +78 -0
- package/docs/README.md +55 -0
- package/docs/SECURITY-AND-RETENTION.md +37 -0
- package/docs/SNAPSHOTS-AND-REPLAY.md +85 -0
- package/docs/SPECIFICATION.md +178 -0
- package/docs/STATE-AND-DEPENDENCIES.md +106 -0
- package/docs/TRANSPORT-PARITY.md +98 -0
- package/docs/TROUBLESHOOTING.md +199 -0
- package/editors/mcpr-language.json +16 -0
- package/package.json +70 -0
- package/workspace-assets/app.js +1 -0
- package/workspace-assets/index.html +1 -0
- package/workspace-assets/style.css +1 -0
package/dist/data.js
ADDED
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
import { readFile, stat } from "node:fs/promises";
|
|
2
|
+
import { extname, resolve } from "node:path";
|
|
3
|
+
import { pathToFileURL } from "node:url";
|
|
4
|
+
import { fingerprint } from "./canonical.js";
|
|
5
|
+
import YAML from "yaml";
|
|
6
|
+
import { callIsolatedProvider } from "./extension-host.js";
|
|
7
|
+
import { lookup } from "node:dns/promises";
|
|
8
|
+
import { isIP } from "node:net";
|
|
9
|
+
const providerCache = new Map();
|
|
10
|
+
export function clearDataCache() { providerCache.clear(); }
|
|
11
|
+
export async function loadData(config, context = {}) {
|
|
12
|
+
const full = { cwd: context.cwd ?? process.cwd(), maxRows: context.maxRows ?? 1000, allowRemote: context.allowRemote ?? false, allowCustomCode: context.allowCustomCode ?? false, headers: context.headers };
|
|
13
|
+
const providerName = String(config.provider ?? inferProvider(String(config.file ?? config.url ?? "")));
|
|
14
|
+
const provider = await getProvider(providerName, config, full);
|
|
15
|
+
const loaderKey = JSON.stringify({ providerName, cwd: full.cwd, config: { ...config, cache: undefined, where: undefined, columns: undefined, derive: undefined, sample: undefined, join: undefined } });
|
|
16
|
+
const load = () => provider.load(config, full);
|
|
17
|
+
let values = structuredClone(await (config.cache === true ? providerCache.get(loaderKey) ?? providerCache.set(loaderKey, load()).get(loaderKey) : load()));
|
|
18
|
+
values = await transformRows(values, config, full);
|
|
19
|
+
if (values.length > full.maxRows)
|
|
20
|
+
throw new Error(`MCP-DATA-002 Data source has ${values.length} rows; the limit is ${full.maxRows}`);
|
|
21
|
+
const source = String(config.file ?? config.url ?? providerName);
|
|
22
|
+
const rows = values.map((value, index) => ({ id: String(value.caseId ?? value.id ?? index + 1), values: value, index: index + 1, source }));
|
|
23
|
+
return { rows, fingerprint: fingerprint(values), source };
|
|
24
|
+
}
|
|
25
|
+
async function transformRows(values, config, context) {
|
|
26
|
+
let rows = values;
|
|
27
|
+
if (config.columns)
|
|
28
|
+
rows = rows.map((row, index) => coerceRow(row, config.columns, index));
|
|
29
|
+
if (config.join)
|
|
30
|
+
rows = await joinRows(rows, config.join, context);
|
|
31
|
+
if (config.derive)
|
|
32
|
+
rows = rows.map((row) => deriveRow(row, config.derive));
|
|
33
|
+
if (config.where)
|
|
34
|
+
rows = rows.filter((row) => matchesWhere(row, config.where));
|
|
35
|
+
if (config.sample !== undefined)
|
|
36
|
+
rows = sampleRows(rows, config.sample);
|
|
37
|
+
return rows;
|
|
38
|
+
}
|
|
39
|
+
function coerceRow(row, columns, index) {
|
|
40
|
+
const result = { ...row };
|
|
41
|
+
for (const [column, spec] of Object.entries(columns)) {
|
|
42
|
+
const definition = typeof spec === "string" ? { type: spec } : spec;
|
|
43
|
+
const raw = result[column];
|
|
44
|
+
if (raw === undefined || raw === null || raw === "") {
|
|
45
|
+
if (definition.required)
|
|
46
|
+
throw new Error(`MCP-DATA-020 Row ${index + 1}: required column “${column}” is missing`);
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
result[column] = coerceValue(raw, (definition.type ?? "string"), column, index);
|
|
50
|
+
if (definition.enum && !definition.enum.some((option) => option === result[column]))
|
|
51
|
+
throw new Error(`MCP-DATA-022 Row ${index + 1}: column “${column}” value ${JSON.stringify(result[column])} is not one of ${JSON.stringify(definition.enum)}`);
|
|
52
|
+
}
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
function coerceValue(value, type, column, index) {
|
|
56
|
+
try {
|
|
57
|
+
if (type === "string")
|
|
58
|
+
return typeof value === "object" ? JSON.stringify(value) : String(value);
|
|
59
|
+
if (type === "number") {
|
|
60
|
+
const parsed = typeof value === "number" ? value : Number(String(value).trim());
|
|
61
|
+
if (!Number.isFinite(parsed))
|
|
62
|
+
throw new Error("not a finite number");
|
|
63
|
+
return parsed;
|
|
64
|
+
}
|
|
65
|
+
if (type === "boolean") {
|
|
66
|
+
if (typeof value === "boolean")
|
|
67
|
+
return value;
|
|
68
|
+
const text = String(value).trim().toLowerCase();
|
|
69
|
+
if (["true", "yes", "1"].includes(text))
|
|
70
|
+
return true;
|
|
71
|
+
if (["false", "no", "0"].includes(text))
|
|
72
|
+
return false;
|
|
73
|
+
throw new Error("not a boolean");
|
|
74
|
+
}
|
|
75
|
+
if (type === "date") {
|
|
76
|
+
const date = value instanceof Date ? value : new Date(String(value));
|
|
77
|
+
if (Number.isNaN(date.getTime()))
|
|
78
|
+
throw new Error("not a date");
|
|
79
|
+
return date.toISOString();
|
|
80
|
+
}
|
|
81
|
+
return typeof value === "string" ? JSON.parse(value) : value;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
throw new Error(`MCP-DATA-021 Row ${index + 1}: column “${column}” cannot be read as ${type}: ${error instanceof Error ? error.message : String(error)}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function deriveRow(row, derive) {
|
|
88
|
+
const result = { ...row };
|
|
89
|
+
for (const [column, template] of Object.entries(derive))
|
|
90
|
+
result[column] = template.replace(/\$\{([a-zA-Z0-9_.-]+)\}/g, (_, name) => { const value = result[name]; return value === undefined || value === null ? "" : typeof value === "object" ? JSON.stringify(value) : String(value); });
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
function matchesWhere(row, where) {
|
|
94
|
+
return Object.entries(where).every(([column, condition]) => {
|
|
95
|
+
const value = row[column];
|
|
96
|
+
if (condition === null || typeof condition !== "object" || Array.isArray(condition))
|
|
97
|
+
return Array.isArray(condition) ? condition.some((option) => option === value) : value === condition;
|
|
98
|
+
const rules = condition;
|
|
99
|
+
if ("equals" in rules && value !== rules.equals)
|
|
100
|
+
return false;
|
|
101
|
+
if ("notEquals" in rules && value === rules.notEquals)
|
|
102
|
+
return false;
|
|
103
|
+
if (rules.in && !rules.in.some((option) => option === value))
|
|
104
|
+
return false;
|
|
105
|
+
if (rules.matches !== undefined && !(typeof value === "string" && new RegExp(rules.matches).test(value)))
|
|
106
|
+
return false;
|
|
107
|
+
if (rules.greaterThan !== undefined && !(typeof value === "number" && value > rules.greaterThan))
|
|
108
|
+
return false;
|
|
109
|
+
if (rules.lessThan !== undefined && !(typeof value === "number" && value < rules.lessThan))
|
|
110
|
+
return false;
|
|
111
|
+
return true;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
function sampleRows(rows, sample) {
|
|
115
|
+
if (typeof sample === "number")
|
|
116
|
+
return rows.slice(0, sample);
|
|
117
|
+
const spec = sample;
|
|
118
|
+
if (spec.first !== undefined)
|
|
119
|
+
return rows.slice(0, spec.first);
|
|
120
|
+
if (spec.last !== undefined)
|
|
121
|
+
return rows.slice(-spec.last);
|
|
122
|
+
if (spec.every !== undefined)
|
|
123
|
+
return rows.filter((_, index) => index % Number(spec.every) === 0);
|
|
124
|
+
if (spec.count !== undefined) {
|
|
125
|
+
let state = (spec.seed ?? 42) >>> 0;
|
|
126
|
+
const random = () => { state = (state * 1664525 + 1013904223) >>> 0; return state / 2 ** 32; };
|
|
127
|
+
const copy = [...rows];
|
|
128
|
+
for (let i = copy.length - 1; i > 0; i--) {
|
|
129
|
+
const j = Math.floor(random() * (i + 1));
|
|
130
|
+
[copy[i], copy[j]] = [copy[j], copy[i]];
|
|
131
|
+
}
|
|
132
|
+
return copy.slice(0, spec.count).sort((a, b) => rows.indexOf(a) - rows.indexOf(b));
|
|
133
|
+
}
|
|
134
|
+
throw new Error("MCP-DATA-023 sample must be a number or use first, last, every, or count with an optional seed");
|
|
135
|
+
}
|
|
136
|
+
async function joinRows(rows, join, context) {
|
|
137
|
+
const on = String(join.on ?? "");
|
|
138
|
+
if (!on)
|
|
139
|
+
throw new Error("MCP-DATA-024 join requires an “on” column");
|
|
140
|
+
const kind = String(join.kind ?? "inner");
|
|
141
|
+
if (!["inner", "left"].includes(kind))
|
|
142
|
+
throw new Error("MCP-DATA-025 join kind must be inner or left");
|
|
143
|
+
const other = await loadData(join, context);
|
|
144
|
+
const index = new Map(other.rows.map((row) => [String(row.values[on]), row.values]));
|
|
145
|
+
const prefix = join.prefix ? String(join.prefix) : "";
|
|
146
|
+
const joined = [];
|
|
147
|
+
for (const row of rows) {
|
|
148
|
+
const match = index.get(String(row[on]));
|
|
149
|
+
if (!match) {
|
|
150
|
+
if (kind === "left")
|
|
151
|
+
joined.push(row);
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
const extra = Object.fromEntries(Object.entries(match).filter(([key]) => key !== on).map(([key, value]) => [prefix ? `${prefix}${key}` : key, value]));
|
|
155
|
+
joined.push({ ...extra, ...row });
|
|
156
|
+
}
|
|
157
|
+
return joined;
|
|
158
|
+
}
|
|
159
|
+
async function getProvider(name, config, context) {
|
|
160
|
+
if (name === "inline")
|
|
161
|
+
return { load: async ({ rows }) => ensureRows(rows) };
|
|
162
|
+
if (["csv", "json", "yaml"].includes(name))
|
|
163
|
+
return { load: async ({ file, path }) => loadFile(resolve(context.cwd, String(file)), name, path) };
|
|
164
|
+
if (name === "excel")
|
|
165
|
+
return { load: async ({ file, sheet }) => loadExcel(resolve(context.cwd, String(file)), sheet) };
|
|
166
|
+
if (name === "rest")
|
|
167
|
+
return { load: async ({ url, path, headers }) => loadRest(String(url), path, { ...context.headers, ...headers }, context) };
|
|
168
|
+
if (name === "google-sheets")
|
|
169
|
+
return { load: async (input) => loadGoogleSheets(input, context) };
|
|
170
|
+
if (name === "sql") {
|
|
171
|
+
if (!context.allowCustomCode)
|
|
172
|
+
throw new Error("MCP-DATA-003 SQL providers require --allow-custom-code");
|
|
173
|
+
if (!config.module)
|
|
174
|
+
throw new Error("MCP-DATA-012 SQL sources require a reviewed provider module");
|
|
175
|
+
return getProvider("plugin", { ...config, provider: "plugin" }, context);
|
|
176
|
+
}
|
|
177
|
+
if (name === "plugin") {
|
|
178
|
+
if (!context.allowCustomCode)
|
|
179
|
+
throw new Error("MCP-DATA-003 Custom data providers require --allow-custom-code");
|
|
180
|
+
const modulePath = resolve(context.cwd, String(config.module));
|
|
181
|
+
if (config.unsafeLegacy === true) {
|
|
182
|
+
const imported = await import(pathToFileURL(modulePath).href);
|
|
183
|
+
const provider = imported.default ?? imported.provider;
|
|
184
|
+
if (!provider?.load)
|
|
185
|
+
throw new Error(`MCP-DATA-004 ${modulePath} does not export a data provider`);
|
|
186
|
+
return provider;
|
|
187
|
+
}
|
|
188
|
+
return { load: async (providerConfig, providerContext) => callIsolatedProvider(modulePath, providerConfig, { cwd: providerContext.cwd, maxRows: providerContext.maxRows }, { timeoutMs: Number(config.timeoutMs ?? 5000), permissions: Array.isArray(config.permissions) ? config.permissions : [] }) };
|
|
189
|
+
}
|
|
190
|
+
throw new Error(`MCP-DATA-001 Unknown data provider “${name}”`);
|
|
191
|
+
}
|
|
192
|
+
async function loadFile(file, kind, path) {
|
|
193
|
+
const source = await readFile(file, "utf8");
|
|
194
|
+
if (Buffer.byteLength(source) > 10 * 1024 * 1024)
|
|
195
|
+
throw new Error("MCP-DATA-005 Data file exceeds 10 MiB");
|
|
196
|
+
let value;
|
|
197
|
+
if (kind === "csv")
|
|
198
|
+
value = parseCsv(source);
|
|
199
|
+
else if (kind === "json")
|
|
200
|
+
value = JSON.parse(source);
|
|
201
|
+
else {
|
|
202
|
+
const document = YAML.parseDocument(source, { uniqueKeys: true, schema: "core" });
|
|
203
|
+
if (document.errors.length)
|
|
204
|
+
throw document.errors[0];
|
|
205
|
+
value = document.toJS({ maxAliasCount: 20 });
|
|
206
|
+
assertDataDepth(value);
|
|
207
|
+
}
|
|
208
|
+
if (path)
|
|
209
|
+
for (const part of String(path).split("."))
|
|
210
|
+
value = value?.[part];
|
|
211
|
+
return ensureRows(value);
|
|
212
|
+
}
|
|
213
|
+
function parseCsv(source) {
|
|
214
|
+
const records = csvRecords(source);
|
|
215
|
+
const headers = records.shift() ?? [];
|
|
216
|
+
if (new Set(headers).size !== headers.length)
|
|
217
|
+
throw new Error("MCP-DATA-006 CSV has duplicate column names");
|
|
218
|
+
return records.filter((row) => row.some((item) => item !== "")).map((row) => Object.fromEntries(headers.map((header, index) => [header, scalar(row[index] ?? "")])));
|
|
219
|
+
}
|
|
220
|
+
function csvRecords(source) {
|
|
221
|
+
const rows = [];
|
|
222
|
+
let row = [];
|
|
223
|
+
let field = "";
|
|
224
|
+
let quoted = false;
|
|
225
|
+
const pushField = () => { if (field.length > 1024 * 1024)
|
|
226
|
+
throw new Error("MCP-DATA-026 CSV field exceeds 1 MiB"); row.push(field); field = ""; if (row.length > 1000)
|
|
227
|
+
throw new Error("MCP-DATA-027 CSV row exceeds 1000 columns"); };
|
|
228
|
+
for (let i = 0; i < source.length; i++) {
|
|
229
|
+
const char = source[i];
|
|
230
|
+
if (quoted && char === '"' && source[i + 1] === '"') {
|
|
231
|
+
field += '"';
|
|
232
|
+
i++;
|
|
233
|
+
}
|
|
234
|
+
else if (char === '"')
|
|
235
|
+
quoted = !quoted;
|
|
236
|
+
else if (char === "," && !quoted) {
|
|
237
|
+
pushField();
|
|
238
|
+
}
|
|
239
|
+
else if ((char === "\n" || char === "\r") && !quoted) {
|
|
240
|
+
if (char === "\r" && source[i + 1] === "\n")
|
|
241
|
+
i++;
|
|
242
|
+
pushField();
|
|
243
|
+
rows.push(row);
|
|
244
|
+
if (rows.length > 1_000_000)
|
|
245
|
+
throw new Error("MCP-DATA-028 CSV exceeds one million rows");
|
|
246
|
+
row = [];
|
|
247
|
+
}
|
|
248
|
+
else
|
|
249
|
+
field += char;
|
|
250
|
+
}
|
|
251
|
+
if (field || row.length) {
|
|
252
|
+
pushField();
|
|
253
|
+
rows.push(row);
|
|
254
|
+
}
|
|
255
|
+
if (quoted)
|
|
256
|
+
throw new Error("MCP-DATA-007 CSV contains an unclosed quoted value");
|
|
257
|
+
return rows;
|
|
258
|
+
}
|
|
259
|
+
function scalar(value) {
|
|
260
|
+
const text = value.trim();
|
|
261
|
+
if (text === "")
|
|
262
|
+
return "";
|
|
263
|
+
if (text === "true")
|
|
264
|
+
return true;
|
|
265
|
+
if (text === "false")
|
|
266
|
+
return false;
|
|
267
|
+
if (text === "null")
|
|
268
|
+
return null;
|
|
269
|
+
if (/^-?(?:0|[1-9]\d*)(?:\.\d+)?$/.test(text))
|
|
270
|
+
return Number(text);
|
|
271
|
+
return value;
|
|
272
|
+
}
|
|
273
|
+
async function loadExcel(file, sheet) {
|
|
274
|
+
const info = await stat(file);
|
|
275
|
+
if (info.size > 25 * 1024 * 1024)
|
|
276
|
+
throw new Error("MCP-DATA-018 Spreadsheet exceeds the 25 MiB compressed limit");
|
|
277
|
+
const header = await readFile(file).then((bytes) => bytes.subarray(0, 4));
|
|
278
|
+
if (header[0] !== 0x50 || header[1] !== 0x4b)
|
|
279
|
+
throw new Error("MCP-DATA-019 Spreadsheet is not a valid XLSX ZIP container");
|
|
280
|
+
const ExcelJS = (await import("exceljs")).default;
|
|
281
|
+
const workbook = new ExcelJS.Workbook();
|
|
282
|
+
await workbook.xlsx.readFile(file);
|
|
283
|
+
const worksheet = sheet ? workbook.getWorksheet(String(sheet)) : workbook.worksheets[0];
|
|
284
|
+
if (!worksheet)
|
|
285
|
+
throw new Error(`MCP-DATA-008 Excel sheet “${String(sheet ?? "first sheet")}" was not found`);
|
|
286
|
+
const headerRow = worksheet.getRow(1);
|
|
287
|
+
const headers = Array.from({ length: headerRow.cellCount }, (_, index) => String(headerRow.getCell(index + 1).text));
|
|
288
|
+
const rows = [];
|
|
289
|
+
worksheet.eachRow((row, rowNumber) => {
|
|
290
|
+
if (rowNumber === 1)
|
|
291
|
+
return;
|
|
292
|
+
rows.push(Object.fromEntries(headers.map((header, index) => {
|
|
293
|
+
const cell = row.getCell(index + 1);
|
|
294
|
+
const value = cell.type === ExcelJS.ValueType.Formula ? cell.result : cell.value;
|
|
295
|
+
return [header, value === null || value === undefined ? "" : value instanceof Date ? value.toISOString() : value];
|
|
296
|
+
})));
|
|
297
|
+
});
|
|
298
|
+
return rows;
|
|
299
|
+
}
|
|
300
|
+
async function loadRest(url, path, headers, context) {
|
|
301
|
+
if (!context.allowRemote)
|
|
302
|
+
throw new Error("MCP-DATA-009 Remote data requires --allow-remote-data");
|
|
303
|
+
let current = new URL(url);
|
|
304
|
+
let redirects = 0;
|
|
305
|
+
while (true) {
|
|
306
|
+
await assertPublicUrl(current);
|
|
307
|
+
const response = await fetch(current, { headers, signal: AbortSignal.timeout(10000), redirect: "manual" });
|
|
308
|
+
if ([301, 302, 303, 307, 308].includes(response.status)) {
|
|
309
|
+
const location = response.headers.get("location");
|
|
310
|
+
if (!location || ++redirects > 3)
|
|
311
|
+
throw new Error("MCP-DATA-014 Remote data exceeded 3 redirects");
|
|
312
|
+
current = new URL(location, current);
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
if (!response.ok)
|
|
316
|
+
throw new Error(`MCP-DATA-010 Data request returned HTTP ${response.status}`);
|
|
317
|
+
const declared = Number(response.headers.get("content-length") ?? 0);
|
|
318
|
+
if (declared > 10 * 1024 * 1024)
|
|
319
|
+
throw new Error("MCP-DATA-015 Remote response exceeds 10 MiB");
|
|
320
|
+
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
321
|
+
if (bytes.byteLength > 10 * 1024 * 1024)
|
|
322
|
+
throw new Error("MCP-DATA-015 Remote response exceeds 10 MiB");
|
|
323
|
+
let value = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes));
|
|
324
|
+
if (path)
|
|
325
|
+
for (const part of String(path).split("."))
|
|
326
|
+
value = value?.[part];
|
|
327
|
+
return ensureRows(value);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
async function loadGoogleSheets(config, context) {
|
|
331
|
+
const id = String(config.spreadsheetId);
|
|
332
|
+
const range = encodeURIComponent(String(config.range ?? "Sheet1"));
|
|
333
|
+
const key = config.apiKey ? String(config.apiKey) : undefined;
|
|
334
|
+
const accessToken = config.accessToken ? String(config.accessToken) : undefined;
|
|
335
|
+
const url = `https://sheets.googleapis.com/v4/spreadsheets/${encodeURIComponent(id)}/values/${range}${key ? `?key=${encodeURIComponent(key)}` : ""}`;
|
|
336
|
+
const rows = await loadRest(url, "values", accessToken ? { Authorization: `Bearer ${accessToken}` } : undefined, context);
|
|
337
|
+
const [headers = [], ...values] = rows;
|
|
338
|
+
return values.map((row) => Object.fromEntries(headers.map((header, index) => [String(header), row[index]])));
|
|
339
|
+
}
|
|
340
|
+
function assertDataDepth(value, depth = 0, nodes = { count: 0 }) { if (++nodes.count > 100_000)
|
|
341
|
+
throw new Error("MCP-DATA-030 YAML exceeds 100,000 nodes"); if (depth > 50)
|
|
342
|
+
throw new Error("MCP-DATA-029 YAML nesting exceeds 50 levels"); if (Array.isArray(value))
|
|
343
|
+
for (const item of value)
|
|
344
|
+
assertDataDepth(item, depth + 1, nodes);
|
|
345
|
+
else if (value && typeof value === "object")
|
|
346
|
+
for (const [key, item] of Object.entries(value)) {
|
|
347
|
+
if (["__proto__", "prototype", "constructor"].includes(key))
|
|
348
|
+
throw new Error(`MCP-DATA-031 Unsafe YAML key “${key}”`);
|
|
349
|
+
assertDataDepth(item, depth + 1, nodes);
|
|
350
|
+
} }
|
|
351
|
+
function ensureRows(value) {
|
|
352
|
+
if (!Array.isArray(value) || value.some((row) => typeof row !== "object" || row === null || Array.isArray(row)))
|
|
353
|
+
throw new Error("MCP-DATA-011 Data must be a list of rows with named columns");
|
|
354
|
+
return value;
|
|
355
|
+
}
|
|
356
|
+
async function assertPublicUrl(url) { if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.href.length > 8192)
|
|
357
|
+
throw new Error("MCP-DATA-013 Remote URL must be credential-free HTTP(S) under 8 KiB"); const addresses = await lookup(url.hostname, { all: true, verbatim: true }).catch(() => []); if (!addresses.length && !isIP(url.hostname))
|
|
358
|
+
throw new Error("MCP-DATA-016 Remote host could not be resolved"); const values = addresses.length ? addresses.map((item) => item.address) : [url.hostname]; if (values.some(privateAddress))
|
|
359
|
+
throw new Error(`MCP-DATA-017 Remote data cannot access private or local network address ${url.hostname}`); }
|
|
360
|
+
function privateAddress(address) { const value = address.toLowerCase().replace(/^::ffff:/, ""); if (value === "::1" || value === "::" || value.startsWith("fc") || value.startsWith("fd") || value.startsWith("fe8") || value.startsWith("fe9") || value.startsWith("fea") || value.startsWith("feb"))
|
|
361
|
+
return true; const parts = value.split(".").map(Number); if (parts.length !== 4)
|
|
362
|
+
return false; const [a, b] = parts; return a === 0 || a === 10 || a === 127 || a === 169 && b === 254 || a === 172 && b >= 16 && b <= 31 || a === 192 && b === 168 || a >= 224; }
|
|
363
|
+
function inferProvider(source) {
|
|
364
|
+
const extension = extname(source).toLowerCase();
|
|
365
|
+
return extension === ".csv" ? "csv" : extension === ".json" ? "json" : [".yaml", ".yml"].includes(extension) ? "yaml" : [".xlsx", ".xls"].includes(extension) ? "excel" : source.startsWith("http") ? "rest" : "inline";
|
|
366
|
+
}
|
|
367
|
+
//# sourceMappingURL=data.js.map
|
package/dist/data.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { DiscoveryDocument, Suite, Target } from "./types.js";
|
|
2
|
+
export declare function discoverTarget(target: Target): Promise<DiscoveryDocument>;
|
|
3
|
+
export declare function writeLock(document: DiscoveryDocument, file: string): Promise<void>;
|
|
4
|
+
export declare function generateSuite(lock: DiscoveryDocument, target: Target): Suite;
|
|
5
|
+
export declare function writeGeneratedSuite(suite: Suite, file: string): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AASnE,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmB/E;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAExF;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAgB5E;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnF"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { writeFile } from "node:fs/promises";
|
|
2
|
+
import YAML from "yaml";
|
|
3
|
+
import { canonicalize, fingerprint } from "./canonical.js";
|
|
4
|
+
import { createSession } from "./session.js";
|
|
5
|
+
const SURFACES = [
|
|
6
|
+
["tools", "tools/list"],
|
|
7
|
+
["resources", "resources/list"],
|
|
8
|
+
["resourceTemplates", "resources/templates/list"],
|
|
9
|
+
["prompts", "prompts/list"],
|
|
10
|
+
];
|
|
11
|
+
export async function discoverTarget(target) {
|
|
12
|
+
const session = createSession(target);
|
|
13
|
+
try {
|
|
14
|
+
const info = await session.connect();
|
|
15
|
+
const surfaces = {};
|
|
16
|
+
for (const [key, method] of SURFACES) {
|
|
17
|
+
surfaces[key] = capabilityPresent(info.capabilities, method) ? await listAll(session, method, key) : [];
|
|
18
|
+
}
|
|
19
|
+
const contract = canonicalize({ server: { name: info.serverName, version: info.serverVersion, capabilities: info.capabilities }, protocolVersion: info.protocolVersion, ...surfaces });
|
|
20
|
+
return {
|
|
21
|
+
schemaVersion: 1,
|
|
22
|
+
discoveredAt: new Date().toISOString(),
|
|
23
|
+
target: { transport: target.transport },
|
|
24
|
+
server: { name: info.serverName, version: info.serverVersion, capabilities: canonicalize(info.capabilities) },
|
|
25
|
+
protocolVersion: info.protocolVersion,
|
|
26
|
+
tools: surfaces.tools ?? [], resources: surfaces.resources ?? [], resourceTemplates: surfaces.resourceTemplates ?? [], prompts: surfaces.prompts ?? [],
|
|
27
|
+
fingerprint: fingerprint(contract), diagnostics: session.diagnostics(),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
await session.close();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export async function writeLock(document, file) {
|
|
35
|
+
await writeFile(file, YAML.stringify(document, { sortMapEntries: true }), "utf8");
|
|
36
|
+
}
|
|
37
|
+
export function generateSuite(lock, target) {
|
|
38
|
+
const tests = [];
|
|
39
|
+
if (lock.tools.length)
|
|
40
|
+
tests.push({
|
|
41
|
+
name: "contract: tools remain discoverable", requires: { capabilities: ["tools"] },
|
|
42
|
+
steps: [{ request: { method: "tools/list" }, assert: { json: lock.tools.filter((x) => x.name).map((tool) => ({ path: "$.tools", contains: { name: tool.name } })) } }],
|
|
43
|
+
});
|
|
44
|
+
if (lock.resources.length)
|
|
45
|
+
tests.push({
|
|
46
|
+
name: "contract: resources remain discoverable", requires: { capabilities: ["resources"] },
|
|
47
|
+
steps: [{ request: { method: "resources/list" }, assert: { json: lock.resources.filter((x) => x.uri).map((resource) => ({ path: "$.resources", contains: { uri: resource.uri } })) } }],
|
|
48
|
+
});
|
|
49
|
+
if (lock.prompts.length)
|
|
50
|
+
tests.push({
|
|
51
|
+
name: "contract: prompts remain discoverable", requires: { capabilities: ["prompts"] },
|
|
52
|
+
steps: [{ request: { method: "prompts/list" }, assert: { json: lock.prompts.filter((x) => x.name).map((prompt) => ({ path: "$.prompts", contains: { name: prompt.name } })) } }],
|
|
53
|
+
});
|
|
54
|
+
if (!tests.length)
|
|
55
|
+
tests.push({ name: "server responds to ping", steps: [{ request: { method: "ping" }, assert: { status: "success" } }] });
|
|
56
|
+
return { version: 1, name: `Generated contract smoke tests for ${lock.server.name ?? "MCP server"}`, target, tests };
|
|
57
|
+
}
|
|
58
|
+
export async function writeGeneratedSuite(suite, file) {
|
|
59
|
+
await writeFile(file, YAML.stringify(suite), "utf8");
|
|
60
|
+
}
|
|
61
|
+
async function listAll(session, method, field) {
|
|
62
|
+
const items = [];
|
|
63
|
+
let cursor;
|
|
64
|
+
do {
|
|
65
|
+
const result = await session.request(method, cursor ? { cursor } : undefined);
|
|
66
|
+
const page = result[field];
|
|
67
|
+
if (Array.isArray(page))
|
|
68
|
+
items.push(...page);
|
|
69
|
+
cursor = typeof result.nextCursor === "string" ? result.nextCursor : undefined;
|
|
70
|
+
} while (cursor);
|
|
71
|
+
return canonicalize(items);
|
|
72
|
+
}
|
|
73
|
+
function capabilityPresent(capabilities, method) {
|
|
74
|
+
if (method.startsWith("tools/"))
|
|
75
|
+
return !!capabilities?.tools;
|
|
76
|
+
if (method.startsWith("prompts/"))
|
|
77
|
+
return !!capabilities?.prompts;
|
|
78
|
+
if (method.startsWith("resources/"))
|
|
79
|
+
return !!capabilities?.resources;
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type FailureCategory = "configuration" | "language-compilation" | "data-loading" | "extension" | "server-spawn" | "initialization" | "transport" | "mcp-error" | "schema" | "assertion" | "timeout" | "cancellation" | "cleanup" | "internal";
|
|
2
|
+
export declare const FAILURE_CODES: Record<FailureCategory, string>;
|
|
3
|
+
export declare class RigorError extends Error {
|
|
4
|
+
readonly category: FailureCategory;
|
|
5
|
+
readonly code: string;
|
|
6
|
+
readonly actionable: string;
|
|
7
|
+
readonly cause?: unknown | undefined;
|
|
8
|
+
constructor(category: FailureCategory, code: string, message: string, actionable?: string, cause?: unknown | undefined);
|
|
9
|
+
}
|
|
10
|
+
export interface FailureInfo {
|
|
11
|
+
category: FailureCategory;
|
|
12
|
+
code: string;
|
|
13
|
+
message: string;
|
|
14
|
+
actionable: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function classifyFailure(error: unknown, fallback?: FailureCategory): FailureInfo;
|
|
17
|
+
export declare function formatFailure(error: unknown, fallback?: FailureCategory): string;
|
|
18
|
+
export declare function sanitizeTerminal(value: string): string;
|
|
19
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,eAAe,GAAG,sBAAsB,GAAG,cAAc,GAAG,WAAW,GAAG,cAAc,GAAG,gBAAgB,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,GAAG,UAAU,CAAC;AACrP,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAsb,CAAC;AAEjf,qBAAa,UAAW,SAAQ,KAAK;aAA+B,QAAQ,EAAE,eAAe;aAAkB,IAAI,EAAE,MAAM;aAAmC,UAAU;aAAmC,KAAK,CAAC,EAAE,OAAO;gBAAtJ,QAAQ,EAAE,eAAe,EAAkB,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAkB,UAAU,SAAiB,EAAkB,KAAK,CAAC,EAAE,OAAO,YAAA;CAA8D;AACxR,MAAM,WAAW,WAAW;IAAG,QAAQ,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AAC7G,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,GAAE,eAA4B,GAAG,WAAW,CAEnG;AACD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,CAAgK;AACjP,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAgP"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export const FAILURE_CODES = { configuration: "MCP-CONFIG-000", "language-compilation": "MCP-LANG-000", "data-loading": "MCP-DATA-000", extension: "MCP-EXT-000", "server-spawn": "MCP-SPAWN-000", initialization: "MCP-INIT-000", transport: "MCP-TRANSPORT-000", "mcp-error": "MCP-REMOTE-000", schema: "MCP-SCHEMA-000", assertion: "MCP-ASSERT-000", timeout: "MCP-TIMEOUT-000", cancellation: "MCP-CANCEL-000", cleanup: "MCP-CLEANUP-000", internal: "MCP-INTERNAL-000" };
|
|
2
|
+
const HELP = { configuration: "Check the suite target and settings.", "language-compilation": "Check the highlighted plain-language statement.", "data-loading": "Check the data source, row, and column named above.", extension: "Review the extension manifest, permissions, and exported operation.", "server-spawn": "Check that the server command exists and starts from the configured directory.", initialization: "The server started but did not complete MCP initialization.", transport: "Check the process or HTTP connection and server logs.", "mcp-error": "The MCP server rejected this request; review its code and message.", schema: "The returned value does not match the required schema.", assertion: "Compare the expected value or path with the server response.", timeout: "The operation took too long; inspect the server or increase the explicit timeout.", cancellation: "The operation was cancelled before completion.", cleanup: "The test ran, but cleanup failed; inspect cleanup actions and server shutdown.", internal: "This is an unexpected MCP Rigor failure; retain sanitized evidence and report it." };
|
|
3
|
+
export class RigorError extends Error {
|
|
4
|
+
category;
|
|
5
|
+
code;
|
|
6
|
+
actionable;
|
|
7
|
+
cause;
|
|
8
|
+
constructor(category, code, message, actionable = HELP[category], cause) {
|
|
9
|
+
super(`${code} ${message}`);
|
|
10
|
+
this.category = category;
|
|
11
|
+
this.code = code;
|
|
12
|
+
this.actionable = actionable;
|
|
13
|
+
this.cause = cause;
|
|
14
|
+
this.name = "RigorError";
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function classifyFailure(error, fallback = "internal") {
|
|
18
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
19
|
+
const code = message.match(/\b(?:MCP|MCPLANG|QA)-(?:[A-Z]+-?)*\d{3}\b/)?.[0] ?? FAILURE_CODES[fallback];
|
|
20
|
+
const category = categoryFor(code, message, fallback);
|
|
21
|
+
return { category, code, message: message.replace(new RegExp(`^${escape(code)}\\s*`), ""), actionable: HELP[category] };
|
|
22
|
+
}
|
|
23
|
+
export function formatFailure(error, fallback) { const value = classifyFailure(error, fallback); return `${value.code} [${value.category}] ${sanitizeTerminal(value.message)}\nAction: ${value.actionable}`; }
|
|
24
|
+
export function sanitizeTerminal(value) { return value.replace(/\u001b\][^\u0007]*(?:\u0007|\u001b\\)/g, "").replace(/\u001b\[[0-?]*[ -\/]*[@-~]/g, "").replace(/\u001b[P_^][\s\S]*?(?:\u001b\\|\u0007)/g, "").replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f-\u009f]/g, ""); }
|
|
25
|
+
function categoryFor(code, message, fallback) { if (/CONFIG|STATE|REQ/.test(code))
|
|
26
|
+
return "configuration"; if (/LANG|FLOW/.test(code))
|
|
27
|
+
return "language-compilation"; if (/DATA/.test(code))
|
|
28
|
+
return "data-loading"; if (/EXT/.test(code))
|
|
29
|
+
return "extension"; if (/SPAWN|ENOENT/.test(code + message))
|
|
30
|
+
return "server-spawn"; if (/INIT|CONNECT/.test(code))
|
|
31
|
+
return "initialization"; if (/TRANSPORT|HTTP/.test(code))
|
|
32
|
+
return "transport"; if (/SCHEMA/.test(code))
|
|
33
|
+
return "schema"; if (/ASSERT|SNAPSHOT/.test(code))
|
|
34
|
+
return "assertion"; if (/TIMEOUT|Timed out|exceeded/i.test(code + message))
|
|
35
|
+
return "timeout"; if (/CANCEL|abort/i.test(code + message))
|
|
36
|
+
return "cancellation"; if (/CLEANUP/.test(code))
|
|
37
|
+
return "cleanup"; if (/REMOTE|MCP error/i.test(code + message))
|
|
38
|
+
return "mcp-error"; return fallback; }
|
|
39
|
+
function escape(value) { return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); }
|
|
40
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ExtensionManifest, ExtensionPermission } from "./extension-sdk.js";
|
|
2
|
+
export interface ExtensionDescriptor {
|
|
3
|
+
modulePath: string;
|
|
4
|
+
manifest?: ExtensionManifest;
|
|
5
|
+
functions: string[];
|
|
6
|
+
provider: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface ExtensionHostOptions {
|
|
9
|
+
cwd?: string;
|
|
10
|
+
timeoutMs?: number;
|
|
11
|
+
permissions?: ExtensionPermission[];
|
|
12
|
+
maxOldGenerationSizeMb?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function inspectExtension(modulePath: string, options?: ExtensionHostOptions): Promise<ExtensionDescriptor>;
|
|
15
|
+
export declare function callIsolatedFunction(modulePath: string, name: string, args: Record<string, unknown>, options?: ExtensionHostOptions): Promise<unknown>;
|
|
16
|
+
export declare function callIsolatedProvider(modulePath: string, config: Record<string, unknown>, context: {
|
|
17
|
+
cwd: string;
|
|
18
|
+
maxRows: number;
|
|
19
|
+
}, options?: ExtensionHostOptions): Promise<Record<string, unknown>[]>;
|
|
20
|
+
//# sourceMappingURL=extension-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-host.d.ts","sourceRoot":"","sources":["../src/extension-host.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEjF,MAAM,WAAW,mBAAmB;IAAG,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE;AACjI,MAAM,WAAW,oBAAoB;IAAG,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAAC,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAAE;AAEhJ,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAK3H;AACD,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGhK;AACD,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAGjN"}
|