@kontextmind/kxm 0.7.199 → 0.7.201
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-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +8 -0
- package/docs/audits/2026-10-gap-audit.md +24 -8
- package/docs/contributing/ci-and-release.md +42 -15
- package/docs/reference/cli-reference.md +4 -4
- package/docs/reference/config-reference.md +2 -2
- package/docs/start/first-workflow.md +1 -1
- package/package.json +1 -1
- package/plugins/kxm/.claude-plugin/plugin.json +1 -1
- package/plugins/kxm/dist/cli.js +13 -13
- package/plugins/kxm/dist/mcp-server.js +1 -1
- package/plugins/kxm/dist/runtime-supervisor.js +7 -7
- package/plugins/kxm/dist/runtime.js +15 -15
- package/plugins/kxm/dist/server.js +1 -1
- package/plugins/kxm/package.json +1 -1
- package/plugins/kxm/src/cli/system.ts +1 -1
- package/plugins/kxm/src/mcp-server.ts +1 -1
- package/plugins/kxm/src/modes.ts +5 -5
- package/plugins/kxm/src/pi-producer.ts +1 -1
- package/plugins/kxm/src/subagent-control.ts +2 -2
- package/plugins/kxm/src/template.ts +6 -6
- package/plugins/kxm/src/workforce-names.mjs +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -225,6 +225,14 @@ All notable user-facing changes are documented here. The project follows [Semant
|
|
|
225
225
|
|
|
226
226
|
### Changed
|
|
227
227
|
|
|
228
|
+
- **`kxm init` starts the writer on Grok 4.7.** The starter model file is
|
|
229
|
+
`.kxm/models/grok-grok-4-7.yaml` (`grok` / `grok-4.7`, selector
|
|
230
|
+
`xai/grok-4.7`, alias `grok-default`). The writer roster, the built-in
|
|
231
|
+
coder and browser modes, the general subagent default, the Pi producer
|
|
232
|
+
default, and the `kxm routing benchmark` arm list use the same model.
|
|
233
|
+
Guide candidates and selector examples may still show `grok-4.6`.
|
|
234
|
+
`.kxm/prices.yaml` keeps both price rows.
|
|
235
|
+
|
|
228
236
|
- **The planner fallback is Claude Sonnet 5.5.** `claude-fable` stays the
|
|
229
237
|
planner primary. `claude-claude-sonnet-5-5` (`claude` / `claude-sonnet-5.5`,
|
|
230
238
|
selector `anthropic/claude-sonnet-5.5`, read-only, effort `medium`) is the
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# October 2026 gap audit
|
|
2
2
|
|
|
3
|
-
This page records the gap audit of this repository on 2026-10-21, against `main` at `19ec8a5`.
|
|
3
|
+
This page records the gap audit of this repository on 2026-10-21, against `main` at `19ec8a5`. Eddie approved decision 1, runner placement, on 2026-10-21. Route admission and the witnesses already listed in Tracking still need the operator. The four code fixes from this pass are separate pull requests.
|
|
4
4
|
|
|
5
5
|
The pass compared the CLI, routing, and CI workflows with the docs, the tests, and `.kxm/knowledge`. It left `.kxm/prices.yaml` and `.github/workflows/refresh-models.yml` untouched because [pull request #410](https://github.com/kontextmind/kxm/pull/410) owns those files. Playwright stays on Obscura. [Playwright e2e](https://github.com/kontextmind/kxm/blob/main/.github/workflows/e2e.yml) already runs `npm run e2e` on `ubuntu-latest`.
|
|
6
6
|
|
|
@@ -29,7 +29,7 @@ Product TypeScript and Python sources have no `TODO` or `FIXME` markers outside
|
|
|
29
29
|
|
|
30
30
|
Phase pages under `docs/roadmap/phases/` are symlinks to `plans/kxm-roadmap/phases/`. Plan links such as `../../plan-lane-cli.md` resolve from the real file. A scan that does not follow the symlink reports nine missing targets under `docs/roadmap/phases/`. The generator was not changed.
|
|
31
31
|
|
|
32
|
-
`.kxm/knowledge` has ten pages, last indexed 2026-10-17. It has no first-run page
|
|
32
|
+
`.kxm/knowledge` has ten pages, last indexed 2026-10-17. It has no first-run page. [CI conventions](../../.kxm/knowledge/patterns/ci.md) now records the runner split from decision 1.
|
|
33
33
|
|
|
34
34
|
## Decisions for the operator
|
|
35
35
|
|
|
@@ -37,17 +37,33 @@ Ranked by how often they block a pull request or a first run. Each one needs a s
|
|
|
37
37
|
|
|
38
38
|
### 1. Where pull-request Linux jobs run
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
**Approved by Eddie on 2026-10-21.** On a pull request, these jobs use GitHub-hosted `ubuntu-latest`:
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
- Classify changes
|
|
43
|
+
- Docs lint
|
|
44
|
+
- Linux Node 24 unit lanes `serial`, `light-1`, and `light-2`
|
|
45
|
+
- Plugin validation
|
|
46
|
+
- `required`
|
|
43
47
|
|
|
44
|
-
|
|
48
|
+
The same five jobs stay on `kontextmind-doks` for a push to `main` and for `workflow_dispatch`. Release, nightly, and smoke stay on `kontextmind-doks`. Windows unit lanes stay on `windows-latest`. `km-gh-rn01` was not given the `kontextmind-doks` label.
|
|
49
|
+
|
|
50
|
+
Python MG1 stays on `kontextmind-doks`. `scripts/ci-postgres-17.sh` installs a pinned PostgreSQL 17.11.0 linux/x86_64 archive and maps ICU 74 to the `libicu74` apt package. A newer `ubuntu-latest` image that drops `libicu74` fails that archive until the pin moves. A GitHub-hosted service container would be a different script, so this change does not move Python.
|
|
51
|
+
|
|
52
|
+
The Linux engine shards stay on `kontextmind-doks`. They are the CPU-bound split of `engine.test.ts`. The scale set requests three CPUs so those jobs are not packed onto busy nodes. They do not use a container socket, and they were not in the set that can leave the cluster without a capacity question.
|
|
53
|
+
|
|
54
|
+
Linux Validate on `main` stays on `kontextmind-doks` with the three-minute timeout. On the push for `e63907a` ([run 39547915383](https://github.com/kontextmind/kxm/actions/runs/39547915383)), Validate (linux, Node 22.19.0) ran from 2026-10-21T05:16:57Z to 05:18:06Z and Validate (linux, Node 24) ran from 05:25:47Z to 05:26:56Z, about 69 seconds each after a runner started. That budget is tight for a cold `npm ci` on a GitHub-hosted runner. This job does not use one, so the timeout stays at three minutes. Windows Validate stays at fifteen minutes.
|
|
55
|
+
|
|
56
|
+
`test/core/ci-contract.test.ts` allows `ubuntu-latest` only for the five pull-request jobs above, and only inside the `pull_request` arm of the `runs-on` expression. It still refuses `ubuntu-latest` in `release.yml`, `smoke.yml`, and `nightly.yml`, and it still refuses a bare `ubuntu-latest` selector on any other `ci.yml` job.
|
|
57
|
+
|
|
58
|
+
Before this move, every pull-request Linux job selected `kontextmind-doks`. Windows unit lanes already used `windows-latest`, and only when the classifier marked the change platform-sensitive. The Validate matrix did not run on a pull request.
|
|
59
|
+
|
|
60
|
+
[CI and release](../contributing/ci-and-release.md) records the capacity policy: one warm runner, a burst to four, three CPUs each. The Python lane stays on `kontextmind-doks` because that scale set has no container-engine socket.
|
|
61
|
+
|
|
62
|
+
Observed on 2026-10-21, before the runner split:
|
|
45
63
|
|
|
46
64
|
- Workflow [39513962307](https://github.com/kontextmind/kxm/actions/runs/39513962307) (pull request #410, platform-sensitive) was created at 2026-10-20T23:16:53Z. Docs lint started at 2026-10-21T00:02:27Z, about 46 minutes later. Windows lanes started at 00:03:51Z, within seconds of Classify. Linux lanes then ran mostly one at a time through about 00:20Z.
|
|
47
65
|
- Workflow [39510255392](https://github.com/kontextmind/kxm/actions/runs/39510255392) (planner fallback, code pull request) was created at 2026-10-20T22:44:14Z and completed at 2026-10-20T23:08:16Z, about 24 minutes, while the scale set was less busy.
|
|
48
66
|
|
|
49
|
-
Classify, Docs lint, the Node unit lanes, Plugin validation, and `required` do not need the cluster. Moving those jobs to `ubuntu-latest` would drop the queue and would also edit the contract test, spend GitHub-hosted minutes, and reverse the pinned-runner rule. Python can stay on the scale set, or move to a GitHub-hosted service container, which is a different script than the pinned archive. A newer image that no longer ships `libicu74` fails that archive until the pin moves. Linux Validate on `main` has a three-minute timeout that is tight for a cold `npm ci` on a GitHub-hosted runner. Do not relabel `km-gh-rn01`. That bypasses ARC and serializes the queue.
|
|
50
|
-
|
|
51
67
|
### 2. The built-in vision route
|
|
52
68
|
|
|
53
69
|
`kxm vision assert` still defaults to `zai-coding-cn/glm-5.3-flash` and, for that id only, still runs `pi --provider zai-coding-cn --model glm-5.3-flash`. `.kxm/routes.yaml` removed `zai-coding-cn/*` on 2026-09-27 because that provider is not allowlisted. The admitted replacement in this checkout is `openrouter/z-ai/glm-5.3-flash`. A vision call here with no `--route` still fail-closes, and pull request #412 names `kxm routes admit` in that message. `kxm init` does not admit a vision route.
|
|
@@ -56,7 +72,7 @@ Changing the default needs a vision accuracy witness on the admitted id. This pa
|
|
|
56
72
|
|
|
57
73
|
### 3. The starter writer model
|
|
58
74
|
|
|
59
|
-
`kxm init`
|
|
75
|
+
Approved 2026-10-21 in [pull request #418](https://github.com/kontextmind/kxm/pull/418). `kxm init` admits `xai/grok-4.7`, writes `.kxm/models/grok-grok-4-7.yaml`, and puts that route on the writer roster. `modes.ts`, `subagent-control.ts`, and the Pi producer default name grok-4.7. Glossary and catalog examples that show grok-4.6 stay selector shapes.
|
|
60
76
|
|
|
61
77
|
### 4. Confirm or reverse the defaults already in Tracking
|
|
62
78
|
|
|
@@ -27,11 +27,14 @@ flowchart LR
|
|
|
27
27
|
MAIN -->|"daily 04:00 UTC"| NIGHT[Nightly<br/>complete suite]
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
All workflows live in `.github/workflows/`.
|
|
31
|
-
|
|
32
|
-
`
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
All workflows live in `.github/workflows/`. On a pull request, Classify
|
|
31
|
+
changes, Docs lint, the Linux unit lanes, Plugin validation, and `required`
|
|
32
|
+
use GitHub-hosted `ubuntu-latest`. Engine shards, Python MG1, a push to
|
|
33
|
+
`main`, `workflow_dispatch`, release, nightly, and smoke stay on the ARC
|
|
34
|
+
scale set `kontextmind-doks`. Validate also runs two Windows legs on
|
|
35
|
+
`windows-latest`. `test/core/ci-contract.test.ts` pins the runner selectors,
|
|
36
|
+
job names, coverage floors, and release triggers. Change a workflow and that
|
|
37
|
+
test together.
|
|
35
38
|
|
|
36
39
|
## What runs where
|
|
37
40
|
|
|
@@ -88,10 +91,15 @@ Code pull requests run Docs lint, two Linux Node 24 engine shards, a serial
|
|
|
88
91
|
lane (`permission.test.ts`, then `runtime.test.ts`, then
|
|
89
92
|
`package-install.test.ts`), two light shards for every other Node unit file,
|
|
90
93
|
the Python 3.13 control-plane suite against PostgreSQL 17, and Plugin
|
|
91
|
-
validation.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
94
|
+
validation.
|
|
95
|
+
|
|
96
|
+
On that pull request, Docs lint, the serial lane, both light shards, Plugin
|
|
97
|
+
validation, and `required` use `ubuntu-latest`. The engine shards stay on
|
|
98
|
+
`kontextmind-doks` with the Python lane. The Python lane stays on
|
|
99
|
+
`kontextmind-doks`. That scale set has no container-engine socket, so the
|
|
100
|
+
job starts PostgreSQL 17 with `scripts/ci-postgres-17.sh` on `127.0.0.1:5432`
|
|
101
|
+
and uses the same admin and test DSNs as the contributor procedure in
|
|
102
|
+
[Develop KXM](development.md).
|
|
95
103
|
`light-1` typechecks and checks generated bundles.
|
|
96
104
|
`engine.test.ts` is split by test name because that file alone was 174
|
|
97
105
|
seconds; the serial lane keeps the next longest files off the light pool,
|
|
@@ -127,14 +135,33 @@ scale set `kontextmind-doks` with a three-minute job timeout. Windows uses
|
|
|
127
135
|
GitHub-hosted `windows-latest` with a fifteen-minute timeout so `npm ci` can
|
|
128
136
|
finish. Those four job names are not the required check anymore.
|
|
129
137
|
|
|
138
|
+
The Linux timeout stays at three minutes because that leg stays on the scale
|
|
139
|
+
set. A cold `npm ci` on a GitHub-hosted runner would need a longer budget,
|
|
140
|
+
and this job does not use one.
|
|
141
|
+
|
|
142
|
+
### Which jobs use the ARC scale set
|
|
143
|
+
|
|
144
|
+
On a pull request, Classify changes, Docs lint, the Linux unit lanes
|
|
145
|
+
(`serial`, `light-1`, `light-2`), Plugin validation, and `required` use
|
|
146
|
+
GitHub-hosted `ubuntu-latest`. The same five jobs use `kontextmind-doks` on
|
|
147
|
+
a push to `main` and on `workflow_dispatch`.
|
|
148
|
+
|
|
149
|
+
The Linux engine shards and Python MG1 use `kontextmind-doks` on every
|
|
150
|
+
trigger. Python stays there because `scripts/ci-postgres-17.sh` installs a
|
|
151
|
+
pinned PostgreSQL 17.11.0 archive that needs `libicu74`, and a newer
|
|
152
|
+
`ubuntu-latest` image can drop that package. The engine shards stay there
|
|
153
|
+
because they are the CPU-bound split of `engine.test.ts`. The scale set
|
|
154
|
+
requests three CPUs so those jobs are not packed onto busy nodes. Release,
|
|
155
|
+
nightly, and smoke also stay on `kontextmind-doks`.
|
|
156
|
+
|
|
130
157
|
### CI jobs stay queued while a runner is online
|
|
131
158
|
|
|
132
|
-
|
|
133
|
-
name is the scale set, not a custom label on a repository runner. The
|
|
134
|
-
belongs to the selected-repository runner group `KontextMind DOKS
|
|
135
|
-
must allow this public repository. The legacy repository runner
|
|
136
|
-
must not carry the `kontextmind-doks` label
|
|
137
|
-
serializes the build queue.
|
|
159
|
+
Jobs that still select `kontextmind-doks` can queue while a runner is online.
|
|
160
|
+
That name is the scale set, not a custom label on a repository runner. The
|
|
161
|
+
scale set belongs to the selected-repository runner group `KontextMind DOKS
|
|
162
|
+
ARC`, which must allow this public repository. The legacy repository runner
|
|
163
|
+
`km-gh-rn01` must not carry the `kontextmind-doks` label. Adding that label
|
|
164
|
+
bypasses ARC and serializes the build queue. Do not relabel `km-gh-rn01`.
|
|
138
165
|
|
|
139
166
|
Check GitHub routing first:
|
|
140
167
|
|
|
@@ -201,7 +201,7 @@ kxm init --dry-run --json
|
|
|
201
201
|
```
|
|
202
202
|
|
|
203
203
|
```text
|
|
204
|
-
{"schema":"kxm.cli-result.v1","ok":true,"command":"init","action":"planned","mode":"create","inspectedFrom":"/work/proj","projectRoot":"/work/proj","changesRequired":true,"legacyInputs":[],"issues":[],"files":[".kxm/agents/planner.yaml",".kxm/agents/writer.yaml",".kxm/gates.yaml",".kxm/models/claude-fable.yaml",".kxm/models/grok-grok-4-
|
|
204
|
+
{"schema":"kxm.cli-result.v1","ok":true,"command":"init","action":"planned","mode":"create","inspectedFrom":"/work/proj","projectRoot":"/work/proj","changesRequired":true,"legacyInputs":[],"issues":[],"files":[".kxm/agents/planner.yaml",".kxm/agents/writer.yaml",".kxm/gates.yaml",".kxm/models/claude-fable.yaml",".kxm/models/grok-grok-4-7.yaml",".kxm/project.yaml",".kxm/repo/repo.yaml",".kxm/roles/planner.yaml",".kxm/roles/writer.yaml",".kxm/routes.yaml",".kxm/template-provenance.yaml",".kxm/workflows/default.yaml"],"plannedOnly":true}
|
|
205
205
|
```
|
|
206
206
|
|
|
207
207
|
Create the project:
|
|
@@ -3036,7 +3036,7 @@ KXM PRE-FLIGHT CONTEXT EXPLAIN
|
|
|
3036
3036
|
════════════════════════════════════════════════════════════
|
|
3037
3037
|
Major Mode: coder
|
|
3038
3038
|
Enabled Domains: (none)
|
|
3039
|
-
Target Model: grok/grok-4.
|
|
3039
|
+
Target Model: grok/grok-4.7
|
|
3040
3040
|
Catalog status: price catalog missing
|
|
3041
3041
|
|
|
3042
3042
|
CONTEXT BREAKDOWN:
|
|
@@ -3661,7 +3661,7 @@ Dedicated offline benchmark for side-by-side model comparison (Decision Q12). To
|
|
|
3661
3661
|
| Option | Argument | Default | Description |
|
|
3662
3662
|
|---|---|---|---|
|
|
3663
3663
|
| `--task` | `<fixture>` | `Deterministic benchmark task` | Task prompt or fixture path for benchmark comparison |
|
|
3664
|
-
| `--arms` | `<models>` | `grok/grok-4.
|
|
3664
|
+
| `--arms` | `<models>` | `grok/grok-4.7,claude/fable,pi/qwen3.7-plus` | Comma-separated model routes to benchmark (e.g. grok/grok-4.6,claude/fable) |
|
|
3665
3665
|
| `--runs` | `<count>` | `1` | Benchmark runs per arm |
|
|
3666
3666
|
|
|
3667
3667
|
- Reads nothing. JSON keys: `task`, `runs`, `timestamp`, `arms` (`harness`, `model`, `latencyMs`, `tokensIn`, `tokensOut`, `costUsd`, `outcome`).
|
|
@@ -3673,7 +3673,7 @@ kxm routing benchmark
|
|
|
3673
3673
|
```text
|
|
3674
3674
|
Routing Benchmark Results (task: Deterministic benchmark task, runs: 1)
|
|
3675
3675
|
Harness Model Latency(ms) TokensIn TokensOut Cost($) Outcome
|
|
3676
|
-
grok grok-4.
|
|
3676
|
+
grok grok-4.7 420 1200 450 $0.17 passed
|
|
3677
3677
|
claude fable 680 1200 450 $0.45 passed
|
|
3678
3678
|
pi qwen3.7-plus 560 1200 450 $0.12 passed
|
|
3679
3679
|
```
|
|
@@ -398,8 +398,8 @@ resultSchema: kxm.assignment-result.v1
|
|
|
398
398
|
|
|
399
399
|
`kxm init` creates `planner` (`role: planner`, alias `coordinator`) and `writer`
|
|
400
400
|
(`role: writer`, alias `implementer`) without `harness` or `model`, and admits
|
|
401
|
-
`anthropic/fable` and `xai/grok-4.
|
|
402
|
-
`claude-fable` and `grok-grok-4-
|
|
401
|
+
`anthropic/fable` and `xai/grok-4.7` in `.kxm/routes.yaml`. The model files are
|
|
402
|
+
`claude-fable` and `grok-grok-4-7`. An interactive `kxm init` can add
|
|
403
403
|
workflow-guide agents for reviewed pairs whose harness is authenticated, and
|
|
404
404
|
admits their selectors too, but skips Google guide candidates because the
|
|
405
405
|
Runtime cannot reach the `antigravity` Pi provider yet. `kxm run` and the
|
|
@@ -258,7 +258,7 @@ The file is a `kxm.workflow.v1` definition. `coordinator` names the agent that o
|
|
|
258
258
|
|
|
259
259
|
### Why start with `first` and not `default`
|
|
260
260
|
|
|
261
|
-
`kxm init` also writes a `default` workflow. Its coordinator plans on `claude` / `anthropic/fable`, its implementer writes the checkout on `grok` / `xai/grok-4.
|
|
261
|
+
`kxm init` also writes a `default` workflow. Its coordinator plans on `claude` / `anthropic/fable`, its implementer writes the checkout on `grok` / `xai/grok-4.7`, and a `test` gate runs `npm test`; `kxm init` admits exactly those two models in `.kxm/routes.yaml`. You can drive it, but even a simulated drive runs `npm test` in your checkout, and a live drive spends both subscriptions and passes the implement step only when Grok changes the checkout. `first` calls no model and runs no command, so it is the safer first run. [Steps the Runtime does not execute yet](../reference/config-reference.md#steps-the-runtime-does-not-execute-yet) lists every setting that makes a drive hand the run off.
|
|
262
262
|
|
|
263
263
|
### Two kinds of runs
|
|
264
264
|
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
3
3
|
"name": "kxm",
|
|
4
4
|
"displayName": "KXM",
|
|
5
|
-
"version": "0.7.
|
|
5
|
+
"version": "0.7.201",
|
|
6
6
|
"description": "Headless multi-agent orchestration, durable workflows, and a live operator dashboard for Pi and Claude Code",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "KontextMind",
|
package/plugins/kxm/dist/cli.js
CHANGED
|
@@ -18623,7 +18623,7 @@ var init_workforce_names = __esm({
|
|
|
18623
18623
|
["fable-claude", "claude-fable"],
|
|
18624
18624
|
// sol-codex stays the GPT-5.6 route. codex-gpt-6-1-sol is a separate route.
|
|
18625
18625
|
["sol-codex", "codex-gpt-5-6-sol"],
|
|
18626
|
-
["grok-default", "grok-grok-4-
|
|
18626
|
+
["grok-default", "grok-grok-4-7"],
|
|
18627
18627
|
["fable-default", "claude-fable"]
|
|
18628
18628
|
]);
|
|
18629
18629
|
AGENT_RENAMES = Object.freeze([
|
|
@@ -18824,16 +18824,16 @@ function coreTemplate(projectId, projectName, variant) {
|
|
|
18824
18824
|
}
|
|
18825
18825
|
files.set(".kxm/routes.yaml", {
|
|
18826
18826
|
schema: "kxm.routes.v2",
|
|
18827
|
-
updatedAt: "2026-
|
|
18828
|
-
admitted: ["anthropic/fable", "xai/grok-4.
|
|
18827
|
+
updatedAt: "2026-10-21T00:00:00.000Z",
|
|
18828
|
+
admitted: ["anthropic/fable", "xai/grok-4.7"],
|
|
18829
18829
|
disabled: []
|
|
18830
18830
|
});
|
|
18831
|
-
files.set(".kxm/models/grok-grok-4-
|
|
18831
|
+
files.set(".kxm/models/grok-grok-4-7.yaml", {
|
|
18832
18832
|
schema: "kxm.model.v2",
|
|
18833
|
-
id: "grok-grok-4-
|
|
18833
|
+
id: "grok-grok-4-7",
|
|
18834
18834
|
aliases: ["grok-default"],
|
|
18835
18835
|
harness: "grok",
|
|
18836
|
-
model: "grok-4.
|
|
18836
|
+
model: "grok-4.7",
|
|
18837
18837
|
vendor: "xai",
|
|
18838
18838
|
status: "admitted",
|
|
18839
18839
|
permissions: ["edit"]
|
|
@@ -18854,7 +18854,7 @@ function coreTemplate(projectId, projectName, variant) {
|
|
|
18854
18854
|
purpose: "writer",
|
|
18855
18855
|
permission: "edit",
|
|
18856
18856
|
description: "Primary implementation agent.",
|
|
18857
|
-
roster: [{ route: "grok-grok-4-
|
|
18857
|
+
roster: [{ route: "grok-grok-4-7", effort: "medium" }]
|
|
18858
18858
|
});
|
|
18859
18859
|
files.set(".kxm/roles/planner.yaml", {
|
|
18860
18860
|
schema: "kxm.role.v2",
|
|
@@ -55403,7 +55403,7 @@ var DEFAULT_MODES_CONFIG = Object.freeze({
|
|
|
55403
55403
|
baseTools: ["read", "edit", "write", "bash"],
|
|
55404
55404
|
contextFiles: ["AGENTS.md"],
|
|
55405
55405
|
thinkingLevel: "medium",
|
|
55406
|
-
model: "grok/grok-4.
|
|
55406
|
+
model: "grok/grok-4.7"
|
|
55407
55407
|
},
|
|
55408
55408
|
planner: {
|
|
55409
55409
|
description: "High-level architectural planning, scoping, and decomposition",
|
|
@@ -55424,7 +55424,7 @@ var DEFAULT_MODES_CONFIG = Object.freeze({
|
|
|
55424
55424
|
baseTools: ["read", "bash"],
|
|
55425
55425
|
contextFiles: ["docs/guides/browser-automation.md"],
|
|
55426
55426
|
thinkingLevel: "medium",
|
|
55427
|
-
model: "grok/grok-4.
|
|
55427
|
+
model: "grok/grok-4.7"
|
|
55428
55428
|
}
|
|
55429
55429
|
},
|
|
55430
55430
|
domains: {
|
|
@@ -55501,7 +55501,7 @@ function resolveActiveMode(config, majorModeName = "coder", domainNames = []) {
|
|
|
55501
55501
|
contextFiles: Array.from(contextFiles),
|
|
55502
55502
|
promptSnippets,
|
|
55503
55503
|
thinkingLevel: major.thinkingLevel,
|
|
55504
|
-
model: major.model || "grok/grok-4.
|
|
55504
|
+
model: major.model || "grok/grok-4.7"
|
|
55505
55505
|
};
|
|
55506
55506
|
}
|
|
55507
55507
|
var CATALOG_DATE_RE = /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;
|
|
@@ -55592,7 +55592,7 @@ function calculatePromptFootprint(resolved, projectRoot = process.cwd(), catalog
|
|
|
55592
55592
|
catalogDateForStatus(loaded2, catalog, projectRoot)
|
|
55593
55593
|
);
|
|
55594
55594
|
const cat = loaded2.catalog;
|
|
55595
|
-
const rawModel = resolved.model || "grok/grok-4.
|
|
55595
|
+
const rawModel = resolved.model || "grok/grok-4.7";
|
|
55596
55596
|
const [prov, mod] = rawModel.includes("/") ? rawModel.split("/", 2) : [void 0, rawModel];
|
|
55597
55597
|
const inputCost = cat ? calculateModelCost(cat, {
|
|
55598
55598
|
model: mod || rawModel,
|
|
@@ -55621,7 +55621,7 @@ function calculatePromptFootprint(resolved, projectRoot = process.cwd(), catalog
|
|
|
55621
55621
|
return {
|
|
55622
55622
|
majorMode: resolved.majorMode,
|
|
55623
55623
|
enabledDomains: resolved.enabledDomains,
|
|
55624
|
-
model: resolved.model || "grok/grok-4.
|
|
55624
|
+
model: resolved.model || "grok/grok-4.7",
|
|
55625
55625
|
breakdown,
|
|
55626
55626
|
totalChars,
|
|
55627
55627
|
totalTokens,
|
|
@@ -58146,7 +58146,7 @@ async function cmdRoutingReport(runtime, options) {
|
|
|
58146
58146
|
}
|
|
58147
58147
|
async function cmdRoutingBenchmark(runtime, options) {
|
|
58148
58148
|
const task = options.task || "Deterministic benchmark task";
|
|
58149
|
-
const armsStr = options.arms || "grok/grok-4.
|
|
58149
|
+
const armsStr = options.arms || "grok/grok-4.7,claude/fable,pi/qwen3.7-plus";
|
|
58150
58150
|
const armsList = armsStr.split(",").map((s) => s.trim()).filter(Boolean);
|
|
58151
58151
|
const runsCount = Math.max(1, parseInt(options.runs || "1", 10) || 1);
|
|
58152
58152
|
const arms = armsList.map((arm) => {
|
|
@@ -25462,7 +25462,7 @@ function sessionTokenFixHint(policy) {
|
|
|
25462
25462
|
}
|
|
25463
25463
|
|
|
25464
25464
|
// plugins/kxm/src/mcp-server.ts
|
|
25465
|
-
var VERSION = "0.7.
|
|
25465
|
+
var VERSION = "0.7.201";
|
|
25466
25466
|
var CONFIGURE_PLUGIN = "/plugin configure kxm@kxm";
|
|
25467
25467
|
var inbox = /* @__PURE__ */ new Map();
|
|
25468
25468
|
var notifiedInbox = /* @__PURE__ */ new Set();
|
|
@@ -15547,7 +15547,7 @@ var ROUTE_RENAMES = Object.freeze([
|
|
|
15547
15547
|
["fable-claude", "claude-fable"],
|
|
15548
15548
|
// sol-codex stays the GPT-5.6 route. codex-gpt-6-1-sol is a separate route.
|
|
15549
15549
|
["sol-codex", "codex-gpt-5-6-sol"],
|
|
15550
|
-
["grok-default", "grok-grok-4-
|
|
15550
|
+
["grok-default", "grok-grok-4-7"],
|
|
15551
15551
|
["fable-default", "claude-fable"]
|
|
15552
15552
|
]);
|
|
15553
15553
|
var AGENT_RENAMES = Object.freeze([
|
|
@@ -15972,16 +15972,16 @@ function coreTemplate(projectId, projectName, variant) {
|
|
|
15972
15972
|
}
|
|
15973
15973
|
files.set(".kxm/routes.yaml", {
|
|
15974
15974
|
schema: "kxm.routes.v2",
|
|
15975
|
-
updatedAt: "2026-
|
|
15976
|
-
admitted: ["anthropic/fable", "xai/grok-4.
|
|
15975
|
+
updatedAt: "2026-10-21T00:00:00.000Z",
|
|
15976
|
+
admitted: ["anthropic/fable", "xai/grok-4.7"],
|
|
15977
15977
|
disabled: []
|
|
15978
15978
|
});
|
|
15979
|
-
files.set(".kxm/models/grok-grok-4-
|
|
15979
|
+
files.set(".kxm/models/grok-grok-4-7.yaml", {
|
|
15980
15980
|
schema: "kxm.model.v2",
|
|
15981
|
-
id: "grok-grok-4-
|
|
15981
|
+
id: "grok-grok-4-7",
|
|
15982
15982
|
aliases: ["grok-default"],
|
|
15983
15983
|
harness: "grok",
|
|
15984
|
-
model: "grok-4.
|
|
15984
|
+
model: "grok-4.7",
|
|
15985
15985
|
vendor: "xai",
|
|
15986
15986
|
status: "admitted",
|
|
15987
15987
|
permissions: ["edit"]
|
|
@@ -16002,7 +16002,7 @@ function coreTemplate(projectId, projectName, variant) {
|
|
|
16002
16002
|
purpose: "writer",
|
|
16003
16003
|
permission: "edit",
|
|
16004
16004
|
description: "Primary implementation agent.",
|
|
16005
|
-
roster: [{ route: "grok-grok-4-
|
|
16005
|
+
roster: [{ route: "grok-grok-4-7", effort: "medium" }]
|
|
16006
16006
|
});
|
|
16007
16007
|
files.set(".kxm/roles/planner.yaml", {
|
|
16008
16008
|
schema: "kxm.role.v2",
|
|
@@ -15520,7 +15520,7 @@ var ROUTE_RENAMES = Object.freeze([
|
|
|
15520
15520
|
["fable-claude", "claude-fable"],
|
|
15521
15521
|
// sol-codex stays the GPT-5.6 route. codex-gpt-6-1-sol is a separate route.
|
|
15522
15522
|
["sol-codex", "codex-gpt-5-6-sol"],
|
|
15523
|
-
["grok-default", "grok-grok-4-
|
|
15523
|
+
["grok-default", "grok-grok-4-7"],
|
|
15524
15524
|
["fable-default", "claude-fable"]
|
|
15525
15525
|
]);
|
|
15526
15526
|
var AGENT_RENAMES = Object.freeze([
|
|
@@ -15945,16 +15945,16 @@ function coreTemplate(projectId, projectName, variant) {
|
|
|
15945
15945
|
}
|
|
15946
15946
|
files.set(".kxm/routes.yaml", {
|
|
15947
15947
|
schema: "kxm.routes.v2",
|
|
15948
|
-
updatedAt: "2026-
|
|
15949
|
-
admitted: ["anthropic/fable", "xai/grok-4.
|
|
15948
|
+
updatedAt: "2026-10-21T00:00:00.000Z",
|
|
15949
|
+
admitted: ["anthropic/fable", "xai/grok-4.7"],
|
|
15950
15950
|
disabled: []
|
|
15951
15951
|
});
|
|
15952
|
-
files.set(".kxm/models/grok-grok-4-
|
|
15952
|
+
files.set(".kxm/models/grok-grok-4-7.yaml", {
|
|
15953
15953
|
schema: "kxm.model.v2",
|
|
15954
|
-
id: "grok-grok-4-
|
|
15954
|
+
id: "grok-grok-4-7",
|
|
15955
15955
|
aliases: ["grok-default"],
|
|
15956
15956
|
harness: "grok",
|
|
15957
|
-
model: "grok-4.
|
|
15957
|
+
model: "grok-4.7",
|
|
15958
15958
|
vendor: "xai",
|
|
15959
15959
|
status: "admitted",
|
|
15960
15960
|
permissions: ["edit"]
|
|
@@ -15975,7 +15975,7 @@ function coreTemplate(projectId, projectName, variant) {
|
|
|
15975
15975
|
purpose: "writer",
|
|
15976
15976
|
permission: "edit",
|
|
15977
15977
|
description: "Primary implementation agent.",
|
|
15978
|
-
roster: [{ route: "grok-grok-4-
|
|
15978
|
+
roster: [{ route: "grok-grok-4-7", effort: "medium" }]
|
|
15979
15979
|
});
|
|
15980
15980
|
files.set(".kxm/roles/planner.yaml", {
|
|
15981
15981
|
schema: "kxm.role.v2",
|
|
@@ -34555,7 +34555,7 @@ var PiSession = class {
|
|
|
34555
34555
|
};
|
|
34556
34556
|
function createKxmPiProducer(options = {}) {
|
|
34557
34557
|
const sessions = /* @__PURE__ */ new Map();
|
|
34558
|
-
const defaultModel = options.defaultModel ?? "xai/grok-4.
|
|
34558
|
+
const defaultModel = options.defaultModel ?? "xai/grok-4.7";
|
|
34559
34559
|
const defaultProvider = options.defaultProvider ?? "xai";
|
|
34560
34560
|
function parseModelString(spec) {
|
|
34561
34561
|
const trimmed = spec.trim();
|
|
@@ -35776,7 +35776,7 @@ var DEFAULT_MODES_CONFIG = Object.freeze({
|
|
|
35776
35776
|
baseTools: ["read", "edit", "write", "bash"],
|
|
35777
35777
|
contextFiles: ["AGENTS.md"],
|
|
35778
35778
|
thinkingLevel: "medium",
|
|
35779
|
-
model: "grok/grok-4.
|
|
35779
|
+
model: "grok/grok-4.7"
|
|
35780
35780
|
},
|
|
35781
35781
|
planner: {
|
|
35782
35782
|
description: "High-level architectural planning, scoping, and decomposition",
|
|
@@ -35797,7 +35797,7 @@ var DEFAULT_MODES_CONFIG = Object.freeze({
|
|
|
35797
35797
|
baseTools: ["read", "bash"],
|
|
35798
35798
|
contextFiles: ["docs/guides/browser-automation.md"],
|
|
35799
35799
|
thinkingLevel: "medium",
|
|
35800
|
-
model: "grok/grok-4.
|
|
35800
|
+
model: "grok/grok-4.7"
|
|
35801
35801
|
}
|
|
35802
35802
|
},
|
|
35803
35803
|
domains: {
|
|
@@ -35874,7 +35874,7 @@ function resolveActiveMode(config, majorModeName = "coder", domainNames = []) {
|
|
|
35874
35874
|
contextFiles: Array.from(contextFiles),
|
|
35875
35875
|
promptSnippets,
|
|
35876
35876
|
thinkingLevel: major.thinkingLevel,
|
|
35877
|
-
model: major.model || "grok/grok-4.
|
|
35877
|
+
model: major.model || "grok/grok-4.7"
|
|
35878
35878
|
};
|
|
35879
35879
|
}
|
|
35880
35880
|
var CATALOG_DATE_RE = /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;
|
|
@@ -35965,7 +35965,7 @@ function calculatePromptFootprint(resolved, projectRoot = process.cwd(), catalog
|
|
|
35965
35965
|
catalogDateForStatus(loaded, catalog, projectRoot)
|
|
35966
35966
|
);
|
|
35967
35967
|
const cat = loaded.catalog;
|
|
35968
|
-
const rawModel = resolved.model || "grok/grok-4.
|
|
35968
|
+
const rawModel = resolved.model || "grok/grok-4.7";
|
|
35969
35969
|
const [prov, mod] = rawModel.includes("/") ? rawModel.split("/", 2) : [void 0, rawModel];
|
|
35970
35970
|
const inputCost = cat ? calculateModelCost(cat, {
|
|
35971
35971
|
model: mod || rawModel,
|
|
@@ -35994,7 +35994,7 @@ function calculatePromptFootprint(resolved, projectRoot = process.cwd(), catalog
|
|
|
35994
35994
|
return {
|
|
35995
35995
|
majorMode: resolved.majorMode,
|
|
35996
35996
|
enabledDomains: resolved.enabledDomains,
|
|
35997
|
-
model: resolved.model || "grok/grok-4.
|
|
35997
|
+
model: resolved.model || "grok/grok-4.7",
|
|
35998
35998
|
breakdown,
|
|
35999
35999
|
totalChars,
|
|
36000
36000
|
totalTokens,
|
|
@@ -36451,7 +36451,7 @@ var SUBAGENT_TYPES = Object.freeze([
|
|
|
36451
36451
|
"Auditor"
|
|
36452
36452
|
]);
|
|
36453
36453
|
var DEFAULT_SUBAGENT_MODELS = Object.freeze({
|
|
36454
|
-
general: "grok/grok-4.
|
|
36454
|
+
general: "grok/grok-4.7",
|
|
36455
36455
|
Explore: "openrouter/qwen/qwen3.7-plus",
|
|
36456
36456
|
Plan: "claude/fable",
|
|
36457
36457
|
Reviewer: "openai/gpt-5.6-sol",
|
|
@@ -36491,7 +36491,7 @@ var SubagentManager = class {
|
|
|
36491
36491
|
throw new Error('Subagent "description" is required.');
|
|
36492
36492
|
}
|
|
36493
36493
|
const type = params.type ?? "general";
|
|
36494
|
-
const model = params.model ?? DEFAULT_SUBAGENT_MODELS[type] ?? "grok/grok-4.
|
|
36494
|
+
const model = params.model ?? DEFAULT_SUBAGENT_MODELS[type] ?? "grok/grok-4.7";
|
|
36495
36495
|
const thinking = params.thinking ?? "low";
|
|
36496
36496
|
const allowedTools = narrowSubagentTools(params.allowed_tools, params.parent_tools);
|
|
36497
36497
|
const id = `ag_${randomUUID5().replaceAll("-", "").slice(0, 10)}`;
|
|
@@ -15012,7 +15012,7 @@ var ROUTE_RENAMES = Object.freeze([
|
|
|
15012
15012
|
["fable-claude", "claude-fable"],
|
|
15013
15013
|
// sol-codex stays the GPT-5.6 route. codex-gpt-6-1-sol is a separate route.
|
|
15014
15014
|
["sol-codex", "codex-gpt-5-6-sol"],
|
|
15015
|
-
["grok-default", "grok-grok-4-
|
|
15015
|
+
["grok-default", "grok-grok-4-7"],
|
|
15016
15016
|
["fable-default", "claude-fable"]
|
|
15017
15017
|
]);
|
|
15018
15018
|
var AGENT_RENAMES = Object.freeze([
|
package/plugins/kxm/package.json
CHANGED
|
@@ -1071,7 +1071,7 @@ export async function cmdRoutingBenchmark(
|
|
|
1071
1071
|
options: { task?: string | undefined; arms?: string | undefined; runs?: string | undefined },
|
|
1072
1072
|
): Promise<number> {
|
|
1073
1073
|
const task = options.task || "Deterministic benchmark task";
|
|
1074
|
-
const armsStr = options.arms || "grok/grok-4.
|
|
1074
|
+
const armsStr = options.arms || "grok/grok-4.7,claude/fable,pi/qwen3.7-plus";
|
|
1075
1075
|
const armsList = armsStr.split(",").map((s) => s.trim()).filter(Boolean);
|
|
1076
1076
|
const runsCount = Math.max(1, parseInt(options.runs || "1", 10) || 1);
|
|
1077
1077
|
|
|
@@ -11,7 +11,7 @@ import { deliverInboxNotification } from "./inbox.ts";
|
|
|
11
11
|
import type { HubEvent, MessageRecord } from "./protocol.ts";
|
|
12
12
|
import { sessionTokenFixHint } from "./session-token-hint.ts";
|
|
13
13
|
|
|
14
|
-
const VERSION = "0.7.
|
|
14
|
+
const VERSION = "0.7.201";
|
|
15
15
|
const CONFIGURE_PLUGIN = "/plugin configure kxm@kxm";
|
|
16
16
|
const inbox = new Map<string, MessageRecord>();
|
|
17
17
|
const notifiedInbox = new Set<string>();
|
package/plugins/kxm/src/modes.ts
CHANGED
|
@@ -80,7 +80,7 @@ export const DEFAULT_MODES_CONFIG: ModesConfig = Object.freeze({
|
|
|
80
80
|
baseTools: ["read", "edit", "write", "bash"],
|
|
81
81
|
contextFiles: ["AGENTS.md"],
|
|
82
82
|
thinkingLevel: "medium" as const,
|
|
83
|
-
model: "grok/grok-4.
|
|
83
|
+
model: "grok/grok-4.7",
|
|
84
84
|
},
|
|
85
85
|
planner: {
|
|
86
86
|
description: "High-level architectural planning, scoping, and decomposition",
|
|
@@ -101,7 +101,7 @@ export const DEFAULT_MODES_CONFIG: ModesConfig = Object.freeze({
|
|
|
101
101
|
baseTools: ["read", "bash"],
|
|
102
102
|
contextFiles: ["docs/guides/browser-automation.md"],
|
|
103
103
|
thinkingLevel: "medium" as const,
|
|
104
|
-
model: "grok/grok-4.
|
|
104
|
+
model: "grok/grok-4.7",
|
|
105
105
|
},
|
|
106
106
|
},
|
|
107
107
|
domains: {
|
|
@@ -201,7 +201,7 @@ export function resolveActiveMode(
|
|
|
201
201
|
contextFiles: Array.from(contextFiles),
|
|
202
202
|
promptSnippets,
|
|
203
203
|
thinkingLevel: major.thinkingLevel,
|
|
204
|
-
model: major.model || "grok/grok-4.
|
|
204
|
+
model: major.model || "grok/grok-4.7",
|
|
205
205
|
};
|
|
206
206
|
}
|
|
207
207
|
|
|
@@ -330,7 +330,7 @@ export function calculatePromptFootprint(
|
|
|
330
330
|
catalogDateForStatus(loaded, catalog, projectRoot),
|
|
331
331
|
);
|
|
332
332
|
const cat = loaded.catalog;
|
|
333
|
-
const rawModel = resolved.model || "grok/grok-4.
|
|
333
|
+
const rawModel = resolved.model || "grok/grok-4.7";
|
|
334
334
|
const [prov, mod] = rawModel.includes("/") ? rawModel.split("/", 2) : [undefined, rawModel];
|
|
335
335
|
|
|
336
336
|
const inputCost = cat
|
|
@@ -369,7 +369,7 @@ export function calculatePromptFootprint(
|
|
|
369
369
|
return {
|
|
370
370
|
majorMode: resolved.majorMode,
|
|
371
371
|
enabledDomains: resolved.enabledDomains,
|
|
372
|
-
model: resolved.model || "grok/grok-4.
|
|
372
|
+
model: resolved.model || "grok/grok-4.7",
|
|
373
373
|
breakdown,
|
|
374
374
|
totalChars,
|
|
375
375
|
totalTokens,
|
|
@@ -448,7 +448,7 @@ export interface KxmPiProducer extends KxmProducer {
|
|
|
448
448
|
|
|
449
449
|
export function createKxmPiProducer(options: KxmPiProducerOptions = {}): KxmPiProducer {
|
|
450
450
|
const sessions = new Map<string, PiSession>();
|
|
451
|
-
const defaultModel = options.defaultModel ?? "xai/grok-4.
|
|
451
|
+
const defaultModel = options.defaultModel ?? "xai/grok-4.7";
|
|
452
452
|
const defaultProvider = options.defaultProvider ?? "xai";
|
|
453
453
|
|
|
454
454
|
function parseModelString(spec: string): { provider: string; model: string } {
|
|
@@ -76,7 +76,7 @@ export const SUBAGENT_TYPES: readonly SubagentType[] = Object.freeze([
|
|
|
76
76
|
]);
|
|
77
77
|
|
|
78
78
|
export const DEFAULT_SUBAGENT_MODELS: Readonly<Record<SubagentType, string>> = Object.freeze({
|
|
79
|
-
general: "grok/grok-4.
|
|
79
|
+
general: "grok/grok-4.7",
|
|
80
80
|
Explore: "openrouter/qwen/qwen3.7-plus",
|
|
81
81
|
Plan: "claude/fable",
|
|
82
82
|
Reviewer: "openai/gpt-5.6-sol",
|
|
@@ -135,7 +135,7 @@ export class SubagentManager {
|
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
const type = params.type ?? "general";
|
|
138
|
-
const model = params.model ?? DEFAULT_SUBAGENT_MODELS[type] ?? "grok/grok-4.
|
|
138
|
+
const model = params.model ?? DEFAULT_SUBAGENT_MODELS[type] ?? "grok/grok-4.7";
|
|
139
139
|
const thinking = params.thinking ?? "low";
|
|
140
140
|
const allowedTools = narrowSubagentTools(params.allowed_tools, params.parent_tools);
|
|
141
141
|
const id = `ag_${randomUUID().replaceAll("-", "").slice(0, 10)}`;
|
|
@@ -215,16 +215,16 @@ function coreTemplate(projectId: string, projectName: string, variant: KxmTempla
|
|
|
215
215
|
// remain aliases so an existing --route flag still resolves.
|
|
216
216
|
files.set(".kxm/routes.yaml", {
|
|
217
217
|
schema: "kxm.routes.v2",
|
|
218
|
-
updatedAt: "2026-
|
|
219
|
-
admitted: ["anthropic/fable", "xai/grok-4.
|
|
218
|
+
updatedAt: "2026-10-21T00:00:00.000Z",
|
|
219
|
+
admitted: ["anthropic/fable", "xai/grok-4.7"],
|
|
220
220
|
disabled: [],
|
|
221
221
|
});
|
|
222
|
-
files.set(".kxm/models/grok-grok-4-
|
|
222
|
+
files.set(".kxm/models/grok-grok-4-7.yaml", {
|
|
223
223
|
schema: "kxm.model.v2",
|
|
224
|
-
id: "grok-grok-4-
|
|
224
|
+
id: "grok-grok-4-7",
|
|
225
225
|
aliases: ["grok-default"],
|
|
226
226
|
harness: "grok",
|
|
227
|
-
model: "grok-4.
|
|
227
|
+
model: "grok-4.7",
|
|
228
228
|
vendor: "xai",
|
|
229
229
|
status: "admitted",
|
|
230
230
|
permissions: ["edit"],
|
|
@@ -245,7 +245,7 @@ function coreTemplate(projectId: string, projectName: string, variant: KxmTempla
|
|
|
245
245
|
purpose: "writer",
|
|
246
246
|
permission: "edit",
|
|
247
247
|
description: "Primary implementation agent.",
|
|
248
|
-
roster: [{ route: "grok-grok-4-
|
|
248
|
+
roster: [{ route: "grok-grok-4-7", effort: "medium" }],
|
|
249
249
|
});
|
|
250
250
|
files.set(".kxm/roles/planner.yaml", {
|
|
251
251
|
schema: "kxm.role.v2",
|
|
@@ -38,7 +38,7 @@ export const ROUTE_RENAMES = Object.freeze([
|
|
|
38
38
|
["fable-claude", "claude-fable"],
|
|
39
39
|
// sol-codex stays the GPT-5.6 route. codex-gpt-6-1-sol is a separate route.
|
|
40
40
|
["sol-codex", "codex-gpt-5-6-sol"],
|
|
41
|
-
["grok-default", "grok-grok-4-
|
|
41
|
+
["grok-default", "grok-grok-4-7"],
|
|
42
42
|
["fable-default", "claude-fable"],
|
|
43
43
|
]);
|
|
44
44
|
|