ai-consultants 2.10.2 → 2.10.4
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 +24 -5
- package/README.md +6 -6
- package/SKILL.md +2 -2
- package/docs/COST_RATES.md +5 -5
- package/docs/cost_rates.json +9 -13
- package/docs/releases/v2.10.2.md +1 -5
- package/docs/releases/v2.10.3.md +63 -0
- package/docs/releases/v2.10.4.md +63 -0
- package/package.json +1 -1
- package/references/configuration.md +2 -2
- package/scripts/config.sh +6 -6
- package/scripts/configure.sh +3 -3
- package/scripts/lib/common.sh +1 -1
- package/scripts/lib/costs.sh +2 -2
- package/scripts/query_grok.sh +1 -1
- package/scripts/query_kilo.sh +16 -10
- 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.4
|
|
10
10
|
|
|
11
11
|
## Distribution
|
|
12
12
|
|
|
@@ -457,8 +457,8 @@ 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 |
|
|
461
|
-
| Grok | grok-4-
|
|
460
|
+
| GLM | glm-5.1 |
|
|
461
|
+
| Grok | grok-4.20-0309-reasoning |
|
|
462
462
|
| Qwen3 | qwen3.5-plus |
|
|
463
463
|
| Kimi | kimi-code/kimi-for-coding |
|
|
464
464
|
| Aider | gpt-5.3-codex |
|
|
@@ -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,10 +802,25 @@ curl -fsSL https://raw.githubusercontent.com/matteoscurati/ai-consultants/main/s
|
|
|
798
802
|
|
|
799
803
|
## Changelog
|
|
800
804
|
|
|
805
|
+
### v2.10.4
|
|
806
|
+
- GLM premium/standard model upgraded from `glm-5` to `glm-5.1`
|
|
807
|
+
- Fixed Kilo CLI hanging indefinitely in non-TTY mode (query via stdin instead of CLI argument)
|
|
808
|
+
- Fixed Kilo CLI picking wrong provider when other consultants' API keys were in the environment
|
|
809
|
+
- Collapsed 5-stage ANSI stripping pipeline into single sed invocation in `query_kilo.sh`
|
|
810
|
+
- Fixed overly aggressive markdown fence filter in `query_kilo.sh` (only strips standalone ``` lines now)
|
|
811
|
+
- Updated `.env.example` GLM signup URL to `open.z.ai`
|
|
812
|
+
|
|
813
|
+
### v2.10.3
|
|
814
|
+
- Grok premium model upgraded to `grok-4.20-0309-reasoning` (replaces `grok-4-1-fast-reasoning`)
|
|
815
|
+
- GLM API endpoint migrated from `open.bigmodel.cn` to `api.z.ai/api/coding/paas/v4`
|
|
816
|
+
- Removed non-functional MiniMax highspeed models (`MiniMax-M2.7-highspeed`, `MiniMax-M2.5-highspeed`)
|
|
817
|
+
- Removed legacy `grok-beta` from cost catalog
|
|
818
|
+
- Fixed GLM URL fallback in `common.sh` and `configure.sh` (were still using old endpoint)
|
|
819
|
+
- Fixed duplicate `minimax-m2.5` entry with conflicting rates in `cost_rates.json`
|
|
820
|
+
|
|
801
821
|
### v2.10.2
|
|
802
822
|
- MiniMax M2.7 upgrade: premium/standard now use MiniMax-M2.7, economy uses MiniMax-M2.5
|
|
803
823
|
- Model tiers: premium (MiniMax-M2.7), standard (MiniMax-M2.7), economy (MiniMax-M2.5)
|
|
804
|
-
- MiniMax-M2.7-highspeed available in model catalog for manual override
|
|
805
824
|
|
|
806
825
|
### v2.10.1
|
|
807
826
|
- Slash command quality improvements: file context handling, result presentation templates, error recovery guidance
|
|
@@ -813,7 +832,7 @@ curl -fsSL https://raw.githubusercontent.com/matteoscurati/ai-consultants/main/s
|
|
|
813
832
|
- MiniMax M2.5 API support via OpenAI-compatible endpoint
|
|
814
833
|
- New consultant: MiniMax with "The Pragmatic Optimizer" persona (ID: 21)
|
|
815
834
|
- New environment variables: `ENABLE_MINIMAX`, `MINIMAX_API_KEY`, `MINIMAX_MODEL`, `MINIMAX_API_URL`
|
|
816
|
-
- Model tiers: premium (MiniMax-M2.5), standard (MiniMax-M2.1), economy (MiniMax-M2.5
|
|
835
|
+
- Model tiers: premium (MiniMax-M2.5), standard (MiniMax-M2.1), economy (MiniMax-M2.5)
|
|
817
836
|
- npx distribution: `npx ai-consultants "question"` (zero dependencies)
|
|
818
837
|
- New `bin/ai-consultants` wrapper with symlink resolution and subcommand routing
|
|
819
838
|
- Now supports 15 consultants total
|
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# AI Consultants v2.10.
|
|
1
|
+
# AI Consultants v2.10.4
|
|
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)
|
|
@@ -420,8 +420,8 @@ INVOKING_AGENT=codex ./scripts/consult_all.sh "Question" # Codex excluded
|
|
|
420
420
|
| Consultant | Default Model | Persona | Focus |
|
|
421
421
|
|------------|---------------|---------|-------|
|
|
422
422
|
| **Qwen3** | qwen3.5-plus | The Analyst | Data-driven analysis |
|
|
423
|
-
| **GLM** | glm-5 | The Methodologist | Structured approaches |
|
|
424
|
-
| **Grok** | grok-4-
|
|
423
|
+
| **GLM** | glm-5.1 | The Methodologist | Structured approaches |
|
|
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 |
|
|
427
427
|
|
|
@@ -477,8 +477,8 @@ 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 |
|
|
481
|
-
| Grok | grok-4-
|
|
480
|
+
| GLM | glm-5.1 | glm-5.1 | glm-4-flash |
|
|
481
|
+
| Grok | grok-4.20-0309-reasoning | grok-3 | grok-3-mini |
|
|
482
482
|
| Qwen3 | qwen3.5-plus | qwen3.5-plus | 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 |
|
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.4
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
# AI Consultants v2.10.
|
|
11
|
+
# AI Consultants v2.10.4 - 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.4
|
|
2
2
|
|
|
3
3
|
This page documents the per-token rates used by the cost tracking system.
|
|
4
4
|
|
|
@@ -34,9 +34,9 @@ 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
|
-
| grok-4-
|
|
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
42
|
| qwen3.5-plus | Premium/Standard | $0.002 | Qwen3 |
|
|
@@ -67,9 +67,9 @@ Since v2.5, models are organized into three tiers. Use `apply_model_tier()` or `
|
|
|
67
67
|
| deepseek-reasoner | Premium | $0.006 | DeepSeek |
|
|
68
68
|
| deepseek-v3.2 | Standard | $0.004 | DeepSeek |
|
|
69
69
|
| deepseek-chat | Economy | $0.003 | DeepSeek |
|
|
70
|
-
| glm-5 | Premium/Standard | $0.006 | GLM |
|
|
70
|
+
| glm-5.1 | Premium/Standard | $0.006 | GLM |
|
|
71
71
|
| glm-4-flash | Economy | $0.0015 | GLM |
|
|
72
|
-
| grok-4-
|
|
72
|
+
| grok-4.20-0309-reasoning | Premium | $0.015 | Grok |
|
|
73
73
|
| grok-3 | Standard | $0.009 | Grok |
|
|
74
74
|
| grok-3-mini | Economy | $0.003 | Grok |
|
|
75
75
|
| qwen3.5-plus | Premium/Standard | $0.006 | Qwen3 |
|
package/docs/cost_rates.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2.10.
|
|
2
|
+
"version": "2.10.4",
|
|
3
3
|
"updated": "2026-03-04",
|
|
4
4
|
"models": {
|
|
5
5
|
"_comment_premium": "Premium tier models - March 2026",
|
|
@@ -8,12 +8,11 @@
|
|
|
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},
|
|
12
|
-
"grok-4-
|
|
11
|
+
"glm-5.1": {"input": 0.50, "output": 2.00},
|
|
12
|
+
"grok-4.20-0309-reasoning": {"input": 5.00, "output": 15.00},
|
|
13
13
|
"qwen3.5-plus": {"input": 1.60, "output": 6.40},
|
|
14
14
|
"composer-1.5": {"input": 0.005, "output": 0.015},
|
|
15
15
|
"minimax-m2.7": {"input": 0.50, "output": 2.00},
|
|
16
|
-
"minimax-m2.7-highspeed": {"input": 0.20, "output": 1.00},
|
|
17
16
|
"kimi-code/kimi-for-coding": {"input": 0.50, "output": 2.00},
|
|
18
17
|
"amp": {"input": 0.005, "output": 0.015},
|
|
19
18
|
|
|
@@ -63,12 +62,9 @@
|
|
|
63
62
|
"qwen-turbo": {"input": 0.0008, "output": 0.002},
|
|
64
63
|
"glm-4": {"input": 0.003, "output": 0.009},
|
|
65
64
|
"glm-3-turbo": {"input": 0.001, "output": 0.003},
|
|
66
|
-
"grok-beta": {"input": 0.005, "output": 0.015},
|
|
67
65
|
"grok-2": {"input": 0.01, "output": 0.03},
|
|
68
66
|
"deepseek-coder": {"input": 0.001, "output": 0.002},
|
|
69
|
-
"minimax-m2.
|
|
70
|
-
"minimax-m2.1": {"input": 0.30, "output": 1.50},
|
|
71
|
-
"minimax-m2.5-highspeed": {"input": 0.20, "output": 1.00}
|
|
67
|
+
"minimax-m2.1": {"input": 0.30, "output": 1.50}
|
|
72
68
|
},
|
|
73
69
|
"consultant_fallbacks": {
|
|
74
70
|
"_comment": "Premium defaults - Updated March 2026",
|
|
@@ -77,8 +73,8 @@
|
|
|
77
73
|
"codex": "gpt-5.3-codex",
|
|
78
74
|
"mistral": "mistral-large-3",
|
|
79
75
|
"deepseek": "deepseek-reasoner",
|
|
80
|
-
"glm": "glm-5",
|
|
81
|
-
"grok": "grok-4-
|
|
76
|
+
"glm": "glm-5.1",
|
|
77
|
+
"grok": "grok-4.20-0309-reasoning",
|
|
82
78
|
"qwen3": "qwen3.5-plus",
|
|
83
79
|
"aider": "gpt-5.3-codex",
|
|
84
80
|
"kilo": "auto",
|
|
@@ -96,8 +92,8 @@
|
|
|
96
92
|
"codex": "gpt-5.3-codex",
|
|
97
93
|
"mistral": "mistral-large-3",
|
|
98
94
|
"deepseek": "deepseek-reasoner",
|
|
99
|
-
"glm": "glm-5",
|
|
100
|
-
"grok": "grok-4-
|
|
95
|
+
"glm": "glm-5.1",
|
|
96
|
+
"grok": "grok-4.20-0309-reasoning",
|
|
101
97
|
"qwen3": "qwen3.5-plus",
|
|
102
98
|
"aider": "gpt-5.3-codex",
|
|
103
99
|
"kilo": "auto",
|
|
@@ -113,7 +109,7 @@
|
|
|
113
109
|
"codex": "gpt-5.3",
|
|
114
110
|
"mistral": "mistral-medium-latest",
|
|
115
111
|
"deepseek": "deepseek-v3.2",
|
|
116
|
-
"glm": "glm-5",
|
|
112
|
+
"glm": "glm-5.1",
|
|
117
113
|
"grok": "grok-3",
|
|
118
114
|
"qwen3": "qwen3.5-plus",
|
|
119
115
|
"aider": "gpt-5.3",
|
package/docs/releases/v2.10.2.md
CHANGED
|
@@ -9,13 +9,11 @@
|
|
|
9
9
|
- MiniMax upgraded from M2.5 to M2.7 (released 2026-03-18)
|
|
10
10
|
- Premium and standard tiers now use MiniMax-M2.7
|
|
11
11
|
- Economy tier uses MiniMax-M2.5 (previous default)
|
|
12
|
-
- MiniMax-M2.7-highspeed available in model catalog for manual override
|
|
13
|
-
|
|
14
12
|
## What's New
|
|
15
13
|
|
|
16
14
|
### MiniMax M2.7 Model Upgrade
|
|
17
15
|
|
|
18
|
-
MiniMax released M2.7
|
|
16
|
+
MiniMax released M2.7 on March 18, 2026. This patch updates all MiniMax tier assignments:
|
|
19
17
|
|
|
20
18
|
| Tier | Before (v2.10.1) | After (v2.10.2) |
|
|
21
19
|
|------|-------------------|------------------|
|
|
@@ -25,8 +23,6 @@ MiniMax released M2.7 and M2.7-highspeed on March 18, 2026. This patch updates a
|
|
|
25
23
|
|
|
26
24
|
Default model (`MINIMAX_MODEL`) is now `MiniMax-M2.7`.
|
|
27
25
|
|
|
28
|
-
MiniMax-M2.7-highspeed is available in the pricing catalog and can be used via `MINIMAX_MODEL=MiniMax-M2.7-highspeed`.
|
|
29
|
-
|
|
30
26
|
## Breaking Changes
|
|
31
27
|
|
|
32
28
|
None.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Release v2.10.3
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-03-21
|
|
4
|
+
**Type:** Patch — Model updates, API migration, cleanup
|
|
5
|
+
**Previous:** v2.10.2
|
|
6
|
+
|
|
7
|
+
## Highlights
|
|
8
|
+
|
|
9
|
+
- Grok premium model upgraded to `grok-4.20-0309-reasoning`
|
|
10
|
+
- GLM API migrated from `open.bigmodel.cn` to `api.z.ai/api/coding/paas/v4`
|
|
11
|
+
- Removed non-functional MiniMax highspeed models
|
|
12
|
+
- Fixed stale GLM URL fallbacks in `common.sh` and `configure.sh`
|
|
13
|
+
|
|
14
|
+
## What's New
|
|
15
|
+
|
|
16
|
+
### Grok Model Upgrade
|
|
17
|
+
|
|
18
|
+
Grok premium model updated from `grok-4-1-fast-reasoning` to `grok-4.20-0309-reasoning`. Standard (`grok-3`) and economy (`grok-3-mini`) tiers remain unchanged.
|
|
19
|
+
|
|
20
|
+
| Tier | Before (v2.10.2) | After (v2.10.3) |
|
|
21
|
+
|------|-------------------|------------------|
|
|
22
|
+
| Premium | grok-4-1-fast-reasoning | grok-4.20-0309-reasoning |
|
|
23
|
+
| Standard | grok-3 | grok-3 |
|
|
24
|
+
| Economy | grok-3-mini | grok-3-mini |
|
|
25
|
+
|
|
26
|
+
### GLM API Migration
|
|
27
|
+
|
|
28
|
+
Zhipu AI migrated their API from `open.bigmodel.cn` to `api.z.ai`. The default endpoint is now `https://api.z.ai/api/coding/paas/v4/chat/completions`. Updated in:
|
|
29
|
+
|
|
30
|
+
- `config.sh` (default)
|
|
31
|
+
- `common.sh` (fallback in `get_api_url()`)
|
|
32
|
+
- `configure.sh` (wizard URL array)
|
|
33
|
+
- `.env.example` (example config)
|
|
34
|
+
|
|
35
|
+
### Removed Non-Functional Models
|
|
36
|
+
|
|
37
|
+
Removed models not supported by the current MiniMax token plan:
|
|
38
|
+
|
|
39
|
+
- `MiniMax-M2.7-highspeed`
|
|
40
|
+
- `MiniMax-M2.5-highspeed`
|
|
41
|
+
- `grok-beta` (legacy, no longer recognized by xAI API)
|
|
42
|
+
|
|
43
|
+
### Bug Fixes
|
|
44
|
+
|
|
45
|
+
- Fixed stale GLM URL fallback in `get_api_url()` (`common.sh`) — would have routed to old endpoint if `GLM_API_URL` env var was unset
|
|
46
|
+
- Fixed stale GLM URL in configure wizard (`configure.sh`) — would have written old endpoint to `.env`
|
|
47
|
+
- Fixed duplicate `minimax-m2.5` entry in `cost_rates.json` with conflicting input rates ($0.30 vs $0.50)
|
|
48
|
+
|
|
49
|
+
## Breaking Changes
|
|
50
|
+
|
|
51
|
+
None.
|
|
52
|
+
|
|
53
|
+
## Upgrade Guide
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# If installed via git clone
|
|
57
|
+
cd ~/.claude/skills/ai-consultants && git pull
|
|
58
|
+
|
|
59
|
+
# If installed via curl | bash
|
|
60
|
+
curl -fsSL https://raw.githubusercontent.com/matteoscurati/ai-consultants/main/scripts/install.sh | bash
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
No configuration changes required. Existing `GROK_MODEL` and `GLM_API_URL` overrides continue to work.
|
|
@@ -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
|
package/package.json
CHANGED
|
@@ -80,8 +80,8 @@ AIDER_MODEL=gpt-5.3-codex
|
|
|
80
80
|
AMP_MODEL=amp
|
|
81
81
|
KIMI_MODEL=kimi-code/kimi-for-coding
|
|
82
82
|
QWEN3_MODEL=qwen3.5-plus
|
|
83
|
-
GLM_MODEL=glm-5
|
|
84
|
-
GROK_MODEL=grok-4-
|
|
83
|
+
GLM_MODEL=glm-5.1
|
|
84
|
+
GROK_MODEL=grok-4.20-0309-reasoning
|
|
85
85
|
DEEPSEEK_MODEL=deepseek-reasoner
|
|
86
86
|
MINIMAX_MODEL=MiniMax-M2.7
|
|
87
87
|
OLLAMA_MODEL=qwen2.5-coder:32b
|
package/scripts/config.sh
CHANGED
|
@@ -117,9 +117,9 @@ 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
|
-
GLM_API_URL="${GLM_API_URL:-https://
|
|
122
|
+
GLM_API_URL="${GLM_API_URL:-https://api.z.ai/api/coding/paas/v4/chat/completions}"
|
|
123
123
|
GLM_FORMAT="${GLM_FORMAT:-openai}"
|
|
124
124
|
# API key: Set GLM_API_KEY environment variable
|
|
125
125
|
|
|
@@ -127,7 +127,7 @@ GLM_FORMAT="${GLM_FORMAT:-openai}"
|
|
|
127
127
|
# GROK CONFIGURATION - The Provocateur (API-based)
|
|
128
128
|
# =============================================================================
|
|
129
129
|
|
|
130
|
-
GROK_MODEL="${GROK_MODEL:-grok-4-
|
|
130
|
+
GROK_MODEL="${GROK_MODEL:-grok-4.20-0309-reasoning}"
|
|
131
131
|
GROK_TIMEOUT_SECONDS="${GROK_TIMEOUT:-180}"
|
|
132
132
|
GROK_API_URL="${GROK_API_URL:-https://api.x.ai/v1/chat/completions}"
|
|
133
133
|
GROK_FORMAT="${GROK_FORMAT:-openai}"
|
|
@@ -531,8 +531,8 @@ 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" ;;
|
|
535
|
-
grok) echo "grok-4-
|
|
534
|
+
glm) echo "glm-5.1" ;;
|
|
535
|
+
grok) echo "grok-4.20-0309-reasoning" ;;
|
|
536
536
|
qwen3) echo "qwen3.5-plus" ;;
|
|
537
537
|
aider) echo "gpt-5.3-codex" ;;
|
|
538
538
|
amp) echo "amp" ;;
|
|
@@ -551,7 +551,7 @@ 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
556
|
qwen3) echo "qwen3.5-plus" ;; # Same as premium (single tier available)
|
|
557
557
|
aider) echo "gpt-5.3" ;;
|
package/scripts/configure.sh
CHANGED
|
@@ -47,8 +47,8 @@ CLI_AGENT_PERSONAS=("The Architect" "The Pragmatist" "The Devil's Advocate" "The
|
|
|
47
47
|
# API Agents: name|key_var|api_url|model|persona
|
|
48
48
|
API_AGENT_NAMES=("Qwen3" "GLM" "Grok" "DeepSeek")
|
|
49
49
|
API_AGENT_KEY_VARS=("QWEN3_API_KEY" "GLM_API_KEY" "GROK_API_KEY" "DEEPSEEK_API_KEY")
|
|
50
|
-
API_AGENT_URLS=("https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation" "https://
|
|
51
|
-
API_AGENT_MODELS=("qwen-max" "glm-4" "grok-4-
|
|
50
|
+
API_AGENT_URLS=("https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation" "https://api.z.ai/api/coding/paas/v4/chat/completions" "https://api.x.ai/v1/chat/completions" "https://api.deepseek.com/v1/chat/completions")
|
|
51
|
+
API_AGENT_MODELS=("qwen-max" "glm-4" "grok-4.20-0309-reasoning" "deepseek-reasoner")
|
|
52
52
|
API_AGENT_PERSONAS=("The Analyst" "The Methodologist" "The Provocateur" "The Code Specialist")
|
|
53
53
|
|
|
54
54
|
# State arrays (parallel to CLI_AGENT_NAMES)
|
|
@@ -771,7 +771,7 @@ QWEN3_TIMEOUT=180
|
|
|
771
771
|
GLM_MODEL=glm-4
|
|
772
772
|
GLM_TIMEOUT=180
|
|
773
773
|
|
|
774
|
-
GROK_MODEL=grok-4-
|
|
774
|
+
GROK_MODEL=grok-4.20-0309-reasoning
|
|
775
775
|
GROK_TIMEOUT=180
|
|
776
776
|
|
|
777
777
|
DEEPSEEK_MODEL=deepseek-reasoner
|
package/scripts/lib/common.sh
CHANGED
|
@@ -354,7 +354,7 @@ get_api_url() {
|
|
|
354
354
|
CLAUDE) echo "${CLAUDE_API_URL:-https://api.anthropic.com/v1/messages}" ;;
|
|
355
355
|
MISTRAL) echo "${MISTRAL_API_URL:-https://api.mistral.ai/v1/chat/completions}" ;;
|
|
356
356
|
QWEN3) echo "${QWEN3_API_URL:-https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation}" ;;
|
|
357
|
-
GLM) echo "${GLM_API_URL:-https://
|
|
357
|
+
GLM) echo "${GLM_API_URL:-https://api.z.ai/api/coding/paas/v4/chat/completions}" ;;
|
|
358
358
|
GROK) echo "${GROK_API_URL:-https://api.x.ai/v1/chat/completions}" ;;
|
|
359
359
|
DEEPSEEK) echo "${DEEPSEEK_API_URL:-https://api.deepseek.com/v1/chat/completions}" ;;
|
|
360
360
|
MINIMAX) echo "${MINIMAX_API_URL:-https://api.minimax.io/v1/chat/completions}" ;;
|
package/scripts/lib/costs.sh
CHANGED
|
@@ -149,7 +149,7 @@ get_input_cost_per_1k() {
|
|
|
149
149
|
glm-4) echo "0.003" ;;
|
|
150
150
|
glm-3-turbo) echo "0.001" ;;
|
|
151
151
|
# Grok models (xAI)
|
|
152
|
-
grok-4-
|
|
152
|
+
grok-4.20-0309-reasoning) echo "0.005" ;;
|
|
153
153
|
grok-2) echo "0.01" ;;
|
|
154
154
|
# Default
|
|
155
155
|
*) echo "0.005" ;;
|
|
@@ -196,7 +196,7 @@ get_output_cost_per_1k() {
|
|
|
196
196
|
glm-4) echo "0.009" ;;
|
|
197
197
|
glm-3-turbo) echo "0.003" ;;
|
|
198
198
|
# Grok models (xAI)
|
|
199
|
-
grok-4-
|
|
199
|
+
grok-4.20-0309-reasoning) echo "0.015" ;;
|
|
200
200
|
grok-2) echo "0.03" ;;
|
|
201
201
|
# Default
|
|
202
202
|
*) echo "0.015" ;;
|
package/scripts/query_grok.sh
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
#
|
|
6
6
|
# Environment variables:
|
|
7
7
|
# GROK_API_KEY - API key for xAI (required)
|
|
8
|
-
# GROK_MODEL - Model to use (default: grok-4-
|
|
8
|
+
# GROK_MODEL - Model to use (default: grok-4.20-0309-reasoning)
|
|
9
9
|
# GROK_TIMEOUT - Timeout in seconds (default: 180)
|
|
10
10
|
# ENABLE_PERSONA - Enable "The Provocateur" persona (default: true)
|
|
11
11
|
|
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
|