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 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
- # Copy default settings if the template exists
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
+ }
@@ -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.5",
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
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  ;(globalThis as any).MACRO = {
7
- VERSION: '0.1.5-mumucc',
7
+ VERSION: '0.1.7-mumucc',
8
8
  VERSION_CHANGELOG: '{}',
9
9
  BUILD_TIME: new Date().toISOString(),
10
10
  PACKAGE_URL: 'https://github.com/mumuxsy/mumucc',
@@ -78,7 +78,9 @@ function getDefaultTeammateModel(leaderModel: string | null): string {
78
78
  if (configured !== undefined) {
79
79
  return parseUserSpecifiedModel(configured)
80
80
  }
81
- return getHardcodedTeammateModelFallback()
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