Skip to content

Commit 3938810

Browse files
committed
Release AbstractGateway 0.2.21
1 parent 140eff3 commit 3938810

20 files changed

Lines changed: 1228 additions & 249 deletions

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [0.2.21] - 2026-05-29
11+
12+
### Added
13+
- Gateway artifact search/import/export endpoints for thin clients, including scoped artifact lookup by run, session, or all stored artifacts with modality, content type, text, and tag filters.
14+
- Capability discovery now advertises artifact search, workspace import, and workspace export descriptors in the shared thin-client contract.
15+
1016
### Changed
1117

1218
- Removed legacy compatibility install extras (`abstractgateway[http]`, `[server]`, `[multimodal]`, `[memory]`, `[voice]`, `[vision]`, `[telegram]`, `[visualflow]`, `[all]`, `[all-apple]`, `[all-gpu]`, `[server-nvidia]`). The supported install surface is now:
1319
- `pip install abstractgateway`
1420
- `pip install "abstractgateway[apple]"`
1521
- `pip install "abstractgateway[gpu]"`
22+
- Raised dependency floors to `AbstractRuntime[multimodal,mcp-worker]>=0.4.25` and `abstractagent>=0.3.9`.
23+
- KG memory readiness now treats a resolvable fresh persistent AbstractMemory store as available, so empty stores return empty query results instead of hiding Flow authoring surfaces.
24+
25+
### Fixed
26+
- Media model-residency discovery now keeps image editing distinct from image generation when Runtime/Core expose task-specific residency state.
1627

1728
## [0.2.20] - 2026-05-26
1829

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ python -m venv .venv
1111
source .venv/bin/activate
1212

1313
python -m pip install -U pip
14-
pip install -e ".[dev,http]"
14+
pip install -e ".[dev]"
1515
```
1616

1717
Run the test suite:

README.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,15 @@ Release images are published to GHCR. The default image is the light,
5656
portable server image:
5757

5858
```bash
59-
docker pull ghcr.io/lpalbou/abstractgateway-server:0.2.20
59+
docker pull ghcr.io/lpalbou/abstractgateway-server:0.2.21
6060
```
6161

6262
NVIDIA hosts can try the experimental full GPU image when local
6363
vLLM/HuggingFace/Diffusers engines are wanted. This image is published
6464
best-effort until it has a real CUDA build and smoke gate:
6565

6666
```bash
67-
docker pull ghcr.io/lpalbou/abstractgateway-server-nvidia:0.2.20
67+
docker pull ghcr.io/lpalbou/abstractgateway-server-nvidia:0.2.21
6868
```
6969

7070
The image installs the base `abstractgateway` package: HTTP server,
@@ -86,7 +86,7 @@ docker run --rm --name abstractgateway-server \
8686
-e OPENAI_COMPATIBLE_BASE_URL="http://host.docker.internal:1234/v1" \
8787
-v "$PWD/runtime/gateway:/data/gateway" \
8888
-v "$PWD/flows/bundles:/data/flows:ro" \
89-
ghcr.io/lpalbou/abstractgateway-server:0.2.20
89+
ghcr.io/lpalbou/abstractgateway-server:0.2.21
9090
```
9191

9292
Configure framework model defaults through execution-host capability routes:
@@ -131,6 +131,8 @@ Current direct Gateway APIs:
131131
- `GET /api/gateway/audio/music/models`
132132
- `GET /api/gateway/vision/provider_models`
133133
- `GET /api/gateway/vision/models`
134+
- `/api/gateway/artifacts/search` cross-run/session/run artifact search with
135+
modality, content-type, text, and tag filters
134136
- `/api/gateway/prompt_cache/*` provider/model operator controls
135137
- `/api/gateway/prompt_cache/saved|save|load` Runtime-backed host-local export/import admin aliases
136138
- `/api/gateway/sessions/{session_id}/prompt_cache/*` session lifecycle controls
@@ -206,7 +208,9 @@ pip install abstractgateway
206208
KG memory nodes use Gateway's memory resolver. The default durable/vector
207209
backend is LanceDB; `memory` is process-local dev/test storage, and `sqlite` is
208210
structured-only when the installed AbstractMemory build exposes
209-
`SQLiteTripleStore`.
211+
`SQLiteTripleStore`. A fresh persistent store is still reported as available
212+
when the backend resolves; empty queries return empty results instead of hiding
213+
KG authoring surfaces.
210214

211215
Gateway has a first-class config helper:
212216

docs/api.md

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,70 @@ curl -N -H "$AUTH" "$BASE_URL/api/gateway/runs/<run_id>/ledger/stream?after=0"
116116

117117
Evidence: `src/abstractgateway/routes/gateway.py` (`stream_ledger`).
118118

119+
## Artifacts and filesystem handoff
120+
121+
Gateway artifacts are the cross-package representation for files, media, and
122+
large payloads. Thin clients should pass artifact refs across runs instead of
123+
raw bytes or local paths:
124+
125+
```json
126+
{
127+
"$artifact": "abc123",
128+
"artifact_id": "abc123",
129+
"run_id": "session_memory_sess-1",
130+
"content_type": "image/png",
131+
"filename": "input.png"
132+
}
133+
```
134+
135+
List run artifacts:
136+
137+
```bash
138+
curl -sS -H "$AUTH" "$BASE_URL/api/gateway/runs/<run_id>/artifacts"
139+
```
140+
141+
List artifacts visible to a session:
142+
143+
```bash
144+
curl -sS -H "$AUTH" "$BASE_URL/api/gateway/sessions/sess-1/artifacts"
145+
```
146+
147+
Search artifacts across Gateway storage:
148+
149+
```bash
150+
curl -sS -H "$AUTH" \
151+
"$BASE_URL/api/gateway/artifacts/search?scope=all&modality=image&query=logo&tags=pin_id=image"
152+
```
153+
154+
`scope` can be `all`, `session`, or `run`. Use `session_id` with
155+
`scope=session` and `run_id` with `scope=run`; omit both for `scope=all`.
156+
`modality` filters normalized artifact type (`image`, `audio`, `video`,
157+
`text`, `document`, `music`, `voice`, or `artifact`), `content_type` accepts
158+
exact values or prefixes such as `image/*`, and `tags` accepts either a JSON
159+
object or comma-separated `key=value` filters.
160+
161+
Import a server workspace path into a session artifact:
162+
163+
```bash
164+
curl -sS -H "$AUTH" -H "Content-Type: application/json" \
165+
-d '{"session_id":"sess-1","source":{"kind":"workspace_path","path":"inputs/photo.png"},"pin_id":"image"}' \
166+
"$BASE_URL/api/gateway/artifacts/import"
167+
```
168+
169+
Export an artifact back into the server workspace:
170+
171+
```bash
172+
curl -sS -H "$AUTH" -H "Content-Type: application/json" \
173+
-d '{"path":"outputs/photo.png","create_parent_dirs":true,"overwrite":false}' \
174+
"$BASE_URL/api/gateway/runs/<run_id>/artifacts/<artifact_id>/export"
175+
```
176+
177+
Import and export use the same Gateway workspace policy as file helpers:
178+
workspace roots, mounted roots, ignored paths, and size limits are enforced on
179+
the server. Browser-local files should be uploaded through
180+
`POST /api/gateway/attachments/upload`; browser-local file paths are not
181+
interpreted as Gateway workspace paths.
182+
119183
## Durable commands (`POST /api/gateway/commands`)
120184

121185
Commands are appended to a durable inbox and applied asynchronously by the runner.
@@ -206,7 +270,9 @@ It also includes a versioned thin-client contract:
206270
- `capabilities.contracts.version`: currently `1`
207271
- `capabilities.contracts.common`: shared run start/list/summary/input/history,
208272
ledger, artifact, attachment, workspace, discovery, and provider prompt-cache
209-
controls
273+
controls. `common.artifacts` includes run listing/content, session artifact
274+
listing, artifact search, workspace import, and workspace export descriptors
275+
when available.
210276
- `capabilities.contracts.common.readiness`: compact Gateway-owned
211277
`gateway_surface_readiness_v1` summary derived from the shared endpoint/media/
212278
residency descriptors
@@ -380,6 +446,11 @@ when the installed AbstractMemory build exposes `SQLiteTripleStore`. Semantic
380446
`embedding.text` route; SQLite returns a clear 400 instead of pretending to
381447
support semantic recall.
382448

449+
Capability discovery reports KG memory as available when AbstractMemory is
450+
installed and the configured backend can be resolved. A fresh persistent store
451+
does not need to exist yet; empty-store structured queries return an empty
452+
result rather than making Flow authoring nodes unavailable.
453+
383454
## Prompt-cache control plane (operator API)
384455

385456
The gateway exposes prompt-cache operator endpoints under `/api/gateway/prompt_cache/*`.

docs/configuration.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ Optional extras (see `pyproject.toml`):
1616
- `abstractgateway[dev]`: local dev/test deps
1717

1818
Default dependency floors:
19-
- `AbstractRuntime[multimodal,mcp-worker]>=0.4.24`
20-
- `abstractagent>=0.3.8`
19+
- `AbstractRuntime[multimodal,mcp-worker]>=0.4.25`
20+
- `abstractagent>=0.3.9`
2121
- `AbstractMemory[lancedb]>=0.2.6`
2222

2323
Gateway's KG resolver targets AbstractMemory's TripleStore API. It does not use
@@ -92,7 +92,10 @@ Backend behavior:
9292

9393
The same resolver is used for bundle `memory_kg_*` nodes and
9494
`POST /api/gateway/kg/query`. Capability discovery reports memory backend,
95-
persistence, vector support, and embedder status.
95+
persistence, vector support, and embedder status. A missing on-disk store is not
96+
an unavailable state by itself: when AbstractMemory is installed and the backend
97+
resolves, fresh stores are authoring-ready and structured queries simply return
98+
no matches until assertions are written.
9699

97100
### Runner tuning (advanced)
98101

@@ -216,7 +219,7 @@ does not implicitly install them.
216219
- `ABSTRACTGATEWAY_VOICE_TTS_ENGINE` / `ABSTRACTGATEWAY_VOICE_STT_ENGINE`: Gateway-scoped voice engine settings. Legacy `ABSTRACTVOICE_*` names are still accepted by the lower package.
217220
- `ABSTRACTGATEWAY_VOICE_TTS_MODEL` / `ABSTRACTGATEWAY_VOICE_STT_MODEL`: Gateway-scoped TTS/STT model defaults.
218221
- `ABSTRACTGATEWAY_VOICE_REMOTE_BASE_URL` / `ABSTRACTGATEWAY_VOICE_REMOTE_API_KEY`: remote voice endpoint used by AbstractVoice.
219-
- `GET /api/gateway/discovery/capabilities`: reports installed packages plus AbstractCore capability plugins for `voice`, `audio`, `vision`, and `music`; also returns `capabilities.contracts.version=1` with thin-client feature gates for AbstractFlow, AbstractAssistant, AbstractCode, shared run input/history endpoints, direct voice/audio/image/video/music endpoints, workflow-backed image/video generation, and provider/session prompt-cache controls
222+
- `GET /api/gateway/discovery/capabilities`: reports installed packages plus AbstractCore capability plugins for `voice`, `audio`, `vision`, and `music`; also returns `capabilities.contracts.version=1` with thin-client feature gates for AbstractFlow, AbstractAssistant, AbstractCode, shared run input/history endpoints, artifact search/import/export, direct voice/audio/image/video/music endpoints, workflow-backed image/video generation, and provider/session prompt-cache controls
220223
- `GET /api/gateway/voice/voices`: proxies AbstractCore `/v1/audio/voices` when `ABSTRACTCORE_SERVER_BASE_URL` is configured; otherwise returns static Gateway/env voice descriptors.
221224
- `GET /api/gateway/audio/speech/models`: proxies AbstractCore `/v1/audio/speech/models` when configured.
222225
- `GET /api/gateway/audio/transcriptions/models`: proxies AbstractCore `/v1/audio/transcriptions/models` when configured.

docs/deployment.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ Release images are published to GHCR. The default image is the light,
1111
portable server image:
1212

1313
```bash
14-
docker pull ghcr.io/lpalbou/abstractgateway-server:0.2.20
14+
docker pull ghcr.io/lpalbou/abstractgateway-server:0.2.21
1515
```
1616

1717
NVIDIA hosts can try the experimental full GPU image when local
1818
vLLM/HuggingFace/Diffusers engines are wanted. This image is published
1919
best-effort until it has a real CUDA build and smoke gate:
2020

2121
```bash
22-
docker pull ghcr.io/lpalbou/abstractgateway-server-nvidia:0.2.20
22+
docker pull ghcr.io/lpalbou/abstractgateway-server-nvidia:0.2.21
2323
```
2424

2525
The default image installs the base `abstractgateway` package, which includes:
@@ -58,7 +58,7 @@ docker run --rm --name abstractgateway-server \
5858
-e OPENAI_COMPATIBLE_BASE_URL="http://model-runner.docker.internal/engines/v1" \
5959
-v "$PWD/runtime/gateway:/data/gateway" \
6060
-v "$PWD/flows/bundles:/data/flows:ro" \
61-
ghcr.io/lpalbou/abstractgateway-server:0.2.20
61+
ghcr.io/lpalbou/abstractgateway-server:0.2.21
6262
```
6363

6464
Set the execution-host text route separately:
@@ -180,7 +180,7 @@ Before a version is published to PyPI, build from the checkout:
180180

181181
```bash
182182
ABSTRACTGATEWAY_INSTALL_MODE=local \
183-
ABSTRACTGATEWAY_IMAGE_TAG=0.2.20-local \
183+
ABSTRACTGATEWAY_IMAGE_TAG=0.2.21-local \
184184
docker compose -f docker/abstractgateway-server/compose.yml up -d --build
185185
```
186186

docs/faq.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,11 @@ Keep the default `lancedb` backend for durable vector-capable memory, use
320320
`ABSTRACTGATEWAY_MEMORY_STORE_BACKEND=sqlite` only when your installed
321321
AbstractMemory build exposes `SQLiteTripleStore`.
322322

323+
A fresh persistent store does not make KG memory unavailable. Capability
324+
discovery treats the surface as available once AbstractMemory is installed and
325+
the configured backend resolves; empty structured queries return empty results
326+
until a flow asserts triples.
327+
323328
Evidence: memory KG wiring in `src/abstractgateway/memory_store.py` and
324329
`src/abstractgateway/hosts/bundle_host.py`.
325330

docs/getting-started.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,13 +141,13 @@ docker run --rm -p 127.0.0.1:8080:8080 \
141141
-e ABSTRACTGATEWAY_AUTH_TOKEN="$ABSTRACTGATEWAY_AUTH_TOKEN" \
142142
-v "$PWD/runtime/gateway:/data/gateway" \
143143
-v "$PWD/flows/bundles:/data/flows:ro" \
144-
ghcr.io/lpalbou/abstractgateway-server:0.2.20
144+
ghcr.io/lpalbou/abstractgateway-server:0.2.21
145145
```
146146

147147
See [deployment.md](./deployment.md) for Compose, provider keys, and image
148148
customization.
149149

150-
NVIDIA hosts can try `ghcr.io/lpalbou/abstractgateway-server-nvidia:0.2.20`
150+
NVIDIA hosts can try `ghcr.io/lpalbou/abstractgateway-server-nvidia:0.2.21`
151151
with the compose overlay in `docker/abstractgateway-server/compose.nvidia.yml`.
152152
It is experimental until a real CUDA build/smoke gate is part of release
153153
validation.

0 commit comments

Comments
 (0)