@kontextmind/kxm 0.7.162 → 0.7.164

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.
@@ -11,7 +11,7 @@
11
11
  "name": "kxm",
12
12
  "source": "./plugins/kxm",
13
13
  "description": "Durable workflows, peer agents, and kxm tui",
14
- "version": "0.7.162",
14
+ "version": "0.7.164",
15
15
  "category": "development",
16
16
  "tags": ["kxm", "multi-agent", "workflows", "mcp"]
17
17
  }
package/CHANGELOG.md CHANGED
@@ -156,6 +156,19 @@ All notable user-facing changes are documented here. The project follows [Semant
156
156
 
157
157
  ### Changed
158
158
 
159
+ - **The checked-in price catalog and model inventory match the live OpenRouter and Nous feeds.**
160
+ `.kxm/prices.yaml` is dated 2026-09-28. It adds `xai/grok-4.7` (alias
161
+ `x-ai/grok-4.7`) at $1.60 input and $4.80 output per 1M tokens, with cache
162
+ read $0.40. `openrouter/z-ai/glm-5.3-flash` moves from $0.09 / $0.30 to
163
+ $0.15 / $0.50 (cache read $0.03); the anchored `zai-coding-cn/glm-5.3-flash`
164
+ row moves with it. `qwen-token-plan/deepseek-v4.1-flash` (alias
165
+ `deepseek/deepseek-v4.1-flash`) moves from $0.15 / $0.60 to $0.014 / $0.40
166
+ (cache read $0.004) because the routing docs still name that selector.
167
+ `xai/grok-4.6` stays: its base rate still matches the live catalog, and code
168
+ and tests still name it. `.kxm/models/inventory.yaml` was refreshed with
169
+ `kxm models inventory-refresh`. Pi, Grok, and agy were not installed for that
170
+ fetch, so models that exist only in those CLIs remain the 2026-09-16 rows.
171
+
159
172
  - **Windows pull-request unit lanes finish inside the job limit.** The light
160
173
  lane on `windows-latest` was cancelled at 20 minutes on #361, #362, and
161
174
  #363 after it stopped reporting tests. `package-install.test.ts` (171s on
@@ -1,13 +1,13 @@
1
1
  # Harness routing internals
2
2
 
3
- This page records how the KXM repository applies [harness routing](../reference/harness-routing.md) to its own work: the routes this checkout admits, its writer roster, its price catalog, and the developer roster policy that `just assign` and the dev helper enforce. It is maintainer material. The snapshots were captured on 2026-09-23 on one operator machine, from a source checkout where `node scripts/kxm.mjs` is the same program as `kxm`; they change whenever an admission changes.
3
+ This page records how the KXM repository applies [harness routing](../reference/harness-routing.md) to its own work: the routes this checkout admits, its writer roster, its price catalog, and the developer roster policy that `just assign` and the dev helper enforce. It is maintainer material. The route and roster transcripts below were regenerated on 2026-09-28 from this checkout, where `node scripts/kxm.mjs` is the same program as `kxm`. Readiness notes that name a capture machine are from 2026-09-23 and were not re-probed. The transcripts change whenever an admission changes.
4
4
 
5
5
  > [!IMPORTANT]
6
6
  > The files are the authority, not this page: `.kxm/routes.yaml`, `.kxm/roles/*.yaml`, `.kxm/models/*.yaml`, and `.kxm/prices.yaml`. Product routing decisions are recorded under Tracking → Decided in `plans/implementation-plan.md`.
7
7
 
8
8
  ## Current ids (2026-09-27)
9
9
 
10
- The command transcripts below are the 2026-09-23 capture. The files now use one id shape per kind. A route id is `<harness>-<model-slug>[-<provider>]`, with `.` written as `-`. An agent id equals its role. A workflow id is `default`, `land`, or `<role>-only`. An agent step id equals that role.
10
+ The files use one id shape per kind. A route id is `<harness>-<model-slug>[-<provider>]`, with `.` written as `-`. An agent id equals its role. A workflow id is `default`, `land`, or `<role>-only`. An agent step id equals that role.
11
11
 
12
12
  This checkout's routes are `grok-grok-4-7`, `pi-qwen3-coder-plus-openrouter`, `agy-gemini-3-8-flash-high`, `agy-gemini-3-8-flash-medium`, `claude-fable`, `codex-gpt-5-6-sol`, `pi-qwen3-8-flash-openrouter`, and `pi-glm-5-3-flash-openrouter`. Agents are `planner`, `writer`, `reviewer-arch`, and `reviewer-cli`. `opus-claude` was removed because `opus` is not an admitted selector. `qwen-token-plan/*` and `zai-coding-cn/*` left the admitted list because those harnesses are not allowlisted; their `prices.yaml` rows stay. Old ids resolve as aliases. Every roster entry names an effort. `reviewer-arch` dispatches `claude-fable`. #343's architecture critic ran on opus because the justfile recipe review-arch hardcoded that model; the role file on that commit listed only `fable-claude`. The helper now refuses `opus`.
13
13
 
@@ -18,26 +18,22 @@ This checkout's routes are `grok-grok-4-7`, `pi-qwen3-coder-plus-openrouter`, `a
18
18
  ```text
19
19
  schema: kxm.role.v2
20
20
  id: writer
21
- description: ""
21
+ purpose: writer
22
+ permission: edit
23
+ description: Primary implementation agent.
22
24
  skills: []
23
25
  roster:
24
- - model: xai/grok-4.6
26
+ - route: grok-grok-4-7
25
27
  effort: medium
26
- enabled: true
27
- - model: openrouter/qwen/qwen3-coder-plus
28
+ - route: pi-qwen3-coder-plus-openrouter
28
29
  effort: medium
29
- enabled: true
30
- - model: zai-coding-cn/glm-5.3-flash
30
+ - route: agy-gemini-3-8-flash-high
31
31
  effort: medium
32
- enabled: true
33
- - model: qwen-token-plan/qwen3.8-flash
32
+ - route: agy-gemini-3-8-flash-medium
34
33
  effort: medium
35
- enabled: true
36
- - model: google/gemini-3.8-flash-high
37
- enabled: true
38
34
  ```
39
35
 
40
- The implementer agent declares `harness: grok`, so of this roster only `xai/grok-4.6` can run under it; the Pi selectors need an agent without `harness:`.
36
+ The writer role lists route ids, in order: `grok-grok-4-7`, then `pi-qwen3-coder-plus-openrouter`, then `agy-gemini-3-8-flash-high` and `agy-gemini-3-8-flash-medium`. `grok-grok-4-7` is harness `grok`, model `grok-4.7`, vendor `xai`. An agent file does not declare `harness:`.
41
37
 
42
38
  `node scripts/kxm.mjs routes list`:
43
39
 
@@ -49,12 +45,17 @@ admitted openai/gpt-5.6-sol
49
45
  admitted openrouter/qwen/qwen3-coder-plus
50
46
  admitted openrouter/qwen/qwen3.8-flash
51
47
  admitted openrouter/z-ai/glm-5.3-flash
52
- admitted qwen-token-plan/deepseek-v4.1-flash
53
- admitted qwen-token-plan/qwen3.8-flash
54
- admitted qwen-token-plan/qwen3.8-max
55
- admitted xai/grok-4.6
56
- admitted zai-coding-cn/glm-5.3
57
- admitted zai-coding-cn/glm-5.3-flash
48
+ admitted xai/grok-4.7
49
+ planner claude-fable
50
+ planner pi-qwen3-8-flash-openrouter
51
+ reviewer-arch claude-fable
52
+ reviewer-arch pi-glm-5-3-flash-openrouter
53
+ reviewer-cli codex-gpt-5-6-sol
54
+ reviewer-cli pi-qwen3-8-flash-openrouter
55
+ writer grok-grok-4-7
56
+ writer pi-qwen3-coder-plus-openrouter
57
+ writer agy-gemini-3-8-flash-high
58
+ writer agy-gemini-3-8-flash-medium
58
59
  ```
59
60
 
60
61
  `routes admit --model openrouter/qwen/qwen3-coder-plus --dry-run` exits 2 with `select a model from the refreshed inventory` even though that selector is already admitted, because the inventory never carries `openrouter/…` selectors. Selectors like these are admitted by a Git-reviewed edit of `.kxm/routes.yaml`.
@@ -63,7 +64,7 @@ On the capture machine, `kxm harness list` showed `claude` detected but logged o
63
64
 
64
65
  ### Price catalog and inventory
65
66
 
66
- `.kxm/prices.yaml` is dated `2026-09-16`, so every current run records `providerMetadata.priceCatalogStale: true` and no list estimate. The list prices below come from `.kxm/models/inventory.yaml`, fetched `2026-09-16T14:54:53Z`, in USD per 1M tokens. The checkout has no routing records yet, so none of the examples has recorded latency; for latency, run a bounded side-by-side experiment and compare p50 and p95 in `kxm routing report`.
67
+ `.kxm/prices.yaml` is dated `2026-09-28`. A run on that date can record a list estimate. Any other day records `providerMetadata.priceCatalogStale: true` and no list estimate. The list prices below come from `.kxm/models/inventory.yaml`. OpenRouter and Nous were fetched at `2026-09-28T14:02:09.052Z`. `pi`, `grok`, and `agy` were not installed for that refresh, so models that exist only in those CLIs are still the 2026-09-16 rows. Prices are USD per 1M tokens. The checkout has no routing records yet, so none of the examples has recorded latency; for latency, run a bounded side-by-side experiment and compare p50 and p95 in `kxm routing report`.
67
68
 
68
69
  ## The developer roster
69
70
 
@@ -108,15 +109,15 @@ The product brake, the dev helper and the roster policy now agree on the vendor
108
109
 
109
110
  These extend the generic examples on the reference page with this checkout's admissions, developer policy routes, readiness on the capture machine, and inventory prices.
110
111
 
111
- ### Grok 4.6
112
+ ### Grok 4.7
112
113
 
113
114
  | | Native `grok` | Pi + OpenRouter |
114
115
  |---|---|---|
115
- | Selector | `xai/grok-4.6`: admitted, and first in the writer roster | `openrouter/x-ai/grok-4.6`: not admitted |
116
+ | Selector | `xai/grok-4.7`: admitted, and first in the writer roster | `openrouter/x-ai/grok-4.7`: not admitted |
116
117
  | Developer roster | `grok-grok-4-7`, the writer route with `edit` | Refused: `native vendor cannot use Pi` |
117
- | Readiness | `grok` shows auth `yes` | `pi auth check --provider openrouter` returned `not_ready` |
118
- | Billing | grok.com subscription (OAuth) | $2.00 input, $6.00 output, $0.50 cached input |
119
- | Context | 500K (Pi's `xai` row; `grok models` does not print one) | 500,000 |
118
+ | Readiness | `grok` showed auth `yes` on the 2026-09-23 capture machine | `pi auth check --provider openrouter` returned `not_ready` on that capture |
119
+ | Billing | grok.com subscription (OAuth) | $1.60 input, $4.80 output, $0.40 cached input |
120
+ | Context | 500,000 (`x-ai/grok-4.7` in the refreshed inventory) | 500,000 |
120
121
 
121
122
  Pi's own `xai` provider reported `ready` (OAuth) on the capture machine. When the grok quota runs out, the next writer in the lineup is `pi-qwen3-coder-plus-openrouter`, a different vendor.
122
123
 
@@ -147,7 +148,7 @@ In the inventory, `openai/gpt-5.6-sol` has sources `openrouter+nous` and carries
147
148
 
148
149
  | | Native `agy` | `antigravity` Pi provider | Pi + OpenRouter |
149
150
  |---|---|---|---|
150
- | Selector | `google/gemini-3.8-flash-high`: admitted, last in the writer roster | `antigravity/gemini-3.8-flash`: not admitted | `openrouter/google/gemini-3.8-flash`: not admitted |
151
+ | Selector | `google/gemini-3.8-flash-high` and `google/gemini-3.8-flash-medium`: admitted, the last two writer routes | `antigravity/gemini-3.8-flash`: not admitted | `openrouter/google/gemini-3.8-flash`: not admitted |
151
152
  | Billing | Google subscription | Google subscription | $0.75 input, $3.75 output, $0.075 cached input |
152
153
  | Context | `agy` does not print it; the vendored catalog lists 1,048,576 | 1,048,576 | 1,048,576 |
153
154
 
@@ -131,11 +131,11 @@ This is the same vendor through Pi and OpenRouter, which the brake refuses:
131
131
 
132
132
  ```yaml
133
133
  harness: pi
134
- model: openrouter/x-ai/grok-4.6
134
+ model: openrouter/x-ai/grok-4.7
135
135
  vendor: xai
136
136
  ```
137
137
 
138
- The selector is `openrouter/x-ai/grok-4.6` and the harness is `pi`. The Pi brake refuses it before Pi starts, because the vendor segment `x-ai` is xAI, which has a native harness. A vendor with no native harness runs in the same shape: with `model: openrouter/qwen/qwen3-coder-plus`, Pi is spawned with `--model openrouter/qwen/qwen3-coder-plus`, its read-only flags (section 3) and `-p --mode json`. Write `model` exactly as the provider names it. For OpenRouter that is the vendor slug, so `x-ai`, not `xai`.
138
+ The selector is `openrouter/x-ai/grok-4.7` and the harness is `pi`. The Pi brake refuses it before Pi starts, because the vendor segment `x-ai` is xAI, which has a native harness. A vendor with no native harness runs in the same shape: with `model: openrouter/qwen/qwen3-coder-plus`, Pi is spawned with `--model openrouter/qwen/qwen3-coder-plus`, its read-only flags (section 3) and `-p --mode json`. Write `model` exactly as the provider names it. For OpenRouter that is the vendor slug, so `x-ai`, not `xai`.
139
139
 
140
140
  The harness and the selector have to agree. Pi refuses `provider: xai` and `openrouter/x-ai/…`. `grok` refuses `provider: openrouter`. [What the brake refuses](#what-the-brake-refuses) has the exact messages.
141
141
 
@@ -156,7 +156,9 @@ roster:
156
156
  - route: pi-qwen3-coder-plus-openrouter
157
157
  effort: medium
158
158
  - route: agy-gemini-3-8-flash-high
159
+ effort: medium
159
160
  - route: agy-gemini-3-8-flash-medium
161
+ effort: medium
160
162
  ```
161
163
 
162
164
  `grok-grok-4-7` resolves to `.kxm/models/grok-grok-4-7.yaml`: harness `grok`, model `grok-4.7`, vendor `xai`, status `admitted`, permission `edit`. `pi-qwen3-coder-plus-openrouter` is harness `pi`, model `openrouter/qwen/qwen3-coder-plus`, vendor `alibaba`. `agy-gemini-3-8-flash-high` is harness `agy`, model `gemini-3.8-flash-high`, vendor `google`. `kxm role list` prints the first route id as the primary, for example `(grok-grok-4-7)`. The previous ids (`grok-native`, `qwen-openrouter-pi`, `gemini-agy`) are aliases.
@@ -171,8 +173,8 @@ Role files are what `kxm role` and the Runtime membership check use.
171
173
 
172
174
  ```text
173
175
  admitted openrouter/qwen/qwen3-coder-plus
174
- admitted xai/grok-4.6
175
- disabled openrouter/x-ai/grok-4.6
176
+ admitted xai/grok-4.7
177
+ disabled openrouter/x-ai/grok-4.7
176
178
  ```
177
179
 
178
180
  The first segment of an id is the provider, and the rest is the model id. A route id does not name a harness. The first segment tells you which harness can run it. For an aggregator, the next segment names the vendor, and the Pi brake reads that too:
@@ -205,11 +207,11 @@ select a model from the refreshed inventory
205
207
  It exits with code 2. A bare OpenRouter slug is accepted, but it is not a dispatchable selector:
206
208
 
207
209
  ```bash
208
- kxm routes admit --model x-ai/grok-4.6 --dry-run
210
+ kxm routes admit --model x-ai/grok-4.7 --dry-run
209
211
  ```
210
212
 
211
213
  ```text
212
- would admit x-ai/grok-4.6
214
+ would admit x-ai/grok-4.7
213
215
  ```
214
216
 
215
217
  If that id were admitted, an agent would need `provider: x-ai`. Pi has no provider called `x-ai`, so the Pi auth probe would fail closed. When a route needs a provider prefix that the inventory does not carry, admit it by a Git-reviewed edit of `.kxm/routes.yaml`, after the admission decision is reviewed.
@@ -218,13 +220,13 @@ If that id were admitted, an agent would need `provider: x-ai`. Pi has no provid
218
220
 
219
221
  The same model shows up under different ids depending on the file:
220
222
 
221
- | Where | Id for Grok 4.6 | What that id means |
223
+ | Where | Id for Grok 4.7 | What that id means |
222
224
  |---|---|---|
223
- | `.kxm/routes.yaml`, agent selector | `xai/grok-4.6` | Provider `xai`. Needs `harness: grok`. |
224
- | `.kxm/routes.yaml`, agent selector | `openrouter/x-ai/grok-4.6` | OpenRouter through Pi. The brake refuses it. |
225
- | `.kxm/models/inventory.yaml`, source `pi` | `xai/grok-4.6` | Pi's own `xai` provider. The brake refuses it. |
226
- | `.kxm/models/inventory.yaml`, source `openrouter` | `x-ai/grok-4.6` | The OpenRouter catalog slug. The inventory stores OpenRouter ids without an `openrouter/` prefix. |
227
- | `.kxm/prices.yaml` | `id: xai/grok-4.6`, `provider: xai`, alias `x-ai/grok-4.6` | A list price that applies only to provider `xai`, because price lookup filters by provider. |
225
+ | `.kxm/routes.yaml`, agent selector | `xai/grok-4.7` | Provider `xai`. Needs `harness: grok`. |
226
+ | `.kxm/routes.yaml`, agent selector | `openrouter/x-ai/grok-4.7` | OpenRouter through Pi. The brake refuses it. |
227
+ | `.kxm/models/inventory.yaml`, source `pi` | `xai/grok-4.6` | Pi's own `xai` provider from the last `pi --list-models` capture. The brake refuses it. This refresh did not re-run Pi, and that capture has no `xai/grok-4.7` row. |
228
+ | `.kxm/models/inventory.yaml`, source `openrouter` | `x-ai/grok-4.7` | The OpenRouter catalog slug. The inventory stores OpenRouter ids without an `openrouter/` prefix. |
229
+ | `.kxm/prices.yaml` | `id: xai/grok-4.7`, `provider: xai`, alias `x-ai/grok-4.7` | A list price that applies only to provider `xai`, because price lookup filters by provider. `xai/grok-4.6` remains a separate row. |
228
230
 
229
231
  An inventory id can also mean something else in `.kxm/routes.yaml`. For example, the inventory can list `openai/gpt-5.6-sol` from the OpenRouter feed with OpenRouter prices, while in `.kxm/routes.yaml` the same string means provider `openai` through native `codex`.
230
232
 
@@ -341,12 +343,12 @@ The live one-shot producer runs every harness read-only, with a 120-second proce
341
343
 
342
344
  The Runtime does not run a step live when it has `write` access to a repository; it hands the run off with `step_unsupported`. Only Pi runs as a long-lived worker.
343
345
 
344
- ### Grok 4.6
346
+ ### Grok 4.7
345
347
 
346
348
  | | Native `grok` | Pi + OpenRouter |
347
349
  |---|---|---|
348
- | Model file | `harness: grok`, `model: grok-4.6`, `vendor: xai` | `harness: pi`, `model: openrouter/x-ai/grok-4.6`, `vendor: xai` |
349
- | Selector | `xai/grok-4.6` | `openrouter/x-ai/grok-4.6` |
350
+ | Model file | `harness: grok`, `model: grok-4.7`, `vendor: xai` | `harness: pi`, `model: openrouter/x-ai/grok-4.7`, `vendor: xai` |
351
+ | Selector | `xai/grok-4.7` | `openrouter/x-ai/grok-4.7` |
350
352
  | Billing | grok.com subscription (OAuth) | OpenRouter credit |
351
353
  | Recorded `costBasis` | `unknown` | None: the brake refuses it before dispatch |
352
354
  | Mode | One-shot `grok --single`. Not a worker. | Refused as a one-shot and as a worker model |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kontextmind/kxm",
3
- "version": "0.7.162",
3
+ "version": "0.7.164",
4
4
  "description": "KXM local-first multi-agent orchestration and operator dashboard",
5
5
  "type": "module",
6
6
  "author": "KontextMind",
@@ -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.162",
5
+ "version": "0.7.164",
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",
@@ -17313,7 +17313,7 @@ function sessionTokenFixHint(policy) {
17313
17313
  }
17314
17314
 
17315
17315
  // plugins/kxm/src/mcp-server.ts
17316
- var VERSION = "0.7.162";
17316
+ var VERSION = "0.7.164";
17317
17317
  var CONFIGURE_PLUGIN = "/plugin configure kxm@kxm";
17318
17318
  var inbox = /* @__PURE__ */ new Map();
17319
17319
  var notifiedInbox = /* @__PURE__ */ new Set();
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-plugin",
3
- "version": "0.7.162",
3
+ "version": "0.7.164",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "engines": {
@@ -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.162";
14
+ const VERSION = "0.7.164";
15
15
  const CONFIGURE_PLUGIN = "/plugin configure kxm@kxm";
16
16
  const inbox = new Map<string, MessageRecord>();
17
17
  const notifiedInbox = new Set<string>();