arbora 0.1.8.dev2__tar.gz → 0.1.8.dev3__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 (715) hide show
  1. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/PKG-INFO +5 -5
  2. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/_version.py +1 -1
  3. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/a2a/application.py +7 -7
  4. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/a2a/authority.py +236 -121
  5. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/a2a/models.py +10 -0
  6. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/agent_host/start_admission.py +3 -2
  7. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/agent_runs.py +68 -6
  8. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/contracts/agent_control_plane.py +5 -4
  9. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/contracts/session.py +23 -2
  10. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/errors.py +3 -0
  11. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/generated/descriptors.json +25 -1
  12. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/generated/engine_errors.py +2 -2
  13. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/generated/registry.json +691 -489
  14. arbora-0.1.8.dev3/arbora/api/generated/schemas/method.request.json +1 -0
  15. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/generated/schemas/result.query.json +1 -1
  16. arbora-0.1.8.dev3/arbora/api/generated/task_plan_schema.json +24 -0
  17. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/http/app.py +61 -6
  18. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/http/auth.py +13 -2
  19. arbora-0.1.8.dev3/arbora/api/http/browser_app.py +177 -0
  20. arbora-0.1.8.dev3/arbora/api/http/browser_auth.py +132 -0
  21. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/http/routes.py +40 -10
  22. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/invoke/__init__.py +2 -1
  23. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/invoke/audit.py +2 -2
  24. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/invoke/bootstrap.py +7 -6
  25. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/invoke/eg_audit.py +10 -8
  26. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/invoke/executor.py +17 -16
  27. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/invoke/pipeline.py +23 -23
  28. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/invoke/plan.py +4 -4
  29. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/invoke/steps.py +70 -9
  30. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/mcp/caller.py +22 -10
  31. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/mcp/registration.py +2 -1
  32. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/mcp/verbs.py +2 -1
  33. arbora-0.1.8.dev3/arbora/api/ops/browser.py +96 -0
  34. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/plans.py +193 -5
  35. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/research.py +35 -5
  36. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/policy/eunomia.py +21 -6
  37. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/registry/registry.py +14 -1
  38. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_api.py +22 -0
  39. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_runtime.py +25 -1
  40. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_service.py +36 -0
  41. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/client/_generated_models.py +3 -1
  42. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/core/settings.py +10 -0
  43. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/production_ops.py +14 -0
  44. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/semantic_provisioning.py +3 -2
  45. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/epistemic.py +41 -5
  46. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/catalog_composition.py +30 -15
  47. arbora-0.1.8.dev3/arbora/fleet/declarations.py +61 -0
  48. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/gateway_ops.py +9 -3
  49. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/multiplexer.py +98 -23
  50. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/multiplexer_ops.py +4 -2
  51. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/onboarding.py +124 -23
  52. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/service_child.py +20 -9
  53. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/daemon.py +2 -1
  54. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/fleet_events.py +3 -1
  55. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/rate_limit.py +25 -4
  56. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/registry_api.py +7 -1
  57. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/host_bindings.py +9 -0
  58. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/admission.py +10 -0
  59. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/ports.py +21 -0
  60. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/ingest/connector_sources.py +12 -10
  61. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/middlewares.py +3 -1
  62. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/bootstrap.py +8 -1
  63. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/catalog_composition.py +2 -1
  64. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/current_plan_reader.py +2 -3
  65. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/effect_journal.py +7 -4
  66. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/harness_host.py +4 -1
  67. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/runtime.py +7 -2
  68. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/served_engine.py +10 -13
  69. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/served_invocation.py +12 -1
  70. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/server.py +16 -1
  71. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/source_reader.py +3 -4
  72. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/actor_context.py +5 -2
  73. arbora-0.1.8.dev3/arbora/security/anonymous.py +267 -0
  74. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/request_identity.py +74 -12
  75. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-development/SKILL.md +11 -0
  76. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-repository-development/SKILL.md +11 -0
  77. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/webui_host/mcp_delegation.py +4 -2
  78. arbora-0.1.8.dev3/arbora/webui_host/session_boundary.py +211 -0
  79. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/webui_host/webui_co_service.py +12 -0
  80. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/work_items.py +4 -1
  81. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora.egg-info/PKG-INFO +5 -5
  82. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora.egg-info/SOURCES.txt +7 -0
  83. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora.egg-info/requires.txt +4 -4
  84. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/pyproject.toml +5 -5
  85. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_agents_run_end_to_end.py +11 -0
  86. arbora-0.1.8.dev3/tests/test_real_anonymous_boot.py +444 -0
  87. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_real_boot.py +11 -4
  88. arbora-0.1.8.dev3/tests/test_run_event_payloads.py +238 -0
  89. arbora-0.1.8.dev2/arbora/api/generated/schemas/method.request.json +0 -1
  90. arbora-0.1.8.dev2/arbora/api/generated/task_plan_schema.json +0 -10
  91. arbora-0.1.8.dev2/arbora/api/ops/browser.py +0 -76
  92. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/LICENSE +0 -0
  93. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/README.md +0 -0
  94. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/__init__.py +0 -0
  95. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/a2a/__init__.py +0 -0
  96. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/a2a/admission.py +0 -0
  97. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/a2a/approval.py +0 -0
  98. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/a2a/composition.py +0 -0
  99. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/a2a/mcp.py +0 -0
  100. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/a2a/routing.py +0 -0
  101. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/a2a/sdk_app.py +0 -0
  102. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/a2a/service.py +0 -0
  103. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/a2a/terminal_event.py +0 -0
  104. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/a2a/tool_task.py +0 -0
  105. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/a2a/tool_task_dispatch.py +0 -0
  106. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/a2a/tool_task_requests.py +0 -0
  107. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/a2a/work_items.py +0 -0
  108. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/access/__init__.py +0 -0
  109. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/access/action_policy.py +0 -0
  110. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/access/approval.py +0 -0
  111. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/access/assurance.py +0 -0
  112. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/access/external_policy_sync.py +0 -0
  113. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/access/host_start.py +0 -0
  114. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/access/priority.py +0 -0
  115. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/access/service.py +0 -0
  116. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/access/task_guard.py +0 -0
  117. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/acp/__init__.py +0 -0
  118. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/acp/coding_session.py +0 -0
  119. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/acp/session_policy.py +0 -0
  120. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/agent_host/__init__.py +0 -0
  121. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/agent_host/log_access.py +0 -0
  122. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/agent_host/log_replay.py +0 -0
  123. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/agent_host/log_routes.py +0 -0
  124. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/agent_host/log_runtime.py +0 -0
  125. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/agent_host/log_sink.py +0 -0
  126. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/agent_host/managed_web.py +0 -0
  127. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/agent_host/start_configuration.py +0 -0
  128. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/__init__.py +0 -0
  129. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/contracts/__init__.py +0 -0
  130. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/contracts/agent_control_contracts.py +0 -0
  131. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/contracts/catalog.py +0 -0
  132. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/contracts/messaging.py +0 -0
  133. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/contracts/provisioning.py +0 -0
  134. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/evidence/__init__.py +0 -0
  135. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/evidence/bundle.py +0 -0
  136. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/evidence/contradiction.py +0 -0
  137. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/generated/__init__.py +0 -0
  138. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/generated/schemas/result.cluster.json +0 -0
  139. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/generated/schemas/result.compute.json +0 -0
  140. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/generated/schemas/result.coordination.json +0 -0
  141. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/generated/schemas/result.graph.json +0 -0
  142. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/generated/schemas/result.ingestion.json +0 -0
  143. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/generated/schemas/result.messaging.json +0 -0
  144. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/generated/schemas/result.reasoning.json +0 -0
  145. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/generated/schemas/result.security.json +0 -0
  146. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/generated/schemas/result.storage.json +0 -0
  147. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/generated/schemas/result.transactions.json +0 -0
  148. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/http/__init__.py +0 -0
  149. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/http/checkout.py +0 -0
  150. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/http/openapi.py +0 -0
  151. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/http/protocol_routes.py +0 -0
  152. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/mcp/__init__.py +0 -0
  153. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/mcp/discovery.py +0 -0
  154. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/mcp/resolve.py +0 -0
  155. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/mcp/resources.py +0 -0
  156. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/mcp/serving.py +0 -0
  157. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/__init__.py +0 -0
  158. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/_common.py +0 -0
  159. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/access.py +0 -0
  160. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/agents.py +0 -0
  161. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/capacity.py +0 -0
  162. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/decide.py +0 -0
  163. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/fleet.py +0 -0
  164. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/fleet_deploy_watch.py +0 -0
  165. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/ingest.py +0 -0
  166. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/memory.py +0 -0
  167. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/messaging.py +0 -0
  168. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/ops.py +0 -0
  169. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/policy.py +0 -0
  170. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/query.py +0 -0
  171. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/registry_factory.py +0 -0
  172. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/retrieval.py +0 -0
  173. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/runs.py +0 -0
  174. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/security.py +0 -0
  175. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/source.py +0 -0
  176. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/swarm.py +0 -0
  177. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/telemetry.py +0 -0
  178. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/usage.py +0 -0
  179. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/work.py +0 -0
  180. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/write_back.py +0 -0
  181. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/ops/write_back_models.py +0 -0
  182. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/policy/__init__.py +0 -0
  183. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/policy/cache.py +0 -0
  184. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/policy/default_policy.json +0 -0
  185. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/policy/defaults.py +0 -0
  186. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/policy/domain_scopes.py +0 -0
  187. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/policy/pdp_remote.py +0 -0
  188. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/registry/__init__.py +0 -0
  189. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/registry/contract_admission.py +0 -0
  190. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/registry/digest.py +0 -0
  191. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/registry/eg_binding.py +0 -0
  192. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/registry/eg_exclusions.yaml +0 -0
  193. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/registry/scopes.py +0 -0
  194. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/registry/spec.py +0 -0
  195. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/registry/surface_gate.py +0 -0
  196. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/api/task_plan_schema.py +0 -0
  197. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/architecture/__init__.py +0 -0
  198. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/architecture/boundary_census.py +0 -0
  199. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/architecture/capability_layers.py +0 -0
  200. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/__init__.py +0 -0
  201. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_attendance.py +0 -0
  202. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_attendance_api.py +0 -0
  203. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_attended.py +0 -0
  204. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_binding.py +0 -0
  205. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_cancellation.py +0 -0
  206. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_channel.py +0 -0
  207. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_client.py +0 -0
  208. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_common.py +0 -0
  209. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_descriptor.py +0 -0
  210. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_dispatch.py +0 -0
  211. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_durability.py +0 -0
  212. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_lease.py +0 -0
  213. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_outcome.py +0 -0
  214. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_policy.py +0 -0
  215. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_port.py +0 -0
  216. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_provenance.py +0 -0
  217. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_registration.py +0 -0
  218. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_server.py +0 -0
  219. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_state.py +0 -0
  220. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/browser_control_validation.py +0 -0
  221. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/mcp.py +0 -0
  222. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/browser_control/trace_bundle.py +0 -0
  223. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/client/__init__.py +0 -0
  224. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/client/_schema.py +0 -0
  225. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/client/http.py +0 -0
  226. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/client/invoke.py +0 -0
  227. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/connector_runner.py +0 -0
  228. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/console.py +0 -0
  229. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/content.py +0 -0
  230. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/__init__.py +0 -0
  231. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/_model.py +0 -0
  232. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/admission/__init__.py +0 -0
  233. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/admission/models.py +0 -0
  234. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/admission/service.py +0 -0
  235. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/agents/__init__.py +0 -0
  236. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/agents/models.py +0 -0
  237. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/agents/repository.py +0 -0
  238. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/agents/service.py +0 -0
  239. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/connectors/__init__.py +0 -0
  240. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/connectors/models.py +0 -0
  241. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/connectors/repository.py +0 -0
  242. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/connectors/service.py +0 -0
  243. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/economics/__init__.py +0 -0
  244. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/economics/models.py +0 -0
  245. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/economics/repository.py +0 -0
  246. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/economics/service.py +0 -0
  247. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/fleet_watch/__init__.py +0 -0
  248. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/fleet_watch/service.py +0 -0
  249. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/foundation/__init__.py +0 -0
  250. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/foundation/models.py +0 -0
  251. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/foundation/repository.py +0 -0
  252. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/foundation/service.py +0 -0
  253. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/migrations/__init__.py +0 -0
  254. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/migrations/authority.py +0 -0
  255. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/migrations/errors.py +0 -0
  256. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/migrations/models.py +0 -0
  257. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/policy/__init__.py +0 -0
  258. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/policy/models.py +0 -0
  259. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/policy/repository.py +0 -0
  260. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/projection/__init__.py +0 -0
  261. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/projection/authority.py +0 -0
  262. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/projection/models.py +0 -0
  263. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/projection/observability.py +0 -0
  264. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/projection/projector.py +0 -0
  265. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/projection/protocols.py +0 -0
  266. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/projection/repository.py +0 -0
  267. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/retrieval/__init__.py +0 -0
  268. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/retrieval/errors.py +0 -0
  269. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/retrieval/models.py +0 -0
  270. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/retrieval/protocols.py +0 -0
  271. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/retrieval/repository.py +0 -0
  272. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/retrieval/service.py +0 -0
  273. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/runs/__init__.py +0 -0
  274. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/runs/admission.py +0 -0
  275. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/runs/audit.py +0 -0
  276. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/runs/capacity.py +0 -0
  277. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/runs/models.py +0 -0
  278. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/runs/observations.py +0 -0
  279. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/sources/__init__.py +0 -0
  280. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/sources/models.py +0 -0
  281. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/sources/repository.py +0 -0
  282. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/sources/service.py +0 -0
  283. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/webui/__init__.py +0 -0
  284. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/webui/errors.py +0 -0
  285. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/webui/models.py +0 -0
  286. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/webui/protocols.py +0 -0
  287. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/webui/repository.py +0 -0
  288. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/webui/service.py +0 -0
  289. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/workflows/__init__.py +0 -0
  290. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/workflows/domain.py +0 -0
  291. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/control_plane/workflows/repository.py +0 -0
  292. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/core/__init__.py +0 -0
  293. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/core/agent_config_admin.py +0 -0
  294. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/core/capability_contract.py +0 -0
  295. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/core/config_admin.py +0 -0
  296. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/core/event_loop.py +0 -0
  297. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/core/provider_materialization.py +0 -0
  298. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/core/providers.py +0 -0
  299. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/core/transport.py +0 -0
  300. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/__init__.py +0 -0
  301. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/certification_assets.py +0 -0
  302. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/cli.py +0 -0
  303. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/codex_registration.py +0 -0
  304. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/config_generator.py +0 -0
  305. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/doctor.py +0 -0
  306. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/doctor_certification.py +0 -0
  307. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/doctor_coverage.py +0 -0
  308. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/doctor_graph.py +0 -0
  309. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/doctor_lakehouse.py +0 -0
  310. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/doctor_observability.py +0 -0
  311. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/doctor_support.py +0 -0
  312. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/engine_lock.py +0 -0
  313. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/exit_criteria.py +0 -0
  314. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/file_lock.py +0 -0
  315. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/genesis_environments.py +0 -0
  316. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/host_config.py +0 -0
  317. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/host_lock.py +0 -0
  318. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/kubernetes_first_boot.py +0 -0
  319. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/live_mount_guard.py +0 -0
  320. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/local_gates.py +0 -0
  321. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/preflight.py +0 -0
  322. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/profile_guard.py +0 -0
  323. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/public_ingress_identity.py +0 -0
  324. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/release_canary.py +0 -0
  325. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/release_candidate.py +0 -0
  326. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/repo_templates.py +0 -0
  327. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/self_deploy.py +0 -0
  328. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/venv_autosync.py +0 -0
  329. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/venv_sync.py +0 -0
  330. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/venv_sync_types.py +0 -0
  331. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/deployment/webui_reference_model.py +0 -0
  332. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/ecosystem/__init__.py +0 -0
  333. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/ecosystem/agent_manager_dashboard.py +0 -0
  334. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/ecosystem/ard_federation.py +0 -0
  335. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/ecosystem/ard_registry.py +0 -0
  336. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/ecosystem/ard_signing.py +0 -0
  337. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/ecosystem/hook_installer.py +0 -0
  338. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/evolution/__init__.py +0 -0
  339. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/evolution/wiring_sweep.py +0 -0
  340. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/finance/__init__.py +0 -0
  341. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/finance/alerts.py +0 -0
  342. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/finance/dca.py +0 -0
  343. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/finance/markets.py +0 -0
  344. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/finance/schedule.py +0 -0
  345. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/__init__.py +0 -0
  346. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/access_contracts.py +0 -0
  347. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/catalog_items.py +0 -0
  348. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/catalog_reader.py +0 -0
  349. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/catalog_sources.py +0 -0
  350. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/child_resilience.py +0 -0
  351. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/client_toolsets.py +0 -0
  352. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/connector_count_pins.py +0 -0
  353. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/discovery_authority.py +0 -0
  354. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/epistemic_adapter.py +0 -0
  355. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/error_budget.py +0 -0
  356. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/feeds.py +0 -0
  357. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/health.py +0 -0
  358. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/local_skill_catalog.py +0 -0
  359. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/mcp_resource_reconciliation.py +0 -0
  360. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/protocol_compat.py +0 -0
  361. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/scaling/__init__.py +0 -0
  362. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/scaling/_model.py +0 -0
  363. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/scaling/development_lane.py +0 -0
  364. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/scaling/resource_pool_authority.py +0 -0
  365. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/scaling/resource_reservation.py +0 -0
  366. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/scaling/scaling_authority.py +0 -0
  367. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/scaling/scaling_intent_reconciler.py +0 -0
  368. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/scaling/scaling_signal_authority.py +0 -0
  369. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/scaling/service_scale_units.py +0 -0
  370. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/session_loads.py +0 -0
  371. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/session_notifications.py +0 -0
  372. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/shared_multiplexer.py +0 -0
  373. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/source_executor.py +0 -0
  374. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/surfaces.py +0 -0
  375. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet/throttle_service.py +0 -0
  376. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/fleet_tool_call.py +0 -0
  377. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/__init__.py +0 -0
  378. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/aggregator.py +0 -0
  379. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/config.py +0 -0
  380. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/dashboard_api.py +0 -0
  381. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/enhanced_catalog_api.py +0 -0
  382. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/fleet.py +0 -0
  383. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/graph_api.py +0 -0
  384. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/models.py +0 -0
  385. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/ontology_api.py +0 -0
  386. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/ports.py +0 -0
  387. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/registry.py +0 -0
  388. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/remote_oauth_api.py +0 -0
  389. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/schema_context_api.py +0 -0
  390. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/schema_context_service.py +0 -0
  391. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/schemas/__init__.py +0 -0
  392. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/schemas/connector.py +0 -0
  393. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/schemas/graph_core.py +0 -0
  394. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/schemas/schema_context.py +0 -0
  395. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/__init__.py +0 -0
  396. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/ansible_tower.py +0 -0
  397. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/archivebox.py +0 -0
  398. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/aris.py +0 -0
  399. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/arr.py +0 -0
  400. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/atlassian.py +0 -0
  401. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/audio_transcriber.py +0 -0
  402. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/audiobookshelf.py +0 -0
  403. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/base.py +0 -0
  404. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/caddy.py +0 -0
  405. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/camunda.py +0 -0
  406. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/ciso_assistant.py +0 -0
  407. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/clarity.py +0 -0
  408. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/container_manager.py +0 -0
  409. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/data_science.py +0 -0
  410. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/dockerhub.py +0 -0
  411. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/documentdb.py +0 -0
  412. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/ear.py +0 -0
  413. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/egeria.py +0 -0
  414. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/emerald_exchange.py +0 -0
  415. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/erpnext.py +0 -0
  416. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/fan_manager.py +0 -0
  417. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/firefly_iii.py +0 -0
  418. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/fleet_client.py +0 -0
  419. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/freshrss.py +0 -0
  420. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/github.py +0 -0
  421. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/gitlab.py +0 -0
  422. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/google_workspace.py +0 -0
  423. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/gramps.py +0 -0
  424. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/hdhomerun.py +0 -0
  425. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/home_assistant.py +0 -0
  426. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/jellyfin.py +0 -0
  427. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/jena.py +0 -0
  428. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/kafka.py +0 -0
  429. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/keycloak.py +0 -0
  430. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/langfuse.py +0 -0
  431. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/leanix.py +0 -0
  432. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/legal_peripherals.py +0 -0
  433. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/lgtm.py +0 -0
  434. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/listmonk.py +0 -0
  435. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/mattermost.py +0 -0
  436. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/mealie.py +0 -0
  437. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/media_downloader.py +0 -0
  438. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/microsoft.py +0 -0
  439. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/nextcloud.py +0 -0
  440. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/okta.py +0 -0
  441. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/ollama.py +0 -0
  442. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/onetrust.py +0 -0
  443. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/openbao.py +0 -0
  444. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/orchestrator.py +0 -0
  445. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/owncast.py +0 -0
  446. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/paperless_ngx.py +0 -0
  447. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/plane.py +0 -0
  448. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/portainer.py +0 -0
  449. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/postiz.py +0 -0
  450. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/pulselink.py +0 -0
  451. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/qbittorrent.py +0 -0
  452. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/repository_manager.py +0 -0
  453. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/rom_manager.py +0 -0
  454. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/scholarx.py +0 -0
  455. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/searxng.py +0 -0
  456. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/sentry.py +0 -0
  457. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/servicenow.py +0 -0
  458. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/stirlingpdf.py +0 -0
  459. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/systems_manager.py +0 -0
  460. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/technitium.py +0 -0
  461. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/teleport.py +0 -0
  462. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/tunnel_manager.py +0 -0
  463. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/twenty.py +0 -0
  464. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/uptime_kuma.py +0 -0
  465. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/vector_db.py +0 -0
  466. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/wger.py +0 -0
  467. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/gateway/widgets/zulip.py +0 -0
  468. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/__init__.py +0 -0
  469. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/admin_console.py +0 -0
  470. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/api_keys.py +0 -0
  471. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/approval.py +0 -0
  472. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/approval_engine.py +0 -0
  473. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/approval_registration.py +0 -0
  474. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/bootstrap.py +0 -0
  475. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/broker.py +0 -0
  476. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/browser.py +0 -0
  477. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/client_entry_points.py +0 -0
  478. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/composition.py +0 -0
  479. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/engine.py +0 -0
  480. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/engine_ports.py +0 -0
  481. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/issuer.py +0 -0
  482. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/ldap.py +0 -0
  483. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/mail_capability.py +0 -0
  484. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/mfa.py +0 -0
  485. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/oidc.py +0 -0
  486. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/saml.py +0 -0
  487. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/identity/scim.py +0 -0
  488. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/ingest/__init__.py +0 -0
  489. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/ingest/service.py +0 -0
  490. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/ingest/source_catalog.py +0 -0
  491. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/__init__.py +0 -0
  492. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/agent_control.py +0 -0
  493. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/arbora_operations.json +0 -0
  494. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/__init__.py +0 -0
  495. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/_arbora_action_manifest.py +0 -0
  496. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/action_dispatch.py +0 -0
  497. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/arbora_capabilities.json +0 -0
  498. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/arbora_surface.py +0 -0
  499. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/client_credentials.py +0 -0
  500. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/concurrency.py +0 -0
  501. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/connector_surface.py +0 -0
  502. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/content_resources.py +0 -0
  503. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/context_helpers.py +0 -0
  504. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/delegated_auth.py +0 -0
  505. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/engine_routing.py +0 -0
  506. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/engine_surface_types.py +0 -0
  507. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/eunomia_principal.py +0 -0
  508. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/httpx_boundary.py +0 -0
  509. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/intent_contract.py +0 -0
  510. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/oauth_log_hygiene.py +0 -0
  511. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/ontology_types.py +0 -0
  512. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/optional_tool_features.py +0 -0
  513. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/remote_oauth_broker.py +0 -0
  514. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/server_factory.py +0 -0
  515. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/skill_coverage.py +0 -0
  516. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tasks_extension.py +0 -0
  517. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tool_specs.py +0 -0
  518. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/__init__.py +0 -0
  519. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/_surface_selection.py +0 -0
  520. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/analysis_tools.py +0 -0
  521. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/analyze_suite.py +0 -0
  522. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/audit_tools.py +0 -0
  523. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/candidate_claim_tools.py +0 -0
  524. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/compliance_tools.py +0 -0
  525. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/config_tools.py +0 -0
  526. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/domain_ops_tools.py +0 -0
  527. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/engine_surface_tools.py +0 -0
  528. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/engine_tools.py +0 -0
  529. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/epistemic_tools.py +0 -0
  530. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/governance_tools.py +0 -0
  531. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/graph_tools.py +0 -0
  532. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/intent_tools.py +0 -0
  533. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/mcp_apps.py +0 -0
  534. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/ontology_tools.py +0 -0
  535. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/query_tools.py +0 -0
  536. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/reach_tools.py +0 -0
  537. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/secret_tools.py +0 -0
  538. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/state_tools.py +0 -0
  539. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/tools/write_ingest_tools.py +0 -0
  540. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/verbose_tools.py +0 -0
  541. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/backing/write_ingest_types.py +0 -0
  542. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/composition.py +0 -0
  543. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/decide_wiring.py +0 -0
  544. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/fleet_composition.py +0 -0
  545. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/hosted_invocation.py +0 -0
  546. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/legacy_action_mapping.py +0 -0
  547. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/operation_registry.py +0 -0
  548. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/mcp_server/routes.py +0 -0
  549. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/__init__.py +0 -0
  550. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/action_dispatch.py +0 -0
  551. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/alert_intake.py +0 -0
  552. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/backends/__init__.py +0 -0
  553. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/backends/discord.py +0 -0
  554. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/backends/googlechat.py +0 -0
  555. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/backends/googlemeet.py +0 -0
  556. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/backends/imessage.py +0 -0
  557. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/backends/irc.py +0 -0
  558. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/backends/line.py +0 -0
  559. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/backends/matrix.py +0 -0
  560. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/backends/mattermost.py +0 -0
  561. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/backends/nextcloud.py +0 -0
  562. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/backends/signal.py +0 -0
  563. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/backends/slack.py +0 -0
  564. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/backends/synology.py +0 -0
  565. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/backends/teams.py +0 -0
  566. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/backends/telegram.py +0 -0
  567. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/backends/twitch.py +0 -0
  568. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/backends/voicecall.py +0 -0
  569. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/backends/whatsapp.py +0 -0
  570. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/base.py +0 -0
  571. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/capabilities.py +0 -0
  572. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/coalescer.py +0 -0
  573. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/commands.py +0 -0
  574. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/governed_send.py +0 -0
  575. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/host_ports.py +0 -0
  576. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/inbox.py +0 -0
  577. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/intake.py +0 -0
  578. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/lease.py +0 -0
  579. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/models.py +0 -0
  580. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/planner_handler.py +0 -0
  581. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/polling.py +0 -0
  582. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/reach.py +0 -0
  583. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/registry.py +0 -0
  584. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/render.py +0 -0
  585. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/router.py +0 -0
  586. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/service.py +0 -0
  587. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/supervision.py +0 -0
  588. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/messaging/transport.py +0 -0
  589. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/observability/__init__.py +0 -0
  590. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/observability/correlation.py +0 -0
  591. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/observability/custom_observability.py +0 -0
  592. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/observability/error_detail_sink.py +0 -0
  593. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/observability/gateway_health.py +0 -0
  594. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/observability/gateway_metrics.py +0 -0
  595. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/observability/health.py +0 -0
  596. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/observability/langfuse_exporter.py +0 -0
  597. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/observability/langfuse_trust.py +0 -0
  598. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/observability/readiness.py +0 -0
  599. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/observability/runtime_health.py +0 -0
  600. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/observability/runtime_signals.py +0 -0
  601. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/observability/telemetry.py +0 -0
  602. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/observability/trace_ontology.py +0 -0
  603. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/ontology/shapes/runtime.shapes.ttl +0 -0
  604. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/__init__.py +0 -0
  605. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/auth.py +0 -0
  606. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/config_sensitivity.py +0 -0
  607. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/conformance/__init__.py +0 -0
  608. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/conformance/surface_inventory.py +0 -0
  609. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/conformance/surface_manifest.py +0 -0
  610. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/delegation.py +0 -0
  611. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/elevation.py +0 -0
  612. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/error_surface.py +0 -0
  613. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/http_boundary.py +0 -0
  614. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/identifiers.py +0 -0
  615. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/identity.py +0 -0
  616. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/log_redaction.py +0 -0
  617. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/oidc_discovery.py +0 -0
  618. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/operation_result.py +0 -0
  619. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/prompt_injection.py +0 -0
  620. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/run_authority.py +0 -0
  621. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/run_token.py +0 -0
  622. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/scope_registry.py +0 -0
  623. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/secrets.py +0 -0
  624. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/security_policy_middleware.py +0 -0
  625. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/security/settings.py +0 -0
  626. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/semantic_content.py +0 -0
  627. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/__init__.py +0 -0
  628. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/agent-utilities-source-integration/SKILL.md +0 -0
  629. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/agent-utilities-source-integration/agents/arbora.yaml +0 -0
  630. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/agent-utilities-source-integration/agents/openai.yaml +0 -0
  631. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-deployment/SKILL.md +0 -0
  632. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-deployment/agents/arbora.yaml +0 -0
  633. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-deployment/agents/openai.yaml +0 -0
  634. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-deployment/references/first-boot-verification.md +0 -0
  635. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-deployment/references/fleet-and-control-plane.md +0 -0
  636. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-deployment/references/identity-and-access.md +0 -0
  637. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-deployment/references/secrets-and-federation.md +0 -0
  638. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-deployment/references/telemetry.md +0 -0
  639. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-development/references/bootstrap.md +0 -0
  640. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-evolution/SKILL.md +0 -0
  641. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-evolution/agents/arbora.yaml +0 -0
  642. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-evolution/agents/openai.yaml +0 -0
  643. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-genesis/SKILL.md +0 -0
  644. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-genesis/agents/arbora.yaml +0 -0
  645. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-genesis/agents/openai.yaml +0 -0
  646. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-genesis/references/TROUBLESHOOTING.md +0 -0
  647. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-genesis/references/bare-metal.md +0 -0
  648. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-genesis/references/compose-and-podman.md +0 -0
  649. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-genesis/references/data-plane-substrate.md +0 -0
  650. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-genesis/references/deployment-contract.md +0 -0
  651. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-genesis/references/development-workspace.md +0 -0
  652. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-genesis/references/docker-swarm.md +0 -0
  653. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-genesis/references/engine-identity-admission.md +0 -0
  654. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-genesis/references/kubernetes-and-helm.md +0 -0
  655. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-genesis/references/orchestrator-migration-cutover.md +0 -0
  656. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-genesis/references/runtime-topology.md +0 -0
  657. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/arbora-genesis/references/security-and-operations.md +0 -0
  658. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/autonomous-contribution/SKILL.md +0 -0
  659. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/autonomous-contribution/agents/arbora.yaml +0 -0
  660. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/autonomous-contribution/agents/openai.yaml +0 -0
  661. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/core-pack.txt +0 -0
  662. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-engine-and-modalities/SKILL.md +0 -0
  663. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-engine-and-modalities/agents/arbora.yaml +0 -0
  664. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-engine-and-modalities/agents/openai.yaml +0 -0
  665. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-ingestion-and-integration/SKILL.md +0 -0
  666. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-ingestion-and-integration/agents/arbora.yaml +0 -0
  667. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-ingestion-and-integration/agents/openai.yaml +0 -0
  668. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-ingestion-and-integration/references/ingest-connector-reference.md +0 -0
  669. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-ingestion-and-integration/references/ingest_manifest.yaml +0 -0
  670. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-modeling-and-mutation/SKILL.md +0 -0
  671. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-modeling-and-mutation/agents/arbora.yaml +0 -0
  672. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-modeling-and-mutation/agents/openai.yaml +0 -0
  673. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-orchestration-and-automation/SKILL.md +0 -0
  674. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-orchestration-and-automation/agents/arbora.yaml +0 -0
  675. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-orchestration-and-automation/agents/openai.yaml +0 -0
  676. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-query-and-explanation/SKILL.md +0 -0
  677. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-query-and-explanation/agents/arbora.yaml +0 -0
  678. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-query-and-explanation/agents/openai.yaml +0 -0
  679. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-query-and-explanation/references/uql-reference.md +0 -0
  680. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-research-and-analysis/SKILL.md +0 -0
  681. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-research-and-analysis/agents/arbora.yaml +0 -0
  682. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-research-and-analysis/agents/openai.yaml +0 -0
  683. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-runtime-and-governance/SKILL.md +0 -0
  684. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-runtime-and-governance/agents/arbora.yaml +0 -0
  685. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/graph-runtime-and-governance/agents/openai.yaml +0 -0
  686. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/skills/using-arbora/SKILL.md +0 -0
  687. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/unique_records.py +0 -0
  688. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/webui_host/__init__.py +0 -0
  689. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/webui_host/contact_delivery.py +0 -0
  690. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/webui_host/contact_governance.py +0 -0
  691. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/webui_host/package_layout_expectation.py +0 -0
  692. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora/webui_host/voice_delegation.py +0 -0
  693. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora.egg-info/dependency_links.txt +0 -0
  694. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora.egg-info/entry_points.txt +0 -0
  695. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/arbora.egg-info/top_level.txt +0 -0
  696. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/setup.cfg +0 -0
  697. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_agent_runs.py +0 -0
  698. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_check_acceptance_evidence.py +0 -0
  699. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_check_connector_count_pins.py +0 -0
  700. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_check_core_skills.py +0 -0
  701. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_check_wiring.py +0 -0
  702. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_component_registry_boundary_seeds.py +0 -0
  703. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_connector_pack_typed_publisher.py +0 -0
  704. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_connector_runner_composition.py +0 -0
  705. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_dependency_manifest.py +0 -0
  706. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_docs_surface.py +0 -0
  707. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_epistemic_adapter.py +0 -0
  708. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_fleet_catalog_reader.py +0 -0
  709. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_host_bindings.py +0 -0
  710. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_package_layout.py +0 -0
  711. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_real_boot_messaging.py +0 -0
  712. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_semantic_content.py +0 -0
  713. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_served_operation_api.py +0 -0
  714. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_unique_records.py +0 -0
  715. {arbora-0.1.8.dev2 → arbora-0.1.8.dev3}/tests/test_work_items.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arbora
3
- Version: 0.1.8.dev2
3
+ Version: 0.1.8.dev3
4
4
  Summary: The deployable MCP, REST, control-plane, fleet, WebUI, and operations composition for the Knuckles agent platform.
5
5
  Author-email: Repository Maintainers <maintainers@knuckles.team>
6
6
  License-Expression: MIT
@@ -20,10 +20,10 @@ Requires-Dist: httpx>=0.28.1
20
20
  Requires-Dist: pyjwt>=2.15.1
21
21
  Requires-Dist: joserfc>=1.7.5
22
22
  Requires-Dist: python-multipart>=0.0.32
23
- Requires-Dist: agent-connector-sdk[a2a,mcp]<0.4.0,>=0.3.19
23
+ Requires-Dist: agent-connector-sdk[a2a,mcp]<0.6.0,>=0.5.4
24
24
  Requires-Dist: aiohttp>=3.14.5
25
25
  Requires-Dist: anyio>=4.15.1
26
- Requires-Dist: epistemic-graph[server]<3.0.0,>=2.27.5
26
+ Requires-Dist: epistemic-graph[server]<3.0.0,>=2.27.6
27
27
  Requires-Dist: fastapi>=0.143.3
28
28
  Requires-Dist: filelock>=4.2.0
29
29
  Requires-Dist: msgpack>=1.2.1
@@ -49,10 +49,10 @@ Requires-Dist: types-PyYAML>=6.0.12.20260906; extra == "test"
49
49
  Requires-Dist: python-telegram-bot>=22.8; extra == "test"
50
50
  Requires-Dist: setuptools>=84.0.0; extra == "test"
51
51
  Provides-Extra: webui
52
- Requires-Dist: agent-webui<3.0.0,>=2.7.1; extra == "webui"
52
+ Requires-Dist: agent-webui<3.0.0,>=2.8.2; extra == "webui"
53
53
  Requires-Dist: uvicorn>=0.54.0; extra == "webui"
54
54
  Provides-Extra: gateway-widgets
55
- Requires-Dist: agent-connector-sdk[a2a,mcp]<0.4.0,>=0.3.19; extra == "gateway-widgets"
55
+ Requires-Dist: agent-connector-sdk[a2a,mcp]<0.6.0,>=0.5.4; extra == "gateway-widgets"
56
56
  Provides-Extra: vault
57
57
  Requires-Dist: hvac>=2.4.0; extra == "vault"
58
58
  Provides-Extra: messaging-telegram
@@ -3,4 +3,4 @@
3
3
  Updated only by `bump-my-version` (see `.bumpversion.toml`) — never hand-edited.
4
4
  """
5
5
 
6
- __version__ = "0.1.8.dev2"
6
+ __version__ = "0.1.8.dev3"
@@ -29,7 +29,7 @@ from .terminal_event import A2ATerminalEventUnavailable
29
29
  if TYPE_CHECKING:
30
30
  from arbora.api.http.auth import AmbientHTTPAuthenticator
31
31
  from arbora.api.invoke.pipeline import InvokeServices
32
- from arbora.api.invoke.steps import VerifiedCaller
32
+ from arbora.api.invoke.steps import RequestCaller
33
33
 
34
34
  __all__ = [
35
35
  "A2AAuthenticator",
@@ -43,19 +43,19 @@ __all__ = [
43
43
  class A2AAuthenticator(Protocol):
44
44
  async def authenticate(
45
45
  self, request: Request, *, scope: str
46
- ) -> VerifiedCaller | None:
46
+ ) -> RequestCaller | None:
47
47
  """Verify authority; an injected adapter may own its dispatch binding."""
48
48
 
49
49
 
50
50
  class AmbientA2AAuthenticator:
51
51
  """Resolve each HTTP request through AU's verified bearer/session flow."""
52
52
 
53
- async def authenticate(self, request: Request, *, scope: str) -> VerifiedCaller:
53
+ async def authenticate(self, request: Request, *, scope: str) -> RequestCaller:
54
54
  caller = await _request_caller(request)
55
55
  return _require_caller_scope(caller, scope)
56
56
 
57
57
 
58
- async def _request_caller(request: Request) -> VerifiedCaller:
58
+ async def _request_caller(request: Request) -> RequestCaller:
59
59
  from arbora.api.http.auth import (
60
60
  AmbientHTTPAuthenticator,
61
61
  verified_bearer_session_for_request,
@@ -66,13 +66,13 @@ async def _request_caller(request: Request) -> VerifiedCaller:
66
66
  ).authenticate(request)
67
67
 
68
68
 
69
- def _require_caller_scope(caller: VerifiedCaller, scope: str) -> VerifiedCaller:
69
+ def _require_caller_scope(caller: RequestCaller, scope: str) -> RequestCaller:
70
70
  if scope not in caller.effective_scopes:
71
71
  raise PermissionError("Required A2A scope unavailable")
72
72
  return caller
73
73
 
74
74
 
75
- async def _refresh_unary_caller(caller: VerifiedCaller | None) -> None:
75
+ async def _refresh_unary_caller(caller: RequestCaller | None) -> None:
76
76
  """Refuse changed authority before entering the task service's session."""
77
77
  if caller is None:
78
78
  return
@@ -91,7 +91,7 @@ async def _refresh_unary_caller(caller: VerifiedCaller | None) -> None:
91
91
 
92
92
 
93
93
  @contextmanager
94
- def _caller_session_scope(caller: VerifiedCaller | None) -> Iterator[None]:
94
+ def _caller_session_scope(caller: RequestCaller | None) -> Iterator[None]:
95
95
  """Bind a returned caller through legacy dispatch; never resolve a fallback."""
96
96
  if caller is None:
97
97
  # Explicit injected authenticators already own their admission/binding.
@@ -9,13 +9,14 @@ import logging
9
9
  from collections import OrderedDict
10
10
  from collections.abc import Callable
11
11
  from datetime import UTC, datetime
12
- from typing import Any, Protocol, runtime_checkable
12
+ from typing import Any, Protocol, cast, runtime_checkable
13
13
 
14
14
  from agent_connector_sdk.privacy import persistence_reference
15
15
 
16
16
  from .models import (
17
17
  A2AArtifact,
18
18
  A2AMessage,
19
+ A2AReplyUnavailable,
19
20
  A2ARouteDecision,
20
21
  A2ATask,
21
22
  A2ATaskState,
@@ -42,7 +43,8 @@ _RUN_LEASE_SECONDS = 600.0
42
43
  _TERMINAL = frozenset({"succeeded", "failed", "cancelled", "dead_letter"})
43
44
  #: Agent reply text of recent runs, by task id. A WorkItem holds only the
44
45
  #: result reference; the durable record is the run's RunEvents in EG. This
45
- #: bounded process-local view serves the reply on task reads.
46
+ #: bounded process-local view serves immediate dispatch/list projections;
47
+ #: tasks/get reads the durable record rather than trusting this cache.
46
48
  _OUTPUTS: OrderedDict[str, str] = OrderedDict()
47
49
  _MAX_OUTPUTS = 1024
48
50
  _MAX_OUTPUT_CHARS = 65_536
@@ -53,7 +55,10 @@ def remember_task_output(task_id: str, output: Any) -> None:
53
55
  if not task_id or output in (None, ""):
54
56
  return
55
57
  text = output if isinstance(output, str) else json.dumps(output, default=str)
56
- _OUTPUTS[task_id] = text[:_MAX_OUTPUT_CHARS]
58
+ if len(text) > _MAX_OUTPUT_CHARS:
59
+ _OUTPUTS.pop(task_id, None)
60
+ return
61
+ _OUTPUTS[task_id] = text
57
62
  _OUTPUTS.move_to_end(task_id)
58
63
  while len(_OUTPUTS) > _MAX_OUTPUTS:
59
64
  _OUTPUTS.popitem(last=False)
@@ -85,6 +90,12 @@ _STATE_MAP: dict[str, A2ATaskState] = {
85
90
  }
86
91
 
87
92
 
93
+ class _ReplyUnavailable(RuntimeError):
94
+ def __init__(self, reason: Any) -> None:
95
+ super().__init__("durable A2A reply is unavailable")
96
+ self.availability = A2AReplyUnavailable(reason=reason)
97
+
98
+
88
99
  class A2AContextUnavailable(RuntimeError):
89
100
  """The durable context ownership reader could not supply a bounded answer."""
90
101
 
@@ -398,16 +409,14 @@ class WorkItemA2AAuthority:
398
409
  outcome, result_ref, error_ref = "succeeded", None, None
399
410
  usage = None
400
411
  try:
401
- from arbora.host_bindings import FLEET_AGENT_NAME, FLEET_TOOLS
412
+ from arbora.host_bindings import preloaded_agent_tools
402
413
 
403
414
  result = await self._agent_executor().execute_agent(
404
415
  AgentExecutionRequest(
405
416
  agent_name=agent_name,
406
417
  task=task,
407
418
  run_id=run_id or task_id or None,
408
- allowed_tools=(
409
- FLEET_TOOLS if agent_name == FLEET_AGENT_NAME else None
410
- ),
419
+ allowed_tools=preloaded_agent_tools(agent_name),
411
420
  ),
412
421
  session=session,
413
422
  )
@@ -593,18 +602,127 @@ class WorkItemA2AAuthority:
593
602
  context_id=str(metadata.get("a2a_context_id") or ""),
594
603
  status=A2ATaskStatus(
595
604
  state=state,
596
- timestamp=WorkItemA2AAuthority._timestamp(item.get("updated_at")),
605
+ timestamp=WorkItemA2AAuthority._timestamp(
606
+ item["updated_at_ms"] / 1000
607
+ if isinstance(item.get("updated_at_ms"), (int, float))
608
+ else item.get("updated_at")
609
+ ),
597
610
  ),
598
611
  artifacts=task_output_artifacts(task_id),
599
612
  metadata={"arbora": public_metadata},
600
613
  )
601
614
 
615
+ @staticmethod
616
+ def _read_reply_payload(payload: Any, task_id: str) -> Any:
617
+ """Decode the bounded durable payload before validating its identity."""
618
+ from arbora.agent_runs import MAX_RUN_EVENT_PAYLOAD_BYTES
619
+
620
+ if not isinstance(payload, str):
621
+ raise RuntimeError("durable A2A reply is unavailable")
622
+ try:
623
+ if len(payload.encode("utf-8")) > MAX_RUN_EVENT_PAYLOAD_BYTES:
624
+ raise ValueError("run event exceeds its payload bound")
625
+ event = json.loads(payload)
626
+ except (ValueError, UnicodeError) as exc:
627
+ raise RuntimeError("durable A2A reply is unavailable") from exc
628
+ WorkItemA2AAuthority._check_reply_marker(event, task_id)
629
+ return event
630
+
631
+ @staticmethod
632
+ def _check_reply_marker(event: Any, task_id: str) -> None:
633
+ """Refuse malformed markers before exposing a typed availability reason."""
634
+ from arbora.agent_runs import RUN_EVENT_PAYLOAD_ERROR_SCHEMA
635
+
636
+ if (
637
+ isinstance(event, dict)
638
+ and event.get("schema") == RUN_EVENT_PAYLOAD_ERROR_SCHEMA
639
+ ):
640
+ error = event.get("payload_error")
641
+ if not (
642
+ event.get("type") == "graph_complete"
643
+ and event.get("run_id") == task_id
644
+ and set(event)
645
+ <= {"schema", "type", "run_id", "step", "status", "payload_error"}
646
+ and type(event.get("step")) is int
647
+ and 0 <= event["step"] <= 2**63 - 1
648
+ ):
649
+ raise RuntimeError("durable A2A reply is unavailable")
650
+ WorkItemA2AAuthority._raise_reply_marker(event, error)
651
+
652
+ @staticmethod
653
+ def _raise_reply_marker(event: dict[str, Any], error: Any) -> None:
654
+ """Validate marker details before raising their typed refusal."""
655
+ from arbora.agent_runs import MAX_RUN_EVENT_PAYLOAD_BYTES
656
+
657
+ if not (
658
+ isinstance(error, dict)
659
+ and set(error) == {"code", "max_bytes"}
660
+ and type(error["max_bytes"]) is int
661
+ and error["max_bytes"] == MAX_RUN_EVENT_PAYLOAD_BYTES
662
+ and isinstance(error["code"], str)
663
+ and event.get("status") in (None, "completed", "stopped")
664
+ and error["code"] in {"payload_too_large", "payload_serialization_failed"}
665
+ ):
666
+ raise RuntimeError("durable A2A reply is unavailable")
667
+ raise _ReplyUnavailable(error["code"])
668
+
669
+ @staticmethod
670
+ def _reply_text(event: Any, task_id: str) -> str:
671
+ """Accept output only from the matching successful terminal run."""
672
+ result = event.get("result") if isinstance(event, dict) else None
673
+ if not (
674
+ isinstance(event, dict)
675
+ and event.get("type") == "graph_complete"
676
+ and event.get("run_id") == task_id
677
+ and isinstance(result, dict)
678
+ and result.get("run_id") == task_id
679
+ and result.get("status") in {"completed", "stopped"}
680
+ and isinstance(result.get("output"), str)
681
+ ):
682
+ raise RuntimeError("durable A2A reply is unavailable")
683
+ return cast(str, result["output"])
684
+
685
+ def _persisted_artifacts(
686
+ self, task_id: str, *, item: dict[str, Any]
687
+ ) -> list[A2AArtifact] | None:
688
+ """Read an existing terminal payload, never reconstruct a receipt."""
689
+ if item.get("status") != "succeeded":
690
+ return None
691
+ engine, _work_engine = self._engine()
692
+ rows = engine.query_cypher(
693
+ "MATCH (e) WHERE e.type = 'RunEvent' "
694
+ "AND e.run_id = $run_id AND e.task_id = $run_id "
695
+ "AND e.event_type = $event_type "
696
+ "RETURN e.payload AS payload LIMIT 2",
697
+ {"run_id": task_id, "event_type": "graph_complete"},
698
+ )
699
+ if rows == []:
700
+ return None
701
+ if not isinstance(rows, list) or len(rows) != 1:
702
+ raise RuntimeError("durable A2A reply is unavailable")
703
+ row = rows[0]
704
+ payload = row.get("payload") if isinstance(row, dict) else None
705
+ event = self._read_reply_payload(payload, task_id)
706
+ text = self._reply_text(event, task_id)
707
+ if len(text) > _MAX_OUTPUT_CHARS:
708
+ raise _ReplyUnavailable("reply_too_large")
709
+ if not text:
710
+ return None
711
+ return [
712
+ A2AArtifact(
713
+ artifact_id=f"{task_id}:reply",
714
+ name="reply",
715
+ parts=[A2ATextPart(text=text)],
716
+ )
717
+ ]
718
+
602
719
  async def get_committed_task(self, task_id: str) -> A2ATask | None:
603
720
  return await self.get(task_id, include_committed_event=True)
604
721
 
605
722
  async def get(
606
723
  self, task_id: str, *, include_committed_event: bool = False
607
724
  ) -> A2ATask | None:
725
+ read_session = self._session("kg:read")
608
726
  original = self._session("work:read") if include_committed_event else None
609
727
  item = await asyncio.to_thread(self._authorized_item, task_id, "kg:read")
610
728
  if item is None:
@@ -614,124 +732,125 @@ class WorkItemA2AAuthority:
614
732
  owner_ref = self._owner_ref(original)
615
733
  if (
616
734
  current != original
617
- or item.get("tenant") != original.tenant
618
- or item.get("created_by") != owner_ref
619
735
  or item.get("metadata", {}).get("a2a_owner_ref") != owner_ref
620
736
  ):
621
737
  raise PermissionError("A2A caller changed during task read")
738
+ if self._session("kg:read") != read_session:
739
+ raise PermissionError("A2A caller changed during task read")
622
740
  task = self._project(item, task_id=task_id)
623
- if include_committed_event:
624
- from .terminal_event import (
625
- A2ATerminalEventUnavailable,
626
- read_terminal_event,
741
+ try:
742
+ task.artifacts = await asyncio.to_thread(
743
+ self._persisted_artifacts, task_id, item=item
627
744
  )
628
-
629
- session = original
630
- owner_ref = self._owner_ref(session)
631
- engine, _work_engine = self._engine()
632
- try:
633
- event = await asyncio.wait_for(
634
- read_terminal_event(
635
- engine, session=session, task_id=task_id, owner_ref=owner_ref
636
- ),
637
- timeout=5.0,
638
- )
639
- except TimeoutError as exc:
640
- raise A2ATerminalEventUnavailable(
641
- "committed terminal event is unavailable"
642
- ) from exc
643
- current = self._session("work:read")
644
- if (
645
- current != session
646
- or current.tenant != session.tenant
647
- or current.graph != session.graph
648
- or self._owner_ref(current) != owner_ref
649
- ):
650
- raise PermissionError("A2A caller changed during terminal read")
651
- if event["status"] == "available" and (
652
- _STATE_MAP[event["outcome"]] != task.status.state
653
- ):
654
- raise A2ATerminalEventUnavailable(
655
- "committed terminal event is unavailable"
656
- )
657
- task.metadata["arbora"]["terminalEvent"] = event
745
+ except _ReplyUnavailable as exc:
746
+ task.artifacts = None
747
+ task.metadata["arbora"]["reply"] = exc.availability.model_dump(mode="json")
748
+ if self._session("kg:read") != read_session:
749
+ raise PermissionError("A2A caller changed during reply read")
750
+ if include_committed_event:
751
+ await self._attach_terminal_event(task, task_id, original)
658
752
  return task
659
753
 
754
+ async def _attach_terminal_event(
755
+ self, task: A2ATask, task_id: str, session: Any
756
+ ) -> None:
757
+ """Read and attach a terminal event under the unchanged caller authority."""
758
+ from .terminal_event import (
759
+ A2ATerminalEventUnavailable,
760
+ read_terminal_event,
761
+ )
762
+
763
+ owner_ref = self._owner_ref(session)
764
+ engine, _work_engine = self._engine()
765
+ try:
766
+ event = await asyncio.wait_for(
767
+ read_terminal_event(
768
+ engine, session=session, task_id=task_id, owner_ref=owner_ref
769
+ ),
770
+ timeout=5.0,
771
+ )
772
+ except TimeoutError as exc:
773
+ raise A2ATerminalEventUnavailable(
774
+ "committed terminal event is unavailable"
775
+ ) from exc
776
+ current = self._session("work:read")
777
+ if (
778
+ current != session
779
+ or current.tenant != session.tenant
780
+ or current.graph != session.graph
781
+ or self._owner_ref(current) != owner_ref
782
+ ):
783
+ raise PermissionError("A2A caller changed during terminal read")
784
+ if event["status"] == "available" and (
785
+ _STATE_MAP[event["outcome"]] != task.status.state
786
+ ):
787
+ raise A2ATerminalEventUnavailable("committed terminal event is unavailable")
788
+ task.metadata["arbora"]["terminalEvent"] = event
789
+
660
790
  @staticmethod
661
- def _cursor(owner_ref: str, tenant: str, item_id: str) -> str:
662
- return f"{_digest({'tenant': tenant, 'owner': owner_ref, 'id': item_id})}.{item_id}"
791
+ def _cursor(owner_ref: str, tenant: str, native_cursor: str) -> str:
792
+ return f"{_digest({'tenant': tenant, 'owner': owner_ref, 'cursor': native_cursor})}.{native_cursor}"
663
793
 
664
794
  @classmethod
665
- def _decode_cursor(cls, cursor: str | None, *, owner_ref: str, tenant: str) -> str:
795
+ def _decode_cursor(
796
+ cls, cursor: str | None, *, owner_ref: str, tenant: str
797
+ ) -> str | None:
666
798
  if cursor is None:
667
- return ""
668
- digest, separator, item_id = cursor.partition(".")
669
- if not separator or digest != _digest(
670
- {"tenant": tenant, "owner": owner_ref, "id": item_id}
799
+ return None
800
+ digest, separator, native_cursor = cursor.partition(".")
801
+ if (
802
+ not separator
803
+ or not native_cursor
804
+ or digest
805
+ != _digest({"tenant": tenant, "owner": owner_ref, "cursor": native_cursor})
671
806
  ):
672
807
  raise ValueError("A2A task cursor is invalid")
673
- cls._work_item_id(item_id.removeprefix(_WORK_ITEM_PREFIX))
674
- return item_id
808
+ return native_cursor
675
809
 
676
- def _list_rows(self, *, after: str, limit: int, tenant: str, owner_ref: str) -> Any:
810
+ def _list_rows(
811
+ self, *, cursor: str | None, limit: int, tenant: str, owner_ref: str
812
+ ) -> Any:
677
813
  _engine, work_engine = self._engine()
678
- return work_engine.query_cypher(
679
- "MATCH (w:WorkItem) "
680
- "WHERE w.kind = $kind AND w.tenant = $tenant "
681
- "AND w.created_by = $owner AND w.id > $after "
682
- "AND w.id STARTS WITH $id_prefix "
683
- "RETURN w.id AS id, w.status AS status, w.updated_at AS updated_at, "
684
- "w.metadata AS metadata, w.tenant AS tenant, w.created_by AS created_by "
685
- "ORDER BY w.id ASC LIMIT $limit",
686
- {
687
- "kind": "orchestrator_task",
688
- "tenant": tenant,
689
- "owner": owner_ref,
690
- "after": after,
691
- "id_prefix": f"{_WORK_ITEM_PREFIX}{_TASK_PREFIX}",
692
- "limit": limit + 1,
814
+ return work_engine.work_items.list(
815
+ tenant=tenant,
816
+ kind="orchestrator_task",
817
+ metadata_match={
818
+ "a2a_schema": _A2A_METADATA_SCHEMA,
819
+ "a2a_owner_ref": owner_ref,
693
820
  },
821
+ cursor=cursor,
822
+ limit=limit,
694
823
  )
695
824
 
696
- @staticmethod
697
- def _validated_list_rows(rows: Any, limit: int) -> list[Any]:
698
- if not isinstance(rows, list) or len(rows) > limit + 1:
699
- raise RuntimeError("canonical WorkItem list returned invalid data")
700
- return rows
701
-
702
825
  @classmethod
703
- def _project_list_row(cls, row: Any, *, tenant: str, owner_ref: str) -> A2ATask:
704
- if not isinstance(row, dict):
705
- raise RuntimeError("canonical WorkItem list returned an invalid row")
706
- metadata = row.get("metadata")
707
- authorized = (
708
- row.get("tenant") == tenant
709
- and row.get("created_by") == owner_ref
710
- and isinstance(metadata, dict)
711
- and metadata.get("a2a_schema") == _A2A_METADATA_SCHEMA
712
- and metadata.get("a2a_owner_ref") == owner_ref
713
- )
714
- if not authorized:
826
+ def _project_list_row(cls, row: Any, *, owner_ref: str) -> A2ATask:
827
+ if not cls._owned(row, owner_ref):
715
828
  raise RuntimeError("canonical WorkItem list crossed its authority scope")
716
- item_id = str(row.get("id") or "")
829
+ item_id = str(row.get("work_item_id") or "")
717
830
  task_id = item_id.removeprefix(_WORK_ITEM_PREFIX)
718
- cls._work_item_id(task_id)
831
+ if cls._work_item_id(task_id) != item_id:
832
+ raise RuntimeError("canonical WorkItem list returned an invalid identity")
719
833
  return cls._project(row, task_id=task_id)
720
834
 
721
- @classmethod
722
- def _next_cursor(
723
- cls,
724
- rows: list[Any],
725
- tasks: list[A2ATask],
726
- *,
727
- limit: int,
728
- owner_ref: str,
729
- tenant: str,
730
- ) -> str | None:
731
- if len(rows) <= limit or not tasks:
732
- return None
733
- item_id = str(rows[limit - 1].get("id") or "")
734
- return cls._cursor(owner_ref, tenant, item_id)
835
+ @staticmethod
836
+ def _validated_list_page(
837
+ page: Any, limit: int, native_cursor: str | None
838
+ ) -> tuple[list[Any], str | None]:
839
+ """Validate bounded native rows and forward-only continuation together."""
840
+ if not isinstance(page, dict) or not isinstance(page.get("items"), list):
841
+ raise RuntimeError("canonical WorkItem list returned invalid data")
842
+ rows = page["items"]
843
+ continuation = page.get("next_cursor")
844
+ if len(rows) > limit or (
845
+ continuation is not None
846
+ and (
847
+ not isinstance(continuation, str)
848
+ or not continuation
849
+ or continuation == native_cursor
850
+ )
851
+ ):
852
+ raise RuntimeError("canonical WorkItem list returned invalid data")
853
+ return rows, continuation
735
854
 
736
855
  async def list(
737
856
  self, *, cursor: str | None, limit: int
@@ -740,30 +859,26 @@ class WorkItemA2AAuthority:
740
859
  raise ValueError("A2A task page limit must be between 1 and 100")
741
860
  session = self._session("kg:read")
742
861
  owner_ref = self._owner_ref(session)
743
- after = self._decode_cursor(cursor, owner_ref=owner_ref, tenant=session.tenant)
744
- rows = await asyncio.to_thread(
862
+ native_cursor = self._decode_cursor(
863
+ cursor, owner_ref=owner_ref, tenant=session.tenant
864
+ )
865
+ page = await asyncio.to_thread(
745
866
  self._list_rows,
746
- after=after,
867
+ cursor=native_cursor,
747
868
  limit=limit,
748
869
  tenant=session.tenant,
749
870
  owner_ref=owner_ref,
750
871
  )
751
- page = self._validated_list_rows(rows, limit)
752
- tasks = [
753
- self._project_list_row(
754
- row,
755
- tenant=session.tenant,
756
- owner_ref=owner_ref,
757
- )
758
- for row in page[:limit]
759
- ]
760
- return tasks, self._next_cursor(
761
- page,
762
- tasks,
763
- limit=limit,
764
- owner_ref=owner_ref,
765
- tenant=session.tenant,
872
+ if self._session("kg:read") != session:
873
+ raise PermissionError("A2A caller changed during task listing")
874
+ rows, continuation = self._validated_list_page(page, limit, native_cursor)
875
+ tasks = [self._project_list_row(row, owner_ref=owner_ref) for row in rows]
876
+ next_cursor = (
877
+ self._cursor(owner_ref, session.tenant, continuation)
878
+ if continuation is not None
879
+ else None
766
880
  )
881
+ return tasks, next_cursor
767
882
 
768
883
  async def cancel(self, task_id: str) -> A2ATask:
769
884
  item = await asyncio.to_thread(self._authorized_item, task_id, "kg:write")
@@ -20,6 +20,7 @@ __all__ = [
20
20
  "A2AOperationInvokeParams",
21
21
  "A2APlanConfirmParams",
22
22
  "A2ARouteDecision",
23
+ "A2AReplyUnavailable",
23
24
  "A2ASkill",
24
25
  "A2AStreamingAuthority",
25
26
  "A2ATask",
@@ -177,6 +178,15 @@ class A2AArtifact(_WireModel):
177
178
  parts: list[A2ATextPart] = Field(min_length=1, max_length=32)
178
179
 
179
180
 
181
+ class A2AReplyUnavailable(_WireModel):
182
+ """A completed task can have an explicitly unavailable reply artifact."""
183
+
184
+ status: Literal["unavailable"] = "unavailable"
185
+ reason: Literal[
186
+ "payload_too_large", "payload_serialization_failed", "reply_too_large"
187
+ ]
188
+
189
+
180
190
  class A2ATaskStatus(_WireModel):
181
191
  state: A2ATaskState
182
192
  timestamp: str | None = None
@@ -14,6 +14,7 @@ from arbora.agent_host.start_configuration import (
14
14
  HostStartConfiguration,
15
15
  )
16
16
  from arbora.identity.ports import SessionAuthority, SessionState
17
+ from arbora.security.anonymous import session_context
17
18
 
18
19
  if TYPE_CHECKING:
19
20
  from arbora.api.contracts.session import GraphSession
@@ -219,7 +220,7 @@ class HostStartAdmission:
219
220
  self._check_credential(credential)
220
221
  if not isinstance(graph_session, GraphSession):
221
222
  raise PermissionError("workspace_denied")
222
- graph_session.engine_verified_context()
223
+ session_context(graph_session)
223
224
  state = await self._sessions.resolve_session(credential)
224
225
  self._check_configuration(request, configuration, runtime)
225
226
  if not isinstance(state, SessionState) or state.expires_at_ms <= int(
@@ -245,7 +246,7 @@ class HostStartAdmission:
245
246
  )
246
247
  if not binding.same_binding(final_binding):
247
248
  raise PermissionError("workspace_denied")
248
- claims = graph_session.engine_verified_context()
249
+ claims = session_context(graph_session)
249
250
  if any(
250
251
  claims.get(key) != state.resolution.request_context[key]
251
252
  for key in ("principal", "tenant", "audience", "policy_version")