Skip to content

AbstractCore v2.25.0

Choose a tag to compare

@github-actions github-actions released this 05 Oct 00:05
· 228 commits to main since this release

Added

  • Command sandbox (abstractcore.tools.sandbox): execute_command and the persistent
    shell_exec session run inside an OS sandbox built from the run's effective workspace set, which
    the host stamps as the hidden _sandbox argument (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-exec with 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 returns success: false with 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 private TMPDIR in the run's workspace) and makes an unstamped
    spawning call refuse; host_policy() / host_sandbox_kind() report it. Results carry
    sandbox: {kind, …} and a Sandbox: … line. Library use without a host policy is unchanged.

  • CI: a linux-sandbox job installs bubblewrap on Ubuntu and runs tests/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/completions accepts OpenAI's response_format on 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
    unusable response_format answers 400 invalid_response_format, response_format with tools
    answers 400 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 kit AfAbout) 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 (with about_version_facts, about_links) renders
    it; the kit's af-about CSS is vendored by python -m abstractcore.console.theme_sync.

  • POST /v1/audio/music accepts seconds (the clip length; same value as duration_s, which
    stays accepted). A non-positive length or two lengths that disagree answer 400. The sound
    output's seconds/duration_s and model reach 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 answers not_found.

Fixed

  • POST /v1/audio/music with task: "text_to_audio" returns the generated sound effect; it read
    only the music output and answered 500 for the sound output a sound effect produces.

  • POST /v1/chat/completions with an unknown provider, or a model the provider reports missing, answers 404 with code: "model_not_found" in the OpenAI error envelope instead of 500. The registry raises UnknownProviderError (a ModelNotFoundError and still a ValueError).

  • 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 requested seconds.

  • Console theme CSS re-synced from UI kit 0.8.0. The terminal console crate
    abstractcore-console is versioned 0.8.0 with this release.