@8gi-foundation/8gent-code 0.20.13 → 0.20.14

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/CHANGELOG.md CHANGED
@@ -9,6 +9,14 @@ versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [0.20.14] - 2026-10-22
13
+
14
+ ### Changed
15
+ - Android Termux and proot install path, Node version commands, signal exit ([#4747](https://github.com/8gi-foundation/8gent-code/pull/4747))
16
+
17
+ ### Fixed
18
+ - tui: built-in slash commands run before the skill scan loads and after it fails ([#4745](https://github.com/8gi-foundation/8gent-code/pull/4745))
19
+
12
20
  ## [0.20.13] - 2026-10-22
13
21
 
14
22
  ### Fixed
package/README.md CHANGED
@@ -21,7 +21,7 @@
21
21
 
22
22
  <p align="center">
23
23
  <a href="https://www.apache.org/licenses/LICENSE-2.0"><img src="https://img.shields.io/badge/License-Apache_2.0-E8610A?style=for-the-badge&labelColor=1A1612" alt="Apache 2.0 License" /></a>
24
- <a href="https://8gent.dev"><img src="https://img.shields.io/badge/version-0.20.13-2D8A56?style=for-the-badge&labelColor=1A1612" alt="v0.20.13" /></a>
24
+ <a href="https://8gent.dev"><img src="https://img.shields.io/badge/version-0.20.14-2D8A56?style=for-the-badge&labelColor=1A1612" alt="v0.20.14" /></a>
25
25
  <a href="https://eight-vessel.fly.dev"><img src="https://img.shields.io/badge/daemon-Fly.io_Amsterdam-E8610A?style=for-the-badge&labelColor=1A1612" alt="Daemon" /></a>
26
26
  </p>
27
27
 
@@ -159,7 +159,7 @@ That's it. 8gent uses an adaptive provider router with 16 model providers (plus
159
159
 
160
160
  **No model yet?** On a machine with no local model and no key, the chat area shows a short card with both ways to connect one: install Ollama and run `ollama pull qwen3.5`, or run `8gent keys` to add `OPENROUTER_API_KEY` to `~/.8gent/keys.env` and then use `/provider openrouter` with `/model auto:free`. `/provider` lists every option. The card goes away once a model is reachable.
161
161
 
162
- **Pick your platform:** [macOS](docs/install/macos.md), [Windows](docs/install/windows.md), [Linux](docs/install/linux.md). Every provider, flag and environment variable is in [docs/install/providers.md](docs/install/providers.md). One-line binary installers (no Bun or Node needed) are in [docs/user/install.md](docs/user/install.md).
162
+ **Pick your platform:** [macOS](docs/install/macos.md), [Windows](docs/install/windows.md), [Linux](docs/install/linux.md), [Android (Termux, kali and arch proots)](docs/install/android-termux.md). Every provider, flag and environment variable is in [docs/install/providers.md](docs/install/providers.md). One-line binary installers (no Bun or Node needed) are in [docs/user/install.md](docs/user/install.md).
163
163
 
164
164
  **Ollama is optional.** To run on llama.cpp's `llama-server` instead, set `EIGHT_LOCAL_SERVER=llama-server` and start with `8gent --provider=llama-server`. 8gent then never contacts Ollama. See [docs/guides/llama-server.md](docs/guides/llama-server.md).
165
165
 
@@ -222,9 +222,9 @@ tar xzf 8gent-<version>-linux-amd64.tar.gz && sudo mv 8gent-*/bin/8gent /usr/loc
222
222
 
223
223
  > Binaries are code-signed only on releases where the maintainer's certificates are configured (see [SIGNING.md](SIGNING.md)). Unsigned downloads run fine but may prompt Gatekeeper (macOS) or SmartScreen (Windows) - allow them through, or build your own with `bun run build:binaries`.
224
224
 
225
- ### npm (old build, 0.17.0)
225
+ ### npm
226
226
 
227
- The npm package is behind GitHub. `npm install -g @8gi-foundation/8gent-code` installs 0.17.0 (published 11 May 2026), not the current release, and it needs [Bun](https://bun.sh). Use a one-line installer above until npm is republished.
227
+ The npm package tracks the GitHub release: `npm install -g @8gi-foundation/8gent-code` installs the current version. It runs on Bun, or on Node 22.5 or newer when Bun is not installed. On Android (Termux, kali or arch proot) follow [docs/install/android-termux.md](docs/install/android-termux.md).
228
228
 
229
229
  ### Build binaries from source
230
230
 
package/bin/8gent-run.js CHANGED
@@ -88,4 +88,11 @@ if (result.error && result.error.code === "ENOENT") {
88
88
  );
89
89
  }
90
90
 
91
+ // Killed by a signal (status null, e.g. SIGILL in a proot): say so and fail, never a silent 0.
92
+ if (result.status === null && result.signal) {
93
+ console.error(
94
+ `8gent: the runtime was killed by ${result.signal}.${wantNode ? "" : " Try EIGHT_RUNTIME=node 8gent to use the Node build."}`,
95
+ );
96
+ process.exit(1);
97
+ }
91
98
  process.exit(result.status ?? 0);
@@ -5,5 +5,10 @@ export function nodeTooOld(version) {
5
5
  }
6
6
 
7
7
  export function tooOldMessage(version) {
8
- return `8gent needs Node 22.5 or newer (found ${version}). Install Node 22 or Bun.`;
8
+ return [
9
+ `8gent needs Node 22.5 or newer (found ${version}). Install Node 22 or Bun.`,
10
+ " Debian / Kali: curl -fsSL https://deb.nodesource.com/setup_22.x -o /tmp/nodesource.sh && bash /tmp/nodesource.sh && apt-get install -y nodejs",
11
+ " Arch: pacman -Syu --noconfirm nodejs npm",
12
+ " Any Linux: install nvm (https://github.com/nvm-sh/nvm), then: nvm install 22",
13
+ ].join("\n");
9
14
  }
package/dist/cli.js CHANGED
@@ -597524,7 +597524,7 @@ function nodeExecPath(execPath = process.execPath, env = process.env, exists = e
597524
597524
 
597525
597525
  // bin/8gent.ts
597526
597526
  refuseIfNested();
597527
- var VERSION5 = "0.20.13";
597527
+ var VERSION5 = "0.20.14";
597528
597528
  var RELAUNCH_EXIT_CODE = 75;
597529
597529
  var MODULE_DIR = path158.dirname(fileURLToPath7(import.meta.url));
597530
597530
  var EXEC_DIR = path158.dirname(process.execPath);
package/dist/node/cli.js CHANGED
@@ -617700,7 +617700,7 @@ function nodeExecPath(execPath = process.execPath, env = process.env, exists = e
617700
617700
 
617701
617701
  // bin/8gent.ts
617702
617702
  refuseIfNested();
617703
- var VERSION5 = "0.20.13";
617703
+ var VERSION5 = "0.20.14";
617704
617704
  var RELAUNCH_EXIT_CODE = 75;
617705
617705
  var MODULE_DIR = path158.dirname(fileURLToPath8(import.meta.url));
617706
617706
  var EXEC_DIR = path158.dirname(process.execPath);
package/dist/node/tui.js CHANGED
@@ -33286,7 +33286,7 @@ var init_permissions = __esm(() => {
33286
33286
  var require_package = __commonJS(function(exports2, module2) {
33287
33287
  module2.exports = {
33288
33288
  name: "@8gi-foundation/8gent-code",
33289
- version: "0.20.13",
33289
+ version: "0.20.14",
33290
33290
  private: false,
33291
33291
  engines: {
33292
33292
  node: ">=22.5"
@@ -620694,6 +620694,9 @@ function safeLoadTemplates() {
620694
620694
  function getBuiltInSlashCommands() {
620695
620695
  return BUILT_IN_SLASH_COMMANDS;
620696
620696
  }
620697
+ function getBuiltInSlashRegistry() {
620698
+ return mergeSlashEntries(buildBuiltInEntries(), [], []);
620699
+ }
620697
620700
  async function getSlashRegistry() {
620698
620701
  return mergeSlashEntries(buildBuiltInEntries(), await buildSkillEntries(), buildPromptEntries());
620699
620702
  }
@@ -621149,8 +621152,9 @@ function CommandInput({
621149
621152
  const [historyIndex, setHistoryIndex] = import_react55.useState(-1);
621150
621153
  const draftRef = import_react55.useRef("");
621151
621154
  const [showSlashHelp, setShowSlashHelp] = import_react55.useState(false);
621152
- const [slashRegistryEntries, setSlashRegistryEntries] = import_react55.useState([]);
621153
- const [slashByToken, setSlashByToken] = import_react55.useState(new Map);
621155
+ const [initialRegistry] = import_react55.useState(getBuiltInSlashRegistry);
621156
+ const [slashRegistryEntries, setSlashRegistryEntries] = import_react55.useState(initialRegistry.entries);
621157
+ const [slashByToken, setSlashByToken] = import_react55.useState(initialRegistry.byToken);
621154
621158
  const builtInSlashGhosts = import_react55.useMemo(() => buildBuiltInSlashGhostSuggestions(), []);
621155
621159
  const extraSlashContext = import_react55.useMemo(() => [
621156
621160
  ...builtInSlashGhosts,
@@ -621183,8 +621187,8 @@ function CommandInput({
621183
621187
  }
621184
621188
  } catch {
621185
621189
  if (!cancelled) {
621186
- setSlashRegistryEntries([]);
621187
- setSlashByToken(new Map);
621190
+ setSlashRegistryEntries(initialRegistry.entries);
621191
+ setSlashByToken(initialRegistry.byToken);
621188
621192
  }
621189
621193
  }
621190
621194
  })();
package/dist/tui.js CHANGED
@@ -29981,7 +29981,7 @@ var init_permissions = __esm(() => {
29981
29981
  var require_package = __commonJS(function(exports2, module2) {
29982
29982
  module2.exports = {
29983
29983
  name: "@8gi-foundation/8gent-code",
29984
- version: "0.20.13",
29984
+ version: "0.20.14",
29985
29985
  private: false,
29986
29986
  engines: {
29987
29987
  node: ">=22.5"
@@ -597659,6 +597659,9 @@ function safeLoadTemplates() {
597659
597659
  function getBuiltInSlashCommands() {
597660
597660
  return BUILT_IN_SLASH_COMMANDS;
597661
597661
  }
597662
+ function getBuiltInSlashRegistry() {
597663
+ return mergeSlashEntries(buildBuiltInEntries(), [], []);
597664
+ }
597662
597665
  async function getSlashRegistry() {
597663
597666
  return mergeSlashEntries(buildBuiltInEntries(), await buildSkillEntries(), buildPromptEntries());
597664
597667
  }
@@ -598114,8 +598117,9 @@ function CommandInput({
598114
598117
  const [historyIndex, setHistoryIndex] = import_react55.useState(-1);
598115
598118
  const draftRef = import_react55.useRef("");
598116
598119
  const [showSlashHelp, setShowSlashHelp] = import_react55.useState(false);
598117
- const [slashRegistryEntries, setSlashRegistryEntries] = import_react55.useState([]);
598118
- const [slashByToken, setSlashByToken] = import_react55.useState(new Map);
598120
+ const [initialRegistry] = import_react55.useState(getBuiltInSlashRegistry);
598121
+ const [slashRegistryEntries, setSlashRegistryEntries] = import_react55.useState(initialRegistry.entries);
598122
+ const [slashByToken, setSlashByToken] = import_react55.useState(initialRegistry.byToken);
598119
598123
  const builtInSlashGhosts = import_react55.useMemo(() => buildBuiltInSlashGhostSuggestions(), []);
598120
598124
  const extraSlashContext = import_react55.useMemo(() => [
598121
598125
  ...builtInSlashGhosts,
@@ -598148,8 +598152,8 @@ function CommandInput({
598148
598152
  }
598149
598153
  } catch {
598150
598154
  if (!cancelled) {
598151
- setSlashRegistryEntries([]);
598152
- setSlashByToken(new Map);
598155
+ setSlashRegistryEntries(initialRegistry.entries);
598156
+ setSlashByToken(initialRegistry.byToken);
598153
598157
  }
598154
598158
  }
598155
598159
  })();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@8gi-foundation/8gent-code",
3
- "version": "0.20.13",
3
+ "version": "0.20.14",
4
4
  "private": false,
5
5
  "engines": {
6
6
  "node": ">=22.5"