polyrob 1.0.2__tar.gz → 1.0.3__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 (1342) hide show
  1. {polyrob-1.0.2/polyrob.egg-info → polyrob-1.0.3}/PKG-INFO +4 -2
  2. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/next_action_internal.py +5 -2
  3. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/run_loop.py +37 -0
  4. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/step_execution.py +11 -4
  5. polyrob-1.0.3/agents/task/agent/core/token_budget.py +29 -0
  6. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/filters.py +12 -2
  7. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/prompts.py +35 -5
  8. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/skill_writer.py +8 -4
  9. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/constants.py +21 -0
  10. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/dispatcher.py +122 -6
  11. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/task_agent_lifecycle.py +44 -2
  12. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/tool_defaults.py +15 -2
  13. {polyrob-1.0.2 → polyrob-1.0.3}/api/server_boot.py +4 -2
  14. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/approvals.py +5 -3
  15. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/config.py +10 -7
  16. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/cron.py +39 -0
  17. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/profile.py +55 -31
  18. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/update.py +84 -21
  19. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/x_account.py +104 -5
  20. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/banner.py +2 -2
  21. {polyrob-1.0.2 → polyrob-1.0.3}/cli/update/detect.py +9 -3
  22. {polyrob-1.0.2 → polyrob-1.0.3}/cli/update/engine.py +19 -35
  23. {polyrob-1.0.2 → polyrob-1.0.3}/cli/update/process_guard.py +32 -4
  24. {polyrob-1.0.2 → polyrob-1.0.3}/cli/update/runners.py +66 -10
  25. {polyrob-1.0.2 → polyrob-1.0.3}/cli/update/snapshot.py +14 -2
  26. {polyrob-1.0.2 → polyrob-1.0.3}/cli/update/versions.py +22 -9
  27. {polyrob-1.0.2 → polyrob-1.0.3}/config/.env.development.template +3 -0
  28. {polyrob-1.0.2 → polyrob-1.0.3}/core/autonomy_runtime.py +13 -0
  29. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/capability_toggles.py +20 -0
  30. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/goal_flags.py +26 -0
  31. polyrob-1.0.3/core/credential_verdicts.py +33 -0
  32. {polyrob-1.0.2 → polyrob-1.0.3}/core/db_manifest.py +5 -0
  33. {polyrob-1.0.2 → polyrob-1.0.3}/core/event_kinds.py +8 -0
  34. {polyrob-1.0.2 → polyrob-1.0.3}/core/flags_catalog.py +9 -0
  35. polyrob-1.0.3/core/interactive_gate.py +256 -0
  36. {polyrob-1.0.2 → polyrob-1.0.3}/core/logging.py +33 -2
  37. {polyrob-1.0.2 → polyrob-1.0.3}/core/runtime_paths.py +12 -0
  38. {polyrob-1.0.2 → polyrob-1.0.3}/core/security/confined_write.py +22 -0
  39. polyrob-1.0.3/core/session_gc.py +108 -0
  40. {polyrob-1.0.2 → polyrob-1.0.3}/core/status_snapshot.py +134 -0
  41. {polyrob-1.0.2 → polyrob-1.0.3}/core/version.py +1 -1
  42. polyrob-1.0.3/core/wallet/infra_error.py +30 -0
  43. {polyrob-1.0.2 → polyrob-1.0.3}/cron/jobs.py +81 -1
  44. {polyrob-1.0.2 → polyrob-1.0.3}/cron/scheduler.py +65 -4
  45. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polyrob-user-guide/references/configuration.md +9 -0
  46. {polyrob-1.0.2 → polyrob-1.0.3}/docs/CONFIGURATION.md +11 -2
  47. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/cli.md +2 -1
  48. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/getting-started.md +13 -10
  49. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/profiles.md +1 -1
  50. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/self-hosting.md +84 -18
  51. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/upgrading.md +30 -11
  52. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/x-twitter.md +7 -0
  53. {polyrob-1.0.2 → polyrob-1.0.3}/migrations/boot.py +12 -1
  54. {polyrob-1.0.2 → polyrob-1.0.3}/migrations/version_manager.py +16 -4
  55. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/openrouter_client.py +4 -4
  56. polyrob-1.0.3/modules/llm/openrouter_routing.py +34 -0
  57. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/task_context_manager.py +2 -5
  58. {polyrob-1.0.2 → polyrob-1.0.3/polyrob.egg-info}/PKG-INFO +4 -2
  59. {polyrob-1.0.2 → polyrob-1.0.3}/polyrob.egg-info/SOURCES.txt +5 -1
  60. {polyrob-1.0.2 → polyrob-1.0.3}/polyrob.egg-info/requires.txt +3 -1
  61. {polyrob-1.0.2 → polyrob-1.0.3}/pyproject.toml +3 -3
  62. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/dev_rail.py +6 -0
  63. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/harness.py +8 -1
  64. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_version_consistency.py +2 -2
  65. {polyrob-1.0.2 → polyrob-1.0.3}/tools/anysite/tool.py +41 -0
  66. {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/browser_manager.py +24 -17
  67. {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/__init__.py +2 -1
  68. {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/sandbox_guard.py +44 -2
  69. {polyrob-1.0.2 → polyrob-1.0.3}/tools/coding/__init__.py +2 -2
  70. {polyrob-1.0.2 → polyrob-1.0.3}/tools/coding/search.py +24 -3
  71. {polyrob-1.0.2 → polyrob-1.0.3}/tools/coding/tool.py +35 -3
  72. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/approval.py +1 -1
  73. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/room_read_action.py +10 -2
  74. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/tool_load_report.py +36 -1
  75. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/tool_management.py +12 -0
  76. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/views.py +57 -1
  77. {polyrob-1.0.2 → polyrob-1.0.3}/tools/cronjob_tools.py +5 -2
  78. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/data_tool.py +87 -3
  79. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/geckoterminal.py +34 -4
  80. {polyrob-1.0.2 → polyrob-1.0.3}/tools/email_tool.py +55 -1
  81. {polyrob-1.0.2 → polyrob-1.0.3}/tools/filesystem.py +255 -9
  82. {polyrob-1.0.2 → polyrob-1.0.3}/tools/goal_tools.py +15 -0
  83. {polyrob-1.0.2 → polyrob-1.0.3}/tools/knowledge_ingest.py +52 -4
  84. {polyrob-1.0.2 → polyrob-1.0.3}/tools/shell/__init__.py +2 -2
  85. {polyrob-1.0.2 → polyrob-1.0.3}/tools/twitter_tool.py +74 -8
  86. {polyrob-1.0.2 → polyrob-1.0.3}/tools/x_browser/driver.py +24 -0
  87. {polyrob-1.0.2 → polyrob-1.0.3}/tools/x_browser/tool.py +93 -2
  88. polyrob-1.0.2/cli/update/migrate_guarded.py +0 -61
  89. polyrob-1.0.2/core/interactive_gate.py +0 -95
  90. {polyrob-1.0.2 → polyrob-1.0.3}/LICENSE +0 -0
  91. {polyrob-1.0.2 → polyrob-1.0.3}/MANIFEST.in +0 -0
  92. {polyrob-1.0.2 → polyrob-1.0.3}/README.md +0 -0
  93. {polyrob-1.0.2 → polyrob-1.0.3}/agents/README.md +0 -0
  94. {polyrob-1.0.2 → polyrob-1.0.3}/agents/__init__.py +0 -0
  95. {polyrob-1.0.2 → polyrob-1.0.3}/agents/base_agent.py +0 -0
  96. {polyrob-1.0.2 → polyrob-1.0.3}/agents/personality/character.py +0 -0
  97. {polyrob-1.0.2 → polyrob-1.0.3}/agents/personality/character_manager.py +0 -0
  98. {polyrob-1.0.2 → polyrob-1.0.3}/agents/personality/characters/polyrob.character.json +0 -0
  99. {polyrob-1.0.2 → polyrob-1.0.3}/agents/personality/persona_render.py +0 -0
  100. {polyrob-1.0.2 → polyrob-1.0.3}/agents/personality/persona_resolver.py +0 -0
  101. {polyrob-1.0.2 → polyrob-1.0.3}/agents/prompt/__init__.py +0 -0
  102. {polyrob-1.0.2 → polyrob-1.0.3}/agents/prompt/base_prompt.py +0 -0
  103. {polyrob-1.0.2 → polyrob-1.0.3}/agents/prompt/system.py +0 -0
  104. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/README_PATH_MANAGEMENT.md +0 -0
  105. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/__init__.py +0 -0
  106. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/__init__.py +0 -0
  107. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/agent_state.py +0 -0
  108. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/async_delegation.py +0 -0
  109. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/autonomy_state.py +0 -0
  110. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/conversation.py +0 -0
  111. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/__init__.py +0 -0
  112. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/background_review.py +0 -0
  113. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/construction.py +0 -0
  114. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/conversational_exit.py +0 -0
  115. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/correspondent_gate.py +0 -0
  116. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/curator.py +0 -0
  117. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/env_context.py +0 -0
  118. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/episodic_digest.py +0 -0
  119. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/error_recovery.py +0 -0
  120. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/history_io.py +0 -0
  121. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/live_health.py +0 -0
  122. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/llm_provisioning.py +0 -0
  123. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/llm_runner.py +0 -0
  124. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/logging_io.py +0 -0
  125. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/loop_detection.py +0 -0
  126. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/memory_prefetch.py +0 -0
  127. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/memory_writer.py +0 -0
  128. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/metering_failure_log.py +0 -0
  129. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/model_introspection.py +0 -0
  130. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/model_swap.py +0 -0
  131. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/output_validation.py +0 -0
  132. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/project_context.py +0 -0
  133. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/resources.py +0 -0
  134. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/result_offload.py +0 -0
  135. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/result_processing.py +0 -0
  136. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/run_budget.py +0 -0
  137. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/runtime_catalog.py +0 -0
  138. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/safety_lifecycle.py +0 -0
  139. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/self_wake.py +0 -0
  140. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/session_control.py +0 -0
  141. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/session_metadata.py +0 -0
  142. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/step.py +0 -0
  143. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/step_telemetry.py +0 -0
  144. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/tool_availability.py +0 -0
  145. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/turn_input.py +0 -0
  146. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/untrusted_render.py +0 -0
  147. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/user_ingress.py +0 -0
  148. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/hitl_manager.py +0 -0
  149. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/log_sanitize.py +0 -0
  150. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/message_manager/config.py +0 -0
  151. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/message_manager/service.py +0 -0
  152. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/message_manager/tool_call_builder.py +0 -0
  153. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/message_manager/tool_message_repair.py +0 -0
  154. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/message_manager/views.py +0 -0
  155. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/__init__.py +0 -0
  156. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/builders.py +0 -0
  157. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/compactor.py +0 -0
  158. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/context_references.py +0 -0
  159. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/guidance.py +0 -0
  160. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/persistence.py +0 -0
  161. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/retrieval.py +0 -0
  162. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/sqlite_persistence.py +0 -0
  163. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/token_counter.py +0 -0
  164. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/orchestrator.py +0 -0
  165. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/profile_manager.py +0 -0
  166. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/profile_registry.py +0 -0
  167. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/profile_store.py +0 -0
  168. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/service.py +0 -0
  169. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/session.py +0 -0
  170. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/skill_discovery.py +0 -0
  171. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/skill_frontmatter.py +0 -0
  172. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/skill_manager.py +0 -0
  173. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/skill_store.py +0 -0
  174. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/skill_validation.py +0 -0
  175. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/sub_agent_manager.py +0 -0
  176. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/tool_call_tracker.py +0 -0
  177. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/views.py +0 -0
  178. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/config.py +0 -0
  179. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/conversation_resume.py +0 -0
  180. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/__init__.py +0 -0
  181. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/autonomy_marker.py +0 -0
  182. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/board.py +0 -0
  183. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/claim_liveness.py +0 -0
  184. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/completion_judge.py +0 -0
  185. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/context.py +0 -0
  186. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/deliverables.py +0 -0
  187. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/escalation.py +0 -0
  188. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/goal_tool_gates.py +0 -0
  189. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/group_service.py +0 -0
  190. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/planner.py +0 -0
  191. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/streams.py +0 -0
  192. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/logging_config.py +0 -0
  193. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/path.py +0 -0
  194. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/robust_parse_config.py +0 -0
  195. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/runtime/__init__.py +0 -0
  196. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/runtime/acceptance_checks.py +0 -0
  197. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/runtime/acceptance_schema.py +0 -0
  198. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/runtime/edit_verify.py +0 -0
  199. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/runtime/evidence.py +0 -0
  200. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/runtime/metering_gate.py +0 -0
  201. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/runtime/run_as_session.py +0 -0
  202. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/runtime/run_outcome.py +0 -0
  203. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session/__init__.py +0 -0
  204. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session/browser_pool.py +0 -0
  205. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session/cleanup.py +0 -0
  206. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session/execution.py +0 -0
  207. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session/feed.py +0 -0
  208. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session/hitl_ingress.py +0 -0
  209. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session/hooks.py +0 -0
  210. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session/workspace.py +0 -0
  211. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session_registry.py +0 -0
  212. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session_route.py +0 -0
  213. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/sqlite_session_registry.py +0 -0
  214. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/task_agent_chat.py +0 -0
  215. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/task_agent_control.py +0 -0
  216. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/task_agent_delivery.py +0 -0
  217. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/task_agent_support.py +0 -0
  218. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/__init__.py +0 -0
  219. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/agent_graph.py +0 -0
  220. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/feed_reads.py +0 -0
  221. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/formatters.py +0 -0
  222. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/live_progress.py +0 -0
  223. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/manager.py +0 -0
  224. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/memory_events.py +0 -0
  225. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/narrate.py +0 -0
  226. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/run_activity.py +0 -0
  227. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/sequence.py +0 -0
  228. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/service.py +0 -0
  229. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/service_detect.py +0 -0
  230. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/views.py +0 -0
  231. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/templates.py +0 -0
  232. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/utils.py +0 -0
  233. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/utils_json.py +0 -0
  234. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/utils_webview.py +0 -0
  235. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/workspace_context.py +0 -0
  236. {polyrob-1.0.2 → polyrob-1.0.3}/agents/task_agent_lite.py +0 -0
  237. {polyrob-1.0.2 → polyrob-1.0.3}/api/README.md +0 -0
  238. {polyrob-1.0.2 → polyrob-1.0.3}/api/TASK_API_DOCS.md +0 -0
  239. {polyrob-1.0.2 → polyrob-1.0.3}/api/__init__.py +0 -0
  240. {polyrob-1.0.2 → polyrob-1.0.3}/api/a2a/__init__.py +0 -0
  241. {polyrob-1.0.2 → polyrob-1.0.3}/api/a2a/agent_card.py +0 -0
  242. {polyrob-1.0.2 → polyrob-1.0.3}/api/a2a/endpoints.py +0 -0
  243. {polyrob-1.0.2 → polyrob-1.0.3}/api/a2a/models.py +0 -0
  244. {polyrob-1.0.2 → polyrob-1.0.3}/api/a2a/streaming.py +0 -0
  245. {polyrob-1.0.2 → polyrob-1.0.3}/api/a2a/task_handler.py +0 -0
  246. {polyrob-1.0.2 → polyrob-1.0.3}/api/admin_endpoints.py +0 -0
  247. {polyrob-1.0.2 → polyrob-1.0.3}/api/app.py +0 -0
  248. {polyrob-1.0.2 → polyrob-1.0.3}/api/auth_constants.py +0 -0
  249. {polyrob-1.0.2 → polyrob-1.0.3}/api/auth_endpoints.py +0 -0
  250. {polyrob-1.0.2 → polyrob-1.0.3}/api/auth_state.py +0 -0
  251. {polyrob-1.0.2 → polyrob-1.0.3}/api/chat_via_task.py +0 -0
  252. {polyrob-1.0.2 → polyrob-1.0.3}/api/dependencies.py +0 -0
  253. {polyrob-1.0.2 → polyrob-1.0.3}/api/eip8004_endpoints.py +0 -0
  254. {polyrob-1.0.2 → polyrob-1.0.3}/api/hyperliquid_models.py +0 -0
  255. {polyrob-1.0.2 → polyrob-1.0.3}/api/hyperliquid_routes.py +0 -0
  256. {polyrob-1.0.2 → polyrob-1.0.3}/api/jwt_middleware.py +0 -0
  257. {polyrob-1.0.2 → polyrob-1.0.3}/api/kb/__init__.py +0 -0
  258. {polyrob-1.0.2 → polyrob-1.0.3}/api/kb/endpoints.py +0 -0
  259. {polyrob-1.0.2 → polyrob-1.0.3}/api/mcp_models.py +0 -0
  260. {polyrob-1.0.2 → polyrob-1.0.3}/api/mcp_routes.py +0 -0
  261. {polyrob-1.0.2 → polyrob-1.0.3}/api/mcp_serve/__init__.py +0 -0
  262. {polyrob-1.0.2 → polyrob-1.0.3}/api/mcp_serve/handlers.py +0 -0
  263. {polyrob-1.0.2 → polyrob-1.0.3}/api/mcp_serve/router.py +0 -0
  264. {polyrob-1.0.2 → polyrob-1.0.3}/api/middleware.py +0 -0
  265. {polyrob-1.0.2 → polyrob-1.0.3}/api/models.py +0 -0
  266. {polyrob-1.0.2 → polyrob-1.0.3}/api/openai_compat/__init__.py +0 -0
  267. {polyrob-1.0.2 → polyrob-1.0.3}/api/openai_compat/model_map.py +0 -0
  268. {polyrob-1.0.2 → polyrob-1.0.3}/api/openai_compat/models.py +0 -0
  269. {polyrob-1.0.2 → polyrob-1.0.3}/api/openai_compat/router.py +0 -0
  270. {polyrob-1.0.2 → polyrob-1.0.3}/api/payment_endpoints.py +0 -0
  271. {polyrob-1.0.2 → polyrob-1.0.3}/api/payment_verification.py +0 -0
  272. {polyrob-1.0.2 → polyrob-1.0.3}/api/polymarket_models.py +0 -0
  273. {polyrob-1.0.2 → polyrob-1.0.3}/api/polymarket_routes.py +0 -0
  274. {polyrob-1.0.2 → polyrob-1.0.3}/api/pricing_endpoints.py +0 -0
  275. {polyrob-1.0.2 → polyrob-1.0.3}/api/request_limits.py +0 -0
  276. {polyrob-1.0.2 → polyrob-1.0.3}/api/session_routing.py +0 -0
  277. {polyrob-1.0.2 → polyrob-1.0.3}/api/skill_endpoints.py +0 -0
  278. {polyrob-1.0.2 → polyrob-1.0.3}/api/task_http_api.py +0 -0
  279. {polyrob-1.0.2 → polyrob-1.0.3}/api/webhooks.py +0 -0
  280. {polyrob-1.0.2 → polyrob-1.0.3}/api/x402_endpoints.py +0 -0
  281. {polyrob-1.0.2 → polyrob-1.0.3}/assets/__init__.py +0 -0
  282. {polyrob-1.0.2 → polyrob-1.0.3}/assets/fonts/dejavu/DejaVuSans-Bold.ttf +0 -0
  283. {polyrob-1.0.2 → polyrob-1.0.3}/assets/fonts/dejavu/DejaVuSans.ttf +0 -0
  284. {polyrob-1.0.2 → polyrob-1.0.3}/assets/fonts/dejavu/LICENSE +0 -0
  285. {polyrob-1.0.2 → polyrob-1.0.3}/avatar/README.md +0 -0
  286. {polyrob-1.0.2 → polyrob-1.0.3}/avatar/__init__.py +0 -0
  287. {polyrob-1.0.2 → polyrob-1.0.3}/avatar/config/rob.json +0 -0
  288. {polyrob-1.0.2 → polyrob-1.0.3}/avatar/mindprint.js +0 -0
  289. {polyrob-1.0.2 → polyrob-1.0.3}/avatar/renders/rob.meta.json +0 -0
  290. {polyrob-1.0.2 → polyrob-1.0.3}/avatar/renders/rob.png +0 -0
  291. {polyrob-1.0.2 → polyrob-1.0.3}/avatar/studio.html +0 -0
  292. {polyrob-1.0.2 → polyrob-1.0.3}/avatar/webview/avatar-live.js +0 -0
  293. {polyrob-1.0.2 → polyrob-1.0.3}/cli/README.md +0 -0
  294. {polyrob-1.0.2 → polyrob-1.0.3}/cli/__init__.py +0 -0
  295. {polyrob-1.0.2 → polyrob-1.0.3}/cli/_admin_home.py +0 -0
  296. {polyrob-1.0.2 → polyrob-1.0.3}/cli/_flag_warn.py +0 -0
  297. {polyrob-1.0.2 → polyrob-1.0.3}/cli/attachments.py +0 -0
  298. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/__init__.py +0 -0
  299. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/_bootstrap.py +0 -0
  300. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/_errors.py +0 -0
  301. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/_grouped.py +0 -0
  302. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/_options.py +0 -0
  303. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/_session_control.py +0 -0
  304. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/_surface_runner.py +0 -0
  305. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/apps.py +0 -0
  306. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/auth.py +0 -0
  307. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/autonomy.py +0 -0
  308. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/browser.py +0 -0
  309. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/chat.py +0 -0
  310. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/dashboard.py +0 -0
  311. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/datagen.py +0 -0
  312. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/discord.py +0 -0
  313. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/doctor.py +0 -0
  314. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/email.py +0 -0
  315. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/finance.py +0 -0
  316. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/gateway.py +0 -0
  317. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/goals.py +0 -0
  318. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/identity.py +0 -0
  319. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/init.py +0 -0
  320. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/journey.py +0 -0
  321. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/kb.py +0 -0
  322. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/keys.py +0 -0
  323. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/knowledge.py +0 -0
  324. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/model.py +0 -0
  325. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/owner.py +0 -0
  326. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/persona.py +0 -0
  327. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/pfp.py +0 -0
  328. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/profile_dist.py +0 -0
  329. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/profile_transfer.py +0 -0
  330. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/run.py +0 -0
  331. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/serve.py +0 -0
  332. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/session.py +0 -0
  333. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/signal.py +0 -0
  334. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/skill_install.py +0 -0
  335. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/skills.py +0 -0
  336. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/slack.py +0 -0
  337. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/soul.py +0 -0
  338. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/subagents.py +0 -0
  339. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/surface.py +0 -0
  340. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/telegram.py +0 -0
  341. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/todos.py +0 -0
  342. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/tools.py +0 -0
  343. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/wallet.py +0 -0
  344. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/wallet_lp.py +0 -0
  345. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/whatsapp.py +0 -0
  346. {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/x.py +0 -0
  347. {polyrob-1.0.2 → polyrob-1.0.3}/cli/config_store.py +0 -0
  348. {polyrob-1.0.2 → polyrob-1.0.3}/cli/delegation_receipts.py +0 -0
  349. {polyrob-1.0.2 → polyrob-1.0.3}/cli/git_child_env.py +0 -0
  350. {polyrob-1.0.2 → polyrob-1.0.3}/cli/gitignore.py +0 -0
  351. {polyrob-1.0.2 → polyrob-1.0.3}/cli/inventory.py +0 -0
  352. {polyrob-1.0.2 → polyrob-1.0.3}/cli/keys.py +0 -0
  353. {polyrob-1.0.2 → polyrob-1.0.3}/cli/persona.py +0 -0
  354. {polyrob-1.0.2 → polyrob-1.0.3}/cli/polyrob.py +0 -0
  355. {polyrob-1.0.2 → polyrob-1.0.3}/cli/session_paths.py +0 -0
  356. {polyrob-1.0.2 → polyrob-1.0.3}/cli/toolset.py +0 -0
  357. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/__init__.py +0 -0
  358. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/activity.py +0 -0
  359. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/app.py +0 -0
  360. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/approval_prompt.py +0 -0
  361. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/autonomy_poll.py +0 -0
  362. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/blocks.py +0 -0
  363. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/bootstrap_notice.py +0 -0
  364. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/candy.py +0 -0
  365. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/__init__.py +0 -0
  366. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_a23.py +0 -0
  367. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_approve.py +0 -0
  368. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_attach.py +0 -0
  369. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_autonomy.py +0 -0
  370. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_config.py +0 -0
  371. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_context.py +0 -0
  372. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_cron.py +0 -0
  373. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_diag.py +0 -0
  374. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_files.py +0 -0
  375. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_finance.py +0 -0
  376. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_goal_one.py +0 -0
  377. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_help.py +0 -0
  378. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_inbox.py +0 -0
  379. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_journey.py +0 -0
  380. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_kb.py +0 -0
  381. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_learn.py +0 -0
  382. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_mcp.py +0 -0
  383. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_mode.py +0 -0
  384. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_money_verbs.py +0 -0
  385. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_owner.py +0 -0
  386. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_pending.py +0 -0
  387. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_persona.py +0 -0
  388. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_pfp.py +0 -0
  389. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_prefs.py +0 -0
  390. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_profile.py +0 -0
  391. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_reject.py +0 -0
  392. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_self.py +0 -0
  393. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_skills.py +0 -0
  394. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_steer.py +0 -0
  395. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_token.py +0 -0
  396. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/handlers.py +0 -0
  397. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/registry.py +0 -0
  398. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/window.py +0 -0
  399. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/config_picker.py +0 -0
  400. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/dialog.py +0 -0
  401. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/event_registry.py +0 -0
  402. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/event_specs.py +0 -0
  403. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/events.py +0 -0
  404. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/first_run_notice.py +0 -0
  405. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/hints.py +0 -0
  406. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/history.py +0 -0
  407. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/identity.py +0 -0
  408. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/input_policy.py +0 -0
  409. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/json_renderer.py +0 -0
  410. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/lifecycle.py +0 -0
  411. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/line_layout.py +0 -0
  412. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/literal.py +0 -0
  413. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/live_hooks.py +0 -0
  414. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/log_squelch.py +0 -0
  415. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/model_selector.py +0 -0
  416. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/persistent_loop.py +0 -0
  417. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/plain_renderer.py +0 -0
  418. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/renderer.py +0 -0
  419. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/rich_renderer.py +0 -0
  420. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/secrets.py +0 -0
  421. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/slash_highlight.py +0 -0
  422. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/state.py +0 -0
  423. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/statusbar.py +0 -0
  424. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/streaming.py +0 -0
  425. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/terminal_render.py +0 -0
  426. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/terminal_title.py +0 -0
  427. {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/theme.py +0 -0
  428. {polyrob-1.0.2 → polyrob-1.0.3}/cli/update/__init__.py +0 -0
  429. {polyrob-1.0.2 → polyrob-1.0.3}/cli/update/context.py +0 -0
  430. {polyrob-1.0.2 → polyrob-1.0.3}/core/README.md +0 -0
  431. {polyrob-1.0.2 → polyrob-1.0.3}/core/__init__.py +0 -0
  432. {polyrob-1.0.2 → polyrob-1.0.3}/core/action_receipt.py +0 -0
  433. {polyrob-1.0.2 → polyrob-1.0.3}/core/activity_class.py +0 -0
  434. {polyrob-1.0.2 → polyrob-1.0.3}/core/activity_evidence.py +0 -0
  435. {polyrob-1.0.2 → polyrob-1.0.3}/core/admin_data_home.py +0 -0
  436. {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/__init__.py +0 -0
  437. {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/config.py +0 -0
  438. {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/egress.py +0 -0
  439. {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/env_scan.py +0 -0
  440. {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/fingerprint.py +0 -0
  441. {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/nginx.py +0 -0
  442. {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/owner_ops.py +0 -0
  443. {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/registry.py +0 -0
  444. {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/snapshot.py +0 -0
  445. {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/supervisor.py +0 -0
  446. {polyrob-1.0.2 → polyrob-1.0.3}/core/approval_input.py +0 -0
  447. {polyrob-1.0.2 → polyrob-1.0.3}/core/artifacts.py +0 -0
  448. {polyrob-1.0.2 → polyrob-1.0.3}/core/assets.py +0 -0
  449. {polyrob-1.0.2 → polyrob-1.0.3}/core/async_bridge.py +0 -0
  450. {polyrob-1.0.2 → polyrob-1.0.3}/core/autonomy_control.py +0 -0
  451. {polyrob-1.0.2 → polyrob-1.0.3}/core/backoff.py +0 -0
  452. {polyrob-1.0.2 → polyrob-1.0.3}/core/base_component.py +0 -0
  453. {polyrob-1.0.2 → polyrob-1.0.3}/core/book.py +0 -0
  454. {polyrob-1.0.2 → polyrob-1.0.3}/core/bootstrap.py +0 -0
  455. {polyrob-1.0.2 → polyrob-1.0.3}/core/bot.py +0 -0
  456. {polyrob-1.0.2 → polyrob-1.0.3}/core/capability_verdict.py +0 -0
  457. {polyrob-1.0.2 → polyrob-1.0.3}/core/config.py +0 -0
  458. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/__init__.py +0 -0
  459. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/_env.py +0 -0
  460. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/autonomy_config.py +0 -0
  461. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/autonomy_mode.py +0 -0
  462. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/autonomy_posture.py +0 -0
  463. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/builder_mode.py +0 -0
  464. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/compute_posture.py +0 -0
  465. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/flag_defaults.py +0 -0
  466. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/flag_enums.py +0 -0
  467. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/local_profile.py +0 -0
  468. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/memory_policy.py +0 -0
  469. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/payment_policy.py +0 -0
  470. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/payment_tools.py +0 -0
  471. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/policy.py +0 -0
  472. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/posture_card.py +0 -0
  473. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/runtime_gates.py +0 -0
  474. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/spend_lane.py +0 -0
  475. {polyrob-1.0.2 → polyrob-1.0.3}/core/config_service.py +0 -0
  476. {polyrob-1.0.2 → polyrob-1.0.3}/core/constants.py +0 -0
  477. {polyrob-1.0.2 → polyrob-1.0.3}/core/container.py +0 -0
  478. {polyrob-1.0.2 → polyrob-1.0.3}/core/container_hardening.py +0 -0
  479. {polyrob-1.0.2 → polyrob-1.0.3}/core/contract_writer.py +0 -0
  480. {polyrob-1.0.2 → polyrob-1.0.3}/core/copy/__init__.py +0 -0
  481. {polyrob-1.0.2 → polyrob-1.0.3}/core/copy/_engine.py +0 -0
  482. {polyrob-1.0.2 → polyrob-1.0.3}/core/copy/en.py +0 -0
  483. {polyrob-1.0.2 → polyrob-1.0.3}/core/credit_sentinel.py +0 -0
  484. {polyrob-1.0.2 → polyrob-1.0.3}/core/cron_rearm.py +0 -0
  485. {polyrob-1.0.2 → polyrob-1.0.3}/core/dapp_session_store.py +0 -0
  486. {polyrob-1.0.2 → polyrob-1.0.3}/core/embedding.py +0 -0
  487. {polyrob-1.0.2 → polyrob-1.0.3}/core/env.py +0 -0
  488. {polyrob-1.0.2 → polyrob-1.0.3}/core/env_file.py +0 -0
  489. {polyrob-1.0.2 → polyrob-1.0.3}/core/error_classifier.py +0 -0
  490. {polyrob-1.0.2 → polyrob-1.0.3}/core/eval_manifest.py +0 -0
  491. {polyrob-1.0.2 → polyrob-1.0.3}/core/event_log.py +0 -0
  492. {polyrob-1.0.2 → polyrob-1.0.3}/core/exceptions.py +0 -0
  493. {polyrob-1.0.2 → polyrob-1.0.3}/core/exec_identity.py +0 -0
  494. {polyrob-1.0.2 → polyrob-1.0.3}/core/flags.py +0 -0
  495. {polyrob-1.0.2 → polyrob-1.0.3}/core/gitignore.py +0 -0
  496. {polyrob-1.0.2 → polyrob-1.0.3}/core/goal_board_render.py +0 -0
  497. {polyrob-1.0.2 → polyrob-1.0.3}/core/goal_vocab.py +0 -0
  498. {polyrob-1.0.2 → polyrob-1.0.3}/core/home_migration.py +0 -0
  499. {polyrob-1.0.2 → polyrob-1.0.3}/core/identity.py +0 -0
  500. {polyrob-1.0.2 → polyrob-1.0.3}/core/initialization.py +0 -0
  501. {polyrob-1.0.2 → polyrob-1.0.3}/core/instance.py +0 -0
  502. {polyrob-1.0.2 → polyrob-1.0.3}/core/knowledge_export.py +0 -0
  503. {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/__init__.py +0 -0
  504. {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/errors.py +0 -0
  505. {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/flows/__init__.py +0 -0
  506. {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/flows/base.py +0 -0
  507. {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/flows/device_code.py +0 -0
  508. {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/flows/loopback_pkce.py +0 -0
  509. {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/flows/manual_paste_pkce.py +0 -0
  510. {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/flows/registry.py +0 -0
  511. {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/health.py +0 -0
  512. {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/resolve.py +0 -0
  513. {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/store.py +0 -0
  514. {polyrob-1.0.2 → polyrob-1.0.3}/core/maintenance_proposals.py +0 -0
  515. {polyrob-1.0.2 → polyrob-1.0.3}/core/mcp_admin.py +0 -0
  516. {polyrob-1.0.2 → polyrob-1.0.3}/core/open_positions.py +0 -0
  517. {polyrob-1.0.2 → polyrob-1.0.3}/core/optional_extras.py +0 -0
  518. {polyrob-1.0.2 → polyrob-1.0.3}/core/owner_create.py +0 -0
  519. {polyrob-1.0.2 → polyrob-1.0.3}/core/owner_doc_writer.py +0 -0
  520. {polyrob-1.0.2 → polyrob-1.0.3}/core/owner_remedy.py +0 -0
  521. {polyrob-1.0.2 → polyrob-1.0.3}/core/pairing.py +0 -0
  522. {polyrob-1.0.2 → polyrob-1.0.3}/core/path_safety.py +0 -0
  523. {polyrob-1.0.2 → polyrob-1.0.3}/core/paths.py +0 -0
  524. {polyrob-1.0.2 → polyrob-1.0.3}/core/payment_config.py +0 -0
  525. {polyrob-1.0.2 → polyrob-1.0.3}/core/payments/__init__.py +0 -0
  526. {polyrob-1.0.2 → polyrob-1.0.3}/core/payments/assets.py +0 -0
  527. {polyrob-1.0.2 → polyrob-1.0.3}/core/payments/quote.py +0 -0
  528. {polyrob-1.0.2 → polyrob-1.0.3}/core/position_ledger.py +0 -0
  529. {polyrob-1.0.2 → polyrob-1.0.3}/core/prefs.py +0 -0
  530. {polyrob-1.0.2 → polyrob-1.0.3}/core/profiles.py +0 -0
  531. {polyrob-1.0.2 → polyrob-1.0.3}/core/publish.py +0 -0
  532. {polyrob-1.0.2 → polyrob-1.0.3}/core/rate_limit.py +0 -0
  533. {polyrob-1.0.2 → polyrob-1.0.3}/core/recap.py +0 -0
  534. {polyrob-1.0.2 → polyrob-1.0.3}/core/runtime_config.py +0 -0
  535. {polyrob-1.0.2 → polyrob-1.0.3}/core/seams.py +0 -0
  536. {polyrob-1.0.2 → polyrob-1.0.3}/core/secret_patterns.py +0 -0
  537. {polyrob-1.0.2 → polyrob-1.0.3}/core/secret_scan.py +0 -0
  538. {polyrob-1.0.2 → polyrob-1.0.3}/core/secret_scrub.py +0 -0
  539. {polyrob-1.0.2 → polyrob-1.0.3}/core/secrets.py +0 -0
  540. {polyrob-1.0.2 → polyrob-1.0.3}/core/security/__init__.py +0 -0
  541. {polyrob-1.0.2 → polyrob-1.0.3}/core/security/browser_rail.py +0 -0
  542. {polyrob-1.0.2 → polyrob-1.0.3}/core/security/confined_read.py +0 -0
  543. {polyrob-1.0.2 → polyrob-1.0.3}/core/security/document_archive.py +0 -0
  544. {polyrob-1.0.2 → polyrob-1.0.3}/core/security/encryption.py +0 -0
  545. {polyrob-1.0.2 → polyrob-1.0.3}/core/security/forged_turns.py +0 -0
  546. {polyrob-1.0.2 → polyrob-1.0.3}/core/security/host_execution.py +0 -0
  547. {polyrob-1.0.2 → polyrob-1.0.3}/core/security/http_probe.py +0 -0
  548. {polyrob-1.0.2 → polyrob-1.0.3}/core/security/owner_turn.py +0 -0
  549. {polyrob-1.0.2 → polyrob-1.0.3}/core/security/redaction.py +0 -0
  550. {polyrob-1.0.2 → polyrob-1.0.3}/core/security/refusals.py +0 -0
  551. {polyrob-1.0.2 → polyrob-1.0.3}/core/security/secret_guard.py +0 -0
  552. {polyrob-1.0.2 → polyrob-1.0.3}/core/security/session_tokens.py +0 -0
  553. {polyrob-1.0.2 → polyrob-1.0.3}/core/security/threat_report.py +0 -0
  554. {polyrob-1.0.2 → polyrob-1.0.3}/core/security/untrusted_wrap.py +0 -0
  555. {polyrob-1.0.2 → polyrob-1.0.3}/core/security/url_policy.py +0 -0
  556. {polyrob-1.0.2 → polyrob-1.0.3}/core/security_digest.py +0 -0
  557. {polyrob-1.0.2 → polyrob-1.0.3}/core/security_flags.py +0 -0
  558. {polyrob-1.0.2 → polyrob-1.0.3}/core/security_logging_filter.py +0 -0
  559. {polyrob-1.0.2 → polyrob-1.0.3}/core/self_context_writer.py +0 -0
  560. {polyrob-1.0.2 → polyrob-1.0.3}/core/self_events.py +0 -0
  561. {polyrob-1.0.2 → polyrob-1.0.3}/core/self_evolution.py +0 -0
  562. {polyrob-1.0.2 → polyrob-1.0.3}/core/session_control.py +0 -0
  563. {polyrob-1.0.2 → polyrob-1.0.3}/core/ship_tree.py +0 -0
  564. {polyrob-1.0.2 → polyrob-1.0.3}/core/sidecar_relocate.py +0 -0
  565. {polyrob-1.0.2 → polyrob-1.0.3}/core/sqlite_util.py +0 -0
  566. {polyrob-1.0.2 → polyrob-1.0.3}/core/status_liquidity.py +0 -0
  567. {polyrob-1.0.2 → polyrob-1.0.3}/core/status_live.py +0 -0
  568. {polyrob-1.0.2 → polyrob-1.0.3}/core/status_render.py +0 -0
  569. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/__init__.py +0 -0
  570. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/access.py +0 -0
  571. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/access_log.py +0 -0
  572. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/act.py +0 -0
  573. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/address_key.py +0 -0
  574. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/attachments.py +0 -0
  575. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/binding.py +0 -0
  576. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/bootstrap.py +0 -0
  577. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/chat_policy.py +0 -0
  578. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/circuit.py +0 -0
  579. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/command_reply.py +0 -0
  580. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/config.py +0 -0
  581. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/continuity.py +0 -0
  582. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/conversations.py +0 -0
  583. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/correspondents.py +0 -0
  584. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/dead_targets.py +0 -0
  585. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/deep_link.py +0 -0
  586. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/dispatcher.py +0 -0
  587. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/envelopes.py +0 -0
  588. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/error_notices.py +0 -0
  589. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/gc.py +0 -0
  590. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/group_admin.py +0 -0
  591. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/group_allowlist.py +0 -0
  592. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/group_ledger.py +0 -0
  593. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/group_roles.py +0 -0
  594. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/group_turn.py +0 -0
  595. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/health.py +0 -0
  596. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/idempotency.py +0 -0
  597. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/inbound_attachments.py +0 -0
  598. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/inbound_webhook.py +0 -0
  599. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/inbox.py +0 -0
  600. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/inbox_render.py +0 -0
  601. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/ledger_ingest.py +0 -0
  602. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/llm_outage_notice.py +0 -0
  603. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/media.py +0 -0
  604. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/message_router.py +0 -0
  605. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/missed.py +0 -0
  606. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/outbound_allowlist.py +0 -0
  607. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/outbound_dispatcher.py +0 -0
  608. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/outbound_mirror.py +0 -0
  609. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/outbound_policy.py +0 -0
  610. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/outbound_queue.py +0 -0
  611. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/outbound_target.py +0 -0
  612. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/owner_address.py +0 -0
  613. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/owner_admin.py +0 -0
  614. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/owner_intent.py +0 -0
  615. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/owner_target.py +0 -0
  616. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/path_links.py +0 -0
  617. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/poll_health.py +0 -0
  618. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/proactive.py +0 -0
  619. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/progress.py +0 -0
  620. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/quiet_hours.py +0 -0
  621. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/recap.py +0 -0
  622. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/registry.py +0 -0
  623. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/rendering.py +0 -0
  624. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/room_action_admin.py +0 -0
  625. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/room_action_store.py +0 -0
  626. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/room_actions.py +0 -0
  627. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/room_caps.py +0 -0
  628. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/room_focus.py +0 -0
  629. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/room_keys.py +0 -0
  630. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/room_policy.py +0 -0
  631. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/seed.py +0 -0
  632. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/send_policy.py +0 -0
  633. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/serialize.py +0 -0
  634. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/session_chat_registry.py +0 -0
  635. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/session_policy.py +0 -0
  636. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/spill.py +0 -0
  637. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/surface.py +0 -0
  638. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/tappable.py +0 -0
  639. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/transcription.py +0 -0
  640. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/turn_reply.py +0 -0
  641. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/user_delivery.py +0 -0
  642. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/voice_echo.py +0 -0
  643. {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/voice_guard.py +0 -0
  644. {polyrob-1.0.2 → polyrob-1.0.3}/core/tickers.py +0 -0
  645. {polyrob-1.0.2 → polyrob-1.0.3}/core/token_denylist.py +0 -0
  646. {polyrob-1.0.2 → polyrob-1.0.3}/core/tool_capabilities.py +0 -0
  647. {polyrob-1.0.2 → polyrob-1.0.3}/core/tool_catalog.py +0 -0
  648. {polyrob-1.0.2 → polyrob-1.0.3}/core/verbs.py +0 -0
  649. {polyrob-1.0.2 → polyrob-1.0.3}/core/wake_queue.py +0 -0
  650. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/__init__.py +0 -0
  651. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/abi.py +0 -0
  652. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/addresses.py +0 -0
  653. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/agent_wallet.py +0 -0
  654. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/audit_sink.py +0 -0
  655. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/authority.py +0 -0
  656. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/balance_cache.py +0 -0
  657. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/bridge_guard.py +0 -0
  658. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/bridge_status.py +0 -0
  659. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/bridge_watcher.py +0 -0
  660. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/broadcast/__init__.py +0 -0
  661. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/broadcast/evm.py +0 -0
  662. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/broadcast/receipt_validation.py +0 -0
  663. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/chains.py +0 -0
  664. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/config.py +0 -0
  665. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/contracts/FixedSupplyToken.sol +0 -0
  666. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/deploy_guard.py +0 -0
  667. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/derivation.py +0 -0
  668. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/dex_registry.py +0 -0
  669. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/erc8004.py +0 -0
  670. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/factory.py +0 -0
  671. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/liquidity_guard.py +0 -0
  672. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/onchain.py +0 -0
  673. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/policy.py +0 -0
  674. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/public_identity.py +0 -0
  675. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/relay_svm.py +0 -0
  676. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/rpc_response.py +0 -0
  677. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/signer.py +0 -0
  678. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/simulation.py +0 -0
  679. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/solana_onchain.py +0 -0
  680. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/solana_rail.py +0 -0
  681. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/solana_signer.py +0 -0
  682. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/solana_simulation.py +0 -0
  683. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/solana_strays.py +0 -0
  684. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/solana_tx_inspect.py +0 -0
  685. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/solana_x402.py +0 -0
  686. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/spl_token.py +0 -0
  687. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/submission_journal.py +0 -0
  688. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/submission_recovery.py +0 -0
  689. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/submission_store.py +0 -0
  690. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/token_template.py +0 -0
  691. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/tokens.py +0 -0
  692. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/trade_index.py +0 -0
  693. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/tx_guard.py +0 -0
  694. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/tx_notify.py +0 -0
  695. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/univ3_math.py +0 -0
  696. {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/view.py +0 -0
  697. {polyrob-1.0.2 → polyrob-1.0.3}/cron/README.md +0 -0
  698. {polyrob-1.0.2 → polyrob-1.0.3}/cron/__init__.py +0 -0
  699. {polyrob-1.0.2 → polyrob-1.0.3}/cron/approval_defer.py +0 -0
  700. {polyrob-1.0.2 → polyrob-1.0.3}/cron/delivery.py +0 -0
  701. {polyrob-1.0.2 → polyrob-1.0.3}/cron/digest.py +0 -0
  702. {polyrob-1.0.2 → polyrob-1.0.3}/cron/room_service.py +0 -0
  703. {polyrob-1.0.2 → polyrob-1.0.3}/cron/runner.py +0 -0
  704. {polyrob-1.0.2 → polyrob-1.0.3}/cron/schedule.py +0 -0
  705. {polyrob-1.0.2 → polyrob-1.0.3}/cron/service.py +0 -0
  706. {polyrob-1.0.2 → polyrob-1.0.3}/cron/wake_gate.py +0 -0
  707. {polyrob-1.0.2 → polyrob-1.0.3}/data/__init__.py +0 -0
  708. {polyrob-1.0.2 → polyrob-1.0.3}/data/characters/analyst.character.json +0 -0
  709. {polyrob-1.0.2 → polyrob-1.0.3}/data/characters/coder.character.json +0 -0
  710. {polyrob-1.0.2 → polyrob-1.0.3}/data/characters/default.character.json +0 -0
  711. {polyrob-1.0.2 → polyrob-1.0.3}/data/characters/ops.character.json +0 -0
  712. {polyrob-1.0.2 → polyrob-1.0.3}/data/characters/researcher.character.json +0 -0
  713. {polyrob-1.0.2 → polyrob-1.0.3}/data/characters/writer.character.json +0 -0
  714. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/autov2_prompts.json +0 -0
  715. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/browser-automation/SKILL.md +0 -0
  716. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/coding-workflow/SKILL.md +0 -0
  717. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/crypto-trading-safety/SKILL.md +0 -0
  718. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/document-writing/SKILL.md +0 -0
  719. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/email-comms/SKILL.md +0 -0
  720. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/file-data-ops/SKILL.md +0 -0
  721. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/hyperliquid-account-review/SKILL.md +0 -0
  722. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/hyperliquid-market-data/SKILL.md +0 -0
  723. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/hyperliquid-trading/SKILL.md +0 -0
  724. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/lead-research/SKILL.md +0 -0
  725. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/market-research-brief/SKILL.md +0 -0
  726. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/person-analyzer/SKILL.md +0 -0
  727. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polymarket-market-research/SKILL.md +0 -0
  728. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polymarket-portfolio-review/SKILL.md +0 -0
  729. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polymarket-trading/SKILL.md +0 -0
  730. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polyrob-user-guide/SKILL.md +0 -0
  731. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polyrob-user-guide/references/autonomy.md +0 -0
  732. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polyrob-user-guide/references/money-and-safety.md +0 -0
  733. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polyrob-user-guide/references/setup-interview.md +0 -0
  734. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polyrob-user-guide/references/skills-and-learning.md +0 -0
  735. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polyrob-user-guide/references/surfaces.md +0 -0
  736. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polyrob-user-guide/references/wallet-and-identity.md +0 -0
  737. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/presentation-creator/SKILL.md +0 -0
  738. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/project-analyzer/SKILL.md +0 -0
  739. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/rules.json +0 -0
  740. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/secret-handling/SKILL.md +0 -0
  741. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/self-deploy/SKILL.md +0 -0
  742. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/skill-authoring/SKILL.md +0 -0
  743. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/skill-security-review/SKILL.md +0 -0
  744. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/social-discovery/SKILL.md +0 -0
  745. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/task-planning/SKILL.md +0 -0
  746. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/treasury-trading/SKILL.md +0 -0
  747. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/verified-tooling/SKILL.md +0 -0
  748. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/web-research/SKILL.md +0 -0
  749. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/web-scraping/SKILL.md +0 -0
  750. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/x-engagement/SKILL.md +0 -0
  751. {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/system_prompts.json +0 -0
  752. {polyrob-1.0.2 → polyrob-1.0.3}/data/subscription_channels.json +0 -0
  753. {polyrob-1.0.2 → polyrob-1.0.3}/datagen/__init__.py +0 -0
  754. {polyrob-1.0.2 → polyrob-1.0.3}/datagen/assemble.py +0 -0
  755. {polyrob-1.0.2 → polyrob-1.0.3}/datagen/batch_runner.py +0 -0
  756. {polyrob-1.0.2 → polyrob-1.0.3}/datagen/bulk_export.py +0 -0
  757. {polyrob-1.0.2 → polyrob-1.0.3}/datagen/capture.py +0 -0
  758. {polyrob-1.0.2 → polyrob-1.0.3}/datagen/formats.py +0 -0
  759. {polyrob-1.0.2 → polyrob-1.0.3}/datagen/record.py +0 -0
  760. {polyrob-1.0.2 → polyrob-1.0.3}/datagen/scrub.py +0 -0
  761. {polyrob-1.0.2 → polyrob-1.0.3}/datagen/toolset_distributions.py +0 -0
  762. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/api.md +0 -0
  763. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/architecture.md +0 -0
  764. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/configuration.md +0 -0
  765. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/console.md +0 -0
  766. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/deployment-postures.md +0 -0
  767. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/groups.md +0 -0
  768. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/instances.md +0 -0
  769. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/migration/README.md +0 -0
  770. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/migration/from-hermes.md +0 -0
  771. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/migration/from-openclaw.md +0 -0
  772. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/owner-controls.md +0 -0
  773. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/payments.md +0 -0
  774. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/security-model.md +0 -0
  775. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/skills.md +0 -0
  776. {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/streams.md +0 -0
  777. {polyrob-1.0.2 → polyrob-1.0.3}/migrations/README.md +0 -0
  778. {polyrob-1.0.2 → polyrob-1.0.3}/migrations/__init__.py +0 -0
  779. {polyrob-1.0.2 → polyrob-1.0.3}/migrations/migrate.py +0 -0
  780. {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/__init__.py +0 -0
  781. {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_0_0_baseline.py +0 -0
  782. {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_1_0_user_mcp_servers.py +0 -0
  783. {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_2_0_den_token_bonuses.py +0 -0
  784. {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_3_0_billing_failures.py +0 -0
  785. {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_4_0_polymarket_credentials.py +0 -0
  786. {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_5_0_usage_records_request_id.py +0 -0
  787. {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_6_0_x402_tx_hash_unique.py +0 -0
  788. {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_7_0_x402_subscription_pending_unique.py +0 -0
  789. {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_8_0_x402_tx_hash_case_normalize.py +0 -0
  790. {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_9_0_x402_payment_asset_columns.py +0 -0
  791. {polyrob-1.0.2 → polyrob-1.0.3}/modules/README.md +0 -0
  792. {polyrob-1.0.2 → polyrob-1.0.3}/modules/__init__.py +0 -0
  793. {polyrob-1.0.2 → polyrob-1.0.3}/modules/auth/__init__.py +0 -0
  794. {polyrob-1.0.2 → polyrob-1.0.3}/modules/auth/api_key_manager.py +0 -0
  795. {polyrob-1.0.2 → polyrob-1.0.3}/modules/auth/identity_mapper.py +0 -0
  796. {polyrob-1.0.2 → polyrob-1.0.3}/modules/auth/siwe_auth.py +0 -0
  797. {polyrob-1.0.2 → polyrob-1.0.3}/modules/auth/tier_manager.py +0 -0
  798. {polyrob-1.0.2 → polyrob-1.0.3}/modules/base_module.py +0 -0
  799. {polyrob-1.0.2 → polyrob-1.0.3}/modules/credits/__init__.py +0 -0
  800. {polyrob-1.0.2 → polyrob-1.0.3}/modules/credits/balance_manager.py +0 -0
  801. {polyrob-1.0.2 → polyrob-1.0.3}/modules/credits/balances.py +0 -0
  802. {polyrob-1.0.2 → polyrob-1.0.3}/modules/credits/cost_utils.py +0 -0
  803. {polyrob-1.0.2 → polyrob-1.0.3}/modules/credits/pricing.py +0 -0
  804. {polyrob-1.0.2 → polyrob-1.0.3}/modules/credits/unified_ledger.py +0 -0
  805. {polyrob-1.0.2 → polyrob-1.0.3}/modules/credits/usage_rollup.py +0 -0
  806. {polyrob-1.0.2 → polyrob-1.0.3}/modules/credits/usage_tracker.py +0 -0
  807. {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/__init__.py +0 -0
  808. {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/audit_log.py +0 -0
  809. {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/auth_tables.py +0 -0
  810. {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/connection.py +0 -0
  811. {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/conversation_contexts.py +0 -0
  812. {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/database_manager.py +0 -0
  813. {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/hyperliquid.py +0 -0
  814. {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/polymarket.py +0 -0
  815. {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/user_mcp_servers.py +0 -0
  816. {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/user_profiles.py +0 -0
  817. {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/x402_tables.py +0 -0
  818. {polyrob-1.0.2 → polyrob-1.0.3}/modules/eip8004/README.md +0 -0
  819. {polyrob-1.0.2 → polyrob-1.0.3}/modules/eip8004/__init__.py +0 -0
  820. {polyrob-1.0.2 → polyrob-1.0.3}/modules/eip8004/contracts.py +0 -0
  821. {polyrob-1.0.2 → polyrob-1.0.3}/modules/eip8004/models.py +0 -0
  822. {polyrob-1.0.2 → polyrob-1.0.3}/modules/eip8004/payment_proof.py +0 -0
  823. {polyrob-1.0.2 → polyrob-1.0.3}/modules/eip8004/registration.py +0 -0
  824. {polyrob-1.0.2 → polyrob-1.0.3}/modules/eip8004/reputation.py +0 -0
  825. {polyrob-1.0.2 → polyrob-1.0.3}/modules/eip8004/validation.py +0 -0
  826. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/__init__.py +0 -0
  827. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/adapters.py +0 -0
  828. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/anthropic_client.py +0 -0
  829. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/aux_metering.py +0 -0
  830. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/available_models.py +0 -0
  831. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/brain_scrubber.py +0 -0
  832. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/cache_hints.py +0 -0
  833. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/compat_clients.py +0 -0
  834. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/deepseek_client.py +0 -0
  835. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/gemini_client.py +0 -0
  836. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/gemini_parts.py +0 -0
  837. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/llm_client.py +0 -0
  838. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/llm_client_registry.py +0 -0
  839. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/llm_factory.py +0 -0
  840. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/llm_manager.py +0 -0
  841. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/manager_inventory.py +0 -0
  842. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/messages.py +0 -0
  843. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/model_catalog.py +0 -0
  844. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/model_catalog_recent.py +0 -0
  845. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/model_pricing.py +0 -0
  846. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/model_registry.py +0 -0
  847. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/model_types.py +0 -0
  848. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/nvidia_client.py +0 -0
  849. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/openai_client.py +0 -0
  850. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/profiles.py +0 -0
  851. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/provider_spec.py +0 -0
  852. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/responses_client.py +0 -0
  853. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/retry_log.py +0 -0
  854. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/sdk_caps.py +0 -0
  855. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/think_scrubber.py +0 -0
  856. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/token_counter.py +0 -0
  857. {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/usage_extract.py +0 -0
  858. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/__init__.py +0 -0
  859. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/backend_factory.py +0 -0
  860. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/cache_manager.py +0 -0
  861. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/episodic.py +0 -0
  862. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/local_vector_memory_provider.py +0 -0
  863. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/memory_manager.py +0 -0
  864. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/models.py +0 -0
  865. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/provider.py +0 -0
  866. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/registry.py +0 -0
  867. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/sqlite_curated_store.py +0 -0
  868. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/sqlite_episodes_store.py +0 -0
  869. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/sqlite_kb_store.py +0 -0
  870. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/sqlite_memory_provider.py +0 -0
  871. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/__init__.py +0 -0
  872. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/compaction_manager.py +0 -0
  873. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/context_retriever.py +0 -0
  874. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/hierarchical_memory.py +0 -0
  875. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/lexical_retriever.py +0 -0
  876. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/null_context_manager.py +0 -0
  877. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/phase_manager.py +0 -0
  878. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/reflection_service.py +0 -0
  879. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/semantic_retriever.py +0 -0
  880. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/threat_scan.py +0 -0
  881. {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/wikilinks.py +0 -0
  882. {polyrob-1.0.2 → polyrob-1.0.3}/modules/payments/__init__.py +0 -0
  883. {polyrob-1.0.2 → polyrob-1.0.3}/modules/payments/deposit_monitor.py +0 -0
  884. {polyrob-1.0.2 → polyrob-1.0.3}/modules/payments/networks.py +0 -0
  885. {polyrob-1.0.2 → polyrob-1.0.3}/modules/payments/price_oracle.py +0 -0
  886. {polyrob-1.0.2 → polyrob-1.0.3}/modules/payments/treasury_sweeper.py +0 -0
  887. {polyrob-1.0.2 → polyrob-1.0.3}/modules/payments/wallet_generator.py +0 -0
  888. {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/__init__.py +0 -0
  889. {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/cards.py +0 -0
  890. {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/config.py +0 -0
  891. {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/identity.py +0 -0
  892. {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/mesh.py +0 -0
  893. {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/push.py +0 -0
  894. {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/renderer.py +0 -0
  895. {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/still.py +0 -0
  896. {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/store.py +0 -0
  897. {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/voice.py +0 -0
  898. {polyrob-1.0.2 → polyrob-1.0.3}/modules/skills/__init__.py +0 -0
  899. {polyrob-1.0.2 → polyrob-1.0.3}/modules/skills/skill_usage.py +0 -0
  900. {polyrob-1.0.2 → polyrob-1.0.3}/modules/transcription/__init__.py +0 -0
  901. {polyrob-1.0.2 → polyrob-1.0.3}/modules/transcription/base.py +0 -0
  902. {polyrob-1.0.2 → polyrob-1.0.3}/modules/transcription/faster_whisper_transcriber.py +0 -0
  903. {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/README.md +0 -0
  904. {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/__init__.py +0 -0
  905. {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/_db.py +0 -0
  906. {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/artifact.py +0 -0
  907. {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/invoice_assets.py +0 -0
  908. {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/invoice_jitter.py +0 -0
  909. {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/invoice_sizing.py +0 -0
  910. {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/invoicing.py +0 -0
  911. {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/invoicing_note.py +0 -0
  912. {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/middleware.py +0 -0
  913. {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/onchain_probe.py +0 -0
  914. {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/settlement_notify.py +0 -0
  915. {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/settlement_reputation.py +0 -0
  916. {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/settlement_scan.py +0 -0
  917. {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/settlement_subscriptions.py +0 -0
  918. {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/settlement_watcher.py +0 -0
  919. {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/solana_settlement.py +0 -0
  920. {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/subscriptions.py +0 -0
  921. {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/x402_integration.py +0 -0
  922. {polyrob-1.0.2 → polyrob-1.0.3}/polyrob.egg-info/dependency_links.txt +0 -0
  923. {polyrob-1.0.2 → polyrob-1.0.3}/polyrob.egg-info/entry_points.txt +0 -0
  924. {polyrob-1.0.2 → polyrob-1.0.3}/polyrob.egg-info/top_level.txt +0 -0
  925. {polyrob-1.0.2 → polyrob-1.0.3}/setup.cfg +0 -0
  926. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/README.md +0 -0
  927. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/__init__.py +0 -0
  928. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/_shared.py +0 -0
  929. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/discord/__init__.py +0 -0
  930. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/discord/client.py +0 -0
  931. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/discord/gateway.py +0 -0
  932. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/discord/harness.py +0 -0
  933. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/discord/surface.py +0 -0
  934. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/email/__init__.py +0 -0
  935. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/email/dedup.py +0 -0
  936. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/email/fetchers.py +0 -0
  937. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/email/harness.py +0 -0
  938. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/email/inbound.py +0 -0
  939. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/email/surface.py +0 -0
  940. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/inbox_sources.py +0 -0
  941. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/signal/__init__.py +0 -0
  942. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/signal/client.py +0 -0
  943. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/signal/harness.py +0 -0
  944. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/signal/surface.py +0 -0
  945. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/slack/__init__.py +0 -0
  946. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/slack/client.py +0 -0
  947. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/slack/harness.py +0 -0
  948. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/slack/socket_mode.py +0 -0
  949. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/slack/surface.py +0 -0
  950. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/__init__.py +0 -0
  951. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/apps_ops.py +0 -0
  952. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/dedup.py +0 -0
  953. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/group_ops.py +0 -0
  954. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/inbound.py +0 -0
  955. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/interactive_tools.py +0 -0
  956. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/lp_ops.py +0 -0
  957. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/media.py +0 -0
  958. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/moderation.py +0 -0
  959. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/owner_intent_gate.py +0 -0
  960. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/owner_ops.py +0 -0
  961. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/rate_limit.py +0 -0
  962. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/room_moderator.py +0 -0
  963. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/room_turn.py +0 -0
  964. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/surface.py +0 -0
  965. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/token_ops.py +0 -0
  966. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/triggers.py +0 -0
  967. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/voice.py +0 -0
  968. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/whatsapp/__init__.py +0 -0
  969. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/whatsapp/client.py +0 -0
  970. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/whatsapp/harness.py +0 -0
  971. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/whatsapp/inbound.py +0 -0
  972. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/whatsapp/surface.py +0 -0
  973. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/whatsapp/window.py +0 -0
  974. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/x/__init__.py +0 -0
  975. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/x/chat_client.py +0 -0
  976. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/x/client.py +0 -0
  977. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/x/harness.py +0 -0
  978. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/x/poller.py +0 -0
  979. {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/x/surface.py +0 -0
  980. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_a2a_protocol.py +0 -0
  981. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_accessibility_snapshot.py +0 -0
  982. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_autonomy_control_ratchet.py +0 -0
  983. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_bool_env_parse_ratchet.py +0 -0
  984. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_browser_launch_ratchet.py +0 -0
  985. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_changelog_release.py +0 -0
  986. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_conftest_operator_env_guard.py +0 -0
  987. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_core_platform_boundary.py +0 -0
  988. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_core_server_boundary.py +0 -0
  989. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_dynamic_pricing.py +0 -0
  990. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_effect_classification_ratchet.py +0 -0
  991. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_embedder_needed.py +0 -0
  992. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_event_kind_contract.py +0 -0
  993. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_file_size_ratchet.py +0 -0
  994. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_gemini_fixes.py +0 -0
  995. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_home_binding_ratchet.py +0 -0
  996. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_import_layering.py +0 -0
  997. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_layering_ratchet.py +0 -0
  998. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_lazy_embedder.py +0 -0
  999. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_llm_timeout_ssot.py +0 -0
  1000. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_mcp_tool_fix.py +0 -0
  1001. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_numeric_env_parse_ratchet.py +0 -0
  1002. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_paid_room_action_ratchet.py +0 -0
  1003. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_path_ratchet.py +0 -0
  1004. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_private_cleanup_ratchet.py +0 -0
  1005. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_provider_registry_ratchet.py +0 -0
  1006. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_public_docs_links.py +0 -0
  1007. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_public_files_present.py +0 -0
  1008. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_public_release_surface.py +0 -0
  1009. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_rate_limiter_ratchet.py +0 -0
  1010. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_rename_tail.py +0 -0
  1011. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_room_safety_ratchet.py +0 -0
  1012. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_schema_version.py +0 -0
  1013. {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_status_silence_ratchet.py +0 -0
  1014. {polyrob-1.0.2 → polyrob-1.0.3}/tools/README.md +0 -0
  1015. {polyrob-1.0.2 → polyrob-1.0.3}/tools/__init__.py +0 -0
  1016. {polyrob-1.0.2 → polyrob-1.0.3}/tools/alchemy/__init__.py +0 -0
  1017. {polyrob-1.0.2 → polyrob-1.0.3}/tools/alchemy/alchemy_tool.py +0 -0
  1018. {polyrob-1.0.2 → polyrob-1.0.3}/tools/anysite/__init__.py +0 -0
  1019. {polyrob-1.0.2 → polyrob-1.0.3}/tools/anysite/client.py +0 -0
  1020. {polyrob-1.0.2 → polyrob-1.0.3}/tools/app_service/__init__.py +0 -0
  1021. {polyrob-1.0.2 → polyrob-1.0.3}/tools/app_service/tool.py +0 -0
  1022. {polyrob-1.0.2 → polyrob-1.0.3}/tools/base_tool.py +0 -0
  1023. {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/__init__.py +0 -0
  1024. {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/_flags.py +0 -0
  1025. {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/actions.py +0 -0
  1026. {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/browser.py +0 -0
  1027. {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/child_env.py +0 -0
  1028. {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/context.py +0 -0
  1029. {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/launch_security.py +0 -0
  1030. {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/playwright_utils.py +0 -0
  1031. {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/views.py +0 -0
  1032. {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/SANDBOX_SECURITY.md +0 -0
  1033. {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/backend.py +0 -0
  1034. {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/backend_cache.py +0 -0
  1035. {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/backends/__init__.py +0 -0
  1036. {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/backends/_proc.py +0 -0
  1037. {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/backends/bounded_capture.py +0 -0
  1038. {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/backends/docker.py +0 -0
  1039. {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/backends/local_subprocess.py +0 -0
  1040. {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/backends/ssh.py +0 -0
  1041. {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/env_policy.py +0 -0
  1042. {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/limits.py +0 -0
  1043. {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/result.py +0 -0
  1044. {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/tool.py +0 -0
  1045. {polyrob-1.0.2 → polyrob-1.0.3}/tools/coding/edit.py +0 -0
  1046. {polyrob-1.0.2 → polyrob-1.0.3}/tools/coding/lsp.py +0 -0
  1047. {polyrob-1.0.2 → polyrob-1.0.3}/tools/coding/snapshot.py +0 -0
  1048. {polyrob-1.0.2 → polyrob-1.0.3}/tools/collabland/__init__.py +0 -0
  1049. {polyrob-1.0.2 → polyrob-1.0.3}/tools/collabland/collabland_tool.py +0 -0
  1050. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/__init__.py +0 -0
  1051. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/_helpers.py +0 -0
  1052. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/action_registration.py +0 -0
  1053. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/agent_status_action.py +0 -0
  1054. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/approval_interactive.py +0 -0
  1055. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/approval_queue.py +0 -0
  1056. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/autonomy_control_action.py +0 -0
  1057. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/avatar_action.py +0 -0
  1058. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/delegation.py +0 -0
  1059. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/doc_authoring.py +0 -0
  1060. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/emit.py +0 -0
  1061. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/execution.py +0 -0
  1062. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/execution_context.py +0 -0
  1063. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/grant_card.py +0 -0
  1064. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/hooks.py +0 -0
  1065. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/insights_action.py +0 -0
  1066. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/introspection.py +0 -0
  1067. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/mcp_registrar.py +0 -0
  1068. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/message_send.py +0 -0
  1069. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/registry/__init__.py +0 -0
  1070. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/registry/schema_generators.py +0 -0
  1071. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/registry/schema_sanitizer.py +0 -0
  1072. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/registry/service.py +0 -0
  1073. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/registry/views.py +0 -0
  1074. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/service.py +0 -0
  1075. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/tool_search_actions.py +0 -0
  1076. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/turn_origin.py +0 -0
  1077. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/types.py +0 -0
  1078. {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/wallet_authority.py +0 -0
  1079. {polyrob-1.0.2 → polyrob-1.0.3}/tools/credential_cache.py +0 -0
  1080. {polyrob-1.0.2 → polyrob-1.0.3}/tools/crypto_trade_gate.py +0 -0
  1081. {polyrob-1.0.2 → polyrob-1.0.3}/tools/dapp_browser/__init__.py +0 -0
  1082. {polyrob-1.0.2 → polyrob-1.0.3}/tools/dapp_browser/bridge.py +0 -0
  1083. {polyrob-1.0.2 → polyrob-1.0.3}/tools/dapp_browser/js.py +0 -0
  1084. {polyrob-1.0.2 → polyrob-1.0.3}/tools/dapp_browser/registration.py +0 -0
  1085. {polyrob-1.0.2 → polyrob-1.0.3}/tools/dapp_browser/tool.py +0 -0
  1086. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/__init__.py +0 -0
  1087. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/agent_registration.py +0 -0
  1088. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/book.py +0 -0
  1089. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/bridge_evm_leg.py +0 -0
  1090. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/bridge_verb.py +0 -0
  1091. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/call_verb.py +0 -0
  1092. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/deploy_verb.py +0 -0
  1093. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/lp_abi.py +0 -0
  1094. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/lp_reads.py +0 -0
  1095. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/lp_receipts.py +0 -0
  1096. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/lp_valuation.py +0 -0
  1097. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/lp_verbs.py +0 -0
  1098. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/nft_verbs.py +0 -0
  1099. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/payment_quote.py +0 -0
  1100. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/pool_screen.py +0 -0
  1101. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/__init__.py +0 -0
  1102. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/_http.py +0 -0
  1103. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/alchemy_index.py +0 -0
  1104. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/base.py +0 -0
  1105. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/dexscreener.py +0 -0
  1106. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/goplus.py +0 -0
  1107. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/jupiter.py +0 -0
  1108. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/relay_bridge.py +0 -0
  1109. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/routes/__init__.py +0 -0
  1110. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/routes/lifi.py +0 -0
  1111. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/routes/univ3_route.py +0 -0
  1112. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/univ3.py +0 -0
  1113. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/reconcile.py +0 -0
  1114. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/spl_deploy_verb.py +0 -0
  1115. {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/trade_tool.py +0 -0
  1116. {polyrob-1.0.2 → polyrob-1.0.3}/tools/descriptors.py +0 -0
  1117. {polyrob-1.0.2 → polyrob-1.0.3}/tools/document_parser.py +0 -0
  1118. {polyrob-1.0.2 → polyrob-1.0.3}/tools/document_worker.py +0 -0
  1119. {polyrob-1.0.2 → polyrob-1.0.3}/tools/dom/__init__.py +0 -0
  1120. {polyrob-1.0.2 → polyrob-1.0.3}/tools/dom/buildDomTree.js +0 -0
  1121. {polyrob-1.0.2 → polyrob-1.0.3}/tools/dom/history_tree_processor/service.py +0 -0
  1122. {polyrob-1.0.2 → polyrob-1.0.3}/tools/dom/history_tree_processor/view.py +0 -0
  1123. {polyrob-1.0.2 → polyrob-1.0.3}/tools/dom/service.py +0 -0
  1124. {polyrob-1.0.2 → polyrob-1.0.3}/tools/dom/views.py +0 -0
  1125. {polyrob-1.0.2 → polyrob-1.0.3}/tools/email_providers/__init__.py +0 -0
  1126. {polyrob-1.0.2 → polyrob-1.0.3}/tools/email_providers/agentmail.py +0 -0
  1127. {polyrob-1.0.2 → polyrob-1.0.3}/tools/exceptions.py +0 -0
  1128. {polyrob-1.0.2 → polyrob-1.0.3}/tools/filesystem_docproc.py +0 -0
  1129. {polyrob-1.0.2 → polyrob-1.0.3}/tools/filesystem_pdf.py +0 -0
  1130. {polyrob-1.0.2 → polyrob-1.0.3}/tools/git/__init__.py +0 -0
  1131. {polyrob-1.0.2 → polyrob-1.0.3}/tools/git/tool.py +0 -0
  1132. {polyrob-1.0.2 → polyrob-1.0.3}/tools/github/__init__.py +0 -0
  1133. {polyrob-1.0.2 → polyrob-1.0.3}/tools/github/client.py +0 -0
  1134. {polyrob-1.0.2 → polyrob-1.0.3}/tools/github/tool.py +0 -0
  1135. {polyrob-1.0.2 → polyrob-1.0.3}/tools/hf_deploy/__init__.py +0 -0
  1136. {polyrob-1.0.2 → polyrob-1.0.3}/tools/hf_deploy/broker.py +0 -0
  1137. {polyrob-1.0.2 → polyrob-1.0.3}/tools/hf_deploy/digest.py +0 -0
  1138. {polyrob-1.0.2 → polyrob-1.0.3}/tools/hf_deploy/reconcile.py +0 -0
  1139. {polyrob-1.0.2 → polyrob-1.0.3}/tools/hf_deploy/registry.py +0 -0
  1140. {polyrob-1.0.2 → polyrob-1.0.3}/tools/hf_deploy/tool.py +0 -0
  1141. {polyrob-1.0.2 → polyrob-1.0.3}/tools/hyperliquid/__init__.py +0 -0
  1142. {polyrob-1.0.2 → polyrob-1.0.3}/tools/hyperliquid/models.py +0 -0
  1143. {polyrob-1.0.2 → polyrob-1.0.3}/tools/hyperliquid/service.py +0 -0
  1144. {polyrob-1.0.2 → polyrob-1.0.3}/tools/knowledge_inventory.py +0 -0
  1145. {polyrob-1.0.2 → polyrob-1.0.3}/tools/launchpad/__init__.py +0 -0
  1146. {polyrob-1.0.2 → polyrob-1.0.3}/tools/launchpad/execute.py +0 -0
  1147. {polyrob-1.0.2 → polyrob-1.0.3}/tools/launchpad/pons.py +0 -0
  1148. {polyrob-1.0.2 → polyrob-1.0.3}/tools/launchpad/pons_abi.py +0 -0
  1149. {polyrob-1.0.2 → polyrob-1.0.3}/tools/launchpad/registration.py +0 -0
  1150. {polyrob-1.0.2 → polyrob-1.0.3}/tools/launchpad/tool.py +0 -0
  1151. {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/README.md +0 -0
  1152. {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/__init__.py +0 -0
  1153. {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/catalog.py +0 -0
  1154. {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/child_env.py +0 -0
  1155. {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/config.py +0 -0
  1156. {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/mcp_tool.py +0 -0
  1157. {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/oauth_bridge.py +0 -0
  1158. {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/param_coercion.py +0 -0
  1159. {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/protocol.py +0 -0
  1160. {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/rate_limit.py +0 -0
  1161. {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/security.py +0 -0
  1162. {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/self_install.py +0 -0
  1163. {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/server_manager.py +0 -0
  1164. {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/subscriptions.py +0 -0
  1165. {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/user_mcp_service.py +0 -0
  1166. {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/validation_tracker.py +0 -0
  1167. {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/views.py +0 -0
  1168. {polyrob-1.0.2 → polyrob-1.0.3}/tools/oauth/__init__.py +0 -0
  1169. {polyrob-1.0.2 → polyrob-1.0.3}/tools/oauth/file_store.py +0 -0
  1170. {polyrob-1.0.2 → polyrob-1.0.3}/tools/oauth/manager.py +0 -0
  1171. {polyrob-1.0.2 → polyrob-1.0.3}/tools/oauth/provider.py +0 -0
  1172. {polyrob-1.0.2 → polyrob-1.0.3}/tools/oauth/providers/__init__.py +0 -0
  1173. {polyrob-1.0.2 → polyrob-1.0.3}/tools/oauth/providers/generic_oauth2.py +0 -0
  1174. {polyrob-1.0.2 → polyrob-1.0.3}/tools/perplexity_tool.py +0 -0
  1175. {polyrob-1.0.2 → polyrob-1.0.3}/tools/polymarket/__init__.py +0 -0
  1176. {polyrob-1.0.2 → polyrob-1.0.3}/tools/polymarket/clob_adapter.py +0 -0
  1177. {polyrob-1.0.2 → polyrob-1.0.3}/tools/polymarket/models.py +0 -0
  1178. {polyrob-1.0.2 → polyrob-1.0.3}/tools/polymarket/service.py +0 -0
  1179. {polyrob-1.0.2 → polyrob-1.0.3}/tools/publish/__init__.py +0 -0
  1180. {polyrob-1.0.2 → polyrob-1.0.3}/tools/publish/tool.py +0 -0
  1181. {polyrob-1.0.2 → polyrob-1.0.3}/tools/self_env/__init__.py +0 -0
  1182. {polyrob-1.0.2 → polyrob-1.0.3}/tools/self_env/tool.py +0 -0
  1183. {polyrob-1.0.2 → polyrob-1.0.3}/tools/shell/backend_pool.py +0 -0
  1184. {polyrob-1.0.2 → polyrob-1.0.3}/tools/shell/discipline.py +0 -0
  1185. {polyrob-1.0.2 → polyrob-1.0.3}/tools/shell/executor.py +0 -0
  1186. {polyrob-1.0.2 → polyrob-1.0.3}/tools/shell/loopback_allow.py +0 -0
  1187. {polyrob-1.0.2 → polyrob-1.0.3}/tools/shell/process_registry.py +0 -0
  1188. {polyrob-1.0.2 → polyrob-1.0.3}/tools/shell/process_tool.py +0 -0
  1189. {polyrob-1.0.2 → polyrob-1.0.3}/tools/shell/state.py +0 -0
  1190. {polyrob-1.0.2 → polyrob-1.0.3}/tools/shell/tool.py +0 -0
  1191. {polyrob-1.0.2 → polyrob-1.0.3}/tools/ship_common.py +0 -0
  1192. {polyrob-1.0.2 → polyrob-1.0.3}/tools/task_tool.py +0 -0
  1193. {polyrob-1.0.2 → polyrob-1.0.3}/tools/tool_disclosure.py +0 -0
  1194. {polyrob-1.0.2 → polyrob-1.0.3}/tools/tool_search.py +0 -0
  1195. {polyrob-1.0.2 → polyrob-1.0.3}/tools/user_directory.py +0 -0
  1196. {polyrob-1.0.2 → polyrob-1.0.3}/tools/wallet_holder.py +0 -0
  1197. {polyrob-1.0.2 → polyrob-1.0.3}/tools/web_fetch/__init__.py +0 -0
  1198. {polyrob-1.0.2 → polyrob-1.0.3}/tools/web_fetch/fetcher.py +0 -0
  1199. {polyrob-1.0.2 → polyrob-1.0.3}/tools/web_fetch/render.py +0 -0
  1200. {polyrob-1.0.2 → polyrob-1.0.3}/tools/web_fetch/tool.py +0 -0
  1201. {polyrob-1.0.2 → polyrob-1.0.3}/tools/x402/__init__.py +0 -0
  1202. {polyrob-1.0.2 → polyrob-1.0.3}/tools/x402/client.py +0 -0
  1203. {polyrob-1.0.2 → polyrob-1.0.3}/tools/x402/discovery.py +0 -0
  1204. {polyrob-1.0.2 → polyrob-1.0.3}/tools/x402/invoice_tool.py +0 -0
  1205. {polyrob-1.0.2 → polyrob-1.0.3}/tools/x402/net_guard.py +0 -0
  1206. {polyrob-1.0.2 → polyrob-1.0.3}/tools/x402/real_client.py +0 -0
  1207. {polyrob-1.0.2 → polyrob-1.0.3}/tools/x402/service.py +0 -0
  1208. {polyrob-1.0.2 → polyrob-1.0.3}/tools/x402/spend_gate.py +0 -0
  1209. {polyrob-1.0.2 → polyrob-1.0.3}/tools/x_browser/__init__.py +0 -0
  1210. {polyrob-1.0.2 → polyrob-1.0.3}/tools/x_browser/escalation.py +0 -0
  1211. {polyrob-1.0.2 → polyrob-1.0.3}/tools/x_browser/registration.py +0 -0
  1212. {polyrob-1.0.2 → polyrob-1.0.3}/tools/x_browser/session_store.py +0 -0
  1213. {polyrob-1.0.2 → polyrob-1.0.3}/tools/x_browser/signup.py +0 -0
  1214. {polyrob-1.0.2 → polyrob-1.0.3}/tools/x_chat_client.py +0 -0
  1215. {polyrob-1.0.2 → polyrob-1.0.3}/tools/x_oauth2.py +0 -0
  1216. {polyrob-1.0.2 → polyrob-1.0.3}/utils/README.md +0 -0
  1217. {polyrob-1.0.2 → polyrob-1.0.3}/utils/__init__.py +0 -0
  1218. {polyrob-1.0.2 → polyrob-1.0.3}/utils/auth_utils.py +0 -0
  1219. {polyrob-1.0.2 → polyrob-1.0.3}/utils/bounded_collections.py +0 -0
  1220. {polyrob-1.0.2 → polyrob-1.0.3}/utils/circuit_breaker.py +0 -0
  1221. {polyrob-1.0.2 → polyrob-1.0.3}/utils/gif_utils.py +0 -0
  1222. {polyrob-1.0.2 → polyrob-1.0.3}/utils/path_validator.py +0 -0
  1223. {polyrob-1.0.2 → polyrob-1.0.3}/utils/rate_limit_manager.py +0 -0
  1224. {polyrob-1.0.2 → polyrob-1.0.3}/utils/result_size.py +0 -0
  1225. {polyrob-1.0.2 → polyrob-1.0.3}/utils/time_utils.py +0 -0
  1226. {polyrob-1.0.2 → polyrob-1.0.3}/utils/user_utils.py +0 -0
  1227. {polyrob-1.0.2 → polyrob-1.0.3}/webview/__init__.py +0 -0
  1228. {polyrob-1.0.2 → polyrob-1.0.3}/webview/activity.py +0 -0
  1229. {polyrob-1.0.2 → polyrob-1.0.3}/webview/apps_routes.py +0 -0
  1230. {polyrob-1.0.2 → polyrob-1.0.3}/webview/artifacts_api.py +0 -0
  1231. {polyrob-1.0.2 → polyrob-1.0.3}/webview/audit.py +0 -0
  1232. {polyrob-1.0.2 → polyrob-1.0.3}/webview/chat_open.py +0 -0
  1233. {polyrob-1.0.2 → polyrob-1.0.3}/webview/config_view.py +0 -0
  1234. {polyrob-1.0.2 → polyrob-1.0.3}/webview/console_commands.py +0 -0
  1235. {polyrob-1.0.2 → polyrob-1.0.3}/webview/copy/__init__.py +0 -0
  1236. {polyrob-1.0.2 → polyrob-1.0.3}/webview/copy/en.py +0 -0
  1237. {polyrob-1.0.2 → polyrob-1.0.3}/webview/cors.py +0 -0
  1238. {polyrob-1.0.2 → polyrob-1.0.3}/webview/dev/package-lock.json +0 -0
  1239. {polyrob-1.0.2 → polyrob-1.0.3}/webview/dev/package.json +0 -0
  1240. {polyrob-1.0.2 → polyrob-1.0.3}/webview/emit_api.py +0 -0
  1241. {polyrob-1.0.2 → polyrob-1.0.3}/webview/inbox.py +0 -0
  1242. {polyrob-1.0.2 → polyrob-1.0.3}/webview/knowledge.py +0 -0
  1243. {polyrob-1.0.2 → polyrob-1.0.3}/webview/owner_auth.py +0 -0
  1244. {polyrob-1.0.2 → polyrob-1.0.3}/webview/owner_login_flow.py +0 -0
  1245. {polyrob-1.0.2 → polyrob-1.0.3}/webview/pages.py +0 -0
  1246. {polyrob-1.0.2 → polyrob-1.0.3}/webview/pages_new.py +0 -0
  1247. {polyrob-1.0.2 → polyrob-1.0.3}/webview/posture_guard.py +0 -0
  1248. {polyrob-1.0.2 → polyrob-1.0.3}/webview/posture_routes.py +0 -0
  1249. {polyrob-1.0.2 → polyrob-1.0.3}/webview/repair_sessions.py +0 -0
  1250. {polyrob-1.0.2 → polyrob-1.0.3}/webview/serve_tokens.py +0 -0
  1251. {polyrob-1.0.2 → polyrob-1.0.3}/webview/server.py +0 -0
  1252. {polyrob-1.0.2 → polyrob-1.0.3}/webview/server_launcher.py +0 -0
  1253. {polyrob-1.0.2 → polyrob-1.0.3}/webview/session_access.py +0 -0
  1254. {polyrob-1.0.2 → polyrob-1.0.3}/webview/session_catalog.py +0 -0
  1255. {polyrob-1.0.2 → polyrob-1.0.3}/webview/session_identity.py +0 -0
  1256. {polyrob-1.0.2 → polyrob-1.0.3}/webview/socket_auth.py +0 -0
  1257. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/agent.js +0 -0
  1258. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/app.css +0 -0
  1259. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/chat-open.js +0 -0
  1260. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/chats.js +0 -0
  1261. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/http.js +0 -0
  1262. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/inbox.js +0 -0
  1263. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/live.js +0 -0
  1264. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/money.js +0 -0
  1265. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/palette.js +0 -0
  1266. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/settings-control.js +0 -0
  1267. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/socket-client.js +0 -0
  1268. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/transcript.js +0 -0
  1269. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/verbs.en.json +0 -0
  1270. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/work-apps.js +0 -0
  1271. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/work-create.js +0 -0
  1272. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/work-now.js +0 -0
  1273. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/worklog.js +0 -0
  1274. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/workpane.js +0 -0
  1275. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/activity.css +0 -0
  1276. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/chat.css +0 -0
  1277. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/components.css +0 -0
  1278. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/config-panel.css +0 -0
  1279. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/fonts.css +0 -0
  1280. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/pages/admin.css +0 -0
  1281. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/pages/profile.css +0 -0
  1282. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/pages/settings.css +0 -0
  1283. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/pages/signin.css +0 -0
  1284. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/style.css +0 -0
  1285. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/variables.css +0 -0
  1286. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/webgate.css +0 -0
  1287. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/workspace-fullwidth-fix.css +0 -0
  1288. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/fonts/JetBrainsMono-Medium.woff2 +0 -0
  1289. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/fonts/JetBrainsMono-Regular.woff2 +0 -0
  1290. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/fonts/LICENSE-JetBrainsMono +0 -0
  1291. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/fonts/LICENSE-VT323 +0 -0
  1292. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/fonts/VT323-Regular.woff2 +0 -0
  1293. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/img/favicon.ico +0 -0
  1294. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/admin/activity.js +0 -0
  1295. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/admin/dashboard.js +0 -0
  1296. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/admin/user_detail.js +0 -0
  1297. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/admin/users.js +0 -0
  1298. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/admin/utils.js +0 -0
  1299. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/constants.js +0 -0
  1300. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/error-handler.js +0 -0
  1301. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/error-page.js +0 -0
  1302. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/ethers.min.js +0 -0
  1303. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/event-filter.js +0 -0
  1304. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/event-store.js +0 -0
  1305. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/file-attachments.js +0 -0
  1306. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/index.js +0 -0
  1307. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/pending.js +0 -0
  1308. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/performance-utils.js +0 -0
  1309. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/profile.js +0 -0
  1310. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/screenshot.js +0 -0
  1311. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/sidebar-data.js +0 -0
  1312. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/signin.js +0 -0
  1313. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/socket.io.min.js +0 -0
  1314. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/socketio-loader.js +0 -0
  1315. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/stats.js +0 -0
  1316. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/status-uptime.js +0 -0
  1317. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/theme.js +0 -0
  1318. {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/ui-utils.js +0 -0
  1319. {polyrob-1.0.2 → polyrob-1.0.3}/webview/stats_service.py +0 -0
  1320. {polyrob-1.0.2 → polyrob-1.0.3}/webview/template_globals.py +0 -0
  1321. {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/__init__.py +0 -0
  1322. {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/admin/activity.html +0 -0
  1323. {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/admin/dashboard.html +0 -0
  1324. {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/admin/user_detail.html +0 -0
  1325. {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/admin/users.html +0 -0
  1326. {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/agent.html +0 -0
  1327. {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/chat.html +0 -0
  1328. {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/error.html +0 -0
  1329. {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/inbox.html +0 -0
  1330. {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/layout.html +0 -0
  1331. {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/money.html +0 -0
  1332. {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/owner_login.html +0 -0
  1333. {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/pending.html +0 -0
  1334. {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/profile.html +0 -0
  1335. {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/shell.html +0 -0
  1336. {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/signin.html +0 -0
  1337. {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/status.html +0 -0
  1338. {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/work.html +0 -0
  1339. {polyrob-1.0.2 → polyrob-1.0.3}/webview/theme.py +0 -0
  1340. {polyrob-1.0.2 → polyrob-1.0.3}/webview/wallet_reader.py +0 -0
  1341. {polyrob-1.0.2 → polyrob-1.0.3}/webview/webgate.py +0 -0
  1342. {polyrob-1.0.2 → polyrob-1.0.3}/webview/worklog_api.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: polyrob
3
- Version: 1.0.2
3
+ Version: 1.0.3
4
4
  Summary: POLYROB — autonomous AI agent framework
5
5
  Author: The POLYROB Authors
6
6
  License-Expression: MIT
@@ -16,7 +16,7 @@ License-File: LICENSE
16
16
  Requires-Dist: pydantic>=2.0.0
17
17
  Requires-Dist: pydantic-settings>=2.0.0
18
18
  Requires-Dist: python-dotenv>=1.0.0
19
- Requires-Dist: openai>=1.0.0
19
+ Requires-Dist: openai>=1.26.0
20
20
  Requires-Dist: anthropic>=0.20.0
21
21
  Requires-Dist: google-generativeai>=0.8.0
22
22
  Requires-Dist: tiktoken>=0.7.0
@@ -47,6 +47,8 @@ Requires-Dist: httplib2>=0.32.0
47
47
  Requires-Dist: pyasn1>=0.6.4
48
48
  Requires-Dist: anysite-cli>=0.3
49
49
  Requires-Dist: pyyaml>=6
50
+ Requires-Dist: packaging>=23.2
51
+ Requires-Dist: h2>=4.4.1
50
52
  Provides-Extra: server
51
53
  Requires-Dist: fastapi==0.141.1; extra == "server"
52
54
  Requires-Dist: starlette==1.6.0; extra == "server"
@@ -670,8 +670,11 @@ Then emit your function calls."""
670
670
  converted_input_messages = self.message_manager.merge_successive_messages(converted_input_messages, HumanMessage)
671
671
  converted_input_messages = self.message_manager.merge_successive_messages(converted_input_messages, AIMessage)
672
672
 
673
- # Check token safety using MessageManager's API (SINGLE SOURCE OF TRUTH)
674
- safety_check = self.message_manager.check_token_safety(raise_on_overflow=True)
673
+ # Check token safety using MessageManager's API (SINGLE SOURCE OF TRUTH).
674
+ # Overflow first gets ONE emergency prune (the recalibration above can
675
+ # reveal an overflow the step-boundary gate never saw); raises if still over.
676
+ from agents.task.agent.core.token_budget import ensure_token_budget
677
+ safety_check = ensure_token_budget(self.message_manager, self.logger)
675
678
  self.logger.debug(
676
679
  f"Token usage: {safety_check['usage_percent']:.1f}% "
677
680
  f"({safety_check['current_tokens']}/{safety_check['max_limit']} tokens)"
@@ -78,6 +78,7 @@ from agents.task.agent.core.step import StepMixin
78
78
  from agents.task.agent.core.history_io import HistoryIOMixin
79
79
  from agents.task.agent.core.logging_io import LoggingIOMixin
80
80
  from agents.task.agent.core.safety_lifecycle import SafetyLifecycleMixin
81
+ from core.wallet.infra_error import is_infra_broadcast_failure
81
82
  from agents.task.agent.core.user_ingress import UserIngressMixin
82
83
  from agents.task.agent.core.llm_provisioning import LLMProvisioningMixin
83
84
  from agents.task.agent.core.model_introspection import ModelIntrospectionMixin
@@ -474,6 +475,30 @@ class RunLoopMixin:
474
475
  self.message_manager.inject_user_guidance(user_messages, session_context=session_context)
475
476
  self.logger.info(f"✅ Injected {len(user_messages)} messages into conversation")
476
477
 
478
+ # A money verb that failed for a HOST reason (permission denied,
479
+ # read-only fs, unopenable db — "broadcast failed: … nothing was
480
+ # sent") cannot succeed later in this run and is an ops fact, not a
481
+ # puzzle: 2026-09-16/17 the EXIT rails spent 8 steps on `ls -la`/
482
+ # `run_code` forensics after exactly this, and the owner learned of
483
+ # the outage 5 h late with the wrong cause. End the run with the
484
+ # verbatim line so the runner reports one failed run, right cause.
485
+ _infra = next((r.error for r in (self._last_result or [])
486
+ if getattr(r, "error", None)
487
+ and is_infra_broadcast_failure(r.error)), None)
488
+ if _infra:
489
+ self.logger.error(
490
+ f"MONEY VERB INFRA FAILURE — ending the run, nothing was sent: {_infra[:400]}")
491
+ try:
492
+ from core.event_log import emit as _emit_event
493
+ _emit_event("money_verb_infra_failure", source="run_loop",
494
+ user_id=str(getattr(self, "user_id", "") or ""),
495
+ session_id=str(self.session_id),
496
+ attrs={"error": _infra[:400]})
497
+ except Exception:
498
+ pass
499
+ self.state.stopped = True
500
+ break
501
+
477
502
  # R1: track consecutive reply-only steps. A reply-only step is one
478
503
  # whose every result is a non-blocking user-facing reply (no tool
479
504
  # ran); anything else (productive tool, planning turn, error, done)
@@ -486,6 +511,18 @@ class RunLoopMixin:
486
511
 
487
512
  # Check if the agent is done
488
513
  if results and any(result.is_done for result in results):
514
+ # A message that arrived DURING the finishing step was just drained
515
+ # and injected above — the HITL queue is now empty, so the harness's
516
+ # "pending input" resume would never fire and the message would sit
517
+ # unanswered at the history tail (2026-09-18 08:12Z: the owner's
518
+ # "Ok I meant 0.04…" correction landed on Rob's done() step and got
519
+ # no reply). It earns the next step instead of dying with done().
520
+ if user_messages:
521
+ self.logger.info(
522
+ f"{len(user_messages)} message(s) arrived during the finishing "
523
+ "step — continuing the run so they get a turn")
524
+ continue
525
+
489
526
  # I-3 / H3 (dedup decision D1): the agent can edit code and call
490
527
  # done() without ever re-running tests. Derive the signal from the
491
528
  # EXISTING action ledger (agents/task/runtime/edit_verify.py, which
@@ -15,6 +15,13 @@ from agents.task.agent.views import ActionResult
15
15
  from modules.llm.messages import HumanMessage
16
16
  from agents.task.constants import MAX_MCP_PER_STEP
17
17
 
18
+ # Hard ceiling on tool calls executed in ONE step; the rest are deferred to the next
19
+ # step with a notice. ONE constant — the system prompt (`prompts.py`) renders this same
20
+ # number, so the model is never told a bigger batch than the executor will run
21
+ # (2026-09-19: the prompt said 1-10, the executor ran 5, and the 6th call vanished
22
+ # from the agent's point of view).
23
+ MAX_TOOL_CALLS_PER_STEP = 5
24
+
18
25
  #: OR-4: how many consecutive empty-action steps before the strong "thinking loop"
19
26
  #: intervention fires. Default 2 (one step sooner than the legacy 3) so a model
20
27
  #: that answers in prose without a tool call — Grok/GPT-5 on content-gen — is
@@ -371,7 +378,6 @@ class StepExecutionMixin:
371
378
  # a whole extra LLM round trip (~60k input tokens) to re-request work the
372
379
  # model had already decided on. 5 covers the common read-only fan-out while
373
380
  # keeping a hard ceiling on single-step context growth.
374
- MAX_TOOL_CALLS_PER_STEP = 5 # Allow up to 5 parallel calls
375
381
  actions_to_execute = model_output.action
376
382
  deferred_actions = []
377
383
 
@@ -387,11 +393,12 @@ class StepExecutionMixin:
387
393
  deferred_names = [getattr(a, 'name', str(a)[:30]) for a in deferred_actions]
388
394
  self.message_manager.push_ephemeral_message(
389
395
  HumanMessage(content=(
390
- f"⚠️ **Tool Call Limit Applied**\n\n"
391
- f"{len(deferred_actions)} tool calls were deferred to prevent context overflow:\n"
396
+ f"⚠️ **Tool Call Limit Applied — {len(deferred_actions)} call(s) did NOT run**\n\n"
397
+ f"A step executes at most {MAX_TOOL_CALLS_PER_STEP} tool calls; these were NOT "
398
+ f"executed and have NO result:\n"
392
399
  f"- {', '.join(deferred_names[:5])}"
393
400
  f"{'...' if len(deferred_names) > 5 else ''}\n\n"
394
- f"Process these in your next step, 1-{MAX_TOOL_CALLS_PER_STEP} at a time."
401
+ f"Call them again now, 1-{MAX_TOOL_CALLS_PER_STEP} at a time — do not assume they ran."
395
402
  ))
396
403
  )
397
404
 
@@ -0,0 +1,29 @@
1
+ """Pre-LLM token budget: prune once before the overflow kills the run.
2
+
3
+ The step-boundary compaction gate (``core/step.py``) reads the running
4
+ estimate; token counts are RECALIBRATED just before the LLM call, and a step
5
+ that appended several large tool results can cross the safe line only after
6
+ that recalibration — the gate never saw it. Raising there ends the run with
7
+ no fallback provider (prod 2026-09-18 14:34Z, ``966d3539``). The emergency
8
+ prune is the non-LLM safety net designed for exactly this; give it one turn
9
+ before raising, and raise only if the history is still over the line.
10
+ """
11
+ from __future__ import annotations
12
+
13
+ import logging
14
+ from typing import Any, Dict
15
+
16
+
17
+ def ensure_token_budget(message_manager: Any, logger: logging.Logger) -> Dict[str, Any]:
18
+ """Return the safety-check dict; prune once on overflow; raise if still unsafe."""
19
+ check = message_manager.check_token_safety(raise_on_overflow=False)
20
+ if check.get("safe", True):
21
+ return check
22
+ logger.warning(
23
+ "🚨 Pre-call token overflow (%s/%s, %.1f%%) — emergency prune before raising",
24
+ check.get("current_tokens"), check.get("max_limit"), check.get("usage_percent", 0.0))
25
+ try:
26
+ message_manager.emergency_context_prune()
27
+ except Exception:
28
+ logger.warning("emergency prune failed; re-checking budget", exc_info=True)
29
+ return message_manager.check_token_safety(raise_on_overflow=True)
@@ -22,8 +22,17 @@ from agents.task.agent.message_manager.tool_call_builder import (
22
22
  logger = logging.getLogger(__name__)
23
23
 
24
24
 
25
+ # A tool result shorter than this is never replaced by a back-reference: the
26
+ # pointer text is ~80 chars, so there is nothing to save, and a short result is
27
+ # usually a CONFIRMATION ("Edited kb-root-position-ledger.md") the agent needs
28
+ # verbatim — prod 2026-09-19 15:35Z: three identical `coding_str_replace`
29
+ # confirmations in one step came back as "[duplicate of …]" and the agent
30
+ # reported "3 that returned the dedup artifact" instead of three landed edits.
31
+ DEDUP_MIN_CHARS = 160
32
+
33
+
25
34
  def dedup_tool_results(messages: List[BaseMessage]) -> List[BaseMessage]:
26
- """Replace byte-identical repeated tool outputs with a back-reference (B2).
35
+ """Replace byte-identical repeated LONG tool outputs with a back-reference (B2).
27
36
 
28
37
  Reference does this (MD5-keyed) in its compaction pre-pass — cheap token savings on
29
38
  retry/polling loops where the same tool returns the same payload repeatedly. The
@@ -38,7 +47,8 @@ def dedup_tool_results(messages: List[BaseMessage]) -> List[BaseMessage]:
38
47
  seen: Dict[str, int] = {}
39
48
  out: List[BaseMessage] = []
40
49
  for msg in messages:
41
- if isinstance(msg, ToolMessage) and isinstance(msg.content, str) and msg.content:
50
+ if (isinstance(msg, ToolMessage) and isinstance(msg.content, str)
51
+ and len(msg.content) >= DEDUP_MIN_CHARS):
42
52
  digest = hashlib.md5(msg.content.encode("utf-8", "ignore")).hexdigest()[:12]
43
53
  if digest in seen:
44
54
  ref = ToolMessage(
@@ -75,7 +75,7 @@ class SystemPrompt:
75
75
  self.verbosity = str(verbosity).strip().lower() if verbosity else "normal"
76
76
  self.persona_block = (persona_block or "").strip()
77
77
  self.action_descriptions = action_description
78
- self.max_actions_per_step = max_actions_per_step # Flexible, not enforced
78
+ self.max_actions_per_step = max_actions_per_step # config ceiling; the executor cap is lower
79
79
  self.use_native_tools = use_native_tools # Whether using native tool calling
80
80
  self.model_name = model_name.lower() if model_name else ""
81
81
  self.provider = provider.lower() if provider else ""
@@ -683,10 +683,10 @@ Memory Guidelines:
683
683
  - Include what you LEARNED (insights, discoveries)
684
684
  - Track progress if quantitative goal (e.g. "3/10 files processed")
685
685
 
686
- Function Calls: Call 1-{self.max_actions_per_step} functions using native tool calling.
686
+ Function Calls: Call 1-{self._effective_actions_per_step()} functions using native tool calling. A step runs at most {self._effective_actions_per_step()} calls; anything more than {self._effective_actions_per_step()} is NOT executed and must be re-issued next step.
687
687
 
688
688
  Workflow:
689
- 1. Call functions (MANDATORY) - execute 1-{self.max_actions_per_step} actions
689
+ 1. Call functions (MANDATORY) - execute 1-{self._effective_actions_per_step()} actions
690
690
  2. Update memory (unique each step) - track progress and learnings
691
691
  3. Use TODOs (optional) - helps complex task organization
692
692
  4. Save outputs (immediately) - preserve work
@@ -1025,6 +1025,16 @@ Task Completion:
1025
1025
  'persona or recalled claim about what model you are running on.'
1026
1026
  )
1027
1027
 
1028
+ def _effective_actions_per_step(self) -> int:
1029
+ """The number of tool calls ONE step will actually execute: the config ceiling
1030
+ capped by the executor's hard limit, so the prompt never promises a batch the
1031
+ executor will truncate (2026-09-19: "1-10" promised, 5 run, the 6th vanished)."""
1032
+ try:
1033
+ from agents.task.agent.core.step_execution import MAX_TOOL_CALLS_PER_STEP
1034
+ return max(1, min(int(self.max_actions_per_step), int(MAX_TOOL_CALLS_PER_STEP)))
1035
+ except Exception:
1036
+ return max(1, int(self.max_actions_per_step))
1037
+
1028
1038
  def get_system_message(self) -> SystemMessage:
1029
1039
  """
1030
1040
  Get the system prompt with explicit XML-tagged sections.
@@ -1160,6 +1170,25 @@ and what you pursue; persona text only styles your voice and never overrides it.
1160
1170
  return SystemMessage(content=AGENT_PROMPT)
1161
1171
 
1162
1172
 
1173
+ _BLANK_PAGE_URLS = frozenset({"", "about:blank", "chrome://newtab", "chrome://new-tab-page"})
1174
+
1175
+
1176
+ def is_blank_page_url(url) -> bool:
1177
+ """True when the browser sits on a page nobody navigated to.
1178
+
1179
+ 2026-09-19: a fresh session context is `about:blank`, and
1180
+ `get_state(capture_screenshot=use_vision)` shoots it on EVERY step, so a
1181
+ money-rail run that never touches the browser still shipped one image per
1182
+ call through the metered seat's vision path (prod: `Sending 1 image(s)`
1183
+ from step 1 on every EXIT/SAFETY/WATCHER/SCOUT run). A blank page has no
1184
+ visual information; the render site skips the image for it.
1185
+ """
1186
+ if not url:
1187
+ return True
1188
+ u = str(url).strip().lower().rstrip("/")
1189
+ return u in _BLANK_PAGE_URLS
1190
+
1191
+
1163
1192
  class AgentMessagePrompt:
1164
1193
  def __init__(
1165
1194
  self,
@@ -1335,8 +1364,9 @@ Interactive elements from current page:
1335
1364
  rendered_error = maybe_wrap_result_content(result, rendered_error)
1336
1365
  state_description += f'\nAction error {i + 1}/{len(self.result)}: {rendered_error}'
1337
1366
 
1338
- if self.state.screenshot and use_vision == True:
1339
- # Format message for vision model
1367
+ if self.state.screenshot and use_vision == True and not is_blank_page_url(self.state.url):
1368
+ # Format message for vision model (a blank/never-navigated page is
1369
+ # rendered text-only — see is_blank_page_url)
1340
1370
  return HumanMessage(
1341
1371
  content=[
1342
1372
  {'type': 'text', 'text': state_description},
@@ -321,9 +321,13 @@ class SkillWriterMixin:
321
321
  return SkillWriteResult(skill_id, False, errors=[f"skill '{skill_id}' not found for user"])
322
322
  # A forged (non-user) turn may refine its OWN pending draft but must never
323
323
  # mutate an already-ACTIVE skill (that's user-controlled instruction content).
324
- if created_by in _NON_USER_AUTHORS and not self._is_pending_path(skill_file):
325
- return SkillWriteResult(skill_id, False,
326
- errors=["a background turn cannot patch an active skill"])
324
+ # 056 WS6 (2026-09-19): instead of refusing, the SAME call lands a pending
325
+ # REVISION of the active skill under `.pending/<id>/` for the owner's
326
+ # `promote` — the active file is still never touched by a forged turn
327
+ # (SK-F10 holds; goal 367150fd7a0e had to be hand-applied by ops before).
328
+ propose_only = created_by in _NON_USER_AUTHORS and not self._is_pending_path(skill_file)
329
+ if propose_only:
330
+ pending = True
327
331
  try:
328
332
  current = self._read_skill_text(skill_file)
329
333
  except Exception as e:
@@ -345,7 +349,7 @@ class SkillWriterMixin:
345
349
  # Re-run the full validate+scan gate on the NEW body.
346
350
  return self.create_skill(skill_id, updated, user_id=uid, created_by=created_by,
347
351
  pending=pending if pending is not None else self._is_pending_path(skill_file),
348
- expected_revision=actual_revision)
352
+ expected_revision=None if propose_only else actual_revision)
349
353
 
350
354
  def delete_skill(self, skill_id: str, *, user_id: str,
351
355
  absorbed_into: Optional[str] = None,
@@ -519,6 +519,27 @@ def autonomous_mode_tools() -> tuple:
519
519
  return AUTONOMOUS_MODE_TOOLS
520
520
 
521
521
 
522
+ def effective_autonomous_tools() -> tuple:
523
+ """056 WS4: `autonomous_mode_tools()` minus the tools this deploy cannot
524
+ actually serve right now — today `email` when the transport is SMTP and the
525
+ credentials were rejected within the backoff window (`tools.email_tool`
526
+ remembers a 535 process-wide). The CONSTANT is untouched; only the set the
527
+ goal/cron dispatchers REQUEST moves, so a goal record stops carrying a false
528
+ `[tool gap] email …` line (330 failed loads in 48 h, 2026-09-17→19). An
529
+ AgentMail transport is unaffected by an SMTP rejection. Fail-open: any probe
530
+ error keeps the tool in."""
531
+ tools = tuple(autonomous_mode_tools())
532
+ try:
533
+ from core.config_policy.capability_toggles import email_provider
534
+ if "email" in tools and email_provider() == "smtp":
535
+ from core.credential_verdicts import rejected_within
536
+ if rejected_within("smtp", 900.0): # = tools.email_tool.SMTP_AUTH_BACKOFF_SEC
537
+ tools = tuple(t for t in tools if t != "email")
538
+ except Exception:
539
+ pass
540
+ return tools
541
+
542
+
522
543
  # MCP Tool Throttling (single source of truth)
523
544
  # MCP actions (scraping, searches, APIs) are expensive and execute SEQUENTIALLY
524
545
  # Each MCP action takes 30-180 seconds. Limiting prevents timeout cascades.
@@ -13,6 +13,7 @@ from __future__ import annotations
13
13
 
14
14
  import asyncio
15
15
  import logging
16
+ import json
16
17
  import os
17
18
  from pathlib import Path
18
19
  from typing import Any, List, Optional
@@ -159,11 +160,12 @@ def default_goal_tools() -> list:
159
160
  (self-maintenance tier). Under effective AUTONOMY_MODE=autonomous the base
160
161
  switches to the full AUTONOMOUS_MODE_TOOLS grant (never money/host — those
161
162
  still ride compute posture, unaffected by mode)."""
162
- from agents.task.constants import autonomous_mode_tools, full_autonomy_enabled
163
+ from agents.task.constants import effective_autonomous_tools, full_autonomy_enabled
163
164
  from agents.task.tool_defaults import with_compute_tools
164
- # `autonomous_mode_tools()` folds in the defi rail when DEFI_AGENT_AUTONOMY is
165
- # armed; unarmed it IS the bare constant, so the default posture is unchanged.
166
- tools = list(autonomous_mode_tools()) if full_autonomy_enabled() else list(_DEFAULT_GOAL_TOOLS)
165
+ # `effective_autonomous_tools()` (056 WS4) = `autonomous_mode_tools()` — which
166
+ # folds in the defi rail when DEFI_AGENT_AUTONOMY is armed — minus tools this
167
+ # deploy cannot serve right now (email on rejected SMTP credentials).
168
+ tools = list(effective_autonomous_tools()) if full_autonomy_enabled() else list(_DEFAULT_GOAL_TOOLS)
167
169
  with_compute_tools(tools) # SSOT for the posture>=1 additions (014 A2)
168
170
  if _hf_deploy_goal_tool_enabled() and "hf_deploy" not in tools:
169
171
  tools.append("hf_deploy")
@@ -187,6 +189,64 @@ def child_inheritable_tools() -> frozenset:
187
189
  return CHILD_INHERITABLE_TOOLS
188
190
 
189
191
 
192
+ def imminent_cron_job(data_dir: str, now, headroom_sec: int) -> Optional[str]:
193
+ """Name the cron job due within ``headroom_sec`` (overdue included), else None.
194
+
195
+ Pure read of ``<data_dir>/cron.db``; ``headroom_sec <= 0`` or an absent /
196
+ unreadable store answers None without touching disk (fail-open: dispatch).
197
+ A goal run marks the shared project-root workspace busy and cron ticks skip
198
+ until it ends, so the dispatcher uses this to let a due rail go FIRST."""
199
+ if headroom_sec <= 0:
200
+ return None
201
+ from datetime import timedelta
202
+ db_path = os.path.join(data_dir, "cron.db")
203
+ if not os.path.exists(db_path):
204
+ return None
205
+ # Read-only over core.sqlite_util (the layering ratchet forbids agents -> cron);
206
+ # the predicate mirrors CronJobStore.due() (enabled, scheduled, next_run_at set)
207
+ # plus a job mid-run — it holds the workspace now, and its next_run_at is still
208
+ # the past due time until it finishes.
209
+ try:
210
+ from core.sqlite_util import execute_retry
211
+ rows = execute_retry(
212
+ db_path,
213
+ "SELECT id, task, next_run_at, status, payload FROM cron_jobs WHERE enabled=1 "
214
+ "AND status IN ('scheduled','running') AND next_run_at IS NOT NULL "
215
+ "AND next_run_at <= ? "
216
+ "ORDER BY next_run_at",
217
+ ((now + timedelta(seconds=headroom_sec)).isoformat(),), fetch="all")
218
+ except Exception:
219
+ logger.debug("imminent-cron probe failed; dispatching", exc_info=True)
220
+ return None
221
+ # 056 D1 follow-up (2026-09-19): a SCHEDULED money-class job pre-empts a running
222
+ # goal at the step boundary (`yield_for_rail`), so with yield on it need not hold
223
+ # the board back — after the D4 stagger the four rails' headroom windows covered
224
+ # every minute of an even hour and two goals sat `ready` for 40 min. A job mid-run
225
+ # holds the workspace NOW (nothing to pre-empt) and an ops-class job cannot
226
+ # pre-empt at all, so both still defer.
227
+ try:
228
+ from core.config_policy.goal_flags import GoalFlagsMixin
229
+ _yield_on = bool(GoalFlagsMixin.goal_yield_for_money_rail())
230
+ except Exception:
231
+ _yield_on = False
232
+ for job_id, task, next_run_at, status, payload in rows or []:
233
+ if _yield_on and status == "scheduled" and _payload_is_money(payload):
234
+ continue
235
+ return f"{str(job_id)[:12]} {(task or '')[:40]!r} due {next_run_at}"
236
+ return None
237
+
238
+
239
+ def _payload_is_money(payload) -> bool:
240
+ """Mirror of ``cron.jobs.is_money_job`` over the raw stored payload (the
241
+ layering ratchet forbids agents -> cron)."""
242
+ try:
243
+ if isinstance(payload, (str, bytes)):
244
+ payload = json.loads(payload or "{}")
245
+ return str((payload or {}).get("priority") or "").lower() == "money"
246
+ except Exception:
247
+ return False
248
+
249
+
190
250
  def effective_goal_max_concurrent(user_id: Optional[str], home_dir) -> int:
191
251
  """Owner's in-flight goal cap: pref (min-merged, spec ``goals.max_concurrent``)
192
252
  over the ``GOAL_MAX_CONCURRENT`` env default. No pref file present =>
@@ -401,6 +461,7 @@ class GoalDispatcher:
401
461
  and UNCONDITIONALLY — before the ``GOALS_ENABLED`` gate (AU-F4.3) — so a
402
462
  crashed ``running`` row isn't stuck forever if the flag was flipped off.
403
463
  """
464
+ from datetime import datetime
404
465
  from agents.task.constants import AutonomyConfig
405
466
 
406
467
  # AU-F4.3: reclaim expired claims BEFORE the enabled-gate so a crashed
@@ -538,6 +599,18 @@ class GoalDispatcher:
538
599
  if slots == 0:
539
600
  return 0
540
601
  ready = self._ready_for_dispatch(slots)
602
+ # A due cron rail goes first: on the shared workspace a goal run would
603
+ # mark the process busy and hold that rail for its whole runtime.
604
+ # Checked only when something is actually ready (an empty board must
605
+ # not read cron.db and log a deferral every tick).
606
+ if ready:
607
+ _imminent = imminent_cron_job(
608
+ os.path.dirname(self.board.db_path), datetime.now(),
609
+ AutonomyConfig.goal_dispatch_cron_headroom_sec())
610
+ if _imminent:
611
+ logger.info("goal dispatch deferred (%d ready): cron job %s",
612
+ len(ready), _imminent)
613
+ return 0
541
614
  ttl = AutonomyConfig.goal_claim_ttl_sec()
542
615
  worker = self._worker
543
616
  dispatched = 0
@@ -621,6 +694,27 @@ class GoalDispatcher:
621
694
  logger.warning("hold_inflight: board hold failed", exc_info=True)
622
695
  return []
623
696
 
697
+ async def yield_for_rail(self, job) -> List[str]:
698
+ """056 WS5 (D1): a due MONEY cron job pre-empts this process's running goal
699
+ runs — `hold_inflight` (cancel at the step boundary, rows back to `ready`,
700
+ no failure increment) plus a `resume_note` so the goal knows why it
701
+ restarts and where its own artefacts are. Returns the held goal ids."""
702
+ jid = str(getattr(job, "id", "") or "")
703
+ jtask = str(getattr(job, "task", "") or "")[:40]
704
+ held = await self.hold_inflight(f"money rail {jid} ({jtask}) due")
705
+ from datetime import datetime as _dt
706
+ stamp = _dt.utcnow().strftime("%H:%MZ")
707
+ for gid in held:
708
+ try:
709
+ self.board.merge_payload(gid, {
710
+ "resume_note": (f"Yielded at {stamp} because the money rail {jtask} "
711
+ f"({jid[:8]}) came due; this is a RESTART — read what "
712
+ f"you already wrote to disk before redoing anything.")})
713
+ self.board._event(gid, "yielded", {"job_id": jid, "task": jtask})
714
+ except Exception:
715
+ logger.debug("yield note failed for %s", gid, exc_info=True)
716
+ return held
717
+
624
718
  async def _run_goal(self, goal: Goal) -> None:
625
719
  """Run one claimed goal on the task-agent core, then record + self-wake."""
626
720
  session_id = None
@@ -741,7 +835,7 @@ class GoalDispatcher:
741
835
  "provider": provider,
742
836
  "model": model,
743
837
  "tools": self._resolve_tools(goal),
744
- "max_steps": payload.get("max_steps", 20),
838
+ "max_steps": payload.get("max_steps", AutonomyConfig.goal_default_max_steps()),
745
839
  "temperature": 0.0,
746
840
  "goal_id": goal.id,
747
841
  }
@@ -1356,6 +1450,28 @@ class GoalDispatcher:
1356
1450
  except Exception:
1357
1451
  logger.debug("blocked-goal ask creation skipped", exc_info=True)
1358
1452
 
1453
+ @staticmethod
1454
+ def _wake_text(goal: Goal, final: str, verified: str = "verified") -> str:
1455
+ """056 WS7: what a completed goal says when it re-enters the session that
1456
+ CREATED it. Default = ONE line (`goal <id8> done — <first line>`, ≤280
1457
+ chars) — the origin session already has the artefacts on disk and a full
1458
+ result re-entering it cost the owner a 5-step "verification" turn
1459
+ (2026-09-19 03:00Z). `payload.report_back=true` (goal_create) keeps the
1460
+ full completion text for goals whose whole point is the report."""
1461
+ payload = goal.payload or {}
1462
+ if payload.get("report_back"):
1463
+ head = (f"✅ Background goal '{goal.title}' completed." if verified == "verified"
1464
+ else f"Background goal '{goal.title}' finished — done (unverified).")
1465
+ return f"{head}\nResult:\n{str(final)[:1500]}"
1466
+ first = ""
1467
+ for line in str(final or "").splitlines():
1468
+ if line.strip():
1469
+ first = line.strip()
1470
+ break
1471
+ state = "done" if verified == "verified" else "done (unverified)"
1472
+ text = f"goal {str(goal.id)[:8]} {state} — {first}"
1473
+ return text if len(text) <= 280 else text[:277] + "…"
1474
+
1359
1475
  def _completion_text(self, goal: Goal, final: str, verified: str = "verified",
1360
1476
  deliverable_lines: Optional[list] = None,
1361
1477
  session_link: Optional[str] = None) -> str:
@@ -1484,7 +1600,7 @@ class GoalDispatcher:
1484
1600
  if deliver is None:
1485
1601
  return
1486
1602
  delivered = await deliver(origin, goal.user_id,
1487
- self._completion_text(goal, final),
1603
+ self._wake_text(goal, final, "verified"),
1488
1604
  metadata={"source": "goal", "goal_id": goal.id,
1489
1605
  "run_session_id": session_id})
1490
1606
  if delivered:
@@ -56,17 +56,59 @@ class TaskAgentLifecycleMixin:
56
56
  if not getattr(self, "_owns_workspace_gc", True):
57
57
  logger.debug("workspace GC not owned by this process — loop not running")
58
58
  return
59
+ # 056 WS8: the first pass runs 10 min after start, then daily. With
60
+ # ~28 restarts/day on prod the old "sleep 24 h first" never fired once,
61
+ # and 1,642 stale session dirs (4.0 GB) accumulated.
62
+ delay = 600
59
63
  while True:
60
64
  try:
61
- # Run cleanup daily
62
- await asyncio.sleep(86400) # 24 hours
65
+ await asyncio.sleep(delay)
66
+ delay = 86400
63
67
 
64
68
  if self.session_manager:
65
69
  cleaned = self.session_manager.cleanup_old_workspaces(max_age_days=7)
66
70
  logger.info(f"Workspace cleanup: removed {cleaned} old workspaces")
71
+ self._session_dir_gc()
67
72
 
68
73
  except Exception as e:
69
74
  logger.error(f"Error in workspace cleanup: {e}")
75
+
76
+ def _session_dir_gc(self) -> None:
77
+ """056 WS8: collect stale per-session dirs (dry-run unless
78
+ SESSION_DIR_GC_APPLY=true). Live/resident session ids are protected;
79
+ the report is logged and recorded as a `session_gc` event so the owner
80
+ sees the numbers before the switch is flipped."""
81
+ try:
82
+ from agents.task.path import pm
83
+ from agents.task.session_registry import resident_session_ids
84
+ from core.session_gc import collect_stale_sessions
85
+ sessions_root = str(getattr(pm(), "data_root", "") or "")
86
+ protect = set()
87
+ try:
88
+ protect.update(resident_session_ids(self))
89
+ except Exception:
90
+ pass
91
+ try:
92
+ if self.session_manager:
93
+ protect.update(self.session_manager.get_active_sessions())
94
+ except Exception:
95
+ pass
96
+ rep = collect_stale_sessions(sessions_root, max_age_days=14, protect=protect)
97
+ logger.info("session gc (%s): candidates=%s removed=%s bytes=%s kept_recent=%s "
98
+ "protected=%s errors=%s sample=%s",
99
+ "APPLY" if rep.get("apply") else "DRY-RUN", rep.get("candidates"),
100
+ rep.get("removed"), rep.get("bytes"), rep.get("kept_recent"),
101
+ rep.get("protected"), rep.get("errors"), rep.get("sample"))
102
+ try:
103
+ from core.event_log import get_event_log, event_log_enabled
104
+ from core.event_kinds import SESSION_GC
105
+ if event_log_enabled():
106
+ get_event_log().record(SESSION_GC, user_id="", source="lifecycle",
107
+ **{k: v for k, v in rep.items() if k != "sample"})
108
+ except Exception:
109
+ pass
110
+ except Exception as e:
111
+ logger.warning("session gc skipped: %s", e)
70
112
  @staticmethod
71
113
  def _session_age_seconds(created_at, now: Optional[datetime] = None) -> Optional[float]:
72
114
  """Age in seconds from an ISO 'created_at' string, or None if unparseable."""
@@ -155,8 +155,21 @@ def with_compute_tools(tools: list[str]) -> list[str]:
155
155
  try:
156
156
  from agents.task.constants import compute_posture
157
157
  if compute_posture() >= 1:
158
- for t in ("code_execution", "shell", "coding"):
159
- if t not in tools:
158
+ # 056 WS4: posture is the CEILING; each tool's own flag still decides.
159
+ # Prod ran posture 1 with CODE_EXEC_ENABLED/SHELL_TOOLS_ENABLED off and
160
+ # every goal record carried a false "[tool gap] code_execution …" line
161
+ # (43 in 48 h) — the deploy was asking for tools it had switched off.
162
+ from core.config_policy.capability_toggles import (
163
+ code_exec_enabled, shell_tools_enabled, coding_tools_enabled)
164
+ wanted = (("code_execution", code_exec_enabled),
165
+ ("shell", shell_tools_enabled),
166
+ ("coding", coding_tools_enabled))
167
+ for t, enabled in wanted:
168
+ try:
169
+ on = bool(enabled())
170
+ except Exception:
171
+ on = False
172
+ if on and t not in tools:
160
173
  tools.append(t)
161
174
  except Exception:
162
175
  pass
@@ -63,8 +63,10 @@ def run_server(host=None, port=None, workers=None, *, reload=None, log_level=Non
63
63
  workers=workers if not reload else 1, # Can't use multiple workers with reload
64
64
  reload=reload,
65
65
  log_level=log_level,
66
- # Proxy headers for nginx
66
+ # Proxy headers for nginx. Trust X-Forwarded-For ONLY from the local reverse
67
+ # proxy by default: "*" lets any direct caller claim 127.0.0.1 and pass every
68
+ # localhost-only check (webview/server_launcher.py pins the same default).
67
69
  proxy_headers=True,
68
- forwarded_allow_ips="*",
70
+ forwarded_allow_ips=os.environ.get("UVICORN_FORWARDED_ALLOW_IPS", "127.0.0.1"),
69
71
  factory=True
70
72
  )
@@ -23,13 +23,15 @@ from __future__ import annotations
23
23
  import click
24
24
 
25
25
  from core.prefs import load_preferences, propose_pref_change, write_preference
26
- from core.runtime_paths import resolve_runtime_paths
26
+ from cli._admin_home import admin_data_dir
27
27
  from tools.controller.approval import effective_approval_state
28
28
 
29
29
 
30
30
  def _default_home_dir() -> str:
31
- """Same data-home resolution as ``polyrob config set`` (core.runtime_paths)."""
32
- return str(resolve_runtime_paths(local=True).data_home)
31
+ """The DEPLOYED data home (cli/_admin_home.py, the 031 rule) — the approval set is
32
+ the daemon's; resolving the shell-local home here wrote to /root/.polyrob on prod
33
+ and printed success (the same class as the recorded `delivery.daily_cap` defect)."""
34
+ return admin_data_dir()
33
35
 
34
36
 
35
37
  @click.group("approvals")