mumucc 0.1.5 → 0.1.7
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/bin/mumucc +14 -3
- package/defaults/mcp-servers.json +44 -0
- package/defaults/settings.json +0 -43
- package/package.json +1 -1
- package/shims/globals.ts +1 -1
- package/src/tools/shared/spawnMultiAgent.ts +3 -1
- package/src/utils/model/modelOptions.ts +13 -0
- package/src/utils/model/thirdPartyProviders.ts +5 -0
- package/src/utils/swarm/spawnUtils.ts +14 -0
package/bin/mumucc
CHANGED
|
@@ -32,12 +32,23 @@ export CLAUDE_CONFIG_DIR="${CLAUDE_CONFIG_DIR:-$HOME/.mumucc}"
|
|
|
32
32
|
# ── First-run: auto-initialize default config if config dir doesn't exist ──
|
|
33
33
|
if [[ ! -d "$CLAUDE_CONFIG_DIR" ]]; then
|
|
34
34
|
mkdir -p "$CLAUDE_CONFIG_DIR"
|
|
35
|
-
|
|
35
|
+
|
|
36
|
+
# Copy settings (permissions, env, etc.) — mcpServers NOT here
|
|
36
37
|
if [[ -f "$PROJECT_ROOT/defaults/settings.json" ]]; then
|
|
37
38
|
cp "$PROJECT_ROOT/defaults/settings.json" "$CLAUDE_CONFIG_DIR/settings.json"
|
|
38
|
-
echo "mumucc: Initialized default config at $CLAUDE_CONFIG_DIR/"
|
|
39
|
-
echo " Run 'mumucc /login' to configure your API provider."
|
|
40
39
|
fi
|
|
40
|
+
|
|
41
|
+
# Write MCP servers to the global config file (.mumucc.json)
|
|
42
|
+
# This is where getMcpConfigsByScope('user') reads from via getGlobalConfig()
|
|
43
|
+
GLOBAL_CONFIG="$CLAUDE_CONFIG_DIR/.mumucc.json"
|
|
44
|
+
if [[ -f "$PROJECT_ROOT/defaults/mcp-servers.json" ]]; then
|
|
45
|
+
cp "$PROJECT_ROOT/defaults/mcp-servers.json" "$GLOBAL_CONFIG"
|
|
46
|
+
elif [[ ! -f "$GLOBAL_CONFIG" ]]; then
|
|
47
|
+
echo '{"mcpServers":{}}' > "$GLOBAL_CONFIG"
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
echo "mumucc: Initialized default config at $CLAUDE_CONFIG_DIR/"
|
|
51
|
+
echo " Run 'mumucc /login' to configure your API provider."
|
|
41
52
|
fi
|
|
42
53
|
|
|
43
54
|
# ── Disable Anthropic-specific traffic (version checks, telemetry) ──
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mcpServers": {
|
|
3
|
+
"sequential-thinking": {
|
|
4
|
+
"type": "stdio",
|
|
5
|
+
"command": "npx",
|
|
6
|
+
"args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
|
|
7
|
+
},
|
|
8
|
+
"fetch": {
|
|
9
|
+
"type": "stdio",
|
|
10
|
+
"command": "npx",
|
|
11
|
+
"args": ["-y", "@modelcontextprotocol/server-fetch"]
|
|
12
|
+
},
|
|
13
|
+
"filesystem": {
|
|
14
|
+
"type": "stdio",
|
|
15
|
+
"command": "npx",
|
|
16
|
+
"args": ["-y", "@modelcontextprotocol/server-filesystem", "."]
|
|
17
|
+
},
|
|
18
|
+
"memory": {
|
|
19
|
+
"type": "stdio",
|
|
20
|
+
"command": "npx",
|
|
21
|
+
"args": ["-y", "@modelcontextprotocol/server-memory"]
|
|
22
|
+
},
|
|
23
|
+
"git": {
|
|
24
|
+
"type": "stdio",
|
|
25
|
+
"command": "npx",
|
|
26
|
+
"args": ["-y", "@modelcontextprotocol/server-git", "--repository", "."]
|
|
27
|
+
},
|
|
28
|
+
"time": {
|
|
29
|
+
"type": "stdio",
|
|
30
|
+
"command": "npx",
|
|
31
|
+
"args": ["-y", "@modelcontextprotocol/server-time"]
|
|
32
|
+
},
|
|
33
|
+
"context7": {
|
|
34
|
+
"type": "stdio",
|
|
35
|
+
"command": "npx",
|
|
36
|
+
"args": ["-y", "@upstash/context7-mcp@latest"]
|
|
37
|
+
},
|
|
38
|
+
"playwright": {
|
|
39
|
+
"type": "stdio",
|
|
40
|
+
"command": "npx",
|
|
41
|
+
"args": ["-y", "@playwright/mcp@latest"]
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
package/defaults/settings.json
CHANGED
|
@@ -20,48 +20,5 @@
|
|
|
20
20
|
"mcp__plugin_playwright_playwright__*"
|
|
21
21
|
],
|
|
22
22
|
"defaultMode": "acceptEdits"
|
|
23
|
-
},
|
|
24
|
-
|
|
25
|
-
"mcpServers": {
|
|
26
|
-
"sequential-thinking": {
|
|
27
|
-
"type": "stdio",
|
|
28
|
-
"command": "npx",
|
|
29
|
-
"args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
|
|
30
|
-
},
|
|
31
|
-
"fetch": {
|
|
32
|
-
"type": "stdio",
|
|
33
|
-
"command": "npx",
|
|
34
|
-
"args": ["-y", "@modelcontextprotocol/server-fetch"]
|
|
35
|
-
},
|
|
36
|
-
"filesystem": {
|
|
37
|
-
"type": "stdio",
|
|
38
|
-
"command": "npx",
|
|
39
|
-
"args": ["-y", "@modelcontextprotocol/server-filesystem", "."]
|
|
40
|
-
},
|
|
41
|
-
"memory": {
|
|
42
|
-
"type": "stdio",
|
|
43
|
-
"command": "npx",
|
|
44
|
-
"args": ["-y", "@modelcontextprotocol/server-memory"]
|
|
45
|
-
},
|
|
46
|
-
"git": {
|
|
47
|
-
"type": "stdio",
|
|
48
|
-
"command": "npx",
|
|
49
|
-
"args": ["-y", "@modelcontextprotocol/server-git", "--repository", "."]
|
|
50
|
-
},
|
|
51
|
-
"time": {
|
|
52
|
-
"type": "stdio",
|
|
53
|
-
"command": "npx",
|
|
54
|
-
"args": ["-y", "@modelcontextprotocol/server-time"]
|
|
55
|
-
},
|
|
56
|
-
"context7": {
|
|
57
|
-
"type": "stdio",
|
|
58
|
-
"command": "npx",
|
|
59
|
-
"args": ["-y", "@upstash/context7-mcp@latest"]
|
|
60
|
-
},
|
|
61
|
-
"playwright": {
|
|
62
|
-
"type": "stdio",
|
|
63
|
-
"command": "npx",
|
|
64
|
-
"args": ["-y", "@playwright/mcp@latest"]
|
|
65
|
-
}
|
|
66
23
|
}
|
|
67
24
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mumucc",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"description": "Open-source AI coding assistant CLI with multi-model support (Anthropic, OpenAI/GPT, DeepSeek, GLM, Ollama, etc.), MCP integration, agent swarms, and out-of-the-box developer experience.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
package/shims/globals.ts
CHANGED
|
@@ -78,7 +78,9 @@ function getDefaultTeammateModel(leaderModel: string | null): string {
|
|
|
78
78
|
if (configured !== undefined) {
|
|
79
79
|
return parseUserSpecifiedModel(configured)
|
|
80
80
|
}
|
|
81
|
-
|
|
81
|
+
// No teammateDefaultModel configured — prefer the leader's model so that
|
|
82
|
+
// third-party model users don't unexpectedly fall back to Anthropic Opus.
|
|
83
|
+
return leaderModel ?? getHardcodedTeammateModelFallback()
|
|
82
84
|
}
|
|
83
85
|
|
|
84
86
|
/**
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// biome-ignore-all assist/source/organizeImports: ANT-ONLY import markers must not be reordered
|
|
2
2
|
import { getInitialMainLoopModel } from '../../bootstrap/state.js'
|
|
3
3
|
import {
|
|
4
|
+
getAnthropicApiKey,
|
|
4
5
|
isClaudeAISubscriber,
|
|
5
6
|
isMaxSubscriber,
|
|
6
7
|
isTeamPremiumSubscriber,
|
|
@@ -270,6 +271,18 @@ function getOpusPlanOption(): ModelOption {
|
|
|
270
271
|
// @[MODEL LAUNCH]: Update the model picker lists below to include/reorder options for the new model.
|
|
271
272
|
// Each user tier (ant, Max/Team Premium, Pro/Team Standard/Enterprise, PAYG 1P, PAYG 3P) has its own list.
|
|
272
273
|
function getModelOptionsBase(fastMode = false): ModelOption[] {
|
|
274
|
+
// If no Anthropic auth is configured (no API key, no OAuth token),
|
|
275
|
+
// skip Anthropic models entirely — user only sees third-party models
|
|
276
|
+
// from providers they've configured via /login.
|
|
277
|
+
const hasAnthropicAuth =
|
|
278
|
+
!!getAnthropicApiKey() ||
|
|
279
|
+
!!process.env.CLAUDE_CODE_USE_BEDROCK ||
|
|
280
|
+
!!process.env.CLAUDE_CODE_USE_VERTEX ||
|
|
281
|
+
!!process.env.CLAUDE_CODE_USE_FOUNDRY
|
|
282
|
+
if (!hasAnthropicAuth) {
|
|
283
|
+
return []
|
|
284
|
+
}
|
|
285
|
+
|
|
273
286
|
if (process.env.USER_TYPE === 'ant') {
|
|
274
287
|
// Build options from antModels config
|
|
275
288
|
const antModelOptions: ModelOption[] = getAntModels().map(m => ({
|
|
@@ -245,6 +245,11 @@ export function getAllThirdPartyModels(): Array<{
|
|
|
245
245
|
}> = []
|
|
246
246
|
|
|
247
247
|
for (const provider of providers) {
|
|
248
|
+
// Only show models from providers that have a configured API key.
|
|
249
|
+
// This filters /model to only display models the user can actually use.
|
|
250
|
+
const resolved = getResolvedProvider(provider.id)
|
|
251
|
+
if (!resolved) continue
|
|
252
|
+
|
|
248
253
|
for (const model of provider.models) {
|
|
249
254
|
models.push({
|
|
250
255
|
qualifiedId: `${provider.id}${PROVIDER_MODEL_SEPARATOR}${model.id}`,
|
|
@@ -111,6 +111,20 @@ const TEAMMATE_ENV_VARS = [
|
|
|
111
111
|
// disable memory on ephemeral CCR filesystems. Forwarding REMOTE alone
|
|
112
112
|
// would flip teammates to memory-off when the parent has it on.
|
|
113
113
|
'CLAUDE_CODE_REMOTE_MEMORY_DIR',
|
|
114
|
+
// Third-party provider API keys — tmux login shells don't inherit these
|
|
115
|
+
'ANTHROPIC_API_KEY',
|
|
116
|
+
'OPENAI_API_KEY',
|
|
117
|
+
'DEEPSEEK_API_KEY',
|
|
118
|
+
'GEMINI_API_KEY',
|
|
119
|
+
'GROQ_API_KEY',
|
|
120
|
+
'TOGETHER_API_KEY',
|
|
121
|
+
'SILICONFLOW_API_KEY',
|
|
122
|
+
'OPENROUTER_API_KEY',
|
|
123
|
+
'CODEX_API_KEY',
|
|
124
|
+
// Feature flags — ensure sub-agents get the same feature toggles
|
|
125
|
+
'ENABLED_FEATURES',
|
|
126
|
+
// API timeout — third-party providers may respond slower
|
|
127
|
+
'API_TIMEOUT_MS',
|
|
114
128
|
// Upstream proxy — the parent's MITM relay is reachable from teammates
|
|
115
129
|
// (same container network). Forward the proxy vars so teammates route
|
|
116
130
|
// customer-configured upstream traffic through the relay for credential
|