@iyulab/mloop-mcp 0.11.3 → 0.13.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.
Files changed (150) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/README.md +28 -3
  3. package/build/executor.d.ts +27 -2
  4. package/build/executor.d.ts.map +1 -1
  5. package/build/executor.js +105 -20
  6. package/build/executor.js.map +1 -1
  7. package/build/index.js +10 -16
  8. package/build/index.js.map +1 -1
  9. package/build/package-info.js.map +1 -1
  10. package/build/server.d.ts +1 -1
  11. package/build/server.d.ts.map +1 -1
  12. package/build/server.js +40 -67
  13. package/build/server.js.map +1 -1
  14. package/build/tools/analyze.d.ts +2 -29
  15. package/build/tools/analyze.d.ts.map +1 -1
  16. package/build/tools/analyze.js +0 -28
  17. package/build/tools/analyze.js.map +1 -1
  18. package/build/tools/auto-train.d.ts +2 -27
  19. package/build/tools/auto-train.d.ts.map +1 -1
  20. package/build/tools/auto-train.js +6 -36
  21. package/build/tools/auto-train.js.map +1 -1
  22. package/build/tools/calibrate.d.ts +1 -36
  23. package/build/tools/calibrate.d.ts.map +1 -1
  24. package/build/tools/calibrate.js +0 -13
  25. package/build/tools/calibrate.js.map +1 -1
  26. package/build/tools/compare.d.ts +0 -22
  27. package/build/tools/compare.d.ts.map +1 -1
  28. package/build/tools/compare.js +1 -21
  29. package/build/tools/compare.js.map +1 -1
  30. package/build/tools/detect.d.ts +0 -26
  31. package/build/tools/detect.d.ts.map +1 -1
  32. package/build/tools/detect.js +0 -26
  33. package/build/tools/detect.js.map +1 -1
  34. package/build/tools/drift.d.ts +0 -22
  35. package/build/tools/drift.d.ts.map +1 -1
  36. package/build/tools/drift.js +0 -10
  37. package/build/tools/drift.js.map +1 -1
  38. package/build/tools/embed.d.ts +25 -0
  39. package/build/tools/embed.d.ts.map +1 -0
  40. package/build/tools/embed.js +49 -0
  41. package/build/tools/embed.js.map +1 -0
  42. package/build/tools/encoder.d.ts +27 -0
  43. package/build/tools/encoder.d.ts.map +1 -0
  44. package/build/tools/encoder.js +42 -0
  45. package/build/tools/encoder.js.map +1 -0
  46. package/build/tools/evaluate.d.ts +0 -34
  47. package/build/tools/evaluate.d.ts.map +1 -1
  48. package/build/tools/evaluate.js +18 -44
  49. package/build/tools/evaluate.js.map +1 -1
  50. package/build/tools/export-onnx.d.ts +0 -30
  51. package/build/tools/export-onnx.d.ts.map +1 -1
  52. package/build/tools/export-onnx.js +0 -12
  53. package/build/tools/export-onnx.js.map +1 -1
  54. package/build/tools/features-select.d.ts +0 -26
  55. package/build/tools/features-select.d.ts.map +1 -1
  56. package/build/tools/features-select.js +0 -26
  57. package/build/tools/features-select.js.map +1 -1
  58. package/build/tools/feedback.d.ts +1 -37
  59. package/build/tools/feedback.d.ts.map +1 -1
  60. package/build/tools/feedback.js +2 -38
  61. package/build/tools/feedback.js.map +1 -1
  62. package/build/tools/index.d.ts +3 -88
  63. package/build/tools/index.d.ts.map +1 -1
  64. package/build/tools/index.js +3 -36
  65. package/build/tools/index.js.map +1 -1
  66. package/build/tools/info.d.ts +0 -30
  67. package/build/tools/info.d.ts.map +1 -1
  68. package/build/tools/info.js +1 -32
  69. package/build/tools/info.js.map +1 -1
  70. package/build/tools/init.d.ts +0 -15
  71. package/build/tools/init.d.ts.map +1 -1
  72. package/build/tools/init.js +1 -16
  73. package/build/tools/init.js.map +1 -1
  74. package/build/tools/list.d.ts +0 -18
  75. package/build/tools/list.d.ts.map +1 -1
  76. package/build/tools/list.js +0 -18
  77. package/build/tools/list.js.map +1 -1
  78. package/build/tools/logs.d.ts +0 -18
  79. package/build/tools/logs.d.ts.map +1 -1
  80. package/build/tools/logs.js +1 -18
  81. package/build/tools/logs.js.map +1 -1
  82. package/build/tools/predict.d.ts +2 -37
  83. package/build/tools/predict.d.ts.map +1 -1
  84. package/build/tools/predict.js +1 -36
  85. package/build/tools/predict.js.map +1 -1
  86. package/build/tools/prep-plan.d.ts +0 -26
  87. package/build/tools/prep-plan.d.ts.map +1 -1
  88. package/build/tools/prep-plan.js +0 -26
  89. package/build/tools/prep-plan.js.map +1 -1
  90. package/build/tools/prep.d.ts +0 -26
  91. package/build/tools/prep.d.ts.map +1 -1
  92. package/build/tools/prep.js +0 -26
  93. package/build/tools/prep.js.map +1 -1
  94. package/build/tools/project-overview.d.ts +0 -14
  95. package/build/tools/project-overview.d.ts.map +1 -1
  96. package/build/tools/project-overview.js +4 -19
  97. package/build/tools/project-overview.js.map +1 -1
  98. package/build/tools/promote.d.ts +0 -34
  99. package/build/tools/promote.d.ts.map +1 -1
  100. package/build/tools/promote.js +0 -34
  101. package/build/tools/promote.js.map +1 -1
  102. package/build/tools/quick-start.d.ts +2 -28
  103. package/build/tools/quick-start.d.ts.map +1 -1
  104. package/build/tools/quick-start.js +7 -41
  105. package/build/tools/quick-start.js.map +1 -1
  106. package/build/tools/rollback.d.ts +0 -18
  107. package/build/tools/rollback.d.ts.map +1 -1
  108. package/build/tools/rollback.js +0 -9
  109. package/build/tools/rollback.js.map +1 -1
  110. package/build/tools/sample.d.ts +0 -39
  111. package/build/tools/sample.d.ts.map +1 -1
  112. package/build/tools/sample.js +3 -42
  113. package/build/tools/sample.js.map +1 -1
  114. package/build/tools/serve.d.ts +0 -18
  115. package/build/tools/serve.d.ts.map +1 -1
  116. package/build/tools/serve.js +49 -59
  117. package/build/tools/serve.js.map +1 -1
  118. package/build/tools/status.d.ts +0 -10
  119. package/build/tools/status.d.ts.map +1 -1
  120. package/build/tools/status.js +1 -11
  121. package/build/tools/status.js.map +1 -1
  122. package/build/tools/threshold.d.ts +0 -38
  123. package/build/tools/threshold.d.ts.map +1 -1
  124. package/build/tools/threshold.js +0 -14
  125. package/build/tools/threshold.js.map +1 -1
  126. package/build/tools/token.d.ts +27 -0
  127. package/build/tools/token.d.ts.map +1 -0
  128. package/build/tools/token.js +49 -0
  129. package/build/tools/token.js.map +1 -0
  130. package/build/tools/train.d.ts +2 -67
  131. package/build/tools/train.d.ts.map +1 -1
  132. package/build/tools/train.js +8 -77
  133. package/build/tools/train.js.map +1 -1
  134. package/build/tools/trigger.d.ts +0 -14
  135. package/build/tools/trigger.d.ts.map +1 -1
  136. package/build/tools/trigger.js +1 -15
  137. package/build/tools/trigger.js.map +1 -1
  138. package/build/tools/validate.d.ts +0 -10
  139. package/build/tools/validate.d.ts.map +1 -1
  140. package/build/tools/validate.js +1 -11
  141. package/build/tools/validate.js.map +1 -1
  142. package/build/training-run.d.ts +33 -0
  143. package/build/training-run.d.ts.map +1 -0
  144. package/build/training-run.js +107 -0
  145. package/build/training-run.js.map +1 -0
  146. package/build/utils/errors.d.ts +6 -0
  147. package/build/utils/errors.d.ts.map +1 -1
  148. package/build/utils/errors.js +22 -1
  149. package/build/utils/errors.js.map +1 -1
  150. package/package.json +6 -4
@@ -2,9 +2,8 @@
2
2
  * mloop_train tool - Train ML models with AutoML
3
3
  */
4
4
  import { z } from 'zod';
5
- import { executeMloop, buildArgsWithPositional } from '../executor.js';
6
- import { parseCliOutput } from '../utils/parser.js';
7
- import { formatError } from '../utils/errors.js';
5
+ import { buildArgsWithPositional } from '../executor.js';
6
+ import { runTraining } from '../training-run.js';
8
7
  export const trainSchema = z.object({
9
8
  projectPath: z.string().describe('Path to MLoop project directory'),
10
9
  dataFile: z.string().optional().describe('Training data file (default: datasets/train.csv)'),
@@ -15,7 +14,7 @@ export const trainSchema = z.object({
15
14
  time: z.number().positive().optional().describe('Training time in seconds'),
16
15
  metric: z.string().optional().describe('Optimization metric'),
17
16
  modelName: z.string().optional().describe('Model name (default: "default")'),
18
- balance: z.string().optional().describe('Class balancing strategy: "auto" (balance to 10:1), "none", or target ratio (e.g., "5" for 5:1)'),
17
+ balance: z.string().optional().describe('Class balancing strategy for classification (image classification included — it oversamples its training split): "auto" (balance to 10:1), "none", or target ratio (e.g., "5" for 5:1)'),
19
18
  testSplit: z.number().min(0).max(1).optional().describe('Test data split ratio (0.0-1.0, default: 0.2)'),
20
19
  noPromote: z.boolean().optional().describe('Skip automatic promotion to production'),
21
20
  dropMissingLabels: z.boolean().optional().describe('Drop rows with missing label values before training'),
@@ -23,7 +22,7 @@ export const trainSchema = z.object({
23
22
  additionalDataFiles: z.array(z.string()).optional().describe('Files merged after dataFile (e.g. a retraining set from mloop_sample create); a file without the weight column counts its rows 1'),
24
23
  portable: z.boolean().optional().describe('Train only with steps ONNX can express, so mloop_export_onnx can export the model'),
25
24
  });
26
- export async function train(params) {
25
+ export async function train(params, ctx) {
27
26
  try {
28
27
  const { projectPath, dataFile, label, ...options } = params;
29
28
  // Build positional arguments
@@ -59,15 +58,11 @@ export async function train(params) {
59
58
  const args = buildArgsWithPositional('train', positional, cliParams);
60
59
  if (more.length > 0)
61
60
  args.push('--data', dataFile ?? 'datasets/train.csv', ...more);
62
- const result = await executeMloop(args, {
63
- cwd: projectPath,
64
- timeout: 600_000, // 10 minutes for training
65
- });
66
- const output = parseCliOutput(result.stdout);
61
+ const outcome = await runTraining(args, projectPath, options.time, ctx);
67
62
  return {
68
63
  content: [{
69
64
  type: 'text',
70
- text: output || 'Training completed successfully.',
65
+ text: JSON.stringify(outcome, null, 2),
71
66
  }],
72
67
  };
73
68
  }
@@ -75,7 +70,7 @@ export async function train(params) {
75
70
  return {
76
71
  content: [{
77
72
  type: 'text',
78
- text: formatError(error),
73
+ text: error instanceof Error ? error.message : String(error),
79
74
  }],
80
75
  isError: true,
81
76
  };
@@ -83,71 +78,7 @@ export async function train(params) {
83
78
  }
84
79
  export const trainTool = {
85
80
  name: 'mloop_train',
86
- description: 'Train an ML model using AutoML. Runs mloop train command with specified parameters.',
87
- inputSchema: {
88
- type: 'object',
89
- properties: {
90
- projectPath: {
91
- type: 'string',
92
- description: 'Path to MLoop project directory',
93
- },
94
- dataFile: {
95
- type: 'string',
96
- description: 'Training data file path (default: datasets/train.csv)',
97
- },
98
- label: {
99
- type: 'string',
100
- description: 'Label column name for training',
101
- },
102
- task: {
103
- type: 'string',
104
- enum: ['binary-classification', 'multiclass-classification', 'regression'],
105
- description: 'ML task type',
106
- },
107
- time: {
108
- type: 'number',
109
- description: 'Training time limit in seconds',
110
- },
111
- metric: {
112
- type: 'string',
113
- description: 'Optimization metric (e.g., Accuracy, F1Score, RSquared)',
114
- },
115
- modelName: {
116
- type: 'string',
117
- description: 'Model name for namespacing (default: "default")',
118
- },
119
- balance: {
120
- type: 'string',
121
- description: 'Class balancing strategy for imbalanced datasets: "auto" (balance to 10:1 if needed), "none" (no balancing), or a number like "5" for 5:1 target ratio',
122
- },
123
- testSplit: {
124
- type: 'number',
125
- description: 'Test data split ratio (0.0-1.0, default: 0.2)',
126
- },
127
- noPromote: {
128
- type: 'boolean',
129
- description: 'Skip automatic promotion to production after training',
130
- },
131
- dropMissingLabels: {
132
- type: 'boolean',
133
- description: 'Drop rows with missing label values before training',
134
- },
135
- weight: {
136
- type: 'string',
137
- description: 'Column whose values weight the rows — the relative frequency each row should have (1/π for a row sampled with probability π, lower for a less reliable label source). Never used as a feature; the test metrics are weighted too. Binary, multiclass and regression; refused with --balance, on the label, or on another task',
138
- },
139
- additionalDataFiles: {
140
- type: 'array',
141
- items: { type: 'string' },
142
- description: 'Files merged after dataFile (e.g. a retraining set from mloop_sample create); a file without the weight column counts its rows 1',
143
- },
144
- portable: {
145
- type: 'boolean',
146
- description: 'Train only with steps an ONNX runtime computes exactly (text columns as character n-gram counts), so mloop_export_onnx can export the model. Binary, multiclass and regression',
147
- },
148
- },
149
- required: ['projectPath'],
150
- },
81
+ description: 'Train an ML model using AutoML. Runs mloop train command with specified parameters. Answers the run\'s result (experiment id, trainer, metrics, promotion) and warnings as JSON; reports progress per trial when the call carries a progress token; cancelling the call stops the run. Without time, the run sizes its own budget from the data.',
151
82
  handler: train,
152
83
  };
153
84
  //# sourceMappingURL=train.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"train.js","sourceRoot":"","sources":["../../src/tools/train.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"train.js","sourceRoot":"","sources":["../../src/tools/train.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACnE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IAC5F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC1D,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,uBAAuB,EAAE,2BAA2B,EAAE,YAAY,CAAC,CAAC;SAC/E,QAAQ,EAAE;SACV,QAAQ,CAAC,cAAc,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC3E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC7D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAC5E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wLAAwL,CAAC;IACjO,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IACxG,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IACpF,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;IACzG,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;IACrH,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC1D,kIAAkI,CAAC;IACrI,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mFAAmF,CAAC;CAC/H,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,MAAmB,EAAE,GAAmB;IAClE,IAAI,CAAC;QACH,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC;QAE5D,6BAA6B;QAC7B,kGAAkG;QAClG,MAAM,IAAI,GAAG,OAAO,CAAC,mBAAmB,IAAI,EAAE,CAAC;QAC/C,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE7D,8BAA8B;QAC9B,MAAM,SAAS,GAA4B,EAAE,CAAC;QAC9C,IAAI,KAAK;YAAE,SAAS,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QACtC,IAAI,OAAO,CAAC,IAAI;YAAE,SAAS,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;QACnD,IAAI,OAAO,CAAC,IAAI;YAAE,SAAS,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;QACnD,IAAI,OAAO,CAAC,MAAM;YAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QACzD,IAAI,OAAO,CAAC,SAAS;YAAE,SAAS,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;QAC7D,IAAI,OAAO,CAAC,OAAO;YAAE,SAAS,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;QAC5D,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;YAAE,SAAS,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;QACjF,IAAI,OAAO,CAAC,SAAS;YAAE,SAAS,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;QACtD,IAAI,OAAO,CAAC,iBAAiB;YAAE,SAAS,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC;QACvE,IAAI,OAAO,CAAC,MAAM;YAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QACzD,IAAI,OAAO,CAAC,QAAQ;YAAE,SAAS,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QAEnD,MAAM,IAAI,GAAG,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QACrE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,IAAI,oBAAoB,EAAE,GAAG,IAAI,CAAC,CAAC;QAEpF,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAExE,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;iBACvC,CAAC;SACH,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC7D,CAAC;YACF,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,kVAAkV;IAC/V,OAAO,EAAE,KAAK;CACf,CAAC"}
@@ -17,20 +17,6 @@ export declare function trigger(params: TriggerParams): Promise<{
17
17
  export declare const triggerTool: {
18
18
  name: string;
19
19
  description: string;
20
- inputSchema: {
21
- type: string;
22
- properties: {
23
- projectPath: {
24
- type: string;
25
- description: string;
26
- };
27
- modelName: {
28
- type: string;
29
- description: string;
30
- };
31
- };
32
- required: string[];
33
- };
34
20
  handler: typeof trigger;
35
21
  };
36
22
  //# sourceMappingURL=trigger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"trigger.d.ts","sourceRoot":"","sources":["../../src/tools/trigger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,aAAa;;;iBAGxB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,wBAAsB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAyBnI;AAED,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;CAkBvB,CAAC"}
1
+ {"version":3,"file":"trigger.d.ts","sourceRoot":"","sources":["../../src/tools/trigger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,aAAa;;;iBAGxB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,wBAAsB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAyBnI;AAED,eAAO,MAAM,WAAW;IACtB,IAAI;IACJ,WAAW;IACX,OAAO;CACR,CAAC"}
@@ -37,21 +37,7 @@ export async function trigger(params) {
37
37
  }
38
38
  export const triggerTool = {
39
39
  name: 'mloop_trigger',
40
- description: 'Check whether retraining is due, as JSON: each default condition — feedback accuracy, feedback volume, time since training and input drift (PSI of the production model\'s logged inputs against its training data, met at 0.25) — with its threshold, current value, whether it is met and why; the drift condition carries every column\'s PSI under drift. A condition that could not be measured says so in details.',
41
- inputSchema: {
42
- type: 'object',
43
- properties: {
44
- projectPath: {
45
- type: 'string',
46
- description: 'Path to MLoop project directory',
47
- },
48
- modelName: {
49
- type: 'string',
50
- description: 'Model name (default: "default")',
51
- },
52
- },
53
- required: ['projectPath'],
54
- },
40
+ description: 'Check whether retraining is due, as JSON: each default condition — feedback accuracy (the production experiment\'s own answers, met once the drop is established: at least 30 rows of feedback and the 95% interval\'s upper end below the threshold), feedback volume, time since training and input drift (PSI of the production model\'s logged inputs against its training data, met at 0.25) — with its threshold, current value, whether it is met and why; the drift condition carries every column\'s PSI under drift. A condition that could not be measured says so in details.',
55
41
  handler: trigger,
56
42
  };
57
43
  //# sourceMappingURL=trigger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"trigger.js","sourceRoot":"","sources":["../../src/tools/trigger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACnE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAC7E,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAqB;IACjD,IAAI,CAAC;QACH,MAAM,SAAS,GAA4B,EAAE,CAAC;QAC9C,IAAI,MAAM,CAAC,SAAS;YAAE,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;QAC3D,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QAEzB,MAAM,IAAI,GAAG,uBAAuB,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE7C,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM,IAAI,mCAAmC;iBACpD,CAAC;SACH,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC;iBACzB,CAAC;YACF,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,0ZAA0Z;IACva,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iCAAiC;aAC/C;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iCAAiC;aAC/C;SACF;QACD,QAAQ,EAAE,CAAC,aAAa,CAAC;KAC1B;IACD,OAAO,EAAE,OAAO;CACjB,CAAC"}
1
+ {"version":3,"file":"trigger.js","sourceRoot":"","sources":["../../src/tools/trigger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACnE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAC7E,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAqB;IACjD,IAAI,CAAC;QACH,MAAM,SAAS,GAA4B,EAAE,CAAC;QAC9C,IAAI,MAAM,CAAC,SAAS;YAAE,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;QAC3D,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QAEzB,MAAM,IAAI,GAAG,uBAAuB,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE7C,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM,IAAI,mCAAmC;iBACpD,CAAC;SACH,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC;iBACzB,CAAC;YACF,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,2jBAA2jB;IACxkB,OAAO,EAAE,OAAO;CACjB,CAAC"}
@@ -16,16 +16,6 @@ export declare function validate(params: ValidateParams): Promise<{
16
16
  export declare const validateTool: {
17
17
  name: string;
18
18
  description: string;
19
- inputSchema: {
20
- type: string;
21
- properties: {
22
- projectPath: {
23
- type: string;
24
- description: string;
25
- };
26
- };
27
- required: string[];
28
- };
29
19
  handler: typeof validate;
30
20
  };
31
21
  //# sourceMappingURL=validate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/tools/validate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,cAAc;;iBAEzB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D,wBAAsB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAqBrI;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;CAcxB,CAAC"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/tools/validate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,cAAc;;iBAEzB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D,wBAAsB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAqBrI;AAED,eAAO,MAAM,YAAY;IACvB,IAAI;IACJ,WAAW;IACX,OAAO;CACR,CAAC"}
@@ -10,7 +10,7 @@ export const validateSchema = z.object({
10
10
  });
11
11
  export async function validate(params) {
12
12
  try {
13
- const args = ['validate'];
13
+ const args = ['validate', '--json'];
14
14
  const result = await executeMloop(args, { cwd: params.projectPath });
15
15
  const output = parseCliOutput(result.stdout);
16
16
  return {
@@ -33,16 +33,6 @@ export async function validate(params) {
33
33
  export const validateTool = {
34
34
  name: 'mloop_validate',
35
35
  description: 'Validate the mloop.yaml configuration file. Checks for syntax errors, missing fields, and invalid values.',
36
- inputSchema: {
37
- type: 'object',
38
- properties: {
39
- projectPath: {
40
- type: 'string',
41
- description: 'Path to MLoop project directory',
42
- },
43
- },
44
- required: ['projectPath'],
45
- },
46
36
  handler: validate,
47
37
  };
48
38
  //# sourceMappingURL=validate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/tools/validate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CACpE,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAsB;IACnD,IAAI,CAAC;QACH,MAAM,IAAI,GAAa,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE7C,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM,IAAI,yBAAyB;iBAC1C,CAAC;SACH,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC;iBACzB,CAAC;YACF,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,2GAA2G;IACxH,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iCAAiC;aAC/C;SACF;QACD,QAAQ,EAAE,CAAC,aAAa,CAAC;KAC1B;IACD,OAAO,EAAE,QAAQ;CAClB,CAAC"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/tools/validate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CACpE,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAsB;IACnD,IAAI,CAAC;QACH,MAAM,IAAI,GAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE7C,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM,IAAI,yBAAyB;iBAC1C,CAAC;SACH,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC;iBACzB,CAAC;YACF,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,2GAA2G;IACxH,OAAO,EAAE,QAAQ;CAClB,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Runs `mloop train --json` for a tool call: its events become the call's progress notifications, cancelling the call
3
+ * stops the run, and the answer is the run's own result rather than its console text.
4
+ */
5
+ import type { ServerContext } from '@modelcontextprotocol/server';
6
+ /** One line of `mloop train --json`: phase · trial · warning · result · error. */
7
+ interface TrainEvent {
8
+ event: string;
9
+ [key: string]: unknown;
10
+ }
11
+ /**
12
+ * What a finished run answers: the `result` event, the `promotion` event (whether it went to production, and why not),
13
+ * and the warnings it raised on the way. `promotion` is null from a CLI older than the event.
14
+ */
15
+ export interface TrainingOutcome {
16
+ result: TrainEvent | null;
17
+ promotion: TrainEvent | null;
18
+ warnings: string[];
19
+ }
20
+ /**
21
+ * The wall-clock bound of a run with a time budget: the budget plus room for loading, evaluation and saving. A run
22
+ * without one sizes its own budget from the data, so it has no wall-clock bound — only the idle one.
23
+ */
24
+ export declare function trainingTimeout(timeSeconds: number | undefined): number | null;
25
+ /**
26
+ * Runs `args` (a `train` command line without `--json`) in `cwd`. Progress is sent only when the caller asked for it
27
+ * with a progress token. Its value counts the notifications — the protocol wants it to rise with every one, which
28
+ * elapsed time rounded to a readable step does not, and a run's end is not known ahead of it (a budget is not a
29
+ * deadline: loading, evaluation and saving come after) — and its message says what happened and the time so far.
30
+ */
31
+ export declare function runTraining(args: string[], cwd: string, timeSeconds: number | undefined, ctx?: ServerContext): Promise<TrainingOutcome>;
32
+ export {};
33
+ //# sourceMappingURL=training-run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"training-run.d.ts","sourceRoot":"","sources":["../src/training-run.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAIlE,kFAAkF;AAClF,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAKD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAE9E;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,GAAG,CAAC,EAAE,aAAa,GAClB,OAAO,CAAC,eAAe,CAAC,CAoE1B"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Runs `mloop train --json` for a tool call: its events become the call's progress notifications, cancelling the call
3
+ * stops the run, and the answer is the run's own result rather than its console text.
4
+ */
5
+ import { executeMloop } from './executor.js';
6
+ import { CliExecutionError, formatError } from './utils/errors.js';
7
+ /** How often trial progress is sent at most — a search can finish dozens of trials a second. */
8
+ const PROGRESS_INTERVAL_MS = 1_000;
9
+ /**
10
+ * The wall-clock bound of a run with a time budget: the budget plus room for loading, evaluation and saving. A run
11
+ * without one sizes its own budget from the data, so it has no wall-clock bound — only the idle one.
12
+ */
13
+ export function trainingTimeout(timeSeconds) {
14
+ return timeSeconds === undefined ? null : timeSeconds * 1000 + Math.max(600_000, timeSeconds * 500);
15
+ }
16
+ /**
17
+ * Runs `args` (a `train` command line without `--json`) in `cwd`. Progress is sent only when the caller asked for it
18
+ * with a progress token. Its value counts the notifications — the protocol wants it to rise with every one, which
19
+ * elapsed time rounded to a readable step does not, and a run's end is not known ahead of it (a budget is not a
20
+ * deadline: loading, evaluation and saving come after) — and its message says what happened and the time so far.
21
+ */
22
+ export async function runTraining(args, cwd, timeSeconds, ctx) {
23
+ const token = ctx?.mcpReq._meta?.progressToken;
24
+ const started = Date.now();
25
+ let lastSent = 0;
26
+ let sent = 0;
27
+ let trials = 0;
28
+ const warnings = [];
29
+ let result = null;
30
+ let promotion = null;
31
+ const progress = (message, force) => {
32
+ if (token === undefined || ctx === undefined)
33
+ return;
34
+ const now = Date.now();
35
+ if (!force && now - lastSent < PROGRESS_INTERVAL_MS)
36
+ return;
37
+ lastSent = now;
38
+ void ctx.mcpReq.notify({
39
+ method: 'notifications/progress',
40
+ params: {
41
+ progressToken: token,
42
+ progress: ++sent,
43
+ message: `${message} · ${elapsed(now - started)}${timeSeconds !== undefined ? ` of a ${timeSeconds} s budget` : ''}`,
44
+ },
45
+ }).catch(() => undefined);
46
+ };
47
+ const onLine = (line) => {
48
+ const event = parse(line);
49
+ if (!event)
50
+ return;
51
+ switch (event.event) {
52
+ case 'phase':
53
+ progress(`phase ${String(event['phase'])}`, true);
54
+ break;
55
+ case 'trial': {
56
+ trials++;
57
+ // Which score is best is the CLI's judgment (a metric's direction); the line reports this trial's.
58
+ const value = typeof event['value'] === 'number' ? ` ${String(event['metric'])} ${event['value'].toFixed(4)}` : '';
59
+ progress(`trial ${trials}: ${String(event['trainer'] ?? '').replace(/ \(.*$/, '')}${value}`, false);
60
+ break;
61
+ }
62
+ case 'warning':
63
+ warnings.push(String(event['message'] ?? ''));
64
+ break;
65
+ case 'result':
66
+ result = event;
67
+ break;
68
+ case 'promotion':
69
+ promotion = event;
70
+ break;
71
+ }
72
+ };
73
+ try {
74
+ await executeMloop([...args, '--json'], {
75
+ cwd,
76
+ timeout: trainingTimeout(timeSeconds),
77
+ onStdoutLine: onLine,
78
+ });
79
+ }
80
+ catch (error) {
81
+ // The run says why it failed as error events; the console text on stderr repeats them for a person.
82
+ if (error instanceof CliExecutionError) {
83
+ const reasons = error.stdout.split('\n').map(parse)
84
+ .filter((e) => e?.event === 'error')
85
+ .map(e => String(e['message'] ?? ''));
86
+ if (reasons.length > 0)
87
+ throw new Error(reasons.join('\n'));
88
+ }
89
+ throw new Error(formatError(error));
90
+ }
91
+ return { result, promotion, warnings };
92
+ }
93
+ function parse(line) {
94
+ if (!line.startsWith('{'))
95
+ return null;
96
+ try {
97
+ const value = JSON.parse(line);
98
+ return typeof value === 'object' && value !== null && 'event' in value ? value : null;
99
+ }
100
+ catch {
101
+ return null;
102
+ }
103
+ }
104
+ function elapsed(ms) {
105
+ return `${(ms / 1000).toFixed(1)} s`;
106
+ }
107
+ //# sourceMappingURL=training-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"training-run.js","sourceRoot":"","sources":["../src/training-run.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,12 @@ export declare class TimeoutError extends Error {
21
21
  readonly timeoutMs: number;
22
22
  constructor(message: string, timeoutMs: number);
23
23
  }
24
+ /**
25
+ * The request a command ran for was cancelled, and the command was stopped.
26
+ */
27
+ export declare class CancelledError extends Error {
28
+ constructor();
29
+ }
24
30
  /**
25
31
  * Format error for MCP response
26
32
  */
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;aAGxB,QAAQ,EAAE,MAAM;aAChB,MAAM,EAAE,MAAM;aACd,MAAM,EAAE,MAAM;gBAH9B,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM;CAKjC;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;aAGnB,SAAS,EAAE,MAAM;gBADjC,OAAO,EAAE,MAAM,EACC,SAAS,EAAE,MAAM;CAKpC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAuBlD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;aAGxB,QAAQ,EAAE,MAAM;aAChB,MAAM,EAAE,MAAM;aACd,MAAM,EAAE,MAAM;IAJhC,YACE,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EAI/B;CACF;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;aAGnB,SAAS,EAAE,MAAM;IAFnC,YACE,OAAO,EAAE,MAAM,EACC,SAAS,EAAE,MAAM,EAIlC;CACF;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,cAGC;CACF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAmClD"}
@@ -34,11 +34,32 @@ export class TimeoutError extends Error {
34
34
  this.name = 'TimeoutError';
35
35
  }
36
36
  }
37
+ /**
38
+ * The request a command ran for was cancelled, and the command was stopped.
39
+ */
40
+ export class CancelledError extends Error {
41
+ constructor() {
42
+ super('Cancelled: the request was cancelled and the command stopped');
43
+ this.name = 'CancelledError';
44
+ }
45
+ }
37
46
  /**
38
47
  * Format error for MCP response
39
48
  */
40
49
  export function formatError(error) {
41
50
  if (error instanceof CliExecutionError) {
51
+ // A command asked for --json that fails with a structured answer (validate's errors, a refused promotion) says
52
+ // so on stdout as JSON; that answer is the result, the console text on stderr repeats it for a person.
53
+ const answer = stripAnsi(error.stdout).trim();
54
+ if (answer.startsWith('{') || answer.startsWith('[')) {
55
+ try {
56
+ JSON.parse(answer);
57
+ return answer;
58
+ }
59
+ catch {
60
+ // Not one JSON document — fall through to the full report.
61
+ }
62
+ }
42
63
  const parts = [`CLI Error (exit code ${error.exitCode})`];
43
64
  if (error.stderr) {
44
65
  parts.push(`\nStderr: ${stripAnsi(error.stderr)}`);
@@ -49,7 +70,7 @@ export function formatError(error) {
49
70
  return parts.join('');
50
71
  }
51
72
  if (error instanceof TimeoutError) {
52
- return `Timeout: Command did not complete within ${error.timeoutMs}ms`;
73
+ return `Timeout: ${error.message}`;
53
74
  }
54
75
  if (error instanceof Error) {
55
76
  return error.message;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,4CAA4C;IAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAGxB;IACA;IACA;IAJlB,YACE,OAAe,EACC,QAAgB,EAChB,MAAc,EACd,MAAc;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,aAAQ,GAAR,QAAQ,CAAQ;QAChB,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;QAG9B,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IAGnB;IAFlB,YACE,OAAe,EACC,SAAiB;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,cAAS,GAAT,SAAS,CAAQ;QAGjC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,CAAC,wBAAwB,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;QAE1D,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,aAAa,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,aAAa,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,OAAO,4CAA4C,KAAK,CAAC,SAAS,IAAI,CAAC;IACzE,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,4CAA4C;IAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAGxB,QAAQ;IACR,MAAM;IACN,MAAM;IAJxB,YACE,OAAe,EACC,QAAgB,EAChB,MAAc,EACd,MAAc;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;wBAJC,QAAQ;sBACR,MAAM;sBACN,MAAM;QAGtB,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IAGnB,SAAS;IAF3B,YACE,OAAe,EACC,SAAiB;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;yBAFC,SAAS;QAGzB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC;QACE,KAAK,CAAC,8DAA8D,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;QACvC,+GAA+G;QAC/G,uGAAuG;QACvG,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACnB,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,MAAM,CAAC;gBACP,2DAA2D;YAC7D,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,wBAAwB,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;QAE1D,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,aAAa,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,aAAa,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,OAAO,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC;IACrC,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iyulab/mloop-mcp",
3
- "version": "0.11.3",
3
+ "version": "0.13.0",
4
4
  "description": "MCP server for MLoop CLI - ML.NET MLOps tool",
5
5
  "type": "module",
6
6
  "main": "build/index.js",
@@ -41,16 +41,18 @@
41
41
  "node": ">=22.0.0"
42
42
  },
43
43
  "dependencies": {
44
- "@modelcontextprotocol/sdk": "^1.32.1",
44
+ "@modelcontextprotocol/server": "^2.4.0",
45
45
  "zod": "^4.6.7"
46
46
  },
47
47
  "devDependencies": {
48
+ "@modelcontextprotocol/client": "^2.4.0",
48
49
  "@types/node": "^22.0.0",
49
50
  "rimraf": "^6.0.0",
50
- "typescript": "^5.7.0"
51
+ "typescript": "^7.0.2"
51
52
  },
52
53
  "files": [
53
54
  "build",
54
- "README.md"
55
+ "README.md",
56
+ "CHANGELOG.md"
55
57
  ]
56
58
  }