@iyulab/mloop-mcp 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/build/server.d.ts.map +1 -1
- package/build/server.js +8 -2
- package/build/server.js.map +1 -1
- package/build/tools/analyze.d.ts +3 -3
- package/build/tools/analyze.d.ts.map +1 -1
- package/build/tools/analyze.js +13 -6
- package/build/tools/analyze.js.map +1 -1
- package/build/tools/detect.d.ts +70 -0
- package/build/tools/detect.d.ts.map +1 -0
- package/build/tools/detect.js +90 -0
- package/build/tools/detect.js.map +1 -0
- package/build/tools/features-select.d.ts +68 -0
- package/build/tools/features-select.d.ts.map +1 -0
- package/build/tools/features-select.js +85 -0
- package/build/tools/features-select.js.map +1 -0
- package/build/tools/index.d.ts +12 -0
- package/build/tools/index.d.ts.map +1 -1
- package/build/tools/index.js +6 -0
- package/build/tools/index.js.map +1 -1
- package/build/tools/list.d.ts.map +1 -1
- package/build/tools/list.js +2 -0
- package/build/tools/list.js.map +1 -1
- package/build/tools/predict.d.ts.map +1 -1
- package/build/tools/predict.js +21 -2
- package/build/tools/predict.js.map +1 -1
- package/build/tools/prep-plan.d.ts +69 -0
- package/build/tools/prep-plan.d.ts.map +1 -0
- package/build/tools/prep-plan.js +90 -0
- package/build/tools/prep-plan.js.map +1 -0
- package/build/tools/promote.d.ts +17 -3
- package/build/tools/promote.d.ts.map +1 -1
- package/build/tools/promote.js +40 -11
- package/build/tools/promote.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -72,10 +72,13 @@ plugins:
|
|
|
72
72
|
|------|-------------|
|
|
73
73
|
| `mloop_train` | Train ML models using AutoML |
|
|
74
74
|
| `mloop_predict` | Run predictions with trained models |
|
|
75
|
-
| `mloop_list` | List experiments and their metrics |
|
|
76
|
-
| `mloop_promote` | Promote an experiment to production |
|
|
75
|
+
| `mloop_list` | List experiments and their metrics (structured JSON) |
|
|
76
|
+
| `mloop_promote` | Promote an experiment to production (explicit ID, `latest`, or `best`) |
|
|
77
77
|
| `mloop_info` | Analyze and profile datasets |
|
|
78
78
|
| `mloop_analyze` | Run one read-only EDA aspect (profile/correlation/importance/outliers/distribution) as structured JSON |
|
|
79
|
+
| `mloop_detect` | One-shot time-series anomaly detection with SPC bounds — no training, no project required (mloop >= 0.21) |
|
|
80
|
+
| `mloop_prep_plan` | Declare a preprocessing step in mloop.yaml (policy only, no data change) as structured JSON |
|
|
81
|
+
| `mloop_features_select` | Declare feature include/exclude in mloop.yaml (policy only, no data change) as structured JSON |
|
|
79
82
|
| `mloop_status` | Show project status |
|
|
80
83
|
| `mloop_compare` | Compare multiple experiments |
|
|
81
84
|
| `mloop_evaluate` | Evaluate model performance |
|
package/build/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8BpE;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAqMxC"}
|
package/build/server.js
CHANGED
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
// Existing tools
|
|
7
7
|
trainTool, train, trainSchema, predictTool, predict, predictSchema, listTool, list, listSchema, promoteTool, promote, promoteSchema, infoTool, info, infoSchema, statusTool, status, statusSchema, compareTool, compare, compareSchema, evaluateTool, evaluate, evaluateSchema, serveTool, serve, serveSchema,
|
|
8
8
|
// New basic tools
|
|
9
|
-
initTool, init, initSchema, validateTool, validate, validateSchema, prepTool, prep, prepSchema, logsTool, logs, logsSchema, feedbackTool, feedback, feedbackSchema, sampleTool, sample, sampleSchema, triggerTool, trigger, triggerSchema, analyzeTool, analyze, analyzeSchema,
|
|
9
|
+
initTool, init, initSchema, validateTool, validate, validateSchema, prepTool, prep, prepSchema, logsTool, logs, logsSchema, feedbackTool, feedback, feedbackSchema, sampleTool, sample, sampleSchema, triggerTool, trigger, triggerSchema, analyzeTool, analyze, analyzeSchema, detectTool, detect, detectSchema, prepPlanTool, prepPlan, prepPlanSchema, featuresSelectTool, featuresSelect, featuresSelectSchema,
|
|
10
10
|
// Composite workflow tools
|
|
11
11
|
quickStartTool, quickStart, quickStartSchema, autoTrainTool, autoTrain, autoTrainSchema, projectOverviewTool, projectOverview, projectOverviewSchema, } from './tools/index.js';
|
|
12
12
|
/**
|
|
@@ -15,7 +15,7 @@ quickStartTool, quickStart, quickStartSchema, autoTrainTool, autoTrain, autoTrai
|
|
|
15
15
|
export function createServer() {
|
|
16
16
|
const server = new McpServer({
|
|
17
17
|
name: 'mloop-mcp',
|
|
18
|
-
version: '0.
|
|
18
|
+
version: '0.4.0',
|
|
19
19
|
});
|
|
20
20
|
// === Existing tools ===
|
|
21
21
|
// Register mloop_train
|
|
@@ -53,6 +53,12 @@ export function createServer() {
|
|
|
53
53
|
server.tool(triggerTool.name, triggerTool.description, triggerSchema.shape, async (params) => trigger(params));
|
|
54
54
|
// Register mloop_analyze
|
|
55
55
|
server.tool(analyzeTool.name, analyzeTool.description, analyzeSchema.shape, async (params) => analyze(params));
|
|
56
|
+
// Register mloop_detect
|
|
57
|
+
server.tool(detectTool.name, detectTool.description, detectSchema.shape, async (params) => detect(params));
|
|
58
|
+
// Register mloop_prep_plan
|
|
59
|
+
server.tool(prepPlanTool.name, prepPlanTool.description, prepPlanSchema.shape, async (params) => prepPlan(params));
|
|
60
|
+
// Register mloop_features_select
|
|
61
|
+
server.tool(featuresSelectTool.name, featuresSelectTool.description, featuresSelectSchema.shape, async (params) => featuresSelect(params));
|
|
56
62
|
// === Composite workflow tools ===
|
|
57
63
|
// Register mloop_quick_start
|
|
58
64
|
server.tool(quickStartTool.name, quickStartTool.description, quickStartSchema.shape, async (params) => quickStart(params));
|
package/build/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO;AACL,iBAAiB;AACjB,SAAS,EAAE,KAAK,EAAE,WAAW,EAC7B,WAAW,EAAE,OAAO,EAAE,aAAa,EACnC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAC1B,WAAW,EAAE,OAAO,EAAE,aAAa,EACnC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAC1B,UAAU,EAAE,MAAM,EAAE,YAAY,EAChC,WAAW,EAAE,OAAO,EAAE,aAAa,EACnC,YAAY,EAAE,QAAQ,EAAE,cAAc,EACtC,SAAS,EAAE,KAAK,EAAE,WAAW;AAC7B,kBAAkB;AAClB,QAAQ,EAAE,IAAI,EAAE,UAAU,EAC1B,YAAY,EAAE,QAAQ,EAAE,cAAc,EACtC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAC1B,QAAQ,EAAE,IAAI,EAAE,UAAU,EAC1B,YAAY,EAAE,QAAQ,EAAE,cAAc,EACtC,UAAU,EAAE,MAAM,EAAE,YAAY,EAChC,WAAW,EAAE,OAAO,EAAE,aAAa,EACnC,WAAW,EAAE,OAAO,EAAE,aAAa;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO;AACL,iBAAiB;AACjB,SAAS,EAAE,KAAK,EAAE,WAAW,EAC7B,WAAW,EAAE,OAAO,EAAE,aAAa,EACnC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAC1B,WAAW,EAAE,OAAO,EAAE,aAAa,EACnC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAC1B,UAAU,EAAE,MAAM,EAAE,YAAY,EAChC,WAAW,EAAE,OAAO,EAAE,aAAa,EACnC,YAAY,EAAE,QAAQ,EAAE,cAAc,EACtC,SAAS,EAAE,KAAK,EAAE,WAAW;AAC7B,kBAAkB;AAClB,QAAQ,EAAE,IAAI,EAAE,UAAU,EAC1B,YAAY,EAAE,QAAQ,EAAE,cAAc,EACtC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAC1B,QAAQ,EAAE,IAAI,EAAE,UAAU,EAC1B,YAAY,EAAE,QAAQ,EAAE,cAAc,EACtC,UAAU,EAAE,MAAM,EAAE,YAAY,EAChC,WAAW,EAAE,OAAO,EAAE,aAAa,EACnC,WAAW,EAAE,OAAO,EAAE,aAAa,EACnC,UAAU,EAAE,MAAM,EAAE,YAAY,EAChC,YAAY,EAAE,QAAQ,EAAE,cAAc,EACtC,kBAAkB,EAAE,cAAc,EAAE,oBAAoB;AACxD,2BAA2B;AAC3B,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAC5C,aAAa,EAAE,SAAS,EAAE,eAAe,EACzC,mBAAmB,EAAE,eAAe,EAAE,qBAAqB,GAC5D,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,yBAAyB;IAEzB,uBAAuB;IACvB,MAAM,CAAC,IAAI,CACT,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,WAAW,EACrB,WAAW,CAAC,KAAK,EACjB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,MAAqC,CAAC,CAC/D,CAAC;IAEF,yBAAyB;IACzB,MAAM,CAAC,IAAI,CACT,WAAW,CAAC,IAAI,EAChB,WAAW,CAAC,WAAW,EACvB,aAAa,CAAC,KAAK,EACnB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAuC,CAAC,CACnE,CAAC;IAEF,sBAAsB;IACtB,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,WAAW,EACpB,UAAU,CAAC,KAAK,EAChB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAoC,CAAC,CAC7D,CAAC;IAEF,yBAAyB;IACzB,MAAM,CAAC,IAAI,CACT,WAAW,CAAC,IAAI,EAChB,WAAW,CAAC,WAAW,EACvB,aAAa,CAAC,KAAK,EACnB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAuC,CAAC,CACnE,CAAC;IAEF,sBAAsB;IACtB,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,WAAW,EACpB,UAAU,CAAC,KAAK,EAChB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAoC,CAAC,CAC7D,CAAC;IAEF,wBAAwB;IACxB,MAAM,CAAC,IAAI,CACT,UAAU,CAAC,IAAI,EACf,UAAU,CAAC,WAAW,EACtB,YAAY,CAAC,KAAK,EAClB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAsC,CAAC,CACjE,CAAC;IAEF,yBAAyB;IACzB,MAAM,CAAC,IAAI,CACT,WAAW,CAAC,IAAI,EAChB,WAAW,CAAC,WAAW,EACvB,aAAa,CAAC,KAAK,EACnB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAuC,CAAC,CACnE,CAAC;IAEF,0BAA0B;IAC1B,MAAM,CAAC,IAAI,CACT,YAAY,CAAC,IAAI,EACjB,YAAY,CAAC,WAAW,EACxB,cAAc,CAAC,KAAK,EACpB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAwC,CAAC,CACrE,CAAC;IAEF,uBAAuB;IACvB,MAAM,CAAC,IAAI,CACT,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,WAAW,EACrB,WAAW,CAAC,KAAK,EACjB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,MAAqC,CAAC,CAC/D,CAAC;IAEF,0BAA0B;IAE1B,sBAAsB;IACtB,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,WAAW,EACpB,UAAU,CAAC,KAAK,EAChB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAoC,CAAC,CAC7D,CAAC;IAEF,0BAA0B;IAC1B,MAAM,CAAC,IAAI,CACT,YAAY,CAAC,IAAI,EACjB,YAAY,CAAC,WAAW,EACxB,cAAc,CAAC,KAAK,EACpB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAwC,CAAC,CACrE,CAAC;IAEF,sBAAsB;IACtB,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,WAAW,EACpB,UAAU,CAAC,KAAK,EAChB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAoC,CAAC,CAC7D,CAAC;IAEF,sBAAsB;IACtB,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,WAAW,EACpB,UAAU,CAAC,KAAK,EAChB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAoC,CAAC,CAC7D,CAAC;IAEF,0BAA0B;IAC1B,MAAM,CAAC,IAAI,CACT,YAAY,CAAC,IAAI,EACjB,YAAY,CAAC,WAAW,EACxB,cAAc,CAAC,KAAK,EACpB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAwC,CAAC,CACrE,CAAC;IAEF,wBAAwB;IACxB,MAAM,CAAC,IAAI,CACT,UAAU,CAAC,IAAI,EACf,UAAU,CAAC,WAAW,EACtB,YAAY,CAAC,KAAK,EAClB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAsC,CAAC,CACjE,CAAC;IAEF,yBAAyB;IACzB,MAAM,CAAC,IAAI,CACT,WAAW,CAAC,IAAI,EAChB,WAAW,CAAC,WAAW,EACvB,aAAa,CAAC,KAAK,EACnB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAuC,CAAC,CACnE,CAAC;IAEF,yBAAyB;IACzB,MAAM,CAAC,IAAI,CACT,WAAW,CAAC,IAAI,EAChB,WAAW,CAAC,WAAW,EACvB,aAAa,CAAC,KAAK,EACnB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAuC,CAAC,CACnE,CAAC;IAEF,wBAAwB;IACxB,MAAM,CAAC,IAAI,CACT,UAAU,CAAC,IAAI,EACf,UAAU,CAAC,WAAW,EACtB,YAAY,CAAC,KAAK,EAClB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAsC,CAAC,CACjE,CAAC;IAEF,2BAA2B;IAC3B,MAAM,CAAC,IAAI,CACT,YAAY,CAAC,IAAI,EACjB,YAAY,CAAC,WAAW,EACxB,cAAc,CAAC,KAAK,EACpB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAwC,CAAC,CACrE,CAAC;IAEF,iCAAiC;IACjC,MAAM,CAAC,IAAI,CACT,kBAAkB,CAAC,IAAI,EACvB,kBAAkB,CAAC,WAAW,EAC9B,oBAAoB,CAAC,KAAK,EAC1B,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,MAA8C,CAAC,CACjF,CAAC;IAEF,mCAAmC;IAEnC,6BAA6B;IAC7B,MAAM,CAAC,IAAI,CACT,cAAc,CAAC,IAAI,EACnB,cAAc,CAAC,WAAW,EAC1B,gBAAgB,CAAC,KAAK,EACtB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAA0C,CAAC,CACzE,CAAC;IAEF,4BAA4B;IAC5B,MAAM,CAAC,IAAI,CACT,aAAa,CAAC,IAAI,EAClB,aAAa,CAAC,WAAW,EACzB,eAAe,CAAC,KAAK,EACrB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAyC,CAAC,CACvE,CAAC;IAEF,kCAAkC;IAClC,MAAM,CAAC,IAAI,CACT,mBAAmB,CAAC,IAAI,EACxB,mBAAmB,CAAC,WAAW,EAC/B,qBAAqB,CAAC,KAAK,EAC3B,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAA+C,CAAC,CACnF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/build/tools/analyze.d.ts
CHANGED
|
@@ -9,20 +9,20 @@
|
|
|
9
9
|
import { z } from 'zod';
|
|
10
10
|
export declare const analyzeSchema: z.ZodObject<{
|
|
11
11
|
aspect: z.ZodEnum<["profile", "correlation", "importance", "outliers", "distribution"]>;
|
|
12
|
-
dataFile: z.ZodString
|
|
12
|
+
dataFile: z.ZodOptional<z.ZodString>;
|
|
13
13
|
projectPath: z.ZodOptional<z.ZodString>;
|
|
14
14
|
label: z.ZodOptional<z.ZodString>;
|
|
15
15
|
modelName: z.ZodOptional<z.ZodString>;
|
|
16
16
|
}, "strip", z.ZodTypeAny, {
|
|
17
|
-
dataFile: string;
|
|
18
17
|
aspect: "profile" | "correlation" | "importance" | "outliers" | "distribution";
|
|
19
18
|
projectPath?: string | undefined;
|
|
19
|
+
dataFile?: string | undefined;
|
|
20
20
|
label?: string | undefined;
|
|
21
21
|
modelName?: string | undefined;
|
|
22
22
|
}, {
|
|
23
|
-
dataFile: string;
|
|
24
23
|
aspect: "profile" | "correlation" | "importance" | "outliers" | "distribution";
|
|
25
24
|
projectPath?: string | undefined;
|
|
25
|
+
dataFile?: string | undefined;
|
|
26
26
|
label?: string | undefined;
|
|
27
27
|
modelName?: string | undefined;
|
|
28
28
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/tools/analyze.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/tools/analyze.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;EA2BxB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,wBAAsB,OAAO,CAC3B,MAAM,EAAE,aAAa,GACpB,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,CAwChF;AAED,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCvB,CAAC"}
|
package/build/tools/analyze.js
CHANGED
|
@@ -18,8 +18,13 @@ export const analyzeSchema = z.object({
|
|
|
18
18
|
'"importance" (feature-importance ranking, requires a label), ' +
|
|
19
19
|
'"outliers" (count/rate/isolation-forest threshold), ' +
|
|
20
20
|
'"distribution" (skewness/kurtosis/normality tests)'),
|
|
21
|
-
dataFile: z
|
|
22
|
-
|
|
21
|
+
dataFile: z
|
|
22
|
+
.string()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("Path to the CSV dataset to analyze. Optional: when omitted, defaults to the project's " +
|
|
25
|
+
'configured train data (data.train in mloop.yaml, else datasets/train.csv). Pass projectPath ' +
|
|
26
|
+
'so the default can be resolved.'),
|
|
27
|
+
projectPath: z.string().optional().describe('MLoop project path (for resolving relative paths and the default data file)'),
|
|
23
28
|
label: z
|
|
24
29
|
.string()
|
|
25
30
|
.optional()
|
|
@@ -39,7 +44,9 @@ export async function analyze(params) {
|
|
|
39
44
|
cliParams['name'] = modelName;
|
|
40
45
|
// Always emit the structured JSON envelope for LLM consumption.
|
|
41
46
|
cliParams['json'] = true;
|
|
42
|
-
|
|
47
|
+
// dataFile is optional: when omitted, the CLI defaults to the project's configured train data.
|
|
48
|
+
const positional = dataFile ? [aspect, dataFile] : [aspect];
|
|
49
|
+
const args = buildArgsWithPositional('analyze', positional, cliParams);
|
|
43
50
|
const result = await executeMloop(args, {
|
|
44
51
|
cwd: projectPath,
|
|
45
52
|
timeout: 600_000, // 10 minutes: importance/distribution can run statistical analysis
|
|
@@ -81,11 +88,11 @@ export const analyzeTool = {
|
|
|
81
88
|
},
|
|
82
89
|
dataFile: {
|
|
83
90
|
type: 'string',
|
|
84
|
-
description:
|
|
91
|
+
description: "Path to the CSV dataset to analyze. Optional: when omitted, defaults to the project's configured train data (data.train in mloop.yaml, else datasets/train.csv). Pass projectPath so the default can be resolved.",
|
|
85
92
|
},
|
|
86
93
|
projectPath: {
|
|
87
94
|
type: 'string',
|
|
88
|
-
description: 'MLoop project path for resolving relative paths',
|
|
95
|
+
description: 'MLoop project path for resolving relative paths and the default data file',
|
|
89
96
|
},
|
|
90
97
|
label: {
|
|
91
98
|
type: 'string',
|
|
@@ -96,7 +103,7 @@ export const analyzeTool = {
|
|
|
96
103
|
description: 'Model name to read label configuration from mloop.yaml (default: "default")',
|
|
97
104
|
},
|
|
98
105
|
},
|
|
99
|
-
required: ['aspect'
|
|
106
|
+
required: ['aspect'],
|
|
100
107
|
},
|
|
101
108
|
handler: analyze,
|
|
102
109
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/tools/analyze.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;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,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;SAC1E,QAAQ,CACP,0FAA0F;QACxF,8DAA8D;QAC9D,+DAA+D;QAC/D,sDAAsD;QACtD,oDAAoD,CACvD;IACH,QAAQ,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/tools/analyze.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mloop_detect tool - One-shot time-series anomaly detection (no training required)
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
export declare const detectSchema: z.ZodObject<{
|
|
6
|
+
dataPath: z.ZodString;
|
|
7
|
+
column: z.ZodOptional<z.ZodString>;
|
|
8
|
+
threshold: z.ZodOptional<z.ZodNumber>;
|
|
9
|
+
sensitivity: z.ZodOptional<z.ZodNumber>;
|
|
10
|
+
period: z.ZodOptional<z.ZodNumber>;
|
|
11
|
+
output: z.ZodOptional<z.ZodString>;
|
|
12
|
+
}, "strip", z.ZodTypeAny, {
|
|
13
|
+
dataPath: string;
|
|
14
|
+
output?: string | undefined;
|
|
15
|
+
column?: string | undefined;
|
|
16
|
+
threshold?: number | undefined;
|
|
17
|
+
sensitivity?: number | undefined;
|
|
18
|
+
period?: number | undefined;
|
|
19
|
+
}, {
|
|
20
|
+
dataPath: string;
|
|
21
|
+
output?: string | undefined;
|
|
22
|
+
column?: string | undefined;
|
|
23
|
+
threshold?: number | undefined;
|
|
24
|
+
sensitivity?: number | undefined;
|
|
25
|
+
period?: number | undefined;
|
|
26
|
+
}>;
|
|
27
|
+
export type DetectParams = z.infer<typeof detectSchema>;
|
|
28
|
+
export declare function detect(params: DetectParams): Promise<{
|
|
29
|
+
content: Array<{
|
|
30
|
+
type: 'text';
|
|
31
|
+
text: string;
|
|
32
|
+
}>;
|
|
33
|
+
isError?: boolean;
|
|
34
|
+
}>;
|
|
35
|
+
export declare const detectTool: {
|
|
36
|
+
name: string;
|
|
37
|
+
description: string;
|
|
38
|
+
inputSchema: {
|
|
39
|
+
type: string;
|
|
40
|
+
properties: {
|
|
41
|
+
dataPath: {
|
|
42
|
+
type: string;
|
|
43
|
+
description: string;
|
|
44
|
+
};
|
|
45
|
+
column: {
|
|
46
|
+
type: string;
|
|
47
|
+
description: string;
|
|
48
|
+
};
|
|
49
|
+
threshold: {
|
|
50
|
+
type: string;
|
|
51
|
+
description: string;
|
|
52
|
+
};
|
|
53
|
+
sensitivity: {
|
|
54
|
+
type: string;
|
|
55
|
+
description: string;
|
|
56
|
+
};
|
|
57
|
+
period: {
|
|
58
|
+
type: string;
|
|
59
|
+
description: string;
|
|
60
|
+
};
|
|
61
|
+
output: {
|
|
62
|
+
type: string;
|
|
63
|
+
description: string;
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
required: string[];
|
|
67
|
+
};
|
|
68
|
+
handler: typeof detect;
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/tools/detect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;EAOvB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,wBAAsB,MAAM,CAAC,MAAM,EAAE,YAAY,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,CAoCjI;AAED,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCtB,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mloop_detect tool - One-shot time-series anomaly detection (no training required)
|
|
3
|
+
*/
|
|
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';
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
export const detectSchema = z.object({
|
|
10
|
+
dataPath: z.string().describe('Path to the CSV file containing the time series'),
|
|
11
|
+
column: z.string().optional().describe('Value column to monitor (auto-selected when the CSV has a single column)'),
|
|
12
|
+
threshold: z.number().optional().describe('Anomaly decision threshold in [0, 1] (default 0.3)'),
|
|
13
|
+
sensitivity: z.number().optional().describe('Boundary sensitivity in [0, 100] — larger = tighter bounds (default 99)'),
|
|
14
|
+
period: z.number().optional().describe('Seasonality period in points (default: auto-detect; 0 = non-seasonal)'),
|
|
15
|
+
output: z.string().optional().describe('Also write the full per-point result to this CSV file'),
|
|
16
|
+
});
|
|
17
|
+
export async function detect(params) {
|
|
18
|
+
try {
|
|
19
|
+
const { dataPath, column, threshold, sensitivity, period, output } = params;
|
|
20
|
+
const cliParams = {};
|
|
21
|
+
if (column)
|
|
22
|
+
cliParams['column'] = column;
|
|
23
|
+
if (threshold !== undefined)
|
|
24
|
+
cliParams['threshold'] = threshold;
|
|
25
|
+
if (sensitivity !== undefined)
|
|
26
|
+
cliParams['sensitivity'] = sensitivity;
|
|
27
|
+
if (period !== undefined)
|
|
28
|
+
cliParams['period'] = period;
|
|
29
|
+
if (output)
|
|
30
|
+
cliParams['output'] = output;
|
|
31
|
+
cliParams['json'] = true;
|
|
32
|
+
const args = buildArgsWithPositional('detect', [dataPath], cliParams);
|
|
33
|
+
// detect works on any CSV — no MLoop project required, so cwd is just the data's directory.
|
|
34
|
+
const result = await executeMloop(args, {
|
|
35
|
+
cwd: path.dirname(path.resolve(dataPath)),
|
|
36
|
+
});
|
|
37
|
+
const outputText = parseCliOutput(result.stdout);
|
|
38
|
+
return {
|
|
39
|
+
content: [{
|
|
40
|
+
type: 'text',
|
|
41
|
+
text: outputText || 'No detection output.',
|
|
42
|
+
}],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
return {
|
|
47
|
+
content: [{
|
|
48
|
+
type: 'text',
|
|
49
|
+
text: formatError(error),
|
|
50
|
+
}],
|
|
51
|
+
isError: true,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export const detectTool = {
|
|
56
|
+
name: 'mloop_detect',
|
|
57
|
+
description: 'One-shot time-series anomaly detection over an entire CSV series (SR-CNN, no training, no MLoop project required). Every point returns an anomaly verdict, score, and SPC-chart bounds (expectedValue/upperBound/lowerBound). Use this instead of train+predict when analyzing a whole series once.',
|
|
58
|
+
inputSchema: {
|
|
59
|
+
type: 'object',
|
|
60
|
+
properties: {
|
|
61
|
+
dataPath: {
|
|
62
|
+
type: 'string',
|
|
63
|
+
description: 'Path to the CSV file containing the time series',
|
|
64
|
+
},
|
|
65
|
+
column: {
|
|
66
|
+
type: 'string',
|
|
67
|
+
description: 'Value column to monitor (auto-selected when the CSV has a single column)',
|
|
68
|
+
},
|
|
69
|
+
threshold: {
|
|
70
|
+
type: 'number',
|
|
71
|
+
description: 'Anomaly decision threshold in [0, 1] (default 0.3)',
|
|
72
|
+
},
|
|
73
|
+
sensitivity: {
|
|
74
|
+
type: 'number',
|
|
75
|
+
description: 'Boundary sensitivity in [0, 100] — larger = tighter bounds (default 99)',
|
|
76
|
+
},
|
|
77
|
+
period: {
|
|
78
|
+
type: 'number',
|
|
79
|
+
description: 'Seasonality period in points (default: auto-detect; 0 = non-seasonal)',
|
|
80
|
+
},
|
|
81
|
+
output: {
|
|
82
|
+
type: 'string',
|
|
83
|
+
description: 'Also write the full per-point result to this CSV file',
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
required: ['dataPath'],
|
|
87
|
+
},
|
|
88
|
+
handler: detect,
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/tools/detect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mloop_features_select tool - Declare feature include/exclude in mloop.yaml (policy only).
|
|
3
|
+
*
|
|
4
|
+
* 1:1 bridge to the `mloop features select` CLI command. Edits column include/exclude via
|
|
5
|
+
* ColumnOverride (Type:"ignore") without touching data. `keep` computes the complement
|
|
6
|
+
* against the train-data header (the label is always kept). Returns a structured JSON
|
|
7
|
+
* envelope ({command, model, applied, ignored, warnings}).
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
export declare const featuresSelectSchema: z.ZodObject<{
|
|
11
|
+
projectPath: z.ZodString;
|
|
12
|
+
drop: z.ZodOptional<z.ZodString>;
|
|
13
|
+
keep: z.ZodOptional<z.ZodString>;
|
|
14
|
+
reset: z.ZodOptional<z.ZodBoolean>;
|
|
15
|
+
modelName: z.ZodOptional<z.ZodString>;
|
|
16
|
+
}, "strip", z.ZodTypeAny, {
|
|
17
|
+
projectPath: string;
|
|
18
|
+
modelName?: string | undefined;
|
|
19
|
+
drop?: string | undefined;
|
|
20
|
+
keep?: string | undefined;
|
|
21
|
+
reset?: boolean | undefined;
|
|
22
|
+
}, {
|
|
23
|
+
projectPath: string;
|
|
24
|
+
modelName?: string | undefined;
|
|
25
|
+
drop?: string | undefined;
|
|
26
|
+
keep?: string | undefined;
|
|
27
|
+
reset?: boolean | undefined;
|
|
28
|
+
}>;
|
|
29
|
+
export type FeaturesSelectParams = z.infer<typeof featuresSelectSchema>;
|
|
30
|
+
export declare function featuresSelect(params: FeaturesSelectParams): Promise<{
|
|
31
|
+
content: Array<{
|
|
32
|
+
type: 'text';
|
|
33
|
+
text: string;
|
|
34
|
+
}>;
|
|
35
|
+
isError?: boolean;
|
|
36
|
+
}>;
|
|
37
|
+
export declare const featuresSelectTool: {
|
|
38
|
+
name: string;
|
|
39
|
+
description: string;
|
|
40
|
+
inputSchema: {
|
|
41
|
+
type: string;
|
|
42
|
+
properties: {
|
|
43
|
+
projectPath: {
|
|
44
|
+
type: string;
|
|
45
|
+
description: string;
|
|
46
|
+
};
|
|
47
|
+
drop: {
|
|
48
|
+
type: string;
|
|
49
|
+
description: string;
|
|
50
|
+
};
|
|
51
|
+
keep: {
|
|
52
|
+
type: string;
|
|
53
|
+
description: string;
|
|
54
|
+
};
|
|
55
|
+
reset: {
|
|
56
|
+
type: string;
|
|
57
|
+
description: string;
|
|
58
|
+
};
|
|
59
|
+
modelName: {
|
|
60
|
+
type: string;
|
|
61
|
+
description: string;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
required: string[];
|
|
65
|
+
};
|
|
66
|
+
handler: typeof featuresSelect;
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=features-select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features-select.d.ts","sourceRoot":"","sources":["../../src/tools/features-select.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EAS/B,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE,wBAAsB,cAAc,CAClC,MAAM,EAAE,oBAAoB,GAC3B,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,CAyBhF;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkC9B,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mloop_features_select tool - Declare feature include/exclude in mloop.yaml (policy only).
|
|
3
|
+
*
|
|
4
|
+
* 1:1 bridge to the `mloop features select` CLI command. Edits column include/exclude via
|
|
5
|
+
* ColumnOverride (Type:"ignore") without touching data. `keep` computes the complement
|
|
6
|
+
* against the train-data header (the label is always kept). Returns a structured JSON
|
|
7
|
+
* envelope ({command, model, applied, ignored, warnings}).
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
import { executeMloop, buildArgsWithPositional } from '../executor.js';
|
|
11
|
+
import { parseCliOutput } from '../utils/parser.js';
|
|
12
|
+
import { formatError } from '../utils/errors.js';
|
|
13
|
+
export const featuresSelectSchema = z.object({
|
|
14
|
+
projectPath: z.string().describe('Path to the MLoop project directory'),
|
|
15
|
+
drop: z.string().optional().describe('Comma-separated columns to exclude from features (e.g. "id,ts")'),
|
|
16
|
+
keep: z
|
|
17
|
+
.string()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe('Comma-separated columns to keep; all other columns are excluded (label always kept)'),
|
|
20
|
+
reset: z.boolean().optional().describe('Remove all "ignore" overrides (clears feature exclusions)'),
|
|
21
|
+
modelName: z.string().optional().describe('Model name in mloop.yaml (default: "default")'),
|
|
22
|
+
});
|
|
23
|
+
export async function featuresSelect(params) {
|
|
24
|
+
try {
|
|
25
|
+
const { projectPath, drop, keep, reset, modelName } = params;
|
|
26
|
+
const cliParams = {};
|
|
27
|
+
if (drop)
|
|
28
|
+
cliParams['drop'] = drop;
|
|
29
|
+
if (keep)
|
|
30
|
+
cliParams['keep'] = keep;
|
|
31
|
+
if (reset)
|
|
32
|
+
cliParams['reset'] = true;
|
|
33
|
+
if (modelName)
|
|
34
|
+
cliParams['name'] = modelName;
|
|
35
|
+
// Always emit the structured JSON envelope for LLM consumption.
|
|
36
|
+
cliParams['json'] = true;
|
|
37
|
+
const args = buildArgsWithPositional('features', ['select'], cliParams);
|
|
38
|
+
const result = await executeMloop(args, { cwd: projectPath });
|
|
39
|
+
const output = parseCliOutput(result.stdout);
|
|
40
|
+
return {
|
|
41
|
+
content: [{ type: 'text', text: output || 'Feature selection updated.' }],
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
return {
|
|
46
|
+
content: [{ type: 'text', text: formatError(error) }],
|
|
47
|
+
isError: true,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export const featuresSelectTool = {
|
|
52
|
+
name: 'mloop_features_select',
|
|
53
|
+
description: 'Declare which columns are features in mloop.yaml (policy only — never changes data). ' +
|
|
54
|
+
"Exclude columns with drop='a,b', keep only certain columns with keep='a,b' (all others " +
|
|
55
|
+
'excluded, label always kept), or clear all exclusions with reset=true. Returns a JSON ' +
|
|
56
|
+
'envelope listing the excluded (ignored) columns.',
|
|
57
|
+
inputSchema: {
|
|
58
|
+
type: 'object',
|
|
59
|
+
properties: {
|
|
60
|
+
projectPath: {
|
|
61
|
+
type: 'string',
|
|
62
|
+
description: 'Path to the MLoop project directory',
|
|
63
|
+
},
|
|
64
|
+
drop: {
|
|
65
|
+
type: 'string',
|
|
66
|
+
description: 'Comma-separated columns to exclude from features (e.g. "id,ts")',
|
|
67
|
+
},
|
|
68
|
+
keep: {
|
|
69
|
+
type: 'string',
|
|
70
|
+
description: 'Comma-separated columns to keep; all others excluded (label always kept)',
|
|
71
|
+
},
|
|
72
|
+
reset: {
|
|
73
|
+
type: 'boolean',
|
|
74
|
+
description: 'Remove all "ignore" overrides (clears feature exclusions)',
|
|
75
|
+
},
|
|
76
|
+
modelName: {
|
|
77
|
+
type: 'string',
|
|
78
|
+
description: 'Model name in mloop.yaml (default: "default")',
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
required: ['projectPath'],
|
|
82
|
+
},
|
|
83
|
+
handler: featuresSelect,
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=features-select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features-select.js","sourceRoot":"","sources":["../../src/tools/features-select.ts"],"names":[],"mappings":"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"}
|
package/build/tools/index.d.ts
CHANGED
|
@@ -18,6 +18,9 @@ export { feedbackTool, feedback, feedbackSchema, type FeedbackParams } from './f
|
|
|
18
18
|
export { sampleTool, sample, sampleSchema, type SampleParams } from './sample.js';
|
|
19
19
|
export { triggerTool, trigger, triggerSchema, type TriggerParams } from './trigger.js';
|
|
20
20
|
export { analyzeTool, analyze, analyzeSchema, type AnalyzeParams } from './analyze.js';
|
|
21
|
+
export { detectTool, detect, detectSchema, type DetectParams } from './detect.js';
|
|
22
|
+
export { prepPlanTool, prepPlan, prepPlanSchema, type PrepPlanParams } from './prep-plan.js';
|
|
23
|
+
export { featuresSelectTool, featuresSelect, featuresSelectSchema, type FeaturesSelectParams } from './features-select.js';
|
|
21
24
|
export { quickStartTool, quickStart, quickStartSchema, type QuickStartParams } from './quick-start.js';
|
|
22
25
|
export { autoTrainTool, autoTrain, autoTrainSchema, type AutoTrainParams } from './auto-train.js';
|
|
23
26
|
export { projectOverviewTool, projectOverview, projectOverviewSchema, type ProjectOverviewParams } from './project-overview.js';
|
|
@@ -75,6 +78,15 @@ export declare const allTools: readonly [{
|
|
|
75
78
|
}, {
|
|
76
79
|
readonly name: "mloop_analyze";
|
|
77
80
|
readonly module: () => Promise<typeof import("./analyze.js")>;
|
|
81
|
+
}, {
|
|
82
|
+
readonly name: "mloop_detect";
|
|
83
|
+
readonly module: () => Promise<typeof import("./detect.js")>;
|
|
84
|
+
}, {
|
|
85
|
+
readonly name: "mloop_prep_plan";
|
|
86
|
+
readonly module: () => Promise<typeof import("./prep-plan.js")>;
|
|
87
|
+
}, {
|
|
88
|
+
readonly name: "mloop_features_select";
|
|
89
|
+
readonly module: () => Promise<typeof import("./features-select.js")>;
|
|
78
90
|
}, {
|
|
79
91
|
readonly name: "mloop_quick_start";
|
|
80
92
|
readonly module: () => Promise<typeof import("./quick-start.js")>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAG7E,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAG7E,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAG3H,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACvG,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,qBAAqB,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEhI;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BX,CAAC"}
|
package/build/tools/index.js
CHANGED
|
@@ -20,6 +20,9 @@ export { feedbackTool, feedback, feedbackSchema } from './feedback.js';
|
|
|
20
20
|
export { sampleTool, sample, sampleSchema } from './sample.js';
|
|
21
21
|
export { triggerTool, trigger, triggerSchema } from './trigger.js';
|
|
22
22
|
export { analyzeTool, analyze, analyzeSchema } from './analyze.js';
|
|
23
|
+
export { detectTool, detect, detectSchema } from './detect.js';
|
|
24
|
+
export { prepPlanTool, prepPlan, prepPlanSchema } from './prep-plan.js';
|
|
25
|
+
export { featuresSelectTool, featuresSelect, featuresSelectSchema } from './features-select.js';
|
|
23
26
|
// Composite workflow tools
|
|
24
27
|
export { quickStartTool, quickStart, quickStartSchema } from './quick-start.js';
|
|
25
28
|
export { autoTrainTool, autoTrain, autoTrainSchema } from './auto-train.js';
|
|
@@ -47,6 +50,9 @@ export const allTools = [
|
|
|
47
50
|
{ name: 'mloop_sample', module: () => import('./sample.js') },
|
|
48
51
|
{ name: 'mloop_trigger', module: () => import('./trigger.js') },
|
|
49
52
|
{ name: 'mloop_analyze', module: () => import('./analyze.js') },
|
|
53
|
+
{ name: 'mloop_detect', module: () => import('./detect.js') },
|
|
54
|
+
{ name: 'mloop_prep_plan', module: () => import('./prep-plan.js') },
|
|
55
|
+
{ name: 'mloop_features_select', module: () => import('./features-select.js') },
|
|
50
56
|
// Composite workflow tools
|
|
51
57
|
{ name: 'mloop_quick_start', module: () => import('./quick-start.js') },
|
|
52
58
|
{ name: 'mloop_auto_train', module: () => import('./auto-train.js') },
|
package/build/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iBAAiB;AACjB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAoB,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAmB,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAmB,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAqB,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAuB,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAoB,MAAM,YAAY,CAAC;AAE7E,kBAAkB;AAClB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAmB,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAuB,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAmB,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAmB,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAuB,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAqB,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,UAAU;;;;;;;;;;;;EAIrB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD,wBAAsB,IAAI,CAAC,MAAM,EAAE,UAAU,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,
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,UAAU;;;;;;;;;;;;EAIrB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD,wBAAsB,IAAI,CAAC,MAAM,EAAE,UAAU,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,CAiC7H;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;CAsBpB,CAAC"}
|
package/build/tools/list.js
CHANGED
|
@@ -18,6 +18,8 @@ export async function list(params) {
|
|
|
18
18
|
cliParams['name'] = modelName;
|
|
19
19
|
if (showAll)
|
|
20
20
|
cliParams['all'] = true;
|
|
21
|
+
// Structured output (mloop >= 0.21): experiments array + production map — no table scraping.
|
|
22
|
+
cliParams['json'] = true;
|
|
21
23
|
const args = buildArgs('list', cliParams);
|
|
22
24
|
const result = await executeMloop(args, {
|
|
23
25
|
cwd: projectPath,
|
package/build/tools/list.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACnE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACjE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;CACvE,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,MAAkB;IAC3C,IAAI,CAAC;QACH,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAEnD,MAAM,SAAS,GAA4B,EAAE,CAAC;QAC9C,IAAI,SAAS;YAAE,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;QAC7C,IAAI,OAAO;YAAE,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACnE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACjE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;CACvE,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,MAAkB;IAC3C,IAAI,CAAC;QACH,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAEnD,MAAM,SAAS,GAA4B,EAAE,CAAC;QAC9C,IAAI,SAAS;YAAE,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;QAC7C,IAAI,OAAO;YAAE,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QACrC,6FAA6F;QAC7F,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QAEzB,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAE1C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE;YACtC,GAAG,EAAE,WAAW;SACjB,CAAC,CAAC;QAEH,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,uBAAuB;iBACxC,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,QAAQ,GAAG;IACtB,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,qDAAqD;IAClE,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,kCAAkC;aAChD;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,4CAA4C;aAC1D;SACF;QACD,QAAQ,EAAE,CAAC,aAAa,CAAC;KAC1B;IACD,OAAO,EAAE,IAAI;CACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predict.d.ts","sourceRoot":"","sources":["../../src/tools/predict.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;EAQxB,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,
|
|
1
|
+
{"version":3,"file":"predict.d.ts","sourceRoot":"","sources":["../../src/tools/predict.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;EAQxB,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,CAsDnI;AAED,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCvB,CAAC"}
|
package/build/tools/predict.js
CHANGED
|
@@ -30,15 +30,34 @@ export async function predict(params) {
|
|
|
30
30
|
cliParams['log'] = true;
|
|
31
31
|
if (unknownStrategy)
|
|
32
32
|
cliParams['unknown-strategy'] = unknownStrategy;
|
|
33
|
+
// Structured propagation: without an explicit output file, request `--json` so the agent receives the
|
|
34
|
+
// full prediction rows (predictedLabel, probabilities, conformal band, and the normalized `confidence`
|
|
35
|
+
// MLoop now owns) instead of scraped Spectre text — this is what unblocked MCP structured consumption.
|
|
36
|
+
// An explicit `output` keeps the file-writing (CSV) path with its text summary.
|
|
37
|
+
const wantsFile = !!output;
|
|
38
|
+
if (!wantsFile)
|
|
39
|
+
cliParams['json'] = true;
|
|
33
40
|
const args = buildArgsWithPositional('predict', positional, cliParams);
|
|
34
41
|
const result = await executeMloop(args, {
|
|
35
42
|
cwd: projectPath,
|
|
36
43
|
});
|
|
37
|
-
|
|
44
|
+
let outputText;
|
|
45
|
+
if (!wantsFile) {
|
|
46
|
+
// `--json` emits one JSON object on stdout. Fall back to text parsing for an older CLI without it.
|
|
47
|
+
try {
|
|
48
|
+
outputText = JSON.stringify(JSON.parse(result.stdout.trim()), null, 2);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
outputText = parseCliOutput(result.stdout) || 'Prediction completed successfully.';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
outputText = parseCliOutput(result.stdout) || 'Prediction completed successfully.';
|
|
56
|
+
}
|
|
38
57
|
return {
|
|
39
58
|
content: [{
|
|
40
59
|
type: 'text',
|
|
41
|
-
text: outputText
|
|
60
|
+
text: outputText,
|
|
42
61
|
}],
|
|
43
62
|
};
|
|
44
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predict.js","sourceRoot":"","sources":["../../src/tools/predict.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,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;IAChG,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IACvD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC1D,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACjE,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE;SACtF,QAAQ,CAAC,qEAAqE,CAAC;CACnF,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAqB;IACjD,IAAI,CAAC;QACH,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;QAElF,oCAAoC;QACpC,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,IAAI,QAAQ;YAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAExC,MAAM,SAAS,GAA4B,EAAE,CAAC;QAC9C,IAAI,SAAS;YAAE,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;QAC7C,IAAI,MAAM;YAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;QACzC,IAAI,GAAG;YAAE,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QACjC,IAAI,eAAe;YAAE,SAAS,CAAC,kBAAkB,CAAC,GAAG,eAAe,CAAC;QAErE,MAAM,IAAI,GAAG,uBAAuB,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QAEvE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE;YACtC,GAAG,EAAE,WAAW;SACjB,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"predict.js","sourceRoot":"","sources":["../../src/tools/predict.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mloop_prep_plan tool - Declaratively edit prep steps in mloop.yaml (policy only).
|
|
3
|
+
*
|
|
4
|
+
* 1:1 bridge to the `mloop prep plan` CLI command. Records preprocessing decisions in
|
|
5
|
+
* mloop.yaml without touching data — statistical fit still happens fold-internally at
|
|
6
|
+
* train time. Returns a structured JSON envelope ({command, model, task, applied, prep,
|
|
7
|
+
* warnings}) where each prep step reports its leakage category and fold-safety, so an
|
|
8
|
+
* agent can decide whether a transform is safe before training.
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
export declare const prepPlanSchema: z.ZodObject<{
|
|
12
|
+
projectPath: z.ZodString;
|
|
13
|
+
set: z.ZodOptional<z.ZodString>;
|
|
14
|
+
columns: z.ZodOptional<z.ZodString>;
|
|
15
|
+
remove: z.ZodOptional<z.ZodString>;
|
|
16
|
+
modelName: z.ZodOptional<z.ZodString>;
|
|
17
|
+
}, "strip", z.ZodTypeAny, {
|
|
18
|
+
projectPath: string;
|
|
19
|
+
modelName?: string | undefined;
|
|
20
|
+
set?: string | undefined;
|
|
21
|
+
columns?: string | undefined;
|
|
22
|
+
remove?: string | undefined;
|
|
23
|
+
}, {
|
|
24
|
+
projectPath: string;
|
|
25
|
+
modelName?: string | undefined;
|
|
26
|
+
set?: string | undefined;
|
|
27
|
+
columns?: string | undefined;
|
|
28
|
+
remove?: string | undefined;
|
|
29
|
+
}>;
|
|
30
|
+
export type PrepPlanParams = z.infer<typeof prepPlanSchema>;
|
|
31
|
+
export declare function prepPlan(params: PrepPlanParams): Promise<{
|
|
32
|
+
content: Array<{
|
|
33
|
+
type: 'text';
|
|
34
|
+
text: string;
|
|
35
|
+
}>;
|
|
36
|
+
isError?: boolean;
|
|
37
|
+
}>;
|
|
38
|
+
export declare const prepPlanTool: {
|
|
39
|
+
name: string;
|
|
40
|
+
description: string;
|
|
41
|
+
inputSchema: {
|
|
42
|
+
type: string;
|
|
43
|
+
properties: {
|
|
44
|
+
projectPath: {
|
|
45
|
+
type: string;
|
|
46
|
+
description: string;
|
|
47
|
+
};
|
|
48
|
+
set: {
|
|
49
|
+
type: string;
|
|
50
|
+
description: string;
|
|
51
|
+
};
|
|
52
|
+
columns: {
|
|
53
|
+
type: string;
|
|
54
|
+
description: string;
|
|
55
|
+
};
|
|
56
|
+
remove: {
|
|
57
|
+
type: string;
|
|
58
|
+
description: string;
|
|
59
|
+
};
|
|
60
|
+
modelName: {
|
|
61
|
+
type: string;
|
|
62
|
+
description: string;
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
required: string[];
|
|
66
|
+
};
|
|
67
|
+
handler: typeof prepPlan;
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=prep-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prep-plan.d.ts","sourceRoot":"","sources":["../../src/tools/prep-plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;EAYzB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,cAAc,GACrB,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,CAyBhF;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCxB,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mloop_prep_plan tool - Declaratively edit prep steps in mloop.yaml (policy only).
|
|
3
|
+
*
|
|
4
|
+
* 1:1 bridge to the `mloop prep plan` CLI command. Records preprocessing decisions in
|
|
5
|
+
* mloop.yaml without touching data — statistical fit still happens fold-internally at
|
|
6
|
+
* train time. Returns a structured JSON envelope ({command, model, task, applied, prep,
|
|
7
|
+
* warnings}) where each prep step reports its leakage category and fold-safety, so an
|
|
8
|
+
* agent can decide whether a transform is safe before training.
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
import { executeMloop, buildArgsWithPositional } from '../executor.js';
|
|
12
|
+
import { parseCliOutput } from '../utils/parser.js';
|
|
13
|
+
import { formatError } from '../utils/errors.js';
|
|
14
|
+
export const prepPlanSchema = z.object({
|
|
15
|
+
projectPath: z.string().describe('Path to the MLoop project directory'),
|
|
16
|
+
set: z
|
|
17
|
+
.string()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe('Add/replace a prep step: "type[:method]" (e.g. "normalize:z-score", "drop-duplicates")'),
|
|
20
|
+
columns: z
|
|
21
|
+
.string()
|
|
22
|
+
.optional()
|
|
23
|
+
.describe('Comma-separated target columns for the --set/--remove step (e.g. "a,b")'),
|
|
24
|
+
remove: z.string().optional().describe('Remove prep step(s) of this type'),
|
|
25
|
+
modelName: z.string().optional().describe('Model name in mloop.yaml (default: "default")'),
|
|
26
|
+
});
|
|
27
|
+
export async function prepPlan(params) {
|
|
28
|
+
try {
|
|
29
|
+
const { projectPath, set, columns, remove, modelName } = params;
|
|
30
|
+
const cliParams = {};
|
|
31
|
+
if (set)
|
|
32
|
+
cliParams['set'] = set;
|
|
33
|
+
if (columns)
|
|
34
|
+
cliParams['columns'] = columns;
|
|
35
|
+
if (remove)
|
|
36
|
+
cliParams['remove'] = remove;
|
|
37
|
+
if (modelName)
|
|
38
|
+
cliParams['name'] = modelName;
|
|
39
|
+
// Always emit the structured JSON envelope for LLM consumption.
|
|
40
|
+
cliParams['json'] = true;
|
|
41
|
+
const args = buildArgsWithPositional('prep', ['plan'], cliParams);
|
|
42
|
+
const result = await executeMloop(args, { cwd: projectPath });
|
|
43
|
+
const output = parseCliOutput(result.stdout);
|
|
44
|
+
return {
|
|
45
|
+
content: [{ type: 'text', text: output || 'Prep plan updated.' }],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
return {
|
|
50
|
+
content: [{ type: 'text', text: formatError(error) }],
|
|
51
|
+
isError: true,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export const prepPlanTool = {
|
|
56
|
+
name: 'mloop_prep_plan',
|
|
57
|
+
description: 'Declare a preprocessing step in mloop.yaml (policy only — never changes data). ' +
|
|
58
|
+
"Add/replace with set='type[:method]' (+ optional columns), remove with remove='type', " +
|
|
59
|
+
'or omit both to list the current plan. Returns a JSON envelope where each step reports its ' +
|
|
60
|
+
'leakage category (preFeaturizer/csvStage/unsupportedLeakageWarn) and fold-safety. ' +
|
|
61
|
+
'Statistical fit happens fold-internally at train time.',
|
|
62
|
+
inputSchema: {
|
|
63
|
+
type: 'object',
|
|
64
|
+
properties: {
|
|
65
|
+
projectPath: {
|
|
66
|
+
type: 'string',
|
|
67
|
+
description: 'Path to the MLoop project directory',
|
|
68
|
+
},
|
|
69
|
+
set: {
|
|
70
|
+
type: 'string',
|
|
71
|
+
description: 'Add/replace a prep step: "type[:method]" (e.g. "normalize:z-score", "drop-duplicates")',
|
|
72
|
+
},
|
|
73
|
+
columns: {
|
|
74
|
+
type: 'string',
|
|
75
|
+
description: 'Comma-separated target columns for the set/remove step (e.g. "a,b")',
|
|
76
|
+
},
|
|
77
|
+
remove: {
|
|
78
|
+
type: 'string',
|
|
79
|
+
description: 'Remove prep step(s) of this type',
|
|
80
|
+
},
|
|
81
|
+
modelName: {
|
|
82
|
+
type: 'string',
|
|
83
|
+
description: 'Model name in mloop.yaml (default: "default")',
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
required: ['projectPath'],
|
|
87
|
+
},
|
|
88
|
+
handler: prepPlan,
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=prep-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prep-plan.js","sourceRoot":"","sources":["../../src/tools/prep-plan.ts"],"names":[],"mappings":"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"}
|
package/build/tools/promote.d.ts
CHANGED
|
@@ -4,18 +4,24 @@
|
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
export declare const promoteSchema: z.ZodObject<{
|
|
6
6
|
projectPath: z.ZodString;
|
|
7
|
-
experimentId: z.ZodString
|
|
7
|
+
experimentId: z.ZodOptional<z.ZodString>;
|
|
8
|
+
latest: z.ZodOptional<z.ZodBoolean>;
|
|
9
|
+
best: z.ZodOptional<z.ZodBoolean>;
|
|
8
10
|
modelName: z.ZodOptional<z.ZodString>;
|
|
9
11
|
force: z.ZodOptional<z.ZodBoolean>;
|
|
10
12
|
}, "strip", z.ZodTypeAny, {
|
|
11
13
|
projectPath: string;
|
|
12
|
-
experimentId: string;
|
|
13
14
|
modelName?: string | undefined;
|
|
15
|
+
experimentId?: string | undefined;
|
|
16
|
+
latest?: boolean | undefined;
|
|
17
|
+
best?: boolean | undefined;
|
|
14
18
|
force?: boolean | undefined;
|
|
15
19
|
}, {
|
|
16
20
|
projectPath: string;
|
|
17
|
-
experimentId: string;
|
|
18
21
|
modelName?: string | undefined;
|
|
22
|
+
experimentId?: string | undefined;
|
|
23
|
+
latest?: boolean | undefined;
|
|
24
|
+
best?: boolean | undefined;
|
|
19
25
|
force?: boolean | undefined;
|
|
20
26
|
}>;
|
|
21
27
|
export type PromoteParams = z.infer<typeof promoteSchema>;
|
|
@@ -40,6 +46,14 @@ export declare const promoteTool: {
|
|
|
40
46
|
type: string;
|
|
41
47
|
description: string;
|
|
42
48
|
};
|
|
49
|
+
latest: {
|
|
50
|
+
type: string;
|
|
51
|
+
description: string;
|
|
52
|
+
};
|
|
53
|
+
best: {
|
|
54
|
+
type: string;
|
|
55
|
+
description: string;
|
|
56
|
+
};
|
|
43
57
|
modelName: {
|
|
44
58
|
type: string;
|
|
45
59
|
description: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promote.d.ts","sourceRoot":"","sources":["../../src/tools/promote.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"promote.d.ts","sourceRoot":"","sources":["../../src/tools/promote.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;EAOxB,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,CAgDnI;AAED,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCvB,CAAC"}
|
package/build/tools/promote.js
CHANGED
|
@@ -7,20 +7,41 @@ import { parseCliOutput } from '../utils/parser.js';
|
|
|
7
7
|
import { formatError } from '../utils/errors.js';
|
|
8
8
|
export const promoteSchema = z.object({
|
|
9
9
|
projectPath: z.string().describe('Path to MLoop project directory'),
|
|
10
|
-
experimentId: z.string().describe('Experiment ID to promote (e.g., exp-003)'),
|
|
10
|
+
experimentId: z.string().optional().describe('Experiment ID to promote (e.g., exp-003); omit when using latest/best'),
|
|
11
|
+
latest: z.boolean().optional().describe('Promote the most recent completed experiment'),
|
|
12
|
+
best: z.boolean().optional().describe('Promote the completed experiment with the best metric (direction-aware)'),
|
|
11
13
|
modelName: z.string().optional().describe('Model name'),
|
|
12
14
|
force: z.boolean().optional().describe('Skip confirmation'),
|
|
13
15
|
});
|
|
14
16
|
export async function promote(params) {
|
|
15
17
|
try {
|
|
16
|
-
const { projectPath, experimentId, modelName, force } = params;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
const { projectPath, experimentId, latest, best, modelName, force } = params;
|
|
19
|
+
// Mirror the CLI's selector contract client-side so the agent gets an immediate, clear error.
|
|
20
|
+
const selectors = (experimentId ? 1 : 0) + (latest ? 1 : 0) + (best ? 1 : 0);
|
|
21
|
+
if (selectors !== 1) {
|
|
22
|
+
return {
|
|
23
|
+
content: [{
|
|
24
|
+
type: 'text',
|
|
25
|
+
text: selectors === 0
|
|
26
|
+
? 'Specify exactly one of: experimentId, latest, or best.'
|
|
27
|
+
: 'Use only one of: experimentId, latest, best.',
|
|
28
|
+
}],
|
|
29
|
+
isError: true,
|
|
30
|
+
};
|
|
20
31
|
}
|
|
21
|
-
|
|
32
|
+
const args = ['promote'];
|
|
33
|
+
if (experimentId)
|
|
34
|
+
args.push(experimentId);
|
|
35
|
+
if (latest)
|
|
36
|
+
args.push('--latest');
|
|
37
|
+
if (best)
|
|
38
|
+
args.push('--best');
|
|
39
|
+
if (modelName)
|
|
40
|
+
args.push('--name', modelName);
|
|
41
|
+
if (force)
|
|
22
42
|
args.push('--force');
|
|
23
|
-
}
|
|
43
|
+
// Structured, non-interactive output (mloop >= 0.21): result object or {"error": ...}.
|
|
44
|
+
args.push('--json');
|
|
24
45
|
const result = await executeMloop(args, {
|
|
25
46
|
cwd: projectPath,
|
|
26
47
|
});
|
|
@@ -28,7 +49,7 @@ export async function promote(params) {
|
|
|
28
49
|
return {
|
|
29
50
|
content: [{
|
|
30
51
|
type: 'text',
|
|
31
|
-
text: output || `Experiment ${experimentId} promoted to production successfully.`,
|
|
52
|
+
text: output || `Experiment ${experimentId ?? '(auto-selected)'} promoted to production successfully.`,
|
|
32
53
|
}],
|
|
33
54
|
};
|
|
34
55
|
}
|
|
@@ -44,7 +65,7 @@ export async function promote(params) {
|
|
|
44
65
|
}
|
|
45
66
|
export const promoteTool = {
|
|
46
67
|
name: 'mloop_promote',
|
|
47
|
-
description: 'Promote an experiment to production. The
|
|
68
|
+
description: 'Promote an experiment to production. Select by explicit ID, or auto-select with latest (newest completed) / best (best metric, direction-aware). The promoted model will be used for predictions.',
|
|
48
69
|
inputSchema: {
|
|
49
70
|
type: 'object',
|
|
50
71
|
properties: {
|
|
@@ -54,7 +75,15 @@ export const promoteTool = {
|
|
|
54
75
|
},
|
|
55
76
|
experimentId: {
|
|
56
77
|
type: 'string',
|
|
57
|
-
description: 'Experiment ID to promote (e.g., exp-003)',
|
|
78
|
+
description: 'Experiment ID to promote (e.g., exp-003); omit when using latest/best',
|
|
79
|
+
},
|
|
80
|
+
latest: {
|
|
81
|
+
type: 'boolean',
|
|
82
|
+
description: 'Promote the most recent completed experiment',
|
|
83
|
+
},
|
|
84
|
+
best: {
|
|
85
|
+
type: 'boolean',
|
|
86
|
+
description: 'Promote the completed experiment with the best metric (direction-aware: error metrics pick the minimum)',
|
|
58
87
|
},
|
|
59
88
|
modelName: {
|
|
60
89
|
type: 'string',
|
|
@@ -65,7 +94,7 @@ export const promoteTool = {
|
|
|
65
94
|
description: 'Skip confirmation prompt',
|
|
66
95
|
},
|
|
67
96
|
},
|
|
68
|
-
required: ['projectPath'
|
|
97
|
+
required: ['projectPath'],
|
|
69
98
|
},
|
|
70
99
|
handler: promote,
|
|
71
100
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promote.js","sourceRoot":"","sources":["../../src/tools/promote.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,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACnE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"promote.js","sourceRoot":"","sources":["../../src/tools/promote.ts"],"names":[],"mappings":"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"}
|