Tags give the ability to mark specific points in history as being important
-
-
-
-
-
-
-
-
-
-
v0.14.0
270049da · ·v0.14.0 — track aicodebox v0.14.0, buffered SSE for tool/schema streaming stream:true for tool-calling and schema modes no longer returns 400 — the base computes the full answer non-streamed and replays it as a single-shot SSE stream (opening role chunk -> one content/tool_calls delta -> finish chunk -> [DONE]). Plain chat still streams incrementally as before. Genuine failures still surface as HTTP errors rather than a stream. PiAdapter unchanged — the buffered-SSE replay is entirely base-side. Base pinned to psyb0t/aicodebox:v0.14.0. Breaking for callers that special-cased the old 400. Minor bump. 49/49 tests green. Built against psyb0t/aicodebox:v0.14.0.
-
v0.13.0
8e6175d5 · ·v0.13.0 — track aicodebox v0.13.0, client-executed tool calling + schema OpenAI-style client-executed tool calling on /openai/v1/chat/completions, composable with response_format so an agentic multi-tool flow can end in a schema-validated structured JSON reply. A tool-call turn -> tool_calls / finish_reason=tool_calls (not schema-checked); the final-answer turn -> schema-validated JSON / finish_reason=stop (exhausted retries -> 422, crash -> 500). tools + stream:true -> 400. The OAI endpoint now defaults tools-off; opt in with x-aicodebox-no-tools: false or a tools-allowlist. PiAdapter unchanged — tool calling + schema composition are base-side. Base pinned to psyb0t/aicodebox:v0.13.0. Two new real end-to-end tool-calling tests against a live GLM model. Minor bump. 49/49 tests green. Built against psyb0t/aicodebox:v0.13.0.
-
v0.12.0
7af7f198 · ·v0.12.0 — track aicodebox v0.11.0, surface provider errors as HTTP 400 The base now returns HTTP 400 with the provider's error message when the upstream model rejects a request (content-safety filter / rate limit / auth failure), instead of a 200 with empty text that hid the failure. PiAdapter forwards the provider-error detail on RunResult.provider_error (pi reports it as stopReason=error + errorMessage on the assistant turn). Base image pinned to psyb0t/aicodebox:v0.11.0 (digest-pinned in the Dockerfile + Makefile). Breaking for callers that treated a 200-with-empty-text as success. Minor bump. 48/48 tests green. Built against psyb0t/aicodebox:v0.11.0.
-
v0.11.3
6a7aac36 · ·v0.11.3 — track aicodebox v0.10.1, periodic ephemeral workspace purge Base operational fix: the per-request /tmp/aicodebox/<uuid>/ cleanup runs in a `finally` block — which doesn't fire on SIGKILL / container restart / cleanup helper raise. v0.10.1 adds a periodic sweep every 10 minutes that removes ephemeral workspaces older than 1h. Bonus: purge_stale_uploads no longer silently swallows OSError. PiAdapter unchanged. /run callers unchanged. Patch bump — pure base-side operational fix tracking. 48/48 tests green. Built against psyb0t/aicodebox:v0.10.1.
-
v0.11.2
890a9874 · ·v0.11.2 — track aicodebox v0.10.0, cheap schema retries Base optimization: /openai/v1/chat/completions schema-mode retries no longer replay the full original prompt. When no x-aicodebox-workspace is set, the base allocates an ephemeral /tmp/aicodebox/<uuid>/ and session-continues the retry conversation — corrective prompts only. A 100k-token request needing 3 retries paid ~400k input tokens before v0.10.0; now ~100k + ~1.5k corrective overhead per retry. Cleaned up in finally after every response code path. PiAdapter unchanged. /run callers unchanged. 48/48 tests green. Patch bump — pure base-side optimization tracking. Built against psyb0t/aicodebox:v0.10.0.
-
v0.11.1
a96acd6c · ·v0.11.1 — track aicodebox v0.9.1, retry prompt carries original task Base bug fix: schema-mode retries (since v0.8.0) ran with no_continue=True for fresh-session correction, but the retry prompt didn't carry the original task — only the bad output + error + schema. Retry agents had no idea what they were correcting. v0.9.1 fixes this by re-stating the original task in each retry body. Failure semantics unchanged. PiAdapter contract unchanged. Patch bump — pure base bug-fix tracking. 48/48 tests green. Built against psyb0t/aicodebox:v0.9.1.
-
v0.11.0
fe2b7463 · ·v0.11.0 — track aicodebox v0.9.0, OAI response_format body field aicodebox v0.9.0 wired the OpenAI-standard ``response_format`` body field into /openai/v1/chat/completions, so stock OAI SDKs (LangChain, openai-python, LlamaIndex) can drive schema enforcement without our proprietary x-aicodebox-json-schema header. Surface mapping (body field): response_format.type = text → no schema response_format.type = json_object → permissive {"type":"object"} response_format.type = json_schema → response_format.json_schema.schema Failure semantics + the canonical re-serialized JSON content shape are identical to the header path. Body wins on conflict; header stays supported as a fallback. Base image - BASE_IMAGE bumped to psyb0t/aicodebox:v0.9.0 (Dockerfile + Makefile + tests/common.sh in lockstep). Tag pin — digest pending registry push. PiAdapter - Zero code changes. v0.9.0 was route-only. Tests - test_api_oai_reject_tools narrowed: tools[] still rejected; response_format=json_object no longer rejected (it's the happy path of the new test below). - response_format={type:json_object} happy-path test added. - response_format={type:json_schema,json_schema:{schema:{...}}} structured-outputs test added. - 48/48 green. Breaking change for /openai/v1/chat/completions callers - response_format={"type":"json_object"} now returns 200 with schema-validated JSON content (was 400). Callers using the 400 as a control-flow signal must update. Built against psyb0t/aicodebox:v0.9.0. Older base images are incompatible. -
v0.10.0
1b795cea · ·v0.10.0 — track aicodebox v0.8.3 + adapter logging + single-source versioning aicodebox v0.8.2 backfilled reconstruction-grade logging on the schema-mode path. v0.8.3 adopted single-source versioning. This pibox release pulls both into the project end-to-end. Highlights - BASE_IMAGE bumped to psyb0t/aicodebox:v0.8.3 (Dockerfile, Makefile, tests/common.sh in lockstep). Tag-only pin — digest pending registry push. - PiAdapter logging brought from zero to reconstruction-grade per ~/.claude/rules/06-logging.md. Decode errors, provider errors, schema bolt-on, build_argv decisions, parse_output summary — all logged. Security-aware: never logs tokens / secrets / full prompts / full schemas; only schema keys + truncated samples. - Single-source versioning per ~/.claude/rules/49-versioning.md: pyproject.toml is THE version; __init__.py reads via importlib.metadata; Makefile derives the docker tag from pyproject and tags both :v0.10.0 AND :latest. Eliminates the version-drift bug that had __version__ stuck at "0.1.0" across every release since v0.1.0 itself. - New Makefile targets: ``make version`` prints the derived tag. ``pull-base`` honors SKIP_BASE_PULL=1 for local-only base builds. PiAdapter functional contract is unchanged. No wire-level changes to /run / OAI / MCP / files-API. Tests: 46/46 green. Built against psyb0t/aicodebox:v0.8.3 (tag pin). Older base images are incompatible — the adapter's logging assumes the base's JSON formatter is the configured handler at startup.
-
v0.9.0
11e9b40a · ·v0.9.0 — track aicodebox v0.8.1, schema validation on OAI + per-attempt usage This release bumps the base image to aicodebox v0.8.1 and surfaces the two meaningful changes the v0.8.x stream brought: 1. /openai/v1/chat/completions with x-aicodebox-json-schema now ACTUALLY validates (v0.7.0 plumbed the header but never read result.parsed). Success → message.content is canonical re-serialized JSON, no fences. Schema-exhaustion → 422. Agent crash → 500. stream:true + schema header → 400. 2. Per-attempt breakdown on /run (.attempts) and OAI envelope (.aicodebox_attempts) — caller can bill per-attempt or debug which retry failed which way. Top-level .usage is summed across attempts so the billable total reflects every retry. Base image - BASE_IMAGE pinned to psyb0t/aicodebox:v0.8.1@sha256:3a234d49d348b3182897c781be6b364e6b5d17784c4b70ac12df132e066d6dac in both Dockerfile + Makefile. Digest pin guards against tag-rebuild drift — :latest and :v0.8.1 currently resolve to different image IDs on Docker Hub. PiAdapter - Zero code changes. The base widened RunResult with .attempts but the adapter only populates text/session_id/usage; the base writes the per-attempt array after run_with_json_retry. Tests - Three updates to surface the v0.8.x contract end-to-end through pibox: schema-mode .attempts shape on /run, canonical content + envelope vendor extension on OAI schema header, and the new stream+schema 400 rejection rule. Doc sync - README.md /run body field list rewritten — removes the long-stale ``outputFormat`` mention (gone at the base since v0.6.0) and documents the current jsonSchema-only contract + previously-missing ``includeRaw`` / ``async`` / ``fireAndForget`` knobs. - CHANGELOG.md added (full backfill from v0.1.0). Built against psyb0t/aicodebox:v0.8.1 (digest pinned). Older base images are incompatible — the new tests assert behavior that doesn't exist below aicodebox v0.8.0. -
v0.8.0
22ccabf5 · ·v0.8.0 — track aicodebox v0.7.0 x-aicodebox-* OAI headers aicodebox v0.7.0 exposed six more RunSpec knobs as custom headers on /openai/v1/chat/completions: x-aicodebox-json-schema flips internal output_format to json-verbose; schema-validates the assistant's final turn with up to 3 self-correction retries. x-aicodebox-resume adapter session id to resume. x-aicodebox-extra-args JSON array OR comma-separated string. x-aicodebox-timeout-seconds per-run wall-clock cap. x-aicodebox-tools-allowlist JSON array OR comma-separated string. x-aicodebox-no-tools 1/true/yes. PiAdapter - Zero code changes. All six fields were already on RunRequest and already consumed by build_argv. The v0.7.0 base only added route plumbing — the adapter contract was wide enough. Pibox gets the new OAI surface for free. Tests - Three new OAI header tests exercise the new surface end-to-end: schema header happy-path, schema header malformed-JSON rejection, and extra-args header round-trip in both CSV + JSON-array forms. Additive, no breaking changes. /run, MCP, and files-API surfaces are unchanged. The /v1/chat/completions stream:true path continues to emit the same per-token OAI SSE deltas. Built against psyb0t/aicodebox:latest (aicodebox v0.7.0+). Older base images are incompatible — the new tests assert headers that don't exist below aicodebox v0.7.0. -
v0.7.0
d8927cdf · ·v0.7.0 — align with aicodebox v0.6.0, jsonSchema is the only dial aicodebox v0.6.0 collapsed the v0.5.0 (verbose × jsonSchema) request matrix to one flag. The ``verbose`` field is gone from RunBody; ``jsonSchema`` alone now toggles between the lean and full response shapes: jsonSchema set → {runId, workspace, exitCode, text, json, events, sessionId, usage} (+ parseError, jsonRetries on validation failure) jsonSchema unset → {runId, workspace, exitCode, text} Pydantic's ``extra=ignore`` default means stale callers passing ``verbose=true`` silently drop the field — no 422 on the vestigial flag, just a lean text response. PiAdapter - No code changes. Server derives output_format=json-verbose for schema-set runs and text otherwise, then passes through to the adapter unchanged. build_argv, parse_output, parse_events, and parse_stream_event keep working as before. - Comment refresh only — adapter.validate() and parse_output() docstrings point at v0.6.0's schema-is-the-only-dial semantics. Streaming surfaces unchanged - /run is a one-shot endpoint — the .events array is buffered and returned in the final JSON payload, not streamed line-by-line. - /openai/v1/chat/completions with stream:true still emits real per-token SSE deltas (chat.completion.chunk frames terminated by [DONE]). PiAdapter.parse_stream_event continues to translate pi's message_update.text_delta events into canonical StreamEvent deltas. Breaking changes for callers of /run - Drop ``"verbose": true``. To get events + sessionId + usage, set ``"jsonSchema": {"type": "object"}`` (or any real schema you want validated). - Schema-set callers now also receive ``text``, ``events``, ``sessionId``, ``usage`` alongside ``json``. Built against psyb0t/aicodebox:latest (aicodebox v0.6.0+). Older base images are incompatible — the new test suite asserts the v0.6.0 response shape and the legacy-verbose silent-drop behavior.