ai-consultants 2.10.3 → 2.10.5
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.md +22 -3
- package/README.md +6 -6
- package/SKILL.md +2 -2
- package/docs/COST_RATES.md +7 -5
- package/docs/cost_rates.json +11 -9
- package/docs/releases/v2.10.4.md +63 -0
- package/docs/releases/v2.10.5.md +57 -0
- package/package.json +1 -1
- package/references/configuration.md +2 -2
- package/scripts/config.sh +7 -7
- package/scripts/lib/common.sh +4 -4
- package/scripts/lib/costs.sh +6 -17
- package/scripts/lib/routing.sh +4 -2
- package/scripts/query_kilo.sh +16 -10
- package/scripts/query_qwen3.sh +2 -2
- package/scripts/test_suite.sh +1621 -0
package/CLAUDE.md
CHANGED
|
@@ -6,7 +6,7 @@ AI Consultants is a multi-model AI deliberation system that queries up to 15 AI
|
|
|
6
6
|
|
|
7
7
|
**Self-Exclusion**: The invoking agent is automatically excluded from the panel to prevent self-consultation. Claude Code won't query Claude, Codex CLI won't query Codex, etc.
|
|
8
8
|
|
|
9
|
-
**Version**: 2.10.
|
|
9
|
+
**Version**: 2.10.5
|
|
10
10
|
|
|
11
11
|
## Distribution
|
|
12
12
|
|
|
@@ -457,9 +457,9 @@ All consultants now use premium models by default:
|
|
|
457
457
|
| Mistral | mistral-large-3 |
|
|
458
458
|
| Cursor | composer-1.5 |
|
|
459
459
|
| DeepSeek | deepseek-reasoner |
|
|
460
|
-
| GLM | glm-5 |
|
|
460
|
+
| GLM | glm-5.1 |
|
|
461
461
|
| Grok | grok-4.20-0309-reasoning |
|
|
462
|
-
| Qwen3 | qwen3.
|
|
462
|
+
| Qwen3 | qwen3.6-plus |
|
|
463
463
|
| Kimi | kimi-code/kimi-for-coding |
|
|
464
464
|
| Aider | gpt-5.3-codex |
|
|
465
465
|
| MiniMax | MiniMax-M2.7 |
|
|
@@ -728,6 +728,10 @@ For detailed information, see:
|
|
|
728
728
|
- Use `.env.example` as template for environment configuration
|
|
729
729
|
- Run `./scripts/doctor.sh` to verify configuration
|
|
730
730
|
|
|
731
|
+
## Git Conventions
|
|
732
|
+
|
|
733
|
+
Use [Conventional Commits](https://www.conventionalcommits.org/): `feat:`, `fix:`, `chore:`, `docs:`, `refactor:`, `test:`, `perf:`, `ci:`. Scope is optional (e.g., `feat(routing): add fallback escalation`).
|
|
734
|
+
|
|
731
735
|
## Release Process
|
|
732
736
|
|
|
733
737
|
Every version bump **must** include a release note in `docs/releases/v<VERSION>.md`. Use the template below.
|
|
@@ -798,6 +802,21 @@ curl -fsSL https://raw.githubusercontent.com/matteoscurati/ai-consultants/main/s
|
|
|
798
802
|
|
|
799
803
|
## Changelog
|
|
800
804
|
|
|
805
|
+
### v2.10.5
|
|
806
|
+
- Qwen3 premium model upgraded from `qwen3.5-plus` to `qwen3.6-plus` ($0.325/$1.95 per M tokens)
|
|
807
|
+
- Qwen3 standard tier now uses open-weight `qwen3.6-35b-a3b` (MoE, 35B total / 3B active)
|
|
808
|
+
- Refactored `get_economic_model()` to delegate to `get_model_for_tier()`, eliminating stale hardcoded mappings
|
|
809
|
+
- Moved `qwen3.5-plus` to legacy section in cost catalog
|
|
810
|
+
- Fixed `AI_CONSULTANTS_VERSION` in `config.sh` (was stuck at `2.10.0`)
|
|
811
|
+
|
|
812
|
+
### v2.10.4
|
|
813
|
+
- GLM premium/standard model upgraded from `glm-5` to `glm-5.1`
|
|
814
|
+
- Fixed Kilo CLI hanging indefinitely in non-TTY mode (query via stdin instead of CLI argument)
|
|
815
|
+
- Fixed Kilo CLI picking wrong provider when other consultants' API keys were in the environment
|
|
816
|
+
- Collapsed 5-stage ANSI stripping pipeline into single sed invocation in `query_kilo.sh`
|
|
817
|
+
- Fixed overly aggressive markdown fence filter in `query_kilo.sh` (only strips standalone ``` lines now)
|
|
818
|
+
- Updated `.env.example` GLM signup URL to `open.z.ai`
|
|
819
|
+
|
|
801
820
|
### v2.10.3
|
|
802
821
|
- Grok premium model upgraded to `grok-4.20-0309-reasoning` (replaces `grok-4-1-fast-reasoning`)
|
|
803
822
|
- GLM API endpoint migrated from `open.bigmodel.cn` to `api.z.ai/api/coding/paas/v4`
|
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# AI Consultants v2.10.
|
|
1
|
+
# AI Consultants v2.10.5
|
|
2
2
|
|
|
3
3
|
> Query multiple AI models simultaneously for expert opinions on coding questions. Get diverse perspectives, automatic synthesis, confidence-weighted recommendations, and multi-agent debate.
|
|
4
4
|
|
|
5
|
-
[](https://github.com/matteoscurati/ai-consultants)
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
[](https://docs.anthropic.com/en/docs/claude-code/skills)
|
|
8
8
|
[](https://github.com/matteoscurati/ai-consultants)
|
|
@@ -419,8 +419,8 @@ INVOKING_AGENT=codex ./scripts/consult_all.sh "Question" # Codex excluded
|
|
|
419
419
|
|
|
420
420
|
| Consultant | Default Model | Persona | Focus |
|
|
421
421
|
|------------|---------------|---------|-------|
|
|
422
|
-
| **Qwen3** | qwen3.
|
|
423
|
-
| **GLM** | glm-5 | The Methodologist | Structured approaches |
|
|
422
|
+
| **Qwen3** | qwen3.6-plus | The Analyst | Data-driven analysis |
|
|
423
|
+
| **GLM** | glm-5.1 | The Methodologist | Structured approaches |
|
|
424
424
|
| **Grok** | grok-4.20-0309-reasoning | The Provocateur | Challenge conventions |
|
|
425
425
|
| **DeepSeek** | deepseek-reasoner | The Code Specialist | Algorithms, code generation |
|
|
426
426
|
| **MiniMax** | MiniMax-M2.7 | The Pragmatic Optimizer | Performance, efficiency, pragmatism |
|
|
@@ -477,9 +477,9 @@ Choose the right balance of quality, speed, and cost with model quality tiers.
|
|
|
477
477
|
| Mistral | mistral-large-3 | mistral-medium-latest | devstral-small-2 |
|
|
478
478
|
| Cursor | composer-1.5 | composer-1.5 | gemini-2.0-flash |
|
|
479
479
|
| DeepSeek | deepseek-reasoner | deepseek-v3.2 | deepseek-chat |
|
|
480
|
-
| GLM | glm-5 | glm-5 | glm-4-flash |
|
|
480
|
+
| GLM | glm-5.1 | glm-5.1 | glm-4-flash |
|
|
481
481
|
| Grok | grok-4.20-0309-reasoning | grok-3 | grok-3-mini |
|
|
482
|
-
| Qwen3 | qwen3.
|
|
482
|
+
| Qwen3 | qwen3.6-plus | qwen3.6-35b-a3b | qwen3-32b |
|
|
483
483
|
| Aider | gpt-5.3-codex | gpt-5.3 | gpt-4o-mini |
|
|
484
484
|
| MiniMax | MiniMax-M2.7 | MiniMax-M2.7 | MiniMax-M2.5 |
|
|
485
485
|
| Ollama | qwen2.5-coder:32b | llama3.3 | llama3.2 |
|
package/SKILL.md
CHANGED
|
@@ -5,10 +5,10 @@ license: MIT
|
|
|
5
5
|
compatibility: Requires bash, jq, and at least 2 AI CLI tools (gemini, codex, vibe, etc.). macOS and Linux.
|
|
6
6
|
metadata:
|
|
7
7
|
author: matteoscurati
|
|
8
|
-
version: 2.10.
|
|
8
|
+
version: 2.10.5
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
# AI Consultants v2.10.
|
|
11
|
+
# AI Consultants v2.10.5 - AI Expert Panel
|
|
12
12
|
|
|
13
13
|
Simultaneously consult multiple AIs as "consultants" for coding questions. Each consultant has a **configurable persona** that influences their response style.
|
|
14
14
|
|
package/docs/COST_RATES.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Cost Rates - AI Consultants v2.10.
|
|
1
|
+
# Cost Rates - AI Consultants v2.10.5
|
|
2
2
|
|
|
3
3
|
This page documents the per-token rates used by the cost tracking system.
|
|
4
4
|
|
|
@@ -34,12 +34,13 @@ Since v2.5, models are organized into three tiers. Use `apply_model_tier()` or `
|
|
|
34
34
|
| deepseek-reasoner | Premium | $0.002 | DeepSeek |
|
|
35
35
|
| deepseek-v3.2 | Standard | $0.0014 | DeepSeek |
|
|
36
36
|
| deepseek-chat | Economy | $0.001 | DeepSeek |
|
|
37
|
-
| glm-5 | Premium/Standard | $0.002 | GLM |
|
|
37
|
+
| glm-5.1 | Premium/Standard | $0.002 | GLM |
|
|
38
38
|
| glm-4-flash | Economy | $0.0005 | GLM |
|
|
39
39
|
| grok-4.20-0309-reasoning | Premium | $0.005 | Grok |
|
|
40
40
|
| grok-3 | Standard | $0.003 | Grok |
|
|
41
41
|
| grok-3-mini | Economy | $0.001 | Grok |
|
|
42
|
-
| qwen3.
|
|
42
|
+
| qwen3.6-plus | Premium | $0.000325 | Qwen3 |
|
|
43
|
+
| qwen3.6-35b-a3b | Standard | $0.000163 | Qwen3 |
|
|
43
44
|
| qwen3-32b | Economy | $0.0005 | Qwen3 |
|
|
44
45
|
| MiniMax-M2.7 | Premium/Standard | $0.002 | MiniMax |
|
|
45
46
|
| MiniMax-M2.5 | Economy | $0.0015 | MiniMax |
|
|
@@ -67,12 +68,13 @@ Since v2.5, models are organized into three tiers. Use `apply_model_tier()` or `
|
|
|
67
68
|
| deepseek-reasoner | Premium | $0.006 | DeepSeek |
|
|
68
69
|
| deepseek-v3.2 | Standard | $0.004 | DeepSeek |
|
|
69
70
|
| deepseek-chat | Economy | $0.003 | DeepSeek |
|
|
70
|
-
| glm-5 | Premium/Standard | $0.006 | GLM |
|
|
71
|
+
| glm-5.1 | Premium/Standard | $0.006 | GLM |
|
|
71
72
|
| glm-4-flash | Economy | $0.0015 | GLM |
|
|
72
73
|
| grok-4.20-0309-reasoning | Premium | $0.015 | Grok |
|
|
73
74
|
| grok-3 | Standard | $0.009 | Grok |
|
|
74
75
|
| grok-3-mini | Economy | $0.003 | Grok |
|
|
75
|
-
| qwen3.
|
|
76
|
+
| qwen3.6-plus | Premium | $0.00195 | Qwen3 |
|
|
77
|
+
| qwen3.6-35b-a3b | Standard | $0.0009 | Qwen3 |
|
|
76
78
|
| qwen3-32b | Economy | $0.0015 | Qwen3 |
|
|
77
79
|
| MiniMax-M2.7 | Premium/Standard | $0.006 | MiniMax |
|
|
78
80
|
| MiniMax-M2.5 | Economy | $0.004 | MiniMax |
|
package/docs/cost_rates.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2.10.
|
|
2
|
+
"version": "2.10.5",
|
|
3
3
|
"updated": "2026-03-04",
|
|
4
4
|
"models": {
|
|
5
5
|
"_comment_premium": "Premium tier models - March 2026",
|
|
@@ -8,9 +8,10 @@
|
|
|
8
8
|
"gpt-5.3-codex": {"input": 3.00, "output": 12.00},
|
|
9
9
|
"mistral-large-3": {"input": 2.00, "output": 6.00},
|
|
10
10
|
"deepseek-reasoner": {"input": 0.55, "output": 2.19},
|
|
11
|
-
"glm-5": {"input": 0.50, "output": 2.00},
|
|
11
|
+
"glm-5.1": {"input": 0.50, "output": 2.00},
|
|
12
12
|
"grok-4.20-0309-reasoning": {"input": 5.00, "output": 15.00},
|
|
13
|
-
"qwen3.
|
|
13
|
+
"qwen3.6-plus": {"input": 0.325, "output": 1.95},
|
|
14
|
+
"qwen3.6-35b-a3b": {"input": 0.163, "output": 0.90},
|
|
14
15
|
"composer-1.5": {"input": 0.005, "output": 0.015},
|
|
15
16
|
"minimax-m2.7": {"input": 0.50, "output": 2.00},
|
|
16
17
|
"kimi-code/kimi-for-coding": {"input": 0.50, "output": 2.00},
|
|
@@ -36,6 +37,7 @@
|
|
|
36
37
|
"minimax-m2.5": {"input": 0.30, "output": 1.50},
|
|
37
38
|
|
|
38
39
|
"_comment_legacy": "Legacy models for backwards compatibility",
|
|
40
|
+
"qwen3.5-plus": {"input": 1.60, "output": 6.40},
|
|
39
41
|
"claude-opus-4-5-20251124": {"input": 5.00, "output": 25.00},
|
|
40
42
|
"claude-sonnet-4-5-20251124": {"input": 3.00, "output": 15.00},
|
|
41
43
|
"claude-3-5-haiku-20241022": {"input": 0.001, "output": 0.005},
|
|
@@ -73,9 +75,9 @@
|
|
|
73
75
|
"codex": "gpt-5.3-codex",
|
|
74
76
|
"mistral": "mistral-large-3",
|
|
75
77
|
"deepseek": "deepseek-reasoner",
|
|
76
|
-
"glm": "glm-5",
|
|
78
|
+
"glm": "glm-5.1",
|
|
77
79
|
"grok": "grok-4.20-0309-reasoning",
|
|
78
|
-
"qwen3": "qwen3.
|
|
80
|
+
"qwen3": "qwen3.6-plus",
|
|
79
81
|
"aider": "gpt-5.3-codex",
|
|
80
82
|
"kilo": "auto",
|
|
81
83
|
"cursor": "composer-1.5",
|
|
@@ -92,9 +94,9 @@
|
|
|
92
94
|
"codex": "gpt-5.3-codex",
|
|
93
95
|
"mistral": "mistral-large-3",
|
|
94
96
|
"deepseek": "deepseek-reasoner",
|
|
95
|
-
"glm": "glm-5",
|
|
97
|
+
"glm": "glm-5.1",
|
|
96
98
|
"grok": "grok-4.20-0309-reasoning",
|
|
97
|
-
"qwen3": "qwen3.
|
|
99
|
+
"qwen3": "qwen3.6-plus",
|
|
98
100
|
"aider": "gpt-5.3-codex",
|
|
99
101
|
"kilo": "auto",
|
|
100
102
|
"cursor": "composer-1.5",
|
|
@@ -109,9 +111,9 @@
|
|
|
109
111
|
"codex": "gpt-5.3",
|
|
110
112
|
"mistral": "mistral-medium-latest",
|
|
111
113
|
"deepseek": "deepseek-v3.2",
|
|
112
|
-
"glm": "glm-5",
|
|
114
|
+
"glm": "glm-5.1",
|
|
113
115
|
"grok": "grok-3",
|
|
114
|
-
"qwen3": "qwen3.
|
|
116
|
+
"qwen3": "qwen3.6-35b-a3b",
|
|
115
117
|
"aider": "gpt-5.3",
|
|
116
118
|
"kilo": "auto",
|
|
117
119
|
"cursor": "composer-1.5",
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Release v2.10.4
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-04-10
|
|
4
|
+
**Type:** Patch — GLM model upgrade, Kilo CLI fix
|
|
5
|
+
**Previous:** v2.10.3
|
|
6
|
+
|
|
7
|
+
## Highlights
|
|
8
|
+
|
|
9
|
+
- GLM premium/standard model upgraded from `glm-5` to `glm-5.1`
|
|
10
|
+
- Fixed Kilo CLI consultant that hung indefinitely when stdout was redirected
|
|
11
|
+
- Fixed Kilo CLI auto-detecting other consultants' API keys and picking non-functional models
|
|
12
|
+
- Improved output stripping pipeline efficiency in `query_kilo.sh`
|
|
13
|
+
|
|
14
|
+
## What's New
|
|
15
|
+
|
|
16
|
+
### GLM Model Upgrade
|
|
17
|
+
|
|
18
|
+
GLM premium and standard tier updated from `glm-5` to `glm-5.1`. Economy tier (`glm-4-flash`) remains unchanged.
|
|
19
|
+
|
|
20
|
+
| Tier | Before (v2.10.3) | After (v2.10.4) |
|
|
21
|
+
|------|-------------------|------------------|
|
|
22
|
+
| Premium | glm-5 | glm-5.1 |
|
|
23
|
+
| Standard | glm-5 | glm-5.1 |
|
|
24
|
+
| Economy | glm-4-flash | glm-4-flash |
|
|
25
|
+
|
|
26
|
+
### Kilo CLI Fix
|
|
27
|
+
|
|
28
|
+
Resolved a long-standing issue where the Kilo consultant would hang for the full timeout (180s) and return empty or ANSI-only output. Root causes:
|
|
29
|
+
|
|
30
|
+
1. **Non-TTY hang**: Kilocode CLI hangs when the query is passed as a CLI argument and stdout is redirected. Fixed by passing the query via stdin instead.
|
|
31
|
+
|
|
32
|
+
2. **Wrong provider auto-detection**: Kilocode auto-detects API providers from environment variables. When other consultants' API keys (e.g., `MINIMAX_API_KEY`) were exported, kilocode would pick non-functional models like `MiniMax-M2.7-highspeed`. Fixed by unsetting foreign API keys via `env -u` before invocation.
|
|
33
|
+
|
|
34
|
+
3. **Output cleaning**: Collapsed 5-stage pipe (`sed | sed | tr | grep | grep`) into a single `sed` invocation. Fixed overly aggressive markdown fence filter that would strip opening code fences like `` ```typescript `` — now only strips standalone `` ``` `` lines.
|
|
35
|
+
|
|
36
|
+
### Documentation Fixes
|
|
37
|
+
|
|
38
|
+
- Updated `.env.example` header from v2.10.0 to current version
|
|
39
|
+
- Updated GLM signup URL from `open.bigmodel.cn` to `open.z.ai`
|
|
40
|
+
|
|
41
|
+
## Breaking Changes
|
|
42
|
+
|
|
43
|
+
None.
|
|
44
|
+
|
|
45
|
+
## Upgrade Guide
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# If installed via git clone
|
|
49
|
+
cd ~/.claude/skills/ai-consultants && git pull
|
|
50
|
+
|
|
51
|
+
# If installed via curl | bash
|
|
52
|
+
curl -fsSL https://raw.githubusercontent.com/matteoscurati/ai-consultants/main/scripts/install.sh | bash
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
No configuration changes required. Existing `GLM_MODEL` overrides continue to work.
|
|
56
|
+
|
|
57
|
+
## Commits
|
|
58
|
+
|
|
59
|
+
- `09dac4d` feat: upgrade GLM to glm-5.1, fix Kilo CLI hanging in non-TTY mode
|
|
60
|
+
|
|
61
|
+
## Contributors
|
|
62
|
+
|
|
63
|
+
- @matteoscurati
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Release v2.10.5
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-04-16
|
|
4
|
+
**Type:** Patch — Qwen3 model upgrade to Qwen3.6
|
|
5
|
+
**Previous:** v2.10.4
|
|
6
|
+
|
|
7
|
+
## Highlights
|
|
8
|
+
|
|
9
|
+
- Qwen3 premium default upgraded from `qwen3.5-plus` to `qwen3.6-plus` (80% cheaper)
|
|
10
|
+
- Qwen3 standard tier now uses the open-weight `qwen3.6-35b-a3b` (MoE, 35B total / 3B active, Apache 2.0)
|
|
11
|
+
- Eliminated stale hardcoded model mappings in `get_economic_model()`
|
|
12
|
+
|
|
13
|
+
## What's New
|
|
14
|
+
|
|
15
|
+
### Qwen3.6 Model Upgrade
|
|
16
|
+
|
|
17
|
+
Alibaba released Qwen3.6-35B-A3B on April 16, 2026 — a sparse Mixture-of-Experts model with 35B total parameters but only 3B active during inference. The model scores 51.5 on Terminal-Bench 2.0 and 73.4 on SWE-bench Verified.
|
|
18
|
+
|
|
19
|
+
| Tier | Before (v2.10.4) | After (v2.10.5) |
|
|
20
|
+
|------|-------------------|------------------|
|
|
21
|
+
| Premium | qwen3.5-plus ($1.60/$6.40 per M) | qwen3.6-plus ($0.325/$1.95 per M) |
|
|
22
|
+
| Standard | qwen3.5-plus ($1.60/$6.40 per M) | qwen3.6-35b-a3b ($0.163/$0.90 per M) |
|
|
23
|
+
| Economy | qwen3-32b | qwen3-32b (unchanged) |
|
|
24
|
+
|
|
25
|
+
The premium tier (`qwen3.6-plus`) is Alibaba's hosted API with 1M context window. The standard tier (`qwen3.6-35b-a3b`) is the open-weight variant, also available on Ollama as `qwen3.6:35b-a3b` (24GB).
|
|
26
|
+
|
|
27
|
+
### DRY Refactor: get_economic_model()
|
|
28
|
+
|
|
29
|
+
`get_economic_model()` in `lib/costs.sh` had a hardcoded case statement with stale model names (e.g., `qwen-turbo`, `claude-3-haiku`, `gemini-2.5-flash`). Refactored to delegate to `get_model_for_tier()` in `config.sh`, matching the pattern already used by `get_premium_model()` in `lib/routing.sh`.
|
|
30
|
+
|
|
31
|
+
### Version Fix
|
|
32
|
+
|
|
33
|
+
Fixed `AI_CONSULTANTS_VERSION` in `config.sh` which was stuck at `2.10.0` since the npm packaging release.
|
|
34
|
+
|
|
35
|
+
## Breaking Changes
|
|
36
|
+
|
|
37
|
+
None.
|
|
38
|
+
|
|
39
|
+
## Upgrade Guide
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# If installed via git clone
|
|
43
|
+
cd ~/.claude/skills/ai-consultants && git pull
|
|
44
|
+
|
|
45
|
+
# If installed via curl | bash
|
|
46
|
+
curl -fsSL https://raw.githubusercontent.com/matteoscurati/ai-consultants/main/scripts/install.sh | bash
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
No configuration changes required. Existing `QWEN3_MODEL` overrides continue to work.
|
|
50
|
+
|
|
51
|
+
## Commits
|
|
52
|
+
|
|
53
|
+
- `aaa1d69` feat(qwen3): upgrade to Qwen3.6-Plus and Qwen3.6-35B-A3B
|
|
54
|
+
|
|
55
|
+
## Contributors
|
|
56
|
+
|
|
57
|
+
- @matteoscurati
|
package/package.json
CHANGED
|
@@ -79,8 +79,8 @@ CURSOR_MODEL=composer-1.5
|
|
|
79
79
|
AIDER_MODEL=gpt-5.3-codex
|
|
80
80
|
AMP_MODEL=amp
|
|
81
81
|
KIMI_MODEL=kimi-code/kimi-for-coding
|
|
82
|
-
QWEN3_MODEL=qwen3.
|
|
83
|
-
GLM_MODEL=glm-5
|
|
82
|
+
QWEN3_MODEL=qwen3.6-plus
|
|
83
|
+
GLM_MODEL=glm-5.1
|
|
84
84
|
GROK_MODEL=grok-4.20-0309-reasoning
|
|
85
85
|
DEEPSEEK_MODEL=deepseek-reasoner
|
|
86
86
|
MINIMAX_MODEL=MiniMax-M2.7
|
package/scripts/config.sh
CHANGED
|
@@ -105,7 +105,7 @@ AIDER_CMD="${AIDER_CMD:-aider}"
|
|
|
105
105
|
# QWEN3 CONFIGURATION - The Analyst (CLI/API switchable v2.7)
|
|
106
106
|
# =============================================================================
|
|
107
107
|
|
|
108
|
-
QWEN3_MODEL="${QWEN3_MODEL:-qwen3.
|
|
108
|
+
QWEN3_MODEL="${QWEN3_MODEL:-qwen3.6-plus}"
|
|
109
109
|
QWEN3_TIMEOUT_SECONDS="${QWEN3_TIMEOUT:-180}"
|
|
110
110
|
QWEN3_CMD="${QWEN3_CMD:-qwen}"
|
|
111
111
|
QWEN3_API_URL="${QWEN3_API_URL:-https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation}"
|
|
@@ -117,7 +117,7 @@ QWEN3_FORMAT="${QWEN3_FORMAT:-qwen}"
|
|
|
117
117
|
# GLM CONFIGURATION - The Code Specialist (API-based)
|
|
118
118
|
# =============================================================================
|
|
119
119
|
|
|
120
|
-
GLM_MODEL="${GLM_MODEL:-glm-5}"
|
|
120
|
+
GLM_MODEL="${GLM_MODEL:-glm-5.1}"
|
|
121
121
|
GLM_TIMEOUT_SECONDS="${GLM_TIMEOUT:-180}"
|
|
122
122
|
GLM_API_URL="${GLM_API_URL:-https://api.z.ai/api/coding/paas/v4/chat/completions}"
|
|
123
123
|
GLM_FORMAT="${GLM_FORMAT:-openai}"
|
|
@@ -531,9 +531,9 @@ get_model_for_tier() {
|
|
|
531
531
|
mistral) echo "mistral-large-3" ;;
|
|
532
532
|
cursor) echo "composer-1.5" ;;
|
|
533
533
|
deepseek) echo "deepseek-reasoner" ;;
|
|
534
|
-
glm) echo "glm-5" ;;
|
|
534
|
+
glm) echo "glm-5.1" ;;
|
|
535
535
|
grok) echo "grok-4.20-0309-reasoning" ;;
|
|
536
|
-
qwen3) echo "qwen3.
|
|
536
|
+
qwen3) echo "qwen3.6-plus" ;;
|
|
537
537
|
aider) echo "gpt-5.3-codex" ;;
|
|
538
538
|
amp) echo "amp" ;;
|
|
539
539
|
ollama) echo "qwen2.5-coder:32b" ;;
|
|
@@ -551,9 +551,9 @@ get_model_for_tier() {
|
|
|
551
551
|
mistral) echo "mistral-medium-latest" ;;
|
|
552
552
|
cursor) echo "composer-1.5" ;; # Same as premium (single model)
|
|
553
553
|
deepseek) echo "deepseek-v3.2" ;;
|
|
554
|
-
glm) echo "glm-5" ;; # Same as premium (no mid-tier GLM)
|
|
554
|
+
glm) echo "glm-5.1" ;; # Same as premium (no mid-tier GLM)
|
|
555
555
|
grok) echo "grok-3" ;;
|
|
556
|
-
qwen3) echo "qwen3.
|
|
556
|
+
qwen3) echo "qwen3.6-35b-a3b" ;; # Open-weight MoE (35B total, 3B active)
|
|
557
557
|
aider) echo "gpt-5.3" ;;
|
|
558
558
|
amp) echo "amp" ;; # Same model (no tiers)
|
|
559
559
|
ollama) echo "llama3.3" ;;
|
|
@@ -750,4 +750,4 @@ EOF
|
|
|
750
750
|
# VERSION
|
|
751
751
|
# =============================================================================
|
|
752
752
|
|
|
753
|
-
AI_CONSULTANTS_VERSION="2.10.
|
|
753
|
+
AI_CONSULTANTS_VERSION="2.10.5"
|
package/scripts/lib/common.sh
CHANGED
|
@@ -124,12 +124,12 @@ run_with_timeout() {
|
|
|
124
124
|
# =============================================================================
|
|
125
125
|
|
|
126
126
|
check_command() {
|
|
127
|
-
local
|
|
127
|
+
local cmd_name=$1
|
|
128
128
|
local name=$2
|
|
129
129
|
local install_hint=$3
|
|
130
130
|
|
|
131
|
-
if ! command -v "$
|
|
132
|
-
log_error "$name not found (command: $
|
|
131
|
+
if ! command -v "$cmd_name" &> /dev/null; then
|
|
132
|
+
log_error "$name not found (command: $cmd_name)"
|
|
133
133
|
if [[ -n "$install_hint" ]]; then
|
|
134
134
|
log_info "Install with: $install_hint"
|
|
135
135
|
fi
|
|
@@ -612,7 +612,7 @@ map_set() {
|
|
|
612
612
|
local keys_var="_MAP_${map_name}__KEYS__"
|
|
613
613
|
local current_keys
|
|
614
614
|
eval "current_keys=\"\${$keys_var:-}\""
|
|
615
|
-
if [[
|
|
615
|
+
if [[ " $current_keys " != *" $safe_key "* ]]; then
|
|
616
616
|
if [[ -z "$current_keys" ]]; then
|
|
617
617
|
eval "$keys_var=\"\$safe_key\""
|
|
618
618
|
else
|
package/scripts/lib/costs.sh
CHANGED
|
@@ -476,26 +476,15 @@ get_model_tier() {
|
|
|
476
476
|
}
|
|
477
477
|
|
|
478
478
|
# Get economic model for a consultant
|
|
479
|
+
# Delegates to get_model_for_tier() in config.sh (single source of truth)
|
|
479
480
|
# Usage: get_economic_model <consultant>
|
|
480
481
|
get_economic_model() {
|
|
481
482
|
local consultant="$1"
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
mistral) echo "mistral-small" ;;
|
|
488
|
-
kilo) echo "kilo" ;; # No economy variant
|
|
489
|
-
cursor) echo "cursor" ;; # No economy variant
|
|
490
|
-
claude) echo "claude-3-haiku" ;;
|
|
491
|
-
qwen3) echo "qwen-turbo" ;;
|
|
492
|
-
glm) echo "glm-3-turbo" ;;
|
|
493
|
-
grok) echo "grok-3-mini" ;;
|
|
494
|
-
deepseek) echo "deepseek-chat" ;;
|
|
495
|
-
|
|
496
|
-
minimax) echo "MiniMax-M2.5" ;;
|
|
497
|
-
*) echo "" ;;
|
|
498
|
-
esac
|
|
483
|
+
if type get_model_for_tier &>/dev/null; then
|
|
484
|
+
get_model_for_tier "$consultant" "economy"
|
|
485
|
+
else
|
|
486
|
+
echo ""
|
|
487
|
+
fi
|
|
499
488
|
}
|
|
500
489
|
|
|
501
490
|
# Calculate query complexity score (1-10)
|
package/scripts/lib/routing.sh
CHANGED
|
@@ -257,13 +257,15 @@ get_selected_consultants_json() {
|
|
|
257
257
|
local category="$1"
|
|
258
258
|
local min_affinity="${2:-7}"
|
|
259
259
|
|
|
260
|
-
local consultants
|
|
260
|
+
local consultants
|
|
261
|
+
consultants=$(select_consultants "$category" "$min_affinity")
|
|
261
262
|
local json="["
|
|
262
263
|
local first=true
|
|
263
264
|
|
|
264
265
|
while IFS= read -r c; do
|
|
265
266
|
if [[ -n "$c" ]]; then
|
|
266
|
-
local score
|
|
267
|
+
local score
|
|
268
|
+
score=$(get_affinity "$category" "$c")
|
|
267
269
|
if [[ "$first" == "true" ]]; then
|
|
268
270
|
first=false
|
|
269
271
|
else
|
package/scripts/query_kilo.sh
CHANGED
|
@@ -44,17 +44,22 @@ TEMP_OUTPUT=$(mktemp)
|
|
|
44
44
|
TEMP_RAW=$(mktemp)
|
|
45
45
|
trap 'rm -f "$TEMP_OUTPUT" "$TEMP_RAW"' EXIT
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
log_info "Consulting Kilo Code (timeout: ${KILO_TIMEOUT_SECONDS}s)..."
|
|
48
|
+
|
|
49
|
+
# Kilocode hangs when the query is passed as a CLI argument with stdout redirected.
|
|
50
|
+
# Passing the query via stdin avoids this issue.
|
|
51
|
+
# Also: unset API keys from other consultants — kilocode auto-detects providers
|
|
52
|
+
# from env vars (e.g. MINIMAX_API_KEY) and may pick a non-functional model.
|
|
53
|
+
KILO_STDIN_ARGS=("env"
|
|
54
|
+
"-u" "MINIMAX_API_KEY" "-u" "GLM_API_KEY" "-u" "GROK_API_KEY"
|
|
55
|
+
"-u" "DEEPSEEK_API_KEY" "-u" "OPENAI_API_KEY" "-u" "ANTHROPIC_API_KEY"
|
|
56
|
+
"-u" "GEMINI_API_KEY" "-u" "MISTRAL_API_KEY" "-u" "QWEN3_API_KEY"
|
|
57
|
+
"$KILO_CMD" "run" "--auto" "--dir" "/tmp")
|
|
49
58
|
if [[ -n "${KILO_MODEL:-}" && "${KILO_MODEL}" != "auto" ]]; then
|
|
50
|
-
|
|
59
|
+
KILO_STDIN_ARGS+=("--model" "$KILO_MODEL")
|
|
51
60
|
fi
|
|
52
|
-
KILO_ARGS+=("$FULL_QUERY")
|
|
53
|
-
|
|
54
|
-
# Use run_with_timeout for cross-platform support (Linux/macOS/POSIX)
|
|
55
|
-
log_info "Consulting Kilo Code (timeout: ${KILO_TIMEOUT_SECONDS}s)..."
|
|
56
61
|
|
|
57
|
-
if run_with_timeout "$KILO_TIMEOUT_SECONDS" "${
|
|
62
|
+
if echo "$FULL_QUERY" | run_with_timeout "$KILO_TIMEOUT_SECONDS" "${KILO_STDIN_ARGS[@]}" > "$TEMP_RAW" 2>&1; then
|
|
58
63
|
exit_code=0
|
|
59
64
|
else
|
|
60
65
|
exit_code=$?
|
|
@@ -62,8 +67,9 @@ fi
|
|
|
62
67
|
|
|
63
68
|
# --- Strip ANSI escape codes from Kilo's text output ---
|
|
64
69
|
if [[ -f "$TEMP_RAW" && -s "$TEMP_RAW" ]]; then
|
|
65
|
-
#
|
|
66
|
-
CONTENT=$(LC_ALL=C sed 's/\x1b\[[0-9;]*[a-zA-Z]//g'
|
|
70
|
+
# Strip ANSI codes, carriage returns, empty lines, kilo's model header, and markdown fences
|
|
71
|
+
CONTENT=$(LC_ALL=C sed -e 's/\x1b\[[0-9;]*[a-zA-Z]//g' -e 's/\r//g' -e '/^$/d' \
|
|
72
|
+
-e '/^> code · /d' -e '/^```$/d' "$TEMP_RAW") || true
|
|
67
73
|
|
|
68
74
|
if [[ -n "${CONTENT:-}" ]]; then
|
|
69
75
|
exit_code=0
|
package/scripts/query_qwen3.sh
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# Usage: ./query_qwen3.sh "question" [context_file] [output_file]
|
|
5
5
|
#
|
|
6
6
|
# Environment variables:
|
|
7
|
-
# QWEN3_MODEL - Model to use (default: qwen3.
|
|
7
|
+
# QWEN3_MODEL - Model to use (default: qwen3.6-plus)
|
|
8
8
|
# QWEN3_TIMEOUT - Timeout in seconds (default: 180)
|
|
9
9
|
# QWEN3_USE_API - Use API mode instead of CLI (default: false)
|
|
10
10
|
# QWEN3_API_KEY - API key for DashScope API (required for API mode)
|
|
@@ -82,7 +82,7 @@ END_TIME=$(get_timestamp_ms)
|
|
|
82
82
|
LATENCY_MS=$((END_TIME - START_TIME))
|
|
83
83
|
|
|
84
84
|
# --- Configuration for response building ---
|
|
85
|
-
MODEL_USED="${QWEN3_MODEL:-qwen3.
|
|
85
|
+
MODEL_USED="${QWEN3_MODEL:-qwen3.6-plus}"
|
|
86
86
|
PERSONA_NAME=$(get_persona_name "$CONSULTANT_NAME")
|
|
87
87
|
|
|
88
88
|
# --- Post-processing: use shared helper ---
|