abstractframework 0.9.3__tar.gz → 0.9.4__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 (199) hide show
  1. {abstractframework-0.9.3 → abstractframework-0.9.4}/CHANGELOG.md +6 -0
  2. {abstractframework-0.9.3/abstractframework.egg-info → abstractframework-0.9.4}/PKG-INFO +16 -16
  3. {abstractframework-0.9.3 → abstractframework-0.9.4}/README.md +8 -8
  4. {abstractframework-0.9.3 → abstractframework-0.9.4}/abstractframework/__init__.py +6 -6
  5. {abstractframework-0.9.3 → abstractframework-0.9.4/abstractframework.egg-info}/PKG-INFO +16 -16
  6. {abstractframework-0.9.3 → abstractframework-0.9.4}/abstractframework.egg-info/requires.txt +7 -7
  7. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/api.md +6 -6
  8. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/automations.md +25 -19
  9. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/faq.md +1 -1
  10. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/email-integration.md +4 -6
  11. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/install.md +9 -9
  12. {abstractframework-0.9.3 → abstractframework-0.9.4}/llms-full.txt +68 -64
  13. {abstractframework-0.9.3 → abstractframework-0.9.4}/llms.txt +1 -1
  14. {abstractframework-0.9.3 → abstractframework-0.9.4}/pyproject.toml +8 -8
  15. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/install.sh +4 -4
  16. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/tests/test_inventory.sh +2 -2
  17. {abstractframework-0.9.3 → abstractframework-0.9.4}/LICENSE +0 -0
  18. {abstractframework-0.9.3 → abstractframework-0.9.4}/MANIFEST.in +0 -0
  19. {abstractframework-0.9.3 → abstractframework-0.9.4}/abstractframework/__main__.py +0 -0
  20. {abstractframework-0.9.3 → abstractframework-0.9.4}/abstractframework/cli.py +0 -0
  21. {abstractframework-0.9.3 → abstractframework-0.9.4}/abstractframework/install_manifest.py +0 -0
  22. {abstractframework-0.9.3 → abstractframework-0.9.4}/abstractframework/py.typed +0 -0
  23. {abstractframework-0.9.3 → abstractframework-0.9.4}/abstractframework.egg-info/SOURCES.txt +0 -0
  24. {abstractframework-0.9.3 → abstractframework-0.9.4}/abstractframework.egg-info/dependency_links.txt +0 -0
  25. {abstractframework-0.9.3 → abstractframework-0.9.4}/abstractframework.egg-info/entry_points.txt +0 -0
  26. {abstractframework-0.9.3 → abstractframework-0.9.4}/abstractframework.egg-info/top_level.txt +0 -0
  27. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/README.md +0 -0
  28. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0001-layered-architecture.md +0 -0
  29. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0002-effect-system-design.md +0 -0
  30. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0003-tool-system-architecture.md +0 -0
  31. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0004-observability-strategy.md +0 -0
  32. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0005-memory-architecture.md +0 -0
  33. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0006-durable-tool-execution.md +0 -0
  34. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0007-active-context-and-memory-provenance.md +0 -0
  35. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0008-token-terminology.md +0 -0
  36. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0009-connected-memory-recall-and-provenance.md +0 -0
  37. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0010-runtime-owned-node-traces.md +0 -0
  38. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0011-ledger-subscriptions-and-event-bridge.md +0 -0
  39. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0012-portable-workflowartifact.md +0 -0
  40. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0013-durable-run-controls-pause-resume-cancel.md +0 -0
  41. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0014-runtime-authority-timeouts.md +0 -0
  42. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0015-execution-targets-and-remote-tool-workers.md +0 -0
  43. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0016-tool-calling-pipeline-and-responsibility-boundaries.md +0 -0
  44. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0017-host-ui-events-and-durable-prompts.md +0 -0
  45. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0018-durable-run-gateway-and-remote-host-control-plane.md +0 -0
  46. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0019-testing-strategy-and-levels.md +0 -0
  47. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0020-agent-host-pool-and-orchestrator-placement.md +0 -0
  48. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0021-deployment-topologies-and-supported-scenarios.md +0 -0
  49. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0022-orchestrator-host-and-runtime-daemonization.md +0 -0
  50. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0023-file-attachment-path-resolution-and-authorization.md +0 -0
  51. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0024-attachment-placeholders-and-compaction-invariants.md +0 -0
  52. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0025-kg-entity-normalization-and-dedup.md +0 -0
  53. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0026-truncation-policy-and-contract.md +0 -0
  54. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0027-timeout-policy-and-contract.md +0 -0
  55. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0028-capabilities-plugins-and-library-framework-modes.md +0 -0
  56. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0029-permissive-dependency-and-licensing-policy.md +0 -0
  57. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0030-security-test-fixtures-and-isolation.md +0 -0
  58. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0031-workflow-llm-routing-overrides-provider-model-and-base-url.md +0 -0
  59. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0032-package-dependency-boundaries-and-gateway-first-apps.md +0 -0
  60. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0033-install-profiles-config-entrypoints-and-server-boundaries.md +0 -0
  61. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0034-framework-release-sequence-and-gates.md +0 -0
  62. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0035-capability-routing-defaults.md +0 -0
  63. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0036-artifact-descriptor-contract.md +0 -0
  64. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0037-hosted-file-source-contract-and-workspacepath-authority.md +0 -0
  65. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/0038-script-bootstrap-and-gateway-console-install.md +0 -0
  66. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/README.md +0 -0
  67. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/memory-recall-levels.md +0 -0
  68. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/reorg/001_music_as_capability_plugin_via_acestep_api.md +0 -0
  69. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/reorg/002_abstractmusic_inprocess_local_generation.md +0 -0
  70. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/reorg/003_abstractmusic_acestep_v15_backend_source_strategy.md +0 -0
  71. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/reorg/004_smartnote_thin_client_architecture.md +0 -0
  72. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/reorg/005_smartnote_artifact_first_cards.md +0 -0
  73. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/reorg/2026-02-21_gateway-first-assistant.md +0 -0
  74. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/reorg/2026-02-21_installer_manager_strategy.md +0 -0
  75. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/adr/reorg/2026-02-21_macos_installer_manager.md +0 -0
  76. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/agent-sessions.md +0 -0
  77. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/architecture.md +0 -0
  78. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/claude/README.md +0 -0
  79. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/claude/abstractframework-fit.md +0 -0
  80. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/claude/claude-skills-overview.md +0 -0
  81. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/claude/claude-skills-sources.md +0 -0
  82. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/claude/claude-skills-top-20.md +0 -0
  83. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/comparisons/README.md +0 -0
  84. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/configuration.md +0 -0
  85. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/getting-started.md +0 -0
  86. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/glossary.md +0 -0
  87. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/LANDING.md +0 -0
  88. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/README.md +0 -0
  89. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/agent-skills.md +0 -0
  90. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/agent-vs-llm.md +0 -0
  91. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/agora-workflow-agent.md +0 -0
  92. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/apple-local-gateway-flow.md +0 -0
  93. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/capability-plugins.md +0 -0
  94. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/capability-routing-defaults.md +0 -0
  95. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/deployment-iphone.md +0 -0
  96. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/deployment-topologies.md +0 -0
  97. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/deployment-web.md +0 -0
  98. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/event-inbox-agent.md +0 -0
  99. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/flow-and-kg-memory.md +0 -0
  100. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/gateway-security.md +0 -0
  101. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/headless-swarm.md +0 -0
  102. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/process-manager-env-vars.md +0 -0
  103. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/prompt-caching.md +0 -0
  104. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/runtime-artifacts.md +0 -0
  105. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/runtime-scope.md +0 -0
  106. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/scheduled-workflows.md +0 -0
  107. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/summoned-entities.md +0 -0
  108. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/telegram-integration.md +0 -0
  109. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/guide/workflow-bundles.md +0 -0
  110. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/installers/README.md +0 -0
  111. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/installers/components.md +0 -0
  112. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/installers/implementation-plan.md +0 -0
  113. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/installers/operations-and-support.md +0 -0
  114. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/installers/release-and-manifest.md +0 -0
  115. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/installers/security-and-os-blocks.md +0 -0
  116. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/installers/strategy.md +0 -0
  117. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/installers/user-journeys.md +0 -0
  118. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/prompts/agora-collaboration.md +0 -0
  119. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/scenarios/README.md +0 -0
  120. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/scenarios/email-inbox-agent.md +0 -0
  121. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/scenarios/gateway-first-local-dev.md +0 -0
  122. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/scenarios/offline-coding-assistant.md +0 -0
  123. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/scenarios/phone-thin-client.md +0 -0
  124. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/scenarios/specialized-agent-flow.md +0 -0
  125. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/scenarios/telegram-permanent-contact.md +0 -0
  126. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/scenarios/workflow-bundle-lifecycle.md +0 -0
  127. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/skills/README.md +0 -0
  128. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/skills/abstractframework-agent-skills-fit.md +0 -0
  129. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/skills/abstractframework-architecture-deep-dive.md +0 -0
  130. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/skills/agent-skills-ecosystem-scan.md +0 -0
  131. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/skills/agent-skills-ecosystem-sources.md +0 -0
  132. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/skills/claude-agent-skills-overview.md +0 -0
  133. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/skills/claude-agent-skills-sources.md +0 -0
  134. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/skills/claude-agent-skills-top-20.md +0 -0
  135. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/troubleshooting.md +0 -0
  136. {abstractframework-0.9.3 → abstractframework-0.9.4}/docs/workspace-scripts.md +0 -0
  137. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/af-local.sh +0 -0
  138. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/af.sh +0 -0
  139. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/agora_react_flow_smoke.py +0 -0
  140. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/assistant-local.sh +0 -0
  141. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/assistant.sh +0 -0
  142. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/build.sh +0 -0
  143. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/cache_probe_local_backends.py +0 -0
  144. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/cache_steer_repl.py +0 -0
  145. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/check_identity_sync.py +0 -0
  146. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/clone.sh +0 -0
  147. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/code-local.sh +0 -0
  148. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/code.sh +0 -0
  149. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/commit.sh +0 -0
  150. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/console-local.sh +0 -0
  151. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/console.sh +0 -0
  152. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/core_operator_drive.py +0 -0
  153. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/deps.sh +0 -0
  154. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/entity-local.sh +0 -0
  155. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/entity.sh +0 -0
  156. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/event_inbox_flow_smoke.py +0 -0
  157. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/flow-local.sh +0 -0
  158. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/flow.sh +0 -0
  159. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/gateway-flow-local.sh +0 -0
  160. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/gateway-flow.sh +0 -0
  161. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/gateway-local.sh +0 -0
  162. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/gateway.sh +0 -0
  163. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/gen_llms_full.py +0 -0
  164. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/headless_fleet_bridge.py +0 -0
  165. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/headless_fleet_demo.py +0 -0
  166. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/headless_steer_repl.py +0 -0
  167. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/lib/af_inventory.py +0 -0
  168. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/lib/af_stack.sh +0 -0
  169. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/lib/af_supervisor.sh +0 -0
  170. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/lib/apps_common.sh +0 -0
  171. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/lib/build_macos_installer.sh +0 -0
  172. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/lib/gateway_user_tokens.py +0 -0
  173. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/lib/repo_groups.sh +0 -0
  174. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/meet_castor.sh +0 -0
  175. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/observer-local.sh +0 -0
  176. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/observer.sh +0 -0
  177. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/plan_walkthrough.py +0 -0
  178. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/pull.sh +0 -0
  179. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/push.sh +0 -0
  180. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/spawn_demo_agent.sh +0 -0
  181. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/start-local.sh +0 -0
  182. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/start.sh +0 -0
  183. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/status.sh +0 -0
  184. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/steer_repl.py +0 -0
  185. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/tests/test_af_supervisor.sh +0 -0
  186. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/tests/test_install_user_path.sh +0 -0
  187. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/tests/test_repo_scripts.sh +0 -0
  188. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/uninstall.sh +0 -0
  189. {abstractframework-0.9.3 → abstractframework-0.9.4}/scripts/visit_resume_cache_probe.py +0 -0
  190. {abstractframework-0.9.3 → abstractframework-0.9.4}/setup.cfg +0 -0
  191. {abstractframework-0.9.3 → abstractframework-0.9.4}/tests/test_install_app_upgrade.py +0 -0
  192. {abstractframework-0.9.3 → abstractframework-0.9.4}/tests/test_install_index_lag.py +0 -0
  193. {abstractframework-0.9.3 → abstractframework-0.9.4}/tests/test_install_profiles.py +0 -0
  194. {abstractframework-0.9.3 → abstractframework-0.9.4}/tests/test_install_ps1_gpu_stack.py +0 -0
  195. {abstractframework-0.9.3 → abstractframework-0.9.4}/tests/test_install_ps1_own_gateway.py +0 -0
  196. {abstractframework-0.9.3 → abstractframework-0.9.4}/tests/test_install_sh_gpu_stack.py +0 -0
  197. {abstractframework-0.9.3 → abstractframework-0.9.4}/tests/test_install_sh_gpu_twin.py +0 -0
  198. {abstractframework-0.9.3 → abstractframework-0.9.4}/tests/test_llms_full.py +0 -0
  199. {abstractframework-0.9.3 → abstractframework-0.9.4}/tests/test_uv_tool_install_atomicity.py +0 -0
@@ -6,6 +6,12 @@ All notable changes to AbstractFramework will be documented in this file.
6
6
 
7
7
  Nothing yet.
8
8
 
9
+ ## [0.9.4] - 2026-10-02
10
+
11
+ - Automations in Assistant, Code Web and Observer support a configurable growing-context budget at creation and editing, defaulting to 50,000 tokens. The budget control appears only for Growing context.
12
+ - Email result delivers each completed result to the selected Recipients. Code shows loading messages and spinners for conversations and automations, including initial gateway discovery.
13
+ - Pins AbstractRuntime 0.8.4, AbstractGateway 0.11.3 and AbstractAssistant 0.12.2. Installer app versions are Code 0.10.2 and Observer 0.6.1, both using UI Kit 0.5.1 (AbstractUIC release 0.5.2).
14
+
9
15
  ## [0.9.3] - 2026-10-02
10
16
 
11
17
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstractframework
3
- Version: 0.9.3
3
+ Version: 0.9.4
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,10 +23,10 @@ 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.11.2
27
- Requires-Dist: abstractassistant==0.12.1
26
+ Requires-Dist: abstractgateway==0.11.3
27
+ Requires-Dist: abstractassistant==0.12.2
28
28
  Requires-Dist: abstractcore==2.23.1
29
- Requires-Dist: AbstractRuntime==0.8.3
29
+ Requires-Dist: AbstractRuntime==0.8.4
30
30
  Requires-Dist: abstractagent==0.3.17
31
31
  Requires-Dist: abstractskill==0.3.0
32
32
  Requires-Dist: AbstractMemory==0.3.0
@@ -36,11 +36,11 @@ Requires-Dist: abstractvision==0.3.33
36
36
  Requires-Dist: abstractmusic==0.1.15
37
37
  Requires-Dist: abstract3d==0.3.2
38
38
  Provides-Extra: apple
39
- Requires-Dist: abstractgateway[apple]==0.11.2; extra == "apple"
40
- Requires-Dist: abstractassistant[apple]==0.12.1; platform_system == "Darwin" and extra == "apple"
39
+ Requires-Dist: abstractgateway[apple]==0.11.3; extra == "apple"
40
+ Requires-Dist: abstractassistant[apple]==0.12.2; platform_system == "Darwin" and extra == "apple"
41
41
  Provides-Extra: gpu
42
- Requires-Dist: abstractgateway[gpu]==0.11.2; extra == "gpu"
43
- Requires-Dist: abstractassistant[gpu]==0.12.1; extra == "gpu"
42
+ Requires-Dist: abstractgateway[gpu]==0.11.3; extra == "gpu"
43
+ Requires-Dist: abstractassistant[gpu]==0.12.2; extra == "gpu"
44
44
  Dynamic: license-file
45
45
 
46
46
  # AbstractFramework
@@ -219,7 +219,7 @@ abstractgateway-console --gateway-url http://127.0.0.1:8080 --token <admin token
219
219
  ```
220
220
 
221
221
  Container images are published for the gateway and the AbstractCore server:
222
- `ghcr.io/lpalbou/abstractgateway:0.11.2` and `ghcr.io/lpalbou/abstractcore-server:2.23.1`.
222
+ `ghcr.io/lpalbou/abstractgateway:0.11.3` and `ghcr.io/lpalbou/abstractcore-server:2.23.1`.
223
223
 
224
224
  For artifact and runtime-resource investigation, see
225
225
  [Runtime artifacts and retrieval](docs/guide/runtime-artifacts.md).
@@ -369,7 +369,7 @@ pip install "abstractframework[gpu]"
369
369
  | Apple | `pip install "abstractframework[apple]"` | macOS 14+ on Apple Silicon | 3.10–3.13 (F5-TTS voice cloning needs 3.11+) |
370
370
  | 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+) |
371
371
 
372
- ### Release matrix (abstractframework 0.9.3)
372
+ ### Release matrix (abstractframework 0.9.4)
373
373
 
374
374
  `abstractframework` pins every Python package with `==`, so one version of the
375
375
  meta-package always installs the same stack. The browser apps and Rust tools are
@@ -378,10 +378,10 @@ and tested together.
378
378
 
379
379
  | Registry | Package | Version |
380
380
  |---|---|---|
381
- | PyPI | `abstractgateway` | 0.11.2 |
382
- | PyPI | `abstractassistant` | 0.12.1 |
381
+ | PyPI | `abstractgateway` | 0.11.3 |
382
+ | PyPI | `abstractassistant` | 0.12.2 |
383
383
  | PyPI | `abstractcore` | 2.23.1 |
384
- | PyPI | `AbstractRuntime` | 0.8.3 |
384
+ | PyPI | `AbstractRuntime` | 0.8.4 |
385
385
  | PyPI | `abstractagent` | 0.3.17 |
386
386
  | PyPI | `abstractskill` | 0.3.0 |
387
387
  | PyPI | `AbstractMemory` | 0.3.0 |
@@ -391,15 +391,15 @@ and tested together.
391
391
  | PyPI | `abstractmusic` | 0.1.15 |
392
392
  | PyPI | `abstract3d` | 0.3.2 |
393
393
  | npm | `@abstractframework/flow` | 0.7.0 |
394
- | npm | `@abstractframework/code` | 0.10.1 |
395
- | npm | `@abstractframework/observer` | 0.6.0 |
394
+ | npm | `@abstractframework/code` | 0.10.2 |
395
+ | npm | `@abstractframework/observer` | 0.6.1 |
396
396
  | npm | `@abstractframework/continuum` | 0.6.0 |
397
397
  | npm | `@abstractframework/entity` | 0.6.0 |
398
398
  | crates.io | `abstractcode` | 0.8.0 |
399
399
  | crates.io | `abstractgateway-console` | 0.14.0 |
400
400
  | crates.io | `abstractcore-console` | 0.7.0 |
401
401
  | crates.io | `abstracttui` | 0.6.0 |
402
- | GHCR | `ghcr.io/lpalbou/abstractgateway` | 0.11.2 (`gpu-latest` / `<version>-gpu` experimental) |
402
+ | GHCR | `ghcr.io/lpalbou/abstractgateway` | 0.11.3 (`gpu-latest` / `<version>-gpu` experimental) |
403
403
  | GHCR | `ghcr.io/lpalbou/abstractcore-server` | 2.23.1 |
404
404
 
405
405
  `abstract3d` (pinned above) comes with AbstractCore in every profile. The optional add-on that is
@@ -174,7 +174,7 @@ abstractgateway-console --gateway-url http://127.0.0.1:8080 --token <admin token
174
174
  ```
175
175
 
176
176
  Container images are published for the gateway and the AbstractCore server:
177
- `ghcr.io/lpalbou/abstractgateway:0.11.2` and `ghcr.io/lpalbou/abstractcore-server:2.23.1`.
177
+ `ghcr.io/lpalbou/abstractgateway:0.11.3` and `ghcr.io/lpalbou/abstractcore-server:2.23.1`.
178
178
 
179
179
  For artifact and runtime-resource investigation, see
180
180
  [Runtime artifacts and retrieval](docs/guide/runtime-artifacts.md).
@@ -324,7 +324,7 @@ pip install "abstractframework[gpu]"
324
324
  | Apple | `pip install "abstractframework[apple]"` | macOS 14+ on Apple Silicon | 3.10–3.13 (F5-TTS voice cloning needs 3.11+) |
325
325
  | 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+) |
326
326
 
327
- ### Release matrix (abstractframework 0.9.3)
327
+ ### Release matrix (abstractframework 0.9.4)
328
328
 
329
329
  `abstractframework` pins every Python package with `==`, so one version of the
330
330
  meta-package always installs the same stack. The browser apps and Rust tools are
@@ -333,10 +333,10 @@ and tested together.
333
333
 
334
334
  | Registry | Package | Version |
335
335
  |---|---|---|
336
- | PyPI | `abstractgateway` | 0.11.2 |
337
- | PyPI | `abstractassistant` | 0.12.1 |
336
+ | PyPI | `abstractgateway` | 0.11.3 |
337
+ | PyPI | `abstractassistant` | 0.12.2 |
338
338
  | PyPI | `abstractcore` | 2.23.1 |
339
- | PyPI | `AbstractRuntime` | 0.8.3 |
339
+ | PyPI | `AbstractRuntime` | 0.8.4 |
340
340
  | PyPI | `abstractagent` | 0.3.17 |
341
341
  | PyPI | `abstractskill` | 0.3.0 |
342
342
  | PyPI | `AbstractMemory` | 0.3.0 |
@@ -346,15 +346,15 @@ and tested together.
346
346
  | PyPI | `abstractmusic` | 0.1.15 |
347
347
  | PyPI | `abstract3d` | 0.3.2 |
348
348
  | npm | `@abstractframework/flow` | 0.7.0 |
349
- | npm | `@abstractframework/code` | 0.10.1 |
350
- | npm | `@abstractframework/observer` | 0.6.0 |
349
+ | npm | `@abstractframework/code` | 0.10.2 |
350
+ | npm | `@abstractframework/observer` | 0.6.1 |
351
351
  | npm | `@abstractframework/continuum` | 0.6.0 |
352
352
  | npm | `@abstractframework/entity` | 0.6.0 |
353
353
  | crates.io | `abstractcode` | 0.8.0 |
354
354
  | crates.io | `abstractgateway-console` | 0.14.0 |
355
355
  | crates.io | `abstractcore-console` | 0.7.0 |
356
356
  | crates.io | `abstracttui` | 0.6.0 |
357
- | GHCR | `ghcr.io/lpalbou/abstractgateway` | 0.11.2 (`gpu-latest` / `<version>-gpu` experimental) |
357
+ | GHCR | `ghcr.io/lpalbou/abstractgateway` | 0.11.3 (`gpu-latest` / `<version>-gpu` experimental) |
358
358
  | GHCR | `ghcr.io/lpalbou/abstractcore-server` | 2.23.1 |
359
359
 
360
360
  `abstract3d` (pinned above) comes with AbstractCore in every profile. The optional add-on that is
@@ -10,15 +10,15 @@ Most implementation functionality still lives in component projects.
10
10
 
11
11
  from __future__ import annotations
12
12
 
13
- __version__ = "0.9.3"
13
+ __version__ = "0.9.4"
14
14
  __author__ = "Laurent-Philippe Albou"
15
15
  __license__ = "MIT"
16
16
 
17
17
  RELEASE_VERSIONS: dict[str, str] = {
18
18
  "abstractcore": "2.23.1",
19
- "abstractruntime": "0.8.3",
19
+ "abstractruntime": "0.8.4",
20
20
  "abstractagent": "0.3.17",
21
- "abstractgateway": "0.11.2",
21
+ "abstractgateway": "0.11.3",
22
22
  "abstractskill": "0.3.0",
23
23
  "abstractmemory": "0.3.0",
24
24
  "abstractsemantics": "0.0.5",
@@ -26,7 +26,7 @@ RELEASE_VERSIONS: dict[str, str] = {
26
26
  "abstractvision": "0.3.33",
27
27
  "abstractmusic": "0.1.15",
28
28
  "abstract3d": "0.3.2",
29
- "abstractassistant": "0.12.1",
29
+ "abstractassistant": "0.12.2",
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.7.0",
49
- "@abstractframework/code": "0.10.1",
50
- "@abstractframework/observer": "0.6.0",
49
+ "@abstractframework/code": "0.10.2",
50
+ "@abstractframework/observer": "0.6.1",
51
51
  "@abstractframework/continuum": "0.6.0",
52
52
  "@abstractframework/entity": "0.6.0",
53
53
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstractframework
3
- Version: 0.9.3
3
+ Version: 0.9.4
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,10 +23,10 @@ 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.11.2
27
- Requires-Dist: abstractassistant==0.12.1
26
+ Requires-Dist: abstractgateway==0.11.3
27
+ Requires-Dist: abstractassistant==0.12.2
28
28
  Requires-Dist: abstractcore==2.23.1
29
- Requires-Dist: AbstractRuntime==0.8.3
29
+ Requires-Dist: AbstractRuntime==0.8.4
30
30
  Requires-Dist: abstractagent==0.3.17
31
31
  Requires-Dist: abstractskill==0.3.0
32
32
  Requires-Dist: AbstractMemory==0.3.0
@@ -36,11 +36,11 @@ Requires-Dist: abstractvision==0.3.33
36
36
  Requires-Dist: abstractmusic==0.1.15
37
37
  Requires-Dist: abstract3d==0.3.2
38
38
  Provides-Extra: apple
39
- Requires-Dist: abstractgateway[apple]==0.11.2; extra == "apple"
40
- Requires-Dist: abstractassistant[apple]==0.12.1; platform_system == "Darwin" and extra == "apple"
39
+ Requires-Dist: abstractgateway[apple]==0.11.3; extra == "apple"
40
+ Requires-Dist: abstractassistant[apple]==0.12.2; platform_system == "Darwin" and extra == "apple"
41
41
  Provides-Extra: gpu
42
- Requires-Dist: abstractgateway[gpu]==0.11.2; extra == "gpu"
43
- Requires-Dist: abstractassistant[gpu]==0.12.1; extra == "gpu"
42
+ Requires-Dist: abstractgateway[gpu]==0.11.3; extra == "gpu"
43
+ Requires-Dist: abstractassistant[gpu]==0.12.2; extra == "gpu"
44
44
  Dynamic: license-file
45
45
 
46
46
  # AbstractFramework
@@ -219,7 +219,7 @@ abstractgateway-console --gateway-url http://127.0.0.1:8080 --token <admin token
219
219
  ```
220
220
 
221
221
  Container images are published for the gateway and the AbstractCore server:
222
- `ghcr.io/lpalbou/abstractgateway:0.11.2` and `ghcr.io/lpalbou/abstractcore-server:2.23.1`.
222
+ `ghcr.io/lpalbou/abstractgateway:0.11.3` and `ghcr.io/lpalbou/abstractcore-server:2.23.1`.
223
223
 
224
224
  For artifact and runtime-resource investigation, see
225
225
  [Runtime artifacts and retrieval](docs/guide/runtime-artifacts.md).
@@ -369,7 +369,7 @@ pip install "abstractframework[gpu]"
369
369
  | Apple | `pip install "abstractframework[apple]"` | macOS 14+ on Apple Silicon | 3.10–3.13 (F5-TTS voice cloning needs 3.11+) |
370
370
  | 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+) |
371
371
 
372
- ### Release matrix (abstractframework 0.9.3)
372
+ ### Release matrix (abstractframework 0.9.4)
373
373
 
374
374
  `abstractframework` pins every Python package with `==`, so one version of the
375
375
  meta-package always installs the same stack. The browser apps and Rust tools are
@@ -378,10 +378,10 @@ and tested together.
378
378
 
379
379
  | Registry | Package | Version |
380
380
  |---|---|---|
381
- | PyPI | `abstractgateway` | 0.11.2 |
382
- | PyPI | `abstractassistant` | 0.12.1 |
381
+ | PyPI | `abstractgateway` | 0.11.3 |
382
+ | PyPI | `abstractassistant` | 0.12.2 |
383
383
  | PyPI | `abstractcore` | 2.23.1 |
384
- | PyPI | `AbstractRuntime` | 0.8.3 |
384
+ | PyPI | `AbstractRuntime` | 0.8.4 |
385
385
  | PyPI | `abstractagent` | 0.3.17 |
386
386
  | PyPI | `abstractskill` | 0.3.0 |
387
387
  | PyPI | `AbstractMemory` | 0.3.0 |
@@ -391,15 +391,15 @@ and tested together.
391
391
  | PyPI | `abstractmusic` | 0.1.15 |
392
392
  | PyPI | `abstract3d` | 0.3.2 |
393
393
  | npm | `@abstractframework/flow` | 0.7.0 |
394
- | npm | `@abstractframework/code` | 0.10.1 |
395
- | npm | `@abstractframework/observer` | 0.6.0 |
394
+ | npm | `@abstractframework/code` | 0.10.2 |
395
+ | npm | `@abstractframework/observer` | 0.6.1 |
396
396
  | npm | `@abstractframework/continuum` | 0.6.0 |
397
397
  | npm | `@abstractframework/entity` | 0.6.0 |
398
398
  | crates.io | `abstractcode` | 0.8.0 |
399
399
  | crates.io | `abstractgateway-console` | 0.14.0 |
400
400
  | crates.io | `abstractcore-console` | 0.7.0 |
401
401
  | crates.io | `abstracttui` | 0.6.0 |
402
- | GHCR | `ghcr.io/lpalbou/abstractgateway` | 0.11.2 (`gpu-latest` / `<version>-gpu` experimental) |
402
+ | GHCR | `ghcr.io/lpalbou/abstractgateway` | 0.11.3 (`gpu-latest` / `<version>-gpu` experimental) |
403
403
  | GHCR | `ghcr.io/lpalbou/abstractcore-server` | 2.23.1 |
404
404
 
405
405
  `abstract3d` (pinned above) comes with AbstractCore in every profile. The optional add-on that is
@@ -1,7 +1,7 @@
1
- abstractgateway==0.11.2
2
- abstractassistant==0.12.1
1
+ abstractgateway==0.11.3
2
+ abstractassistant==0.12.2
3
3
  abstractcore==2.23.1
4
- AbstractRuntime==0.8.3
4
+ AbstractRuntime==0.8.4
5
5
  abstractagent==0.3.17
6
6
  abstractskill==0.3.0
7
7
  AbstractMemory==0.3.0
@@ -12,11 +12,11 @@ abstractmusic==0.1.15
12
12
  abstract3d==0.3.2
13
13
 
14
14
  [apple]
15
- abstractgateway[apple]==0.11.2
15
+ abstractgateway[apple]==0.11.3
16
16
 
17
17
  [apple:platform_system == "Darwin"]
18
- abstractassistant[apple]==0.12.1
18
+ abstractassistant[apple]==0.12.2
19
19
 
20
20
  [gpu]
21
- abstractgateway[gpu]==0.11.2
22
- abstractassistant[gpu]==0.12.1
21
+ abstractgateway[gpu]==0.11.3
22
+ abstractassistant[gpu]==0.12.2
@@ -55,14 +55,14 @@ The response type returned by `llm.generate(...)`.
55
55
 
56
56
  ### `__version__`
57
57
 
58
- The meta-package version (`0.9.3` for this release).
58
+ The meta-package version (`0.9.4` for this release).
59
59
 
60
60
  ### `RELEASE_VERSIONS`
61
61
 
62
- Dictionary mapping each ecosystem package name to the pinned version for this release. In 0.9.3:
63
- `abstractcore` 2.23.1, `abstractruntime` 0.8.3, `abstractagent` 0.3.17, `abstractgateway` 0.11.2,
62
+ Dictionary mapping each ecosystem package name to the pinned version for this release. In 0.9.4:
63
+ `abstractcore` 2.23.1, `abstractruntime` 0.8.4, `abstractagent` 0.3.17, `abstractgateway` 0.11.3,
64
64
  `abstractskill` 0.3.0, `abstractmemory` 0.3.0, `abstractsemantics` 0.0.5, `abstractvoice` 0.13.2, `abstractvision` 0.3.33,
65
- `abstractmusic` 0.1.15, `abstract3d` 0.3.2, `abstractassistant` 0.12.1.
65
+ `abstractmusic` 0.1.15, `abstract3d` 0.3.2, `abstractassistant` 0.12.2.
66
66
 
67
67
  ### `PACKAGE_DISTRIBUTIONS`
68
68
 
@@ -72,8 +72,8 @@ Maps each package name in `RELEASE_VERSIONS` to its PyPI distribution name (for
72
72
  ### `NPM_RELEASE_VERSIONS`
73
73
 
74
74
  The npm apps released with this version, each runnable with `npx <package>`:
75
- `@abstractframework/flow` 0.7.0, `@abstractframework/code` 0.10.1,
76
- `@abstractframework/observer` 0.6.0, `@abstractframework/continuum` 0.6.0 and
75
+ `@abstractframework/flow` 0.7.0, `@abstractframework/code` 0.10.2,
76
+ `@abstractframework/observer` 0.6.1, `@abstractframework/continuum` 0.6.0 and
77
77
  `@abstractframework/entity` 0.6.0. They also appear as `npm_apps` in the install manifest.
78
78
 
79
79
  ### `CRATE_RELEASE_VERSIONS`
@@ -58,12 +58,11 @@ page say so and stay disabled.
58
58
  one-turn conversation. Use it for checks that stand on their own (memory use, disk space, a
59
59
  health probe).
60
60
  - *Growing*: every occurrence is the next turn of one conversation (session
61
- `automation:<id>`) and receives the previous turns as history: the most recent 50 000 tokens
62
- of whole turns (no message is ever cut; the model keeps the rest of its context window). Use it
61
+ `automation:<id>`) and receives the previous turns as history: whole turns within the configured budget (50,000 tokens by default) (no message is ever cut; the model keeps the rest of its context window). Use it
63
62
  when the answer depends on previous ticks ("the change since the previous check"). Each
64
63
  occurrence run records what was replayed and dropped in `_runtime.session_history`.
65
64
  - **Quiet by default.** An ordinary result updates the automation's history and notifies no one.
66
- An occurrence asks for your attention only when its output carries `notify`, when it failed after
65
+ An occurrence asks for your attention when result email is enabled, when its output carries `notify`, when it failed after
67
66
  its last retry, or while it waits for you (see [What notifies you](#what-notifies-you-and-when)).
68
67
  - **Creating an automation is the consent for its tools.** An automation runs unattended, so it
69
68
  cannot stop to ask before every tool call. With the default tool approval (`auto`, shown in the
@@ -132,8 +131,8 @@ The clock button in the palette header opens **Schedule this conversation…**:
132
131
  minutes/hours/days, or once at a date and time; an optional first-run time (empty means now).
133
132
  - **Context**: Independent (default) or Growing.
134
133
  - **Tools**: Tools run without asking (default) or Ask each time.
135
- - **Mailbox**: **When an email arrives** as the When choice, **Email me the result** and the
136
- recipients it may email without asking (see [Email automations](#email-automations)).
134
+ - **Mailbox**: **When an email arrives** as the When choice, **Email result** and the
135
+ result recipients (see [Email automations](#email-automations)).
137
136
 
138
137
  **Schedule** creates the automation and opens it in the Assistant's Automations section.
139
138
 
@@ -147,8 +146,7 @@ Open **Launch** and switch **Run once | Automate** to **Automate**:
147
146
  2. **When (UTC)**: **Repeat** every N minutes, hours or days, or **Once at** a date and time.
148
147
  3. **Context**: Independent or Growing.
149
148
  4. **Tools**: Tools run without asking, or Ask each time.
150
- 5. **Mailbox**: **When an email arrives** (a When choice), **Email me the result** and the recipients
151
- it may email without asking (see [Email automations](#email-automations)).
149
+ 5. **Mailbox**: **When an email arrives** (a When choice), **Email result** and the result recipients (see [Email automations](#email-automations)).
152
150
 
153
151
  **Advanced** holds the title, the first run time, "stop after this many runs", "stop at", skills
154
152
  and the workspace. **Create automation** opens the new automation on the Automations page.
@@ -228,20 +226,17 @@ mailbox first — open My email", its controls are unavailable, and nothing emai
228
226
  none of your email automations was active; mail sent right after you create the automation
229
227
  counts. Mail that arrives while the gateway is stopped is read when it is back. The gateway only
230
228
  reads the mailbox: it never marks, moves or deletes mail.
231
- - **Email me the result** — a switch, `notify: {"channels": ["console", "email"]}`: when a run
232
- notifies you, or fails for good, the notice is also emailed to your email address, through your
233
- own mailbox. A final failure is emailed anyway while your **Job failed** notification is on (the
234
- default). A notice is queued once and never sent twice.
235
- - **May send email without asking to** — `policy.email_allowed_recipients`: **Only me** (the
236
- default, `["self"]`) or **Me and these addresses**. A send to anyone else waits for your
237
- approval, even with "Tools run without asking".
229
+ - **Email result** sends every completed run’s full result through your mailbox.
230
+ - **Recipients** appears when Email result is enabled: **Only me** (default) or **Me and
231
+ these addresses**. Destinations are stored in `notify.recipients`; email-tool permissions
232
+ remain separate. Mailbox availability, recipient policy and send limits still apply.
238
233
 
239
234
  ```text
240
235
  "trigger": {"source_id": "email.received", "source_version": 1,
241
236
  "config": {"every": "1h", "max_batch": 100,
242
237
  "filter": {"from_domain_in": ["example.com"], "subject_contains": "invoice"}}},
243
- "notify": {"channels": ["console", "email"]},
244
- "policy": {"tool_approval": "auto", "email_allowed_recipients": ["self"]}
238
+ "notify": {"channels": ["console", "email"], "recipients": ["self"]},
239
+ "policy": {"tool_approval": "auto"}
245
240
  ```
246
241
 
247
242
  Inbound mail is data, never instructions. The occurrence receives the emails marked as untrusted,
@@ -489,7 +484,8 @@ disabled, and its tooltip first says why.
489
484
  | A failure that a retry fixed, or a cancelled run | none | the history |
490
485
  | A run waiting for you | counted in `attention.pending_waits` until answered | Assistant tray notification + `WAITING`; Observer "waiting for you" |
491
486
 
492
- With **Email me the result**, the `notify` and final-failure items above are also emailed to you.
487
+ With **Email result**, every completed run’s full result is emailed to the selected recipients,
488
+ even when the workflow does not return `notify`.
493
489
  Your account page's two **Notifications** switches, both on by default once your mailbox is
494
490
  connected, email you in any case when an automation fails after its last retry (**Job failed**)
495
491
  and when one of your runs waits for your answer (**Approval needed**).
@@ -568,14 +564,24 @@ recorded. A wait the gateway does not type is shown without answer controls.
568
564
  | An occurrence reads **running** for a long time | the agent is still working (LLM calls, tools), or waits for the shared model | open its ledger in the Observer to watch the steps |
569
565
  | An occurrence reads **waiting** | it waits for a **person** (a question, a tool approval, an event) | answer it in the Assistant or the Observer |
570
566
  | Every tick waits for a tool approval | the automation was created with **Ask each time** | answer each wait, or send `PATCH` with `{"changes": {"policy": {"tool_approval": "auto"}}}` (applies from the next run) |
571
- | No notification ever arrives | quiet is the default; only `notify` in the output, final failures and waits notify | return `notify` from the workflow (see the memory example) |
567
+ | No notification ever arrives | quiet is the default unless result email is enabled | enable **Email result** for completed results, or return `notify` from the workflow for selected console notices |
572
568
  | Ticks are late or merged | a tick takes longer than the interval; missed ticks are coalesced | lengthen the interval or share the model with fewer automations |
573
569
  | An email automation never runs | the mail was already there, arrived while no email automation was active, or is automatic mail (auto-replies, the framework's own mail); a model-running automation runs at most once an hour by default | send a new message after creating it; shorten `every`; set `"auto_submitted": "admit"` for others' automatic mail; check the mailbox state on your account page |
574
570
  | "Connect a mailbox first — open My email" in the form | no connected, allowed mailbox | connect it on your account page (**Email** on your row of **Accounts**), or ask an administrator to switch **Mailboxes for users** on |
575
- | An email send waits or is refused | a recipient other than you (or the automation's listed recipients) waits for approval; the recipient policy or send limits refuse | approve it, add the recipient in **May send email without asking to**, or edit the recipient rules and send limits under **Advanced** on your account page |
571
+ | An email send waits or is refused | a recipient other than you (or the automation's listed recipients) waits for approval; the recipient policy or send limits refuse | approve the tool call, or edit the recipient rules and send limits under **Advanced** on your account page |
576
572
  | A schedule shows `legacy` | it was created with `POST /api/gateway/runs/schedule` | it keeps its own controls; **Recreate as automation** in the Observer copies it into an automation (suspend the old one yourself) |
577
573
 
578
574
  Legacy schedules are listed on the last page of `GET /api/gateway/automations` with `legacy:
579
575
  true`, `revision: null` and `capabilities: ["legacy"]`; they are never converted, and
580
576
  `GET /api/gateway/automations/{id}` answers 404 for them. For install, sign-in and provider
581
577
  problems, see [Troubleshooting](troubleshooting.md).
578
+
579
+ ## Max growing context
580
+
581
+ In Assistant, Code Web and Observer, select **Growing** to reveal **Max growing context
582
+ (tokens)**. Set it when creating or editing an automation; for example, enter `30000`
583
+ for a 30,000-token history budget. It defaults to 50,000 and is hidden for Independent runs.
584
+ The API field is `context.growing.max_tokens`, a positive integer. Changes apply to future
585
+ occurrences; retries retain the history admitted with that occurrence. The newest whole turn
586
+ is retained even when it alone exceeds the budget. These settings and result recipients
587
+ require AbstractGateway 0.11.3 with AbstractRuntime 0.8.4 or later.
@@ -34,7 +34,7 @@ No.
34
34
  | Everything at compatible versions | `pip install abstractframework` |
35
35
  | A browser app | the gateway console's **Apps** page (served at `/apps/<app>/` on the gateway), or on its own: `npx @abstractframework/<flow\|code\|observer\|continuum\|entity> --gateway-url <url>` |
36
36
  | A terminal client | `cargo install abstractcode`, `cargo install abstractgateway-console` or `cargo install abstractcore-console` |
37
- | A container deployment | `ghcr.io/lpalbou/abstractgateway:0.11.2` |
37
+ | A container deployment | `ghcr.io/lpalbou/abstractgateway:0.11.3` |
38
38
 
39
39
  See [Install AbstractFramework](install.md) for the Light / Apple / GPU chooser. Light is
40
40
  remote-first, not reduced-functionality: multimodal and embeddings still work through remote or
@@ -13,7 +13,7 @@ Every signed-in person can connect **their own** mailbox. It is used for three t
13
13
 
14
14
  - **automations on new mail**: the **When an email arrives** trigger (`email.received@1`);
15
15
  - **email notifications**: **Job failed** and **Approval needed**, plus the results of automations
16
- set to **Email me the result**, sent through your own mailbox to your own email address;
16
+ set to **Email result**, sent through your own mailbox to the selected recipients;
17
17
  - **sign-in by email**: **Forgot your token? Email me a sign-in code** on the gateway's sign-in
18
18
  page.
19
19
 
@@ -110,8 +110,7 @@ switch; they need a connected, allowed mailbox.
110
110
  ## Automations on new mail
111
111
 
112
112
  With your mailbox connected, the Assistant, the Observer and AbstractCode's browser client offer
113
- **When an email arrives**, **Email me the result** and the recipients an automation may email without
114
- asking. The rules that matter:
113
+ **When an email arrives**, **Email result** and the result **Recipients**. The rules that matter:
115
114
 
116
115
  - **Only new mail.** Mail already in your mailbox when the watcher starts, or that arrived while none
117
116
  of your email automations was active, is never processed. Mail that arrives while the gateway is
@@ -150,9 +149,8 @@ is connected (until then they show "Connect a mailbox first."):
150
149
  | **Job failed** | an automation of yours, or a run you asked to be emailed about, failed after its retries |
151
150
  | **Approval needed** | a run is waiting for your answer |
152
151
 
153
- An automation set to **Email me the result** also emails you the results that ask for your
154
- attention, and a run started with an email notice emails you when it finishes or fails, as
155
- asked. Each notice is queued once and sent once, through your own mailbox, to your email address.
152
+ An automation set to **Email result** emails every completed run’s full result to its selected recipients, and a run started with an email notice emails you when it finishes or fails, as
153
+ asked. Each notice is queued once and sent once, through your own mailbox; other notices use your own email address.
156
154
 
157
155
  **Send a test** sends one notification now and always answers with a sentence: "Sent to
158
156
  me@example.com.", or why not ("Not sent: hourly limit reached (100 of 100 this hour) — resets at
@@ -197,7 +197,7 @@ The line always runs the installer of the latest AbstractFramework release. It:
197
197
  <latest>`, or `AbstractFramework <yours> found: already up to date` (every part is still checked,
198
198
  and repaired when needed). An install made by 0.6.1 or earlier recorded no release, so its first
199
199
  upgrade says `AbstractFramework found (abstractgateway 0.7.1; its release was not recorded):
200
- upgrading to AbstractFramework 0.9.3` (with the gateway version you have);
200
+ upgrading to AbstractFramework 0.9.4` (with the gateway version you have);
201
201
  - installs the gateway version that release pins, and every library the gateway uses
202
202
  (AbstractCore, AbstractRuntime, AbstractAgent, AbstractSkill, AbstractMemory, AbstractSemantics
203
203
  and the voice, vision, music and 3D packages) at the exact version released and tested with it ([Check your versions](#check-your-versions) shows
@@ -245,7 +245,7 @@ The line always runs the installer of the latest AbstractFramework release. It:
245
245
 
246
246
  Installs made by AbstractFramework 0.6.1 or earlier recorded neither their release nor your install
247
247
  options. The first re-run says `AbstractFramework found (abstractgateway <version>; its release was
248
- not recorded): upgrading to AbstractFramework 0.9.3`, and reads your options from what is installed: whether the terminal console and `abstractcode` are
248
+ not recorded): upgrading to AbstractFramework 0.9.4`, and reads your options from what is installed: whether the terminal console and `abstractcode` are
249
249
  there, whether the gateway has the tray extra and the AbstractCore commands, whether the compiled
250
250
  extras were built (`--full`), and a custom data directory through the gateway pointer. It prints
251
251
  what it found (`read from disk: …`) and records it for later runs. An option the installer did not
@@ -465,7 +465,7 @@ The Mac package, the `.command` files and the one line all run the same script,
465
465
  login** switch counts), a first install leaves it off.
466
466
  3. Installs [uv](https://docs.astral.sh/uv/) when it is missing, then Python 3.12 through uv.
467
467
  4. Installs the gateway as an isolated uv tool, pinned to this release:
468
- `uv tool install --python 3.12 "abstractgateway[<profile>,tray]==0.11.2"`, from prebuilt wheels
468
+ `uv tool install --python 3.12 "abstractgateway[<profile>,tray]==0.11.3"`, from prebuilt wheels
469
469
  only (see [No compiler needed](#no-compiler-needed)), and checks that the command starts
470
470
  (reinstalling it in place when it does not). Every profile also gets local voice,
471
471
  `--with "abstractvoice[supertonic,stt]==0.13.2"` (the release's AbstractVoice): Supertonic
@@ -810,7 +810,7 @@ instead of starting a browser.
810
810
  ```bash
811
811
  curl -LsSf https://astral.sh/uv/install.sh | sh # Windows: irm https://astral.sh/uv/install.ps1 | iex
812
812
  uv python install 3.12
813
- uv tool install --python 3.12 "abstractgateway[tray]==0.11.2" # [apple,tray] or [gpu,tray] for local engines
813
+ uv tool install --python 3.12 "abstractgateway[tray]==0.11.3" # [apple,tray] or [gpu,tray] for local engines
814
814
  # (add --with and --overrides as shown by `install.sh --print` to avoid compiling)
815
815
  uv tool update-shell # puts ~/.local/bin on PATH; open a new terminal
816
816
  abstractgateway service install --port 8080 # or: abstractgateway serve
@@ -937,8 +937,8 @@ Python 3.11 to 3.13), but it gets PyPI's CPU-only PyTorch and no llama.cpp: use
937
937
  installer, which adds PyTorch's CUDA build and llama.cpp's prebuilt GPU build
938
938
  ([GPU on Windows](#gpu-on-windows-nvidia)).
939
939
 
940
- `abstractframework` 0.9.3 pins `abstractgateway==0.11.2`, `abstractassistant==0.12.1`,
941
- `abstractcore==2.23.1`, `AbstractRuntime==0.8.3`, `abstractagent==0.3.17`, `abstractskill==0.3.0`,
940
+ `abstractframework` 0.9.4 pins `abstractgateway==0.11.3`, `abstractassistant==0.12.2`,
941
+ `abstractcore==2.23.1`, `AbstractRuntime==0.8.4`, `abstractagent==0.3.17`, `abstractskill==0.3.0`,
942
942
  `AbstractMemory==0.3.0`, `abstractsemantics==0.0.5`, `abstractvoice==0.13.2`,
943
943
  `abstractvision==0.3.33`, `abstractmusic==0.1.15` and `abstract3d==0.3.2`. The `apple` and `gpu` extras select
944
944
  `abstractgateway[apple|gpu]` and `abstractassistant[apple|gpu]` at the same versions
@@ -1033,8 +1033,8 @@ Run or install them next to the Python stack:
1033
1033
  | Core terminal console | `cargo install abstractcore-console` (Rust 1.87+), then `abstractcore-console` (uses the `abstractcore` command). The installers do not build it: it is the console of a standalone `abstractcore serve`, and the gateway's terminal console already has its Models and Engines screens | 0.7.0 |
1034
1034
  | Gateway terminal console | built by the installer (`--no-console` skips it), or `cargo install abstractgateway-console` (Rust 1.87+); then `abstractgateway-console --gateway-url http://127.0.0.1:8080 --token <admin token>` | 0.14.0 |
1035
1035
  | Flow Editor | the console's **Apps** page (opens at `/apps/flow/`), or on its own: `npx @abstractframework/flow --gateway-url <url>` | 0.7.0 |
1036
- | Code Web UI | the console's **Apps** page (`/apps/code/`), or `npx @abstractframework/code --gateway-url <url>` | 0.10.1 |
1037
- | Observer | the console's **Apps** page (`/apps/observer/`), or `npx @abstractframework/observer --gateway-url <url>` | 0.6.0 |
1036
+ | Code Web UI | the console's **Apps** page (`/apps/code/`), or `npx @abstractframework/code --gateway-url <url>` | 0.10.2 |
1037
+ | Observer | the console's **Apps** page (`/apps/observer/`), or `npx @abstractframework/observer --gateway-url <url>` | 0.6.1 |
1038
1038
  | Continuum console | the console's **Apps** page (`/apps/continuum/`), or `npx @abstractframework/continuum --gateway-url <url>` | 0.6.0 |
1039
1039
  | Entity manager | the console's **Apps** page (`/apps/entity/`), or `npx @abstractframework/entity --gateway-url <url>` | 0.6.0 |
1040
1040
  | AbstractCode terminal client | `cargo install abstractcode`, or a prebuilt binary from the [AbstractCode GitHub release](https://github.com/lpalbou/AbstractCode/releases) | 0.8.0 |
@@ -1080,7 +1080,7 @@ docker run \
1080
1080
  -v "$PWD/runtime:/data" \
1081
1081
  -e ABSTRACTGATEWAY_DATA_DIR=/data \
1082
1082
  -e ABSTRACTGATEWAY_USER_AUTH=1 \
1083
- ghcr.io/lpalbou/abstractgateway:0.11.2
1083
+ ghcr.io/lpalbou/abstractgateway:0.11.3
1084
1084
  ```
1085
1085
 
1086
1086
  This is the Light container: full framework capabilities through remote/endpoint inference, without