abstractframework 0.6.2__tar.gz → 0.7.0__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 (196) hide show
  1. {abstractframework-0.6.2 → abstractframework-0.7.0}/CHANGELOG.md +226 -0
  2. {abstractframework-0.6.2/abstractframework.egg-info → abstractframework-0.7.0}/PKG-INFO +38 -30
  3. {abstractframework-0.6.2 → abstractframework-0.7.0}/README.md +26 -18
  4. {abstractframework-0.6.2 → abstractframework-0.7.0}/abstractframework/__init__.py +12 -12
  5. {abstractframework-0.6.2 → abstractframework-0.7.0/abstractframework.egg-info}/PKG-INFO +38 -30
  6. {abstractframework-0.6.2 → abstractframework-0.7.0}/abstractframework.egg-info/SOURCES.txt +3 -0
  7. abstractframework-0.7.0/abstractframework.egg-info/requires.txt +22 -0
  8. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/README.md +3 -3
  9. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/api.md +8 -8
  10. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/automations.md +66 -9
  11. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/configuration.md +23 -0
  12. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/faq.md +43 -4
  13. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/getting-started.md +6 -0
  14. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/install.md +154 -28
  15. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/installers/implementation-plan.md +1 -1
  16. {abstractframework-0.6.2 → abstractframework-0.7.0}/llms-full.txt +359 -100
  17. {abstractframework-0.6.2 → abstractframework-0.7.0}/llms.txt +5 -5
  18. {abstractframework-0.6.2 → abstractframework-0.7.0}/pyproject.toml +12 -12
  19. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/install.sh +562 -18
  20. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/tests/test_install_user_path.sh +242 -9
  21. {abstractframework-0.6.2 → abstractframework-0.7.0}/tests/test_install_profiles.py +25 -8
  22. abstractframework-0.7.0/tests/test_install_ps1_gpu_stack.py +432 -0
  23. abstractframework-0.7.0/tests/test_install_ps1_own_gateway.py +295 -0
  24. abstractframework-0.7.0/tests/test_install_sh_gpu_stack.py +306 -0
  25. abstractframework-0.6.2/abstractframework.egg-info/requires.txt +0 -22
  26. {abstractframework-0.6.2 → abstractframework-0.7.0}/LICENSE +0 -0
  27. {abstractframework-0.6.2 → abstractframework-0.7.0}/MANIFEST.in +0 -0
  28. {abstractframework-0.6.2 → abstractframework-0.7.0}/abstractframework/__main__.py +0 -0
  29. {abstractframework-0.6.2 → abstractframework-0.7.0}/abstractframework/cli.py +0 -0
  30. {abstractframework-0.6.2 → abstractframework-0.7.0}/abstractframework/install_manifest.py +0 -0
  31. {abstractframework-0.6.2 → abstractframework-0.7.0}/abstractframework/py.typed +0 -0
  32. {abstractframework-0.6.2 → abstractframework-0.7.0}/abstractframework.egg-info/dependency_links.txt +0 -0
  33. {abstractframework-0.6.2 → abstractframework-0.7.0}/abstractframework.egg-info/entry_points.txt +0 -0
  34. {abstractframework-0.6.2 → abstractframework-0.7.0}/abstractframework.egg-info/top_level.txt +0 -0
  35. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0001-layered-architecture.md +0 -0
  36. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0002-effect-system-design.md +0 -0
  37. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0003-tool-system-architecture.md +0 -0
  38. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0004-observability-strategy.md +0 -0
  39. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0005-memory-architecture.md +0 -0
  40. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0006-durable-tool-execution.md +0 -0
  41. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0007-active-context-and-memory-provenance.md +0 -0
  42. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0008-token-terminology.md +0 -0
  43. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0009-connected-memory-recall-and-provenance.md +0 -0
  44. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0010-runtime-owned-node-traces.md +0 -0
  45. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0011-ledger-subscriptions-and-event-bridge.md +0 -0
  46. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0012-portable-workflowartifact.md +0 -0
  47. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0013-durable-run-controls-pause-resume-cancel.md +0 -0
  48. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0014-runtime-authority-timeouts.md +0 -0
  49. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0015-execution-targets-and-remote-tool-workers.md +0 -0
  50. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0016-tool-calling-pipeline-and-responsibility-boundaries.md +0 -0
  51. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0017-host-ui-events-and-durable-prompts.md +0 -0
  52. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0018-durable-run-gateway-and-remote-host-control-plane.md +0 -0
  53. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0019-testing-strategy-and-levels.md +0 -0
  54. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0020-agent-host-pool-and-orchestrator-placement.md +0 -0
  55. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0021-deployment-topologies-and-supported-scenarios.md +0 -0
  56. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0022-orchestrator-host-and-runtime-daemonization.md +0 -0
  57. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0023-file-attachment-path-resolution-and-authorization.md +0 -0
  58. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0024-attachment-placeholders-and-compaction-invariants.md +0 -0
  59. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0025-kg-entity-normalization-and-dedup.md +0 -0
  60. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0026-truncation-policy-and-contract.md +0 -0
  61. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0027-timeout-policy-and-contract.md +0 -0
  62. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0028-capabilities-plugins-and-library-framework-modes.md +0 -0
  63. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0029-permissive-dependency-and-licensing-policy.md +0 -0
  64. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0030-security-test-fixtures-and-isolation.md +0 -0
  65. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0031-workflow-llm-routing-overrides-provider-model-and-base-url.md +0 -0
  66. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0032-package-dependency-boundaries-and-gateway-first-apps.md +0 -0
  67. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0033-install-profiles-config-entrypoints-and-server-boundaries.md +0 -0
  68. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0034-framework-release-sequence-and-gates.md +0 -0
  69. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0035-capability-routing-defaults.md +0 -0
  70. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0036-artifact-descriptor-contract.md +0 -0
  71. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0037-hosted-file-source-contract-and-workspacepath-authority.md +0 -0
  72. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/0038-script-bootstrap-and-gateway-console-install.md +0 -0
  73. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/README.md +0 -0
  74. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/memory-recall-levels.md +0 -0
  75. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/reorg/001_music_as_capability_plugin_via_acestep_api.md +0 -0
  76. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/reorg/002_abstractmusic_inprocess_local_generation.md +0 -0
  77. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/reorg/003_abstractmusic_acestep_v15_backend_source_strategy.md +0 -0
  78. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/reorg/004_smartnote_thin_client_architecture.md +0 -0
  79. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/reorg/005_smartnote_artifact_first_cards.md +0 -0
  80. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/reorg/2026-02-21_gateway-first-assistant.md +0 -0
  81. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/reorg/2026-02-21_installer_manager_strategy.md +0 -0
  82. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/adr/reorg/2026-02-21_macos_installer_manager.md +0 -0
  83. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/agent-sessions.md +0 -0
  84. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/architecture.md +0 -0
  85. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/claude/README.md +0 -0
  86. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/claude/abstractframework-fit.md +0 -0
  87. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/claude/claude-skills-overview.md +0 -0
  88. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/claude/claude-skills-sources.md +0 -0
  89. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/claude/claude-skills-top-20.md +0 -0
  90. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/comparisons/README.md +0 -0
  91. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/glossary.md +0 -0
  92. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/LANDING.md +0 -0
  93. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/README.md +0 -0
  94. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/agent-skills.md +0 -0
  95. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/agent-vs-llm.md +0 -0
  96. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/agora-workflow-agent.md +0 -0
  97. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/apple-local-gateway-flow.md +0 -0
  98. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/capability-plugins.md +0 -0
  99. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/capability-routing-defaults.md +0 -0
  100. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/deployment-iphone.md +0 -0
  101. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/deployment-topologies.md +0 -0
  102. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/deployment-web.md +0 -0
  103. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/email-integration.md +0 -0
  104. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/event-inbox-agent.md +0 -0
  105. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/flow-and-kg-memory.md +0 -0
  106. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/gateway-security.md +0 -0
  107. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/headless-swarm.md +0 -0
  108. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/process-manager-env-vars.md +0 -0
  109. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/prompt-caching.md +0 -0
  110. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/runtime-artifacts.md +0 -0
  111. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/runtime-scope.md +0 -0
  112. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/scheduled-workflows.md +0 -0
  113. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/summoned-entities.md +0 -0
  114. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/telegram-integration.md +0 -0
  115. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/guide/workflow-bundles.md +0 -0
  116. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/installers/README.md +0 -0
  117. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/installers/components.md +0 -0
  118. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/installers/operations-and-support.md +0 -0
  119. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/installers/release-and-manifest.md +0 -0
  120. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/installers/security-and-os-blocks.md +0 -0
  121. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/installers/strategy.md +0 -0
  122. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/installers/user-journeys.md +0 -0
  123. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/prompts/agora-collaboration.md +0 -0
  124. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/scenarios/README.md +0 -0
  125. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/scenarios/email-inbox-agent.md +0 -0
  126. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/scenarios/gateway-first-local-dev.md +0 -0
  127. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/scenarios/offline-coding-assistant.md +0 -0
  128. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/scenarios/phone-thin-client.md +0 -0
  129. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/scenarios/specialized-agent-flow.md +0 -0
  130. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/scenarios/telegram-permanent-contact.md +0 -0
  131. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/scenarios/workflow-bundle-lifecycle.md +0 -0
  132. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/skills/README.md +0 -0
  133. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/skills/abstractframework-agent-skills-fit.md +0 -0
  134. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/skills/abstractframework-architecture-deep-dive.md +0 -0
  135. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/skills/agent-skills-ecosystem-scan.md +0 -0
  136. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/skills/agent-skills-ecosystem-sources.md +0 -0
  137. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/skills/claude-agent-skills-overview.md +0 -0
  138. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/skills/claude-agent-skills-sources.md +0 -0
  139. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/skills/claude-agent-skills-top-20.md +0 -0
  140. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/troubleshooting.md +0 -0
  141. {abstractframework-0.6.2 → abstractframework-0.7.0}/docs/workspace-scripts.md +0 -0
  142. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/af-local.sh +0 -0
  143. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/af.sh +0 -0
  144. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/agora_react_flow_smoke.py +0 -0
  145. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/assistant-local.sh +0 -0
  146. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/assistant.sh +0 -0
  147. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/build.sh +0 -0
  148. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/cache_probe_local_backends.py +0 -0
  149. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/cache_steer_repl.py +0 -0
  150. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/check_identity_sync.py +0 -0
  151. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/clone.sh +0 -0
  152. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/code-local.sh +0 -0
  153. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/code.sh +0 -0
  154. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/commit.sh +0 -0
  155. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/console-local.sh +0 -0
  156. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/console.sh +0 -0
  157. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/core_operator_drive.py +0 -0
  158. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/deps.sh +0 -0
  159. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/entity-local.sh +0 -0
  160. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/entity.sh +0 -0
  161. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/event_inbox_flow_smoke.py +0 -0
  162. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/flow-local.sh +0 -0
  163. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/flow.sh +0 -0
  164. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/gateway-flow-local.sh +0 -0
  165. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/gateway-flow.sh +0 -0
  166. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/gateway-local.sh +0 -0
  167. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/gateway.sh +0 -0
  168. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/gen_llms_full.py +0 -0
  169. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/headless_fleet_bridge.py +0 -0
  170. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/headless_fleet_demo.py +0 -0
  171. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/headless_steer_repl.py +0 -0
  172. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/lib/af_inventory.py +0 -0
  173. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/lib/af_stack.sh +0 -0
  174. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/lib/af_supervisor.sh +0 -0
  175. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/lib/apps_common.sh +0 -0
  176. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/lib/build_macos_installer.sh +0 -0
  177. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/lib/gateway_user_tokens.py +0 -0
  178. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/lib/repo_groups.sh +0 -0
  179. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/meet_castor.sh +0 -0
  180. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/observer-local.sh +0 -0
  181. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/observer.sh +0 -0
  182. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/plan_walkthrough.py +0 -0
  183. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/pull.sh +0 -0
  184. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/push.sh +0 -0
  185. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/spawn_demo_agent.sh +0 -0
  186. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/start-local.sh +0 -0
  187. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/start.sh +0 -0
  188. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/status.sh +0 -0
  189. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/steer_repl.py +0 -0
  190. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/tests/test_af_supervisor.sh +0 -0
  191. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/tests/test_inventory.sh +0 -0
  192. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/tests/test_repo_scripts.sh +0 -0
  193. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/uninstall.sh +0 -0
  194. {abstractframework-0.6.2 → abstractframework-0.7.0}/scripts/visit_resume_cache_probe.py +0 -0
  195. {abstractframework-0.6.2 → abstractframework-0.7.0}/setup.cfg +0 -0
  196. {abstractframework-0.6.2 → abstractframework-0.7.0}/tests/test_llms_full.py +0 -0
@@ -4,6 +4,232 @@ All notable changes to AbstractFramework will be documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.7.0] - 2026-09-30
8
+
9
+ Email for each user, and installer fixes. Pins: AbstractCore 2.20.1, AbstractRuntime 0.8.0,
10
+ AbstractGateway 0.8.0 and AbstractAssistant 0.10.0; the terminal consoles are
11
+ `abstractgateway-console` 0.12.0 and `abstractcore-console` 0.5.0, and the browser apps
12
+ AbstractCode web 0.7.0 and AbstractObserver 0.3.0 (built on AbstractUIC ui-kit 0.2.0 and panel-chat
13
+ 0.1.21). Every other version is unchanged from 0.6.3.
14
+
15
+ ### Added
16
+
17
+ - **Your own mailbox on the gateway.** Each user connects their own email account (IMAP/SMTP with a
18
+ password or app password, or OAuth2 for Google and Microsoft) in the web console (**Users → My
19
+ email**), the terminal console (`@` on the Users screen) or `PUT /api/gateway/me/email`. The
20
+ account is tested before it is saved, stored in the user's own data folder with its credentials
21
+ encrypted, and every connection verifies TLS. The mailbox is read-only. Each user sets a recipient
22
+ policy (allowlist or denylist of addresses and domains) and send limits (20 per hour and 100 per
23
+ day by default); every send passes them. AbstractCore on its own gets the same account, one per
24
+ install: `abstractcore email ...`, the core web console's **Email** tab and the core terminal
25
+ console's Email screen. See [Configuration](docs/configuration.md#email-accounts).
26
+ `abstractcore email connect --password-stdin` (and `--client-secret-stdin` for OAuth) reads the
27
+ secret from stdin, so it never appears on a command line (AbstractCore 2.20.1).
28
+ - **Email automations.** The Assistant, the Observer and AbstractCode's browser client offer **When
29
+ an email arrives** (the `email.received@1` trigger: typed filters on sender, recipient, subject and
30
+ attachments; hourly batches by default for automations that run a model, never more often than
31
+ every 60 seconds; each message read once), **Email me the result**, and the recipients an
32
+ automation may email without asking (only you, by default). Inbound mail reaches the agent as
33
+ untrusted data in a fixed frame; an email-triggered automation never follows links from an email
34
+ (`fetch_url` and `browser_probe` ask) unless you name those tools. See
35
+ [Email automations](docs/automations.md#email-automations).
36
+ - **Email notifications**, off until you turn them on in **My email → Notifications**: automation
37
+ results and failures (for automations set to email you), a run waiting for your approval, and
38
+ runs started with an email notice. Each notice is sent once from a durable outbox, through your
39
+ own account, to your registered address.
40
+ - **Sign-in by email**: "Forgot your token?" and "Email me a sign-in code" on the gateway's sign-in
41
+ page for users with a connected account (single-use codes, 10-minute expiry).
42
+ - **What administrators decide**: whether email, agent email tools and sign-in by email are
43
+ available, gateway-wide and per user. Agent email tools are off by default: an agent gets the
44
+ email tools only when an administrator made them available, the user's account is connected, and
45
+ the user turned them on. Administrators see a user's mailbox state, never mail.
46
+
47
+ ### Removed
48
+
49
+ - The `ABSTRACT_EMAIL_*` environment variables, the email accounts file and the gateway's email
50
+ bridge. A gateway or an AbstractCore install that still has them imports that account once into
51
+ the new settings; afterwards each variable still set is named at startup with the setting that
52
+ replaced it.
53
+
54
+ ### Fixed
55
+
56
+ - **One gateway per data directory when you re-run the installer.** A gateway of this install that
57
+ you started yourself (for example with the summary's Start line) is recognized: it listens on the
58
+ install's port and serves the same data directory, as its serve record
59
+ (`<data dir>/run/gateway-serve.json`) or its `--data-dir` says. `install.sh` and `install.ps1` now
60
+ keep that port and replace the gateway with their own start, instead of moving to the next port
61
+ and starting a second gateway on the same data. A gateway of this install started by hand on
62
+ another port is stopped too. The replacement starts the way the installer starts every gateway, so
63
+ it binds as the gateway's Network setting says (for example 127.0.0.1), not with the `--host` the
64
+ hand-started one was given. With `--no-start` (`-NoStart`, the console's Update) it keeps
65
+ running and the summary says a restart is due. A program that is not this install's gateway
66
+ keeps the port, as before.
67
+ - **The installers signal only this install's gateway.** Before any stop, the process must belong
68
+ to your user, run `abstractgateway serve` and serve this data directory; the identity is checked
69
+ again right before the signal (and before a SIGKILL). A `gateway.pid` or serve record left behind
70
+ that names another program (a reused pid) is left alone and said so.
71
+ - **Known limit on Windows with start at login on:** Windows does not tell the installer which
72
+ process the login item started, so a gateway of this data directory that you started yourself on
73
+ the install's port is taken for the login item and left running. Stop it and re-run the
74
+ installer to get the login item's gateway.
75
+ - **A release published minutes earlier installs at once.** The installers pass
76
+ `--refresh-package` for `abstractgateway` and every package of the release matrix to
77
+ `uv tool install`, so uv asks PyPI again instead of using its cached index page (which could say
78
+ "no version of abstractgateway[gpu]==<pin>" until `uv cache clean abstractgateway`).
79
+
80
+ ### Changed
81
+
82
+ - **Launch flags in the commands the installers print.** The summary's Start line and the
83
+ background start's command (the "same steps by hand" list) read
84
+ `abstractgateway serve --data-dir <data dir>` (plus `--host`/`--port` when the gateway has no
85
+ Network setting) instead of `ABSTRACTGATEWAY_DATA_DIR=... ABSTRACTGATEWAY_USER_AUTH=1 ...`; the
86
+ gateway starts with user auth on by itself. The installers themselves still pass the data dir to
87
+ the gateway commands they run (`network`, `service install`, `claim-url`) through
88
+ `ABSTRACTGATEWAY_DATA_DIR`. Gateways before 0.3 (`--pin`) keep the environment form.
89
+
90
+ ## [0.6.3] - 2026-09-29
91
+
92
+ The `gpu` setting on NVIDIA machines, speech-to-text in the fresh setup, and loaded image models
93
+ that are reused. Pins: AbstractGateway 0.7.4, AbstractCore 2.19.2, AbstractRuntime 0.7.3,
94
+ AbstractVoice 0.13.2, AbstractVision 0.3.33 and Abstract3D 0.3.2; the gateway's terminal console is
95
+ `abstractgateway-console` 0.11.2, and the browser client AbstractCode web is 0.6.2. Every other
96
+ version, and the other terminal clients, are unchanged from 0.6.2.
97
+
98
+ ### Added
99
+
100
+ - **The `gpu` setting on Linux + NVIDIA, rehearsed on real hardware with this release.** On
101
+ Ubuntu 26.04 with a Quadro RTX 5000 (16 GB, driver 595.91.07, CUDA 13.2; 4 vCPU, 26 GB RAM),
102
+ `install.sh` installed this release's candidate versions from PyPI in 3 min 1 s (AbstractGateway
103
+ 0.7.3, AbstractCore 2.19.1, AbstractRuntime 0.7.2, AbstractVoice 0.13.1 and AbstractVision 0.3.32;
104
+ the patch releases listed under Fixed came after this run). The previous
105
+ install had been removed with `uninstall.sh --yes --purge` and uv's download cache cleared; model
106
+ weights, LM Studio and a Rust toolchain were already on the machine. The Python packages took 39 s
107
+ (about 5.8 GB of wheels), llama.cpp's `cu130` build 18 s (726 MB), compiling the two terminal
108
+ clients with cargo 110 s, and the start and health check 5 s. The install added 14.2 GB on disk.
109
+ Its checks reported PyTorch 2.11.0 on CUDA 13.0, llama.cpp 0.3.35 (`cu130`) with GPU offload and
110
+ Whisper on the GPU. Run again, it reported "already up to date" in 10 s. With **Use recommended
111
+ defaults** and the model weights already downloaded:
112
+ - text with LM Studio (`qwen/qwen3.5-9b`, Q4_K_M, 6.5 GB on the GPU): the first gateway request
113
+ took 23 s including loading the model, the next 12 s for a 318-token answer (308 of them
114
+ reasoning); from AbstractCore in Python about 41 tokens/s;
115
+ - text-to-speech with Supertonic, on the processor: 1.1 to 1.4 s per sentence (3.2 s for the
116
+ first gateway request);
117
+ - image generation with FLUX.2 [klein] 4B through Diffusers, with model CPU offload (7.8 GB
118
+ peak): 41 s to load the model, then 15 to 16 s per 1024x1024 image. Each gateway image request
119
+ loads the model again, so one request takes 54 to 59 s;
120
+ - speech-to-text did not work as installed; see Known issues below.
121
+
122
+ vLLM 0.22.1 installs with the gpu setting but was not validated: it needs a C compiler
123
+ (`build-essential`) the first time it starts a model, and on GPUs older than compute capability
124
+ 8.0 the `--attention-backend TRITON_ATTN` option. See
125
+ [GPU on Linux (NVIDIA)](docs/install.md#gpu-on-linux-nvidia).
126
+ - **`install.sh` on Linux + NVIDIA** installs llama.cpp's CUDA build that matches PyTorch's CUDA
127
+ (PyPI's PyTorch for Linux is a CUDA 13 build, which needs NVIDIA driver 580 or newer; with an
128
+ older driver PyTorch and llama.cpp run on the processor) and keeps it only when it
129
+ loads and offloads to the GPU; otherwise the CPU build goes back and the summary says why. At the
130
+ end it checks that PyTorch sees the GPU and which device Whisper uses (`PyTorch:`, `GGUF:` and
131
+ `Voice:` summary lines), and warns when no C compiler is found for vLLM.
132
+ - **`install.ps1` on Windows + NVIDIA** picks the GPU stack from `nvidia-smi` (CUDA 13 with driver
133
+ 580 or newer and compute capability 7.5 or newer, CUDA 12 with driver 525 or newer, otherwise the
134
+ CPU), installs PyTorch's CUDA build and llama.cpp's matching prebuilt build (CUDA, then Vulkan,
135
+ then CPU), and ends with GPU checks that replace any part that does not work with one that does.
136
+ The Windows gpu setting is implemented and tested with simulated drivers and wheel-only
137
+ resolves, but it has **not yet been validated on real NVIDIA hardware**. See
138
+ [GPU on Windows (NVIDIA)](docs/install.md#gpu-on-windows-nvidia).
139
+ - **Live installer progress.** Both installers show uv's output as it comes, with a
140
+ `still working (… elapsed; last: …)` line after 15 seconds of silence, so a multi-GB download no
141
+ longer looks frozen. `install.ps1` announces the big downloads before they start.
142
+
143
+ ### Changed
144
+
145
+ - **Only the three install settings in hints.** Every install hint across the framework names
146
+ light (`pip install -U abstractcore`), `abstractcore[apple]` or `abstractcore[gpu]`, or says that
147
+ a capability is not available on this machine, never a bare package or a plugin's own extra
148
+ (AbstractCore 2.19.1, AbstractGateway 0.7.3, AbstractVoice 0.13.1, AbstractRuntime 0.7.2,
149
+ Abstract3D 0.3.2).
150
+ - **Smaller gpu setting.** The gpu setting no longer installs MLX-Gen (AbstractVision 0.3.32):
151
+ about 2.1 GB less on Linux, and it installs on Linux distributions with an older glibc.
152
+ - **`abstractcore[gpu]` installs on Windows with wheels only** (vLLM is Linux only;
153
+ stable-diffusion.cpp and llama.cpp are left to the installer's prebuilt builds on Windows).
154
+ - **Recommendations on NVIDIA machines.** **Use recommended defaults** picks FLUX.2 [klein] 4B
155
+ through Diffusers for image generation on an NVIDIA GPU (it fits a 16 GB card), and the LM Studio
156
+ text download is `qwen/qwen3.5-9b@q4_k_m`, which LM Studio offers on Linux and Windows.
157
+ - **AbstractRuntime depends on AbstractCore's three settings** (`abstractcore`, `[apple]`, `[gpu]`),
158
+ and `openai` 2.x is allowed across the stack, so the gpu setting resolves a current vLLM.
159
+
160
+ ### Fixed
161
+
162
+ - **The approval gate shows in every client.** When the agent's tool call waits for approval, a
163
+ browser or phone that opens the same conversation later now shows the same Allow / Deny card and
164
+ "Approval needed" as the client that started the turn, instead of "Running a tool" and a Steer box
165
+ (AbstractCode web 0.6.2 with `@abstractframework/panel-chat` 0.1.20; two-browser end-to-end test).
166
+ - **Speech-to-text without an OpenAI key.** Transcription runs on the configured `input.voice`
167
+ route (for example local Whisper) and no longer needs TTS credentials (AbstractCore 2.19.1,
168
+ AbstractVoice 0.13.1).
169
+ - **Speech-to-text in the fresh setup.** The fresh-install defaults and **Use recommended defaults**
170
+ set speech input (`input.voice`: faster-whisper, model `base`) with text, voice and images, so a
171
+ new install transcribes locally without an OpenAI key (AbstractCore 2.19.2, AbstractGateway
172
+ 0.7.4). An install that earlier release defaults seeded gains the route once, when it is empty; a
173
+ route you set yourself is kept. PyAV is held below 19, which faster-whisper 1.2.1 needs to read
174
+ audio files (AbstractVoice 0.13.2).
175
+ - **Use recommended defaults saves every route it reports**, including on a fresh install right
176
+ after the console read the routes (AbstractCore 2.19.2).
177
+ - **Whisper on NVIDIA GPUs.** faster-whisper uses CUDA only when CUDA 12 cuBLAS loads (installed
178
+ with the gpu setting on Linux and Windows), and otherwise runs on the CPU with a warning.
179
+ - **llama.cpp on CUDA** loads without importing PyTorch first on Linux, and a GGUF model too large
180
+ for the GPU at its full context tries smaller contexts on the GPU before falling back to the CPU.
181
+ - **Image generation on smaller GPUs.** A Diffusers pipeline that does not fit the GPU's free
182
+ memory loads with model CPU offload instead of failing with CUDA out of memory. When even the
183
+ largest component does not fit (for example next to a loaded text model), it falls back to
184
+ sequential CPU offload, which uses much less GPU memory and is slower per step (AbstractVision
185
+ 0.3.33). On the Quadro RTX 5000, FLUX.2 [klein] 4B at 768x768 and 4 steps peaked near 1.4 GB and
186
+ took 10.9 to 15.6 s, against 13.4 to 18.5 s with model CPU offload; at about 2.3 s per step
187
+ against 1.5 s, models that run many steps are slower with it.
188
+ - **A loaded image model is reused.** After **Load** in the console (or `POST /models/load`), image
189
+ and video requests for that model run on the loaded pipeline instead of loading the model again
190
+ for each request (AbstractRuntime 0.7.3, AbstractGateway 0.7.4). On the rehearsal machine,
191
+ FLUX.2 [klein] 4B images through the gateway took 17 to 19 s each instead of 54 to 59 s. A model
192
+ that was not loaded still runs each request in its own process.
193
+ - **Unloading an image model frees its memory.** On CUDA, FLUX.2 [klein] 4B with model CPU offload
194
+ left 16.3 GB held after an unload; it now leaves 0.86 GB (AbstractVision 0.3.33).
195
+
196
+ ### Security
197
+
198
+ - **Email connections verify TLS.** AbstractCore's mail tools (`list_emails`, `read_email`,
199
+ `send_email`) and the gateway's email bridge check the server certificate and host name, and refuse
200
+ before login when the check fails; a server signed by a private CA is trusted with the new
201
+ `ca_file` field of an account (AbstractCore 2.19.2, AbstractGateway 0.7.4).
202
+ - **Automations no longer email anyone the model chooses.** With the default automatic tool
203
+ approval, message-sending tools are no longer pre-approved: a `send_email` to your registered
204
+ email runs unattended, any other recipient waits for your approval (AbstractRuntime 0.7.3,
205
+ AbstractGateway 0.7.4).
206
+ - A `password_env_var` / `imap_password_env_var` that is not an environment variable name is refused
207
+ instead of being read as the password (AbstractCore 2.19.2, AbstractGateway 0.7.4).
208
+
209
+ ### Found in the rehearsal
210
+
211
+ Found in the rehearsal on the Quadro RTX 5000 described above, which ran the candidate versions. The
212
+ Fixed entries above address each one.
213
+
214
+ - **Speech-to-text failed on a fresh gpu install**, for two reasons:
215
+ - **Use recommended defaults** did not set the speech input route (`input.voice`). With no route,
216
+ transcription used OpenAI and failed with "OpenAI audio requires OPENAI_API_KEY".
217
+ - PyAV 19.0.0, released on 2026-09-29, removed an option that faster-whisper 1.2.1 uses to read
218
+ audio files. Every transcription through the gateway then failed with `open() got an unexpected
219
+ keyword argument 'metadata_errors'`.
220
+
221
+ With the route set to faster-whisper `base` by hand and PyAV 18, faster-whisper transcribed on the
222
+ GPU with no OpenAI key: 1.0 to 2.3 s per gateway request, and 0.3 GB of GPU memory.
223
+ - **An image next to a loaded text model ran out of GPU memory on a 16 GB card.** LM Studio's
224
+ `qwen/qwen3.5-9b` keeps 6.5 GB on the GPU while it is loaded. FLUX.2 [klein] needed 7.8 GB even
225
+ with model CPU offload, so the image request failed with CUDA out of memory after three attempts
226
+ (about 2.5 minutes). With the text model unloaded (`lms unload --all`, or the console's model
227
+ list), the same request worked. In this case AbstractVision 0.3.33 falls back to sequential CPU
228
+ offload (see Fixed above).
229
+ - **Use recommended defaults could skip the image route on a fresh install.** On an NVIDIA machine,
230
+ if the button was used within a few seconds of the console reading the routes, it could report the
231
+ image route as already set without saving it. Using it again saved it.
232
+
7
233
  ## [0.6.2] - 2026-09-29
8
234
 
9
235
  One line installs, upgrades and repairs AbstractFramework, and **Update** in the consoles and the
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstractframework
3
- Version: 0.6.2
3
+ Version: 0.7.0
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
@@ -23,24 +23,24 @@ Classifier: Typing :: Typed
23
23
  Requires-Python: >=3.10
24
24
  Description-Content-Type: text/markdown
25
25
  License-File: LICENSE
26
- Requires-Dist: abstractgateway==0.7.2
27
- Requires-Dist: abstractassistant==0.9.1
28
- Requires-Dist: abstractcore==2.19.0
29
- Requires-Dist: AbstractRuntime==0.7.1
26
+ Requires-Dist: abstractgateway==0.8.0
27
+ Requires-Dist: abstractassistant==0.10.0
28
+ Requires-Dist: abstractcore==2.20.1
29
+ Requires-Dist: AbstractRuntime==0.8.0
30
30
  Requires-Dist: abstractagent==0.3.17
31
31
  Requires-Dist: abstractskill==0.3.0
32
32
  Requires-Dist: AbstractMemory==0.3.0
33
33
  Requires-Dist: abstractsemantics==0.0.5
34
- Requires-Dist: abstractvoice==0.13.0
35
- Requires-Dist: abstractvision==0.3.31
34
+ Requires-Dist: abstractvoice==0.13.2
35
+ Requires-Dist: abstractvision==0.3.33
36
36
  Requires-Dist: abstractmusic==0.1.15
37
- Requires-Dist: abstract3d==0.3.1
37
+ Requires-Dist: abstract3d==0.3.2
38
38
  Provides-Extra: apple
39
- Requires-Dist: abstractgateway[apple]==0.7.2; extra == "apple"
40
- Requires-Dist: abstractassistant[apple]==0.9.1; platform_system == "Darwin" and extra == "apple"
39
+ Requires-Dist: abstractgateway[apple]==0.8.0; extra == "apple"
40
+ Requires-Dist: abstractassistant[apple]==0.10.0; platform_system == "Darwin" and extra == "apple"
41
41
  Provides-Extra: gpu
42
- Requires-Dist: abstractgateway[gpu]==0.7.2; extra == "gpu"
43
- Requires-Dist: abstractassistant[gpu]==0.9.1; extra == "gpu"
42
+ Requires-Dist: abstractgateway[gpu]==0.8.0; extra == "gpu"
43
+ Requires-Dist: abstractassistant[gpu]==0.10.0; extra == "gpu"
44
44
  Dynamic: license-file
45
45
 
46
46
  # AbstractFramework
@@ -89,6 +89,13 @@ once: it reads your earlier options from what is installed (or repeat them once)
89
89
  button of gateway 0.7.1 cannot upgrade. Gateway only, apps, and version checks:
90
90
  [Upgrade](docs/install.md#upgrade).
91
91
 
92
+ On Linux or Windows with an NVIDIA GPU (`nvidia-smi` works), the installer picks the `gpu` profile:
93
+ PyTorch and llama.cpp on CUDA, Whisper on the GPU, Diffusers image generation. On Linux it needs
94
+ NVIDIA driver 580 or newer. Its release candidate was rehearsed on a Quadro RTX 5000 on Ubuntu
95
+ 26.04; the measured results, and what the final versions changed, are in GPU on Linux. The Windows gpu install is
96
+ implemented but not yet validated on real NVIDIA hardware. See [GPU on Linux](docs/install.md#gpu-on-linux-nvidia) and
97
+ [GPU on Windows](docs/install.md#gpu-on-windows-nvidia).
98
+
92
99
  The installer sets up the gateway in your user account (no admin password, no system Python),
93
100
  with local voice (Supertonic text-to-speech and Whisper speech-to-text), asks whether to start it
94
101
  at login (Enter = yes; an unattended install leaves it off and says how to turn it on), starts it
@@ -161,7 +168,8 @@ Start here if you're building persistent AI applications — agents that run for
161
168
 
162
169
  - Durable execution that survives crashes and restarts
163
170
  - Append-only ledger (replay-first) for auditability
164
- - Automations: a workflow that runs on a fixed interval or on demand, kept as a readable conversation ([Automations](docs/automations.md))
171
+ - Automations: a workflow that runs on a fixed interval, when an email arrives, or on demand, kept as a readable conversation ([Automations](docs/automations.md))
172
+ - Email for each user: connect your own mailbox, get automation results and approvals by email, and let agents use email tools when an administrator allows it ([Email](https://github.com/lpalbou/AbstractGateway/blob/main/docs/email.md))
165
173
  - Multi-client: terminal, browser, tray, Telegram, email
166
174
  - Start on one device, continue on another
167
175
 
@@ -209,7 +217,7 @@ abstractgateway-console --gateway-url http://127.0.0.1:8080 --token <admin token
209
217
  ```
210
218
 
211
219
  Container images are published for the gateway and the AbstractCore server:
212
- `ghcr.io/lpalbou/abstractgateway:0.7.2` and `ghcr.io/lpalbou/abstractcore-server:2.19.0`.
220
+ `ghcr.io/lpalbou/abstractgateway:0.8.0` and `ghcr.io/lpalbou/abstractcore-server:2.20.1`.
213
221
 
214
222
  For artifact and runtime-resource investigation, see
215
223
  [Runtime artifacts and retrieval](docs/guide/runtime-artifacts.md).
@@ -353,9 +361,9 @@ pip install "abstractframework[gpu]"
353
361
  |---|---|---|---|
354
362
  | Light | `pip install abstractframework` | macOS, Linux, Windows | 3.10–3.13 |
355
363
  | Apple | `pip install "abstractframework[apple]"` | macOS 14+ on Apple Silicon | 3.10–3.13 (F5-TTS voice cloning needs 3.11+) |
356
- | GPU | `pip install "abstractframework[gpu]"` | Linux / Windows with a CUDA or ROCm GPU | 3.10–3.13 (F5-TTS voice cloning needs 3.11+) |
364
+ | GPU | `pip install "abstractframework[gpu]"` | Linux with a CUDA or ROCm GPU; on Windows, use the one-line installer (a plain pip install gets PyPI's CPU-only PyTorch and no llama.cpp) | 3.10–3.13 (F5-TTS voice cloning needs 3.11+) |
357
365
 
358
- ### Release matrix (abstractframework 0.6.2)
366
+ ### Release matrix (abstractframework 0.7.0)
359
367
 
360
368
  `abstractframework` pins every Python package with `==`, so one version of the
361
369
  meta-package always installs the same stack. The browser apps and Rust tools are
@@ -364,32 +372,32 @@ and tested together.
364
372
 
365
373
  | Registry | Package | Version |
366
374
  |---|---|---|
367
- | PyPI | `abstractgateway` | 0.7.2 |
368
- | PyPI | `abstractassistant` | 0.9.1 |
369
- | PyPI | `abstractcore` | 2.19.0 |
370
- | PyPI | `AbstractRuntime` | 0.7.1 |
375
+ | PyPI | `abstractgateway` | 0.8.0 |
376
+ | PyPI | `abstractassistant` | 0.10.0 |
377
+ | PyPI | `abstractcore` | 2.20.1 |
378
+ | PyPI | `AbstractRuntime` | 0.8.0 |
371
379
  | PyPI | `abstractagent` | 0.3.17 |
372
380
  | PyPI | `abstractskill` | 0.3.0 |
373
381
  | PyPI | `AbstractMemory` | 0.3.0 |
374
382
  | PyPI | `abstractsemantics` | 0.0.5 |
375
- | PyPI | `abstractvoice` | 0.13.0 |
376
- | PyPI | `abstractvision` | 0.3.31 |
383
+ | PyPI | `abstractvoice` | 0.13.2 |
384
+ | PyPI | `abstractvision` | 0.3.33 |
377
385
  | PyPI | `abstractmusic` | 0.1.15 |
378
- | PyPI | `abstract3d` | 0.3.1 |
386
+ | PyPI | `abstract3d` | 0.3.2 |
379
387
  | npm | `@abstractframework/flow` | 0.4.0 |
380
- | npm | `@abstractframework/code` | 0.6.1 |
381
- | npm | `@abstractframework/observer` | 0.2.1 |
388
+ | npm | `@abstractframework/code` | 0.7.0 |
389
+ | npm | `@abstractframework/observer` | 0.3.0 |
382
390
  | npm | `@abstractframework/continuum` | 0.4.0 |
383
391
  | npm | `@abstractframework/entity` | 0.3.0 |
384
392
  | crates.io | `abstractcode` | 0.7.1 |
385
- | crates.io | `abstractgateway-console` | 0.11.1 |
386
- | crates.io | `abstractcore-console` | 0.4.1 |
393
+ | crates.io | `abstractgateway-console` | 0.12.0 |
394
+ | crates.io | `abstractcore-console` | 0.5.0 |
387
395
  | crates.io | `abstracttui` | 0.6.0 |
388
- | GHCR | `ghcr.io/lpalbou/abstractgateway` | 0.7.2 (`gpu-latest` / `<version>-gpu` experimental) |
389
- | GHCR | `ghcr.io/lpalbou/abstractcore-server` | 2.19.0 |
396
+ | GHCR | `ghcr.io/lpalbou/abstractgateway` | 0.8.0 (`gpu-latest` / `<version>-gpu` experimental) |
397
+ | GHCR | `ghcr.io/lpalbou/abstractcore-server` | 2.20.1 |
390
398
 
391
399
  `abstract3d` (pinned above) comes with AbstractCore in every profile. The optional add-on that is
392
- not part of any profile installs separately: `pip install abstractcamera` (0.2.0). `abstractskill` (pinned above)
400
+ not part of any profile installs separately: `pip install abstractcamera` (0.2.1). `abstractskill` (pinned above)
393
401
  comes with the gateway, which carries its curated skill shelf; install it on its own with
394
402
  `pip install abstractskill`.
395
403
 
@@ -44,6 +44,13 @@ once: it reads your earlier options from what is installed (or repeat them once)
44
44
  button of gateway 0.7.1 cannot upgrade. Gateway only, apps, and version checks:
45
45
  [Upgrade](docs/install.md#upgrade).
46
46
 
47
+ On Linux or Windows with an NVIDIA GPU (`nvidia-smi` works), the installer picks the `gpu` profile:
48
+ PyTorch and llama.cpp on CUDA, Whisper on the GPU, Diffusers image generation. On Linux it needs
49
+ NVIDIA driver 580 or newer. Its release candidate was rehearsed on a Quadro RTX 5000 on Ubuntu
50
+ 26.04; the measured results, and what the final versions changed, are in GPU on Linux. The Windows gpu install is
51
+ implemented but not yet validated on real NVIDIA hardware. See [GPU on Linux](docs/install.md#gpu-on-linux-nvidia) and
52
+ [GPU on Windows](docs/install.md#gpu-on-windows-nvidia).
53
+
47
54
  The installer sets up the gateway in your user account (no admin password, no system Python),
48
55
  with local voice (Supertonic text-to-speech and Whisper speech-to-text), asks whether to start it
49
56
  at login (Enter = yes; an unattended install leaves it off and says how to turn it on), starts it
@@ -116,7 +123,8 @@ Start here if you're building persistent AI applications — agents that run for
116
123
 
117
124
  - Durable execution that survives crashes and restarts
118
125
  - Append-only ledger (replay-first) for auditability
119
- - Automations: a workflow that runs on a fixed interval or on demand, kept as a readable conversation ([Automations](docs/automations.md))
126
+ - Automations: a workflow that runs on a fixed interval, when an email arrives, or on demand, kept as a readable conversation ([Automations](docs/automations.md))
127
+ - Email for each user: connect your own mailbox, get automation results and approvals by email, and let agents use email tools when an administrator allows it ([Email](https://github.com/lpalbou/AbstractGateway/blob/main/docs/email.md))
120
128
  - Multi-client: terminal, browser, tray, Telegram, email
121
129
  - Start on one device, continue on another
122
130
 
@@ -164,7 +172,7 @@ abstractgateway-console --gateway-url http://127.0.0.1:8080 --token <admin token
164
172
  ```
165
173
 
166
174
  Container images are published for the gateway and the AbstractCore server:
167
- `ghcr.io/lpalbou/abstractgateway:0.7.2` and `ghcr.io/lpalbou/abstractcore-server:2.19.0`.
175
+ `ghcr.io/lpalbou/abstractgateway:0.8.0` and `ghcr.io/lpalbou/abstractcore-server:2.20.1`.
168
176
 
169
177
  For artifact and runtime-resource investigation, see
170
178
  [Runtime artifacts and retrieval](docs/guide/runtime-artifacts.md).
@@ -308,9 +316,9 @@ pip install "abstractframework[gpu]"
308
316
  |---|---|---|---|
309
317
  | Light | `pip install abstractframework` | macOS, Linux, Windows | 3.10–3.13 |
310
318
  | Apple | `pip install "abstractframework[apple]"` | macOS 14+ on Apple Silicon | 3.10–3.13 (F5-TTS voice cloning needs 3.11+) |
311
- | GPU | `pip install "abstractframework[gpu]"` | Linux / Windows with a CUDA or ROCm GPU | 3.10–3.13 (F5-TTS voice cloning needs 3.11+) |
319
+ | GPU | `pip install "abstractframework[gpu]"` | Linux with a CUDA or ROCm GPU; on Windows, use the one-line installer (a plain pip install gets PyPI's CPU-only PyTorch and no llama.cpp) | 3.10–3.13 (F5-TTS voice cloning needs 3.11+) |
312
320
 
313
- ### Release matrix (abstractframework 0.6.2)
321
+ ### Release matrix (abstractframework 0.7.0)
314
322
 
315
323
  `abstractframework` pins every Python package with `==`, so one version of the
316
324
  meta-package always installs the same stack. The browser apps and Rust tools are
@@ -319,32 +327,32 @@ and tested together.
319
327
 
320
328
  | Registry | Package | Version |
321
329
  |---|---|---|
322
- | PyPI | `abstractgateway` | 0.7.2 |
323
- | PyPI | `abstractassistant` | 0.9.1 |
324
- | PyPI | `abstractcore` | 2.19.0 |
325
- | PyPI | `AbstractRuntime` | 0.7.1 |
330
+ | PyPI | `abstractgateway` | 0.8.0 |
331
+ | PyPI | `abstractassistant` | 0.10.0 |
332
+ | PyPI | `abstractcore` | 2.20.1 |
333
+ | PyPI | `AbstractRuntime` | 0.8.0 |
326
334
  | PyPI | `abstractagent` | 0.3.17 |
327
335
  | PyPI | `abstractskill` | 0.3.0 |
328
336
  | PyPI | `AbstractMemory` | 0.3.0 |
329
337
  | PyPI | `abstractsemantics` | 0.0.5 |
330
- | PyPI | `abstractvoice` | 0.13.0 |
331
- | PyPI | `abstractvision` | 0.3.31 |
338
+ | PyPI | `abstractvoice` | 0.13.2 |
339
+ | PyPI | `abstractvision` | 0.3.33 |
332
340
  | PyPI | `abstractmusic` | 0.1.15 |
333
- | PyPI | `abstract3d` | 0.3.1 |
341
+ | PyPI | `abstract3d` | 0.3.2 |
334
342
  | npm | `@abstractframework/flow` | 0.4.0 |
335
- | npm | `@abstractframework/code` | 0.6.1 |
336
- | npm | `@abstractframework/observer` | 0.2.1 |
343
+ | npm | `@abstractframework/code` | 0.7.0 |
344
+ | npm | `@abstractframework/observer` | 0.3.0 |
337
345
  | npm | `@abstractframework/continuum` | 0.4.0 |
338
346
  | npm | `@abstractframework/entity` | 0.3.0 |
339
347
  | crates.io | `abstractcode` | 0.7.1 |
340
- | crates.io | `abstractgateway-console` | 0.11.1 |
341
- | crates.io | `abstractcore-console` | 0.4.1 |
348
+ | crates.io | `abstractgateway-console` | 0.12.0 |
349
+ | crates.io | `abstractcore-console` | 0.5.0 |
342
350
  | crates.io | `abstracttui` | 0.6.0 |
343
- | GHCR | `ghcr.io/lpalbou/abstractgateway` | 0.7.2 (`gpu-latest` / `<version>-gpu` experimental) |
344
- | GHCR | `ghcr.io/lpalbou/abstractcore-server` | 2.19.0 |
351
+ | GHCR | `ghcr.io/lpalbou/abstractgateway` | 0.8.0 (`gpu-latest` / `<version>-gpu` experimental) |
352
+ | GHCR | `ghcr.io/lpalbou/abstractcore-server` | 2.20.1 |
345
353
 
346
354
  `abstract3d` (pinned above) comes with AbstractCore in every profile. The optional add-on that is
347
- not part of any profile installs separately: `pip install abstractcamera` (0.2.0). `abstractskill` (pinned above)
355
+ not part of any profile installs separately: `pip install abstractcamera` (0.2.1). `abstractskill` (pinned above)
348
356
  comes with the gateway, which carries its curated skill shelf; install it on its own with
349
357
  `pip install abstractskill`.
350
358
 
@@ -10,23 +10,23 @@ Most implementation functionality still lives in component projects.
10
10
 
11
11
  from __future__ import annotations
12
12
 
13
- __version__ = "0.6.2"
13
+ __version__ = "0.7.0"
14
14
  __author__ = "Laurent-Philippe Albou"
15
15
  __license__ = "MIT"
16
16
 
17
17
  RELEASE_VERSIONS: dict[str, str] = {
18
- "abstractcore": "2.19.0",
19
- "abstractruntime": "0.7.1",
18
+ "abstractcore": "2.20.1",
19
+ "abstractruntime": "0.8.0",
20
20
  "abstractagent": "0.3.17",
21
- "abstractgateway": "0.7.2",
21
+ "abstractgateway": "0.8.0",
22
22
  "abstractskill": "0.3.0",
23
23
  "abstractmemory": "0.3.0",
24
24
  "abstractsemantics": "0.0.5",
25
- "abstractvoice": "0.13.0",
26
- "abstractvision": "0.3.31",
25
+ "abstractvoice": "0.13.2",
26
+ "abstractvision": "0.3.33",
27
27
  "abstractmusic": "0.1.15",
28
- "abstract3d": "0.3.1",
29
- "abstractassistant": "0.9.1",
28
+ "abstract3d": "0.3.2",
29
+ "abstractassistant": "0.10.0",
30
30
  }
31
31
 
32
32
  PACKAGE_DISTRIBUTIONS: dict[str, str] = {
@@ -46,8 +46,8 @@ PACKAGE_DISTRIBUTIONS: dict[str, str] = {
46
46
 
47
47
  NPM_RELEASE_VERSIONS: dict[str, str] = {
48
48
  "@abstractframework/flow": "0.4.0",
49
- "@abstractframework/code": "0.6.1",
50
- "@abstractframework/observer": "0.2.1",
49
+ "@abstractframework/code": "0.7.0",
50
+ "@abstractframework/observer": "0.3.0",
51
51
  "@abstractframework/continuum": "0.4.0",
52
52
  "@abstractframework/entity": "0.3.0",
53
53
  }
@@ -55,8 +55,8 @@ NPM_RELEASE_VERSIONS: dict[str, str] = {
55
55
  # Terminal tools published on crates.io alongside this release (installed with `cargo install`,
56
56
  # or by the bootstrap scripts: the gateway console and abstractcode by default).
57
57
  CRATE_RELEASE_VERSIONS: dict[str, str] = {
58
- "abstractgateway-console": "0.11.1",
59
- "abstractcore-console": "0.4.1",
58
+ "abstractgateway-console": "0.12.0",
59
+ "abstractcore-console": "0.5.0",
60
60
  "abstractcode": "0.7.1",
61
61
  "abstracttui": "0.6.0",
62
62
  }