multi-model-flow 0.1.5 → 0.2.1
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 +11 -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 +252 -116
- 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,10 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createInterface } from "node:readline";
|
|
3
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync } from "node:fs";
|
|
3
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync, rmSync } 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));
|
|
7
7
|
const PKG_ROOT = path.resolve(__dirname, "..");
|
|
8
|
+
const HOME = process.env.HOME || process.env.USERPROFILE || "";
|
|
9
|
+
const CLAUDE_DIR = path.join(HOME, ".claude");
|
|
10
|
+
const MCP_PATH = path.join(HOME, ".claude.json");
|
|
11
|
+
const CLAUDE_MD_PATH = path.join(CLAUDE_DIR, "CLAUDE.md");
|
|
12
|
+
const MMF_COMMANDS = ["mmf-analyze.md", "mmf-codex.md", "mmf-gemini.md", "mmf-review.md", "mmf-workflow.md"];
|
|
13
|
+
const MMF_SKILLS = ["codex-task", "gemini-task", "multi-model-task"];
|
|
14
|
+
const MCP_SERVER_KEY = "diy-workflow";
|
|
8
15
|
// ============================================================
|
|
9
16
|
// Readline helpers
|
|
10
17
|
// ============================================================
|
|
@@ -30,9 +37,24 @@ async function askOptional(label, defaultVal) {
|
|
|
30
37
|
const answer = await ask(` ? ${label} (${hint}): `);
|
|
31
38
|
return answer || defaultVal;
|
|
32
39
|
}
|
|
33
|
-
// PLACEHOLDER_FOR_APPEND_1
|
|
34
40
|
// ============================================================
|
|
35
|
-
//
|
|
41
|
+
// JSON helpers
|
|
42
|
+
// ============================================================
|
|
43
|
+
function loadJson(filePath) {
|
|
44
|
+
if (!existsSync(filePath))
|
|
45
|
+
return {};
|
|
46
|
+
try {
|
|
47
|
+
return JSON.parse(readFileSync(filePath, "utf-8"));
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return {};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function saveJson(filePath, data) {
|
|
54
|
+
writeFileSync(filePath, JSON.stringify(data, null, 2) + "\n", "utf-8");
|
|
55
|
+
}
|
|
56
|
+
// ============================================================
|
|
57
|
+
// File helpers
|
|
36
58
|
// ============================================================
|
|
37
59
|
function copyDir(src, dest) {
|
|
38
60
|
if (!existsSync(src))
|
|
@@ -49,8 +71,7 @@ function copyDir(src, dest) {
|
|
|
49
71
|
count += copyDir(srcPath, destPath);
|
|
50
72
|
}
|
|
51
73
|
else {
|
|
52
|
-
|
|
53
|
-
writeFileSync(destPath, content);
|
|
74
|
+
writeFileSync(destPath, readFileSync(srcPath));
|
|
54
75
|
count++;
|
|
55
76
|
}
|
|
56
77
|
}
|
|
@@ -66,147 +87,204 @@ function countFiles(dir) {
|
|
|
66
87
|
}
|
|
67
88
|
return count;
|
|
68
89
|
}
|
|
90
|
+
function getServerEntryPath() {
|
|
91
|
+
return path.join(PKG_ROOT, "dist", "index.js").replace(/\\/g, "/");
|
|
92
|
+
}
|
|
69
93
|
// ============================================================
|
|
70
|
-
//
|
|
94
|
+
// Remove MMF files
|
|
71
95
|
// ============================================================
|
|
72
|
-
function
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
96
|
+
function removeMMFFiles() {
|
|
97
|
+
let removed = 0;
|
|
98
|
+
// Remove commands
|
|
99
|
+
const cmdDir = path.join(CLAUDE_DIR, "commands");
|
|
100
|
+
for (const f of MMF_COMMANDS) {
|
|
101
|
+
const p = path.join(cmdDir, f);
|
|
102
|
+
if (existsSync(p)) {
|
|
103
|
+
rmSync(p);
|
|
104
|
+
removed++;
|
|
105
|
+
}
|
|
77
106
|
}
|
|
78
|
-
|
|
79
|
-
|
|
107
|
+
// Remove skills
|
|
108
|
+
const skillDir = path.join(CLAUDE_DIR, "skills");
|
|
109
|
+
for (const d of MMF_SKILLS) {
|
|
110
|
+
const p = path.join(skillDir, d);
|
|
111
|
+
if (existsSync(p)) {
|
|
112
|
+
rmSync(p, { recursive: true });
|
|
113
|
+
removed++;
|
|
114
|
+
}
|
|
80
115
|
}
|
|
116
|
+
// Remove MMF section from CLAUDE.md
|
|
117
|
+
if (existsSync(CLAUDE_MD_PATH)) {
|
|
118
|
+
const content = readFileSync(CLAUDE_MD_PATH, "utf-8");
|
|
119
|
+
if (content.includes("# MMF")) {
|
|
120
|
+
const cleaned = content.replace(/\n*# MMF[\s\S]*$/, "").trimEnd();
|
|
121
|
+
if (cleaned) {
|
|
122
|
+
writeFileSync(CLAUDE_MD_PATH, cleaned + "\n", "utf-8");
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
rmSync(CLAUDE_MD_PATH);
|
|
126
|
+
}
|
|
127
|
+
removed++;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return removed;
|
|
81
131
|
}
|
|
82
|
-
|
|
83
|
-
|
|
132
|
+
// ============================================================
|
|
133
|
+
// Install MMF files
|
|
134
|
+
// ============================================================
|
|
135
|
+
function installMMFFiles() {
|
|
136
|
+
const cmdSrc = path.join(PKG_ROOT, ".claude", "commands");
|
|
137
|
+
const cmdDest = path.join(CLAUDE_DIR, "commands");
|
|
138
|
+
const commands = copyDir(cmdSrc, cmdDest);
|
|
139
|
+
const skillSrc = path.join(PKG_ROOT, ".claude", "skills");
|
|
140
|
+
const skillDest = path.join(CLAUDE_DIR, "skills");
|
|
141
|
+
const skills = copyDir(skillSrc, skillDest);
|
|
142
|
+
// Install CLAUDE.md
|
|
143
|
+
const claudeMdSrc = path.join(PKG_ROOT, "CLAUDE.md");
|
|
144
|
+
if (existsSync(claudeMdSrc) && path.resolve(claudeMdSrc) !== path.resolve(CLAUDE_MD_PATH)) {
|
|
145
|
+
const newContent = readFileSync(claudeMdSrc, "utf-8");
|
|
146
|
+
if (existsSync(CLAUDE_MD_PATH)) {
|
|
147
|
+
const existing = readFileSync(CLAUDE_MD_PATH, "utf-8");
|
|
148
|
+
if (!existing.includes("# MMF")) {
|
|
149
|
+
writeFileSync(CLAUDE_MD_PATH, existing + "\n\n" + newContent, "utf-8");
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
// Replace existing MMF section
|
|
153
|
+
const cleaned = existing.replace(/\n*# MMF[\s\S]*$/, "").trimEnd();
|
|
154
|
+
writeFileSync(CLAUDE_MD_PATH, (cleaned ? cleaned + "\n\n" : "") + newContent, "utf-8");
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
mkdirSync(CLAUDE_DIR, { recursive: true });
|
|
159
|
+
writeFileSync(CLAUDE_MD_PATH, newContent, "utf-8");
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return { commands, skills };
|
|
84
163
|
}
|
|
85
|
-
|
|
86
|
-
|
|
164
|
+
// ============================================================
|
|
165
|
+
// MCP config
|
|
166
|
+
// ============================================================
|
|
167
|
+
function getMcpEnv() {
|
|
168
|
+
const config = loadJson(MCP_PATH);
|
|
169
|
+
return config.mcpServers?.[MCP_SERVER_KEY]?.env ?? null;
|
|
170
|
+
}
|
|
171
|
+
function writeMcpConfig(env) {
|
|
172
|
+
const config = loadJson(MCP_PATH);
|
|
173
|
+
if (!config.mcpServers)
|
|
174
|
+
config.mcpServers = {};
|
|
175
|
+
config.mcpServers[MCP_SERVER_KEY] = {
|
|
176
|
+
type: "stdio",
|
|
177
|
+
command: "node",
|
|
178
|
+
args: [getServerEntryPath()],
|
|
179
|
+
env,
|
|
180
|
+
};
|
|
181
|
+
saveJson(MCP_PATH, config);
|
|
182
|
+
}
|
|
183
|
+
function removeMcpConfig() {
|
|
184
|
+
const config = loadJson(MCP_PATH);
|
|
185
|
+
if (config.mcpServers?.[MCP_SERVER_KEY]) {
|
|
186
|
+
delete config.mcpServers[MCP_SERVER_KEY];
|
|
187
|
+
saveJson(MCP_PATH, config);
|
|
188
|
+
return true;
|
|
189
|
+
}
|
|
190
|
+
return false;
|
|
87
191
|
}
|
|
88
192
|
// ============================================================
|
|
89
193
|
// API Config Prompt
|
|
90
194
|
// ============================================================
|
|
91
|
-
async function promptApiConfig() {
|
|
195
|
+
async function promptApiConfig(defaults) {
|
|
92
196
|
console.log(" 步骤 1/2: 配置 Codex (OpenAI)");
|
|
93
197
|
console.log(" ─────────────────────────────────");
|
|
94
198
|
const codexKey = await askRequired("API Key");
|
|
95
|
-
const codexUrl = await askOptional("接口地址", "https://api.openai.com/v1");
|
|
96
|
-
const codexModel = await askWithDefault("模型名称", "gpt-5.4");
|
|
199
|
+
const codexUrl = await askOptional("接口地址", defaults?.OPENAI_BASE_URL ?? "https://api.openai.com/v1");
|
|
200
|
+
const codexModel = await askWithDefault("模型名称", defaults?.OPENAI_MODEL ?? "gpt-5.4");
|
|
97
201
|
console.log();
|
|
98
202
|
console.log(" 步骤 2/2: 配置 Gemini");
|
|
99
203
|
console.log(" ─────────────────────────────────");
|
|
100
204
|
const geminiKey = await askRequired("API Key");
|
|
101
|
-
const geminiUrl = await askOptional("接口地址", "https://generativelanguage.googleapis.com/v1beta/openai/");
|
|
102
|
-
const geminiModel = await askWithDefault("模型名称", "gemini-3.1-pro-preview");
|
|
205
|
+
const geminiUrl = await askOptional("接口地址", defaults?.GEMINI_BASE_URL ?? "https://generativelanguage.googleapis.com/v1beta/openai/");
|
|
206
|
+
const geminiModel = await askWithDefault("模型名称", defaults?.GEMINI_MODEL ?? "gemini-3.1-pro-preview");
|
|
103
207
|
console.log();
|
|
104
|
-
return {
|
|
208
|
+
return {
|
|
209
|
+
OPENAI_API_KEY: codexKey,
|
|
210
|
+
OPENAI_BASE_URL: codexUrl,
|
|
211
|
+
OPENAI_MODEL: codexModel,
|
|
212
|
+
GEMINI_API_KEY: geminiKey,
|
|
213
|
+
GEMINI_BASE_URL: geminiUrl,
|
|
214
|
+
GEMINI_MODEL: geminiModel,
|
|
215
|
+
};
|
|
105
216
|
}
|
|
106
|
-
//
|
|
217
|
+
// PLACEHOLDER_CLI_ACTIONS
|
|
107
218
|
// ============================================================
|
|
108
|
-
//
|
|
219
|
+
// Actions
|
|
109
220
|
// ============================================================
|
|
110
|
-
async function
|
|
111
|
-
const command = process.argv[2];
|
|
112
|
-
if (command === "--help" || command === "-h") {
|
|
113
|
-
console.log("用法: mmflow [init]");
|
|
114
|
-
console.log(" 在当前项目中初始化多模型协作工作流");
|
|
115
|
-
process.exit(0);
|
|
116
|
-
}
|
|
221
|
+
async function doInstall() {
|
|
117
222
|
console.log();
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const mcpPath = path.join(homeDir, ".claude.json");
|
|
125
|
-
const mcpConfig = loadJson(mcpPath);
|
|
126
|
-
const existingServer = mcpConfig.mcpServers?.["diy-workflow"];
|
|
127
|
-
let codexKey;
|
|
128
|
-
let codexUrl;
|
|
129
|
-
let codexModel;
|
|
130
|
-
let geminiKey;
|
|
131
|
-
let geminiUrl;
|
|
132
|
-
let geminiModel;
|
|
133
|
-
if (existingServer?.env?.OPENAI_API_KEY) {
|
|
134
|
-
// MCP already configured — skip API config
|
|
135
|
-
console.log(" 检测到已有 MCP 配置,跳过 API 配置");
|
|
136
|
-
console.log(` Codex: ${existingServer.env.OPENAI_MODEL ?? "gpt-5.4"} @ ${existingServer.env.OPENAI_BASE_URL ?? "默认"}`);
|
|
137
|
-
console.log(` Gemini: ${existingServer.env.GEMINI_MODEL ?? "gemini-3.1-pro-preview"} @ ${existingServer.env.GEMINI_BASE_URL ?? "默认"}`);
|
|
223
|
+
const existingEnv = getMcpEnv();
|
|
224
|
+
let env;
|
|
225
|
+
if (existingEnv?.OPENAI_API_KEY) {
|
|
226
|
+
console.log(" 检测到已有 MCP 配置:");
|
|
227
|
+
console.log(` Codex: ${existingEnv.OPENAI_MODEL ?? "gpt-5.4"} @ ${existingEnv.OPENAI_BASE_URL ?? "默认"}`);
|
|
228
|
+
console.log(` Gemini: ${existingEnv.GEMINI_MODEL ?? "gemini-3.1-pro-preview"} @ ${existingEnv.GEMINI_BASE_URL ?? "默认"}`);
|
|
138
229
|
console.log();
|
|
139
230
|
const reconfig = await ask(" ? 是否重新配置 API?(y/N): ");
|
|
140
|
-
|
|
141
|
-
({ codexKey, codexUrl, codexModel, geminiKey, geminiUrl, geminiModel } =
|
|
142
|
-
await promptApiConfig());
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
codexKey = existingServer.env.OPENAI_API_KEY;
|
|
146
|
-
codexUrl = existingServer.env.OPENAI_BASE_URL ?? "https://api.openai.com/v1";
|
|
147
|
-
codexModel = existingServer.env.OPENAI_MODEL ?? "gpt-5.4";
|
|
148
|
-
geminiKey = existingServer.env.GEMINI_API_KEY ?? "";
|
|
149
|
-
geminiUrl = existingServer.env.GEMINI_BASE_URL ?? "https://generativelanguage.googleapis.com/v1beta/openai/";
|
|
150
|
-
geminiModel = existingServer.env.GEMINI_MODEL ?? "gemini-3.1-pro-preview";
|
|
151
|
-
}
|
|
231
|
+
env = reconfig.toLowerCase() === "y" ? await promptApiConfig(existingEnv) : existingEnv;
|
|
152
232
|
}
|
|
153
233
|
else {
|
|
154
|
-
|
|
155
|
-
await promptApiConfig());
|
|
234
|
+
env = await promptApiConfig();
|
|
156
235
|
}
|
|
157
|
-
// ── Install ────────────────────────────────────────────
|
|
158
236
|
console.log(" 安装中...");
|
|
159
237
|
console.log(" ─────────────────────────────────");
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
console.log(` ✓ 已安装 ${cmdCount} 个命令到 ~/.claude/commands/`);
|
|
165
|
-
// Copy skills
|
|
166
|
-
const skillSrc = path.join(PKG_ROOT, ".claude", "skills");
|
|
167
|
-
const skillDest = path.join(claudeDir, "skills");
|
|
168
|
-
const skillCount = copyDir(skillSrc, skillDest);
|
|
169
|
-
console.log(` ✓ 已安装 ${skillCount} 个技能到 ~/.claude/skills/`);
|
|
170
|
-
// Register MCP server in .mcp.json
|
|
171
|
-
if (!mcpConfig.mcpServers)
|
|
172
|
-
mcpConfig.mcpServers = {};
|
|
173
|
-
mcpConfig.mcpServers["diy-workflow"] = {
|
|
174
|
-
type: "stdio",
|
|
175
|
-
command: "node",
|
|
176
|
-
args: [getServerEntryPath()],
|
|
177
|
-
env: {
|
|
178
|
-
OPENAI_API_KEY: codexKey,
|
|
179
|
-
OPENAI_BASE_URL: codexUrl,
|
|
180
|
-
OPENAI_MODEL: codexModel,
|
|
181
|
-
GEMINI_API_KEY: geminiKey,
|
|
182
|
-
GEMINI_BASE_URL: geminiUrl,
|
|
183
|
-
GEMINI_MODEL: geminiModel,
|
|
184
|
-
},
|
|
185
|
-
};
|
|
186
|
-
saveJson(mcpPath, mcpConfig);
|
|
238
|
+
const { commands, skills } = installMMFFiles();
|
|
239
|
+
console.log(` ✓ 已安装 ${commands} 个命令到 ~/.claude/commands/`);
|
|
240
|
+
console.log(` ✓ 已安装 ${skills} 个技能到 ~/.claude/skills/`);
|
|
241
|
+
writeMcpConfig(env);
|
|
187
242
|
console.log(" ✓ 已注册 MCP 服务到 ~/.claude.json");
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
243
|
+
console.log(" ✓ 已更新 ~/.claude/CLAUDE.md");
|
|
244
|
+
printSuccess();
|
|
245
|
+
}
|
|
246
|
+
async function doUpdate() {
|
|
247
|
+
console.log();
|
|
248
|
+
const existingEnv = getMcpEnv();
|
|
249
|
+
if (!existingEnv) {
|
|
250
|
+
console.log(" 未检测到已有安装,将执行全新安装。");
|
|
251
|
+
return doInstall();
|
|
252
|
+
}
|
|
253
|
+
console.log(" 更新中...");
|
|
254
|
+
console.log(" ─────────────────────────────────");
|
|
255
|
+
// Step 1: Remove old files
|
|
256
|
+
const removed = removeMMFFiles();
|
|
257
|
+
console.log(` ✓ 已清理 ${removed} 个旧文件`);
|
|
258
|
+
// Step 2: Reinstall fresh files
|
|
259
|
+
const { commands, skills } = installMMFFiles();
|
|
260
|
+
console.log(` ✓ 已安装 ${commands} 个命令到 ~/.claude/commands/`);
|
|
261
|
+
console.log(` ✓ 已安装 ${skills} 个技能到 ~/.claude/skills/`);
|
|
262
|
+
// Step 3: Rewrite MCP config (preserve env, update server path)
|
|
263
|
+
writeMcpConfig(existingEnv);
|
|
264
|
+
console.log(" ✓ 已更新 MCP 服务配置(API 配置已保留)");
|
|
265
|
+
console.log(" ✓ 已更新 ~/.claude/CLAUDE.md");
|
|
266
|
+
printSuccess();
|
|
267
|
+
}
|
|
268
|
+
async function doUninstall() {
|
|
269
|
+
console.log();
|
|
270
|
+
const confirm = await ask(" ? 确认卸载 MMFlow?(y/N): ");
|
|
271
|
+
if (confirm.toLowerCase() !== "y") {
|
|
272
|
+
console.log(" 已取消。");
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
console.log();
|
|
276
|
+
console.log(" 卸载中...");
|
|
277
|
+
console.log(" ─────────────────────────────────");
|
|
278
|
+
const removed = removeMMFFiles();
|
|
279
|
+
console.log(` ✓ 已清理 ${removed} 个文件`);
|
|
280
|
+
if (removeMcpConfig()) {
|
|
281
|
+
console.log(" ✓ 已移除 MCP 服务配置");
|
|
209
282
|
}
|
|
283
|
+
console.log();
|
|
284
|
+
console.log(" MMFlow 已卸载。");
|
|
285
|
+
console.log();
|
|
286
|
+
}
|
|
287
|
+
function printSuccess() {
|
|
210
288
|
console.log();
|
|
211
289
|
console.log(" 完成!重启 Claude Code 即可使用。");
|
|
212
290
|
console.log();
|
|
@@ -217,10 +295,68 @@ async function main() {
|
|
|
217
295
|
console.log(" /mmf-review — 双模型代码审查");
|
|
218
296
|
console.log(" /mmf-analyze — 并行分析");
|
|
219
297
|
console.log();
|
|
298
|
+
}
|
|
299
|
+
function printBanner() {
|
|
300
|
+
console.log();
|
|
301
|
+
console.log(" ╔══════════════════════════════════════╗");
|
|
302
|
+
console.log(" ║ MMFlow - 多模型协作工作流 ║");
|
|
303
|
+
console.log(" ╚══════════════════════════════════════╝");
|
|
304
|
+
console.log();
|
|
305
|
+
}
|
|
306
|
+
// ============================================================
|
|
307
|
+
// Main
|
|
308
|
+
// ============================================================
|
|
309
|
+
async function main() {
|
|
310
|
+
const command = process.argv[2];
|
|
311
|
+
if (command === "--help" || command === "-h") {
|
|
312
|
+
console.log("用法: mmflow [install|update|uninstall]");
|
|
313
|
+
console.log();
|
|
314
|
+
console.log(" install 安装 MMFlow(默认)");
|
|
315
|
+
console.log(" update 更新 MMFlow(保留 API 配置)");
|
|
316
|
+
console.log(" uninstall 卸载 MMFlow");
|
|
317
|
+
process.exit(0);
|
|
318
|
+
}
|
|
319
|
+
printBanner();
|
|
320
|
+
// Direct subcommand
|
|
321
|
+
if (command === "install") {
|
|
322
|
+
await doInstall();
|
|
323
|
+
rl.close();
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
if (command === "update") {
|
|
327
|
+
await doUpdate();
|
|
328
|
+
rl.close();
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
if (command === "uninstall") {
|
|
332
|
+
await doUninstall();
|
|
333
|
+
rl.close();
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
// Interactive menu
|
|
337
|
+
console.log(" 请选择操作:");
|
|
338
|
+
console.log(" 1. 安装");
|
|
339
|
+
console.log(" 2. 更新(保留 API 配置)");
|
|
340
|
+
console.log(" 3. 卸载");
|
|
341
|
+
console.log();
|
|
342
|
+
const choice = await ask(" ? 请输入编号 (1/2/3): ");
|
|
343
|
+
switch (choice) {
|
|
344
|
+
case "1":
|
|
345
|
+
await doInstall();
|
|
346
|
+
break;
|
|
347
|
+
case "2":
|
|
348
|
+
await doUpdate();
|
|
349
|
+
break;
|
|
350
|
+
case "3":
|
|
351
|
+
await doUninstall();
|
|
352
|
+
break;
|
|
353
|
+
default:
|
|
354
|
+
console.log(" 无效选项,退出。");
|
|
355
|
+
}
|
|
220
356
|
rl.close();
|
|
221
357
|
}
|
|
222
358
|
main().catch((err) => {
|
|
223
|
-
console.error("
|
|
359
|
+
console.error("执行失败:", err);
|
|
224
360
|
rl.close();
|
|
225
361
|
process.exit(1);
|
|
226
362
|
});
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
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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"}
|