@snutils/snu 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.
- package/README.md +156 -0
- package/bin/snu.js +8 -0
- package/dist/cli/format.d.ts +14 -0
- package/dist/cli/format.d.ts.map +1 -0
- package/dist/cli/format.js +231 -0
- package/dist/cli/format.js.map +1 -0
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +296 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/stdin.d.ts +14 -0
- package/dist/cli/stdin.d.ts.map +1 -0
- package/dist/cli/stdin.js +75 -0
- package/dist/cli/stdin.js.map +1 -0
- package/dist/client.d.ts +43 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +350 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +4 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +185 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/registry.d.ts +5 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +527 -0
- package/dist/registry.js.map +1 -0
- package/dist/server/canonical.d.ts +10 -0
- package/dist/server/canonical.d.ts.map +1 -0
- package/dist/server/canonical.js +72 -0
- package/dist/server/canonical.js.map +1 -0
- package/dist/server/config.d.ts +9 -0
- package/dist/server/config.d.ts.map +1 -0
- package/dist/server/config.js +117 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/dispatcher.d.ts +32 -0
- package/dist/server/dispatcher.d.ts.map +1 -0
- package/dist/server/dispatcher.js +631 -0
- package/dist/server/dispatcher.js.map +1 -0
- package/dist/server/httpBridge.d.ts +20 -0
- package/dist/server/httpBridge.d.ts.map +1 -0
- package/dist/server/httpBridge.js +219 -0
- package/dist/server/httpBridge.js.map +1 -0
- package/dist/server/pendingRegistry.d.ts +26 -0
- package/dist/server/pendingRegistry.d.ts.map +1 -0
- package/dist/server/pendingRegistry.js +76 -0
- package/dist/server/pendingRegistry.js.map +1 -0
- package/dist/server/policy.d.ts +18 -0
- package/dist/server/policy.d.ts.map +1 -0
- package/dist/server/policy.js +53 -0
- package/dist/server/policy.js.map +1 -0
- package/dist/server/standalone.d.ts +24 -0
- package/dist/server/standalone.d.ts.map +1 -0
- package/dist/server/standalone.js +152 -0
- package/dist/server/standalone.js.map +1 -0
- package/dist/server/wsBridge.d.ts +45 -0
- package/dist/server/wsBridge.d.ts.map +1 -0
- package/dist/server/wsBridge.js +321 -0
- package/dist/server/wsBridge.js.map +1 -0
- package/dist/types.d.ts +123 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +51 -0
package/dist/client.js
ADDED
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ScriptSyncClient = exports.ScriptSyncClientError = exports.HEALTH_CHECK_TIMEOUT_MS = exports.REVIEWED_COMMAND_TIMEOUT_MS = exports.DEFAULT_COMMAND_TIMEOUT_MS = exports.MIN_API_VERSION = void 0;
|
|
37
|
+
exports.getGlobalPortFilePath = getGlobalPortFilePath;
|
|
38
|
+
exports.findWorkspacePortFile = findWorkspacePortFile;
|
|
39
|
+
exports.discoverBridge = discoverBridge;
|
|
40
|
+
exports.checkHealth = checkHealth;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const os = __importStar(require("os"));
|
|
44
|
+
const crypto = __importStar(require("crypto"));
|
|
45
|
+
const policy_js_1 = require("./server/policy.js");
|
|
46
|
+
exports.MIN_API_VERSION = 7;
|
|
47
|
+
exports.DEFAULT_COMMAND_TIMEOUT_MS = 70_000;
|
|
48
|
+
exports.REVIEWED_COMMAND_TIMEOUT_MS = 310_000; // 5m 10s
|
|
49
|
+
exports.HEALTH_CHECK_TIMEOUT_MS = 1_500;
|
|
50
|
+
class ScriptSyncClientError extends Error {
|
|
51
|
+
code;
|
|
52
|
+
status;
|
|
53
|
+
details;
|
|
54
|
+
constructor(message, code, status, details) {
|
|
55
|
+
super(message);
|
|
56
|
+
this.code = code;
|
|
57
|
+
this.status = status;
|
|
58
|
+
this.details = details;
|
|
59
|
+
this.name = 'ScriptSyncClientError';
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.ScriptSyncClientError = ScriptSyncClientError;
|
|
63
|
+
/**
|
|
64
|
+
* Global port file path (~/.sn-scriptsync/agent-port.json).
|
|
65
|
+
* Written when a Pro/Trial/Enterprise license is connected in the browser.
|
|
66
|
+
*/
|
|
67
|
+
function getGlobalPortFilePath() {
|
|
68
|
+
return path.join(os.homedir(), '.sn-scriptsync', 'agent-port.json');
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Walk up directory tree from startDir looking for .vscode/sn-agent-port.json.
|
|
72
|
+
*/
|
|
73
|
+
function findWorkspacePortFile(startDir) {
|
|
74
|
+
let current = path.resolve(startDir);
|
|
75
|
+
while (true) {
|
|
76
|
+
const candidate = path.join(current, '.vscode', 'sn-agent-port.json');
|
|
77
|
+
if (fs.existsSync(candidate)) {
|
|
78
|
+
return candidate;
|
|
79
|
+
}
|
|
80
|
+
const parent = path.dirname(current);
|
|
81
|
+
if (parent === current) {
|
|
82
|
+
break; // Reached filesystem root
|
|
83
|
+
}
|
|
84
|
+
current = parent;
|
|
85
|
+
}
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Discover the active ScriptSync bridge port and token using deterministic precedence.
|
|
90
|
+
*/
|
|
91
|
+
async function discoverBridge(options = {}) {
|
|
92
|
+
const cwd = options.cwd || process.cwd();
|
|
93
|
+
// 1. Explicit port-file option if provided
|
|
94
|
+
if (options.portFile) {
|
|
95
|
+
if (!fs.existsSync(options.portFile)) {
|
|
96
|
+
throw new ScriptSyncClientError(`Specified port file does not exist: ${options.portFile}`, 'E_PORT_FILE_NOT_FOUND');
|
|
97
|
+
}
|
|
98
|
+
return await validatePortFile(options.portFile, false);
|
|
99
|
+
}
|
|
100
|
+
// 2. Upward traversal in current workspace for .vscode/sn-agent-port.json
|
|
101
|
+
const wsPortFile = findWorkspacePortFile(cwd);
|
|
102
|
+
if (wsPortFile) {
|
|
103
|
+
try {
|
|
104
|
+
return await validatePortFile(wsPortFile, false);
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
// Stale or dead workspace port file
|
|
108
|
+
if (err.code === 'E_STALE_PORT_FILE' || err.code === 'E_BRIDGE_UNREACHABLE') {
|
|
109
|
+
// Fall through to global port file check
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
throw err;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// 3. Fallback to global user port file (~/.sn-scriptsync/agent-port.json)
|
|
117
|
+
const globalPortFile = getGlobalPortFilePath();
|
|
118
|
+
if (fs.existsSync(globalPortFile)) {
|
|
119
|
+
try {
|
|
120
|
+
return await validatePortFile(globalPortFile, true);
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
if (err.code === 'E_STALE_PORT_FILE' || err.code === 'E_BRIDGE_UNREACHABLE') {
|
|
124
|
+
// Drop through to final error
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
throw err;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
throw new ScriptSyncClientError('No active ScriptSync bridge found. Open your ServiceNow project folder in VS Code with sn-scriptsync active, or start standalone with `snu serve`.', 'E_BRIDGE_NOT_FOUND');
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Validate a candidate port file: parse JSON, check PID liveness, and verify /api/health.
|
|
135
|
+
*/
|
|
136
|
+
async function validatePortFile(filePath, isGlobal) {
|
|
137
|
+
let raw;
|
|
138
|
+
try {
|
|
139
|
+
raw = fs.readFileSync(filePath, 'utf8');
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
throw new ScriptSyncClientError(`Failed to read port file at ${filePath}: ${err?.message || err}`, 'E_PORT_FILE_READ_ERROR');
|
|
143
|
+
}
|
|
144
|
+
let data;
|
|
145
|
+
try {
|
|
146
|
+
data = JSON.parse(raw);
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
throw new ScriptSyncClientError(`Corrupt port file JSON at ${filePath}`, 'E_PORT_FILE_CORRUPT');
|
|
150
|
+
}
|
|
151
|
+
if (!data.port || !data.token || typeof data.pid !== 'number') {
|
|
152
|
+
throw new ScriptSyncClientError(`Invalid port file structure at ${filePath}`, 'E_PORT_FILE_INVALID');
|
|
153
|
+
}
|
|
154
|
+
// Validate process liveness via PID (kill -0)
|
|
155
|
+
if (typeof process.kill === 'function') {
|
|
156
|
+
try {
|
|
157
|
+
process.kill(data.pid, 0);
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
throw new ScriptSyncClientError(`Bridge process with PID ${data.pid} is no longer running (stale port file at ${filePath})`, 'E_STALE_PORT_FILE');
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
// Probe /api/health to ensure the bridge is healthy and API version is compatible
|
|
164
|
+
await checkHealth(data.port, data.pid);
|
|
165
|
+
return {
|
|
166
|
+
port: data.port,
|
|
167
|
+
token: data.token,
|
|
168
|
+
pid: data.pid,
|
|
169
|
+
apiVersion: data.apiVersion || 8,
|
|
170
|
+
portFilePath: filePath,
|
|
171
|
+
isGlobal,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Probe GET /api/health with a short timeout.
|
|
176
|
+
*/
|
|
177
|
+
async function checkHealth(port, expectedPid) {
|
|
178
|
+
const url = `http://127.0.0.1:${port}/api/health`;
|
|
179
|
+
const controller = new AbortController();
|
|
180
|
+
const timer = setTimeout(() => controller.abort(), exports.HEALTH_CHECK_TIMEOUT_MS);
|
|
181
|
+
try {
|
|
182
|
+
const res = await fetch(url, { signal: controller.signal });
|
|
183
|
+
if (!res.ok) {
|
|
184
|
+
throw new Error(`Health check returned HTTP ${res.status}`);
|
|
185
|
+
}
|
|
186
|
+
const health = (await res.json());
|
|
187
|
+
if (health.status !== 'success') {
|
|
188
|
+
throw new Error('Health check response missing status=success');
|
|
189
|
+
}
|
|
190
|
+
if (typeof health.apiVersion === 'number' && health.apiVersion < exports.MIN_API_VERSION) {
|
|
191
|
+
throw new ScriptSyncClientError(`ScriptSync server API version ${health.apiVersion} is older than minimum supported ${exports.MIN_API_VERSION}`, 'E_API_VERSION_INCOMPATIBLE');
|
|
192
|
+
}
|
|
193
|
+
if (expectedPid !== undefined && health.pid !== expectedPid) {
|
|
194
|
+
throw new ScriptSyncClientError(`PID mismatch: port file declared PID ${expectedPid}, but server on port ${port} is running as PID ${health.pid}`, 'E_STALE_PORT_FILE');
|
|
195
|
+
}
|
|
196
|
+
return health;
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
if (err instanceof ScriptSyncClientError)
|
|
200
|
+
throw err;
|
|
201
|
+
throw new ScriptSyncClientError(`Cannot reach ScriptSync bridge on 127.0.0.1:${port}: ${err?.message || err}`, 'E_BRIDGE_UNREACHABLE');
|
|
202
|
+
}
|
|
203
|
+
finally {
|
|
204
|
+
clearTimeout(timer);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* ScriptSync Client for sending typed commands to the bridge.
|
|
209
|
+
*/
|
|
210
|
+
class ScriptSyncClient {
|
|
211
|
+
options;
|
|
212
|
+
discoveryResult;
|
|
213
|
+
constructor(options) {
|
|
214
|
+
this.options = options;
|
|
215
|
+
}
|
|
216
|
+
async getDiscovery() {
|
|
217
|
+
if (!this.discoveryResult) {
|
|
218
|
+
this.discoveryResult = await discoverBridge(this.options);
|
|
219
|
+
}
|
|
220
|
+
return this.discoveryResult;
|
|
221
|
+
}
|
|
222
|
+
async execute(mapped, timeoutMs) {
|
|
223
|
+
const discovery = await this.getDiscovery();
|
|
224
|
+
const url = `http://127.0.0.1:${discovery.port}/api`;
|
|
225
|
+
const requestId = `snu_${Date.now()}_${crypto.randomBytes(3).toString('hex')}`;
|
|
226
|
+
const payload = {
|
|
227
|
+
id: requestId,
|
|
228
|
+
command: mapped.command,
|
|
229
|
+
params: mapped.params,
|
|
230
|
+
};
|
|
231
|
+
if (mapped.instance) {
|
|
232
|
+
payload.instance = mapped.instance;
|
|
233
|
+
}
|
|
234
|
+
const policy = (0, policy_js_1.getCommandPolicy)(payload);
|
|
235
|
+
const isReviewedCommand = policy.review === 'required';
|
|
236
|
+
const effectiveTimeout = timeoutMs !== undefined
|
|
237
|
+
? timeoutMs
|
|
238
|
+
: isReviewedCommand
|
|
239
|
+
? exports.REVIEWED_COMMAND_TIMEOUT_MS
|
|
240
|
+
: exports.DEFAULT_COMMAND_TIMEOUT_MS;
|
|
241
|
+
const controller = new AbortController();
|
|
242
|
+
const timer = setTimeout(() => controller.abort(), effectiveTimeout);
|
|
243
|
+
try {
|
|
244
|
+
const res = await fetch(url, {
|
|
245
|
+
method: 'POST',
|
|
246
|
+
headers: {
|
|
247
|
+
'Content-Type': 'application/json',
|
|
248
|
+
'X-Agent-Token': discovery.token,
|
|
249
|
+
},
|
|
250
|
+
body: JSON.stringify(payload),
|
|
251
|
+
signal: controller.signal,
|
|
252
|
+
});
|
|
253
|
+
let json;
|
|
254
|
+
try {
|
|
255
|
+
json = (await res.json());
|
|
256
|
+
}
|
|
257
|
+
catch (parseErr) {
|
|
258
|
+
throw new ScriptSyncClientError(`Failed to parse server response: ${parseErr?.message || parseErr}`, 'E_INVALID_RESPONSE', res.status);
|
|
259
|
+
}
|
|
260
|
+
if (json.status === 'error' || !res.ok) {
|
|
261
|
+
// Auto-fallback: If multiple instances exist and none was specified, check if there is a unique recently-active defaultInstance
|
|
262
|
+
if (json.code === 'E_INSTANCE_REQUIRED' && !mapped.instance && mapped.command !== 'list_instances') {
|
|
263
|
+
try {
|
|
264
|
+
const listResp = await this.execute({ command: 'list_instances', params: {} }, 3000);
|
|
265
|
+
const defaultInst = listResp.result?.defaultInstance;
|
|
266
|
+
if (defaultInst) {
|
|
267
|
+
return await this.execute({ ...mapped, instance: defaultInst }, effectiveTimeout);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
catch {
|
|
271
|
+
// Ignore failure to fetch default instance and throw original error
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
throw new ScriptSyncClientError(json.error || `Command ${mapped.command} failed`, json.code || 'E_COMMAND_FAILED', res.status, json.details || json.result);
|
|
275
|
+
}
|
|
276
|
+
return json;
|
|
277
|
+
}
|
|
278
|
+
catch (err) {
|
|
279
|
+
if (err instanceof ScriptSyncClientError)
|
|
280
|
+
throw err;
|
|
281
|
+
if (err.name === 'AbortError') {
|
|
282
|
+
throw new ScriptSyncClientError(`Command '${mapped.command}' timed out after ${effectiveTimeout / 1000}s`, 'E_TIMEOUT');
|
|
283
|
+
}
|
|
284
|
+
throw new ScriptSyncClientError(`Failed to communicate with ScriptSync Agent API: ${err?.message || err}`, 'E_NETWORK_ERROR');
|
|
285
|
+
}
|
|
286
|
+
finally {
|
|
287
|
+
clearTimeout(timer);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Composite context fetcher for `snu context` / `snu_get_context`
|
|
292
|
+
*/
|
|
293
|
+
async getContext(instance) {
|
|
294
|
+
// 1. Connection check
|
|
295
|
+
const connResp = await this.execute({ command: 'check_connection', params: {} });
|
|
296
|
+
const conn = connResp.result || {};
|
|
297
|
+
// 2. List instances roster
|
|
298
|
+
const instancesResp = await this.execute({ command: 'list_instances', params: {} });
|
|
299
|
+
const instancesData = instancesResp.result || {};
|
|
300
|
+
let specificInstanceInfo = null;
|
|
301
|
+
if (instance) {
|
|
302
|
+
try {
|
|
303
|
+
const instResp = await this.execute({ command: 'get_instance_info', instance, params: {} });
|
|
304
|
+
specificInstanceInfo = instResp.result;
|
|
305
|
+
}
|
|
306
|
+
catch { }
|
|
307
|
+
}
|
|
308
|
+
// 3. Try get_capabilities
|
|
309
|
+
let capabilities = null;
|
|
310
|
+
let browserConnected = conn.browserConnected === true;
|
|
311
|
+
if (browserConnected) {
|
|
312
|
+
try {
|
|
313
|
+
const capResp = await this.execute({ command: 'get_capabilities', params: {} });
|
|
314
|
+
capabilities = capResp.result;
|
|
315
|
+
}
|
|
316
|
+
catch (e) {
|
|
317
|
+
if (e.code === 'E_BROWSER_DISCONNECTED') {
|
|
318
|
+
browserConnected = false;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
const bridgeReady = conn.serverRunning === true;
|
|
323
|
+
const serviceNowReady = bridgeReady && browserConnected;
|
|
324
|
+
return {
|
|
325
|
+
bridgeReady,
|
|
326
|
+
serviceNowReady,
|
|
327
|
+
browserConnected,
|
|
328
|
+
message: serviceNowReady
|
|
329
|
+
? 'Connected and ready'
|
|
330
|
+
: bridgeReady
|
|
331
|
+
? 'Bridge active. Helper tab disconnected (open via /token in ServiceNow tab).'
|
|
332
|
+
: 'WebSocket server not running.',
|
|
333
|
+
helper: capabilities
|
|
334
|
+
? {
|
|
335
|
+
tier: capabilities.tier,
|
|
336
|
+
proFeatures: capabilities.proFeatures,
|
|
337
|
+
cdp: capabilities.cdp,
|
|
338
|
+
capabilities: capabilities.capabilities,
|
|
339
|
+
}
|
|
340
|
+
: conn.helper || null,
|
|
341
|
+
gates: capabilities?.gates || null,
|
|
342
|
+
instanceGates: capabilities?.instanceGates || null,
|
|
343
|
+
instances: instancesData.instances || [],
|
|
344
|
+
defaultInstance: instancesData.defaultInstance || null,
|
|
345
|
+
selectedInstance: specificInstanceInfo,
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
exports.ScriptSyncClient = ScriptSyncClient;
|
|
350
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export * from './client.js';
|
|
3
|
+
export * from './registry.js';
|
|
4
|
+
export { runCli } from './cli/index.js';
|
|
5
|
+
export { createMcpServer, startMcpServer } from './mcp/index.js';
|
|
6
|
+
export { StandaloneBridge } from './server/standalone.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.StandaloneBridge = exports.startMcpServer = exports.createMcpServer = exports.runCli = void 0;
|
|
18
|
+
__exportStar(require("./types.js"), exports);
|
|
19
|
+
__exportStar(require("./client.js"), exports);
|
|
20
|
+
__exportStar(require("./registry.js"), exports);
|
|
21
|
+
var index_js_1 = require("./cli/index.js");
|
|
22
|
+
Object.defineProperty(exports, "runCli", { enumerable: true, get: function () { return index_js_1.runCli; } });
|
|
23
|
+
var index_js_2 = require("./mcp/index.js");
|
|
24
|
+
Object.defineProperty(exports, "createMcpServer", { enumerable: true, get: function () { return index_js_2.createMcpServer; } });
|
|
25
|
+
Object.defineProperty(exports, "startMcpServer", { enumerable: true, get: function () { return index_js_2.startMcpServer; } });
|
|
26
|
+
var standalone_js_1 = require("./server/standalone.js");
|
|
27
|
+
Object.defineProperty(exports, "StandaloneBridge", { enumerable: true, get: function () { return standalone_js_1.StandaloneBridge; } });
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,8CAA4B;AAC5B,gDAA8B;AAC9B,2CAAwC;AAA/B,kGAAA,MAAM,OAAA;AACf,2CAAiE;AAAxD,2GAAA,eAAe,OAAA;AAAE,0GAAA,cAAc,OAAA;AACxC,wDAA0D;AAAjD,iHAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,wBAAsB,eAAe,IAAI,OAAO,CAAC,SAAS,CAAC,CA+O1D;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAwBpD"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMcpServer = createMcpServer;
|
|
4
|
+
exports.startMcpServer = startMcpServer;
|
|
5
|
+
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
6
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
7
|
+
const zod_1 = require("zod");
|
|
8
|
+
const registry_js_1 = require("../registry.js");
|
|
9
|
+
const client_js_1 = require("../client.js");
|
|
10
|
+
const standalone_js_1 = require("../server/standalone.js");
|
|
11
|
+
async function createMcpServer() {
|
|
12
|
+
const server = new mcp_js_1.McpServer({
|
|
13
|
+
name: 'sn-utils',
|
|
14
|
+
version: '0.1.0',
|
|
15
|
+
});
|
|
16
|
+
const client = new client_js_1.ScriptSyncClient();
|
|
17
|
+
// Helper to execute a tool and wrap errors into isError tool responses
|
|
18
|
+
async function executeTool(name, args) {
|
|
19
|
+
const tool = (0, registry_js_1.getToolByName)(name);
|
|
20
|
+
if (!tool) {
|
|
21
|
+
return {
|
|
22
|
+
isError: true,
|
|
23
|
+
content: [{ type: 'text', text: `Unknown tool: ${name}` }],
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
if (name === 'snu_get_context') {
|
|
28
|
+
const result = await client.getContext(args.instance);
|
|
29
|
+
return {
|
|
30
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const mapped = tool.mapInput(args);
|
|
34
|
+
const resp = await client.execute(mapped);
|
|
35
|
+
return {
|
|
36
|
+
content: [{ type: 'text', text: JSON.stringify(resp.result, null, 2) }],
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
console.error(`[snu-mcp] Error executing ${name}:`, err?.message || err);
|
|
41
|
+
const userFeedback = err.details?.userFeedback ? ` - User Feedback: "${err.details.userFeedback}"` : '';
|
|
42
|
+
return {
|
|
43
|
+
isError: true,
|
|
44
|
+
content: [
|
|
45
|
+
{
|
|
46
|
+
type: 'text',
|
|
47
|
+
text: `Error (${err?.code || 'E_COMMAND_FAILED'}): ${err?.message || err}${userFeedback}`,
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// 1. Code Search
|
|
54
|
+
server.tool('snu_code_search', 'Fast SN Utils GraphQL field-index code search across Script Includes, Business Rules, Client Scripts, UI Actions, and Flow Actions. Requires SN Utils Pro.', {
|
|
55
|
+
term: zod_1.z.string().min(2).describe('Search keyword or phrase (min 2 chars)'),
|
|
56
|
+
tables: zod_1.z.string().optional().describe('Optional comma-separated table names to filter search'),
|
|
57
|
+
limit: zod_1.z.number().int().min(1).max(500).default(50).optional().describe('Max hits to return'),
|
|
58
|
+
activeOnly: zod_1.z.boolean().default(false).optional().describe('Only search active records'),
|
|
59
|
+
instance: zod_1.z.string().optional().describe('Target instance name/folder (optional)'),
|
|
60
|
+
}, async (args) => executeTool('snu_code_search', args));
|
|
61
|
+
// 2. Schema
|
|
62
|
+
server.tool('snu_get_schema', 'Fetch column dictionary metadata for a table (types, labels, references, choice lists, mandatory/read-only flags).', {
|
|
63
|
+
table: zod_1.z.string().describe('ServiceNow table name (e.g. incident, sys_user)'),
|
|
64
|
+
instance: zod_1.z.string().optional().describe('Target instance name/folder (optional)'),
|
|
65
|
+
}, async (args) => executeTool('snu_get_schema', args));
|
|
66
|
+
// 3. Context
|
|
67
|
+
server.tool('snu_get_context', 'Inspect active ServiceNow connection status, helper tab state, license tier, available instances, and permission gates.', {
|
|
68
|
+
instance: zod_1.z.string().optional().describe('Target instance name/folder (optional)'),
|
|
69
|
+
}, async (args) => executeTool('snu_get_context', args));
|
|
70
|
+
// 4. Query Records
|
|
71
|
+
server.tool('snu_query_records', 'Query records from any ServiceNow table with an encoded query string, projection fields, and limit.', {
|
|
72
|
+
table: zod_1.z.string().describe('Table name to query'),
|
|
73
|
+
query: zod_1.z.string().optional().describe('ServiceNow encoded query string (e.g. active=true^priority=1)'),
|
|
74
|
+
fields: zod_1.z.string().optional().describe('Comma-separated field list to project'),
|
|
75
|
+
limit: zod_1.z.number().int().min(1).max(500).default(10).optional().describe('Max records to return'),
|
|
76
|
+
orderBy: zod_1.z.string().optional().describe('Order by field expression (e.g. sys_created_on or ORDERBYDESCsys_created_on)'),
|
|
77
|
+
instance: zod_1.z.string().optional().describe('Target instance name/folder (optional)'),
|
|
78
|
+
}, async (args) => executeTool('snu_query_records', args));
|
|
79
|
+
// 5. Get Record
|
|
80
|
+
server.tool('snu_get_record', 'Fetch a single record by sys_id with optional field projection.', {
|
|
81
|
+
table: zod_1.z.string().describe('Table name'),
|
|
82
|
+
sys_id: zod_1.z.string().describe('32-character record sys_id'),
|
|
83
|
+
fields: zod_1.z.string().optional().describe('Comma-separated field list (optional)'),
|
|
84
|
+
instance: zod_1.z.string().optional().describe('Target instance name/folder (optional)'),
|
|
85
|
+
}, async (args) => executeTool('snu_get_record', args));
|
|
86
|
+
// 6. Create Artifact
|
|
87
|
+
server.tool('snu_create_artifact', 'Create a new scriptable artifact (Script Include, Business Rule, etc.) in ServiceNow and track it locally. Requires fields.name and createArtifacts.enabled gate. Note: If review mode is enabled in VS Code settings, the write is staged for manual approval rather than applied immediately.', {
|
|
88
|
+
table: zod_1.z.string().describe('Target ServiceNow artifact table (e.g. sys_script_include)'),
|
|
89
|
+
name: zod_1.z.string().describe('Artifact name (will be mapped into fields.name)'),
|
|
90
|
+
fields: zod_1.z.record(zod_1.z.any()).optional().describe('Additional field-value dictionary (e.g. script, description)'),
|
|
91
|
+
scope: zod_1.z.string().optional().describe('Application scope (optional)'),
|
|
92
|
+
instance: zod_1.z.string().optional().describe('Target instance name/folder (optional)'),
|
|
93
|
+
}, async (args) => executeTool('snu_create_artifact', args));
|
|
94
|
+
// 7. Update Record
|
|
95
|
+
server.tool('snu_update_record', 'Update a field on an existing ServiceNow record with synchronous persistence verification. Note: If review mode is enabled in VS Code settings, the write is staged for manual approval rather than applied immediately.', {
|
|
96
|
+
table: zod_1.z.string().describe('Table name'),
|
|
97
|
+
sys_id: zod_1.z.string().describe('Record sys_id'),
|
|
98
|
+
field: zod_1.z.string().describe('Field name to update (e.g. script, short_description)'),
|
|
99
|
+
value: zod_1.z.string().describe('New field content'),
|
|
100
|
+
instance: zod_1.z.string().optional().describe('Target instance name/folder (optional)'),
|
|
101
|
+
}, async (args) => executeTool('snu_update_record', args));
|
|
102
|
+
// 8. Delete Record
|
|
103
|
+
server.tool('snu_delete_record', 'Delete a single record from ServiceNow by sys_id. Destructive: disabled by default (deleteRecords.enabled) and requires confirm: true or dryRun: true.', {
|
|
104
|
+
table: zod_1.z.string().describe('Table name'),
|
|
105
|
+
sys_id: zod_1.z.string().describe('Record sys_id'),
|
|
106
|
+
confirm: zod_1.z.boolean().describe('Must be set to true to execute deletion'),
|
|
107
|
+
dryRun: zod_1.z.boolean().optional().describe('When true, returns the record that would be deleted without deleting it'),
|
|
108
|
+
instance: zod_1.z.string().optional().describe('Target instance name/folder (optional)'),
|
|
109
|
+
}, async (args) => executeTool('snu_delete_record', args));
|
|
110
|
+
// 9. Run Background Script
|
|
111
|
+
server.tool('snu_run_background_script', 'Execute server-side JavaScript on the instance via Background Scripts and return captured output. Gated by backgroundScripts.enabled.', {
|
|
112
|
+
script: zod_1.z.string().describe('JavaScript code to execute on the instance'),
|
|
113
|
+
instance: zod_1.z.string().optional().describe('Target instance name/folder (optional)'),
|
|
114
|
+
}, async (args) => executeTool('snu_run_background_script', args));
|
|
115
|
+
// 10. Get Form State
|
|
116
|
+
server.tool('snu_get_form_state', 'Read live form table, sys_id, new-record state, and field values from the active connected ServiceNow browser tab.', {
|
|
117
|
+
fields: zod_1.z.array(zod_1.z.string()).optional().describe('Optional list of specific field names to read'),
|
|
118
|
+
url: zod_1.z.string().optional().describe('Target tab URL pattern (optional)'),
|
|
119
|
+
tabId: zod_1.z.number().int().optional().describe('Specific browser tab ID (optional)'),
|
|
120
|
+
instance: zod_1.z.string().optional().describe('Target instance name/folder (optional)'),
|
|
121
|
+
}, async (args) => executeTool('snu_get_form_state', args));
|
|
122
|
+
// 11. Set Form Field
|
|
123
|
+
server.tool('snu_set_form_field', 'Set a field value on the active ServiceNow form via g_form.setValue (triggers client scripts and UI policies).', {
|
|
124
|
+
field: zod_1.z.string().describe('Field name to set'),
|
|
125
|
+
value: zod_1.z.string().describe('New value to set'),
|
|
126
|
+
displayValue: zod_1.z.string().optional().describe('Optional display value for reference fields'),
|
|
127
|
+
url: zod_1.z.string().optional().describe('Target tab URL pattern (optional)'),
|
|
128
|
+
tabId: zod_1.z.number().int().optional().describe('Specific browser tab ID (optional)'),
|
|
129
|
+
instance: zod_1.z.string().optional().describe('Target instance name/folder (optional)'),
|
|
130
|
+
}, async (args) => executeTool('snu_set_form_field', args));
|
|
131
|
+
// 12. Run UI Action
|
|
132
|
+
server.tool('snu_run_ui_action', 'Trigger a UI action on the active form (e.g. save, submit, sysverb_update).', {
|
|
133
|
+
uiAction: zod_1.z.string().describe('Action name or sysverb verb (e.g. save, sysverb_update)'),
|
|
134
|
+
suppressDialogs: zod_1.z.boolean().default(true).optional().describe('Auto-confirm browser dialogs'),
|
|
135
|
+
url: zod_1.z.string().optional().describe('Target tab URL pattern (optional)'),
|
|
136
|
+
tabId: zod_1.z.number().int().optional().describe('Specific browser tab ID (optional)'),
|
|
137
|
+
instance: zod_1.z.string().optional().describe('Target instance name/folder (optional)'),
|
|
138
|
+
}, async (args) => executeTool('snu_run_ui_action', args));
|
|
139
|
+
// 13. Navigate
|
|
140
|
+
server.tool('snu_navigate', 'Navigate connected ServiceNow browser tab to a URL and wait for page load to finish.', {
|
|
141
|
+
url: zod_1.z.string().describe('ServiceNow URL to navigate to'),
|
|
142
|
+
tabId: zod_1.z.number().int().optional().describe('Specific tab ID to navigate (optional)'),
|
|
143
|
+
newTab: zod_1.z.boolean().default(false).optional().describe('Open in a new tab instead of active tab'),
|
|
144
|
+
waitForLoad: zod_1.z.boolean().default(true).optional().describe('Wait for page load event before returning'),
|
|
145
|
+
discardUnsaved: zod_1.z.boolean().default(true).optional().describe('Bypass unsaved changes warnings'),
|
|
146
|
+
instance: zod_1.z.string().optional().describe('Target instance name/folder (optional)'),
|
|
147
|
+
}, async (args) => executeTool('snu_navigate', args));
|
|
148
|
+
// 14. Take Screenshot
|
|
149
|
+
server.tool('snu_take_screenshot', 'Capture a screenshot of a ServiceNow page tab (auto-routes between standard capture and debugger if available). Saves under workspace screenshots/.', {
|
|
150
|
+
url: zod_1.z.string().optional().describe('URL pattern of the tab to capture'),
|
|
151
|
+
tabId: zod_1.z.number().int().optional().describe('Specific tab ID to capture'),
|
|
152
|
+
fileName: zod_1.z.string().optional().describe('Optional custom filename (defaults to timestamped PNG)'),
|
|
153
|
+
exactUrl: zod_1.z.boolean().default(false).optional().describe('Require exact URL match'),
|
|
154
|
+
instance: zod_1.z.string().optional().describe('Target instance name/folder (optional)'),
|
|
155
|
+
}, async (args) => {
|
|
156
|
+
if (!args.url && args.tabId === undefined) {
|
|
157
|
+
args.url = 'https://*.service-now.com/*';
|
|
158
|
+
}
|
|
159
|
+
return executeTool('snu_take_screenshot', args);
|
|
160
|
+
});
|
|
161
|
+
return server;
|
|
162
|
+
}
|
|
163
|
+
async function startMcpServer() {
|
|
164
|
+
// Ensure all logging goes strictly to stderr
|
|
165
|
+
console.error('[snu-mcp] Starting SN Utils MCP Server on stdio...');
|
|
166
|
+
// Auto-start in-process standalone bridge if no bridge is currently reachable
|
|
167
|
+
try {
|
|
168
|
+
await (0, client_js_1.discoverBridge)();
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
if (err?.code === 'E_BRIDGE_NOT_FOUND' ||
|
|
172
|
+
err?.code === 'E_BRIDGE_UNREACHABLE' ||
|
|
173
|
+
err?.code === 'E_STALE_PORT_FILE') {
|
|
174
|
+
console.error('[snu-mcp] No active VS Code bridge found. Starting in-process standalone bridge on WS 1978 & HTTP 1977...');
|
|
175
|
+
const standalone = new standalone_js_1.StandaloneBridge();
|
|
176
|
+
await standalone.start();
|
|
177
|
+
console.error('[snu-mcp] In-process standalone bridge active.');
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const server = await createMcpServer();
|
|
181
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
182
|
+
await server.connect(transport);
|
|
183
|
+
console.error('[snu-mcp] Connected on stdio. 14 tools registered.');
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":";;AAOA,0CA+OC;AAED,wCAwBC;AAhRD,oEAAoE;AACpE,wEAAiF;AACjF,6BAAwB;AACxB,gDAAsD;AACtD,4CAAgE;AAChE,2DAA2D;AAEpD,KAAK,UAAU,eAAe;IACnC,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC;QAC3B,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,4BAAgB,EAAE,CAAC;IAEtC,uEAAuE;IACvE,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,IAAyB;QAChE,MAAM,IAAI,GAAG,IAAA,2BAAa,EAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC;aACpE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtD,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;iBAC5E,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1C,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACjF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,6BAA6B,IAAI,GAAG,EAAE,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC;YACzE,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,sBAAsB,GAAG,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxG,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,UAAU,GAAG,EAAE,IAAI,IAAI,kBAAkB,MAAM,GAAG,EAAE,OAAO,IAAI,GAAG,GAAG,YAAY,EAAE;qBAC1F;iBACF;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,4JAA4J,EAC5J;QACE,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;QAC1E,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;QAC/F,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC7F,UAAU,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACxF,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACnF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,iBAAiB,EAAE,IAAI,CAAC,CACrD,CAAC;IAEF,YAAY;IACZ,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,oHAAoH,EACpH;QACE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;QAC7E,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACnF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,CACpD,CAAC;IAEF,aAAa;IACb,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,yHAAyH,EACzH;QACE,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACnF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,iBAAiB,EAAE,IAAI,CAAC,CACrD,CAAC;IAEF,mBAAmB;IACnB,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,qGAAqG,EACrG;QACE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACjD,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;QACtG,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QAC/E,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAChG,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8EAA8E,CAAC;QACvH,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACnF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,mBAAmB,EAAE,IAAI,CAAC,CACvD,CAAC;IAEF,gBAAgB;IAChB,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,iEAAiE,EACjE;QACE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACzD,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QAC/E,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACnF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,CACpD,CAAC;IAEF,qBAAqB;IACrB,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,iSAAiS,EACjS;QACE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;QACxF,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;QAC5E,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;QAC7G,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACrE,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACnF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,qBAAqB,EAAE,IAAI,CAAC,CACzD,CAAC;IAEF,mBAAmB;IACnB,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,0NAA0N,EAC1N;QACE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC5C,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;QACnF,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC/C,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACnF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,mBAAmB,EAAE,IAAI,CAAC,CACvD,CAAC;IAEF,mBAAmB;IACnB,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,wJAAwJ,EACxJ;QACE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC5C,OAAO,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QACxE,MAAM,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yEAAyE,CAAC;QAClH,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACnF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,mBAAmB,EAAE,IAAI,CAAC,CACvD,CAAC;IAEF,2BAA2B;IAC3B,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,uIAAuI,EACvI;QACE,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;QACzE,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACnF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,2BAA2B,EAAE,IAAI,CAAC,CAC/D,CAAC;IAEF,qBAAqB;IACrB,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,oHAAoH,EACpH;QACE,MAAM,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QAChG,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QACxE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QACjF,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACnF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,oBAAoB,EAAE,IAAI,CAAC,CACxD,CAAC;IAEF,qBAAqB;IACrB,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,gHAAgH,EAChH;QACE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC/C,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC9C,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QAC3F,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QACxE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QACjF,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACnF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,oBAAoB,EAAE,IAAI,CAAC,CACxD,CAAC;IAEF,oBAAoB;IACpB,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,6EAA6E,EAC7E;QACE,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;QACxF,eAAe,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC9F,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QACxE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QACjF,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACnF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,mBAAmB,EAAE,IAAI,CAAC,CACvD,CAAC;IAEF,eAAe;IACf,MAAM,CAAC,IAAI,CACT,cAAc,EACd,sFAAsF,EACtF;QACE,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QACzD,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;QACrF,MAAM,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QACjG,WAAW,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QACvG,cAAc,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QAChG,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACnF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC,CAClD,CAAC;IAEF,sBAAsB;IACtB,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,qJAAqJ,EACrJ;QACE,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QACxE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACzE,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;QAClG,QAAQ,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACnF,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACnF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,IAAI,CAAC,GAAG,GAAG,6BAA6B,CAAC;QAC3C,CAAC;QACD,OAAO,WAAW,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,cAAc;IAClC,6CAA6C;IAC7C,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAEpE,8EAA8E;IAC9E,IAAI,CAAC;QACH,MAAM,IAAA,0BAAc,GAAE,CAAC;IACzB,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IACE,GAAG,EAAE,IAAI,KAAK,oBAAoB;YAClC,GAAG,EAAE,IAAI,KAAK,sBAAsB;YACpC,GAAG,EAAE,IAAI,KAAK,mBAAmB,EACjC,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,2GAA2G,CAAC,CAAC;YAC3H,MAAM,UAAU,GAAG,IAAI,gCAAgB,EAAE,CAAC;YAC1C,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ToolDefinition } from './types.js';
|
|
2
|
+
export declare const TOOLS: ToolDefinition[];
|
|
3
|
+
export declare function getToolByName(name: string): ToolDefinition | undefined;
|
|
4
|
+
export declare function getToolByCliCommand(cliCmd: string): ToolDefinition | undefined;
|
|
5
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,MAAM,YAAY,CAAC;AAU3D,eAAO,MAAM,KAAK,EAAE,cAAc,EAygBjC,CAAC;AAUF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEtE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE9E"}
|