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 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-workflow__chat` | 快速 Codex/Gemini 单轮任务 | 用 `domain` 参数智能路由 |
21
- | `mcp__diy-workflow__task_submit` | 长时间 Codex/Gemini 任务 | `task_status` 轮询,`task_result` 获取结果 |
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
- - 长任务每 15-30 秒轮询一次 `task_status`
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
- mcp__workflow__task_submit({
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
- mcp__workflow__task_submit({
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: Poll and Collect
39
+ ## Step 3: Collect Results
40
40
 
41
- Poll both tasks every 15-30 seconds using `task_status`. Retrieve results with `task_result` when complete.
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: Determine Task Length
16
+ ## Step 2: Submit Task
17
17
 
18
- ### Quick task (simple question, short analysis)
19
- Use synchronous `chat`:
18
+ All tasks use async `task_submit`:
20
19
  ```
21
- mcp__workflow__chat({
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
- ### Long task (deep analysis, large codebase review, diff generation)
28
- Use async `task_submit`:
26
+ Then retrieve the result (waits automatically, no polling needed):
29
27
  ```
30
- mcp__workflow__task_submit({
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
- mcp__workflow__chat({
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: Determine Task Length
16
+ ## Step 2: Submit Task
17
17
 
18
- ### Quick task (simple question, short analysis)
19
- Use synchronous `chat`:
18
+ All tasks use async `task_submit`:
20
19
  ```
21
- mcp__workflow__chat({
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
- ### Long task (deep analysis, large component review, diff generation)
28
- Use async `task_submit`:
26
+ Then retrieve the result (waits automatically, no polling needed):
29
27
  ```
30
- mcp__workflow__task_submit({
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
- mcp__workflow__chat({
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
- mcp__workflow__task_submit({
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
- mcp__workflow__task_submit({
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: Poll Progress
36
+ ## Step 3: Collect Results
37
37
 
38
- Poll both tasks every 15-30 seconds using `task_status`. When complete, retrieve with `task_result`.
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
- mcp__workflow__task_submit({
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
- mcp__workflow__task_submit({
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: Progress Monitoring [模式:轮询]
63
+ ## Phase 3: Collect Results [模式:收集]
64
64
 
65
- Poll both tasks every 15-30 seconds:
65
+ Retrieve both results (each call waits automatically until the task completes, no polling needed):
66
66
  ```
67
- mcp__workflow__task_status({ task_id: "<codex_task_id>" })
68
- mcp__workflow__task_status({ task_id: "<gemini_task_id>" })
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
- mcp__workflow__task_submit({
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.
@@ -0,0 +1,11 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(npx tsc:*)",
5
+ "Bash(npm run:*)",
6
+ "Bash(npm publish:*)",
7
+ "Bash(npm view:*)",
8
+ "Bash(node dist/cli.js --help)"
9
+ ]
10
+ }
11
+ }
@@ -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
- - mcp__workflow__chat
7
- - mcp__workflow__task_submit
8
- - mcp__workflow__task_status
9
- - mcp__workflow__task_result
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
- - Quick tasks `mcp__workflow__chat({ prompt, domain: "backend" })`
52
- - Long tasks → `mcp__workflow__task_submit({ prompt, domain: "backend" })` + poll every 15-30s
53
- - Follow-up pass `session_id` from previous call
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
- - mcp__workflow__chat
7
- - mcp__workflow__task_submit
8
- - mcp__workflow__task_status
9
- - mcp__workflow__task_result
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
- - Quick tasks `mcp__workflow__chat({ prompt, domain: "frontend" })`
52
- - Long tasks → `mcp__workflow__task_submit({ prompt, domain: "frontend" })` + poll every 15-30s
53
- - Follow-up pass `session_id` from previous call
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
- - mcp__workflow__chat
7
- - mcp__workflow__task_submit
8
- - mcp__workflow__task_status
9
- - mcp__workflow__task_result
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
- ### Quick tasks (< 30 seconds expected)
56
- Use `mcp__workflow__chat` for synchronous single-turn calls:
54
+ All tasks use async `task_submit` + `task_result`:
57
55
  ```
58
- mcp__workflow__chat({ prompt: "...", domain: "backend" })
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
- mcp__workflow__chat({ prompt: "follow-up question", session_id: "<previous session id>" })
64
+ mcp__diy-workflow__task_submit({ prompt: "follow-up question", session_id: "<previous session id>", domain: "backend" })
72
65
  ```
73
66
 
74
- ## Polling Protocol
67
+ ## Result Collection
75
68
 
76
- When a task is submitted:
77
- 1. Wait 15 seconds before first poll
78
- 2. Poll every 15-30 seconds with `task_status`
79
- 3. Report progress to user (show partial output if meaningful)
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-workflow__chat` | 快速 Codex/Gemini 单轮任务 | 用 `domain` 参数智能路由 |
21
- | `mcp__diy-workflow__task_submit` | 长时间 Codex/Gemini 任务 | `task_status` 轮询,`task_result` 获取结果 |
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
- - 长任务每 15-30 秒轮询一次 `task_status`
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
- // File installation helpers
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
- const content = readFileSync(srcPath);
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
- // MCP config helpers
94
+ // Remove MMF files
71
95
  // ============================================================
72
- function loadJson(filePath) {
73
- if (!existsSync(filePath))
74
- return {};
75
- try {
76
- return JSON.parse(readFileSync(filePath, "utf-8"));
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
- catch {
79
- return {};
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
- function saveJson(filePath, data) {
83
- writeFileSync(filePath, JSON.stringify(data, null, 2) + "\n", "utf-8");
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
- function getServerEntryPath() {
86
- return path.join(PKG_ROOT, "dist", "index.js").replace(/\\/g, "/");
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 { codexKey, codexUrl, codexModel, geminiKey, geminiUrl, geminiModel };
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
- // PLACEHOLDER_FOR_APPEND_2
217
+ // PLACEHOLDER_CLI_ACTIONS
107
218
  // ============================================================
108
- // Main
219
+ // Actions
109
220
  // ============================================================
110
- async function main() {
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
- console.log(" ╔══════════════════════════════════════╗");
119
- console.log(" ║ MMFlow - 多模型协作工作流 ║");
120
- console.log(" ╚══════════════════════════════════════╝");
121
- console.log();
122
- const homeDir = process.env.HOME || process.env.USERPROFILE || "";
123
- const claudeDir = path.join(homeDir, ".claude");
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
- if (reconfig.toLowerCase() === "y") {
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
- ({ codexKey, codexUrl, codexModel, geminiKey, geminiUrl, geminiModel } =
155
- await promptApiConfig());
234
+ env = await promptApiConfig();
156
235
  }
157
- // ── Install ────────────────────────────────────────────
158
236
  console.log(" 安装中...");
159
237
  console.log(" ─────────────────────────────────");
160
- // Copy commands
161
- const cmdSrc = path.join(PKG_ROOT, ".claude", "commands");
162
- const cmdDest = path.join(claudeDir, "commands");
163
- const cmdCount = copyDir(cmdSrc, cmdDest);
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
- // Copy CLAUDE.md
189
- const claudeMdSrc = path.join(PKG_ROOT, "CLAUDE.md");
190
- const claudeMdDest = path.join(claudeDir, "CLAUDE.md");
191
- if (existsSync(claudeMdSrc) && path.resolve(claudeMdSrc) !== path.resolve(claudeMdDest)) {
192
- // Append to existing or create new
193
- if (existsSync(claudeMdDest)) {
194
- const existing = readFileSync(claudeMdDest, "utf-8");
195
- if (!existing.includes("MMF")) {
196
- const content = readFileSync(claudeMdSrc, "utf-8");
197
- writeFileSync(claudeMdDest, existing + "\n\n" + content, "utf-8");
198
- console.log(" ✓ 已追加工作流配置到 ~/.claude/CLAUDE.md");
199
- }
200
- else {
201
- console.log(" - ~/.claude/CLAUDE.md 已包含工作流配置,跳过");
202
- }
203
- }
204
- else {
205
- const content = readFileSync(claudeMdSrc, "utf-8");
206
- writeFileSync(claudeMdDest, content, "utf-8");
207
- console.log(" ✓ 已创建 ~/.claude/CLAUDE.md");
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("安装失败:", err);
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, formatUsageLine } from "./completion.js";
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: chatsynchronous single/multi-turn
48
+ // Tool 1: task_submitasync task (all calls are async)
49
49
  // ============================================================
50
- server.tool("chat", "Send a prompt to Codex (OpenAI) or Gemini. Supports session reuse for multi-turn conversations. " +
51
- "Use `domain` for smart routing (frontend→Gemini, backend→Codex) or specify `model` directly. " +
52
- "External models are READ-ONLY they return analysis/diffs only.", {
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 3: task_status — poll progress
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 4: task_result — get completed result
100
+ // Tool 3: task_result — wait and get result (long-polling)
142
101
  // ============================================================
143
- server.tool("task_result", "Get the full result of a completed task, including token usage.", {
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 task = taskStore.get(args.task_id);
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. Use task_status to check progress.\n\n${formatTaskStatus(task)}`);
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 5: task_cancel — cancel running task
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,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAGtF,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AACxC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;AAElC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAgB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAErF,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO;QACL,KAAK;QACL,QAAQ,EAAE,IAAI,wBAAwB,CAAC,MAAM,EAAE,EAAE,gBAAgB,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;KAC3F,CAAC;AACJ,CAAC;AAED,kEAAkE;AAClE,SAAS,qBAAqB,CAAC,IAI9B;IACC,IAAI,KAAa,CAAC;IAClB,IAAI,YAAY,GAAuB,IAAI,CAAC,aAAa,CAAC;IAC1D,IAAI,YAAoB,CAAC;IAEzB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,MAAoB,CAAC,CAAC;QAC1D,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,YAAY;YAAE,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;QACxD,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,2EAA2E;QAC3E,MAAM,UAAU,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzD,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC;QAClF,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACvC,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AAC/C,CAAC;AAED,+DAA+D;AAC/D,aAAa;AACb,+DAA+D;AAE/D,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AAEhE,+DAA+D;AAC/D,+CAA+C;AAC/C,+DAA+D;AAE/D,MAAM,CAAC,IAAI,CACT,MAAM,EACN,kGAAkG;IAChG,+FAA+F;IAC/F,kEAAkE,EACpE;IACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACxD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACzF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4EAA4E,CAAC;IACnH,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACxG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;CACzG,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC1E,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEvD,IAAI,QAA0B,CAAC;QAC/B,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAEhC,IAAI,SAAS,EAAE,CAAC;YACd,0BAA0B;YAC1B,MAAM,OAAO,GAAG,YAAY,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACpE,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;YAC7D,QAAQ,GAAG,OAAO,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,cAAc;YACd,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;YACnE,QAAQ,GAAG,YAAY,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAE,CAAC;QAClE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC;YACrC,KAAK;YACL,QAAQ,EAAE,QAAe;SAC1B,CAAC,CAAC;QAEH,YAAY,CAAC,mBAAmB,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAE5D,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAC1C,OAAO,IAAI,CACT,aAAa,SAAS,gBAAgB,YAAY,QAAQ,MAAM,CAAC,OAAO,GAAG,SAAS,EAAE,CACvF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,YAAY,EAAE,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,kBAAkB,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACrF,CAAC;AACH,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,gDAAgD;AAChD,+DAA+D;AAE/D,MAAM,CAAC,IAAI,CACT,aAAa,EACb,qFAAqF;IACnF,qEAAqE;IACrE,yDAAyD,EAC3D;IACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAClE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACzF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IACnD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACxG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CAChF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC1E,MAAM,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEhD,IAAI,QAA0B,CAAC;QAC/B,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAEhC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,YAAY,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACpE,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;YAC7D,QAAQ,GAAG,OAAO,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;YACnE,QAAQ,GAAG,YAAY,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAE,CAAC;QAClE,CAAC;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC3E,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAE9D,OAAO,IAAI,CACT,mBAAmB;YACjB,YAAY,IAAI,CAAC,MAAM,IAAI;YAC3B,YAAY,SAAS,IAAI;YACzB,aAAa,YAAY,aAAa,KAAK,MAAM;YACjD,6EAA6E,CAChF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,YAAY,EAAE,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,kBAAkB,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACrF,CAAC;AACH,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,sCAAsC;AACtC,+DAA+D;AAE/D,MAAM,CAAC,IAAI,CACT,aAAa,EACb,mGAAmG,EACnG;IACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;CACpE,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,mBAAmB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,6CAA6C;AAC7C,+DAA+D;AAE/D,MAAM,CAAC,IAAI,CACT,aAAa,EACb,iEAAiE,EACjE;IACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;CACpE,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,mBAAmB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1D,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,gEAAgE,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxG,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,gBAAgB,IAAI,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,4CAA4C;AAC5C,+DAA+D;AAE/D,MAAM,CAAC,IAAI,CACT,aAAa,EACb,wBAAwB,EACxB;IACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CACtD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,aAAa,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,mBAAmB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,mBAAmB,IAAI,CAAC,MAAM,kBAAkB,CAAC,CAAC;AAChE,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,eAAe;AACf,+DAA+D;AAE/D,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACxC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;IACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
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,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAGtF,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AACxC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;AAElC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAgB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAErF,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO;QACL,KAAK;QACL,QAAQ,EAAE,IAAI,wBAAwB,CAAC,MAAM,EAAE,EAAE,gBAAgB,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;KAC3F,CAAC;AACJ,CAAC;AAED,kEAAkE;AAClE,SAAS,qBAAqB,CAAC,IAI9B;IACC,IAAI,KAAa,CAAC;IAClB,IAAI,YAAY,GAAuB,IAAI,CAAC,aAAa,CAAC;IAC1D,IAAI,YAAoB,CAAC;IAEzB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,MAAoB,CAAC,CAAC;QAC1D,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,YAAY;YAAE,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;QACxD,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,2EAA2E;QAC3E,MAAM,UAAU,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzD,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC;QAClF,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACvC,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AAC/C,CAAC;AAED,+DAA+D;AAC/D,aAAa;AACb,+DAA+D;AAE/D,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AAEhE,+DAA+D;AAC/D,yDAAyD;AACzD,+DAA+D;AAE/D,MAAM,CAAC,IAAI,CACT,aAAa,EACb,wEAAwE;IACtE,6FAA6F;IAC7F,8FAA8F,EAChG;IACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAClE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACzF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IACnD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACxG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CAChF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC1E,MAAM,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEhD,IAAI,QAA0B,CAAC;QAC/B,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAEhC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,YAAY,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACpE,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;YAC7D,QAAQ,GAAG,OAAO,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;YACnE,QAAQ,GAAG,YAAY,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAE,CAAC;QAClE,CAAC;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC3E,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAE9D,OAAO,IAAI,CACT,mBAAmB;YACjB,YAAY,IAAI,CAAC,MAAM,IAAI;YAC3B,YAAY,SAAS,IAAI;YACzB,aAAa,YAAY,aAAa,KAAK,MAAM;YACjD,6EAA6E,CAChF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,YAAY,EAAE,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,kBAAkB,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACrF,CAAC;AACH,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,4DAA4D;AAC5D,+DAA+D;AAE/D,MAAM,CAAC,IAAI,CACT,aAAa,EACb,oGAAoG;IAClG,8EAA8E,EAChF;IACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;CACpE,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,mBAAmB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,2DAA2D;AAC3D,+DAA+D;AAE/D,MAAM,CAAC,IAAI,CACT,aAAa,EACb,oFAAoF;IAClF,sEAAsE,EACxE;IACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IACnE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sDAAsD,CAAC;CACvG,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACxE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,mBAAmB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1D,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,+BAA+B,IAAI,CAAC,OAAO,0DAA0D,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7I,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,gBAAgB,IAAI,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,4CAA4C;AAC5C,+DAA+D;AAE/D,MAAM,CAAC,IAAI,CACT,aAAa,EACb,wBAAwB,EACxB;IACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CACtD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,aAAa,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,mBAAmB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,mBAAmB,IAAI,CAAC,MAAM,kBAAkB,CAAC,CAAC;AAChE,CAAC,CACF,CAAC;AAEF,+DAA+D;AAC/D,eAAe;AACf,+DAA+D;AAE/D,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACxC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;IACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
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<{
@@ -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;IAU/B,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"}
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "multi-model-flow",
3
- "version": "0.1.5",
3
+ "version": "0.2.1",
4
4
  "description": "Multi-Model Flow - Lightweight multi-model orchestration MCP server for Claude Code",
5
5
  "type": "module",
6
6
  "bin": {