promotional bannermobile promotional banner

NexusAI

Async AI bridge for Paper via PlaceholderAPI — unique pools, TTL cache, prewarm
Back to Files

NexusAI 1.1.2

File nameNexusAI-1.1.2.jar
Uploader
NearestStepNearestStep
Uploaded
Oct 6, 2026
Downloads
9
Size
3.7 MB
File ID
9080076
Type
R
Release
Supported game versions
  • 26.2
  • 26.1.2
  • 26.1.1
  • 26.1
  • 1.21.11
  • 1.21.10
  • 1.21.9
  • 1.21.8
  • 1.21.7
  • 1.21.6
  • 1.21.5
  • 1.21.4
  • 1.21.3
  • 1.21.1
  • 1.21
  • 1.20.6

What's new

Bugfix release: masking of keys already stored in dialogue-memory.yml, protection of an unreadable dialogue-memory.yml, /nai reload with dialogue.persist-memory and clearer busy lines in the console. Everyone on 1.1.1 should update; there are no new config keys and config.yml stays at config-version: 2.

Upgrading

  • Replace NexusAI-1.1.1.jar with NexusAI-1.1.2.jar and restart.
  • No config changes: 1.1.2 adds no keys, so there is nothing to append or edit, and config-version stays 2.
  • On the first start, a dialogue-memory.yml that still holds an API key is masked and written back once, owner-only (0600) on a POSIX file system, and the log shows Masked API keys in dialogue-memory.yml. A file without a key is not rewritten. You no longer need to delete the file to remove a key written by 1.1.1 or earlier.
  • To roll back: stop the server, put NexusAI-1.1.1.jar back and start it. config.yml can stay as it is; text masked in dialogue-memory.yml stays masked.

Keys in dialogue memory and logs

  • Fix: on startup, summaries and transcript lines already stored in dialogue-memory.yml are masked and written back when they contain a configured API key or a key shaped like an OpenAI, Groq or Google key. The summary and the lines stay. This also happens when dialogue.persist-memory is false.
  • A player line that contains one of these keys is masked when it is stored.
  • A token shaped like an OpenAI (sk-…), Groq (gsk_…) or Google (AIza…) key is masked even when it is not in the config: in NPC replies, placeholder answers, /nai test, actions.log and the server log. It must have that vendor's length, a digit and both letter cases, and not be a run of ordinary words, so a lowercase slug such as sk-learn-pipeline-v2-2024-final is left as written. A key that is all lowercase or all uppercase, such as a hex key, is masked only when it is configured.

Unreadable dialogue-memory.yml

  • Fix: a dialogue-memory.yml that cannot be read is not loaded and is no longer overwritten by the 30-second save, with summaries on or off, and also when dialogue.persist-memory is false.
  • The broken text is copied to dialogue-memory.yml.corrupt (or dialogue-memory.yml.corrupt.<time> when that name is taken) with keys masked and owner-only permissions. The copy is renamed into place only after it is fully written, so an interrupted copy does not leave a partial file. A file that is not valid UTF-8 is copied as its original bytes, with ASCII keys masked. No .bak of the broken file is written.
  • With dialogue.persist-memory: true, new lines go into a new dialogue-memory.yml once the broken file has been moved aside. If the copy cannot be written, the original stays, is restricted to owner-only permissions and is not overwritten. The log names the copy, or says why it could not be written, and asks you to repair or replace dialogue-memory.yml and restart.
  • Temp files named dialogue-memory.yml.<id>.tmp, left behind when a save was interrupted, are removed on startup.

Reload and persist-memory

  • Fix: /nai reload keeps the running dialogue. The first time dialogue.persist-memory changes from false to true, dialogue-memory.yml is loaded before any save, so the file is not replaced by the in-memory dialogue. No save writes the file until that load has finished.
  • For a character that is in the file, the lines on disk replace the lines held in memory. A character that is only in memory stays. Later reloads do not read the file again.
  • A hand edit of dialogue-memory.yml while the server is running is overwritten by the next save, as in 1.1.1. Edit the file while the server is stopped.

Console busy lines

  • When /nai talk cannot use the fallback model because its daily request limit, or its remaining request or token budget, is exhausted, the console line names that reason for that provider. An HTTP status from another provider is still named for the provider that returned it.
  • When every queue row is at its daily cap, the console line says the queue is exhausted, at most once every 30 seconds. The player still sees talk.busy, and the request body is unchanged.
  • The daily-cap warning now says at least 80% of the daily limit.

Known issues

  • The player-input boundary and the reply filter reduce prompt-injection risk. They do not eliminate it.
  • An HTTP 429 on one model pauses its whole provider. Put fallback-model on a different provider so /nai talk can still answer.
  • If the server stops while the first load of dialogue-memory.yml after /nai reload turned dialogue.persist-memory on is still running (more than about 5 seconds, for example with a very large file), lines that exist only in memory are not saved. The file on disk stays as it was.
  • If that first load fails and the broken file cannot be copied to .corrupt, saves are skipped until the next restart. The only warning is the one logged at the reload; the file on disk stays as it was.
  • The other known issues listed for 1.1.0 are unchanged.

Compatibility

  • Paper and Purpur 1.20.6–26.2; Folia is not supported; Java 21 or newer
  • PlaceholderAPI 2.11.6+ (soft-depend)
  • Tested with PlaceholderAPI 2.12.3 on Paper 1.20.6-151, 1.21.1-133, 1.21.4-232, 1.21.8-60 and 26.2-129, and on Purpur 26.2-2633 (Java 21 on 1.20.6–1.21.8, Java 25 on 26.2).
  • Paper and Purpur 26.3, Spigot and CraftBukkit are not supported.

Download

NexusAI-1.1.2.jar, SHA-256 dc1bffa17eebea56da10872c0a489e455f9f252c04faafa491432516d6743463

Full history: CHANGELOG.md

This mod has no additional files