Repository navigation
Added
crates/library(gameframe-library) keeps a port's game data, saves and opt-in sections
(mods, screenshots, recordings, custom). The game declares them in onelibrary.json, with
hooks for save cards and file checks. It has folder, memory and browser stores. In the browser,
files are encrypted with a non-extractable WebCrypto key.templates/library-page/is a plain HTML page for browser ports that works with the crate.
It has a design system of--lib-*tokens, replaceable icons and named components. Panels
show Markdown, a changelog, messages, a click-to-load YouTube video and GitHub releases, and
ports can add their own. Markdown help pages sit at hash routes, with::: tipboxes and
::: panelslots.crates/frame(gameframe-frame) is the contract between a port's core and the frame
around it. It has event topics, a manifest of capabilities, renderers with coverage grades,
settings and controls, and a session with listeners. A game joins in Rust, in any language
over JSON lines, or with aframe.jsonalone. A demo game stands in when there is no port and
presses its own controls. A minor contract version only adds fields, and older frames ignore
them.crates/frame-ui(gameframe-frame-ui) draws the frame as Dioxus components for the browser
and the desktop. Its tabs are Play, Settings, Library, help pages and Console, styled by the
library page's tokens.examples/frame-demoruns it with no game, in both targets.- Eleven ready-made themes in
templates/library-page/themes/: Windows 98, XP and Vista,
System 7, Aqua, BeOS, NeXTSTEP, CDE, GNOME 2, Amiga Workbench and Atari ST GEM."preset"
inlibrary.jsonpicks one for the HTML page and the frame."presets"lets the player choose between them in the frame's Settings tab, saved asframe.preset. crates/disc-imageandcrates/game-sourcemove from POD into GameFrame. They read CD images
in place, and give a game's files from a folder, a disc image or a URL, in ranges in the
browser.tools/llm/decision.pyroutes bounded choice, yes-or-no and score questions to a user-selected
decision model through its native System One endpoint.decision_feedback.pystores explicit
user corrections locally and exports training examples. Neither tool selects a paid service,
changes model weights or uploads data.- The site diary is now written live and then put together by day. During the day, each
milestone gets a live entry namedYYYY-MM-DD-HHMM-slug.md, which the diary shows with its
time. On the next run,re-siteandre-publisherturn each past day's live entries into
one post in the style of update notes: what is new, a little detail, and a short change list.
The post drops the repeats.tools/site/check.pyfails while a past day still has live
entries.--dayslists those days, and--keep-liveturns the check off. - The plugin check in
tests/run.shignores system files that sit on disk but not in git, and a
new check fails if git tracks a.DS_Store,Thumbs.db,desktop.inior__MACOSXfile.
Changed
- Model-powered tools now default to the local provider.
GAMEFRAME_LLM_ENDPOINTcan point to a
local or compatible endpoint; hosted services are selected by name withGAMEFRAME_LLM_PROVIDER
with provider-specific model and key settings. Hosted providers and remote endpoints require
confirmation before a request. Image location supports local vision models; function naming
uses synchronous calls where a server has no batch API. - The REA skill now documents how to check Ghidra provider readiness, open an explicit Ghidra
session, inspect a native function and its raw instructions, retain the Evidence bundle, and
close the temporary project. It separates focused REA analysis from whole-program Ghidra
searches and emulator measurements. - 86Box setup guidance now covers the optional GDB build, its dynamic-recompiler tradeoff and
the debugger tools provided by the opt-in86box-mcpserver. The provider launcher places its
automation socket in a home-mounted temporary directory for Docker builds, and defaults to
token-protected TCP transport for container compatibility.
Full changelog: v1.3.0...v1.4.0