110 Commits
Author SHA1 Message Date
aydencharles ef90f9430f feat(notify): add a startup thanks toast 2026-10-02 18:24:10 +08:00
aydencharles 9beb4c58c6 refactor(boot): extract acquire use case and consolidate fs helpers 2026-09-14 10:20:40 +08:00
aydencharles 6950517ad8 fix(lifecycle): collect Big App on EXEC before running query 2026-09-11 22:47:42 +08:00
aydencharles 3fedbf4a03 feat(rest-mode): restore resume delay after trophy SPRX 2026-09-11 22:12:41 +08:00
aydencharles 9d09578b63 chore(fps): log fps at TRACE 2026-09-09 20:41:35 +08:00
aydencharles ac143c20c4 refactor(cheats): separate browse and runtime state 2026-09-09 12:42:13 +08:00
aydencharles 927298d9e3 chore(fps): log fps at DEBUG 2026-09-08 22:41:30 +08:00
aydencharles 68de51a728 fix(plugins): keep auto-start for next boot only 2026-09-05 00:42:53 +08:00
aydencharles db59d1d45d fix(notify): fall back to plain toast on rich failure 2026-09-04 15:52:20 +08:00
aydencharles df2622cd67 feat(sprx): add catalog management controls 2026-09-04 14:40:11 +08:00
aydencharles db97d97974 test(lifecycle): cover runtime startup and owner exit handling 2026-09-04 13:49:14 +08:00
aydencharles df92819193 feat(sprx): harden loader policy and runtime lifecycle 2026-09-04 12:36:20 +08:00
aydencharles 127748afc6 feat(plugins): embed settings links and manage autostart per plugin 2026-09-03 16:55:39 +08:00
aydencharles 4023fcdae9 feat(plugin): wire host services and plugin flags
Implement the daemon-side Host Service handlers that the SDK client already
sends, and the two descriptor flags the SDK defines beyond auto-start.

- session: add LOG/NOTIFY/CONFIG_GET/CONFIG_SET commands and a HostServices
  interface injected by the daemon; NOTIFY is gated by the Notify capability
- daemon: route log to LOG_*, notify to the toast, and config to a persistent
  per-plugin ConfigStore under the plugin install root
- manager: honor LONG_RUNNING (crash supervision on reconcile) and
  STOP_SUPPORTED (graceful SIGTERM vs immediate SIGKILL)
- tests: cover host-service gating/config round-trip and the new flags
2026-09-03 15:37:52 +08:00
Hexwell 33da7e3709 refactor(ftp): remove built-in FTP server 2026-09-02 22:38:47 +08:00
Hexwell 0e276281fd feat(plugin): add external ELF plugin management 2026-09-02 21:32:44 +08:00
Hexwell bb6ccd7803 feat(plugin): add dynamic UI event bridge 2026-09-02 20:42:01 +08:00
Hexwell e415d0b75e feat(plugin): add ELF discovery and lifecycle management 2026-09-01 18:15:35 +08:00
kvnhrt a534adcd60 feat: add ShadowMount+, DPI pkg-server + WebUI, fix PS4 FPS
- fix(fps): measure PS4 BC frame rate with a remote GNM detour
  and hide the pkg install result code in the finish notification
- feat(utils): integrate ShadowMount+ alongside the FTPSRV service
  for game scanning, mounting and installation
- feat(DPI): add the packet package server (pkgserver) with its
  Web UI and full REST/SSE API surface
- feat(tests): add new host test suites (multipart, builtin
  services, pkg XML, FPS formula, toolbox i18n/route, language)
- build: add Docker support for building and running the tests
- docs: update credits, README, architecture, util-arch, api and
  third-party documentation; add contributor credit and i18n keys
- i18n: remove the pkg finish result code from every locale
2026-08-31 05:26:42 -06:00
Hexwell 8ab584db24 fix(rest-mode): recover built-in FTP listener after standby 2026-08-22 22:33:27 +08:00
Hexwell b8c15cff0b fix(payload): preserve user-owned processes 2026-08-22 21:49:06 +08:00
Hexwell d056e00850 fix(fps): match DCE ioctl ABI and add diagnostics 2026-08-22 14:44:51 +08:00
Hexwell 81cd276311 refactor(rest-mode): remove dead recovery code 2026-08-22 12:14:45 +08:00
Hexwell 1b09cf29f0 fix(rest-mode): recover toolbox and IPC after standby 2026-08-22 12:10:54 +08:00
Hexwell d30c9c2eac fix(crash): preserve logs and point reports to GitHub 2026-08-21 23:54:54 +08:00
Hexwell e22013992d fix(rest-mode): recover toolbox from SysCore EXEC not SIGCONT 2026-08-21 22:26:32 +08:00
Hexwell 988cf124f9 fix(rest-mode): recover toolbox and IPC listeners on SIGCONT 2026-08-21 18:15:50 +08:00
Hexwell fddc9d4e3e feat(overlay): FPS on the monitor bar (#13) 2026-08-21 17:14:55 +08:00
Hexwell 1812204e33 chore(log): align runtime log levels 2026-08-19 16:19:45 +08:00
Hexwell 5cebe340a7 feat(i18n): notify service restored after rest mode #1 2026-08-18 16:37:44 +08:00
Hexwell cb7359d155 fix(rest-mode): restore services and toolbox after standby #1 2026-08-18 16:30:55 +08:00
Hexwell 345adcf7e8 fix(daemon): stop private elfldr on stack shutdown 2026-08-18 15:51:53 +08:00
Hexwell fbf4c3c64b chore: remove unused ELF self-integrity
Ed25519 signing no longer adds useful friction. Drop
libonion_integrity, tools/elf_sign, and the XOR integrity toasts
so builds no longer sign daemon.elf.
2026-08-17 10:45:02 +08:00
Hexwell 4c4043581d chore: remove unused beta trial gate
The 14-day seal is no longer used. Drop libonion_trial, the Toolbox
banner, and notify.trial catalog entries so Debug no longer expires.
2026-08-17 10:44:16 +08:00
Hexwell 57826d5424 refactor(i18n): use stable keys and whole-sentence formats
Notifications look up notify.* keys instead of English source
strings. Toolbox interpolations go through toolbox_i18n::format so
zh/en word order lives in the JSON catalogs.
2026-08-17 09:50:33 +08:00
Hexwell 550302fddc fix(daemon): hold fan threshold on a dedicated thread
Firmware reasserts its own curve after a one-shot /dev/icc_fan
ioctl. Rewrite the configured threshold every 2s independently of
the app-jailbreak listener, and reuse the shared cooling constants.
2026-08-17 09:25:11 +08:00
Hexwell 7753962672 refactor(daemon): isolate startup navigation 2026-08-15 16:02:31 +08:00
Hexwell 3275a4e244 feat(daemon): restore Home Menu startup option 2026-08-15 15:47:00 +08:00
Hexwell 07ed6d2339 feat(daemon): add event-driven app jailbreak listener 2026-08-06 19:30:48 +08:00
Hexwell 9a9c37e318 feat(logging): add runtime levels and log rotation 2026-08-06 18:12:52 +08:00
Hexwell 9736b1f99a feat: obfuscate beta banner and boot notify strings
Keep redistribution and integrity notices out of ELF .rodata by storing
XOR+position-math blobs and decoding at runtime, so casual string search
cannot locate and patch them. Covers toolbox XML banner, bootstrapper
debug toasts, and the shared integrity failure path in daemon.
2026-08-03 20:05:29 +08:00
Hexwell f51e733d85 fix(trial): quiet success toasts on daemon recheck
Add onion_trial_gate_ex(notify_ok) so daemon can revalidate without
re-showing remaining-days or redistribution notices already shown by
the bootstrapper boot gate.
2026-08-03 19:42:42 +08:00
Hexwell 0aef6b7717 feat(integrity): gate boot on ELF signature and trial before payloads
Add libonion_integrity (Ed25519 self-check + signed-image verify) and
host sign/verify tools. Bootstrapper now verifies the embedded daemon
and runs the beta trial gate before launching private elfldr, util, or
daemon. Stop writing OnionHEN.bin under /data/OnionHEN; link kernel_sys
from bootstrapper for device serial used by trial.
2026-08-03 19:36:20 +08:00
Hexwell dbe471e268 refactor(trial): replace certificate gate with 30-day beta trial
Drop per-device Ed25519 licenses and TCP install in favor of a build-time
seal plus sealed trial.state anti-rollback. Rename libonion_activation to
libonion_trial, show beta notices in daemon toast and toolbox UI, remove
unused V_FW, and set author to 麒麟/0xp0co.
2026-08-03 19:19:53 +08:00
Hexwell 5fa2c9bf67 feat(activation): add pluggable beta Ed25519 certificate gate
Introduce a self-contained libonion_activation module for internal-test
license checks, with compile-time public-key injection, debug-style
toasts, and shared notification i18n. Disable with
ONION_ENABLE_BETA_ACTIVATION=OFF when the beta gate is no longer needed.
2026-08-03 11:35:56 +08:00
Hexwell 8154256b9a fix(daemon): adapt jailbreak attrs for SDK v0.41
ps5-payload-sdk v0.41 changed kernel_get/set_ucred_attrs from a uint64_t
value at ucred+0x83 to a 32-byte buffer starting at ucred+0x80. Update
jb_apply_privileges to use the new prototype and set attrs[3] = 0x80 so
the ptrace-capable sceAttr byte (still at +0x83) matches Hijacker.
2026-08-03 10:20:11 +08:00
Hexwell c88b173f34 fix(log): keep daemon log files reachable 2026-07-30 23:11:11 +08:00
HexwellandClaude Fable 5 7e64b92d98 refactor(log): route every call site through the shared logger
There were seven ways to log, each invented where the previous one was not
reachable:

  OnionHEN_log   libonion_platform, the only one with a file sink
  shellui_log    libonion_ipc, klog only — because it did not depend on
                 libonion_platform
  game_log       same body as shellui_log
  onion_ipc_log  same body again
  logf           libonion_ipc's IPC server, with a sink the host had to
                 register
  log_msg        onion_elfldr_server
  crash_log      util's fault handler, plus a second copy in common/
  boot_log       bootstrapper's fault handler
  klog_printf / klog_puts / printf / puts, called directly

A message's destination therefore depended on which module happened to emit
it: ShellUI's ~300 records went to volatile klog and never reached a log file,
while the daemon's went to klog, stdout and disk.

Everything now goes through the LOG_* macros. All seven legacy entry points
are gone, and klog_printf survives only as a sink inside log.c.

The bare -nostdlib libraries deliberately did not get their own backend. Those
flags only affect the static library's own link step; each is linked into a
host with full libc and pthread, which is why they already called vsnprintf.
A second backend would have recreated the split this removes.

Levels were inferred from message text rather than applied uniformly — the old
entry points carried no severity, so a blanket mapping would either bury real
failures at debug or promote routine chatter to error. Result: 291 error, 63
warn, 140 info, 309 debug.

Consequences worth noting:

  * ShellUI records now reach the log file, so a user report finally contains
    what the injected process did. In release builds most of them are debug
    and compile out, so this costs nothing on a retail unit.
  * The IPC server's log-sink injection is gone; both servers registered the
    same forwarder.
  * common/backtrace.cpp and backtrace.hpp are deleted. That was a third copy
    of the frame walking plus its own crash_log, and every caller of
    printBacktrace/printBacktraceForCrash had already been commented out.
  * Fault handlers use onion_log_emergency, so crash records go to the same
    file as everything else instead of a separate crash log.

The shared entry point carries a printf format attribute, which the old
shellui_log explicitly avoided. That attribute found seven real format
defects: %p given typed pointers, %lx given a MonoObject*, %p given a
uint64_t, and %u given an unsigned long. Four of them only compile in debug
builds, so they had gone unnoticed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-26 21:10:08 +08:00
HexwellandClaude Fable 5 510106f2de feat(log): make the log level configurable from config.ini
Adds [logging] level to the shared config schema, applied on every settings
load — so BREW_RELOAD_SETTINGS re-applies it and a user can raise verbosity
for a bug report without a debug payload or a reboot.

libonion_settings stays independent of libonion_platform, so the level
constants exist in both. onion/log_settings.hpp is the single place that sees
both headers and static_asserts that they still agree; it also clamps a
request to what the build actually compiled in and reports the effective
level back, so asking for trace in a release build logs why it stayed at
info rather than silently ignoring the setting.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-26 20:44:37 +08:00
HexwellandClaude Fable 5 971296f174 refactor: separate libhijacker headers from shared contracts
source/include mixed libhijacker's private implementation headers (util.hpp
with its hand-rolled UniquePtr/String/Vector, plus kernel/, elf/, dbg/,
hijacker/) with genuinely cross-module contracts, and the whole directory was
pulled in as -isystem, so any module could reach libhijacker internals and
every warning in those headers was suppressed.

Move the libhijacker-private headers to source/libhijacker/include and expose
it as a PUBLIC include directory, so the two modules that actually use it —
util for hijacker.hpp, shellui for SHA-1 — now declare that dependency.

Split sha1.hpp: the public-domain SHA-1 goes to third_party/sha1, while
NID_KEY, Sha1 and genSha1 (which needed libhijacker's StringView) move into
the nid.hpp that uses them. shellui only ever wanted the plain digest.

Drop source/include's SYSTEM marker now that it holds only first-party
contracts. That surfaced problems -isystem had been hiding:

  * 68 format-string mismatches in dbg.hpp, printing uintptr_t with %llx
  * freebsd-helper.h redefining PROT_* and TRACEBUF over the SDK's
  * ini.h's header-only helpers declared static rather than static inline

The GNU extensions that TYPE_BEGIN/TYPE_FIELD rely on are now silenced per
header instead of by the blanket -isystem.

Also drop three redundant util.hpp includes (bootstrapper, shellui) that
referenced none of its symbols, and fix backtrace.hpp being included through
relative ../include paths.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-26 20:13:50 +08:00