@conquest-eth/tools 0.0.0 → 0.0.2
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 +20 -51
- package/dist/cli-tool-generator.d.ts +2 -1
- package/dist/cli-tool-generator.d.ts.map +1 -1
- package/dist/cli.js +61 -32
- package/dist/cli.js.map +1 -1
- package/dist/contracts/space-info.d.ts.map +1 -1
- package/dist/contracts/space-info.js +22 -1
- package/dist/contracts/space-info.js.map +1 -1
- package/dist/fleet/resolve.d.ts +1 -1
- package/dist/fleet/resolve.d.ts.map +1 -1
- package/dist/fleet/resolve.js +5 -4
- package/dist/fleet/resolve.js.map +1 -1
- package/dist/fleet/send.d.ts.map +1 -1
- package/dist/fleet/send.js +8 -8
- package/dist/fleet/send.js.map +1 -1
- package/dist/index.d.ts +6 -32
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -128
- package/dist/index.js.map +1 -1
- package/dist/mcp.d.ts +14 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +29 -0
- package/dist/mcp.js.map +1 -0
- package/dist/planet/acquire.d.ts +3 -2
- package/dist/planet/acquire.d.ts.map +1 -1
- package/dist/planet/acquire.js +6 -4
- package/dist/planet/acquire.js.map +1 -1
- package/dist/planet/exit.d.ts.map +1 -1
- package/dist/planet/exit.js +1 -0
- package/dist/planet/exit.js.map +1 -1
- package/dist/planet/manager.d.ts +63 -0
- package/dist/planet/manager.d.ts.map +1 -1
- package/dist/planet/manager.js +125 -2
- package/dist/planet/manager.js.map +1 -1
- package/dist/planet/withdraw.d.ts +17 -0
- package/dist/planet/withdraw.d.ts.map +1 -0
- package/dist/planet/withdraw.js +25 -0
- package/dist/planet/withdraw.js.map +1 -0
- package/dist/storage/interface.d.ts +6 -0
- package/dist/storage/interface.d.ts.map +1 -1
- package/dist/storage/json-storage.d.ts +1 -0
- package/dist/storage/json-storage.d.ts.map +1 -1
- package/dist/storage/json-storage.js +10 -1
- package/dist/storage/json-storage.js.map +1 -1
- package/dist/tool-handling/cli-tool-generator.d.ts +22 -0
- package/dist/tool-handling/cli-tool-generator.d.ts.map +1 -0
- package/dist/tool-handling/cli-tool-generator.js +345 -0
- package/dist/tool-handling/cli-tool-generator.js.map +1 -0
- package/dist/tool-handling/cli.d.ts +19 -0
- package/dist/tool-handling/cli.d.ts.map +1 -0
- package/dist/tool-handling/cli.js +472 -0
- package/dist/tool-handling/cli.js.map +1 -0
- package/dist/tool-handling/index.d.ts +15 -0
- package/dist/tool-handling/index.d.ts.map +1 -0
- package/dist/tool-handling/index.js +32 -0
- package/dist/tool-handling/index.js.map +1 -0
- package/dist/tool-handling/mcp.d.ts +22 -0
- package/dist/tool-handling/mcp.d.ts.map +1 -0
- package/dist/tool-handling/mcp.js +88 -0
- package/dist/tool-handling/mcp.js.map +1 -0
- package/dist/tool-handling/types.d.ts +72 -0
- package/dist/tool-handling/types.d.ts.map +1 -0
- package/dist/tool-handling/types.js +10 -0
- package/dist/tool-handling/types.js.map +1 -0
- package/dist/tools/acquire_planets.d.ts +7 -5
- package/dist/tools/acquire_planets.d.ts.map +1 -1
- package/dist/tools/acquire_planets.js +28 -42
- package/dist/tools/acquire_planets.js.map +1 -1
- package/dist/tools/exit_planets.d.ts +7 -3
- package/dist/tools/exit_planets.d.ts.map +1 -1
- package/dist/tools/exit_planets.js +20 -9
- package/dist/tools/exit_planets.js.map +1 -1
- package/dist/tools/get_my_planets.d.ts +3 -2
- package/dist/tools/get_my_planets.d.ts.map +1 -1
- package/dist/tools/get_my_planets.js +5 -4
- package/dist/tools/get_my_planets.js.map +1 -1
- package/dist/tools/get_native_token_balance.d.ts +6 -0
- package/dist/tools/get_native_token_balance.d.ts.map +1 -0
- package/dist/tools/get_native_token_balance.js +64 -0
- package/dist/tools/get_native_token_balance.js.map +1 -0
- package/dist/tools/get_pending_exits.d.ts +2 -1
- package/dist/tools/get_pending_exits.d.ts.map +1 -1
- package/dist/tools/get_pending_exits.js +5 -4
- package/dist/tools/get_pending_exits.js.map +1 -1
- package/dist/tools/get_pending_fleets.d.ts +2 -1
- package/dist/tools/get_pending_fleets.d.ts.map +1 -1
- package/dist/tools/get_pending_fleets.js +5 -4
- package/dist/tools/get_pending_fleets.js.map +1 -1
- package/dist/tools/get_planets_around.d.ts +8 -4
- package/dist/tools/get_planets_around.d.ts.map +1 -1
- package/dist/tools/get_planets_around.js +40 -15
- package/dist/tools/get_planets_around.js.map +1 -1
- package/dist/tools/get_play_token_balance.d.ts +6 -0
- package/dist/tools/get_play_token_balance.d.ts.map +1 -0
- package/dist/tools/get_play_token_balance.js +80 -0
- package/dist/tools/get_play_token_balance.js.map +1 -0
- package/dist/tools/index.d.ts +7 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +7 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/missiv_get_user.d.ts +6 -0
- package/dist/tools/missiv_get_user.d.ts.map +1 -0
- package/dist/tools/missiv_get_user.js +50 -0
- package/dist/tools/missiv_get_user.js.map +1 -0
- package/dist/tools/missiv_register.d.ts +6 -0
- package/dist/tools/missiv_register.d.ts.map +1 -0
- package/dist/tools/missiv_register.js +103 -0
- package/dist/tools/missiv_register.js.map +1 -0
- package/dist/tools/resolve_fleet.d.ts +3 -2
- package/dist/tools/resolve_fleet.d.ts.map +1 -1
- package/dist/tools/resolve_fleet.js +5 -4
- package/dist/tools/resolve_fleet.js.map +1 -1
- package/dist/tools/send_fleet.d.ts +3 -2
- package/dist/tools/send_fleet.d.ts.map +1 -1
- package/dist/tools/send_fleet.js +16 -15
- package/dist/tools/send_fleet.js.map +1 -1
- package/dist/tools/simulate.d.ts +14 -0
- package/dist/tools/simulate.d.ts.map +1 -0
- package/dist/tools/simulate.js +123 -0
- package/dist/tools/simulate.js.map +1 -0
- package/dist/tools/simulate_multiple.d.ts +17 -0
- package/dist/tools/simulate_multiple.d.ts.map +1 -0
- package/dist/tools/simulate_multiple.js +166 -0
- package/dist/tools/simulate_multiple.js.map +1 -0
- package/dist/tools/verify_exit_status.d.ts +5 -3
- package/dist/tools/verify_exit_status.d.ts.map +1 -1
- package/dist/tools/verify_exit_status.js +12 -8
- package/dist/tools/verify_exit_status.js.map +1 -1
- package/dist/tools/withdraw.d.ts +9 -0
- package/dist/tools/withdraw.d.ts.map +1 -0
- package/dist/tools/withdraw.js +86 -0
- package/dist/tools/withdraw.js.map +1 -0
- package/dist/types.d.ts +31 -28
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -33
- package/dist/types.js.map +1 -1
- package/dist/util/time.d.ts +0 -30
- package/dist/util/time.d.ts.map +1 -1
- package/dist/util/time.js +0 -36
- package/dist/util/time.js.map +1 -1
- package/package.json +80 -77
- package/src/cli.ts +88 -59
- package/src/contracts/space-info.ts +24 -1
- package/src/fleet/resolve.ts +5 -4
- package/src/fleet/send.ts +9 -8
- package/src/index.ts +28 -162
- package/src/mcp.ts +46 -0
- package/src/planet/acquire.ts +6 -6
- package/src/planet/exit.ts +1 -0
- package/src/planet/manager.ts +163 -0
- package/src/planet/withdraw.ts +33 -0
- package/src/storage/interface.ts +7 -0
- package/src/storage/json-storage.ts +11 -1
- package/src/tool-handling/cli.ts +559 -0
- package/src/tool-handling/index.ts +45 -0
- package/src/tool-handling/mcp.ts +127 -0
- package/src/tool-handling/types.ts +86 -0
- package/src/tools/acquire_planets.ts +34 -60
- package/src/tools/exit_planets.ts +25 -12
- package/src/tools/get_native_token_balance.ts +72 -0
- package/src/tools/get_pending_exits.ts +8 -5
- package/src/tools/get_pending_fleets.ts +8 -5
- package/src/tools/get_planets_around.ts +45 -16
- package/src/tools/get_play_token_balance.ts +90 -0
- package/src/tools/index.ts +7 -1
- package/src/tools/missiv_get_user.ts +68 -0
- package/src/tools/missiv_register.ts +122 -0
- package/src/tools/resolve_fleet.ts +8 -5
- package/src/tools/send_fleet.ts +21 -18
- package/src/tools/simulate.ts +141 -0
- package/src/tools/simulate_multiple.ts +197 -0
- package/src/tools/verify_exit_status.ts +15 -11
- package/src/tools/withdraw.ts +100 -0
- package/src/types.ts +33 -71
- package/src/util/time.ts +0 -46
- package/src/cli-tool-generator.ts +0 -287
- package/src/helpers/index.ts +0 -59
- package/src/tools/get_my_planets.ts +0 -30
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { createToolEnvironmentFromFactory } from './index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Unwrap Zod wrappers (Optional, Default) to get the inner type
|
|
5
|
+
* (Defined early as it's used by other functions)
|
|
6
|
+
*/
|
|
7
|
+
function unwrapZodType(field) {
|
|
8
|
+
if (field instanceof z.ZodOptional) {
|
|
9
|
+
return unwrapZodType(field.unwrap());
|
|
10
|
+
}
|
|
11
|
+
if (field instanceof z.ZodDefault) {
|
|
12
|
+
return unwrapZodType(field._def.innerType);
|
|
13
|
+
}
|
|
14
|
+
return field;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Check if a Zod object schema represents a coordinate type (has only x, y and optionally z number fields)
|
|
18
|
+
*/
|
|
19
|
+
function isCoordinateSchema(field) {
|
|
20
|
+
if (!(field instanceof z.ZodObject)) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
const shape = field.shape;
|
|
24
|
+
const keys = Object.keys(shape);
|
|
25
|
+
// Check for 2D coordinates (x, y)
|
|
26
|
+
if (keys.length === 2 && keys.includes('x') && keys.includes('y')) {
|
|
27
|
+
const xField = unwrapZodType(shape.x);
|
|
28
|
+
const yField = unwrapZodType(shape.y);
|
|
29
|
+
if (xField instanceof z.ZodNumber && yField instanceof z.ZodNumber) {
|
|
30
|
+
return { type: '2d' };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Check for 3D coordinates (x, y, z)
|
|
34
|
+
if (keys.length === 3 && keys.includes('x') && keys.includes('y') && keys.includes('z')) {
|
|
35
|
+
const xField = unwrapZodType(shape.x);
|
|
36
|
+
const yField = unwrapZodType(shape.y);
|
|
37
|
+
const zField = unwrapZodType(shape.z);
|
|
38
|
+
if (xField instanceof z.ZodNumber &&
|
|
39
|
+
yField instanceof z.ZodNumber &&
|
|
40
|
+
zField instanceof z.ZodNumber) {
|
|
41
|
+
return { type: '3d' };
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check if a Zod schema represents an array of coordinate objects
|
|
48
|
+
* Returns the coordinate type if it's a coordinate array, null otherwise
|
|
49
|
+
*/
|
|
50
|
+
function isCoordinateArraySchema(field) {
|
|
51
|
+
if (!(field instanceof z.ZodArray)) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
// Check if the array element is a coordinate object
|
|
55
|
+
const elementType = unwrapZodType(field.element);
|
|
56
|
+
return isCoordinateSchema(elementType);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Convert camelCase to kebab-case for CLI option names
|
|
60
|
+
*/
|
|
61
|
+
function camelToKebabCase(str) {
|
|
62
|
+
return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Convert Zod schema field to commander.js option definition
|
|
66
|
+
*/
|
|
67
|
+
function zodFieldToOption(name, field) {
|
|
68
|
+
const kebabName = camelToKebabCase(name);
|
|
69
|
+
// Handle boolean flags - no value required
|
|
70
|
+
if (field instanceof z.ZodBoolean) {
|
|
71
|
+
return `--${kebabName}`;
|
|
72
|
+
}
|
|
73
|
+
// Handle coordinate array - use single comma-separated string format
|
|
74
|
+
const coordArrayInfo = isCoordinateArraySchema(field);
|
|
75
|
+
if (coordArrayInfo) {
|
|
76
|
+
// Single string value containing all coordinates as comma-separated values
|
|
77
|
+
// e.g., "2,5,-3,4" for 2D or "2,5,1,-3,4,2" for 3D
|
|
78
|
+
return `--${kebabName} <coords>`;
|
|
79
|
+
}
|
|
80
|
+
// Handle single coordinate objects - use <x,y> or <x,y,z> format
|
|
81
|
+
const coordInfo = isCoordinateSchema(field);
|
|
82
|
+
if (coordInfo) {
|
|
83
|
+
if (coordInfo.type === '3d') {
|
|
84
|
+
return `--${kebabName} <x,y,z>`;
|
|
85
|
+
}
|
|
86
|
+
return `--${kebabName} <x,y>`;
|
|
87
|
+
}
|
|
88
|
+
// All other types use <value> to accept explicit values
|
|
89
|
+
return `--${kebabName} <value>`;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Check if a ZodUnion contains a number type
|
|
93
|
+
*/
|
|
94
|
+
function unionContainsNumber(field) {
|
|
95
|
+
for (const option of field.options) {
|
|
96
|
+
if (option instanceof z.ZodNumber) {
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Parse coordinate string (e.g., "10,20" or "10,20,30") into an object
|
|
104
|
+
*/
|
|
105
|
+
function parseCoordinateString(value, type) {
|
|
106
|
+
const parts = value.split(',').map((v) => v.trim());
|
|
107
|
+
if (type === '2d' && parts.length === 2) {
|
|
108
|
+
const x = Number(parts[0]);
|
|
109
|
+
const y = Number(parts[1]);
|
|
110
|
+
if (!isNaN(x) && !isNaN(y)) {
|
|
111
|
+
return { x, y };
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else if (type === '3d' && parts.length === 3) {
|
|
115
|
+
const x = Number(parts[0]);
|
|
116
|
+
const y = Number(parts[1]);
|
|
117
|
+
const z = Number(parts[2]);
|
|
118
|
+
if (!isNaN(x) && !isNaN(y) && !isNaN(z)) {
|
|
119
|
+
return { x, y, z };
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Parse coordinate array string into an array of coordinate objects.
|
|
126
|
+
* Supports multiple formats:
|
|
127
|
+
* - All commas: "2,5,-3,4" or "2,5,1,-3,4,2"
|
|
128
|
+
* - Space-separated tuples: "2,5 -3,4" or "2,5,1 -3,4,2"
|
|
129
|
+
* - Mixed with comma and space: "2,5, -3,4" or "2,5,-3,4, 1,2"
|
|
130
|
+
*/
|
|
131
|
+
function parseCoordinateArrayString(value, type) {
|
|
132
|
+
const coordinatesPerPoint = type === '3d' ? 3 : 2;
|
|
133
|
+
const result = [];
|
|
134
|
+
// First, try to split by space to get potential tuples
|
|
135
|
+
// This handles formats like "2,5 -3,4" or "2,5, -3,4"
|
|
136
|
+
const spaceParts = value.trim().split(/\s+/);
|
|
137
|
+
// Collect all numeric values
|
|
138
|
+
const allValues = [];
|
|
139
|
+
for (const part of spaceParts) {
|
|
140
|
+
// Each part could be a single tuple like "2,5" or "-3,4" or just a number
|
|
141
|
+
// Split by comma and collect all values
|
|
142
|
+
const commaParts = part
|
|
143
|
+
.split(',')
|
|
144
|
+
.map((v) => v.trim())
|
|
145
|
+
.filter((v) => v !== '');
|
|
146
|
+
for (const commaPart of commaParts) {
|
|
147
|
+
const num = Number(commaPart);
|
|
148
|
+
if (isNaN(num)) {
|
|
149
|
+
throw new Error(`Invalid coordinate value: "${commaPart}" is not a number`);
|
|
150
|
+
}
|
|
151
|
+
allValues.push(num);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (allValues.length % coordinatesPerPoint !== 0) {
|
|
155
|
+
throw new Error(`Invalid coordinate count: expected multiple of ${coordinatesPerPoint} values, got ${allValues.length}`);
|
|
156
|
+
}
|
|
157
|
+
for (let i = 0; i < allValues.length; i += coordinatesPerPoint) {
|
|
158
|
+
const x = allValues[i];
|
|
159
|
+
const y = allValues[i + 1];
|
|
160
|
+
if (type === '3d') {
|
|
161
|
+
const z = allValues[i + 2];
|
|
162
|
+
result.push({ x, y, z });
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
result.push({ x, y });
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return result;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Split a string by comma, respecting escaped commas (using backslash).
|
|
172
|
+
* Escaped commas (\,) are preserved as literal commas in the result.
|
|
173
|
+
* @param value - The string to split
|
|
174
|
+
* @returns An array of trimmed strings
|
|
175
|
+
*/
|
|
176
|
+
function splitByCommaWithEscaping(value) {
|
|
177
|
+
const items = [];
|
|
178
|
+
let current = '';
|
|
179
|
+
let i = 0;
|
|
180
|
+
while (i < value.length) {
|
|
181
|
+
// Check for escaped comma
|
|
182
|
+
if (value[i] === '\\' && i + 1 < value.length && value[i + 1] === ',') {
|
|
183
|
+
// Add literal comma to current item
|
|
184
|
+
current += ',';
|
|
185
|
+
i += 2; // Skip both backslash and comma
|
|
186
|
+
}
|
|
187
|
+
else if (value[i] === ',') {
|
|
188
|
+
// Unescaped comma - end of current item
|
|
189
|
+
items.push(current.trim());
|
|
190
|
+
current = '';
|
|
191
|
+
i++;
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
current += value[i];
|
|
195
|
+
i++;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Don't forget the last item
|
|
199
|
+
items.push(current.trim());
|
|
200
|
+
return items;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Parse option value based on Zod type
|
|
204
|
+
*/
|
|
205
|
+
function parseOptionValue(field, value) {
|
|
206
|
+
// Handle coordinate array - parse a single comma-separated string into array of coordinates
|
|
207
|
+
const coordArrayInfo = isCoordinateArraySchema(field);
|
|
208
|
+
if (coordArrayInfo) {
|
|
209
|
+
// Commander.js gives us a single string value
|
|
210
|
+
if (typeof value === 'string') {
|
|
211
|
+
return parseCoordinateArrayString(value, coordArrayInfo.type);
|
|
212
|
+
}
|
|
213
|
+
// Handle array case (if somehow passed as array)
|
|
214
|
+
if (Array.isArray(value)) {
|
|
215
|
+
// Join array elements and parse as comma-separated
|
|
216
|
+
const joined = value.join(',');
|
|
217
|
+
return parseCoordinateArrayString(joined, coordArrayInfo.type);
|
|
218
|
+
}
|
|
219
|
+
throw new Error(`Invalid coordinate format. Expected comma-separated string: e.g., "2,5,-3,4" for 2D or "2,5,1,-3,4,2" for 3D`);
|
|
220
|
+
}
|
|
221
|
+
// Handle single coordinate objects - parse "x,y" or "x,y,z" format
|
|
222
|
+
const coordInfo = isCoordinateSchema(field);
|
|
223
|
+
if (coordInfo && typeof value === 'string') {
|
|
224
|
+
const parsed = parseCoordinateString(value, coordInfo.type);
|
|
225
|
+
if (parsed) {
|
|
226
|
+
return parsed;
|
|
227
|
+
}
|
|
228
|
+
// If parsing fails, throw an error with helpful message
|
|
229
|
+
throw new Error(`Invalid coordinate format for value "${value}". Expected format: ${coordInfo.type === '3d' ? 'x,y,z' : 'x,y'}`);
|
|
230
|
+
}
|
|
231
|
+
// Handle array types - parse comma-separated values or JSON arrays
|
|
232
|
+
if (field instanceof z.ZodArray) {
|
|
233
|
+
if (typeof value === 'string') {
|
|
234
|
+
// Try to parse as JSON array first
|
|
235
|
+
const trimmedValue = value.trim();
|
|
236
|
+
if (trimmedValue.startsWith('[') && trimmedValue.endsWith(']')) {
|
|
237
|
+
try {
|
|
238
|
+
const parsed = JSON.parse(trimmedValue);
|
|
239
|
+
if (Array.isArray(parsed)) {
|
|
240
|
+
// Check if array element type is number and convert if needed
|
|
241
|
+
const elementType = field.element;
|
|
242
|
+
if (elementType instanceof z.ZodNumber) {
|
|
243
|
+
return parsed.map((v) => Number(v));
|
|
244
|
+
}
|
|
245
|
+
return parsed;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
// If JSON parsing fails, fall through to comma-separated parsing
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// Check if array element type is number
|
|
253
|
+
const elementType = field.element;
|
|
254
|
+
// Use escape-aware splitting for comma-separated values
|
|
255
|
+
const items = splitByCommaWithEscaping(value);
|
|
256
|
+
if (elementType instanceof z.ZodNumber) {
|
|
257
|
+
return items.map((v) => Number(v));
|
|
258
|
+
}
|
|
259
|
+
return items;
|
|
260
|
+
}
|
|
261
|
+
return value;
|
|
262
|
+
}
|
|
263
|
+
// Handle number types
|
|
264
|
+
if (field instanceof z.ZodNumber) {
|
|
265
|
+
return Number(value);
|
|
266
|
+
}
|
|
267
|
+
// Handle boolean types - support string "true"/"false"
|
|
268
|
+
if (field instanceof z.ZodBoolean) {
|
|
269
|
+
if (typeof value === 'string') {
|
|
270
|
+
return value.toLowerCase() === 'true';
|
|
271
|
+
}
|
|
272
|
+
return value === true;
|
|
273
|
+
}
|
|
274
|
+
// Handle union types - try to convert to number if the union includes a number type
|
|
275
|
+
if (field instanceof z.ZodUnion) {
|
|
276
|
+
if (unionContainsNumber(field)) {
|
|
277
|
+
// If the value looks like a number, convert it
|
|
278
|
+
const numValue = Number(value);
|
|
279
|
+
if (!isNaN(numValue) && typeof value === 'string' && /^\d+$/.test(value)) {
|
|
280
|
+
return numValue;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// Otherwise return as-is (likely a literal string like 'latest')
|
|
284
|
+
return value;
|
|
285
|
+
}
|
|
286
|
+
// Default to string
|
|
287
|
+
return value;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Extract description from Zod schema field
|
|
291
|
+
*/
|
|
292
|
+
function getFieldDescription(field) {
|
|
293
|
+
const description = field.description;
|
|
294
|
+
return description || 'No description available';
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Check if a Zod field is optional
|
|
298
|
+
*/
|
|
299
|
+
function isOptionalField(field) {
|
|
300
|
+
return field instanceof z.ZodOptional || field.isOptional?.();
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Check if schema is a ZodUnion of ZodObjects
|
|
304
|
+
*/
|
|
305
|
+
function isSchemaUnion(schema) {
|
|
306
|
+
return schema instanceof z.ZodUnion;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Extract all unique fields from a schema (handles both ZodObject and ZodUnion)
|
|
310
|
+
* For unions, collects all fields from all options
|
|
311
|
+
* Returns a map of fieldName -> {field, isOptional}
|
|
312
|
+
*/
|
|
313
|
+
function extractSchemaFields(schema) {
|
|
314
|
+
const fields = new Map();
|
|
315
|
+
if (isSchemaUnion(schema)) {
|
|
316
|
+
// For unions, collect all fields from all options
|
|
317
|
+
// A field is required only if it's required in ALL options
|
|
318
|
+
const allOptions = schema.options;
|
|
319
|
+
// First pass: collect all unique field names
|
|
320
|
+
const allFieldNames = new Set();
|
|
321
|
+
for (const option of allOptions) {
|
|
322
|
+
for (const fieldName of Object.keys(option.shape)) {
|
|
323
|
+
allFieldNames.add(fieldName);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// Second pass: for each field, determine if it's optional
|
|
327
|
+
// A field is required only if it exists and is required in ALL options
|
|
328
|
+
for (const fieldName of allFieldNames) {
|
|
329
|
+
let field;
|
|
330
|
+
let isOptionalInAnyOption = false;
|
|
331
|
+
let missingInSomeOption = false;
|
|
332
|
+
for (const option of allOptions) {
|
|
333
|
+
const optionField = option.shape[fieldName];
|
|
334
|
+
if (optionField === undefined) {
|
|
335
|
+
missingInSomeOption = true;
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
field = optionField;
|
|
339
|
+
if (isOptionalField(optionField)) {
|
|
340
|
+
isOptionalInAnyOption = true;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
if (field) {
|
|
345
|
+
// Field is optional in CLI if it's optional in any option OR missing in some option
|
|
346
|
+
fields.set(fieldName, {
|
|
347
|
+
field,
|
|
348
|
+
isOptional: isOptionalInAnyOption || missingInSomeOption,
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
// Simple ZodObject - extract fields directly
|
|
355
|
+
const shape = schema.shape;
|
|
356
|
+
for (const [fieldName, field] of Object.entries(shape)) {
|
|
357
|
+
fields.set(fieldName, {
|
|
358
|
+
field: field,
|
|
359
|
+
isOptional: isOptionalField(field),
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
return fields;
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Parse and validate parameters against Zod schema
|
|
367
|
+
*/
|
|
368
|
+
async function parseAndValidateParams(schema, options) {
|
|
369
|
+
try {
|
|
370
|
+
return await schema.parseAsync(options);
|
|
371
|
+
}
|
|
372
|
+
catch (error) {
|
|
373
|
+
if (error instanceof z.ZodError) {
|
|
374
|
+
console.error('Parameter validation error:');
|
|
375
|
+
for (const err of error.issues) {
|
|
376
|
+
console.error(` - ${err.path.join('.')}: ${err.message}`);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
throw error;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Replacer function for JSON.stringify to handle BigInt values
|
|
384
|
+
*/
|
|
385
|
+
function bigIntReplacer(_key, value) {
|
|
386
|
+
if (typeof value === 'bigint') {
|
|
387
|
+
return value.toString();
|
|
388
|
+
}
|
|
389
|
+
return value;
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Format tool result for CLI output
|
|
393
|
+
*/
|
|
394
|
+
function formatToolCLIResult(result) {
|
|
395
|
+
if (result.success) {
|
|
396
|
+
console.log(JSON.stringify(result.result, bigIntReplacer, 2));
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
console.error(JSON.stringify({ error: result.error, stack: result.stack }, bigIntReplacer, 2));
|
|
400
|
+
process.exit(1);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Generate a single tool command from tool definition
|
|
405
|
+
* @template TEnv - Environment type passed to tools
|
|
406
|
+
*/
|
|
407
|
+
export function generateToolCommand(program, toolName, tool, envFactory) {
|
|
408
|
+
// Extract fields from schema (handles both ZodObject and ZodUnion)
|
|
409
|
+
const schemaFields = extractSchemaFields(tool.schema);
|
|
410
|
+
// Create the command
|
|
411
|
+
const cmd = program.command(toolName).description(tool.description);
|
|
412
|
+
// Add options for each schema field
|
|
413
|
+
for (const [fieldName, { field, isOptional }] of schemaFields) {
|
|
414
|
+
// Unwrap optional/default wrappers to get the actual type
|
|
415
|
+
const actualField = unwrapZodType(field);
|
|
416
|
+
const optionDef = zodFieldToOption(fieldName, actualField);
|
|
417
|
+
const description = getFieldDescription(actualField);
|
|
418
|
+
// Add the option
|
|
419
|
+
if (isOptional) {
|
|
420
|
+
cmd.option(optionDef, description);
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
cmd.requiredOption(optionDef, description);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
cmd.action(async (options) => {
|
|
427
|
+
try {
|
|
428
|
+
// Parse and validate parameters against schema
|
|
429
|
+
const params = {};
|
|
430
|
+
for (const [fieldName, { field }] of schemaFields) {
|
|
431
|
+
// Unwrap optional/default wrappers to get the actual type for parsing
|
|
432
|
+
const actualField = unwrapZodType(field);
|
|
433
|
+
const value = options[fieldName];
|
|
434
|
+
if (value !== undefined) {
|
|
435
|
+
params[fieldName] = parseOptionValue(actualField, value);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
// Validate against schema
|
|
439
|
+
const validatedParams = await parseAndValidateParams(tool.schema, params);
|
|
440
|
+
// Create environment and execute
|
|
441
|
+
const env = await createToolEnvironmentFromFactory(envFactory);
|
|
442
|
+
const result = await tool.execute(env, validatedParams);
|
|
443
|
+
formatToolCLIResult(result);
|
|
444
|
+
}
|
|
445
|
+
catch (error) {
|
|
446
|
+
if (error instanceof Error) {
|
|
447
|
+
console.error('Error:', error.message);
|
|
448
|
+
if (error.stack) {
|
|
449
|
+
console.error('Stack:', error.stack);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
else {
|
|
453
|
+
console.error('Error:', String(error));
|
|
454
|
+
}
|
|
455
|
+
process.exit(1);
|
|
456
|
+
}
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Register all tool commands from a tools object
|
|
461
|
+
* @template TEnv - Environment type passed to tools
|
|
462
|
+
*/
|
|
463
|
+
export function registerAllToolCommands(program, tools, envFactory) {
|
|
464
|
+
for (const [toolName, tool] of Object.entries(tools)) {
|
|
465
|
+
// Skip the file that's not a tool
|
|
466
|
+
if (toolName === 'default')
|
|
467
|
+
continue;
|
|
468
|
+
// Keep snake_case for CLI command names (1:1 mapping with tool names)
|
|
469
|
+
generateToolCommand(program, toolName, tool, envFactory);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/tool-handling/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { EnvFactory } from './cli.js';
|
|
2
|
+
import type { ToolEnvironment } from './types.js';
|
|
3
|
+
export declare function stringifyWithBigInt(obj: any, space?: number): string;
|
|
4
|
+
/**
|
|
5
|
+
* Create tool environment with sendStatus
|
|
6
|
+
* @template TEnv - Environment properties type
|
|
7
|
+
* @param env - Environment properties to spread into the tool environment
|
|
8
|
+
*/
|
|
9
|
+
export declare function createToolEnvironment<TEnv extends Record<string, any>>(env: TEnv): ToolEnvironment<TEnv>;
|
|
10
|
+
/**
|
|
11
|
+
* Create a CLI tool environment for executing tools
|
|
12
|
+
* @template TEnv - Environment type passed to tools
|
|
13
|
+
*/
|
|
14
|
+
export declare function createToolEnvironmentFromFactory<TEnv extends Record<string, any>>(envFactory: EnvFactory<TEnv>): Promise<ToolEnvironment<TEnv>>;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tool-handling/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAGhD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAMpE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACrE,GAAG,EAAE,IAAI,GACP,eAAe,CAAC,IAAI,CAAC,CAQvB;AAED;;;GAGG;AACH,wBAAsB,gCAAgC,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtF,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,GAC1B,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAShC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Helper function to handle BigInt serialization in JSON.stringify
|
|
2
|
+
export function stringifyWithBigInt(obj, space) {
|
|
3
|
+
return JSON.stringify(obj, (_key, value) => (typeof value === 'bigint' ? value.toString() : value), space);
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Create tool environment with sendStatus
|
|
7
|
+
* @template TEnv - Environment properties type
|
|
8
|
+
* @param env - Environment properties to spread into the tool environment
|
|
9
|
+
*/
|
|
10
|
+
export function createToolEnvironment(env) {
|
|
11
|
+
return {
|
|
12
|
+
sendStatus: async (_message) => {
|
|
13
|
+
// TODO: Implement progress notifications when sessionId is available
|
|
14
|
+
// For now, this is a no-op since we don't have sessionId in the current architecture
|
|
15
|
+
},
|
|
16
|
+
...env,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Create a CLI tool environment for executing tools
|
|
21
|
+
* @template TEnv - Environment type passed to tools
|
|
22
|
+
*/
|
|
23
|
+
export async function createToolEnvironmentFromFactory(envFactory) {
|
|
24
|
+
const env = await envFactory();
|
|
25
|
+
return {
|
|
26
|
+
sendStatus: async (message) => {
|
|
27
|
+
console.error(`[Status] ${message}`);
|
|
28
|
+
},
|
|
29
|
+
...env,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tool-handling/index.ts"],"names":[],"mappings":"AAGA,mEAAmE;AACnE,MAAM,UAAU,mBAAmB,CAAC,GAAQ,EAAE,KAAc;IAC3D,OAAO,IAAI,CAAC,SAAS,CACpB,GAAG,EACH,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EACvE,KAAK,CACL,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACpC,GAAS;IAET,OAAO;QACN,UAAU,EAAE,KAAK,EAAE,QAAgB,EAAE,EAAE;YACtC,qEAAqE;YACrE,qFAAqF;QACtF,CAAC;QACD,GAAG,GAAG;KACN,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACrD,UAA4B;IAE5B,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;IAE/B,OAAO;QACN,UAAU,EAAE,KAAK,EAAE,OAAe,EAAE,EAAE;YACrC,OAAO,CAAC,KAAK,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,GAAG,GAAG;KACN,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { Tool } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Register tool with MCP server
|
|
5
|
+
* @template TEnv - Environment properties type
|
|
6
|
+
*/
|
|
7
|
+
export declare function registerMCPTool<TEnv extends Record<string, any>>({ server, name, tool, env, }: {
|
|
8
|
+
server: McpServer;
|
|
9
|
+
name: string;
|
|
10
|
+
tool: Tool<any, TEnv>;
|
|
11
|
+
env: TEnv;
|
|
12
|
+
}): void;
|
|
13
|
+
/**
|
|
14
|
+
* Register all tool from a tools object
|
|
15
|
+
* @template TEnv - Environment type passed to tools
|
|
16
|
+
*/
|
|
17
|
+
export declare function registerAllMCPTools<TEnv extends Record<string, any>>({ server, tools, env, }: {
|
|
18
|
+
server: McpServer;
|
|
19
|
+
tools: Record<string, Tool<any, TEnv>>;
|
|
20
|
+
env: TEnv;
|
|
21
|
+
}): void;
|
|
22
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/tool-handling/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAClE,OAAO,EAAC,IAAI,EAA8B,MAAM,YAAY,CAAC;AAkE7D;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EACjE,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,GAAG,GACH,EAAE;IACF,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACtB,GAAG,EAAE,IAAI,CAAC;CACV,GAAG,IAAI,CAwBP;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EACrE,MAAM,EACN,KAAK,EACL,GAAG,GACH,EAAE;IACF,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IACvC,GAAG,EAAE,IAAI,CAAC;CACV,GAAG,IAAI,CAOP"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create tool environment with MCP logging support
|
|
3
|
+
* @template TEnv - Environment properties type
|
|
4
|
+
* @param server - MCP server instance for sending logging messages
|
|
5
|
+
* @param env - Environment properties to spread into the tool environment
|
|
6
|
+
* @param sessionId - Optional session ID for targeting specific client
|
|
7
|
+
*/
|
|
8
|
+
function createToolEnvironmentWithMCP(server, env, sessionId) {
|
|
9
|
+
return {
|
|
10
|
+
sendStatus: async (message) => {
|
|
11
|
+
try {
|
|
12
|
+
await server.sendLoggingMessage({
|
|
13
|
+
level: 'info',
|
|
14
|
+
data: message,
|
|
15
|
+
}, sessionId);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
// Silently ignore logging errors to not disrupt tool execution
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
...env,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Convert ToolResult to CallToolResult format
|
|
26
|
+
*/
|
|
27
|
+
function convertToCallToolResult(result) {
|
|
28
|
+
if (result.success === false) {
|
|
29
|
+
return {
|
|
30
|
+
content: [
|
|
31
|
+
{
|
|
32
|
+
type: 'text',
|
|
33
|
+
text: JSON.stringify({
|
|
34
|
+
error: result.error,
|
|
35
|
+
...(result.stack ? { stack: result.stack } : {}),
|
|
36
|
+
}),
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
isError: true,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
content: [
|
|
44
|
+
{
|
|
45
|
+
type: 'text',
|
|
46
|
+
text: JSON.stringify(result.result, (_key, value) => (typeof value === 'bigint' ? value.toString() : value), 2),
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Register tool with MCP server
|
|
53
|
+
* @template TEnv - Environment properties type
|
|
54
|
+
*/
|
|
55
|
+
export function registerMCPTool({ server, name, tool, env, }) {
|
|
56
|
+
server.registerTool(name, {
|
|
57
|
+
description: tool.description,
|
|
58
|
+
inputSchema: tool.schema,
|
|
59
|
+
}, async (params, mcpExtra) => {
|
|
60
|
+
// Create tool environment with proper MCP sendStatus
|
|
61
|
+
const toolEnv = createToolEnvironmentWithMCP(server, env, mcpExtra?.sessionId);
|
|
62
|
+
try {
|
|
63
|
+
const result = await tool.execute(toolEnv, params);
|
|
64
|
+
return convertToCallToolResult(result);
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
const errorResult = {
|
|
68
|
+
success: false,
|
|
69
|
+
error: error instanceof Error ? error.message : String(error),
|
|
70
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
71
|
+
};
|
|
72
|
+
return convertToCallToolResult(errorResult);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Register all tool from a tools object
|
|
78
|
+
* @template TEnv - Environment type passed to tools
|
|
79
|
+
*/
|
|
80
|
+
export function registerAllMCPTools({ server, tools, env, }) {
|
|
81
|
+
for (const [name, tool] of Object.entries(tools)) {
|
|
82
|
+
// Skip the file that's not a tool
|
|
83
|
+
if (name === 'default')
|
|
84
|
+
continue;
|
|
85
|
+
registerMCPTool({ server, name, tool, env });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/tool-handling/mcp.ts"],"names":[],"mappings":"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"}
|