multi-model-flow 0.1.4 → 0.2.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/.claude/CLAUDE.md +3 -3
- package/.claude/commands/mmf-analyze.md +8 -4
- package/.claude/commands/mmf-codex.md +8 -13
- package/.claude/commands/mmf-gemini.md +8 -13
- package/.claude/commands/mmf-review.md +8 -4
- package/.claude/commands/mmf-workflow.md +12 -13
- package/.claude/settings.local.json +9 -0
- package/.claude/skills/codex-task/SKILL.md +13 -8
- package/.claude/skills/gemini-task/SKILL.md +13 -8
- package/.claude/skills/multi-model-task/SKILL.md +14 -23
- package/CLAUDE.md +3 -3
- package/dist/cli.js +13 -6
- package/dist/cli.js.map +1 -1
- package/dist/index.js +16 -54
- package/dist/index.js.map +1 -1
- package/dist/task.d.ts +1 -0
- package/dist/task.d.ts.map +1 -1
- package/dist/task.js +13 -0
- package/dist/task.js.map +1 -1
- package/package.json +1 -1
package/.claude/CLAUDE.md
CHANGED
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
| `mcp__ace-tool__codebase-retrieval` | 生成任何代码之前 | 语义代码检索,用英文查询 |
|
|
18
18
|
| `mcp__grok-search__web_search` | 需要外部文档、最新信息 | 失败时回退到 context7 |
|
|
19
19
|
| `mcp__plugin_context7_context7__query-docs` | grok-search 不可用或失败时 | 库文档查询回退方案 |
|
|
20
|
-
| `mcp__diy-
|
|
21
|
-
| `mcp__diy-
|
|
20
|
+
| `mcp__diy-workflow__task_submit` | 所有 Codex/Gemini 任务 | 用 `domain` 参数智能路由,返回 task_id |
|
|
21
|
+
| `mcp__diy-workflow__task_result` | 获取任务结果 | 自动等待完成(默认 300s),无需轮询 |
|
|
22
22
|
|
|
23
23
|
## 命令速查表
|
|
24
24
|
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
- 信任规则:后端逻辑 → 信任 Codex,前端 UI → 信任 Gemini
|
|
52
52
|
- 模型意见冲突时 → 按领域权威裁决,说明理由
|
|
53
53
|
- 应用建议修改前必须征求用户确认
|
|
54
|
-
-
|
|
54
|
+
- `task_result` 内置长轮询,调用一次即可等待结果,无需反复轮询 `task_status`
|
|
55
55
|
|
|
56
56
|
## Session 复用
|
|
57
57
|
|
|
@@ -22,7 +22,7 @@ Fallback to context7 if grok-search fails.
|
|
|
22
22
|
|
|
23
23
|
### Codex Analysis
|
|
24
24
|
```
|
|
25
|
-
|
|
25
|
+
mcp__diy-workflow__task_submit({
|
|
26
26
|
prompt: "Analyze the following code/requirement from a backend perspective:\n$CONTEXT\n\nProvide: architecture assessment, improvement suggestions, risk analysis.",
|
|
27
27
|
domain: "backend"
|
|
28
28
|
})
|
|
@@ -30,15 +30,19 @@ mcp__workflow__task_submit({
|
|
|
30
30
|
|
|
31
31
|
### Gemini Analysis
|
|
32
32
|
```
|
|
33
|
-
|
|
33
|
+
mcp__diy-workflow__task_submit({
|
|
34
34
|
prompt: "Analyze the following code/requirement from a frontend perspective:\n$CONTEXT\n\nProvide: UX assessment, component analysis, design recommendations.",
|
|
35
35
|
domain: "frontend"
|
|
36
36
|
})
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
-
## Step 3:
|
|
39
|
+
## Step 3: Collect Results
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
Retrieve both results (each call waits automatically until the task completes):
|
|
42
|
+
```
|
|
43
|
+
mcp__diy-workflow__task_result({ task_id: "<codex_task_id>" })
|
|
44
|
+
mcp__diy-workflow__task_result({ task_id: "<gemini_task_id>" })
|
|
45
|
+
```
|
|
42
46
|
|
|
43
47
|
## Step 4: Synthesize
|
|
44
48
|
|
|
@@ -13,34 +13,29 @@ If the task involves existing code, retrieve context first:
|
|
|
13
13
|
mcp__ace-tool__codebase-retrieval({ information_request: "<describe relevant code>", directory_path: "<project root>" })
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
## Step 2:
|
|
16
|
+
## Step 2: Submit Task
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
Use synchronous `chat`:
|
|
18
|
+
All tasks use async `task_submit`:
|
|
20
19
|
```
|
|
21
|
-
|
|
20
|
+
mcp__diy-workflow__task_submit({
|
|
22
21
|
prompt: "<user's request>\n\nContext:\n<code context>",
|
|
23
22
|
domain: "backend"
|
|
24
23
|
})
|
|
25
24
|
```
|
|
26
25
|
|
|
27
|
-
|
|
28
|
-
Use async `task_submit`:
|
|
26
|
+
Then retrieve the result (waits automatically, no polling needed):
|
|
29
27
|
```
|
|
30
|
-
|
|
31
|
-
prompt: "<user's request>\n\nContext:\n<code context>",
|
|
32
|
-
domain: "backend"
|
|
33
|
-
})
|
|
28
|
+
mcp__diy-workflow__task_result({ task_id: "<task_id>" })
|
|
34
29
|
```
|
|
35
|
-
Then poll with `task_status` every 15-30 seconds until complete. Retrieve with `task_result`.
|
|
36
30
|
|
|
37
31
|
## Step 3: Multi-turn Follow-up
|
|
38
32
|
|
|
39
33
|
To continue the conversation, pass the `session_id` from the previous response:
|
|
40
34
|
```
|
|
41
|
-
|
|
35
|
+
mcp__diy-workflow__task_submit({
|
|
42
36
|
prompt: "<follow-up question>",
|
|
43
|
-
session_id: "<session_id from previous call>"
|
|
37
|
+
session_id: "<session_id from previous call>",
|
|
38
|
+
domain: "backend"
|
|
44
39
|
})
|
|
45
40
|
```
|
|
46
41
|
|
|
@@ -13,34 +13,29 @@ If the task involves existing code, retrieve context first:
|
|
|
13
13
|
mcp__ace-tool__codebase-retrieval({ information_request: "<describe relevant code>", directory_path: "<project root>" })
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
## Step 2:
|
|
16
|
+
## Step 2: Submit Task
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
Use synchronous `chat`:
|
|
18
|
+
All tasks use async `task_submit`:
|
|
20
19
|
```
|
|
21
|
-
|
|
20
|
+
mcp__diy-workflow__task_submit({
|
|
22
21
|
prompt: "<user's request>\n\nContext:\n<code context>",
|
|
23
22
|
domain: "frontend"
|
|
24
23
|
})
|
|
25
24
|
```
|
|
26
25
|
|
|
27
|
-
|
|
28
|
-
Use async `task_submit`:
|
|
26
|
+
Then retrieve the result (waits automatically, no polling needed):
|
|
29
27
|
```
|
|
30
|
-
|
|
31
|
-
prompt: "<user's request>\n\nContext:\n<code context>",
|
|
32
|
-
domain: "frontend"
|
|
33
|
-
})
|
|
28
|
+
mcp__diy-workflow__task_result({ task_id: "<task_id>" })
|
|
34
29
|
```
|
|
35
|
-
Then poll with `task_status` every 15-30 seconds until complete. Retrieve with `task_result`.
|
|
36
30
|
|
|
37
31
|
## Step 3: Multi-turn Follow-up
|
|
38
32
|
|
|
39
33
|
To continue the conversation, pass the `session_id` from the previous response:
|
|
40
34
|
```
|
|
41
|
-
|
|
35
|
+
mcp__diy-workflow__task_submit({
|
|
42
36
|
prompt: "<follow-up question>",
|
|
43
|
-
session_id: "<session_id from previous call>"
|
|
37
|
+
session_id: "<session_id from previous call>",
|
|
38
|
+
domain: "frontend"
|
|
44
39
|
})
|
|
45
40
|
```
|
|
46
41
|
|
|
@@ -19,7 +19,7 @@ Also gather the git diff if applicable (use `git diff` or `git diff --staged`).
|
|
|
19
19
|
|
|
20
20
|
### Codex Review (Logic + Security + Performance)
|
|
21
21
|
```
|
|
22
|
-
|
|
22
|
+
mcp__diy-workflow__task_submit({
|
|
23
23
|
prompt: "Review the following code. Focus on:\n1. Logic bugs and edge cases\n2. Security vulnerabilities\n3. Performance issues\n4. Error handling gaps\n\nRate each finding: Critical / Major / Minor / Suggestion\nInclude specific line numbers.\n\nCode:\n$CODE",
|
|
24
24
|
domain: "review"
|
|
25
25
|
})
|
|
@@ -27,15 +27,19 @@ mcp__workflow__task_submit({
|
|
|
27
27
|
|
|
28
28
|
### Gemini Review (UI + Accessibility + Design)
|
|
29
29
|
```
|
|
30
|
-
|
|
30
|
+
mcp__diy-workflow__task_submit({
|
|
31
31
|
prompt: "Review the following code. Focus on:\n1. UI/UX consistency\n2. Accessibility compliance\n3. Responsive design issues\n4. Component architecture\n\nRate each finding: Critical / Major / Minor / Suggestion\nInclude specific line numbers.\n\nCode:\n$CODE",
|
|
32
32
|
domain: "frontend"
|
|
33
33
|
})
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
## Step 3:
|
|
36
|
+
## Step 3: Collect Results
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
Retrieve both results (each call waits automatically until the task completes):
|
|
39
|
+
```
|
|
40
|
+
mcp__diy-workflow__task_result({ task_id: "<codex_task_id>" })
|
|
41
|
+
mcp__diy-workflow__task_result({ task_id: "<gemini_task_id>" })
|
|
42
|
+
```
|
|
39
43
|
|
|
40
44
|
## Step 4: Synthesize Review
|
|
41
45
|
|
|
@@ -44,7 +44,7 @@ Submit tasks to BOTH models in parallel using `task_submit`:
|
|
|
44
44
|
|
|
45
45
|
### Backend Analysis (Codex)
|
|
46
46
|
```
|
|
47
|
-
|
|
47
|
+
mcp__diy-workflow__task_submit({
|
|
48
48
|
prompt: "Analyze the following requirement and code context. Provide:\n1. Architecture analysis\n2. Implementation approach with Unified Diff patches\n3. Security considerations\n4. Performance implications\n\nRequirement: $REQUIREMENT\n\nCode Context:\n$CODE_CONTEXT\n\nTechnical References:\n$SEARCH_RESULTS",
|
|
49
49
|
domain: "backend"
|
|
50
50
|
})
|
|
@@ -52,7 +52,7 @@ mcp__workflow__task_submit({
|
|
|
52
52
|
|
|
53
53
|
### Frontend Analysis (Gemini)
|
|
54
54
|
```
|
|
55
|
-
|
|
55
|
+
mcp__diy-workflow__task_submit({
|
|
56
56
|
prompt: "Analyze the following requirement and code context. Provide:\n1. UI/UX impact analysis\n2. Component architecture with Unified Diff patches\n3. Accessibility considerations\n4. Design consistency review\n\nRequirement: $REQUIREMENT\n\nCode Context:\n$CODE_CONTEXT\n\nTechnical References:\n$SEARCH_RESULTS",
|
|
57
57
|
domain: "frontend"
|
|
58
58
|
})
|
|
@@ -60,18 +60,12 @@ mcp__workflow__task_submit({
|
|
|
60
60
|
|
|
61
61
|
Record both task IDs.
|
|
62
62
|
|
|
63
|
-
## Phase 3:
|
|
63
|
+
## Phase 3: Collect Results [模式:收集]
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
Retrieve both results (each call waits automatically until the task completes, no polling needed):
|
|
66
66
|
```
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
Report progress to the user. When both complete, retrieve results:
|
|
72
|
-
```
|
|
73
|
-
mcp__workflow__task_result({ task_id: "<codex_task_id>" })
|
|
74
|
-
mcp__workflow__task_result({ task_id: "<gemini_task_id>" })
|
|
67
|
+
mcp__diy-workflow__task_result({ task_id: "<codex_task_id>" })
|
|
68
|
+
mcp__diy-workflow__task_result({ task_id: "<gemini_task_id>" })
|
|
75
69
|
```
|
|
76
70
|
|
|
77
71
|
## Phase 4: Cross-Validation [模式:综合]
|
|
@@ -95,10 +89,15 @@ Apply the synthesized plan:
|
|
|
95
89
|
|
|
96
90
|
Submit a final review task:
|
|
97
91
|
```
|
|
98
|
-
|
|
92
|
+
mcp__diy-workflow__task_submit({
|
|
99
93
|
prompt: "Review the following code changes for bugs, security issues, and quality:\n\n$CHANGES",
|
|
100
94
|
domain: "review"
|
|
101
95
|
})
|
|
102
96
|
```
|
|
103
97
|
|
|
98
|
+
Retrieve the review result:
|
|
99
|
+
```
|
|
100
|
+
mcp__diy-workflow__task_result({ task_id: "<review_task_id>" })
|
|
101
|
+
```
|
|
102
|
+
|
|
104
103
|
Report findings and apply fixes if needed.
|
|
@@ -3,11 +3,10 @@ name: codex-task
|
|
|
3
3
|
description: Delegate code analysis, review, or generation tasks to Codex (OpenAI) with context collection
|
|
4
4
|
user-invocable: false
|
|
5
5
|
allowed-tools:
|
|
6
|
-
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
- mcp__workflow__task_cancel
|
|
6
|
+
- mcp__diy-workflow__task_submit
|
|
7
|
+
- mcp__diy-workflow__task_status
|
|
8
|
+
- mcp__diy-workflow__task_result
|
|
9
|
+
- mcp__diy-workflow__task_cancel
|
|
11
10
|
- mcp__ace-tool__codebase-retrieval
|
|
12
11
|
---
|
|
13
12
|
|
|
@@ -48,9 +47,15 @@ Instructions:
|
|
|
48
47
|
|
|
49
48
|
## Delegation
|
|
50
49
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
-
|
|
50
|
+
All tasks use async submission:
|
|
51
|
+
```
|
|
52
|
+
mcp__diy-workflow__task_submit({ prompt, domain: "backend" })
|
|
53
|
+
```
|
|
54
|
+
Then retrieve the result (waits automatically):
|
|
55
|
+
```
|
|
56
|
+
mcp__diy-workflow__task_result({ task_id: "<task_id>" })
|
|
57
|
+
```
|
|
58
|
+
Follow-up → pass `session_id` from previous call to `task_submit`
|
|
54
59
|
|
|
55
60
|
## Result Presentation
|
|
56
61
|
|
|
@@ -3,11 +3,10 @@ name: gemini-task
|
|
|
3
3
|
description: Delegate UI/UX analysis, frontend review, or design tasks to Gemini with context collection
|
|
4
4
|
user-invocable: false
|
|
5
5
|
allowed-tools:
|
|
6
|
-
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
- mcp__workflow__task_cancel
|
|
6
|
+
- mcp__diy-workflow__task_submit
|
|
7
|
+
- mcp__diy-workflow__task_status
|
|
8
|
+
- mcp__diy-workflow__task_result
|
|
9
|
+
- mcp__diy-workflow__task_cancel
|
|
11
10
|
- mcp__ace-tool__codebase-retrieval
|
|
12
11
|
---
|
|
13
12
|
|
|
@@ -48,9 +47,15 @@ Instructions:
|
|
|
48
47
|
|
|
49
48
|
## Delegation
|
|
50
49
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
-
|
|
50
|
+
All tasks use async submission:
|
|
51
|
+
```
|
|
52
|
+
mcp__diy-workflow__task_submit({ prompt, domain: "frontend" })
|
|
53
|
+
```
|
|
54
|
+
Then retrieve the result (waits automatically):
|
|
55
|
+
```
|
|
56
|
+
mcp__diy-workflow__task_result({ task_id: "<task_id>" })
|
|
57
|
+
```
|
|
58
|
+
Follow-up → pass `session_id` from previous call to `task_submit`
|
|
54
59
|
|
|
55
60
|
## Result Presentation
|
|
56
61
|
|
|
@@ -3,11 +3,10 @@ name: multi-model-task
|
|
|
3
3
|
description: Orchestrate tasks across Codex and Gemini with context collection, search fallback, and progress polling
|
|
4
4
|
user-invocable: false
|
|
5
5
|
allowed-tools:
|
|
6
|
-
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
- mcp__workflow__task_cancel
|
|
6
|
+
- mcp__diy-workflow__task_submit
|
|
7
|
+
- mcp__diy-workflow__task_status
|
|
8
|
+
- mcp__diy-workflow__task_result
|
|
9
|
+
- mcp__diy-workflow__task_cancel
|
|
11
10
|
- mcp__ace-tool__codebase-retrieval
|
|
12
11
|
- mcp__grok-search__web_search
|
|
13
12
|
- mcp__grok-search__web_fetch
|
|
@@ -52,33 +51,25 @@ Activate this skill when the user says:
|
|
|
52
51
|
|
|
53
52
|
## Task Delegation
|
|
54
53
|
|
|
55
|
-
|
|
56
|
-
Use `mcp__workflow__chat` for synchronous single-turn calls:
|
|
54
|
+
All tasks use async `task_submit` + `task_result`:
|
|
57
55
|
```
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
### Long tasks (> 30 seconds expected)
|
|
62
|
-
Use `mcp__workflow__task_submit` + polling:
|
|
63
|
-
```
|
|
64
|
-
mcp__workflow__task_submit({ prompt: "...", domain: "backend" })
|
|
65
|
-
// then poll with task_status every 15-30 seconds
|
|
56
|
+
mcp__diy-workflow__task_submit({ prompt: "...", domain: "backend" })
|
|
57
|
+
// then retrieve with task_result (waits automatically, no polling needed)
|
|
58
|
+
mcp__diy-workflow__task_result({ task_id: "<task_id>" })
|
|
66
59
|
```
|
|
67
60
|
|
|
68
61
|
### Multi-turn conversations
|
|
69
62
|
Pass `session_id` to continue a conversation:
|
|
70
63
|
```
|
|
71
|
-
|
|
64
|
+
mcp__diy-workflow__task_submit({ prompt: "follow-up question", session_id: "<previous session id>", domain: "backend" })
|
|
72
65
|
```
|
|
73
66
|
|
|
74
|
-
##
|
|
67
|
+
## Result Collection
|
|
75
68
|
|
|
76
|
-
When
|
|
77
|
-
1.
|
|
78
|
-
2.
|
|
79
|
-
3.
|
|
80
|
-
4. When status is "completed", retrieve with `task_result`
|
|
81
|
-
5. If status is "failed", report error and suggest retry
|
|
69
|
+
When tasks are submitted:
|
|
70
|
+
1. Call `task_result` for each task — it waits automatically until the task completes (up to 300s by default)
|
|
71
|
+
2. If a task takes longer than expected, `task_result` returns partial output — just call it again
|
|
72
|
+
3. Use `task_status` only if you need a quick progress check without waiting
|
|
82
73
|
|
|
83
74
|
## Result Presentation
|
|
84
75
|
|
package/CLAUDE.md
CHANGED
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
| `mcp__ace-tool__codebase-retrieval` | 生成任何代码之前 | 语义代码检索,用英文查询 |
|
|
18
18
|
| `mcp__grok-search__web_search` | 需要外部文档、最新信息 | 失败时回退到 context7 |
|
|
19
19
|
| `mcp__plugin_context7_context7__query-docs` | grok-search 不可用或失败时 | 库文档查询回退方案 |
|
|
20
|
-
| `mcp__diy-
|
|
21
|
-
| `mcp__diy-
|
|
20
|
+
| `mcp__diy-workflow__task_submit` | 所有 Codex/Gemini 任务 | 用 `domain` 参数智能路由,返回 task_id |
|
|
21
|
+
| `mcp__diy-workflow__task_result` | 获取任务结果 | 自动等待完成(默认 300s),无需轮询 |
|
|
22
22
|
|
|
23
23
|
## 命令速查表
|
|
24
24
|
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
- 信任规则:后端逻辑 → 信任 Codex,前端 UI → 信任 Gemini
|
|
52
52
|
- 模型意见冲突时 → 按领域权威裁决,说明理由
|
|
53
53
|
- 应用建议修改前必须征求用户确认
|
|
54
|
-
-
|
|
54
|
+
- `task_result` 内置长轮询,调用一次即可等待结果,无需反复轮询 `task_status`
|
|
55
55
|
|
|
56
56
|
## Session 复用
|
|
57
57
|
|
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createInterface } from "node:readline";
|
|
3
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync,
|
|
3
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync } from "node:fs";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
@@ -37,15 +37,22 @@ async function askOptional(label, defaultVal) {
|
|
|
37
37
|
function copyDir(src, dest) {
|
|
38
38
|
if (!existsSync(src))
|
|
39
39
|
return 0;
|
|
40
|
-
// Skip if src and dest are the same (running from project dir)
|
|
41
40
|
if (path.resolve(src) === path.resolve(dest))
|
|
42
41
|
return countFiles(src);
|
|
43
42
|
mkdirSync(dest, { recursive: true });
|
|
44
|
-
cpSync(src, dest, { recursive: true, force: true });
|
|
45
43
|
let count = 0;
|
|
46
44
|
const entries = readdirSync(src, { withFileTypes: true });
|
|
47
45
|
for (const e of entries) {
|
|
48
|
-
|
|
46
|
+
const srcPath = path.join(src, e.name);
|
|
47
|
+
const destPath = path.join(dest, e.name);
|
|
48
|
+
if (e.isDirectory()) {
|
|
49
|
+
count += copyDir(srcPath, destPath);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
const content = readFileSync(srcPath);
|
|
53
|
+
writeFileSync(destPath, content);
|
|
54
|
+
count++;
|
|
55
|
+
}
|
|
49
56
|
}
|
|
50
57
|
return count;
|
|
51
58
|
}
|
|
@@ -195,8 +202,8 @@ async function main() {
|
|
|
195
202
|
}
|
|
196
203
|
}
|
|
197
204
|
else {
|
|
198
|
-
|
|
199
|
-
|
|
205
|
+
const content = readFileSync(claudeMdSrc, "utf-8");
|
|
206
|
+
writeFileSync(claudeMdDest, content, "utf-8");
|
|
200
207
|
console.log(" ✓ 已创建 ~/.claude/CLAUDE.md");
|
|
201
208
|
}
|
|
202
209
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
|
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { resolveModelRoute, routeByDomain, MODEL_ROUTES } from "./config.js";
|
|
6
6
|
import { getClient } from "./client.js";
|
|
7
|
-
import { OpenAICompletionProvider
|
|
7
|
+
import { OpenAICompletionProvider } from "./completion.js";
|
|
8
8
|
import { mapErrorToResponse } from "./errors.js";
|
|
9
9
|
import { SessionStore } from "./session.js";
|
|
10
10
|
import { TaskStore, launchTask, formatTaskStatus, formatTaskResult } from "./task.js";
|
|
@@ -45,53 +45,11 @@ function resolveModelAndPrompt(args) {
|
|
|
45
45
|
// ============================================================
|
|
46
46
|
const server = new McpServer({ name: "mmf", version: "0.1.0" });
|
|
47
47
|
// ============================================================
|
|
48
|
-
// Tool 1:
|
|
48
|
+
// Tool 1: task_submit — async task (all calls are async)
|
|
49
49
|
// ============================================================
|
|
50
|
-
server.tool("
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
prompt: z.string().min(1).describe("The prompt to send"),
|
|
54
|
-
system_prompt: z.string().optional().describe("System prompt (overrides domain default)"),
|
|
55
|
-
model: z.string().optional().describe("Model name (e.g. gpt-4o, gemini-2.5-pro). If omitted, uses domain routing."),
|
|
56
|
-
domain: z.enum(["frontend", "backend", "review", "general"]).optional().describe("Smart routing domain"),
|
|
57
|
-
session_id: z.string().optional().describe("Session ID for multi-turn conversation. Omit to start new."),
|
|
58
|
-
}, async (args) => {
|
|
59
|
-
try {
|
|
60
|
-
const { model, systemPrompt, providerName } = resolveModelAndPrompt(args);
|
|
61
|
-
const { route, provider } = getProviderForModel(model);
|
|
62
|
-
let messages;
|
|
63
|
-
let sessionId = args.session_id;
|
|
64
|
-
if (sessionId) {
|
|
65
|
-
// Resume existing session
|
|
66
|
-
const history = sessionStore.addUserMessage(sessionId, args.prompt);
|
|
67
|
-
if (!history)
|
|
68
|
-
return text(`Session not found: ${sessionId}`);
|
|
69
|
-
messages = history;
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
// New session
|
|
73
|
-
sessionId = sessionStore.create(providerName, model, systemPrompt);
|
|
74
|
-
messages = sessionStore.addUserMessage(sessionId, args.prompt);
|
|
75
|
-
}
|
|
76
|
-
const result = await provider.complete({
|
|
77
|
-
model,
|
|
78
|
-
messages: messages,
|
|
79
|
-
});
|
|
80
|
-
sessionStore.addAssistantMessage(sessionId, result.content);
|
|
81
|
-
const usageLine = formatUsageLine(result);
|
|
82
|
-
return text(`[Session: ${sessionId} | Provider: ${providerName}]\n\n${result.content}${usageLine}`);
|
|
83
|
-
}
|
|
84
|
-
catch (error) {
|
|
85
|
-
const { providerName } = resolveModelAndPrompt(args);
|
|
86
|
-
return mapErrorToResponse(error, { serviceName: providerName, model: args.model });
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
// ============================================================
|
|
90
|
-
// Tool 2: task_submit — async long-running task
|
|
91
|
-
// ============================================================
|
|
92
|
-
server.tool("task_submit", "Submit a long-running task to Codex or Gemini. Returns immediately with a task ID. " +
|
|
93
|
-
"Use task_status to poll progress (shows partial streaming output). " +
|
|
94
|
-
"Use task_result to get the final result when completed.", {
|
|
50
|
+
server.tool("task_submit", "Submit a task to Codex or Gemini. Returns immediately with a task ID. " +
|
|
51
|
+
"Then call task_result to get the result — it waits automatically until the task completes. " +
|
|
52
|
+
"Use `domain` for smart routing (frontend→Gemini, backend→Codex) or specify `model` directly.", {
|
|
95
53
|
prompt: z.string().min(1).describe("The prompt/goal for the task"),
|
|
96
54
|
system_prompt: z.string().optional().describe("System prompt (overrides domain default)"),
|
|
97
55
|
model: z.string().optional().describe("Model name"),
|
|
@@ -127,9 +85,10 @@ server.tool("task_submit", "Submit a long-running task to Codex or Gemini. Retur
|
|
|
127
85
|
}
|
|
128
86
|
});
|
|
129
87
|
// ============================================================
|
|
130
|
-
// Tool
|
|
88
|
+
// Tool 2: task_status — optional progress check (debug use)
|
|
131
89
|
// ============================================================
|
|
132
|
-
server.tool("task_status", "Check the progress of a running task. Returns status, elapsed time, and partial streaming output."
|
|
90
|
+
server.tool("task_status", "Check the progress of a running task. Returns status, elapsed time, and partial streaming output. " +
|
|
91
|
+
"Prefer task_result with timeout instead — this tool is mainly for debugging.", {
|
|
133
92
|
task_id: z.string().describe("The task ID returned by task_submit"),
|
|
134
93
|
}, async (args) => {
|
|
135
94
|
const task = taskStore.get(args.task_id);
|
|
@@ -138,16 +97,19 @@ server.tool("task_status", "Check the progress of a running task. Returns status
|
|
|
138
97
|
return text(formatTaskStatus(task));
|
|
139
98
|
});
|
|
140
99
|
// ============================================================
|
|
141
|
-
// Tool
|
|
100
|
+
// Tool 3: task_result — wait and get result (long-polling)
|
|
142
101
|
// ============================================================
|
|
143
|
-
server.tool("task_result", "Get the
|
|
102
|
+
server.tool("task_result", "Get the result of a task. If the task is still running, waits until it completes. " +
|
|
103
|
+
"No need to poll task_status — just call this once after task_submit.", {
|
|
144
104
|
task_id: z.string().describe("The task ID returned by task_submit"),
|
|
105
|
+
timeout: z.number().min(0).default(0).describe("Max seconds to wait (0 = wait until done, default 0)"),
|
|
145
106
|
}, async (args) => {
|
|
146
|
-
const
|
|
107
|
+
const timeoutMs = args.timeout > 0 ? args.timeout * 1000 : 0;
|
|
108
|
+
const task = await taskStore.waitForCompletion(args.task_id, timeoutMs);
|
|
147
109
|
if (!task)
|
|
148
110
|
return text(`Task not found: ${args.task_id}`);
|
|
149
111
|
if (task.status === "running") {
|
|
150
|
-
return text(`Task is still running.
|
|
112
|
+
return text(`Task is still running after ${args.timeout}s wait. Call task_result again to continue waiting.\n\n${formatTaskStatus(task)}`);
|
|
151
113
|
}
|
|
152
114
|
if (task.status === "failed") {
|
|
153
115
|
return text(`Task failed: ${task.error ?? "unknown error"}`);
|
|
@@ -158,7 +120,7 @@ server.tool("task_result", "Get the full result of a completed task, including t
|
|
|
158
120
|
return text(formatTaskResult(task));
|
|
159
121
|
});
|
|
160
122
|
// ============================================================
|
|
161
|
-
// Tool
|
|
123
|
+
// Tool 4: task_cancel — cancel running task
|
|
162
124
|
// ============================================================
|
|
163
125
|
server.tool("task_cancel", "Cancel a running task.", {
|
|
164
126
|
task_id: z.string().describe("The task ID to cancel"),
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,wBAAwB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/task.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export declare class TaskStore {
|
|
|
8
8
|
complete(taskId: string, result: CompletionResult): void;
|
|
9
9
|
fail(taskId: string, error: string): void;
|
|
10
10
|
cancel(taskId: string): boolean;
|
|
11
|
+
waitForCompletion(taskId: string, timeoutMs: number): Promise<TaskState | undefined>;
|
|
11
12
|
private cleanup;
|
|
12
13
|
}
|
|
13
14
|
export declare function launchTask(taskStore: TaskStore, sessionStore: SessionStore, completionProvider: CompletionProvider, task: TaskState, messages: Array<{
|
package/dist/task.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../src/task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAgC;IAE7C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS;IAmBpF,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI1C,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOhD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAUxD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IASzC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../src/task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAgC;IAE7C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS;IAmBpF,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI1C,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOhD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAUxD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IASzC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAUzB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAa1F,OAAO,CAAC,OAAO;CAYhB;AAMD,wBAAgB,UAAU,CACxB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,kBAAkB,EACtC,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAC1E,IAAI,CA6BN;AAMD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAiBxD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAcxD"}
|
package/dist/task.js
CHANGED
|
@@ -58,6 +58,19 @@ export class TaskStore {
|
|
|
58
58
|
task.abortController = undefined;
|
|
59
59
|
return true;
|
|
60
60
|
}
|
|
61
|
+
async waitForCompletion(taskId, timeoutMs) {
|
|
62
|
+
const task = this.tasks.get(taskId);
|
|
63
|
+
if (!task)
|
|
64
|
+
return undefined;
|
|
65
|
+
if (task.status !== "running")
|
|
66
|
+
return task;
|
|
67
|
+
const hasTimeout = timeoutMs > 0;
|
|
68
|
+
const deadline = hasTimeout ? Date.now() + timeoutMs : 0;
|
|
69
|
+
while (task.status === "running" && (!hasTimeout || Date.now() < deadline)) {
|
|
70
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
71
|
+
}
|
|
72
|
+
return task;
|
|
73
|
+
}
|
|
61
74
|
cleanup() {
|
|
62
75
|
const now = Date.now();
|
|
63
76
|
for (const [id, task] of this.tasks) {
|
package/dist/task.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.js","sourceRoot":"","sources":["../src/task.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../src/task.ts"],"names":[],"mappings":"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"}
|