@xenosystem/agent-cli 0.5.19 → 0.5.21

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.
@@ -8,7 +8,7 @@
8
8
  "abi": "napi-v8",
9
9
  "napi": 8,
10
10
  "minimumNode": "20.0.0",
11
- "nodeHeaders": "24.18.0",
11
+ "nodeHeaders": "24.14.1",
12
12
  "compiler": "c++ (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0",
13
13
  "sourceSha256": "6ba69e62cf0c0765546afa19f1820c1cc7f64f452802718c20b4a117d6c8f9c6",
14
14
  "sha256": "31140996faed13b946c0c30a2573e8675110c44f997f39d4f99f8a87dff0723a",
@@ -8,10 +8,10 @@
8
8
  "abi": "napi-v8",
9
9
  "napi": 8,
10
10
  "minimumNode": "20.0.0",
11
- "nodeHeaders": "24.18.0",
12
- "compiler": "Microsoft (R) C/C++ Optimizing Compiler Version 19.44.35228 for ARM64",
13
- "sourceSha256": "58b4f8c09219160fd34cc7a4984fc9a445c95ffa51b42e8cca701b4916f2eca2",
14
- "sha256": "fe86fb0240c84904b35313d9a36177d120d8a9baf63c27ae08be54872dced45e",
11
+ "nodeHeaders": "24.13.1",
12
+ "compiler": "Microsoft (R) C/C++ Optimizing Compiler Version 19.44.35222 for ARM64",
13
+ "sourceSha256": "4b12adfcdadac88141aafac5a6c2dd040b44fcc4b0c9b868c2b5b8c989f081f3",
14
+ "sha256": "74dcec518d368cf9ba6dd3de92d8bcc32e14d2142255587c2e3bec5b0cb53492",
15
15
  "signature": {
16
16
  "status": "unsigned-development"
17
17
  }
@@ -8,10 +8,10 @@
8
8
  "abi": "napi-v8",
9
9
  "napi": 8,
10
10
  "minimumNode": "20.0.0",
11
- "nodeHeaders": "24.18.0",
11
+ "nodeHeaders": "24.13.1",
12
12
  "compiler": "Microsoft (R) C/C++ Optimizing Compiler Version 19.44.35222 for x64",
13
- "sourceSha256": "58b4f8c09219160fd34cc7a4984fc9a445c95ffa51b42e8cca701b4916f2eca2",
14
- "sha256": "91d9a464823091603d784cbc3a570b8a0e514576eeb4b8fb2aabcdcbb64bccad",
13
+ "sourceSha256": "4b12adfcdadac88141aafac5a6c2dd040b44fcc4b0c9b868c2b5b8c989f081f3",
14
+ "sha256": "e01bb2a4e2a91d3d68914aeadb2c2897fa962756ed177e215e574b7f9ed43fe9",
15
15
  "signature": {
16
16
  "status": "unsigned-development"
17
17
  }
@@ -7,11 +7,12 @@ import {
7
7
  mkdirSync,
8
8
  readFileSync,
9
9
  readdirSync,
10
+ realpathSync,
10
11
  writeFileSync,
11
12
  } from "node:fs";
12
13
  import { builtinModules } from "node:module";
13
14
  import { dirname, extname, isAbsolute, join, relative, resolve } from "node:path";
14
- import { fileURLToPath, pathToFileURL } from "node:url";
15
+ import { fileURLToPath } from "node:url";
15
16
 
16
17
  const CLASSIFICATIONS = new Set([
17
18
  "xeno-owned",
@@ -718,8 +719,38 @@ async function main() {
718
719
  if (report.violations.length > 0) process.exitCode = 1;
719
720
  }
720
721
 
721
- const invokedPath = process.argv[1] ? pathToFileURL(resolve(process.argv[1])).href : undefined;
722
- if (invokedPath === import.meta.url) {
722
+ /**
723
+ * 🔴 Compare REAL paths. `resolve` normalises; it does not follow symlinks.
724
+ *
725
+ * This file SHIPS: `files` in package.json lists `ownership`, in BOTH packages that carry it. So
726
+ * the lexical form is the idiom that made `@xenosystem/agent-cli` 0.5.17 exit 0 for every command
727
+ * on Linux and macOS — and stayed shipped for a full release — sitting in code that reaches users.
728
+ *
729
+ * It is not broken today because nothing symlinks this path, which is precisely the state the
730
+ * 0.5.17 entry was in until npm made its bin a symlink.
731
+ *
732
+ * ⚠️ Resolution can throw — the invoked path may be gone, and some mounts refuse it — so failure
733
+ * falls back to the LEXICAL comparison, never to `false`. Returning false on error would
734
+ * reintroduce the silent no-op through a different door.
735
+ *
736
+ * Reference: `xeno-agent-cli/apps/xeno-agent-cli/src/cli/direct-invocation.ts`, the tested version.
737
+ *
738
+ * ⚠️ This comment is deliberately generic. The first fix wrote a repo-specific note into each
739
+ * copy and broke the byte-identical rule stated at the top of this file within minutes of applying
740
+ * it — which is the drift that rule exists to prevent.
741
+ */
742
+ function isDirectInvocation() {
743
+ const invoked = process.argv[1];
744
+ if (!invoked) return false;
745
+ const modulePath = fileURLToPath(import.meta.url);
746
+ try {
747
+ return realpathSync(resolve(invoked)) === realpathSync(modulePath);
748
+ } catch {
749
+ return resolve(invoked) === resolve(modulePath);
750
+ }
751
+ }
752
+
753
+ if (isDirectInvocation()) {
723
754
  main().catch((error) => {
724
755
  console.error(error instanceof Error ? error.message : String(error));
725
756
  process.exitCode = 1;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xenosystem/agent-cli",
3
- "version": "0.5.19",
3
+ "version": "0.5.21",
4
4
  "description": "XENO AGENT - AI-powered terminal agent CLI",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -37,7 +37,10 @@
37
37
  "dev": "tsx src/index.ts",
38
38
  "build": "tsup --config tsup.config.ts",
39
39
  "build:pty": "node native/xeno-pty/scripts/build.mjs",
40
- "test:pty:native": "node native/xeno-pty/scripts/smoke-native.mjs && node native/xeno-pty/scripts/fuzz-native.mjs --iterations 100",
40
+ "test:pty:native": "node native/xeno-pty/scripts/smoke-native.mjs && node native/xeno-pty/scripts/ctrlc-native.mjs && node native/xeno-pty/scripts/graceful-native.mjs && node native/xeno-pty/scripts/fuzz-native.mjs --iterations 100 && node native/xeno-pty/scripts/verify-prebuild-provenance.mjs",
41
+ "test:pty:ctrlc": "node native/xeno-pty/scripts/ctrlc-native.mjs",
42
+ "test:pty:graceful": "node native/xeno-pty/scripts/graceful-native.mjs",
43
+ "test:pty:provenance": "node native/xeno-pty/scripts/verify-prebuild-provenance.mjs",
41
44
  "bench:pty:native": "node native/xeno-pty/scripts/benchmark-native.mjs",
42
45
  "start": "node dist/index.js",
43
46
  "typecheck": "tsc --noEmit -p tsconfig.json",
@@ -68,8 +71,10 @@
68
71
  ],
69
72
  "license": "UNLICENSED",
70
73
  "dependencies": {
71
- "@xenosystem/agent-sdk": "0.9.8",
72
- "undici": "6.27.0"
74
+ "@xenosystem/agent-interface-client": "0.1.4",
75
+ "@xenosystem/agent-interface-contract": "0.1.4",
76
+ "@xenosystem/agent-sdk": "0.9.10",
77
+ "undici": "6.28.0"
73
78
  },
74
79
  "engines": {
75
80
  "node": ">=20.0.0"
@@ -1,18 +1,18 @@
1
- $ErrorActionPreference = "Stop"
2
-
3
- $Package = if ($env:XENO_PACKAGE) { $env:XENO_PACKAGE } else { "@xenosystem/agent-cli" }
4
- $Channel = if ($env:XENO_RELEASE_CHANNEL) { $env:XENO_RELEASE_CHANNEL } else { "latest" }
5
-
6
- if (-not (Get-Command npm -ErrorAction SilentlyContinue)) {
7
- throw "npm is required. Install Node.js first: https://nodejs.org/"
8
- }
9
-
10
- $Integrity = npm view "$Package@$Channel" dist.integrity 2>$null
11
- if ($Integrity) {
12
- Write-Host "Resolved npm integrity: $Integrity"
13
- }
14
-
15
- npm install -g "$Package@$Channel"
16
- if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
17
-
18
- xeno --version
1
+ $ErrorActionPreference = "Stop"
2
+
3
+ $Package = if ($env:XENO_PACKAGE) { $env:XENO_PACKAGE } else { "@xenosystem/agent-cli" }
4
+ $Channel = if ($env:XENO_RELEASE_CHANNEL) { $env:XENO_RELEASE_CHANNEL } else { "latest" }
5
+
6
+ if (-not (Get-Command npm -ErrorAction SilentlyContinue)) {
7
+ throw "npm is required. Install Node.js first: https://nodejs.org/"
8
+ }
9
+
10
+ $Integrity = npm view "$Package@$Channel" dist.integrity 2>$null
11
+ if ($Integrity) {
12
+ Write-Host "Resolved npm integrity: $Integrity"
13
+ }
14
+
15
+ npm install -g "$Package@$Channel"
16
+ if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
17
+
18
+ xeno --version