nex-code 0.3.1 → 0.3.3

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/README.md CHANGED
@@ -21,6 +21,12 @@
21
21
  <img src="https://img.shields.io/badge/tests-1780-blue.svg" alt="Tests: 1780">
22
22
  </p>
23
23
 
24
+ ---
25
+ ## Demo
26
+
27
+ https://github.com/user-attachments/assets/634e70eb-645c-42f7-a604-824f17e49840
28
+
29
+
24
30
  ---
25
31
 
26
32
  ## Quickstart
package/cli/context.js CHANGED
@@ -72,7 +72,6 @@ function printContext(cwd) {
72
72
 
73
73
  const branch = safe(() => execSync('git branch --show-current', { cwd, encoding: 'utf-8', stdio: 'pipe' }).trim());
74
74
 
75
- console.log(`${C.dim} cwd: ${cwd}${C.reset}`);
76
75
  if (project) console.log(`${C.dim} project: ${project}${C.reset}`);
77
76
  if (branch) console.log(`${C.dim} branch: ${branch}${C.reset}`);
78
77
  console.log();
package/cli/costs.js CHANGED
@@ -33,12 +33,17 @@ const PRICING = {
33
33
  'gemini-2.0-flash-lite': { input: 0.075, output: 0.30 },
34
34
  },
35
35
  'ollama': {
36
- 'kimi-k2.5': { input: 0, output: 0 },
37
- 'qwen3-coder': { input: 0, output: 0 },
38
- 'deepseek-r1': { input: 0, output: 0 },
39
- 'llama4': { input: 0, output: 0 },
40
- 'qwen3:30b-a3b': { input: 0, output: 0 },
41
- 'devstral': { input: 0, output: 0 },
36
+ 'qwen3-coder:480b': { input: 0, output: 0 },
37
+ 'qwen3-coder-next': { input: 0, output: 0 },
38
+ 'devstral-2:123b': { input: 0, output: 0 },
39
+ 'devstral-small-2:24b': { input: 0, output: 0 },
40
+ 'kimi-k2.5': { input: 0, output: 0 },
41
+ 'kimi-k2:1t': { input: 0, output: 0 },
42
+ 'deepseek-v3.2': { input: 0, output: 0 },
43
+ 'minimax-m2.5': { input: 0, output: 0 },
44
+ 'glm-5': { input: 0, output: 0 },
45
+ 'glm-4.7': { input: 0, output: 0 },
46
+ 'gpt-oss:120b': { input: 0, output: 0 },
42
47
  },
43
48
  'local': {},
44
49
  };
package/cli/ollama.js CHANGED
@@ -9,7 +9,7 @@ const registry = require('./providers/registry');
9
9
 
10
10
  const MODELS = {
11
11
  'kimi-k2.5': { id: 'kimi-k2.5', name: 'Kimi K2.5', max_tokens: 16384 },
12
- 'qwen3-coder': { id: 'qwen3-coder', name: 'Qwen3 Coder', max_tokens: 16384 },
12
+ 'qwen3-coder:480b': { id: 'qwen3-coder:480b', name: 'Qwen3 Coder 480B', max_tokens: 16384 },
13
13
  };
14
14
 
15
15
  function getActiveModel() {
@@ -7,20 +7,34 @@ const axios = require('axios');
7
7
  const { BaseProvider } = require('./base');
8
8
 
9
9
  const OLLAMA_MODELS = {
10
- // Primary: Best coding model for agentic workflows
11
- 'qwen3-coder': { id: 'qwen3-coder', name: 'Qwen3 Coder', maxTokens: 16384, contextWindow: 131072 },
10
+ // Primary: Best coding models for agentic workflows
11
+ 'qwen3-coder:480b': { id: 'qwen3-coder:480b', name: 'Qwen3 Coder 480B', maxTokens: 16384, contextWindow: 131072 },
12
12
  'qwen3-coder-next': { id: 'qwen3-coder-next', name: 'Qwen3 Coder Next', maxTokens: 16384, contextWindow: 131072 },
13
- // Reasoning specialists
14
- 'deepseek-r1': { id: 'deepseek-r1', name: 'DeepSeek R1', maxTokens: 16384, contextWindow: 131072 },
15
- 'deepseek-r1:14b': { id: 'deepseek-r1:14b', name: 'DeepSeek R1 14B', maxTokens: 8192, contextWindow: 128000 },
16
- // Agent-focused models
17
- 'devstral': { id: 'devstral', name: 'Devstral', maxTokens: 16384, contextWindow: 131072 },
13
+ 'devstral-2:123b': { id: 'devstral-2:123b', name: 'Devstral 2 123B', maxTokens: 16384, contextWindow: 131072 },
14
+ 'devstral-small-2:24b': { id: 'devstral-small-2:24b', name: 'Devstral Small 2 24B', maxTokens: 16384, contextWindow: 131072 },
15
+ // Large general-purpose models
16
+ 'kimi-k2.5': { id: 'kimi-k2.5', name: 'Kimi K2.5', maxTokens: 16384, contextWindow: 256000 },
17
+ 'kimi-k2:1t': { id: 'kimi-k2:1t', name: 'Kimi K2 1T', maxTokens: 16384, contextWindow: 256000 },
18
+ 'kimi-k2-thinking': { id: 'kimi-k2-thinking', name: 'Kimi K2 Thinking', maxTokens: 16384, contextWindow: 256000 },
19
+ 'deepseek-v3.2': { id: 'deepseek-v3.2', name: 'DeepSeek V3.2', maxTokens: 16384, contextWindow: 131072 },
20
+ 'deepseek-v3.1:671b': { id: 'deepseek-v3.1:671b', name: 'DeepSeek V3.1 671B', maxTokens: 16384, contextWindow: 131072 },
21
+ 'cogito-2.1:671b': { id: 'cogito-2.1:671b', name: 'Cogito 2.1 671B', maxTokens: 16384, contextWindow: 131072 },
22
+ // Medium models
23
+ 'qwen3-next:80b': { id: 'qwen3-next:80b', name: 'Qwen3 Next 80B', maxTokens: 16384, contextWindow: 131072 },
24
+ 'qwen3.5:397b': { id: 'qwen3.5:397b', name: 'Qwen3.5 397B', maxTokens: 16384, contextWindow: 131072 },
25
+ 'mistral-large-3:675b': { id: 'mistral-large-3:675b', name: 'Mistral Large 3 675B', maxTokens: 16384, contextWindow: 131072 },
26
+ 'gpt-oss:120b': { id: 'gpt-oss:120b', name: 'GPT-OSS 120B', maxTokens: 16384, contextWindow: 131072 },
18
27
  'minimax-m2.5': { id: 'minimax-m2.5', name: 'MiniMax M2.5', maxTokens: 16384, contextWindow: 131072 },
28
+ 'glm-5': { id: 'glm-5', name: 'GLM 5', maxTokens: 16384, contextWindow: 128000 },
19
29
  'glm-4.7': { id: 'glm-4.7', name: 'GLM 4.7', maxTokens: 16384, contextWindow: 128000 },
20
- // General purpose / large context fallback
21
- 'kimi-k2.5': { id: 'kimi-k2.5', name: 'Kimi K2.5', maxTokens: 16384, contextWindow: 256000 },
22
- 'llama4': { id: 'llama4', name: 'Llama 4 Scout', maxTokens: 16384, contextWindow: 131072 },
23
- 'qwen3:30b-a3b': { id: 'qwen3:30b-a3b', name: 'Qwen3 30B A3B', maxTokens: 16384, contextWindow: 131072 },
30
+ // Small / fast models
31
+ 'gemma3:27b': { id: 'gemma3:27b', name: 'Gemma 3 27B', maxTokens: 8192, contextWindow: 131072 },
32
+ 'gemma3:12b': { id: 'gemma3:12b', name: 'Gemma 3 12B', maxTokens: 8192, contextWindow: 131072 },
33
+ 'gemma3:4b': { id: 'gemma3:4b', name: 'Gemma 3 4B', maxTokens: 8192, contextWindow: 131072 },
34
+ 'ministral-3:14b': { id: 'ministral-3:14b', name: 'Ministral 3 14B', maxTokens: 8192, contextWindow: 131072 },
35
+ 'ministral-3:8b': { id: 'ministral-3:8b', name: 'Ministral 3 8B', maxTokens: 8192, contextWindow: 131072 },
36
+ // Special
37
+ 'gemini-3-flash-preview': { id: 'gemini-3-flash-preview', name: 'Gemini 3 Flash Preview', maxTokens: 16384, contextWindow: 131072 },
24
38
  };
25
39
 
26
40
  class OllamaProvider extends BaseProvider {
@@ -29,7 +43,7 @@ class OllamaProvider extends BaseProvider {
29
43
  name: 'ollama',
30
44
  baseUrl: config.baseUrl || 'https://ollama.com',
31
45
  models: config.models || OLLAMA_MODELS,
32
- defaultModel: config.defaultModel || 'qwen3-coder',
46
+ defaultModel: config.defaultModel || 'qwen3-coder:480b',
33
47
  ...config,
34
48
  });
35
49
  this.timeout = config.timeout || 180000;
@@ -18,9 +18,9 @@ const { checkBudget } = require('../costs');
18
18
  // Used during fallback to pick an equivalent model on a different provider.
19
19
 
20
20
  const MODEL_EQUIVALENTS = {
21
- top: { ollama: 'kimi-k2.5', openai: 'gpt-4.1', anthropic: 'claude-sonnet-4-5', gemini: 'gemini-2.5-pro' },
22
- strong: { ollama: 'qwen3-coder', openai: 'gpt-4o', anthropic: 'claude-sonnet', gemini: 'gemini-2.5-flash' },
23
- fast: { ollama: 'devstral', openai: 'gpt-4.1-mini', anthropic: 'claude-haiku', gemini: 'gemini-2.0-flash' },
21
+ top: { ollama: 'kimi-k2.5', openai: 'gpt-4.1', anthropic: 'claude-sonnet-4-5', gemini: 'gemini-2.5-pro' },
22
+ strong: { ollama: 'qwen3-coder:480b', openai: 'gpt-4o', anthropic: 'claude-sonnet', gemini: 'gemini-2.5-flash' },
23
+ fast: { ollama: 'devstral-small-2:24b', openai: 'gpt-4.1-mini', anthropic: 'claude-haiku', gemini: 'gemini-2.0-flash' },
24
24
  };
25
25
 
26
26
  // Reverse lookup: model → tier
@@ -136,9 +136,13 @@ function getActiveModel() {
136
136
  */
137
137
  function parseModelSpec(spec) {
138
138
  if (!spec) return { provider: null, model: null };
139
- const parts = spec.split(':');
140
- if (parts.length >= 2) {
141
- return { provider: parts[0], model: parts.slice(1).join(':') };
139
+ const colonIdx = spec.indexOf(':');
140
+ if (colonIdx > 0) {
141
+ const prefix = spec.slice(0, colonIdx);
142
+ // Only treat as provider:model if prefix is a known provider name
143
+ if (providers[prefix] || ['ollama', 'openai', 'anthropic', 'gemini', 'local'].includes(prefix)) {
144
+ return { provider: prefix, model: spec.slice(colonIdx + 1) };
145
+ }
142
146
  }
143
147
  return { provider: null, model: spec };
144
148
  }
package/cli/tool-tiers.js CHANGED
@@ -23,12 +23,28 @@ const TIERS = {
23
23
  */
24
24
  const MODEL_TIERS = {
25
25
  // Ollama Cloud — tier by capability
26
+ 'qwen3-coder:480b': 'full',
27
+ 'qwen3-coder-next': 'full',
26
28
  'kimi-k2.5': 'full',
27
- 'qwen3-coder': 'full',
28
- 'devstral': 'standard',
29
- 'deepseek-r1': 'standard',
30
- 'llama4': 'standard',
31
- 'qwen3:30b-a3b': 'essential',
29
+ 'kimi-k2:1t': 'full',
30
+ 'kimi-k2-thinking': 'full',
31
+ 'deepseek-v3.2': 'full',
32
+ 'deepseek-v3.1:671b': 'full',
33
+ 'devstral-2:123b': 'full',
34
+ 'devstral-small-2:24b': 'standard',
35
+ 'cogito-2.1:671b': 'full',
36
+ 'qwen3-next:80b': 'full',
37
+ 'qwen3.5:397b': 'full',
38
+ 'mistral-large-3:675b': 'full',
39
+ 'gpt-oss:120b': 'full',
40
+ 'minimax-m2.5': 'full',
41
+ 'glm-5': 'full',
42
+ 'glm-4.7': 'standard',
43
+ 'gemma3:27b': 'standard',
44
+ 'gemma3:12b': 'essential',
45
+ 'gemma3:4b': 'essential',
46
+ 'ministral-3:14b': 'standard',
47
+ 'ministral-3:8b': 'essential',
32
48
 
33
49
  // OpenAI — all full
34
50
  'gpt-4o': 'full',
package/cli/ui.js CHANGED
@@ -66,7 +66,7 @@ function banner(modelName, cwd, opts = {}) {
66
66
 
67
67
  console.log(`
68
68
  ${logo}
69
- ${d}Agentic Coding CLI v0.3.0${r}
69
+ ${d}Agentic Coding CLI v${require('../package.json').version}${r}
70
70
  ${d}Model: ${modelName}${r} ${d}· /help${r}${yoloTag}
71
71
  `);
72
72
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nex-code",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "Nex Code — Agentic Coding CLI with Multi-Provider Support",
5
5
  "bin": {
6
6
  "nex-code": "./bin/nex-code.js"