abstractframework 0.2.0__tar.gz → 0.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. {abstractframework-0.2.0 → abstractframework-0.2.1}/CHANGELOG.md +31 -1
  2. {abstractframework-0.2.0/abstractframework.egg-info → abstractframework-0.2.1}/PKG-INFO +4 -4
  3. {abstractframework-0.2.0 → abstractframework-0.2.1}/README.md +2 -2
  4. {abstractframework-0.2.0 → abstractframework-0.2.1}/abstractframework/__init__.py +2 -2
  5. {abstractframework-0.2.0 → abstractframework-0.2.1/abstractframework.egg-info}/PKG-INFO +4 -4
  6. {abstractframework-0.2.0 → abstractframework-0.2.1}/abstractframework.egg-info/requires.txt +1 -1
  7. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/api.md +1 -1
  8. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/faq.md +7 -0
  9. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/install.md +32 -2
  10. {abstractframework-0.2.0 → abstractframework-0.2.1}/llms-full.txt +47 -10
  11. {abstractframework-0.2.0 → abstractframework-0.2.1}/llms.txt +1 -1
  12. {abstractframework-0.2.0 → abstractframework-0.2.1}/pyproject.toml +2 -2
  13. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/install.sh +71 -4
  14. {abstractframework-0.2.0 → abstractframework-0.2.1}/tests/test_install_profiles.py +144 -0
  15. {abstractframework-0.2.0 → abstractframework-0.2.1}/LICENSE +0 -0
  16. {abstractframework-0.2.0 → abstractframework-0.2.1}/MANIFEST.in +0 -0
  17. {abstractframework-0.2.0 → abstractframework-0.2.1}/abstractframework/__main__.py +0 -0
  18. {abstractframework-0.2.0 → abstractframework-0.2.1}/abstractframework/cli.py +0 -0
  19. {abstractframework-0.2.0 → abstractframework-0.2.1}/abstractframework/install_manifest.py +0 -0
  20. {abstractframework-0.2.0 → abstractframework-0.2.1}/abstractframework/py.typed +0 -0
  21. {abstractframework-0.2.0 → abstractframework-0.2.1}/abstractframework.egg-info/SOURCES.txt +0 -0
  22. {abstractframework-0.2.0 → abstractframework-0.2.1}/abstractframework.egg-info/dependency_links.txt +0 -0
  23. {abstractframework-0.2.0 → abstractframework-0.2.1}/abstractframework.egg-info/entry_points.txt +0 -0
  24. {abstractframework-0.2.0 → abstractframework-0.2.1}/abstractframework.egg-info/top_level.txt +0 -0
  25. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/README.md +0 -0
  26. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0001-layered-architecture.md +0 -0
  27. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0002-effect-system-design.md +0 -0
  28. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0003-tool-system-architecture.md +0 -0
  29. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0004-observability-strategy.md +0 -0
  30. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0005-memory-architecture.md +0 -0
  31. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0006-durable-tool-execution.md +0 -0
  32. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0007-active-context-and-memory-provenance.md +0 -0
  33. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0008-token-terminology.md +0 -0
  34. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0009-connected-memory-recall-and-provenance.md +0 -0
  35. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0010-runtime-owned-node-traces.md +0 -0
  36. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0011-ledger-subscriptions-and-event-bridge.md +0 -0
  37. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0012-portable-workflowartifact.md +0 -0
  38. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0013-durable-run-controls-pause-resume-cancel.md +0 -0
  39. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0014-runtime-authority-timeouts.md +0 -0
  40. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0015-execution-targets-and-remote-tool-workers.md +0 -0
  41. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0016-tool-calling-pipeline-and-responsibility-boundaries.md +0 -0
  42. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0017-host-ui-events-and-durable-prompts.md +0 -0
  43. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0018-durable-run-gateway-and-remote-host-control-plane.md +0 -0
  44. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0019-testing-strategy-and-levels.md +0 -0
  45. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0020-agent-host-pool-and-orchestrator-placement.md +0 -0
  46. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0021-deployment-topologies-and-supported-scenarios.md +0 -0
  47. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0022-orchestrator-host-and-runtime-daemonization.md +0 -0
  48. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0023-file-attachment-path-resolution-and-authorization.md +0 -0
  49. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0024-attachment-placeholders-and-compaction-invariants.md +0 -0
  50. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0025-kg-entity-normalization-and-dedup.md +0 -0
  51. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0026-truncation-policy-and-contract.md +0 -0
  52. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0027-timeout-policy-and-contract.md +0 -0
  53. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0028-capabilities-plugins-and-library-framework-modes.md +0 -0
  54. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0029-permissive-dependency-and-licensing-policy.md +0 -0
  55. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0030-security-test-fixtures-and-isolation.md +0 -0
  56. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0031-workflow-llm-routing-overrides-provider-model-and-base-url.md +0 -0
  57. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0032-package-dependency-boundaries-and-gateway-first-apps.md +0 -0
  58. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0033-install-profiles-config-entrypoints-and-server-boundaries.md +0 -0
  59. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0034-framework-release-sequence-and-gates.md +0 -0
  60. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0035-capability-routing-defaults.md +0 -0
  61. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0036-artifact-descriptor-contract.md +0 -0
  62. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0037-hosted-file-source-contract-and-workspacepath-authority.md +0 -0
  63. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/0038-script-bootstrap-and-gateway-console-install.md +0 -0
  64. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/README.md +0 -0
  65. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/memory-recall-levels.md +0 -0
  66. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/reorg/001_music_as_capability_plugin_via_acestep_api.md +0 -0
  67. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/reorg/002_abstractmusic_inprocess_local_generation.md +0 -0
  68. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/reorg/003_abstractmusic_acestep_v15_backend_source_strategy.md +0 -0
  69. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/reorg/004_smartnote_thin_client_architecture.md +0 -0
  70. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/reorg/005_smartnote_artifact_first_cards.md +0 -0
  71. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/reorg/2026-02-21_gateway-first-assistant.md +0 -0
  72. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/reorg/2026-02-21_installer_manager_strategy.md +0 -0
  73. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/adr/reorg/2026-02-21_macos_installer_manager.md +0 -0
  74. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/architecture.md +0 -0
  75. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/claude/README.md +0 -0
  76. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/claude/abstractframework-fit.md +0 -0
  77. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/claude/claude-skills-overview.md +0 -0
  78. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/claude/claude-skills-sources.md +0 -0
  79. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/claude/claude-skills-top-20.md +0 -0
  80. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/comparisons/README.md +0 -0
  81. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/configuration.md +0 -0
  82. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/getting-started.md +0 -0
  83. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/glossary.md +0 -0
  84. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/LANDING.md +0 -0
  85. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/README.md +0 -0
  86. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/agent-skills.md +0 -0
  87. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/agent-vs-llm.md +0 -0
  88. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/agora-workflow-agent.md +0 -0
  89. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/apple-local-gateway-flow.md +0 -0
  90. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/capability-plugins.md +0 -0
  91. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/capability-routing-defaults.md +0 -0
  92. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/deployment-iphone.md +0 -0
  93. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/deployment-topologies.md +0 -0
  94. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/deployment-web.md +0 -0
  95. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/email-integration.md +0 -0
  96. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/event-inbox-agent.md +0 -0
  97. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/flow-and-kg-memory.md +0 -0
  98. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/gateway-security.md +0 -0
  99. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/headless-swarm.md +0 -0
  100. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/process-manager-env-vars.md +0 -0
  101. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/prompt-caching.md +0 -0
  102. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/runtime-artifacts.md +0 -0
  103. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/runtime-scope.md +0 -0
  104. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/scheduled-workflows.md +0 -0
  105. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/summoned-entities.md +0 -0
  106. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/telegram-integration.md +0 -0
  107. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/guide/workflow-bundles.md +0 -0
  108. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/installers/README.md +0 -0
  109. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/installers/components.md +0 -0
  110. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/installers/implementation-plan.md +0 -0
  111. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/installers/operations-and-support.md +0 -0
  112. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/installers/release-and-manifest.md +0 -0
  113. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/installers/security-and-os-blocks.md +0 -0
  114. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/installers/strategy.md +0 -0
  115. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/installers/user-journeys.md +0 -0
  116. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/prompts/agora-collaboration.md +0 -0
  117. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/scenarios/README.md +0 -0
  118. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/scenarios/email-inbox-agent.md +0 -0
  119. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/scenarios/gateway-first-local-dev.md +0 -0
  120. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/scenarios/offline-coding-assistant.md +0 -0
  121. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/scenarios/phone-thin-client.md +0 -0
  122. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/scenarios/specialized-agent-flow.md +0 -0
  123. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/scenarios/telegram-permanent-contact.md +0 -0
  124. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/scenarios/workflow-bundle-lifecycle.md +0 -0
  125. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/skills/README.md +0 -0
  126. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/skills/abstractframework-agent-skills-fit.md +0 -0
  127. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/skills/abstractframework-architecture-deep-dive.md +0 -0
  128. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/skills/agent-skills-ecosystem-scan.md +0 -0
  129. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/skills/agent-skills-ecosystem-sources.md +0 -0
  130. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/skills/claude-agent-skills-overview.md +0 -0
  131. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/skills/claude-agent-skills-sources.md +0 -0
  132. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/skills/claude-agent-skills-top-20.md +0 -0
  133. {abstractframework-0.2.0 → abstractframework-0.2.1}/docs/workspace-scripts.md +0 -0
  134. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/af-local.sh +0 -0
  135. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/af.sh +0 -0
  136. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/agora_react_flow_smoke.py +0 -0
  137. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/assistant-local.sh +0 -0
  138. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/assistant.sh +0 -0
  139. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/build.sh +0 -0
  140. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/cache_probe_local_backends.py +0 -0
  141. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/cache_steer_repl.py +0 -0
  142. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/clone.sh +0 -0
  143. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/code-local.sh +0 -0
  144. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/code.sh +0 -0
  145. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/commit.sh +0 -0
  146. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/console-local.sh +0 -0
  147. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/console.sh +0 -0
  148. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/core_operator_drive.py +0 -0
  149. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/deps.sh +0 -0
  150. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/entity-local.sh +0 -0
  151. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/entity.sh +0 -0
  152. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/event_inbox_flow_smoke.py +0 -0
  153. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/flow-local.sh +0 -0
  154. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/flow.sh +0 -0
  155. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/gateway-flow-local.sh +0 -0
  156. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/gateway-flow.sh +0 -0
  157. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/gateway-local.sh +0 -0
  158. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/gateway.sh +0 -0
  159. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/gen_llms_full.py +0 -0
  160. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/headless_fleet_bridge.py +0 -0
  161. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/headless_fleet_demo.py +0 -0
  162. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/headless_steer_repl.py +0 -0
  163. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/lib/af_inventory.py +0 -0
  164. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/lib/af_stack.sh +0 -0
  165. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/lib/af_supervisor.sh +0 -0
  166. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/lib/apps_common.sh +0 -0
  167. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/lib/gateway_user_tokens.py +0 -0
  168. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/lib/repo_groups.sh +0 -0
  169. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/meet_castor.sh +0 -0
  170. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/observer-local.sh +0 -0
  171. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/observer.sh +0 -0
  172. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/plan_walkthrough.py +0 -0
  173. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/pull.sh +0 -0
  174. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/push.sh +0 -0
  175. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/spawn_demo_agent.sh +0 -0
  176. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/start-local.sh +0 -0
  177. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/start.sh +0 -0
  178. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/status.sh +0 -0
  179. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/steer_repl.py +0 -0
  180. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/tests/test_af_supervisor.sh +0 -0
  181. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/tests/test_inventory.sh +0 -0
  182. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/tests/test_repo_scripts.sh +0 -0
  183. {abstractframework-0.2.0 → abstractframework-0.2.1}/scripts/visit_resume_cache_probe.py +0 -0
  184. {abstractframework-0.2.0 → abstractframework-0.2.1}/setup.cfg +0 -0
@@ -2,7 +2,37 @@
2
2
 
3
3
  All notable changes to AbstractFramework will be documented in this file.
4
4
 
5
- ## [Unreleased]
5
+ ## [0.2.1] - 2026-09-24
6
+
7
+ Patch release: the one-line install works on a machine without a C compiler, and the
8
+ meta-package pins abstractvoice 0.11.4. Everything else is unchanged from 0.2.0.
9
+
10
+ ### Changed
11
+
12
+ - **abstractvoice 0.11.4** (was 0.11.3). It takes voice activity detection from
13
+ `webrtcvad-wheels`, which ships prebuilt wheels for macOS arm64, Linux and Windows, instead
14
+ of `webrtcvad`, which is source-only on PyPI and needs a compiler. This is the pin that made
15
+ `pip install abstractframework[apple]` build `webrtcvad` from source. The other pins are
16
+ unchanged: abstractgateway 0.3.0, abstractcore 2.14.0, AbstractRuntime 0.4.33.
17
+
18
+ ### Fixed
19
+
20
+ - **One-line install needs no compiler.** On a Mac without Xcode Command Line Tools the gateway
21
+ install failed building `webrtcvad` from source, and `llama-cpp-python`,
22
+ `stable-diffusion-cpp-python` and `aec-audio-processing` would have failed next. `install.sh` and
23
+ `install.ps1` now run `uv tool install` with `--with 'webrtcvad-wheels>=2.0.14'`, an overrides
24
+ file (`uv-overrides.txt` in the gateway data directory) that drops `webrtcvad`, keeps `vllm` to
25
+ Linux and leaves out the three compiled extras, plus `--no-build-package` for those packages so
26
+ a missing wheel fails fast instead of starting a compiler. The install runs from the data
27
+ directory and names the file relatively, because uv splits an `--overrides` value at whitespace
28
+ (`Application Support`). On macOS, Linux and Windows the preflight says when no compiler is
29
+ present, and that this is fine; the summary says what was skipped.
30
+
31
+ ### Added
32
+
33
+ - **`--full` (Windows: `-Full`)** keeps the compiled extras (llama.cpp GGUF, stable-diffusion.cpp,
34
+ echo cancellation) and builds them from source. It needs a C/C++ compiler and stops before
35
+ installing when none is found.
6
36
 
7
37
  ## [0.2.0] - 2026-09-23
8
38
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstractframework
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: Unified installer and documentation hub for the AbstractFramework ecosystem
5
5
  Author-email: Laurent-Philippe Albou <contact@abstractframework.ai>
6
6
  License: MIT
@@ -30,7 +30,7 @@ Requires-Dist: AbstractRuntime==0.4.33
30
30
  Requires-Dist: abstractagent==0.3.13
31
31
  Requires-Dist: AbstractMemory==0.3.0
32
32
  Requires-Dist: abstractsemantics==0.0.5
33
- Requires-Dist: abstractvoice==0.11.3
33
+ Requires-Dist: abstractvoice==0.11.4
34
34
  Requires-Dist: abstractvision==0.3.29
35
35
  Requires-Dist: abstractmusic==0.1.15
36
36
  Provides-Extra: apple
@@ -300,7 +300,7 @@ pip install "abstractframework[gpu]"
300
300
  | Apple | `pip install "abstractframework[apple]"` | macOS 14+ on Apple Silicon | 3.10–3.13 (F5-TTS voice cloning needs 3.11+) |
301
301
  | GPU | `pip install "abstractframework[gpu]"` | Linux / Windows with a CUDA or ROCm GPU | 3.10–3.13 (F5-TTS voice cloning needs 3.11+) |
302
302
 
303
- ### Release matrix (abstractframework 0.2.0)
303
+ ### Release matrix (abstractframework 0.2.1)
304
304
 
305
305
  `abstractframework` pins every Python package with `==`, so one version of the
306
306
  meta-package always installs the same stack. The browser apps and Rust tools are
@@ -316,7 +316,7 @@ and tested together.
316
316
  | PyPI | `abstractagent` | 0.3.13 |
317
317
  | PyPI | `AbstractMemory` | 0.3.0 |
318
318
  | PyPI | `abstractsemantics` | 0.0.5 |
319
- | PyPI | `abstractvoice` | 0.11.3 |
319
+ | PyPI | `abstractvoice` | 0.11.4 |
320
320
  | PyPI | `abstractvision` | 0.3.29 |
321
321
  | PyPI | `abstractmusic` | 0.1.15 |
322
322
  | npm | `@abstractframework/flow` | 0.3.20 |
@@ -257,7 +257,7 @@ pip install "abstractframework[gpu]"
257
257
  | Apple | `pip install "abstractframework[apple]"` | macOS 14+ on Apple Silicon | 3.10–3.13 (F5-TTS voice cloning needs 3.11+) |
258
258
  | GPU | `pip install "abstractframework[gpu]"` | Linux / Windows with a CUDA or ROCm GPU | 3.10–3.13 (F5-TTS voice cloning needs 3.11+) |
259
259
 
260
- ### Release matrix (abstractframework 0.2.0)
260
+ ### Release matrix (abstractframework 0.2.1)
261
261
 
262
262
  `abstractframework` pins every Python package with `==`, so one version of the
263
263
  meta-package always installs the same stack. The browser apps and Rust tools are
@@ -273,7 +273,7 @@ and tested together.
273
273
  | PyPI | `abstractagent` | 0.3.13 |
274
274
  | PyPI | `AbstractMemory` | 0.3.0 |
275
275
  | PyPI | `abstractsemantics` | 0.0.5 |
276
- | PyPI | `abstractvoice` | 0.11.3 |
276
+ | PyPI | `abstractvoice` | 0.11.4 |
277
277
  | PyPI | `abstractvision` | 0.3.29 |
278
278
  | PyPI | `abstractmusic` | 0.1.15 |
279
279
  | npm | `@abstractframework/flow` | 0.3.20 |
@@ -10,7 +10,7 @@ Most implementation functionality still lives in component projects.
10
10
 
11
11
  from __future__ import annotations
12
12
 
13
- __version__ = "0.2.0"
13
+ __version__ = "0.2.1"
14
14
  __author__ = "Laurent-Philippe Albou"
15
15
  __license__ = "MIT"
16
16
 
@@ -21,7 +21,7 @@ RELEASE_VERSIONS: dict[str, str] = {
21
21
  "abstractgateway": "0.3.0",
22
22
  "abstractmemory": "0.3.0",
23
23
  "abstractsemantics": "0.0.5",
24
- "abstractvoice": "0.11.3",
24
+ "abstractvoice": "0.11.4",
25
25
  "abstractvision": "0.3.29",
26
26
  "abstractmusic": "0.1.15",
27
27
  "abstractassistant": "0.5.0",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstractframework
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: Unified installer and documentation hub for the AbstractFramework ecosystem
5
5
  Author-email: Laurent-Philippe Albou <contact@abstractframework.ai>
6
6
  License: MIT
@@ -30,7 +30,7 @@ Requires-Dist: AbstractRuntime==0.4.33
30
30
  Requires-Dist: abstractagent==0.3.13
31
31
  Requires-Dist: AbstractMemory==0.3.0
32
32
  Requires-Dist: abstractsemantics==0.0.5
33
- Requires-Dist: abstractvoice==0.11.3
33
+ Requires-Dist: abstractvoice==0.11.4
34
34
  Requires-Dist: abstractvision==0.3.29
35
35
  Requires-Dist: abstractmusic==0.1.15
36
36
  Provides-Extra: apple
@@ -300,7 +300,7 @@ pip install "abstractframework[gpu]"
300
300
  | Apple | `pip install "abstractframework[apple]"` | macOS 14+ on Apple Silicon | 3.10–3.13 (F5-TTS voice cloning needs 3.11+) |
301
301
  | GPU | `pip install "abstractframework[gpu]"` | Linux / Windows with a CUDA or ROCm GPU | 3.10–3.13 (F5-TTS voice cloning needs 3.11+) |
302
302
 
303
- ### Release matrix (abstractframework 0.2.0)
303
+ ### Release matrix (abstractframework 0.2.1)
304
304
 
305
305
  `abstractframework` pins every Python package with `==`, so one version of the
306
306
  meta-package always installs the same stack. The browser apps and Rust tools are
@@ -316,7 +316,7 @@ and tested together.
316
316
  | PyPI | `abstractagent` | 0.3.13 |
317
317
  | PyPI | `AbstractMemory` | 0.3.0 |
318
318
  | PyPI | `abstractsemantics` | 0.0.5 |
319
- | PyPI | `abstractvoice` | 0.11.3 |
319
+ | PyPI | `abstractvoice` | 0.11.4 |
320
320
  | PyPI | `abstractvision` | 0.3.29 |
321
321
  | PyPI | `abstractmusic` | 0.1.15 |
322
322
  | npm | `@abstractframework/flow` | 0.3.20 |
@@ -5,7 +5,7 @@ AbstractRuntime==0.4.33
5
5
  abstractagent==0.3.13
6
6
  AbstractMemory==0.3.0
7
7
  abstractsemantics==0.0.5
8
- abstractvoice==0.11.3
8
+ abstractvoice==0.11.4
9
9
  abstractvision==0.3.29
10
10
  abstractmusic==0.1.15
11
11
 
@@ -57,7 +57,7 @@ The response type returned by `llm.generate(...)`.
57
57
 
58
58
  Dictionary mapping each ecosystem package name to the pinned version for this release. In 0.2.0:
59
59
  `abstractcore` 2.14.0, `abstractruntime` 0.4.33, `abstractagent` 0.3.13, `abstractgateway` 0.3.0,
60
- `abstractmemory` 0.3.0, `abstractsemantics` 0.0.5, `abstractvoice` 0.11.3, `abstractvision` 0.3.29,
60
+ `abstractmemory` 0.3.0, `abstractsemantics` 0.0.5, `abstractvoice` 0.11.4, `abstractvision` 0.3.29,
61
61
  `abstractmusic` 0.1.15, `abstractassistant` 0.5.0.
62
62
 
63
63
  ### `PACKAGE_DISTRIBUTIONS`
@@ -179,6 +179,13 @@ user account. Only optional vendor installers may: Ollama on Linux uses sudo (it
179
179
  service), Ollama on macOS may ask to link `/usr/local/bin/ollama`, and LM Studio on Linux may ask
180
180
  to install `libatomic1`. The script tells you before running them.
181
181
 
182
+ ### Do I need Xcode or a C compiler?
183
+
184
+ No. The default install uses prebuilt wheels only. If macOS shows an "install the command line
185
+ developer tools" prompt, cancel it and re-run the current one-liner: an older copy of the script
186
+ compiled a few packages. You need a compiler only for `--full`, which adds llama.cpp GGUF,
187
+ stable-diffusion.cpp and echo cancellation ([Compiled extras](install.md#compiled-extras)).
188
+
182
189
  ### Windows says scripts are disabled on this system
183
190
 
184
191
  Pasting the one-liner works under the default `Restricted` policy because
@@ -30,7 +30,8 @@ default model picked from the models that fit your machine, and the apps. The **
30
30
  `light` otherwise.
31
31
  2. Installs [uv](https://docs.astral.sh/uv/) when it is missing, then Python 3.12 through uv.
32
32
  3. Installs the gateway as an isolated uv tool, pinned to this release:
33
- `uv tool install --python 3.12 "abstractgateway[<profile>,tray]==0.3.0"`.
33
+ `uv tool install --python 3.12 "abstractgateway[<profile>,tray]==0.3.0"`, from prebuilt wheels
34
+ only (see [No compiler needed](#no-compiler-needed)).
34
35
  4. Optionally installs Node.js for the browser apps, terminal tools, Ollama or LM Studio (flags
35
36
  below).
36
37
  5. Registers the gateway to start at login with `abstractgateway service install` (a LaunchAgent on
@@ -44,6 +45,28 @@ default model picked from the models that fit your machine, and the apps. The **
44
45
  Every command is printed as it runs, and the summary lists them all. Re-running the script
45
46
  upgrades or repairs the install in place.
46
47
 
48
+ ### No compiler needed
49
+
50
+ By default the script never compiles anything, so you do not need Xcode Command Line Tools, gcc
51
+ or the MSVC Build Tools. It passes uv a small overrides file (`uv-overrides.txt` in the gateway
52
+ data directory; `--print` shows it) that swaps `webrtcvad` for `webrtcvad-wheels`, keeps `vllm`
53
+ to Linux, and leaves out the three compiled extras below, and it refuses to build those packages
54
+ from source, so a gap fails with a clear error instead of starting a compiler. If macOS asks you
55
+ to install the command line developer tools (an `xcode-select` prompt) during an install, you are
56
+ running an older copy of the script: cancel the prompt, fetch the script again with the one-liner
57
+ above and re-run it.
58
+
59
+ ### Compiled extras
60
+
61
+ Three optional engines publish no wheel on PyPI and are skipped by default: llama.cpp GGUF models
62
+ in-process (`llama-cpp-python`), stable-diffusion.cpp image generation
63
+ (`stable-diffusion-cpp-python`) and voice echo cancellation (`aec-audio-processing`). `--full`
64
+ (Windows: `-Full`) keeps them and builds them from source, which takes several minutes and needs a
65
+ C/C++ compiler (macOS: `xcode-select --install`; Debian/Ubuntu: `sudo apt-get install -y
66
+ build-essential`; Windows: Visual Studio Build Tools with "Desktop development with C++"). Without
67
+ a compiler, `--full` stops before installing anything. You do not need them for MLX on Apple
68
+ Silicon, for Ollama, LM Studio or other endpoint engines, or for cloud providers.
69
+
47
70
  ### Options
48
71
 
49
72
  | macOS/Linux | Windows | What it does |
@@ -56,6 +79,7 @@ upgrades or repairs the install in place.
56
79
  | `--with-console` | `-WithConsole` | Install the `abstractgateway-console` crate with cargo (terminal console; needs Rust) |
57
80
  | `--with-code-cli` | `-WithCodeCli` | Install the `abstractcode` crate with cargo (terminal client; needs Rust) |
58
81
  | `--with-core-cli` | `-WithCoreCli` | Also put the `abstractcore` command on PATH |
82
+ | `--full` | `-Full` | Also build the [compiled extras](#compiled-extras) from source (needs a C compiler) |
59
83
  | `--no-service` | `-NoService` | Do not register a login service |
60
84
  | `--no-open` | `-NoOpen` | Do not open the browser |
61
85
  | `--pin X` / `--from PATH` | `-Pin` / `-From` | Install another gateway version or a local checkout |
@@ -79,6 +103,7 @@ curl -LsSf https://raw.githubusercontent.com/lpalbou/AbstractFramework/main/scri
79
103
  curl -LsSf https://astral.sh/uv/install.sh | sh # Windows: irm https://astral.sh/uv/install.ps1 | iex
80
104
  uv python install 3.12
81
105
  uv tool install --python 3.12 "abstractgateway[tray]==0.3.0" # [apple,tray] or [gpu,tray] for local engines
106
+ # (add --with and --overrides as shown by `install.sh --print` to avoid compiling)
82
107
  uv tool update-shell # puts ~/.local/bin on PATH; open a new terminal
83
108
  abstractgateway service install --host 127.0.0.1 --port 8080 # or: abstractgateway serve
84
109
  abstractgateway-config claim-url --base-url http://127.0.0.1:8080 # prints a one-time console link
@@ -155,9 +180,14 @@ whether local inference engines are installed.
155
180
  | Apple | macOS 14 or later on Apple Silicon | 3.10–3.13 | MLX wheels need macOS 14+. F5-TTS voice cloning needs Python 3.11+; the rest of the profile works on 3.10. |
156
181
  | GPU | Linux (and Windows where the engines publish wheels) with NVIDIA CUDA or AMD ROCm drivers | 3.10–3.13 | F5-TTS voice cloning needs Python 3.11+; the rest of the profile works on 3.10. |
157
182
 
183
+ A plain `pip install` of the `apple` or `gpu` profile builds the
184
+ [compiled extras](#compiled-extras) (`llama-cpp-python`, `stable-diffusion-cpp-python`,
185
+ `aec-audio-processing`) from source, so it needs a C/C++ compiler. The one-line install above
186
+ does not.
187
+
158
188
  `abstractframework` 0.2.0 pins `abstractgateway==0.3.0`, `abstractassistant==0.5.0`,
159
189
  `abstractcore==2.14.0`, `AbstractRuntime==0.4.33`, `abstractagent==0.3.13`,
160
- `AbstractMemory==0.3.0`, `abstractsemantics==0.0.5`, `abstractvoice==0.11.3`,
190
+ `AbstractMemory==0.3.0`, `abstractsemantics==0.0.5`, `abstractvoice==0.11.4`,
161
191
  `abstractvision==0.3.29` and `abstractmusic==0.1.15`. The `apple` and `gpu` extras select
162
192
  `abstractgateway[apple|gpu]` and `abstractassistant[apple|gpu]` at the same versions
163
193
  (`abstractassistant[apple]` is installed on macOS only). `abstractframework doctor` reports any
@@ -261,7 +261,7 @@ pip install "abstractframework[gpu]"
261
261
  | Apple | `pip install "abstractframework[apple]"` | macOS 14+ on Apple Silicon | 3.10–3.13 (F5-TTS voice cloning needs 3.11+) |
262
262
  | GPU | `pip install "abstractframework[gpu]"` | Linux / Windows with a CUDA or ROCm GPU | 3.10–3.13 (F5-TTS voice cloning needs 3.11+) |
263
263
 
264
- ### Release matrix (abstractframework 0.2.0)
264
+ ### Release matrix (abstractframework 0.2.1)
265
265
 
266
266
  `abstractframework` pins every Python package with `==`, so one version of the
267
267
  meta-package always installs the same stack. The browser apps and Rust tools are
@@ -277,7 +277,7 @@ and tested together.
277
277
  | PyPI | `abstractagent` | 0.3.13 |
278
278
  | PyPI | `AbstractMemory` | 0.3.0 |
279
279
  | PyPI | `abstractsemantics` | 0.0.5 |
280
- | PyPI | `abstractvoice` | 0.11.3 |
280
+ | PyPI | `abstractvoice` | 0.11.4 |
281
281
  | PyPI | `abstractvision` | 0.3.29 |
282
282
  | PyPI | `abstractmusic` | 0.1.15 |
283
283
  | npm | `@abstractframework/flow` | 0.3.20 |
@@ -471,7 +471,7 @@ Notes for LLMs working in this repo:
471
471
  - [abstractframework/__init__.py](abstractframework/__init__.py): `RELEASE_VERSIONS`, `NPM_RELEASE_VERSIONS`, `get_release_profile()`, `print_status()`.
472
472
  - [docs/installers/install-manifest.json](docs/installers/install-manifest.json): Generated install manifest, schema v2 (pins, profiles, npm apps, `bootstrap` gateway pin/scripts/flags, console-first `post_install`).
473
473
  - [scripts/install.sh](scripts/install.sh) / [scripts/install.ps1](scripts/install.ps1): The bootstrap installers.
474
- - abstractframework 0.2.0 pins (PyPI, `==`): abstractgateway 0.3.0, abstractassistant 0.5.0, abstractcore 2.14.0, AbstractRuntime 0.4.33, abstractagent 0.3.13, AbstractMemory 0.3.0, abstractsemantics 0.0.5, abstractvoice 0.11.3, abstractvision 0.3.29, abstractmusic 0.1.15.
474
+ - abstractframework 0.2.1 pins (PyPI, `==`): abstractgateway 0.3.0, abstractassistant 0.5.0, abstractcore 2.14.0, AbstractRuntime 0.4.33, abstractagent 0.3.13, AbstractMemory 0.3.0, abstractsemantics 0.0.5, abstractvoice 0.11.4, abstractvision 0.3.29, abstractmusic 0.1.15.
475
475
  - Released with it: npm `@abstractframework/flow` 0.3.20, `code` 0.4.2, `observer` 0.1.12, `continuum` 0.2.0, `entity` 0.1.0 (run with `npx`); crates (`CRATE_RELEASE_VERSIONS`) `abstractgateway-console` 0.7.0, `abstractcore-console` 0.2.0, `abstractcode` 0.5.1, `abstracttui` 0.6.0; images `ghcr.io/lpalbou/abstractgateway:0.3.0`, `ghcr.io/lpalbou/abstractcore-server:2.14.0`.
476
476
  - Profiles: light (remote-only), apple (`abstractframework[apple]`, macOS 14+ Apple Silicon), gpu (`abstractframework[gpu]`); Python 3.10-3.13 (F5-TTS voice cloning in apple/gpu needs 3.11+).
477
477
 
@@ -512,7 +512,7 @@ build-backend = "setuptools.build_meta"
512
512
 
513
513
  [project]
514
514
  name = "abstractframework"
515
- version = "0.2.0"
515
+ version = "0.2.1"
516
516
  description = "Unified installer and documentation hub for the AbstractFramework ecosystem"
517
517
  readme = "README.md"
518
518
  license = {text = "MIT"}
@@ -570,7 +570,7 @@ dependencies = [
570
570
 
571
571
  # Capability plugins are remote-first by default; local runtimes live behind
572
572
  # their package-specific `apple`/`gpu` (or `all-*`) extras.
573
- "abstractvoice==0.11.3",
573
+ "abstractvoice==0.11.4",
574
574
  "abstractvision==0.3.29",
575
575
  "abstractmusic==0.1.15",
576
576
  ]
@@ -644,7 +644,7 @@ Most implementation functionality still lives in component projects.
644
644
 
645
645
  from __future__ import annotations
646
646
 
647
- __version__ = "0.2.0"
647
+ __version__ = "0.2.1"
648
648
  __author__ = "Laurent-Philippe Albou"
649
649
  __license__ = "MIT"
650
650
 
@@ -655,7 +655,7 @@ RELEASE_VERSIONS: dict[str, str] = {
655
655
  "abstractgateway": "0.3.0",
656
656
  "abstractmemory": "0.3.0",
657
657
  "abstractsemantics": "0.0.5",
658
- "abstractvoice": "0.11.3",
658
+ "abstractvoice": "0.11.4",
659
659
  "abstractvision": "0.3.29",
660
660
  "abstractmusic": "0.1.15",
661
661
  "abstractassistant": "0.5.0",
@@ -1796,7 +1796,8 @@ default model picked from the models that fit your machine, and the apps. The **
1796
1796
  `light` otherwise.
1797
1797
  2. Installs [uv](https://docs.astral.sh/uv/) when it is missing, then Python 3.12 through uv.
1798
1798
  3. Installs the gateway as an isolated uv tool, pinned to this release:
1799
- `uv tool install --python 3.12 "abstractgateway[<profile>,tray]==0.3.0"`.
1799
+ `uv tool install --python 3.12 "abstractgateway[<profile>,tray]==0.3.0"`, from prebuilt wheels
1800
+ only (see [No compiler needed](#no-compiler-needed)).
1800
1801
  4. Optionally installs Node.js for the browser apps, terminal tools, Ollama or LM Studio (flags
1801
1802
  below).
1802
1803
  5. Registers the gateway to start at login with `abstractgateway service install` (a LaunchAgent on
@@ -1810,6 +1811,28 @@ default model picked from the models that fit your machine, and the apps. The **
1810
1811
  Every command is printed as it runs, and the summary lists them all. Re-running the script
1811
1812
  upgrades or repairs the install in place.
1812
1813
 
1814
+ ### No compiler needed
1815
+
1816
+ By default the script never compiles anything, so you do not need Xcode Command Line Tools, gcc
1817
+ or the MSVC Build Tools. It passes uv a small overrides file (`uv-overrides.txt` in the gateway
1818
+ data directory; `--print` shows it) that swaps `webrtcvad` for `webrtcvad-wheels`, keeps `vllm`
1819
+ to Linux, and leaves out the three compiled extras below, and it refuses to build those packages
1820
+ from source, so a gap fails with a clear error instead of starting a compiler. If macOS asks you
1821
+ to install the command line developer tools (an `xcode-select` prompt) during an install, you are
1822
+ running an older copy of the script: cancel the prompt, fetch the script again with the one-liner
1823
+ above and re-run it.
1824
+
1825
+ ### Compiled extras
1826
+
1827
+ Three optional engines publish no wheel on PyPI and are skipped by default: llama.cpp GGUF models
1828
+ in-process (`llama-cpp-python`), stable-diffusion.cpp image generation
1829
+ (`stable-diffusion-cpp-python`) and voice echo cancellation (`aec-audio-processing`). `--full`
1830
+ (Windows: `-Full`) keeps them and builds them from source, which takes several minutes and needs a
1831
+ C/C++ compiler (macOS: `xcode-select --install`; Debian/Ubuntu: `sudo apt-get install -y
1832
+ build-essential`; Windows: Visual Studio Build Tools with "Desktop development with C++"). Without
1833
+ a compiler, `--full` stops before installing anything. You do not need them for MLX on Apple
1834
+ Silicon, for Ollama, LM Studio or other endpoint engines, or for cloud providers.
1835
+
1813
1836
  ### Options
1814
1837
 
1815
1838
  | macOS/Linux | Windows | What it does |
@@ -1822,6 +1845,7 @@ upgrades or repairs the install in place.
1822
1845
  | `--with-console` | `-WithConsole` | Install the `abstractgateway-console` crate with cargo (terminal console; needs Rust) |
1823
1846
  | `--with-code-cli` | `-WithCodeCli` | Install the `abstractcode` crate with cargo (terminal client; needs Rust) |
1824
1847
  | `--with-core-cli` | `-WithCoreCli` | Also put the `abstractcore` command on PATH |
1848
+ | `--full` | `-Full` | Also build the [compiled extras](#compiled-extras) from source (needs a C compiler) |
1825
1849
  | `--no-service` | `-NoService` | Do not register a login service |
1826
1850
  | `--no-open` | `-NoOpen` | Do not open the browser |
1827
1851
  | `--pin X` / `--from PATH` | `-Pin` / `-From` | Install another gateway version or a local checkout |
@@ -1845,6 +1869,7 @@ curl -LsSf https://raw.githubusercontent.com/lpalbou/AbstractFramework/main/scri
1845
1869
  curl -LsSf https://astral.sh/uv/install.sh | sh # Windows: irm https://astral.sh/uv/install.ps1 | iex
1846
1870
  uv python install 3.12
1847
1871
  uv tool install --python 3.12 "abstractgateway[tray]==0.3.0" # [apple,tray] or [gpu,tray] for local engines
1872
+ # (add --with and --overrides as shown by `install.sh --print` to avoid compiling)
1848
1873
  uv tool update-shell # puts ~/.local/bin on PATH; open a new terminal
1849
1874
  abstractgateway service install --host 127.0.0.1 --port 8080 # or: abstractgateway serve
1850
1875
  abstractgateway-config claim-url --base-url http://127.0.0.1:8080 # prints a one-time console link
@@ -1921,9 +1946,14 @@ whether local inference engines are installed.
1921
1946
  | Apple | macOS 14 or later on Apple Silicon | 3.10–3.13 | MLX wheels need macOS 14+. F5-TTS voice cloning needs Python 3.11+; the rest of the profile works on 3.10. |
1922
1947
  | GPU | Linux (and Windows where the engines publish wheels) with NVIDIA CUDA or AMD ROCm drivers | 3.10–3.13 | F5-TTS voice cloning needs Python 3.11+; the rest of the profile works on 3.10. |
1923
1948
 
1949
+ A plain `pip install` of the `apple` or `gpu` profile builds the
1950
+ [compiled extras](#compiled-extras) (`llama-cpp-python`, `stable-diffusion-cpp-python`,
1951
+ `aec-audio-processing`) from source, so it needs a C/C++ compiler. The one-line install above
1952
+ does not.
1953
+
1924
1954
  `abstractframework` 0.2.0 pins `abstractgateway==0.3.0`, `abstractassistant==0.5.0`,
1925
1955
  `abstractcore==2.14.0`, `AbstractRuntime==0.4.33`, `abstractagent==0.3.13`,
1926
- `AbstractMemory==0.3.0`, `abstractsemantics==0.0.5`, `abstractvoice==0.11.3`,
1956
+ `AbstractMemory==0.3.0`, `abstractsemantics==0.0.5`, `abstractvoice==0.11.4`,
1927
1957
  `abstractvision==0.3.29` and `abstractmusic==0.1.15`. The `apple` and `gpu` extras select
1928
1958
  `abstractgateway[apple|gpu]` and `abstractassistant[apple|gpu]` at the same versions
1929
1959
  (`abstractassistant[apple]` is installed on macOS only). `abstractframework doctor` reports any
@@ -3118,7 +3148,7 @@ The response type returned by `llm.generate(...)`.
3118
3148
 
3119
3149
  Dictionary mapping each ecosystem package name to the pinned version for this release. In 0.2.0:
3120
3150
  `abstractcore` 2.14.0, `abstractruntime` 0.4.33, `abstractagent` 0.3.13, `abstractgateway` 0.3.0,
3121
- `abstractmemory` 0.3.0, `abstractsemantics` 0.0.5, `abstractvoice` 0.11.3, `abstractvision` 0.3.29,
3151
+ `abstractmemory` 0.3.0, `abstractsemantics` 0.0.5, `abstractvoice` 0.11.4, `abstractvision` 0.3.29,
3122
3152
  `abstractmusic` 0.1.15, `abstractassistant` 0.5.0.
3123
3153
 
3124
3154
  ### `PACKAGE_DISTRIBUTIONS`
@@ -3449,6 +3479,13 @@ user account. Only optional vendor installers may: Ollama on Linux uses sudo (it
3449
3479
  service), Ollama on macOS may ask to link `/usr/local/bin/ollama`, and LM Studio on Linux may ask
3450
3480
  to install `libatomic1`. The script tells you before running them.
3451
3481
 
3482
+ ### Do I need Xcode or a C compiler?
3483
+
3484
+ No. The default install uses prebuilt wheels only. If macOS shows an "install the command line
3485
+ developer tools" prompt, cancel it and re-run the current one-liner: an older copy of the script
3486
+ compiled a few packages. You need a compiler only for `--full`, which adds llama.cpp GGUF,
3487
+ stable-diffusion.cpp and echo cancellation ([Compiled extras](install.md#compiled-extras)).
3488
+
3452
3489
  ### Windows says scripts are disabled on this system
3453
3490
 
3454
3491
  Pasting the one-liner works under the default `Restricted` policy because
@@ -122,7 +122,7 @@ Notes for LLMs working in this repo:
122
122
  - [abstractframework/__init__.py](abstractframework/__init__.py): `RELEASE_VERSIONS`, `NPM_RELEASE_VERSIONS`, `get_release_profile()`, `print_status()`.
123
123
  - [docs/installers/install-manifest.json](docs/installers/install-manifest.json): Generated install manifest, schema v2 (pins, profiles, npm apps, `bootstrap` gateway pin/scripts/flags, console-first `post_install`).
124
124
  - [scripts/install.sh](scripts/install.sh) / [scripts/install.ps1](scripts/install.ps1): The bootstrap installers.
125
- - abstractframework 0.2.0 pins (PyPI, `==`): abstractgateway 0.3.0, abstractassistant 0.5.0, abstractcore 2.14.0, AbstractRuntime 0.4.33, abstractagent 0.3.13, AbstractMemory 0.3.0, abstractsemantics 0.0.5, abstractvoice 0.11.3, abstractvision 0.3.29, abstractmusic 0.1.15.
125
+ - abstractframework 0.2.1 pins (PyPI, `==`): abstractgateway 0.3.0, abstractassistant 0.5.0, abstractcore 2.14.0, AbstractRuntime 0.4.33, abstractagent 0.3.13, AbstractMemory 0.3.0, abstractsemantics 0.0.5, abstractvoice 0.11.4, abstractvision 0.3.29, abstractmusic 0.1.15.
126
126
  - Released with it: npm `@abstractframework/flow` 0.3.20, `code` 0.4.2, `observer` 0.1.12, `continuum` 0.2.0, `entity` 0.1.0 (run with `npx`); crates (`CRATE_RELEASE_VERSIONS`) `abstractgateway-console` 0.7.0, `abstractcore-console` 0.2.0, `abstractcode` 0.5.1, `abstracttui` 0.6.0; images `ghcr.io/lpalbou/abstractgateway:0.3.0`, `ghcr.io/lpalbou/abstractcore-server:2.14.0`.
127
127
  - Profiles: light (remote-only), apple (`abstractframework[apple]`, macOS 14+ Apple Silicon), gpu (`abstractframework[gpu]`); Python 3.10-3.13 (F5-TTS voice cloning in apple/gpu needs 3.11+).
128
128
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "abstractframework"
7
- version = "0.2.0"
7
+ version = "0.2.1"
8
8
  description = "Unified installer and documentation hub for the AbstractFramework ecosystem"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -62,7 +62,7 @@ dependencies = [
62
62
 
63
63
  # Capability plugins are remote-first by default; local runtimes live behind
64
64
  # their package-specific `apple`/`gpu` (or `all-*`) extras.
65
- "abstractvoice==0.11.3",
65
+ "abstractvoice==0.11.4",
66
66
  "abstractvision==0.3.29",
67
67
  "abstractmusic==0.1.15",
68
68
  ]
@@ -13,7 +13,8 @@
13
13
  # profile), free disk, a free port, systemd user bus (Linux)
14
14
  # 2. uv (https://docs.astral.sh/uv) if missing, then Python 3.12 through uv
15
15
  # 3. `uv tool install --python 3.12 "abstractgateway[<profile>,tray]==<pin>"`
16
- # (isolated, user-scoped; commands land in ~/.local/bin)
16
+ # (isolated, user-scoped; commands land in ~/.local/bin; prebuilt wheels
17
+ # only, so no C compiler / Xcode tools are needed)
17
18
  # 4. optional: Node.js for the browser apps, terminal tools, Ollama, LM Studio
18
19
  # 5. registers the gateway as a user service when the installed gateway
19
20
  # supports `abstractgateway service install`, otherwise starts it in the
@@ -35,6 +36,8 @@
35
36
  # --with-core-cli also expose the `abstractcore` command
36
37
  # --with-ollama run Ollama's official installer (may ask for sudo)
37
38
  # --with-lmstudio run LM Studio's headless installer (llmster)
39
+ # --full also build the compiled extras (llama.cpp GGUF,
40
+ # stable-diffusion.cpp, echo cancellation); needs a C compiler
38
41
  # --no-tray skip the tray extra
39
42
  # --no-service do not register a login service; start in background
40
43
  # --no-start install only; do not start the gateway
@@ -64,6 +67,40 @@ AF_CRATE_CODE_CLI="abstractcode@0.5.1"
64
67
  AF_DOCS="https://github.com/lpalbou/AbstractFramework/blob/main/docs/install.md"
65
68
  AF_SCRIPT_URL="https://raw.githubusercontent.com/lpalbou/AbstractFramework/main/scripts/install.sh"
66
69
 
70
+ # ---------------------------------------------------------------------------
71
+ # Prebuilt wheels only: by default no C compiler (Xcode CLT, gcc) is needed.
72
+ # A few packages in the gateway tree publish no usable wheel on PyPI, so a plain
73
+ # install compiles them (and on a fresh Mac pops the Xcode tools dialog).
74
+ # `uv tool install` gets an overrides file (an override whose marker is never
75
+ # true drops the package) and --no-build-package for the same packages, so a gap
76
+ # fails fast with a resolver error instead of starting a compiler:
77
+ # webrtcvad always dropped; `webrtcvad-wheels` (same module) via --with
78
+ # vllm Linux only (no Windows build exists)
79
+ # the compiled extras, dropped unless --full: llama-cpp-python (llama.cpp
80
+ # GGUF), stable-diffusion-cpp-python (stable-diffusion.cpp), aec-audio-processing
81
+ # (echo cancellation). All three are optional and imported lazily; MLX on
82
+ # Apple Silicon does not need them. --full keeps them and builds them from
83
+ # source, so it requires a compiler.
84
+ # Pure-Python sdists (langdetect, antlr4-python3-runtime, encodec,
85
+ # transformers-stream-generator) still build: they need no compiler, which is
86
+ # why there is no global --no-build. install.ps1 carries the same lists
87
+ # (tests/test_install_profiles.py keeps them in sync).
88
+ # ---------------------------------------------------------------------------
89
+ AF_WITH_WHEELS="webrtcvad-wheels>=2.0.14"
90
+ AF_COMPILED_EXTRAS="llama-cpp-python stable-diffusion-cpp-python aec-audio-processing"
91
+ AF_SKIPPED_LINE="Skipped compiled extras (llama.cpp GGUF, stable-diffusion.cpp, echo cancellation): re-run with --full after installing a C compiler."
92
+ af_uv_overrides() {
93
+ echo "webrtcvad; sys_platform == 'never'"
94
+ echo "vllm>=0.6.0,<1.0.0; sys_platform == 'linux'"
95
+ if [ "$FULL" = 0 ]; then
96
+ for _p in $AF_COMPILED_EXTRAS; do echo "$_p; sys_platform == 'never'"; done
97
+ fi
98
+ }
99
+ af_no_build_packages() {
100
+ echo "webrtcvad vllm"
101
+ [ "$FULL" = 1 ] || echo "$AF_COMPILED_EXTRAS"
102
+ }
103
+
67
104
  # ---------------------------------------------------------------------------
68
105
  # Options
69
106
  # ---------------------------------------------------------------------------
@@ -75,12 +112,12 @@ MANIFEST=""
75
112
  DATA_DIR="${AF_DATA_DIR:-${ABSTRACTGATEWAY_DATA_DIR:-}}"
76
113
  WITH_APPS=0; WITH_CONSOLE=0; WITH_CODE_CLI=0; WITH_CORE_CLI=0
77
114
  WITH_OLLAMA=0; WITH_LMSTUDIO=0
78
- NO_TRAY=0; NO_SERVICE=0; NO_START=0; NO_OPEN=0; NO_MODIFY_PATH=0
115
+ FULL=0; NO_TRAY=0; NO_SERVICE=0; NO_START=0; NO_OPEN=0; NO_MODIFY_PATH=0
79
116
  PRINT=0; UNINSTALL=0; PURGE=0; VERBOSE=0
80
117
 
81
118
  usage() {
82
119
  if [ -f "$0" ] && head -n 3 "$0" 2>/dev/null | grep -q "AbstractFramework bootstrap"; then
83
- sed -n '2,50p' "$0" | sed 's/^# \{0,1\}//'
120
+ sed -n '2,52p' "$0" | sed 's/^# \{0,1\}//'
84
121
  else
85
122
  echo "Usage: install.sh [--profile auto|light|apple|gpu] [--port N] [--pin X] [--with-apps]"
86
123
  echo " [--with-ollama] [--with-lmstudio] [--no-service] [--no-open] [--print] [--uninstall]"
@@ -111,6 +148,7 @@ while [ $# -gt 0 ]; do
111
148
  --with-core-cli) WITH_CORE_CLI=1 ;;
112
149
  --with-ollama) WITH_OLLAMA=1 ;;
113
150
  --with-lmstudio) WITH_LMSTUDIO=1 ;;
151
+ --full) FULL=1 ;;
114
152
  --no-tray) NO_TRAY=1 ;;
115
153
  --no-service) NO_SERVICE=1 ;;
116
154
  --no-start) NO_START=1 ;;
@@ -350,6 +388,18 @@ printf '%sAbstractFramework bootstrap%s %s%s%s\n' "$C_B" "$C_0" "$C_D" \
350
388
 
351
389
  step "Preflight"
352
390
  ok "system: $OS_ID $ARCH$([ -n "$MACOS_VERSION" ] && echo " (macOS $MACOS_VERSION)")"
391
+ HAS_CC=1
392
+ if [ "$OS_ID" = macos ]; then xcode-select -p >/dev/null 2>&1 || HAS_CC=0
393
+ elif ! have cc && ! have gcc; then HAS_CC=0; fi
394
+ if [ "$HAS_CC" = 0 ]; then
395
+ if [ "$FULL" = 1 ]; then
396
+ if [ "$OS_ID" = macos ]; then die "--full builds llama.cpp, stable-diffusion.cpp and echo cancellation from source and needs a C compiler: run 'xcode-select --install', then re-run with --full"
397
+ else die "--full builds llama.cpp, stable-diffusion.cpp and echo cancellation from source and needs a C compiler: install one (Debian/Ubuntu: sudo apt-get install -y build-essential), then re-run with --full"; fi
398
+ fi
399
+ info "no C compiler ($([ "$OS_ID" = macos ] && echo 'Xcode CLT' || echo 'cc/gcc')) – fine, all packages install as prebuilt wheels"
400
+ elif [ "$FULL" = 1 ]; then
401
+ ok "C compiler found: --full builds the compiled extras from source (several minutes)"
402
+ fi
353
403
  DL="$(fetch_cmd)"
354
404
  [ -n "$DL" ] || die "need curl or wget"
355
405
 
@@ -499,13 +549,27 @@ run "install Python $AF_PYTHON" "$UV" python install "$AF_PYTHON"
499
549
  step "AbstractGateway"
500
550
  BEFORE=""
501
551
  if [ "$PRINT" = 0 ]; then BEFORE="$("$UV" tool list 2>/dev/null | sed -n 's/^abstractgateway v\([^ ]*\).*/\1/p' | head -n 1)"; fi
502
- set -- "$UV" tool install --python "$AF_PYTHON"
552
+ OVERRIDES_FILE="$DATA_DIR/uv-overrides.txt"
553
+ if [ "$PRINT" = 1 ]; then
554
+ info "$OVERRIDES_FILE (written at install time; see the top of install.sh):"
555
+ af_uv_overrides | sed 's/^/ /'
556
+ else
557
+ af_uv_overrides >"$OVERRIDES_FILE"
558
+ fi
559
+ # uv splits an --overrides value at whitespace ("Application Support"), so the install
560
+ # runs from the data dir and names the file relatively.
561
+ set -- "$UV" tool install --python "$AF_PYTHON" --with "$AF_WITH_WHEELS" --overrides uv-overrides.txt
562
+ for _p in $(af_no_build_packages); do set -- "$@" --no-build-package "$_p"; done
503
563
  [ "$WITH_CORE_CLI" = 1 ] && set -- "$@" --with-executables-from abstractcore
504
564
  if [ -n "$BEFORE" ] && [ "$PIN" = latest ] && [ -z "$FROM" ] && [ "$ST_PROFILE" = "$PROFILE" ]; then
505
565
  run "upgrade abstractgateway" "$UV" tool upgrade abstractgateway
506
566
  else
507
567
  [ -n "$FROM" ] && set -- "$@" --reinstall
568
+ _cwd="$(pwd)"
569
+ RUN_SHOW="cd $(q "$DATA_DIR") && $(show_cmd "$@" "$GW_SPEC")"
570
+ [ "$PRINT" = 1 ] || cd "$DATA_DIR"
508
571
  run "install abstractgateway" "$@" "$GW_SPEC"
572
+ [ "$PRINT" = 1 ] || cd "$_cwd" 2>/dev/null || cd "$HOME"
509
573
  fi
510
574
  AFTER="$BEFORE"
511
575
  if [ "$PRINT" = 0 ]; then
@@ -728,6 +792,9 @@ echo " Start: $([ "$MODE" = service ] && echo "abstractgateway service ins
728
792
  echo " Upgrade: re-run this installer (or: uv tool upgrade abstractgateway)"
729
793
  echo " Uninstall: sh install.sh --uninstall (or: $([ "$MODE" = service ] && echo 'abstractgateway service uninstall && ')uv tool uninstall abstractgateway)"
730
794
  echo " Check: uvx abstractframework doctor"
795
+ if [ "$FULL" = 0 ] && { [ "$PROFILE" = apple ] || [ "$PROFILE" = gpu ]; }; then
796
+ echo " $AF_SKIPPED_LINE"
797
+ fi
731
798
  echo " Apps: npx -y @abstractframework/flow (also: code, observer, continuum, entity)"
732
799
  echo " Docs: $AF_DOCS"
733
800
  if [ -n "$TWINS" ]; then