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
- 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
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.
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.
get_ip_address had three independent implementations (shellui, util, daemon)
because each module also carried its own copy of SceNetCtlInfo and its own
prototype for sceNetCtlGetInfo, with the pointer typed as SceNetCtlInfo* in
two of them and void* in the third.
The shellui and util copies stored the result in an unsigned int and tested
`ret < 0`, which is never true for an unsigned value. Their error branch was
unreachable, so a failed lookup returned success, left not_connected clear,
and copied an uninitialised SceNetCtlInfo to the caller instead of the
IP NOT FOUND placeholder. util's rest-mode network-recovery retry keys off
that return value and therefore never ran.
Declare the netctl ABI once in source/include/ps5/net_ctl.h, add
onion_net_get_ip_address to libonion_platform with an explicit buffer-size
contract, and keep util's not_connected latch in util where it belongs.
Cover the status mapping, the placeholder length and buffer validation with
host tests.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Require user payloads to launch through :9020 with an exact PID response, removing the :9021 fallback and process-snapshot PID inference.
Supervise the private loader from daemon, recover it through :9021 before restarting util through :9020, and protect synchronous launches with a bounded busy marker.
Add strict loader tests, update runtime documentation, and remove obsolete elfldr and process-snapshot compatibility APIs.
Cache the PS5 system language once per process and share the resolved locale across Toolbox, plain notifications, and rich notifications. Keep ShellUI queries behind the registered trampoline, localize the daemon welcome toast, and cover cache refresh and localized payload generation in host tests.
Place the welcome title in subMessage and the build version with author in message to match the PS5 toast layout. Shorten dirty build labels to dirty-SHA.
Generate shared version metadata from an exact Git tag, falling back to dirty-YYMMDD-SHA for untagged or modified trees. Show the version and author in the startup toast and reuse the generated version across ShellUI.
Remove FPS calculation from the shellui monitor bar while keeping CPU,
GPU, RAM, and IP metrics, and delete the full game-process inject path
(fps_elf, fps.prx, SHM) so titles are no longer soft-injected.
Clear any legacy fps_overlay ready marker on daemon/shellui start, and
bound CPU sampling retries so a stuck probe cannot block other metrics.
Rename product, namespaces, libraries, paths, and assets from Orion/orion
to Onion/onion across the tree. TCP stack-shutdown magic is now ONIO
(0x4F4E494F) to match the corrected branding.
Introduce g_stack_shutting_down so stack teardown does not reuse
is_handler_enabled. Arm it before killing util so fifo_and_dumper_thread
will not relaunch util over 9021.
Drop StartOption and toolbox_auto_start (UI, settings, rest-mode disable,
USB override, and startup URI launch). Always inject the toolbox into
ShellUI without navigating to debug settings or any auto-open page.
Add BREW_SHUTDOWN_STACK (0xDEAD0002): kill util.elf, ForceKill SceShellUI,
then exit the crit daemon. Expose the same sequence on TCP port 9048 with
ORIO magic frames so a PC can tear down OrionHEN over the LAN.
Provide scripts/shutdown_orion.py (kill_daemon.py becomes a thin alias) and
IPC_Client::ShutdownStack for on-console Unix clients.
Serialize IPC_Client with a per-target mutex and full-frame send/recv plus
NUL-terminated payloads. Escape reply JSON vars, null-check daemon FS paths,
handle BREW_UTIL_TEST_CONNECTION, and track BREW_LAST_RET from the last reply.
Introduce SettingsStore (mutex snapshot/update), dual-path config mtime gating,
and fan IPC persistence to twin config files. Stop cold-start toolbox delay on
util_booted; fix jailbreak hijack retry to stop only when dead or maxed.
Add host tests for IPC wire helpers, toolbox timing policy, and hijack retry.
Break daemon/commands.cpp into playtime, jailbreak, and utils TUs. Introduce
ToolboxUiState with compatibility aliases, extract pure toolbox resource
routing for host unit tests, and fix superuser empty-XML pass-through.
Delete error_translator.hpp, microhttpd.h, and libmicrohttpd.a left after
removing DirectPKGInstaller. Strip unused AppInst types from util/daemon,
drop SceAppInstUtil link where no longer needed, remove dead dpi/kernelrw
thread stubs, drop the toolbox microhttpd credit, and refresh README.
Delete DirectPKGInstaller and the toolbox DPI toggle. Remove the custom
background package installer (custompkginstaller XML generation and
id_pkg_ handlers). Package install remains the stock PkgInstaller link
in OrionHEN_toolbox.xml. Leave BREW_UTIL_UNUSED_DPI ordinal for IPC
compatibility.
Keep IPC_loop as the only transport entry in msg.cpp. Move toolbox/fps
injection, LoadSettings, and remount/chmod/reply helpers into dedicated
TUs behind daemon_ops.hpp so inject changes no longer touch the IPC ring.
Wire daemon/util/shellui/bootstrapper to liborion_platform and
liborion_proc (orion_notify, OrionHEN_log configure, find_pid, if_exists).
Split MonoUtils into mono_runtime/toolbox_xml/settings_ui/shellui_* and
replace the OnPress id bus with table-driven domain handlers.