@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.
Files changed (178) hide show
  1. package/README.md +20 -51
  2. package/dist/cli-tool-generator.d.ts +2 -1
  3. package/dist/cli-tool-generator.d.ts.map +1 -1
  4. package/dist/cli.js +61 -32
  5. package/dist/cli.js.map +1 -1
  6. package/dist/contracts/space-info.d.ts.map +1 -1
  7. package/dist/contracts/space-info.js +22 -1
  8. package/dist/contracts/space-info.js.map +1 -1
  9. package/dist/fleet/resolve.d.ts +1 -1
  10. package/dist/fleet/resolve.d.ts.map +1 -1
  11. package/dist/fleet/resolve.js +5 -4
  12. package/dist/fleet/resolve.js.map +1 -1
  13. package/dist/fleet/send.d.ts.map +1 -1
  14. package/dist/fleet/send.js +8 -8
  15. package/dist/fleet/send.js.map +1 -1
  16. package/dist/index.d.ts +6 -32
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +21 -128
  19. package/dist/index.js.map +1 -1
  20. package/dist/mcp.d.ts +14 -0
  21. package/dist/mcp.d.ts.map +1 -0
  22. package/dist/mcp.js +29 -0
  23. package/dist/mcp.js.map +1 -0
  24. package/dist/planet/acquire.d.ts +3 -2
  25. package/dist/planet/acquire.d.ts.map +1 -1
  26. package/dist/planet/acquire.js +6 -4
  27. package/dist/planet/acquire.js.map +1 -1
  28. package/dist/planet/exit.d.ts.map +1 -1
  29. package/dist/planet/exit.js +1 -0
  30. package/dist/planet/exit.js.map +1 -1
  31. package/dist/planet/manager.d.ts +63 -0
  32. package/dist/planet/manager.d.ts.map +1 -1
  33. package/dist/planet/manager.js +125 -2
  34. package/dist/planet/manager.js.map +1 -1
  35. package/dist/planet/withdraw.d.ts +17 -0
  36. package/dist/planet/withdraw.d.ts.map +1 -0
  37. package/dist/planet/withdraw.js +25 -0
  38. package/dist/planet/withdraw.js.map +1 -0
  39. package/dist/storage/interface.d.ts +6 -0
  40. package/dist/storage/interface.d.ts.map +1 -1
  41. package/dist/storage/json-storage.d.ts +1 -0
  42. package/dist/storage/json-storage.d.ts.map +1 -1
  43. package/dist/storage/json-storage.js +10 -1
  44. package/dist/storage/json-storage.js.map +1 -1
  45. package/dist/tool-handling/cli-tool-generator.d.ts +22 -0
  46. package/dist/tool-handling/cli-tool-generator.d.ts.map +1 -0
  47. package/dist/tool-handling/cli-tool-generator.js +345 -0
  48. package/dist/tool-handling/cli-tool-generator.js.map +1 -0
  49. package/dist/tool-handling/cli.d.ts +19 -0
  50. package/dist/tool-handling/cli.d.ts.map +1 -0
  51. package/dist/tool-handling/cli.js +472 -0
  52. package/dist/tool-handling/cli.js.map +1 -0
  53. package/dist/tool-handling/index.d.ts +15 -0
  54. package/dist/tool-handling/index.d.ts.map +1 -0
  55. package/dist/tool-handling/index.js +32 -0
  56. package/dist/tool-handling/index.js.map +1 -0
  57. package/dist/tool-handling/mcp.d.ts +22 -0
  58. package/dist/tool-handling/mcp.d.ts.map +1 -0
  59. package/dist/tool-handling/mcp.js +88 -0
  60. package/dist/tool-handling/mcp.js.map +1 -0
  61. package/dist/tool-handling/types.d.ts +72 -0
  62. package/dist/tool-handling/types.d.ts.map +1 -0
  63. package/dist/tool-handling/types.js +10 -0
  64. package/dist/tool-handling/types.js.map +1 -0
  65. package/dist/tools/acquire_planets.d.ts +7 -5
  66. package/dist/tools/acquire_planets.d.ts.map +1 -1
  67. package/dist/tools/acquire_planets.js +28 -42
  68. package/dist/tools/acquire_planets.js.map +1 -1
  69. package/dist/tools/exit_planets.d.ts +7 -3
  70. package/dist/tools/exit_planets.d.ts.map +1 -1
  71. package/dist/tools/exit_planets.js +20 -9
  72. package/dist/tools/exit_planets.js.map +1 -1
  73. package/dist/tools/get_my_planets.d.ts +3 -2
  74. package/dist/tools/get_my_planets.d.ts.map +1 -1
  75. package/dist/tools/get_my_planets.js +5 -4
  76. package/dist/tools/get_my_planets.js.map +1 -1
  77. package/dist/tools/get_native_token_balance.d.ts +6 -0
  78. package/dist/tools/get_native_token_balance.d.ts.map +1 -0
  79. package/dist/tools/get_native_token_balance.js +64 -0
  80. package/dist/tools/get_native_token_balance.js.map +1 -0
  81. package/dist/tools/get_pending_exits.d.ts +2 -1
  82. package/dist/tools/get_pending_exits.d.ts.map +1 -1
  83. package/dist/tools/get_pending_exits.js +5 -4
  84. package/dist/tools/get_pending_exits.js.map +1 -1
  85. package/dist/tools/get_pending_fleets.d.ts +2 -1
  86. package/dist/tools/get_pending_fleets.d.ts.map +1 -1
  87. package/dist/tools/get_pending_fleets.js +5 -4
  88. package/dist/tools/get_pending_fleets.js.map +1 -1
  89. package/dist/tools/get_planets_around.d.ts +8 -4
  90. package/dist/tools/get_planets_around.d.ts.map +1 -1
  91. package/dist/tools/get_planets_around.js +40 -15
  92. package/dist/tools/get_planets_around.js.map +1 -1
  93. package/dist/tools/get_play_token_balance.d.ts +6 -0
  94. package/dist/tools/get_play_token_balance.d.ts.map +1 -0
  95. package/dist/tools/get_play_token_balance.js +80 -0
  96. package/dist/tools/get_play_token_balance.js.map +1 -0
  97. package/dist/tools/index.d.ts +7 -1
  98. package/dist/tools/index.d.ts.map +1 -1
  99. package/dist/tools/index.js +7 -1
  100. package/dist/tools/index.js.map +1 -1
  101. package/dist/tools/missiv_get_user.d.ts +6 -0
  102. package/dist/tools/missiv_get_user.d.ts.map +1 -0
  103. package/dist/tools/missiv_get_user.js +50 -0
  104. package/dist/tools/missiv_get_user.js.map +1 -0
  105. package/dist/tools/missiv_register.d.ts +6 -0
  106. package/dist/tools/missiv_register.d.ts.map +1 -0
  107. package/dist/tools/missiv_register.js +103 -0
  108. package/dist/tools/missiv_register.js.map +1 -0
  109. package/dist/tools/resolve_fleet.d.ts +3 -2
  110. package/dist/tools/resolve_fleet.d.ts.map +1 -1
  111. package/dist/tools/resolve_fleet.js +5 -4
  112. package/dist/tools/resolve_fleet.js.map +1 -1
  113. package/dist/tools/send_fleet.d.ts +3 -2
  114. package/dist/tools/send_fleet.d.ts.map +1 -1
  115. package/dist/tools/send_fleet.js +16 -15
  116. package/dist/tools/send_fleet.js.map +1 -1
  117. package/dist/tools/simulate.d.ts +14 -0
  118. package/dist/tools/simulate.d.ts.map +1 -0
  119. package/dist/tools/simulate.js +123 -0
  120. package/dist/tools/simulate.js.map +1 -0
  121. package/dist/tools/simulate_multiple.d.ts +17 -0
  122. package/dist/tools/simulate_multiple.d.ts.map +1 -0
  123. package/dist/tools/simulate_multiple.js +166 -0
  124. package/dist/tools/simulate_multiple.js.map +1 -0
  125. package/dist/tools/verify_exit_status.d.ts +5 -3
  126. package/dist/tools/verify_exit_status.d.ts.map +1 -1
  127. package/dist/tools/verify_exit_status.js +12 -8
  128. package/dist/tools/verify_exit_status.js.map +1 -1
  129. package/dist/tools/withdraw.d.ts +9 -0
  130. package/dist/tools/withdraw.d.ts.map +1 -0
  131. package/dist/tools/withdraw.js +86 -0
  132. package/dist/tools/withdraw.js.map +1 -0
  133. package/dist/types.d.ts +31 -28
  134. package/dist/types.d.ts.map +1 -1
  135. package/dist/types.js +1 -33
  136. package/dist/types.js.map +1 -1
  137. package/dist/util/time.d.ts +0 -30
  138. package/dist/util/time.d.ts.map +1 -1
  139. package/dist/util/time.js +0 -36
  140. package/dist/util/time.js.map +1 -1
  141. package/package.json +80 -77
  142. package/src/cli.ts +88 -59
  143. package/src/contracts/space-info.ts +24 -1
  144. package/src/fleet/resolve.ts +5 -4
  145. package/src/fleet/send.ts +9 -8
  146. package/src/index.ts +28 -162
  147. package/src/mcp.ts +46 -0
  148. package/src/planet/acquire.ts +6 -6
  149. package/src/planet/exit.ts +1 -0
  150. package/src/planet/manager.ts +163 -0
  151. package/src/planet/withdraw.ts +33 -0
  152. package/src/storage/interface.ts +7 -0
  153. package/src/storage/json-storage.ts +11 -1
  154. package/src/tool-handling/cli.ts +559 -0
  155. package/src/tool-handling/index.ts +45 -0
  156. package/src/tool-handling/mcp.ts +127 -0
  157. package/src/tool-handling/types.ts +86 -0
  158. package/src/tools/acquire_planets.ts +34 -60
  159. package/src/tools/exit_planets.ts +25 -12
  160. package/src/tools/get_native_token_balance.ts +72 -0
  161. package/src/tools/get_pending_exits.ts +8 -5
  162. package/src/tools/get_pending_fleets.ts +8 -5
  163. package/src/tools/get_planets_around.ts +45 -16
  164. package/src/tools/get_play_token_balance.ts +90 -0
  165. package/src/tools/index.ts +7 -1
  166. package/src/tools/missiv_get_user.ts +68 -0
  167. package/src/tools/missiv_register.ts +122 -0
  168. package/src/tools/resolve_fleet.ts +8 -5
  169. package/src/tools/send_fleet.ts +21 -18
  170. package/src/tools/simulate.ts +141 -0
  171. package/src/tools/simulate_multiple.ts +197 -0
  172. package/src/tools/verify_exit_status.ts +15 -11
  173. package/src/tools/withdraw.ts +100 -0
  174. package/src/types.ts +33 -71
  175. package/src/util/time.ts +0 -46
  176. package/src/cli-tool-generator.ts +0 -287
  177. package/src/helpers/index.ts +0 -59
  178. 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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"}