Skip to content

Releases: FanyinLiu/Nexus

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 03 Jul 16:01
Immutable release. Only release title and notes can be modified.
d99ba0b

Nexus v0.4.1 — Companion UI, Settings, and Reliability Hardening

v0.4.1 is the first stable follow-up to the v0.4 desktop companion awareness
foundation. It does not turn Nexus into an autonomous work agent and it does not
start the v0.5 desktop-pet window-control line. This release focuses on making
the companion surface, Settings, release checks, and privacy boundaries easier
to trust before the next product layer ships.

Highlights

  • Companion UI source organization — the panel, composer, message, dial,
    collapsed, rhythm, motion, and visual-lock styles are split into focused
    source files so the companion surface can keep evolving without turning the
    main stylesheet into one large edit point.
  • Settings surface hardening — Settings gets clearer source structure,
    source-only surface audits, and an explicit options architecture document so
    the Settings UI can follow the chat surface without hiding too much behavior
    in one component.
  • Settings drawer performance guard — the Settings drawer entry stays lazy.
    Styles load as a dedicated CSS chunk and the lazy JS entry remains tiny, so
    opening Settings does not reintroduce raw CSS string injection or push large
    Settings rules onto the startup path.
  • Image4 companion field guardrails — Image4 panel state, signal rendering,
    activity labels, composer state, visual rhythm, and color boundaries now have
    source-level contracts and tests.
  • Custom companion-name wake word sync — companion-name changes now have a
    dedicated wake-word synchronization layer so future voice wake behavior can
    track user naming choices without importing app-level code into feature
    modules.
  • Runtime privacy and redaction hardening — desktop context, message
    privacy, vault, support logs, runtime log sanitization, memory-vector support
    buffers, and network-error redaction are covered by stricter source-only
    audits.
  • Release upload prepdocs/GITHUB_UPLOAD_PREP.md records the intended PR
    framing, review order, performance baseline, and verification commands for
    this large v0.4.1 review branch.

What Changed

UI and Settings

  • Split the companion panel CSS into focused modules under
    src/app/styles/panel-companion*.css.
  • Added the Image4 companion field, rhythm grid, signal, activity label, chat
    preview, companion state, and composer state modules.
  • Added Settings surface reference docs, options architecture docs, and source
    audits for Settings, chat, composer, forms, focus management, streaming, and
    agent-activity surfaces.
  • Kept local UI QA screenshots and metrics out of the repository through the
    docs/ui-qa/ ignore rule; source-backed review docs stay committed instead.

Performance

  • Changed src/app/settingsDrawerEntry.ts so Settings styles are imported as
    normal lazy CSS resources rather than bundled as raw CSS strings in JavaScript.
  • Expanded scripts/performance-baseline.mjs with separate budgets for:
    • total CSS
    • largest CSS chunk
    • initial CSS chunk
    • Settings drawer lazy CSS
    • Settings drawer lazy JS entry
  • Added failure checks when the Settings lazy CSS or lazy JS entry disappears,
    because that usually means Settings styles moved back into the startup path.
  • Updated docs/PACKAGE_STARTUP_OPTIMIZATION.md with the new baseline:
    Settings drawer lazy CSS at about 554 KB and Settings drawer lazy JS entry at
    about 0.1 KB.

Companion Awareness and Voice Boundaries

  • Kept desktop companion awareness focused on coarse, privacy-bounded summaries.
  • Preserved the v0.4 rule that time language should feel approximate and
    companion-like, not stopwatch-like.
  • Added or tightened tests for coarse time labels, localized exact-time leak
    detection, check-in policy behavior, summary storage, and transparency view
    models.
  • Added a companion wake-word synchronization layer for custom companion names.

Privacy, Security, and Release Checks

  • Added runtime log sanitization and memory-vector support log buffering with
    redaction-focused tests.
  • Split error-redaction audit phrases and rules into focused source files.
  • Extended message privacy, desktop context privacy, vault security, and network
    error-redaction audits.
  • Added or expanded source-only release, storage, IPC, architecture, and
    boundary audit fixture tests.
  • Updated verify:pr so the new UI, privacy, performance, and release gates run
    together.

Still Out of Scope

v0.4.1 does not include:

  • external proactive notifications
  • message sending
  • tool execution without explicit user action
  • productivity scoring
  • raw desktop activity timelines
  • new sensing sources
  • pet mouse-following, typing-following, or desktop-window control
  • a new public release process beyond the v0.4.1 tag and GitHub Release

Those remain later v0.4.x or v0.5 work.

Distribution Notes

Until Nexus has signed installers and notarized macOS distribution, manual
installs may still show platform trust prompts:

  • macOS may show Gatekeeper or quarantine warnings. If you intentionally
    downloaded Nexus from the official GitHub Release, remove quarantine only for
    that downloaded app bundle.
  • Windows may show SmartScreen warnings because the installer is not yet backed
    by broad code-signing reputation.

Do not download installers from mirrors or reposted archives.

Verification

The local upload-prep checks for this branch passed before promotion to the
v0.4.1 candidate:

git diff --check
npm run source-size:audit
npm run performance:baseline
npm run distribution:audit
npm run verify:pr
npm audit --omit=dev

Before publishing the final GitHub Release, run the release gates on the final
pushed commit:

npm run verify:release
npm run prerelease-check -- v0.4.1
npm run package:dir:smoke

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 21 Jun 14:38
Immutable release. Only release title and notes can be modified.

Nexus v0.4.0 — Desktop companion awareness foundation

Stable. This release starts the v0.4 desktop companion awareness line with
a quiet observation foundation. It keeps the companion continuity path
privacy-bounded and deliberately does not expand into proactive check-ins or
v0.5 desktop pet behavior.

What changes for users

Nexus can keep quiet companionship continuity

When desktop context awareness is enabled, Nexus is open, and the user is
active elsewhere instead of directly chatting with Nexus, Nexus can keep a
short-lived companion awareness summary.

That summary is deliberately small:

  • a broad activity class
  • a rough elapsed-time bucket
  • whether the user appears focused
  • whether Nexus should stay silent

The purpose is companionship continuity. Nexus should not behave like a
stopwatch, productivity monitor, screen recorder, or autonomous work agent.

The summary is session-bound

The recent companion summary is scoped to the current app session and renderer
lifecycle. Nexus drops the stored summary if it belongs to another session,
was written by a previous renderer lifecycle, predates the current session, is
older than the hard 24-hour safety cap, appears to come from the future, or
fails schema validation.

This prevents a previous desktop activity stretch from being replayed later as
current context.

Settings keeps the privacy boundary visible

Memory settings explains:

  • what desktop companion awareness can observe
  • what is stored locally
  • what reaches the model
  • how to pause companion awareness
  • how to clear the recent companion summary

Pausing companion awareness, disabling context awareness, or clearing the recent
summary removes the local recent summary.

Privacy boundary

Allowed:

  • sanitized companion summaries
  • broad activity classes
  • rough time buckets
  • short-lived recent summary metadata

Not allowed:

  • raw screenshots
  • full OCR dumps
  • full clipboard contents
  • private message bodies
  • private file paths
  • exact timers or timestamp trails
  • hidden activity logs
  • productivity scoring

Out of scope

This stable release does not include:

  • proactive check-in expansion
  • new desktop sensing sources
  • mouse-following, typing-following, or desktop pet window control
  • productivity dashboards or raw activity timelines
  • automatic mouse or keyboard control
  • file reading, app opening, message sending, or settings changes without
    explicit user action

Distribution notes

Until Nexus has signed installers and notarized macOS distribution, local
manual installs may still show platform trust prompts:

  • macOS may show Gatekeeper or quarantine warnings. If you intentionally
    downloaded the app from the official GitHub Release, remove quarantine only
    for that downloaded app bundle.
  • Windows may show SmartScreen warnings because the installer is not yet backed
    by broad code-signing reputation.

Do not download installers from mirrors or reposted archives.

Validation focus

This stable release is prepared against:

  • npm run verify:release
  • npm run package:dir:smoke
  • npm run desktop-context-privacy:audit
  • npm run message-privacy:audit
  • npm run error-redaction:audit
  • npm run ipc:audit
  • npm run distribution:audit
  • npm run prerelease-check -- v0.4.0

The stable handoff is
Nexus v0.4.0 Stable Release Checklist.

v0.4.0-beta.1

v0.4.0-beta.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 21 Jun 10:49
Immutable release. Only release title and notes can be modified.

Nexus v0.4.0-beta.1 — Desktop companion awareness begins.

Beta. This is the first v0.4 desktop companion awareness beta. It starts
the quiet loop that lets Nexus understand that time passes after the user
opens Nexus and then works elsewhere. It is for validation before a stable
v0.4 release.

What changes for users

Nexus can stay quietly aware while open

When desktop context awareness is enabled and Nexus is open but not being used
directly, Nexus can form a short-lived companion summary:

  • whether the user has not interacted with Nexus recently
  • a broad activity class such as coding, reading, browsing, idle, or switching
  • a rough elapsed-time bucket such as "a while" or "about half an hour"
  • whether Nexus should stay quiet because the user appears focused

The point is companionship continuity, not surveillance or productivity
scoring.

Time language is deliberately rough

v0.4 starts with companion-like time wording:

  • just started
  • a while
  • about half an hour
  • about an hour
  • two hours or more

Nexus should not speak like a stopwatch. Exact minute and second durations stay
out of companion copy.

Check-ins are policy-gated

The first check-in policy is intentionally conservative. It can reason about:

  • long continuous activity
  • frequent switching
  • long idle after activity
  • returning to Nexus after being away

It also respects pause, cooldowns, focus, and quiet hours. The beta should help
validate whether the timing feels caring, too early, too late, or too frequent.

Settings explains the privacy boundary

Memory settings now includes desktop companion awareness transparency:

  • what Nexus can observe
  • what it stores
  • what reaches the model
  • how to pause awareness
  • how to clear the recent companion summary

The visible summary stays coarse and does not show raw desktop content.
Pausing companion awareness or turning desktop context awareness off clears the
recent local companion summary so old awareness state does not linger in
Settings.

Privacy boundary

Allowed:

  • sanitized companion summaries
  • broad activity classes
  • rough time buckets
  • short-lived recent summary metadata

Not allowed:

  • raw screenshots
  • full OCR dumps
  • full clipboard contents
  • private message bodies
  • private file paths
  • exact second-level timers
  • hidden activity logs

What stays out of this beta

  • No v0.5 desktop pet mouse-following or typing reactions yet.
  • No automatic mouse or keyboard control.
  • No file reading or message sending without explicit user action.
  • No productivity dashboard or raw activity timeline.
  • No new autonomous work-agent behavior.

Beta validation focus

Please use the GitHub Beta Validation Report template and include:

  • whether Nexus was open but unused
  • whether you were actively chatting with Nexus
  • what broad desktop activity was happening
  • whether the time wording felt natural
  • whether any check-in felt caring, cold, nagging, or monitoring-like
  • whether pause and clear controls were easy to find
  • whether OS permissions were confusing

Do not attach raw screenshots, clipboard contents, private window titles,
private message text, or private file paths unless they are safe test fixtures.

Known issues

  • The beta still needs real-world validation across macOS, Windows, and Linux
    permission flows.
  • Copy may need tuning per locale after beta feedback.
  • v0.5 desktop pet behavior is intentionally deferred until this awareness loop
    is stable and trusted.

v0.3.5

Choose a tag to compare

@github-actions github-actions released this 20 Jun 01:51
Immutable release. Only release title and notes can be modified.
61003cf

Nexus v0.3.5 — Memory is no longer a black box

The memorable upgrade: Nexus can now show which memories shaped a reply,
then take you back to those memory records so you can inspect, pause, edit, or
delete them.

This release keeps Nexus pointed at companionship, not autonomous work
execution. The trust work around first-run setup, IPC, release posture, and
SQLite rehearsal exists to make memory local, visible, reversible, and under
the user's control.

What changes for users

Memory is no longer hidden background magic

This is the companion-memory headline for v0.3.5. Existing memory still lives in
renderer localStorage by default, and nothing is deleted.

  • Assistant replies can show a small memory-source hint when memory shaped the
    response.
  • Expanding that hint resolves the stored source IDs against the current memory
    state, marks missing or paused sources, and opens Settings directly to Memory.
  • Opening Memory from a reply highlights the relevant memories and diary
    fragments, including older diary entries outside the recent preview.
  • The Memory settings page now shows whether recall and learning are active,
    how many long-term memories and daily fragments are available, and which
    storage boundary is still authoritative.
  • Users can pause all memory or pause individual long-term memories without
    deleting them.
  • A new content-free memory dry-run inspects long-term, legacy, and daily memory
    localStorage shapes before any SQLite memory migration is attempted.

First conversation is easier to reach

  • The first-run model setup now catches common Ollama, DeepSeek, and
    OpenAI-compatible mistakes before a real request is made.
  • Safe repairs can fill built-in Base URL and model defaults without touching
    API keys.
  • The final onboarding step shows whether the current setup is ready for the
    "first conversation within 5 minutes" target.
  • Settings can export a local first-run QA report with launch checks and timing
    evidence, but no chat content, model output, API keys, or provider secrets.

Release trust is more explicit

  • Local release audits now check macOS, Windows, and Linux signing/update
    assumptions from repo config and docs.
  • Unsigned macOS builds use a manual-download update posture until Developer ID
    signing and notarization are enabled.
  • SQLite availability is smoke-tested before release-style packaging.

Chat memory is moving carefully, not suddenly

This is the companion-memory groundwork for v1.0. Existing chat history still
lives in renderer localStorage by default, and nothing is deleted.

  • A hidden dry-run can inspect local chat storage without sending message text
    over IPC.
  • A hidden, explicitly confirmed migration path can write normalized chat
    sessions to main-process SQLite.
  • A hidden runtime mirror can copy the current live chat session into SQLite
    while localStorage remains authoritative.
  • A hidden comparison preview can compare local chat-session metadata with
    SQLite metadata and show aggregate differences.
  • Rollback deletes only the SQLite chat-session records written by this path;
    localStorage chat history remains untouched.

Under the hood

  • Added source-only IPC contract auditing and brought the current preload/main
    handler surface to zero warnings.
  • Hardened high-risk IPC families with schema validation, trusted-sender checks,
    metadata-only audit records, and confirmation/permission hints.
  • Added the main-process local-data foundation under
    userData/local-data/nexus.sqlite using Electron/Node's built-in
    node:sqlite.
  • Added metadata-only local-data status, onboarding mirror, chat migration
    status, chat runtime mirror, and chat comparison preview paths.
  • Added content-free memory storage dry-run reports for future long-term memory
    SQLite migration design.
  • Kept renderer access to plaintext secrets blocked through the safeStorage
    vault/ref pattern.

Product boundary

Nexus is still a desktop companion. This release does not add a Codex-style
agent, task planner, autonomous executor, or background work system. The storage
and audit work exists so future memory feels local, visible, reversible, and
under the user's control.

Known issues

  • macOS packages are still unsigned in local smoke builds. Gatekeeper may keep
    the quarantine bit, so first launch may require the usual right-click -> Open
    flow or, for advanced users, removing quarantine with xattr.
  • Windows signing gates are prepared but final installer trust still depends on
    a real signing certificate; unsigned builds may show SmartScreen warnings.
  • node:sqlite still emits an ExperimentalWarning in this Node/Electron line.
  • Optional KWS/SenseVoice models may be missing in local smoke environments.
  • Torch-backed Python sidecars remain disabled when torch is not installed.
  • Desktop message awareness remains macOS-first; Windows support is still not
    equivalent.

Notes & limitations

  • This is a stable release candidate for manual GitHub release publishing.
  • Signed macOS and Windows release gates are prepared but still require real
    signing credentials before trusted auto-update can be enabled.

v0.3.4

Choose a tag to compare

@github-actions github-actions released this 18 Jun 22:46
Immutable release. Only release title and notes can be modified.

Nexus v0.3.4

Stable — v0.3.4 beta line promoted for general downloads. This release
promotes the tested v0.3.4-beta.4 code line to the stable update channel.
It includes the v0.3.4 beta improvements around message awareness, companion
emotion behaviour, the default Live2D face, Telegram/Discord bridge polish,
local TTS fallback, and stage-direction rendering.

What changes for users

Desktop message awareness and bridge polish

  • macOS desktop message awareness can surface incoming communication context
    from Notification Center after the user grants the required system
    permission. By default, Nexus treats this as gentle context and keeps the
    interaction bounded.
  • Telegram and Discord bridge work from the beta line is included, including
    the paired authorization flow and reply path improvements from v0.3.4-beta.1
    and v0.3.4-beta.2.

Companion behaviour

  • The companion emotion loop from v0.3.4-beta.3 is included: recent user
    affect and real runtime events can shape tone and whether Nexus chooses a
    gentle check-in or stays quiet.
  • 星绘 is the default Live2D face for fresh installs. Existing pet/avatar choices
    are preserved.
  • Missed desktop-message context can be mentioned gently in a later
    conversation, within cooldown and quiet-time limits.

Reply rendering and voice

  • Short parenthetical stage directions are handled by shape, not by a fragile
    keyword list. Recognized expressions drive the avatar and are not shown or
    spoken; unrecognized asides render as quiet script notes instead of leaking
    as broken-looking chat text.
  • Streaming speech also skips these asides, so Nexus does not read stage
    directions aloud mid-response.
  • Local TTS support from the beta line remains available, with cloud TTS still
    required for some voice-note formats.

Validation

  • This stable promotion is based on the v0.3.4-beta.4 code line.
  • Local release verification should pass before tagging:
    npm run verify:release and npm run prerelease-check -- v0.3.4 --quick.
  • No additional real-machine macOS Notification Center, Telegram, or Discord
    live validation was added after v0.3.4-beta.4. Treat those integrations as
    useful but still environment-sensitive.

Known issues

  • macOS desktop message awareness depends on Full Disk Access and Notification
    Center database readability. Permission prompts and OS privacy behaviour can
    vary by machine.
  • Telegram voice-note replies still need a cloud TTS provider for mp3/ogg/m4a
    output. Local TTS outputs WAV.
  • Discord inbound voice transcription is not included.
  • Windows message awareness remains adapter/script based rather than a native
    Notification Center equivalent.
  • Emotion behaviour is intentionally subtle and does not expose a dashboard.

Notes and limitations

  • macOS unsigned build. If Gatekeeper blocks first launch, right-click the
    app and choose Open. If quarantine metadata remains attached after manual
    download, remove it with xattr -dr com.apple.quarantine /Applications/Nexus.app.
  • Windows unsigned build. SmartScreen may warn because the installer is not
    signed. Use More info -> Run anyway only if you downloaded the installer from
    the official GitHub release.
  • Stable users on earlier releases can receive this through the stable update
    channel after the GitHub release is published.

v0.3.4-beta.4

v0.3.4-beta.4 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 13 Jun 08:34
Immutable release. Only release title and notes can be modified.

Nexus v0.3.4-beta.4

Beta — her little expressions reach her face, not the chat text. Fourth beta of the v0.3.4 line, on top of v0.3.4-beta.3. The companion narrates small expressions in passing — 「(眼睛亮了)」, 「(歪头)」 — meant to animate her avatar, not to be read as words. Occasionally one of those slipped into the visible reply as raw text. This release makes those stage directions behave consistently by SHAPE, not by a hand-maintained list, so the ones we recognise drive her face and the novel ones she invents read as quiet script asides instead of looking like leaked text — and she never speaks any of them aloud. As a pre-release it is for manual validation only; stable users are not auto-upgraded.

What changes for users

Her expressions land on her, not in the text

She often adds a small parenthetical to colour a reply — her eyes lighting up, a tilt of the head. Those are stage directions for her avatar, not lines to be shown or spoken. Sometimes one leaked into the chat as raw text and looked like a glitch.

  • Recognised expressions are just expressions. When she writes something we understand — 「(眼睛亮了)」, 「(微笑)」, 「(歪头)」 — it now drives her avatar and is kept out of both the text and the voice, exactly as before. You feel it on her face, you don't read it.
  • Novel asides read as intentional, never as a leak. When she invents an aside we don't have a face for — a playful 「(突然蹦出一只企鹅)」 — it stays in the reply but is rendered as a quiet, italic script note, clearly an aside rather than a stray line. So nothing she does looks broken, even the things we've never seen.
  • She never speaks an aside. Whether recognised or not, a parenthetical aside is no longer read aloud — including mid-sentence while the voice is streaming.
  • Notes still show normally. A genuine parenthetical with a colon — 「(注:周一照常)」 — is treated as content, shown and spoken as usual.

The point: this is decided by the shape of what she writes, so a brand-new expression on someone else's screen is handled the same way, without anyone adding it to a list.

Under the hood

  • Replaced the recognised-keyword gate for stripping stage directions with a shape rule (a colon marks structured content; everything else short and bracketed is an aside). Added a streaming-TTS twin so the voice never speaks an aside even mid-stream, and dropped the now-orphaned silent/generic keyword tables.

Known issues

  • Live bridge + real-machine validation still pending (carried from the earlier betas): the messaging and awareness flows are covered by protocol and unit tests, but real-network behaviour and the Full Disk Access grant flow need a real machine — that's what this validation window is for.
  • The muted styling for an unrecognised aside only appears for the rare asides we don't recognise; most expressions are invisible (they drive her face). Worth an eyeball during validation.
  • Emotion changes are deliberately invisible (no dashboard, by design) — you feel them in her replies over days of use, not in a panel.
  • Desktop message awareness is macOS-only; the Windows adapter remains an external script.
  • Local TTS outputs WAV, so Telegram voice-note replies still need a cloud TTS provider (mp3/ogg/m4a). Discord inbound voice isn't transcribed yet (Telegram only).
  • Carried over: Screen Recording permission quirks on the unsigned macOS build.

Notes & limitations

  • Unsigned distribution (macOS arm64). First launch needs the usual right-click → Open; granting Microphone / Screen Recording / Full Disk Access follows the in-app prompts. Unchanged in v0.3.4.
  • This is a pre-release: download manually from GitHub Releases for validation. Stable users are not auto-upgraded.

v0.3.4-beta.3

v0.3.4-beta.3 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 13 Jun 04:54
Immutable release. Only release title and notes can be modified.

Nexus v0.3.4-beta.3

Beta — the companion's emotions finally drive her, not just describe her. Third beta of the v0.3.4 line, on top of v0.3.4-beta.2. The headline is a four-step deepening of the emotion engine: she now reads how you feel from the whole conversation, her own mood is shaped by genuine events (a failed reply, a long absence, your low days), and that mood actually changes how — and whether — she reaches out. Plus the Live2D character is now the default face, message awareness collapses to one toggle, and a gentle follow-up on messages you missed while away. As a pre-release it is for manual validation only; stable users are not auto-upgraded.

What changes for users

The companion feels more like a person

This release closes the emotion loop end to end — perception → her inner state → her tone and behaviour. None of it is a dial you set; it just happens, quietly.

  • She reads how you feel. Using the whole conversation (not keyword matching), she now picks up on moods that have no obvious keyword — 「我今天被裁了」 carries no "sad" word, but she'll notice. This shapes her tone and, over time, how she checks in.
  • Her mood is shaped by real events. A failed reply leaves her a little concerned. A long stretch of you being away — she starts to miss you, and there's a genuine warm lift when you come back. Your stretch of low days softens her (more warmth, more care). These were defined long ago but never actually fired until now.
  • Her mood changes what she does. When she's worried she leans toward a gentle check-in; when she's tired she'd rather stay quiet; when she's bright she might share something playful. This never overrides quiet hours, away/locked, or cost limits — it only colours the moments that were already going to happen. She never gets chatty just because her mood is good.
  • Her warmth follows the relationship. The same feeling shows more reservedly while you're still getting to know each other, more openly once you're close.

Avatar

  • The Live2D character (星绘) is now the default face. Her soul and her model finally match out of the box. The lightweight sprite pets (Pip and friends) remain a fully-supported option in the picker — they're just no longer the default. (Fresh installs only; if you already chose a pet, your choice is kept.)

Desktop message awareness

  • One toggle now. Turning on "Desktop message awareness" (macOS) auto-enables the notifications it depends on — so it's a single flip plus the (Apple-mandated) Full Disk Access grant, nothing else to configure.
  • She follows up on what you missed. A message that arrived while you were away can surface, gently, in your next conversation — 「下午张三在微信找过你,后来处理了吗?」 Asks, never assumes (she can't see whether you replied in the other app); once per conversation, at most twice a day, and silent if it would feel forced.

Under the hood

  • A never-wired pair of agent tool definitions removed (dead scaffolding, no behaviour change).

Known issues

  • Live bridge + real-machine validation still pending (carried from the earlier betas): the messaging and awareness flows are covered by protocol and unit tests, but real-network behaviour and the Full Disk Access grant flow need a real machine — that's what this validation window is for.
  • Emotion changes are deliberately invisible (no dashboard, by design) — you feel them in her replies over days of use, not in a panel.
  • Desktop message awareness is macOS-only; the Windows adapter remains an external script.
  • Local TTS outputs WAV, so Telegram voice-note replies still need a cloud TTS provider (mp3/ogg/m4a). Discord inbound voice isn't transcribed yet (Telegram only).
  • Carried over: Screen Recording permission quirks on the unsigned macOS build.

Notes & limitations

  • Unsigned distribution (macOS arm64). First launch needs the usual right-click → Open; granting Microphone / Screen Recording / Full Disk Access follows the in-app prompts. Unchanged in v0.3.4.
  • This is a pre-release: download manually from GitHub Releases for validation. Stable users are not auto-upgraded.

v0.3.4-beta.2

v0.3.4-beta.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 12 Jun 04:04
Immutable release. Only release title and notes can be modified.

Nexus v0.3.4-beta.2

Beta — the companion notices all your messages. Second beta of the v0.3.4 line, on top of v0.3.4-beta.1. The headline: desktop-wide message awareness — Nexus now reads the macOS Notification Center so your companion knows when WeChat, QQ, mail or any other app gets a message, behind a single settings toggle. Plus pairing codes that replace hand-typed allowlist IDs, MiniMax Token Plan web search, region tabs in the settings model picker, and ~2,100 lines of dead code removed. As a pre-release it is for manual validation only; stable users are not auto-upgraded.

What changes for users

Desktop message awareness (macOS) — new

  • Your companion now notices messages from every app. Enable it under Settings → Autonomy → Notifications → "Desktop message awareness": Nexus reads the system Notification Center history, so a WeChat/QQ/DingTalk/mail banner becomes something the companion knows about — announce (optional), inbox, and into the conversation so she can react ("张三在微信找你了").
  • One toggle replaces the manual adapter script. This previously required running an external node script by hand; it now runs inside the app. Requires granting Nexus Full Disk Access (the card shows a "needs permission" status with a one-click jump to System Settings while the grant is missing). Enabling never replays old notifications.
  • Privacy follows the existing model: by default the companion only learns source + sender (「微信 · 张三 发来了新消息」); message content is included only with the existing read-content opt-in. Ten rapid pings from one conversation become a single companion reaction, not ten.
  • Source filter: choose which apps count as messengers (keyword field; empty uses the built-in list covering WeChat/QQ/WeCom/DingTalk/Feishu/Telegram/Discord/Slack/Teams).
  • Honest scope: this reads what apps put in notification banners — muted chats, apps with notifications off, and content hidden by your notification-preview settings stay invisible. It also cannot reply back to those apps (replies remain a Telegram/Discord bridge capability).

Messaging bridge

  • Pairing codes replace hand-typed IDs. With the deny-by-default allowlist, allowing even yourself meant digging up a numeric chat ID. Now: message the bot once → it replies with a one-time 6-digit code (1 h expiry, max 3 pending, repeats silent) → approve the request in Settings → Integrations. Approving a Telegram private chat also marks it as the owner; group chats and Discord channels enter the allowlist only.
  • Reminder broadcasts hardened: scheduled reminders now go only to your own chats (owner Telegram chats + allowlisted Discord channels) and pass the same permission gate as every other send — previously they went to every remembered sender with no check.

Search & setup

  • MiniMax web search: 9th search provider — the same MiniMax Token Plan key you may already use for chat doubles as a search key (ordinary model keys are not accepted by MiniMax's search endpoint). CN endpoint by default, base-URL override for global.
  • Region tabs in the settings model picker: the provider grid now filters by 国内 / 海外 / 本地, and a cross-region brand (MiniMax/Moonshot/Qwen/SiliconFlow) selects the right regional variant depending on which tab you click it from. Matches the onboarding picker from the previous beta.

Under the hood

  • ~2,100 lines removed: 303 unused translation keys deleted across all five locales (detection guarded against dynamically-built keys).
  • The optimization roadmap (docs/EXECUTABLE_OPTIMIZATION_TASKS.md) reconciled with shipped reality.

Known issues

  • Live bridge validation is still pending (carried from beta.1) — the Telegram/Discord reply loop and the new awareness flow are covered by protocol-level and unit tests, but real-network/real-grant behaviour is what this beta's validation window is for. The Full Disk Access grant flow in particular needs a real machine.
  • Local TTS outputs WAV, so Telegram voice-note replies still require a cloud TTS provider (mp3/ogg/m4a).
  • Discord inbound voice messages are not transcribed yet (Telegram only).
  • Desktop message awareness is macOS-only in this beta (Windows adapter still available as an external script).
  • Carried over: Screen Recording permission quirks on the unsigned macOS build; a small tail of dead exports pending cleanup.

Notes & limitations

  • Unsigned distribution (macOS arm64). First launch needs the usual right-click → Open; granting Microphone / Screen Recording / Full Disk Access follows the in-app prompts. Unchanged in v0.3.4.
  • This is a pre-release: download manually from GitHub Releases for validation. Stable users are not auto-upgraded.

v0.3.4-beta.1

v0.3.4-beta.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Jun 22:12
Immutable release. Only release title and notes can be modified.

Nexus v0.3.4-beta.1

Beta — the messaging bridge actually talks back. First beta of the v0.3.4 line on top of v0.3.3. The headline: the Telegram/Discord bridge finally closes the loop — your companion now replies back to the chat you messaged it from, optionally as a voice note, and Telegram voice messages get transcribed into the conversation. Plus a free fully-offline TTS option, a security pass on the messaging surface, and first-run onboarding polish. As a pre-release it is for manual validation only; stable users are not auto-upgraded.

What changes for users

Messaging bridge (Telegram / Discord)

  • The companion replies back. Message your companion from Telegram or Discord and the reply now routes back to that same chat/channel automatically — previously the bridge was receive-only and answers appeared only on the desktop. Replies go only to your own (owner) messages, never to other contacts, so nobody can use your companion as a relay. A new per-gateway toggle controls this (on by default; read-only permission mode still blocks all sending).
  • Voice replies. Optionally have replies arrive as a TTS voice note: Telegram gets a real voice bubble (with mp3/ogg/m4a-capable TTS providers), Discord gets a playable audio attachment. Three modes: off / always / only-when-they-sent-voice (the last one mirrors your modality — speak to it and it speaks back, type and it types).
  • Telegram voice messages are understood. Incoming voice notes are downloaded and transcribed with your configured cloud speech-recognition provider, then reach the companion like any text message. Without an API STT configured they fall back to the old announce-only behaviour. Media messages (photos/stickers/voice/…) are also announced now instead of being silently dropped.
  • No more silently lost messages. Bridge messages that used to vanish when the assistant was mid-reply are now queued and retried; a Telegram reconnect no longer replays the previous message batch; and the panel's manual reply box no longer pretends a failed send succeeded.
  • Allowlist is now deny-by-default. An empty allowed-IDs list used to accept everyone — bot usernames are publicly searchable, so a freshly configured bridge was open to strangers. It now accepts nobody until you add your chat/channel IDs. Action needed: if your bridge worked with an empty allowlist, add your IDs in Settings → Integrations.
  • NEXUS_TELEGRAM_API_BASE environment variable for routing Bot API traffic through a reverse proxy where api.telegram.org is unreachable.

Voice

  • Free offline text-to-speech. New "Local TTS" speech-output provider (MeloTTS, bilingual zh/en) running fully offline through the bundled sherpa-onnx runtime — no API key, no per-character billing. Download the ~165 MB model in Settings → Local Models before first use. Note: its WAV output means Telegram voice bubbles fall back to text-only; desktop playback and Discord attachments work fully.

First-run setup

  • Provider region tabs. The first-run model picker now filters providers by 国内 / 海外 / 本地 segments (defaults to your UI language's region; the selected provider stays pinned across tabs), with first-success providers ordered up top.
  • Friendlier chat errors. A failed chat send now shows actionable, localized advice ("check the API key in Settings → Model") instead of raw provider/network errors; secrets and file paths are scrubbed from anything user-visible.

Security

  • Webhook hardening. The local notification webhook (127.0.0.1) now uses constant-time token comparison, rate-limits failed auth attempts (no localhost exemption — browser pages can reach 127.0.0.1 too), and no longer sends CORS headers, so web-page JavaScript can't talk to it at all.
  • Honest copy: FEATURES/READMEs no longer promise "bidirectional messaging" beyond what ships; the docs now describe exactly what the bridge does.

Under the hood

  • Protocol-level integration tests for the Telegram gateway against a mock Bot API server (long-poll, offset bookkeeping, multipart voice upload, allowlist, reconnect semantics); the gateway no longer requires an Electron runtime to load.
  • Research docs added under docs/: bridge survey + upgrade plan, auto-update survey, OpenClaw/Hermes comparison, competitor landscape.

Known issues

  • The bridge has not been validated against live Telegram/Discord servers yet — protocol behaviour is covered by the mock-server suite, but real-network behaviour (TLS, proxies, Telegram-side validation, STT quality on real voice notes) is exactly what this beta's validation window is for.
  • Local TTS outputs WAV, so Telegram voice-note replies require a cloud TTS provider (mp3/ogg/m4a) for now.
  • Discord inbound voice messages are not transcribed yet (Telegram only).
  • Carried over from v0.3.3: Screen Recording permission quirks on the unsigned macOS build; ~291 unused i18n keys pending cleanup.

Notes & limitations

  • Unsigned distribution (macOS arm64). First launch needs the usual right-click → Open; granting Microphone / Screen Recording follows the in-app prompts. Unchanged in v0.3.4.
  • This is a pre-release: download manually from GitHub Releases for validation. Stable users are not auto-upgraded.

v0.3.3

Choose a tag to compare

@github-actions github-actions released this 11 Jun 21:23
Immutable release. Only release title and notes can be modified.

Nexus v0.3.3

Stable — maintenance & polish. Promotion of v0.3.3-beta.1 after its validation window; cumulative changes on top of v0.3.2. A reliability, behaviour-polish, and slimming release. It makes imported character cards actually drive chat, adds a cloud→local voice-recognition fallback, fixes a cluster of voice/notification/persona bugs, changes a couple of pet defaults for the better, and removes ~2,500 lines of dead/dormant code. No major new feature surface — the bigger autonomy work is tracked separately for v0.4. Stable and beta users auto-upgrade on next launch.

What changes for users

Desktop pet

  • Default pet renamed to “Pip.” The bundled sample sprite pet (previously shown as “Terminal Pet”) is now Pip, and its description makes clear it’s a sample/test pet demonstrating the sprite-pet system — still a fine default to start from.
  • Pets now show their scene backdrop by default. Sprite pets used to default to free-roam mode (transparent background, character only). They now default to fixed mode with the time-of-day backdrop. The transparent “roam the whole desktop” mode is now opt-in — toggle it from the new setting (Settings → pet) or the pet’s right-click menu. (If you previously relied on the transparent default, just switch the toggle on.) Pets you had explicitly set are unaffected.
  • A new in-app free/fixed toggle for sprite pets (previously only available on the right-click menu).
  • The “spawn clone (分身)” feature was removed. The right-click options to spawn/dismiss extra roaming pet windows are gone; the single companion is unaffected.
  • Hidden pets no longer burn CPU/battery — locomotion is paused while the window is hidden.

Voice

  • Cloud→local speech-recognition fallback. When cloud transcription fails and you’ve enabled failover, Nexus now falls back to the fully-offline local SenseVoice model for that utterance (continuous/VAD path).
  • A long continuous utterance no longer gets silently dropped (and no longer leaves voice stuck) — it’s flushed and transcribed.
  • Barge-in no longer mistakes the assistant’s own tail audio for new user speech.

Persona & character cards

  • Imported Character Cards can now drive chat. Previously an imported card only shaped the autonomy/letters surface; the chat replies still used the global persona. With the new per-profile-persona setting enabled, the active card’s soul/personality drives chat too.
  • An imported card no longer leaks a [Character card: …] placeholder into the prompt — the real assembled persona is used.
  • Live2D models now keep their authored surprised / confused / embarrassed expressions (they were being silently dropped). Added docs on the Live2D auto-discovery naming/order conventions.

Notifications

  • Chinese urgency keywords (立即 / 紧急 / 重要 / 立刻) are now correctly prioritized — they were always being downgraded to normal priority.

Reliability fixes

  • Chat requests now retry once on a transient 429/5xx before surfacing a failure (helps under provider rate-limits).
  • SSRF redirect-following is now revalidated per hop on the chat/voice connection-test and model/voice-list probes.
  • Fixed a regression where the panel-sent always-on-top / click-through toggles silently no-op’d.
  • Fixed timezone-dependent flakiness in the usage/cost history.

Under the hood

  • ~2,500 lines of dead/dormant code removed: orphaned test-only modules and barrels, the dormant realtime-voice backend (gated behind an off-by-default flag), the unused agent-workspace fs-tools stack, a dead inter-plugin delivery path, and duplicate/stub files.
  • Dropped the unused protobufjs dependency.

Known issues

  • Screen Recording permission on the unsigned build. Because the app isn’t code-signed, macOS TCC may not list Nexus under System Settings → Privacy → Screen Recording until it actually requests capture. The default-off “desktop awareness” (screen OCR) is the only thing that requests it; turn that on (or use right-click → Open + remove the quarantine attribute) to get the prompt. Microphone behaves the same. Deferred to a future signed build.
  • Deferred internal cleanup (no user impact): ~291 unused i18n keys and a small tail of dead exports are not yet pruned; planned for a follow-up.

Notes & limitations

  • Unsigned distribution (macOS arm64). First launch needs the usual right-click → Open; granting Microphone / Screen Recording follows the in-app prompts. Unchanged in v0.3.3.
  • The “Codex pet” gallery/import/creator feature keeps its name — it integrates with the external codex-pet.org / CodexPets.net community ecosystem and is not Nexus-branded.
  • Identical content to v0.3.3-beta.1 — no code changes between the beta and this stable tag. The larger messaging-bridge work that landed after the beta cut ships separately in the v0.3.4 beta line.