@kontextmind/kxm 0.7.128 → 0.7.131
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/.kxm/README.md +4 -1
- package/.kxm/agents/coordinator.yaml +1 -0
- package/.kxm/agents/critic-arch.yaml +1 -4
- package/.kxm/agents/critic-cli.yaml +1 -4
- package/.kxm/agents/implementer.yaml +1 -4
- package/.kxm/workflows/implement-only.yaml +1 -1
- package/.kxm/workflows/review-arch-only.yaml +1 -1
- package/.kxm/workflows/review-cli-only.yaml +1 -1
- package/CHANGELOG.md +42 -1
- package/docs/architecture/inventory.md +1 -1
- package/docs/concepts/architecture.md +1 -1
- package/docs/concepts/data-and-storage.md +1 -1
- package/docs/contracts/README.md +1 -1
- package/docs/contracts/migration.md +12 -8
- package/docs/contracts/routing.md +3 -3
- package/docs/contributing/assignment-runner.md +14 -15
- package/docs/contributing/development.md +22 -6
- package/docs/contributing/harness-routing-internals.md +8 -8
- package/docs/glossary.md +1 -1
- package/docs/guides/agent-skills.md +1 -1
- package/docs/operations/backup-and-restore.md +7 -7
- package/docs/operations/upgrade.md +2 -2
- package/docs/reference/cli-reference.md +37 -14
- package/docs/reference/config-reference.md +81 -155
- package/docs/reference/harness-routing.md +29 -21
- package/docs/reference/workflow-catalog.md +4 -4
- package/docs/start/first-workflow.md +1 -1
- package/examples/project/.kxm/agents/coordinator.yaml +1 -2
- package/examples/project/.kxm/agents/critic-1.yaml +1 -3
- package/examples/project/.kxm/agents/critic-2.yaml +1 -2
- package/examples/project/.kxm/agents/critic-3.yaml +2 -3
- package/examples/project/.kxm/agents/implementer.yaml +1 -2
- package/examples/project/.kxm/agents/planner.yaml +1 -2
- package/examples/project/.kxm/agents/reproducer.yaml +1 -2
- package/examples/project/.kxm/agents/reviewer.yaml +1 -2
- package/examples/project/.kxm/workflows/fix.yaml +0 -12
- package/package.json +8 -8
- package/plugins/kxm/.claude-plugin/plugin.json +1 -1
- package/plugins/kxm/dist/cli.js +2565 -465
- package/plugins/kxm/dist/mcp-server.js +1 -1
- package/plugins/kxm/dist/runtime-supervisor.js +683 -348
- package/plugins/kxm/dist/runtime.js +694 -358
- package/plugins/kxm/dist/server.js +17 -14
- package/plugins/kxm/package.json +1 -1
- package/plugins/kxm/skills/kxm/SKILL.md +1 -1
- package/plugins/kxm/skills/kxm-definitions/SKILL.md +8 -0
- package/plugins/kxm/src/cli/lanes.ts +109 -4
- package/plugins/kxm/src/cli/project.ts +6 -6
- package/plugins/kxm/src/database.ts +25 -19
- package/plugins/kxm/src/engine.ts +168 -163
- package/plugins/kxm/src/init-guide-setup.ts +75 -15
- package/plugins/kxm/src/mcp-server.ts +1 -1
- package/plugins/kxm/src/oneshot-producer.ts +3 -15
- package/plugins/kxm/src/project-config.ts +83 -70
- package/plugins/kxm/src/routes.ts +26 -18
- package/plugins/kxm/src/runtime-service.ts +1 -0
- package/plugins/kxm/src/runtime-store.ts +390 -77
- package/plugins/kxm/src/runtime-supervisor.ts +87 -21
- package/plugins/kxm/src/suggest.ts +2 -2
- package/plugins/kxm/src/template.ts +2 -14
- package/schemas/agent.schema.json +8 -0
- package/scripts/roster-policy.d.mts +2 -1
- package/scripts/roster-policy.mjs +119 -22
- package/scripts/run-bounded.mjs +53 -0
|
@@ -99,35 +99,43 @@ pi auth check --model openrouter/qwen/qwen3-coder-plus --json --no-refresh
|
|
|
99
99
|
|
|
100
100
|
### How KXM builds a route
|
|
101
101
|
|
|
102
|
-
- **Selector.** The selector is `<
|
|
103
|
-
- **Harness.** The harness is the
|
|
104
|
-
- **Admission.** The selector must be admitted
|
|
102
|
+
- **Selector.** The selector is `<vendor>/<model>` from the selected `.kxm/models/<route>.yaml`. The agent names a `role`, `.kxm/roles/<role>.yaml` lists route ids, and the chosen roster entry names that model file. The model id may contain `/`, for example `openrouter/qwen/qwen3-coder-plus`.
|
|
103
|
+
- **Harness.** The harness is the `harness` field on that model file. An agent file does not select it.
|
|
104
|
+
- **Admission.** The selector must be admitted. The engine uses the first roster entry whose model file is readable and whose route is admitted.
|
|
105
105
|
- **Dispatch probe.** Before spawning anything, the producer probes the exact harness, provider and model triple. It refuses unhosted pairs and the Pi brake.
|
|
106
106
|
- **Effort.** The Runtime sets the thinking effort per attempt: the first attempt of a step runs at `low`, and any later attempt of the same step at `medium`. The live producer passes it as `--effort` to `claude`, as `model_reasoning_effort` to `codex` and as `--reasoning-effort` to `grok`. `agy`, `kimi` and `pi` get no effort flag. A roster entry's `effort` is display-only.
|
|
107
107
|
|
|
108
108
|
### Agent YAML
|
|
109
109
|
|
|
110
|
-
|
|
110
|
+
An agent names a role and nothing else about the route:
|
|
111
|
+
|
|
112
|
+
```yaml
|
|
113
|
+
role: writer
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
`harness` and `model` on an agent file are refused at load (`retired_agent_routing_fields`). A step `model` is refused at load and again at dispatch (`producer_route_unsupported`).
|
|
117
|
+
|
|
118
|
+
### Model file
|
|
119
|
+
|
|
120
|
+
This is the native route, from `.kxm/models/grok-native.yaml`:
|
|
111
121
|
|
|
112
122
|
```yaml
|
|
113
123
|
harness: grok
|
|
114
|
-
model:
|
|
115
|
-
|
|
116
|
-
model: grok-4.6
|
|
124
|
+
model: grok-4.7
|
|
125
|
+
vendor: xai
|
|
117
126
|
```
|
|
118
127
|
|
|
119
|
-
The selector is `xai/grok-4.
|
|
128
|
+
The selector is `xai/grok-4.7` and the harness is `grok`. The live one-shot producer spawns `grok --model grok-4.7 … --output-format json --single <prompt>`.
|
|
120
129
|
|
|
121
|
-
This is the same
|
|
130
|
+
This is the same vendor through Pi and OpenRouter, which the brake refuses:
|
|
122
131
|
|
|
123
132
|
```yaml
|
|
124
|
-
|
|
125
|
-
model:
|
|
126
|
-
|
|
127
|
-
model: x-ai/grok-4.6
|
|
133
|
+
harness: pi
|
|
134
|
+
model: openrouter/x-ai/grok-4.6
|
|
135
|
+
vendor: xai
|
|
128
136
|
```
|
|
129
137
|
|
|
130
|
-
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: 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
|
|
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`.
|
|
131
139
|
|
|
132
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.
|
|
133
141
|
|
|
@@ -152,9 +160,9 @@ roster:
|
|
|
152
160
|
|
|
153
161
|
`grok-native` resolves to `.kxm/models/grok-native.yaml`: harness `grok`, model `grok-4.7`, vendor `xai`, status `admitted`, permission `edit`. `qwen-openrouter-pi` is harness `pi`, model `openrouter/qwen/qwen3-coder-plus`, vendor `alibaba`. `gemini-agy` 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-native)`.
|
|
154
162
|
|
|
155
|
-
|
|
163
|
+
Dispatch resolves a step from the agent `role`, then `.kxm/roles/<role>.yaml`, then the selected `.kxm/models/<route>.yaml`. That model file carries `harness`, `model`, `vendor`, `status`, and `permissions`. The engine walks the roster in order and uses the first admitted route whose model file is readable. A missing or unreadable model file is a refusal (`roster_model_unreadable` at load, `producer_route_unsupported` at dispatch), not a skip to the next entry. A route file that names a harness the model cannot run on still fails closed with `harness_unhosted_model`.
|
|
156
164
|
|
|
157
|
-
|
|
165
|
+
Role files are what `kxm role` and the Runtime membership check use.
|
|
158
166
|
|
|
159
167
|
### Route ids in `.kxm/routes.yaml`
|
|
160
168
|
|
|
@@ -308,7 +316,7 @@ kxm routing report --file ./run-events.jsonl --equivalent-list-cost
|
|
|
308
316
|
|
|
309
317
|
## 3. Examples: the same model, two routes
|
|
310
318
|
|
|
311
|
-
Each example shows the
|
|
319
|
+
Each example shows the model file for the native route and for the same model through Pi, and which one the rules pick. For a native vendor, the Pi brake refuses the Pi column; it is shown so that you recognize the id. Whether a route is admitted is in your `.kxm/routes.yaml`. List prices and context sizes are in `.kxm/models/inventory.yaml` after `kxm models inventory-refresh`, and `pi --list-models` shows context, max output, thinking and image support per model. A provider missing from `pi --list-models` usually has no credentials, which is itself a readiness hint.
|
|
312
320
|
|
|
313
321
|
### How the live producer runs each harness
|
|
314
322
|
|
|
@@ -330,7 +338,7 @@ The Runtime does not run a step live when it has `write` access to a repository;
|
|
|
330
338
|
|
|
331
339
|
| | Native `grok` | Pi + OpenRouter |
|
|
332
340
|
|---|---|---|
|
|
333
|
-
|
|
|
341
|
+
| Model file | `harness: grok`, `model: grok-4.6`, `vendor: xai` | `harness: pi`, `model: openrouter/x-ai/grok-4.6`, `vendor: xai` |
|
|
334
342
|
| Selector | `xai/grok-4.6` | `openrouter/x-ai/grok-4.6` |
|
|
335
343
|
| Billing | grok.com subscription (OAuth) | OpenRouter credit |
|
|
336
344
|
| Recorded `costBasis` | `unknown` | None: the brake refuses it before dispatch |
|
|
@@ -350,7 +358,7 @@ pi auth check --provider xai --json --no-refresh
|
|
|
350
358
|
|
|
351
359
|
| | Native `codex` | Pi + OpenRouter |
|
|
352
360
|
|---|---|---|
|
|
353
|
-
|
|
|
361
|
+
| Model file | `harness: codex`, `model: gpt-5.6-sol`, `vendor: openai` | `harness: pi`, `model: openrouter/openai/gpt-5.6-sol`, `vendor: openai` |
|
|
354
362
|
| Selector | `openai/gpt-5.6-sol` | `openrouter/openai/gpt-5.6-sol` |
|
|
355
363
|
| Readiness | Needs `codex` auth `yes` with `authMethod: ChatGPT` | Never reached: the brake refuses it first |
|
|
356
364
|
| Billing | ChatGPT subscription | OpenRouter credit |
|
|
@@ -373,7 +381,7 @@ A larger context window on the OpenRouter route does not make OpenRouter an allo
|
|
|
373
381
|
|
|
374
382
|
| | Native `claude` | Pi + OpenRouter |
|
|
375
383
|
|---|---|---|
|
|
376
|
-
|
|
|
384
|
+
| Model file | `harness: claude`, `model: fable`, `vendor: anthropic` | `harness: pi`, `model: openrouter/anthropic/claude-fable-5.1`, `vendor: anthropic` |
|
|
377
385
|
| Selector | `anthropic/fable` | `openrouter/anthropic/claude-fable-5.1` |
|
|
378
386
|
| Billing | claude.ai subscription | OpenRouter credit |
|
|
379
387
|
| Recorded `costBasis` | `unmetered`, `priceRef: subscription:claude`, plus a list estimate when `prices.yaml` has an `anthropic` row dated today | None: refused before dispatch |
|
|
@@ -385,7 +393,7 @@ A larger context window on the OpenRouter route does not make OpenRouter an allo
|
|
|
385
393
|
|
|
386
394
|
| | Native `agy` | `antigravity` Pi provider | Pi + OpenRouter |
|
|
387
395
|
|---|---|---|---|
|
|
388
|
-
|
|
|
396
|
+
| Model file | `harness: agy`, `model: gemini-3.8-flash-high`, `vendor: google` | `harness: pi`, `model: antigravity/gemini-3.8-flash`, `vendor: google` | `harness: pi`, `model: openrouter/google/gemini-3.8-flash`, `vendor: google` |
|
|
389
397
|
| Selector | `google/gemini-3.8-flash-high` | `antigravity/gemini-3.8-flash` | `openrouter/google/gemini-3.8-flash` |
|
|
390
398
|
| Readiness | Needs `agy` auth `yes` (`antigravity-oauth`) | Registered only by the KXM Pi extension. `pi auth check` never loads extensions, so `pi auth check --provider antigravity` returns `provider_not_found`. | Never reached: the brake refuses it (vendor segment `google`) |
|
|
391
399
|
| Billing | Google subscription | Google subscription | OpenRouter credit |
|
|
@@ -1094,11 +1094,11 @@ This cross-reference points each software and security workflow at the KXM pages
|
|
|
1094
1094
|
|
|
1095
1095
|
These three files live in this repository's `.kxm/workflows`. `kxm init` does not write them.
|
|
1096
1096
|
|
|
1097
|
-
| Workflow |
|
|
1097
|
+
| Workflow | Runs through |
|
|
1098
1098
|
|---|---|
|
|
1099
|
-
| `implement-only` | `
|
|
1100
|
-
| `review-arch-only` | `
|
|
1101
|
-
| `review-cli-only` | `
|
|
1099
|
+
| `implement-only` | `kxm lane run`. Replaces a retired transport recipe. |
|
|
1100
|
+
| `review-arch-only` | `kxm lane run`. Replaces a retired transport recipe. |
|
|
1101
|
+
| `review-cli-only` | `kxm lane run`. Replaces a retired transport recipe. |
|
|
1102
1102
|
|
|
1103
1103
|
## Related
|
|
1104
1104
|
|
|
@@ -254,7 +254,7 @@ The file is a `kxm.workflow.v1` definition. `coordinator` names the agent that o
|
|
|
254
254
|
| Cost | None | Model usage on your accounts |
|
|
255
255
|
|
|
256
256
|
> [!WARNING]
|
|
257
|
-
> Without `--simulated`, `kxm runs drive` calls live harnesses. An agent whose model is not an admitted route fails with `producer_route_not_admitted`. Read [Harness routing](../reference/harness-routing.md) before your first live drive. A live step with `write` access runs only on a harness with an audited writer profile (`pi` or `grok`), as a single assignment, in a project whose `limits.maxConcurrentRuns` is 1, and
|
|
257
|
+
> Without `--simulated`, `kxm runs drive` calls live harnesses. An agent whose model is not an admitted route fails with `producer_route_not_admitted`. Read [Harness routing](../reference/harness-routing.md) before your first live drive. A live step with `write` access runs only on a harness with an audited writer profile (`pi` or `grok`), as a single assignment, in a project whose `limits.maxConcurrentRuns` is 1, and only on a route in the writer roster under `.kxm/roles/writer.yaml`; any other live write step is handed off. A live write step settles `passed` only when the checkout changed, and a read-only step that changes the checkout settles `failed`. Gate steps are exempt. The read-only `spec-and-plan` template needs none of this.
|
|
258
258
|
|
|
259
259
|
### Why start with `first` and not `default`
|
|
260
260
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
schema: kxm.agent.v1
|
|
2
|
-
purpose: Third
|
|
3
|
-
|
|
4
|
-
profile: critic-gemini
|
|
2
|
+
purpose: Third architecture critic, bound to reviewer-arch like critic-1.
|
|
3
|
+
role: reviewer-arch
|
|
5
4
|
tools:
|
|
6
5
|
preset: read-only
|
|
7
6
|
defaultRepositoryAccess: read
|
|
@@ -92,10 +92,6 @@ steps:
|
|
|
92
92
|
agent: critic-1
|
|
93
93
|
maxAttempts: 3
|
|
94
94
|
description: Verify reporter-path coupling, failure causality, expected behavior, and absence of production edits.
|
|
95
|
-
model:
|
|
96
|
-
tag: critic
|
|
97
|
-
capabilities:
|
|
98
|
-
- structured-output
|
|
99
95
|
repositories:
|
|
100
96
|
control: read
|
|
101
97
|
api: read
|
|
@@ -110,8 +106,6 @@ steps:
|
|
|
110
106
|
maximum: 3
|
|
111
107
|
maxParallel: 3
|
|
112
108
|
maxAttemptsPerAssignment: 2
|
|
113
|
-
distinctBy:
|
|
114
|
-
- provider
|
|
115
109
|
join:
|
|
116
110
|
strategy: all-settled
|
|
117
111
|
minimumPassed: 2
|
|
@@ -165,10 +159,6 @@ steps:
|
|
|
165
159
|
agent: critic-1
|
|
166
160
|
maxAttempts: 3
|
|
167
161
|
description: Independently review the plan for correctness, scope, security, and regression risk.
|
|
168
|
-
model:
|
|
169
|
-
tag: critic
|
|
170
|
-
capabilities:
|
|
171
|
-
- structured-output
|
|
172
162
|
repositories:
|
|
173
163
|
control: read
|
|
174
164
|
api: read
|
|
@@ -183,8 +173,6 @@ steps:
|
|
|
183
173
|
maximum: 3
|
|
184
174
|
maxParallel: 3
|
|
185
175
|
maxAttemptsPerAssignment: 2
|
|
186
|
-
distinctBy:
|
|
187
|
-
- provider
|
|
188
176
|
join:
|
|
189
177
|
strategy: all-settled
|
|
190
178
|
minimumPassed: 2
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kontextmind/kxm",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.131",
|
|
4
4
|
"description": "KXM local-first multi-agent orchestration and operator dashboard",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "KontextMind",
|
|
@@ -34,12 +34,12 @@
|
|
|
34
34
|
"build:runtime": "node scripts/build-runtime.mjs",
|
|
35
35
|
"build": "npm run build:mcp && npm run build:runtime && npm run build:packages",
|
|
36
36
|
"check:generated": "npm run build && node scripts/check-generated.mjs",
|
|
37
|
-
"test:core": "npm run build && node --disable-warning=ExperimentalWarning --experimental-strip-types --test --test-concurrency=4 test/core/*.test.ts",
|
|
38
|
-
"test:simulations": "npm run build && node --disable-warning=ExperimentalWarning --experimental-strip-types --test --test-concurrency=4 test/simulations/*.test.ts",
|
|
39
|
-
"test:complete": "npm run build && node --disable-warning=ExperimentalWarning --experimental-strip-types --test --test-concurrency=4 test/core/*.test.ts test/simulations/*.test.ts",
|
|
40
|
-
"test": "npm run build && node --disable-warning=ExperimentalWarning --experimental-strip-types --test --test-concurrency=4 test/core/*.test.ts packages/core/*/tests/unit/*.test.ts",
|
|
41
|
-
"test:coverage:core": "npm run build && node --disable-warning=ExperimentalWarning --experimental-strip-types --test --test-concurrency=4 --experimental-test-coverage --test-coverage-lines=91 --test-coverage-branches=80 --test-coverage-functions=92 --test-coverage-include=plugins/kxm/src/**/*.ts --test-coverage-exclude=plugins/kxm/src/server.ts --test-coverage-exclude=plugins/kxm/src/mcp-server.ts --test-coverage-exclude=plugins/kxm/src/runtime-supervisor.ts --test-coverage-include=packages/core/*/src/**/*.ts test/core/*.test.ts packages/core/*/tests/unit/*.test.ts",
|
|
42
|
-
"test:coverage:complete": "npm run build && node --disable-warning=ExperimentalWarning --experimental-strip-types --test --test-concurrency=4 --experimental-test-coverage --test-coverage-lines=93 --test-coverage-branches=80 --test-coverage-functions=93 --test-coverage-include=plugins/kxm/src/**/*.ts --test-coverage-exclude=plugins/kxm/src/server.ts --test-coverage-exclude=plugins/kxm/src/mcp-server.ts --test-coverage-exclude=plugins/kxm/src/runtime-supervisor.ts --test-coverage-include=packages/core/*/src/**/*.ts test/core/*.test.ts test/simulations/*.test.ts packages/core/*/tests/unit/*.test.ts",
|
|
37
|
+
"test:core": "npm run build && node scripts/run-bounded.mjs 1200000 node --disable-warning=ExperimentalWarning --experimental-strip-types --test --test-force-exit --test-concurrency=4 test/core/*.test.ts",
|
|
38
|
+
"test:simulations": "npm run build && node scripts/run-bounded.mjs 1200000 node --disable-warning=ExperimentalWarning --experimental-strip-types --test --test-force-exit --test-concurrency=4 test/simulations/*.test.ts",
|
|
39
|
+
"test:complete": "npm run build && node scripts/run-bounded.mjs 2400000 node --disable-warning=ExperimentalWarning --experimental-strip-types --test --test-force-exit --test-concurrency=4 test/core/*.test.ts test/simulations/*.test.ts",
|
|
40
|
+
"test": "npm run build && node scripts/run-bounded.mjs 1200000 node --disable-warning=ExperimentalWarning --experimental-strip-types --test --test-force-exit --test-concurrency=4 test/core/*.test.ts packages/core/*/tests/unit/*.test.ts",
|
|
41
|
+
"test:coverage:core": "npm run build && node scripts/run-bounded.mjs 2400000 node --disable-warning=ExperimentalWarning --experimental-strip-types --test --test-force-exit --test-concurrency=4 --experimental-test-coverage --test-coverage-lines=91 --test-coverage-branches=80 --test-coverage-functions=92 --test-coverage-include=plugins/kxm/src/**/*.ts --test-coverage-exclude=plugins/kxm/src/server.ts --test-coverage-exclude=plugins/kxm/src/mcp-server.ts --test-coverage-exclude=plugins/kxm/src/runtime-supervisor.ts --test-coverage-include=packages/core/*/src/**/*.ts test/core/*.test.ts packages/core/*/tests/unit/*.test.ts",
|
|
42
|
+
"test:coverage:complete": "npm run build && node scripts/run-bounded.mjs 2400000 node --disable-warning=ExperimentalWarning --experimental-strip-types --test --test-force-exit --test-concurrency=4 --experimental-test-coverage --test-coverage-lines=93 --test-coverage-branches=80 --test-coverage-functions=93 --test-coverage-include=plugins/kxm/src/**/*.ts --test-coverage-exclude=plugins/kxm/src/server.ts --test-coverage-exclude=plugins/kxm/src/mcp-server.ts --test-coverage-exclude=plugins/kxm/src/runtime-supervisor.ts --test-coverage-include=packages/core/*/src/**/*.ts test/core/*.test.ts test/simulations/*.test.ts packages/core/*/tests/unit/*.test.ts",
|
|
43
43
|
"test:coverage": "npm run test:coverage:core",
|
|
44
44
|
"typecheck": "tsc --noEmit",
|
|
45
45
|
"lint:docs": "markdownlint-cli2",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"verify": "npm test && npm run check && npm run check:generated",
|
|
49
49
|
"validate:claude": "claude plugin validate . --strict && claude plugin validate plugins/kxm --strict",
|
|
50
50
|
"validate:ci": "npm run test:coverage && npm run check && npm pack --dry-run",
|
|
51
|
-
"validate:pr": "npm run build && npm run typecheck && node --disable-warning=ExperimentalWarning --experimental-strip-types --test --test-concurrency=4 test/core/artifacts-exist.test.ts test/core/ci-contract.test.ts test/core/envelope.test.ts test/core/envelope-contract.test.ts test/core/protocol.test.ts test/core/repo-root.test.ts test/core/routes-count.test.ts test/core/smoke.test.ts test/core/version-surfaces.test.ts && npm run check:versions && node scripts/check-generated.mjs",
|
|
51
|
+
"validate:pr": "npm run build && npm run typecheck && node scripts/run-bounded.mjs 1200000 node --disable-warning=ExperimentalWarning --experimental-strip-types --test --test-force-exit --test-concurrency=4 test/core/artifacts-exist.test.ts test/core/ci-contract.test.ts test/core/envelope.test.ts test/core/envelope-contract.test.ts test/core/protocol.test.ts test/core/repo-root.test.ts test/core/routes-count.test.ts test/core/smoke.test.ts test/core/version-surfaces.test.ts && npm run check:versions && node scripts/check-generated.mjs",
|
|
52
52
|
"validate": "npm run validate:ci && npm run validate:claude",
|
|
53
53
|
"test:packages": "npx nx run-many -t test --output-style=static",
|
|
54
54
|
"check:packages": "npx nx run-many -t build,test:coverage,typecheck --output-style=static",
|
|
@@ -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.131",
|
|
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",
|