Releases: Arthur-Ficial/apfel
v1.0.5
What's Changed
- a00aead build: regenerate man page during release-{patch,minor,major} (#103)
- 5c4796b feat(docs): add apfel(1) man page with drift-prevention (#103)
- 2b94659 docs: add design spec for apfel(1) man page (#103)
- ea942fb docs: replace all em/en dashes with plain hyphens
- 546cf8e docs: trim apfeller entry (drop duplicate apps repo link)
- 0ec66a6 docs: add apfeller to Community Projects
- d79a16c docs: mark nixpkgs install as pending upstream merge (install.md)
- 4aeaab0 docs: remove nix install from README, mark nixpkgs as pending in install doc
Install: brew install apfel
Upgrade: brew upgrade apfel
v1.0.4
What's Changed
- c700c78 docs: note stream_options.include_usage opt-in and json_object fence-strip
- cdebaad fix: gate streaming usage chunk on stream_options.include_usage and strip markdown fence from json_object output
- 2fd10f6 docs: add scripting-language guides (Python, Node.js, Ruby, PHP, Bash, Zsh, AppleScript, Swift, Perl, AWK)
- 37cd1be docs: add implementation plan for apfel language guides
- 255e3fd docs: add spec for apfel language guides (10 scripting languages)
- db9e464 scripts: add depends_on arch: :arm64 to homebrew formula template
Install: brew install apfel
Upgrade: brew upgrade apfel
v1.0.3
v1.0.2
What's Changed
- f41b26d refactor: extract pure SchemaIR + SchemaParser from SchemaConverter (#94) (#95)
- e82cdfd feat(routines): Phase 2+3 + bug-solver; security hardening (#89)
- 7fde82e feat(routines): Phase 1 - PR auto-review routine with hard guardrails (#89)
- e8ffe5e feat(release): automate nixpkgs apfel-ai version bumps (#86)
- ccf8e23 docs(demo): document optional global install pattern (#85)
- 2f13113 fix: make install creates missing PREFIX/bin, build cache stable (#84, #83)
- 5ce63d3 docs: mention tap for immediate access to latest release
- 38d5764 chore: remove tickets reference from CLAUDE.md
- 2cdb286 chore: remove closed-tickets directory
Install: brew install apfel
Upgrade: brew upgrade apfel
v1.0.1
What's Changed
- fbcd1f0 feat: add make test - single command for all tests
- 23670a1 fix: harden release process and make install PATH handling
- 5ceabd8 fix: read piped stdin in --stream mode (closes #82)
- b6c7c1d docs: clarify GitHub CI runs subset, local runs full suite
- 982268e fix: remove performance_test from CI (benchmark needs model)
- 1a66c65 fix: exclude mcp_timeout_env_var_works from CI (needs model)
- b2cfd29 fix: CI runs max possible tests without Apple Intelligence
- f4f0c0c fix: remove integration tests from CI (GitHub runners have no Apple Intelligence)
Install: brew install apfel
Upgrade: brew upgrade apfel
v1.0.0
apfel v1.0.0 - First Stable Release
The free AI already on your Mac. apfel exposes Apple's on-device FoundationModels as a UNIX CLI, OpenAI-compatible server, and interactive chat.
What's new in 1.0.0
- Stable release contract: CLI flags, exit codes, API endpoints, and response schemas are now semver-protected (see STABILITY.md)
- Full release qualification: 362 unit tests + 157 integration tests (7 suites) run before every release
- Security policy: SECURITY.md with vulnerability reporting and supported version policy
- homebrew-core:
brew install apfel- no tap needed - Proper semver: local builds no longer auto-bump versions
Release qualification
- 362 unit tests passed
- 157 integration tests passed (7 suites, 0 skipped)
- Full test run on Apple Silicon with Apple Intelligence
Install: brew install apfel
Upgrade: brew upgrade apfel
v0.9.18
Automated release for v0.9.18
v0.9.17
What's new
OpenAPI conformance tests
8 new integration tests that validate apfel's HTTP responses against the official OpenAI API spec (vendored from openai/openai-openapi). Uses openapi-core for runtime schema validation — no manual schema maintenance. Covers: non-streaming completions, streaming chunks, models list, tool-call responses, error responses, and JSON mode.
Fixed: missing nullable fields in API responses
The conformance tests immediately caught 3 spec-required fields apfel was omitting:
choices[].logprobs: null— OpenAI spec requires it even when not populatedmessage.refusal: null— OpenAI spec requires it in all assistant messagesmessage.content: null— OpenAI spec requires it even in tool-call responses where content is absent
These fields are now always emitted as null via custom Swift encode(to:) implementations that call encodeNil explicitly (Swift's synthesized Encodable omits nil optionals by default).
README: "The free AI already on your Mac."
The HN-winning, landing-page-proven framing is now the canonical opener in the README, the GitHub repo description, and CLAUDE.md. Also restored the full Demos section, rich MCP walkthrough, and OpenAI API compatibility table that were lost in the previous slim pass. New "The apfel tree" section listing the full ecosystem. #agentswelcome badge with probot logo.
Stats
- 362 unit + 216 integration = 578 tests, all green
- 0 regressions
v0.9.12
Automated release for v0.9.12
v0.9.10
Automated release for v0.9.10