Repository navigation
AbstractCore v2.25.0
Added
-
Command sandbox (
abstractcore.tools.sandbox):execute_commandand the persistent
shell_execsession run inside an OS sandbox built from the run's effective workspace set, which
the host stamps as the hidden_sandboxargument (SandboxSpec: private workspace, posture
allowed_only|any_except_denied, default mode, allowed rows ro/rw, refused rows, built-in
refusals and the host's exceptions). macOS:sandbox-execwith a generated profile; Linux:
bwrap, or Landlock for the allow-list posture. The most specific row wins; built-in refusals
are absolute. No sandbox available: the call returnssuccess: falsewith one sentence and runs
nothing, unless the host allowed unsandboxed commands.configure_host(env=…, unsandboxed_commands_allowed=…)(set once by the host at boot) gives the scrubbed environment
every command starts from (plus a privateTMPDIRin the run's workspace) and makes an unstamped
spawning call refuse;host_policy()/host_sandbox_kind()report it. Results carry
sandbox: {kind, …}and aSandbox: …line. Library use without a host policy is unchanged. -
CI: a
linux-sandboxjob installs bubblewrap on Ubuntu and runstests/tools/test_sandbox_linux.py
(bwrap and Landlock); the job fails when any of those tests is skipped, so the Linux sandbox is verified
on a real Linux host on every push to main and every pull request. -
POST /v1/chat/completionsaccepts OpenAI'sresponse_formaton every provider:
{"type": "json_object"}or{"type": "json_schema", "json_schema": {"name", "schema", "strict"}}.
Providers that constrain decoding receive the schema; every answer goes through the
structured-output handler and is validated against the caller's schema (feedback retries). An
unusableresponse_formatanswers400 invalid_response_format,response_formatwithtools
answers400 unsupported_parameter, and an answer that still does not match answers
500 structured_output_invalid. A streamed request receives the validated JSON as one chunk.
abstractcore.structured.json_schema(response_model_for,validate_instance) is the validator. -
Console About (the i button in the top bar): the compact About card shared by every
AbstractFramework app (UI kitAfAbout) with AbstractCore's version, the AbstractFramework and
AbstractGateway versions installed on this host, the links and the licence line; no package list.
abstractcore.utils.identity.about_card_html(withabout_version_facts,about_links) renders
it; the kit'saf-aboutCSS is vendored bypython -m abstractcore.console.theme_sync. -
POST /v1/audio/musicacceptsseconds(the clip length; same value asduration_s, which
stays accepted). A non-positive length or two lengths that disagree answer400. The sound
output'sseconds/duration_sandmodelreach the music plugin with the task
(text_to_audio), so a sound effect runs the route's model for the requested length. -
models delete huggingface org/repo:QUANT(and the Gateway's Models-page Delete) removes only
that GGUF quant's files and keeps the repo's other quants; the whole repo goes when it was the
last model file set. A quant that is not in the cache answersnot_found.
Fixed
-
POST /v1/audio/musicwithtask: "text_to_audio"returns the generated sound effect; it read
only themusicoutput and answered500for thesoundoutput a sound effect produces. -
POST /v1/chat/completionswith an unknown provider, or a model the provider reports missing, answers404withcode: "model_not_found"in the OpenAI error envelope instead of500. The registry raisesUnknownProviderError(aModelNotFoundErrorand still aValueError). -
A Hugging Face / MLX cache delete is planned on its own repo only. The cache API resolves a
commit hash to the first repo that holds it, so a mirror or duplicated repo sharing a commit
could be deleted in place of (or along with) the requested one.
Changed
-
The music plugin floor is
abstractmusic>=0.1.16(base,[apple]and[gpu]): 0.1.16 runs the requested Stable Audio 3 checkpoint (the SFX checkpoint for sound effects) for the requestedseconds. -
Console theme CSS re-synced from UI kit 0.8.0. The terminal console crate
abstractcore-consoleis versioned 0.8.0 with this release.