@kontextmind/kxm 0.7.154 → 0.7.156

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.154",
14
+ "version": "0.7.156",
15
15
  "category": "development",
16
16
  "tags": ["kxm", "multi-agent", "workflows", "mcp"]
17
17
  }
package/CHANGELOG.md CHANGED
@@ -161,9 +161,14 @@ All notable user-facing changes are documented here. The project follows [Semant
161
161
  #363 after it stopped reporting tests. `package-install.test.ts` (171s on
162
162
  that lane, 67s on Linux) now runs with the serial files. The other light
163
163
  files are split into `light-1` and `light-2`. POSIX `#!/bin/sh` shims in
164
- the land tests are skipped on Windows. `CI / required` still fails when a
165
- lane fails or is cancelled. See
166
- [CI and release](docs/contributing/ci-and-release.md).
164
+ the land tests are skipped on Windows. A missing Windows `.cmd` is not
165
+ reported as an installed harness: `cmd.exe` answers for a command that is
166
+ not on `PATH`, and that answer was counted as detection. Unix `0600` mode
167
+ checks, 8.3-versus-long temp paths, and forward-slash path checks in the
168
+ unit tests match what Windows can report. A temp directory a finished
169
+ child still has open is retried and then left behind instead of failing
170
+ the test. `CI / required` still fails when a lane fails or is cancelled.
171
+ See [CI and release](docs/contributing/ci-and-release.md).
167
172
 
168
173
  - **Workforce ids use one convention, and old ids still resolve.**
169
174
  Role ids stay `planner`, `writer`, `reviewer-arch`, and `reviewer-cli`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kontextmind/kxm",
3
- "version": "0.7.154",
3
+ "version": "0.7.156",
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.154",
5
+ "version": "0.7.156",
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",
@@ -18406,10 +18406,17 @@ function resolveDispatchStatus(entry, detected, authenticated, issues) {
18406
18406
  }
18407
18407
  return { status: "yes", supported: true };
18408
18408
  }
18409
+ function windowsCmdReportsMissing(result) {
18410
+ if (result.ok) return false;
18411
+ const text = `${result.stdout}
18412
+ ${result.stderr}`;
18413
+ return /not recognized as an internal or external command/i.test(text) || /the system cannot find the (?:file|path) specified/i.test(text);
18414
+ }
18409
18415
  function tryHarnessCommand(candidate, entry, runCommand, timeoutMs) {
18410
18416
  const result = runCommand(candidate, entry.versionArgs, timeoutMs);
18411
18417
  if (result.error === "ENOENT") return void 0;
18412
18418
  if (result.error && result.code === null && !result.stdout && !result.stderr) return void 0;
18419
+ if (isWindowsHarnessShim(candidate) && windowsCmdReportsMissing(result)) return void 0;
18413
18420
  return {
18414
18421
  command: candidate,
18415
18422
  version: firstLine(result.stdout) ?? firstLine(result.stderr)
@@ -17313,7 +17313,7 @@ function sessionTokenFixHint(policy) {
17313
17313
  }
17314
17314
 
17315
17315
  // plugins/kxm/src/mcp-server.ts
17316
- var VERSION = "0.7.154";
17316
+ var VERSION = "0.7.156";
17317
17317
  var CONFIGURE_PLUGIN = "/plugin configure kxm@kxm";
17318
17318
  var inbox = /* @__PURE__ */ new Map();
17319
17319
  var notifiedInbox = /* @__PURE__ */ new Set();
@@ -16889,10 +16889,17 @@ function resolveDispatchStatus(entry, detected, authenticated, issues) {
16889
16889
  }
16890
16890
  return { status: "yes", supported: true };
16891
16891
  }
16892
+ function windowsCmdReportsMissing(result) {
16893
+ if (result.ok) return false;
16894
+ const text = `${result.stdout}
16895
+ ${result.stderr}`;
16896
+ return /not recognized as an internal or external command/i.test(text) || /the system cannot find the (?:file|path) specified/i.test(text);
16897
+ }
16892
16898
  function tryHarnessCommand(candidate, entry, runCommand, timeoutMs) {
16893
16899
  const result = runCommand(candidate, entry.versionArgs, timeoutMs);
16894
16900
  if (result.error === "ENOENT") return void 0;
16895
16901
  if (result.error && result.code === null && !result.stdout && !result.stderr) return void 0;
16902
+ if (isWindowsHarnessShim(candidate) && windowsCmdReportsMissing(result)) return void 0;
16896
16903
  return {
16897
16904
  command: candidate,
16898
16905
  version: firstLine(result.stdout) ?? firstLine(result.stderr)
@@ -16891,10 +16891,17 @@ function resolveDispatchStatus(entry, detected, authenticated, issues) {
16891
16891
  }
16892
16892
  return { status: "yes", supported: true };
16893
16893
  }
16894
+ function windowsCmdReportsMissing(result) {
16895
+ if (result.ok) return false;
16896
+ const text = `${result.stdout}
16897
+ ${result.stderr}`;
16898
+ return /not recognized as an internal or external command/i.test(text) || /the system cannot find the (?:file|path) specified/i.test(text);
16899
+ }
16894
16900
  function tryHarnessCommand(candidate, entry, runCommand, timeoutMs) {
16895
16901
  const result = runCommand(candidate, entry.versionArgs, timeoutMs);
16896
16902
  if (result.error === "ENOENT") return void 0;
16897
16903
  if (result.error && result.code === null && !result.stdout && !result.stderr) return void 0;
16904
+ if (isWindowsHarnessShim(candidate) && windowsCmdReportsMissing(result)) return void 0;
16898
16905
  return {
16899
16906
  command: candidate,
16900
16907
  version: firstLine(result.stdout) ?? firstLine(result.stderr)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-plugin",
3
- "version": "0.7.154",
3
+ "version": "0.7.156",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "engines": {
@@ -941,6 +941,13 @@ export function resolveDispatchStatus(
941
941
  return { status: "yes", supported: true };
942
942
  }
943
943
 
944
+ function windowsCmdReportsMissing(result: HarnessCommandResult): boolean {
945
+ if (result.ok) return false;
946
+ const text = `${result.stdout}\n${result.stderr}`;
947
+ return /not recognized as an internal or external command/i.test(text)
948
+ || /the system cannot find the (?:file|path) specified/i.test(text);
949
+ }
950
+
944
951
  function tryHarnessCommand(
945
952
  candidate: string,
946
953
  entry: HarnessCatalogEntry,
@@ -950,6 +957,9 @@ function tryHarnessCommand(
950
957
  const result = runCommand(candidate, entry.versionArgs, timeoutMs);
951
958
  if (result.error === "ENOENT") return undefined;
952
959
  if (result.error && result.code === null && !result.stdout && !result.stderr) return undefined;
960
+ // spawn with shell runs cmd.exe, which exists even when the shim does not.
961
+ // Its "not recognized" answer is a miss, not a detected harness.
962
+ if (isWindowsHarnessShim(candidate) && windowsCmdReportsMissing(result)) return undefined;
953
963
  return {
954
964
  command: candidate,
955
965
  version: firstLine(result.stdout) ?? firstLine(result.stderr),
@@ -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.154";
14
+ const VERSION = "0.7.156";
15
15
  const CONFIGURE_PLUGIN = "/plugin configure kxm@kxm";
16
16
  const inbox = new Map<string, MessageRecord>();
17
17
  const notifiedInbox = new Set<string>();