polyrob 1.4.0__tar.gz → 1.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2480) hide show
  1. polyrob-1.6.0/CHANGELOG.md +2022 -0
  2. polyrob-1.6.0/MANIFEST.in +28 -0
  3. polyrob-1.6.0/PKG-INFO +637 -0
  4. polyrob-1.6.0/README.md +519 -0
  5. polyrob-1.6.0/agents/README.md +446 -0
  6. polyrob-1.6.0/agents/prompt/__init__.py +14 -0
  7. polyrob-1.6.0/agents/task/agent/agent_state.py +417 -0
  8. polyrob-1.6.0/agents/task/agent/async_delegation.py +360 -0
  9. polyrob-1.6.0/agents/task/agent/autonomy_state.py +522 -0
  10. polyrob-1.6.0/agents/task/agent/conversation.py +106 -0
  11. polyrob-1.6.0/agents/task/agent/core/background_review.py +269 -0
  12. polyrob-1.6.0/agents/task/agent/core/budget_notice.py +48 -0
  13. polyrob-1.6.0/agents/task/agent/core/call_quality.py +310 -0
  14. polyrob-1.6.0/agents/task/agent/core/chat_regime.py +39 -0
  15. polyrob-1.6.0/agents/task/agent/core/construction.py +1362 -0
  16. polyrob-1.6.0/agents/task/agent/core/construction_helpers.py +323 -0
  17. polyrob-1.6.0/agents/task/agent/core/correspondent_gate.py +350 -0
  18. polyrob-1.6.0/agents/task/agent/core/curator.py +409 -0
  19. polyrob-1.6.0/agents/task/agent/core/env_context.py +141 -0
  20. polyrob-1.6.0/agents/task/agent/core/episodic_digest.py +445 -0
  21. polyrob-1.6.0/agents/task/agent/core/exhaustion_summary.py +155 -0
  22. polyrob-1.6.0/agents/task/agent/core/history_io.py +289 -0
  23. polyrob-1.6.0/agents/task/agent/core/live_health.py +139 -0
  24. polyrob-1.6.0/agents/task/agent/core/llm_provisioning.py +261 -0
  25. polyrob-1.6.0/agents/task/agent/core/logging_io.py +347 -0
  26. polyrob-1.6.0/agents/task/agent/core/memory_prefetch.py +666 -0
  27. polyrob-1.6.0/agents/task/agent/core/memory_writer.py +438 -0
  28. polyrob-1.6.0/agents/task/agent/core/next_action_internal.py +1625 -0
  29. polyrob-1.6.0/agents/task/agent/core/output_truncation.py +156 -0
  30. polyrob-1.6.0/agents/task/agent/core/owner_thread_inject.py +191 -0
  31. polyrob-1.6.0/agents/task/agent/core/project_context.py +421 -0
  32. polyrob-1.6.0/agents/task/agent/core/result_budget.py +129 -0
  33. polyrob-1.6.0/agents/task/agent/core/result_offload.py +580 -0
  34. polyrob-1.6.0/agents/task/agent/core/result_processing.py +583 -0
  35. polyrob-1.6.0/agents/task/agent/core/run_budget.py +194 -0
  36. polyrob-1.6.0/agents/task/agent/core/run_loop.py +814 -0
  37. polyrob-1.6.0/agents/task/agent/core/safety_lifecycle.py +220 -0
  38. polyrob-1.6.0/agents/task/agent/core/self_wake.py +303 -0
  39. polyrob-1.6.0/agents/task/agent/core/step.py +1006 -0
  40. polyrob-1.6.0/agents/task/agent/core/step_execution.py +467 -0
  41. polyrob-1.6.0/agents/task/agent/core/tool_availability.py +148 -0
  42. polyrob-1.6.0/agents/task/agent/core/user_ingress.py +436 -0
  43. polyrob-1.6.0/agents/task/agent/message_manager/service.py +1111 -0
  44. polyrob-1.6.0/agents/task/agent/messages/compactor.py +1176 -0
  45. polyrob-1.6.0/agents/task/agent/messages/filters.py +620 -0
  46. polyrob-1.6.0/agents/task/agent/messages/foundation_layers.py +211 -0
  47. polyrob-1.6.0/agents/task/agent/messages/foundation_replay.py +292 -0
  48. polyrob-1.6.0/agents/task/agent/messages/guidance.py +420 -0
  49. polyrob-1.6.0/agents/task/agent/messages/retrieval.py +713 -0
  50. polyrob-1.6.0/agents/task/agent/messages/token_counter.py +784 -0
  51. polyrob-1.6.0/agents/task/agent/profile_manager.py +184 -0
  52. polyrob-1.6.0/agents/task/agent/profile_registry.py +154 -0
  53. polyrob-1.6.0/agents/task/agent/profile_store.py +586 -0
  54. polyrob-1.6.0/agents/task/agent/prompt_memory.py +78 -0
  55. polyrob-1.6.0/agents/task/agent/prompts.py +1062 -0
  56. polyrob-1.6.0/agents/task/agent/skill_manager.py +902 -0
  57. polyrob-1.6.0/agents/task/agent/sub_agent_manager.py +1447 -0
  58. polyrob-1.6.0/agents/task/billed_request.py +96 -0
  59. polyrob-1.6.0/agents/task/config.py +497 -0
  60. polyrob-1.6.0/agents/task/constants.py +794 -0
  61. polyrob-1.6.0/agents/task/conversation_resume.py +205 -0
  62. polyrob-1.6.0/agents/task/goals/board.py +1213 -0
  63. polyrob-1.6.0/agents/task/goals/board_asks.py +475 -0
  64. polyrob-1.6.0/agents/task/goals/board_deps.py +261 -0
  65. polyrob-1.6.0/agents/task/goals/board_types.py +119 -0
  66. polyrob-1.6.0/agents/task/goals/context.py +290 -0
  67. polyrob-1.6.0/agents/task/goals/dispatcher.py +1353 -0
  68. polyrob-1.6.0/agents/task/goals/escalation.py +89 -0
  69. polyrob-1.6.0/agents/task/goals/goal_run.py +1007 -0
  70. polyrob-1.6.0/agents/task/goals/group_service.py +365 -0
  71. polyrob-1.6.0/agents/task/goals/memory_scope.py +122 -0
  72. polyrob-1.6.0/agents/task/goals/preflight.py +158 -0
  73. polyrob-1.6.0/agents/task/goals/rail_answers.py +245 -0
  74. polyrob-1.6.0/agents/task/loop_types/registry_views.py +157 -0
  75. polyrob-1.6.0/agents/task/path.py +1078 -0
  76. polyrob-1.6.0/agents/task/robust_parse_config.py +345 -0
  77. polyrob-1.6.0/agents/task/runtime/run_as_session.py +381 -0
  78. polyrob-1.6.0/agents/task/runtime/run_outcome.py +486 -0
  79. polyrob-1.6.0/agents/task/runtime/stop_reason.py +121 -0
  80. polyrob-1.6.0/agents/task/session/cleanup.py +859 -0
  81. polyrob-1.6.0/agents/task/session/execution.py +459 -0
  82. polyrob-1.6.0/agents/task/session/hitl_ingress.py +334 -0
  83. polyrob-1.6.0/agents/task/session_class.py +319 -0
  84. polyrob-1.6.0/agents/task/task_agent_chat.py +649 -0
  85. polyrob-1.6.0/agents/task/task_agent_delivery.py +1098 -0
  86. polyrob-1.6.0/agents/task/task_agent_support.py +262 -0
  87. polyrob-1.6.0/agents/task/telemetry/views.py +1003 -0
  88. polyrob-1.6.0/agents/task/tool_defaults.py +253 -0
  89. polyrob-1.6.0/agents/task_agent_lite.py +978 -0
  90. polyrob-1.6.0/api/README.md +749 -0
  91. polyrob-1.6.0/api/TASK_API_DOCS.md +180 -0
  92. polyrob-1.6.0/api/a2a/task_handler.py +1161 -0
  93. polyrob-1.6.0/api/admin_endpoints.py +1489 -0
  94. polyrob-1.6.0/api/models.py +218 -0
  95. polyrob-1.6.0/api/openai_compat/model_map.py +102 -0
  96. polyrob-1.6.0/api/openai_compat/router.py +316 -0
  97. polyrob-1.6.0/api/payment_endpoints.py +430 -0
  98. polyrob-1.6.0/api/skill_endpoints.py +437 -0
  99. polyrob-1.6.0/api/task_http_api.py +1876 -0
  100. polyrob-1.6.0/api/tenant_tools.py +24 -0
  101. polyrob-1.6.0/api/x402_endpoints.py +555 -0
  102. polyrob-1.6.0/cli/_doctor_members.py +43 -0
  103. polyrob-1.6.0/cli/agent_child_gate.py +112 -0
  104. polyrob-1.6.0/cli/attachments.py +42 -0
  105. polyrob-1.6.0/cli/commands/_bootstrap.py +151 -0
  106. polyrob-1.6.0/cli/commands/_lifecycle.py +366 -0
  107. polyrob-1.6.0/cli/commands/chat.py +1111 -0
  108. polyrob-1.6.0/cli/commands/config.py +749 -0
  109. polyrob-1.6.0/cli/commands/cron.py +633 -0
  110. polyrob-1.6.0/cli/commands/dashboard.py +230 -0
  111. polyrob-1.6.0/cli/commands/doctor.py +1476 -0
  112. polyrob-1.6.0/cli/commands/finance.py +57 -0
  113. polyrob-1.6.0/cli/commands/goals.py +462 -0
  114. polyrob-1.6.0/cli/commands/init.py +675 -0
  115. polyrob-1.6.0/cli/commands/kb.py +411 -0
  116. polyrob-1.6.0/cli/commands/knowledge.py +116 -0
  117. polyrob-1.6.0/cli/commands/model.py +193 -0
  118. polyrob-1.6.0/cli/commands/owner.py +1637 -0
  119. polyrob-1.6.0/cli/commands/run.py +547 -0
  120. polyrob-1.6.0/cli/commands/serve.py +60 -0
  121. polyrob-1.6.0/cli/commands/skill_install.py +952 -0
  122. polyrob-1.6.0/cli/commands/skills.py +134 -0
  123. polyrob-1.6.0/cli/commands/soul.py +114 -0
  124. polyrob-1.6.0/cli/commands/surfaces.py +286 -0
  125. polyrob-1.6.0/cli/commands/update.py +840 -0
  126. polyrob-1.6.0/cli/commands/wallet.py +1838 -0
  127. polyrob-1.6.0/cli/commands/workers.py +230 -0
  128. polyrob-1.6.0/cli/config_store.py +321 -0
  129. polyrob-1.6.0/cli/keys.py +103 -0
  130. polyrob-1.6.0/cli/polyrob.py +348 -0
  131. polyrob-1.6.0/cli/ui/commands/h_a23.py +48 -0
  132. polyrob-1.6.0/cli/ui/commands/h_approve.py +197 -0
  133. polyrob-1.6.0/cli/ui/commands/h_autonomy.py +182 -0
  134. polyrob-1.6.0/cli/ui/commands/h_cards.py +238 -0
  135. polyrob-1.6.0/cli/ui/commands/h_config.py +366 -0
  136. polyrob-1.6.0/cli/ui/commands/h_gates.py +185 -0
  137. polyrob-1.6.0/cli/ui/commands/h_goal_one.py +56 -0
  138. polyrob-1.6.0/cli/ui/commands/h_goals_view.py +117 -0
  139. polyrob-1.6.0/cli/ui/commands/h_help.py +371 -0
  140. polyrob-1.6.0/cli/ui/commands/h_inbox.py +136 -0
  141. polyrob-1.6.0/cli/ui/commands/h_job.py +83 -0
  142. polyrob-1.6.0/cli/ui/commands/h_journey.py +123 -0
  143. polyrob-1.6.0/cli/ui/commands/h_money_verbs.py +155 -0
  144. polyrob-1.6.0/cli/ui/commands/h_owner.py +457 -0
  145. polyrob-1.6.0/cli/ui/commands/h_pending.py +121 -0
  146. polyrob-1.6.0/cli/ui/commands/h_skills.py +294 -0
  147. polyrob-1.6.0/cli/ui/commands/handlers.py +1765 -0
  148. polyrob-1.6.0/cli/ui/dialog.py +386 -0
  149. polyrob-1.6.0/cli/ui/events.py +583 -0
  150. polyrob-1.6.0/cli/ui/first_run_notice.py +117 -0
  151. polyrob-1.6.0/cli/ui/persistent_loop.py +206 -0
  152. polyrob-1.6.0/cli/ui/plain_renderer.py +395 -0
  153. polyrob-1.6.0/cli/ui/renderer.py +525 -0
  154. polyrob-1.6.0/cli/ui/rich_renderer.py +541 -0
  155. polyrob-1.6.0/cli/ui/state.py +501 -0
  156. polyrob-1.6.0/cli/update/context.py +156 -0
  157. polyrob-1.6.0/cli/update/snapshot.py +289 -0
  158. polyrob-1.6.0/config/.env.development.template +291 -0
  159. polyrob-1.6.0/core/CHANGELOG.md +2022 -0
  160. polyrob-1.6.0/core/activity_class.py +165 -0
  161. polyrob-1.6.0/core/activity_evidence.py +105 -0
  162. polyrob-1.6.0/core/autonomy_control.py +635 -0
  163. polyrob-1.6.0/core/autonomy_marker.py +158 -0
  164. polyrob-1.6.0/core/config.py +745 -0
  165. polyrob-1.6.0/core/config_policy/__init__.py +56 -0
  166. polyrob-1.6.0/core/config_policy/autonomy_config.py +483 -0
  167. polyrob-1.6.0/core/config_policy/capability_toggles.py +421 -0
  168. polyrob-1.6.0/core/config_policy/goal_flags.py +132 -0
  169. polyrob-1.6.0/core/config_policy/local_profile.py +107 -0
  170. polyrob-1.6.0/core/config_policy/members.py +396 -0
  171. polyrob-1.6.0/core/config_policy/money_regime.py +111 -0
  172. polyrob-1.6.0/core/config_policy/policy.py +120 -0
  173. polyrob-1.6.0/core/config_policy/profiles.py +191 -0
  174. polyrob-1.6.0/core/config_policy/retired_flags.py +196 -0
  175. polyrob-1.6.0/core/config_policy/rigs.py +166 -0
  176. polyrob-1.6.0/core/config_policy/spend_lane.py +403 -0
  177. polyrob-1.6.0/core/config_service.py +867 -0
  178. polyrob-1.6.0/core/context_fences.py +126 -0
  179. polyrob-1.6.0/core/credit_sentinel.py +407 -0
  180. polyrob-1.6.0/core/cron_lanes.py +304 -0
  181. polyrob-1.6.0/core/db_manifest.py +258 -0
  182. polyrob-1.6.0/core/doc_age.py +114 -0
  183. polyrob-1.6.0/core/doc_claims.py +346 -0
  184. polyrob-1.6.0/core/effects.py +358 -0
  185. polyrob-1.6.0/core/env_file.py +165 -0
  186. polyrob-1.6.0/core/event_kinds.py +250 -0
  187. polyrob-1.6.0/core/flags.py +225 -0
  188. polyrob-1.6.0/core/flags_catalog.py +1396 -0
  189. polyrob-1.6.0/core/goal_board_render.py +188 -0
  190. polyrob-1.6.0/core/goal_legibility.py +187 -0
  191. polyrob-1.6.0/core/goal_owner_verbs.py +163 -0
  192. polyrob-1.6.0/core/goal_suppressions.py +277 -0
  193. polyrob-1.6.0/core/goal_vocab.py +61 -0
  194. polyrob-1.6.0/core/install_facts.py +131 -0
  195. polyrob-1.6.0/core/lazy_closures/docs.docx.txt +187 -0
  196. polyrob-1.6.0/core/lazy_closures/docs.pdf.txt +7 -0
  197. polyrob-1.6.0/core/lazy_closures/media.gif.txt +235 -0
  198. polyrob-1.6.0/core/lazy_closures/media.qr.txt +10 -0
  199. polyrob-1.6.0/core/lazy_closures/memory.vector.txt +232 -0
  200. polyrob-1.6.0/core/lazy_closures/provider.anthropic.txt +296 -0
  201. polyrob-1.6.0/core/lazy_closures/provider.gemini.txt +594 -0
  202. polyrob-1.6.0/core/lazy_closures/server.api.txt +1720 -0
  203. polyrob-1.6.0/core/lazy_closures/surface.telegram.txt +904 -0
  204. polyrob-1.6.0/core/lazy_closures/tool.anysite.txt +340 -0
  205. polyrob-1.6.0/core/lazy_closures/voice.transcribe.txt +402 -0
  206. polyrob-1.6.0/core/lazy_deps.py +614 -0
  207. polyrob-1.6.0/core/lazy_installer.py +437 -0
  208. polyrob-1.6.0/core/legacy_data_tree.py +210 -0
  209. polyrob-1.6.0/core/lifecycle.py +705 -0
  210. polyrob-1.6.0/core/llm_auth/flows/device_code.py +139 -0
  211. polyrob-1.6.0/core/logging.py +604 -0
  212. polyrob-1.6.0/core/money/__init__.py +25 -0
  213. polyrob-1.6.0/core/money/classify.py +100 -0
  214. polyrob-1.6.0/core/money/ledger.py +475 -0
  215. polyrob-1.6.0/core/money/limits.py +183 -0
  216. polyrob-1.6.0/core/money_verbs.py +108 -0
  217. polyrob-1.6.0/core/open_positions.py +837 -0
  218. polyrob-1.6.0/core/owner_create.py +286 -0
  219. polyrob-1.6.0/core/owner_remedy.py +337 -0
  220. polyrob-1.6.0/core/packs/index.py +287 -0
  221. polyrob-1.6.0/core/packs/manifest.py +356 -0
  222. polyrob-1.6.0/core/path_safety.py +184 -0
  223. polyrob-1.6.0/core/paths.py +60 -0
  224. polyrob-1.6.0/core/payments/assets.py +377 -0
  225. polyrob-1.6.0/core/payments/quote.py +134 -0
  226. polyrob-1.6.0/core/prefs.py +1569 -0
  227. polyrob-1.6.0/core/prompt_manifest.py +93 -0
  228. polyrob-1.6.0/core/prompt_text.py +67 -0
  229. polyrob-1.6.0/core/publish.py +451 -0
  230. polyrob-1.6.0/core/recap.py +303 -0
  231. polyrob-1.6.0/core/rules_sweep.py +213 -0
  232. polyrob-1.6.0/core/runtime_config.py +336 -0
  233. polyrob-1.6.0/core/runtime_paths.py +498 -0
  234. polyrob-1.6.0/core/security/browser_rail.py +285 -0
  235. polyrob-1.6.0/core/security/confined_write.py +132 -0
  236. polyrob-1.6.0/core/security/custody_env.py +246 -0
  237. polyrob-1.6.0/core/security/host_execution.py +199 -0
  238. polyrob-1.6.0/core/security/policy_order.py +41 -0
  239. polyrob-1.6.0/core/security/refusals.py +51 -0
  240. polyrob-1.6.0/core/security/secret_guard.py +628 -0
  241. polyrob-1.6.0/core/security/settings.py +154 -0
  242. polyrob-1.6.0/core/security/taints.py +59 -0
  243. polyrob-1.6.0/core/security/turn_facts.py +51 -0
  244. polyrob-1.6.0/core/self_context_writer.py +672 -0
  245. polyrob-1.6.0/core/self_evolution.py +1001 -0
  246. polyrob-1.6.0/core/signer/__init__.py +126 -0
  247. polyrob-1.6.0/core/signer/approvals.py +74 -0
  248. polyrob-1.6.0/core/signer/caps.py +301 -0
  249. polyrob-1.6.0/core/signer/deployed_mode.py +21 -0
  250. polyrob-1.6.0/core/signer/provision.py +143 -0
  251. polyrob-1.6.0/core/signer/review.py +118 -0
  252. polyrob-1.6.0/core/signer/runtime.py +110 -0
  253. polyrob-1.6.0/core/signer/server.py +920 -0
  254. polyrob-1.6.0/core/skills/__init__.py +10 -0
  255. polyrob-1.6.0/core/skills/catalog.py +200 -0
  256. polyrob-1.6.0/core/skills/frontmatter.py +254 -0
  257. polyrob-1.6.0/core/skills/scopes.py +382 -0
  258. polyrob-1.6.0/core/status_delivery.py +391 -0
  259. polyrob-1.6.0/core/status_economics.py +582 -0
  260. polyrob-1.6.0/core/status_live.py +132 -0
  261. polyrob-1.6.0/core/status_loops.py +634 -0
  262. polyrob-1.6.0/core/status_money.py +517 -0
  263. polyrob-1.6.0/core/status_render.py +372 -0
  264. polyrob-1.6.0/core/status_rules.py +303 -0
  265. polyrob-1.6.0/core/status_snapshot.py +281 -0
  266. polyrob-1.6.0/core/status_types.py +175 -0
  267. polyrob-1.6.0/core/status_work.py +227 -0
  268. polyrob-1.6.0/core/surfaces/card_groups.py +423 -0
  269. polyrob-1.6.0/core/surfaces/cards.py +1319 -0
  270. polyrob-1.6.0/core/surfaces/continuity.py +110 -0
  271. polyrob-1.6.0/core/surfaces/conversations.py +366 -0
  272. polyrob-1.6.0/core/surfaces/dispatcher.py +845 -0
  273. polyrob-1.6.0/core/surfaces/inbound_attachments.py +449 -0
  274. polyrob-1.6.0/core/surfaces/inbox.py +241 -0
  275. polyrob-1.6.0/core/surfaces/inbox_render.py +422 -0
  276. polyrob-1.6.0/core/surfaces/missed.py +171 -0
  277. polyrob-1.6.0/core/surfaces/outbound_target.py +168 -0
  278. polyrob-1.6.0/core/surfaces/owner_admin.py +255 -0
  279. polyrob-1.6.0/core/surfaces/owner_intent.py +69 -0
  280. polyrob-1.6.0/core/surfaces/owner_thread.py +747 -0
  281. polyrob-1.6.0/core/surfaces/room_actions.py +1134 -0
  282. polyrob-1.6.0/core/surfaces/session_policy.py +108 -0
  283. polyrob-1.6.0/core/surfaces/user_delivery.py +1278 -0
  284. polyrob-1.6.0/core/tool_capabilities.py +538 -0
  285. polyrob-1.6.0/core/tool_gates.py +177 -0
  286. polyrob-1.6.0/core/tool_grants.py +129 -0
  287. polyrob-1.6.0/core/verb_policy.py +302 -0
  288. polyrob-1.6.0/core/verb_policy_rows.py +614 -0
  289. polyrob-1.6.0/core/verbs.py +564 -0
  290. polyrob-1.6.0/core/version.py +162 -0
  291. polyrob-1.6.0/core/wake_queue.py +313 -0
  292. polyrob-1.6.0/core/wallet/address_lookalike.py +129 -0
  293. polyrob-1.6.0/core/wallet/bridge_guard.py +992 -0
  294. polyrob-1.6.0/core/wallet/bridge_watcher.py +306 -0
  295. polyrob-1.6.0/core/wallet/broadcast/evm.py +429 -0
  296. polyrob-1.6.0/core/wallet/buy_target.py +321 -0
  297. polyrob-1.6.0/core/wallet/chains.py +707 -0
  298. polyrob-1.6.0/core/wallet/collection_mint.py +251 -0
  299. polyrob-1.6.0/core/wallet/config.py +487 -0
  300. polyrob-1.6.0/core/wallet/deploy_guard.py +445 -0
  301. polyrob-1.6.0/core/wallet/lifi_calldata.py +117 -0
  302. polyrob-1.6.0/core/wallet/signer_envelope.py +235 -0
  303. polyrob-1.6.0/core/wallet/simulation.py +706 -0
  304. polyrob-1.6.0/core/wallet/solana_onchain.py +344 -0
  305. polyrob-1.6.0/core/wallet/solana_simulation.py +309 -0
  306. polyrob-1.6.0/core/wallet/solana_swap_bounds.py +137 -0
  307. polyrob-1.6.0/core/wallet/solana_tx_inspect.py +949 -0
  308. polyrob-1.6.0/core/wallet/submission_journal.py +285 -0
  309. polyrob-1.6.0/core/wallet/token_template.py +412 -0
  310. polyrob-1.6.0/core/wallet/tokens.py +456 -0
  311. polyrob-1.6.0/core/wallet/tx_guard.py +1579 -0
  312. polyrob-1.6.0/core/wallet/tx_guard_steps/context.py +64 -0
  313. polyrob-1.6.0/core/wallet/tx_guard_steps/measure.py +733 -0
  314. polyrob-1.6.0/core/wallet/tx_guard_steps/shape.py +379 -0
  315. polyrob-1.6.0/core/wallet/tx_guard_steps/value.py +508 -0
  316. polyrob-1.6.0/core/wallet/tx_notify.py +401 -0
  317. polyrob-1.6.0/cron/README.md +79 -0
  318. polyrob-1.6.0/cron/credential_preflight.py +110 -0
  319. polyrob-1.6.0/cron/delivery.py +673 -0
  320. polyrob-1.6.0/cron/digest.py +341 -0
  321. polyrob-1.6.0/cron/jobs.py +521 -0
  322. polyrob-1.6.0/cron/owner_rules_overlay.py +110 -0
  323. polyrob-1.6.0/cron/preflight.py +40 -0
  324. polyrob-1.6.0/cron/read_job.py +490 -0
  325. polyrob-1.6.0/cron/remedy_streak.py +150 -0
  326. polyrob-1.6.0/cron/rig_edit.py +74 -0
  327. polyrob-1.6.0/cron/room_service.py +136 -0
  328. polyrob-1.6.0/cron/runner.py +857 -0
  329. polyrob-1.6.0/cron/scheduler.py +484 -0
  330. polyrob-1.6.0/cron/service.py +478 -0
  331. polyrob-1.6.0/cron/write_job.py +146 -0
  332. polyrob-1.6.0/data/prompts/skills/adversarial-consensus/SKILL.md +114 -0
  333. polyrob-1.6.0/data/prompts/skills/browser-automation/SKILL.md +55 -0
  334. polyrob-1.6.0/data/prompts/skills/coding-workflow/SKILL.md +47 -0
  335. polyrob-1.6.0/data/prompts/skills/crypto-trading-safety/SKILL.md +79 -0
  336. polyrob-1.6.0/data/prompts/skills/dca/SKILL.md +87 -0
  337. polyrob-1.6.0/data/prompts/skills/defi-bridge/SKILL.md +121 -0
  338. polyrob-1.6.0/data/prompts/skills/defi-liquidity/SKILL.md +64 -0
  339. polyrob-1.6.0/data/prompts/skills/document-writing/SKILL.md +33 -0
  340. polyrob-1.6.0/data/prompts/skills/email-comms/SKILL.md +39 -0
  341. polyrob-1.6.0/data/prompts/skills/exits/SKILL.md +122 -0
  342. polyrob-1.6.0/data/prompts/skills/file-data-ops/SKILL.md +35 -0
  343. polyrob-1.6.0/data/prompts/skills/get-paid-for-work/SKILL.md +92 -0
  344. polyrob-1.6.0/data/prompts/skills/incident-response/SKILL.md +136 -0
  345. polyrob-1.6.0/data/prompts/skills/market-research-brief/SKILL.md +105 -0
  346. polyrob-1.6.0/data/prompts/skills/memecoin-scouting/SKILL.md +244 -0
  347. polyrob-1.6.0/data/prompts/skills/pay-for-work/SKILL.md +134 -0
  348. polyrob-1.6.0/data/prompts/skills/person-analyzer/SKILL.md +124 -0
  349. polyrob-1.6.0/data/prompts/skills/polyrob-user-guide/SKILL.md +248 -0
  350. polyrob-1.6.0/data/prompts/skills/polyrob-user-guide/references/autonomy.md +175 -0
  351. polyrob-1.6.0/data/prompts/skills/polyrob-user-guide/references/configuration.md +693 -0
  352. polyrob-1.6.0/data/prompts/skills/polyrob-user-guide/references/money-and-safety.md +136 -0
  353. polyrob-1.6.0/data/prompts/skills/polyrob-user-guide/references/skills-and-learning.md +93 -0
  354. polyrob-1.6.0/data/prompts/skills/polyrob-user-guide/references/surfaces.md +125 -0
  355. polyrob-1.6.0/data/prompts/skills/polyrob-user-guide/references/verbs.md +167 -0
  356. polyrob-1.6.0/data/prompts/skills/polyrob-user-guide/references/wallet-and-identity.md +158 -0
  357. polyrob-1.6.0/data/prompts/skills/position-journal/SKILL.md +80 -0
  358. polyrob-1.6.0/data/prompts/skills/post-trade-verify/SKILL.md +86 -0
  359. polyrob-1.6.0/data/prompts/skills/pre-trade-check/SKILL.md +85 -0
  360. polyrob-1.6.0/data/prompts/skills/presentation-creator/SKILL.md +36 -0
  361. polyrob-1.6.0/data/prompts/skills/project-analyzer/SKILL.md +169 -0
  362. polyrob-1.6.0/data/prompts/skills/robinhood-chain/SKILL.md +109 -0
  363. polyrob-1.6.0/data/prompts/skills/secret-handling/SKILL.md +32 -0
  364. polyrob-1.6.0/data/prompts/skills/self-deploy/SKILL.md +175 -0
  365. polyrob-1.6.0/data/prompts/skills/sizing-and-risk/SKILL.md +102 -0
  366. polyrob-1.6.0/data/prompts/skills/skill-authoring/SKILL.md +37 -0
  367. polyrob-1.6.0/data/prompts/skills/skill-security-review/SKILL.md +54 -0
  368. polyrob-1.6.0/data/prompts/skills/stable-cash/SKILL.md +57 -0
  369. polyrob-1.6.0/data/prompts/skills/task-planning/SKILL.md +33 -0
  370. polyrob-1.6.0/data/prompts/skills/token-identity/SKILL.md +158 -0
  371. polyrob-1.6.0/data/prompts/skills/token-launch/SKILL.md +177 -0
  372. polyrob-1.6.0/data/prompts/skills/trade-execution/SKILL.md +114 -0
  373. polyrob-1.6.0/data/prompts/skills/treasury-trading/SKILL.md +351 -0
  374. polyrob-1.6.0/data/prompts/skills/treasury-trading/references/chains.md +37 -0
  375. polyrob-1.6.0/data/prompts/skills/treasury-trading/references/executing.md +31 -0
  376. polyrob-1.6.0/data/prompts/skills/treasury-trading/references/learning-the-meta.md +47 -0
  377. polyrob-1.6.0/data/prompts/skills/treasury-trading/references/nfts.md +29 -0
  378. polyrob-1.6.0/data/prompts/skills/verified-tooling/SKILL.md +62 -0
  379. polyrob-1.6.0/data/prompts/skills/web-research/SKILL.md +41 -0
  380. polyrob-1.6.0/data/prompts/skills/x402-pay/SKILL.md +90 -0
  381. polyrob-1.6.0/data/prompts/system/actions.md +4 -0
  382. polyrob-1.6.0/data/prompts/system/agency.md +11 -0
  383. polyrob-1.6.0/data/prompts/system/communication.md +34 -0
  384. polyrob-1.6.0/data/prompts/system/communication_contract.md +28 -0
  385. polyrob-1.6.0/data/prompts/system/filesystem.md +12 -0
  386. polyrob-1.6.0/data/prompts/system/identity.md +3 -0
  387. polyrob-1.6.0/data/prompts/system/input_format.md +8 -0
  388. polyrob-1.6.0/data/prompts/system/mcp_tools.md +50 -0
  389. polyrob-1.6.0/data/prompts/system/message_shape.md +17 -0
  390. polyrob-1.6.0/data/prompts/system/owner_instructions.md +17 -0
  391. polyrob-1.6.0/data/prompts/system/response_format.md +49 -0
  392. polyrob-1.6.0/data/prompts/system/rules.md +13 -0
  393. polyrob-1.6.0/data/prompts/system/security.md +13 -0
  394. polyrob-1.6.0/data/prompts/system/source_precedence.md +51 -0
  395. polyrob-1.6.0/data/prompts/system/subtask_delegation.md +10 -0
  396. polyrob-1.6.0/data/prompts/system/surface.md +29 -0
  397. polyrob-1.6.0/data/prompts/system/using_your_tools.md +13 -0
  398. polyrob-1.6.0/data/prompts/system/vision.md +45 -0
  399. polyrob-1.6.0/data/prompts/system/web_access.md +37 -0
  400. polyrob-1.6.0/docs/CONFIGURATION.md +1387 -0
  401. polyrob-1.6.0/docs/guide/api.md +670 -0
  402. polyrob-1.6.0/docs/guide/architecture.md +248 -0
  403. polyrob-1.6.0/docs/guide/cli.md +911 -0
  404. polyrob-1.6.0/docs/guide/configuration.md +828 -0
  405. polyrob-1.6.0/docs/guide/console.md +206 -0
  406. polyrob-1.6.0/docs/guide/conversation.md +64 -0
  407. polyrob-1.6.0/docs/guide/getting-started.md +434 -0
  408. polyrob-1.6.0/docs/guide/groups.md +611 -0
  409. polyrob-1.6.0/docs/guide/migration/from-hermes.md +224 -0
  410. polyrob-1.6.0/docs/guide/migration/from-openclaw.md +228 -0
  411. polyrob-1.6.0/docs/guide/owner-controls.md +395 -0
  412. polyrob-1.6.0/docs/guide/payments.md +1590 -0
  413. polyrob-1.6.0/docs/guide/security-model.md +619 -0
  414. polyrob-1.6.0/docs/guide/skills.md +375 -0
  415. polyrob-1.6.0/docs/guide/streams.md +241 -0
  416. polyrob-1.6.0/docs/guide/x-twitter.md +173 -0
  417. polyrob-1.6.0/migrations/migrate.py +275 -0
  418. polyrob-1.6.0/migrations/versions/v1_2_0_den_token_bonuses.py +80 -0
  419. polyrob-1.6.0/modules/auth/identity_mapper.py +220 -0
  420. polyrob-1.6.0/modules/auth/tier_manager.py +166 -0
  421. polyrob-1.6.0/modules/cards/cards.py +396 -0
  422. polyrob-1.6.0/modules/credits/__init__.py +25 -0
  423. polyrob-1.6.0/modules/credits/balance_manager.py +308 -0
  424. polyrob-1.6.0/modules/credits/balances.py +81 -0
  425. polyrob-1.6.0/modules/credits/pricing.py +253 -0
  426. polyrob-1.6.0/modules/credits/usage_tracker.py +931 -0
  427. polyrob-1.6.0/modules/database/auth_tables.py +350 -0
  428. polyrob-1.6.0/modules/llm/adapters.py +1138 -0
  429. polyrob-1.6.0/modules/llm/aux_metering.py +195 -0
  430. polyrob-1.6.0/modules/llm/llm_client.py +956 -0
  431. polyrob-1.6.0/modules/llm/llm_client_registry.py +291 -0
  432. polyrob-1.6.0/modules/llm/llm_manager.py +858 -0
  433. polyrob-1.6.0/modules/llm/model_catalog.py +1591 -0
  434. polyrob-1.6.0/modules/llm/openrouter_client.py +960 -0
  435. polyrob-1.6.0/modules/llm/openrouter_routing.py +152 -0
  436. polyrob-1.6.0/modules/llm/prefix_stamp.py +215 -0
  437. polyrob-1.6.0/modules/llm/profiles.py +607 -0
  438. polyrob-1.6.0/modules/memory/episodic.py +205 -0
  439. polyrob-1.6.0/modules/memory/fts_terms.py +60 -0
  440. polyrob-1.6.0/modules/memory/local_vector_memory_provider.py +752 -0
  441. polyrob-1.6.0/modules/memory/recall_rank.py +98 -0
  442. polyrob-1.6.0/modules/memory/registry.py +394 -0
  443. polyrob-1.6.0/modules/memory/retention.py +15 -0
  444. polyrob-1.6.0/modules/memory/sqlite_curated_store.py +360 -0
  445. polyrob-1.6.0/modules/memory/sqlite_episodes_store.py +233 -0
  446. polyrob-1.6.0/modules/memory/sqlite_memory_provider.py +320 -0
  447. polyrob-1.6.0/modules/memory/sqlite_recall.py +266 -0
  448. polyrob-1.6.0/modules/memory/sqlite_scope_store.py +281 -0
  449. polyrob-1.6.0/modules/memory/storage_limits.py +79 -0
  450. polyrob-1.6.0/modules/memory/task/hierarchical_memory.py +787 -0
  451. polyrob-1.6.0/modules/memory/task/phase_manager.py +562 -0
  452. polyrob-1.6.0/modules/memory/task/reflection_service.py +187 -0
  453. polyrob-1.6.0/modules/memory/task/task_context_manager.py +1121 -0
  454. polyrob-1.6.0/modules/skills/migration.py +442 -0
  455. polyrob-1.6.0/modules/skills/seed.py +334 -0
  456. polyrob-1.6.0/modules/skills/skill_usage.py +334 -0
  457. polyrob-1.6.0/modules/skills/writer.py +1055 -0
  458. polyrob-1.6.0/modules/x402/artifact.py +276 -0
  459. polyrob-1.6.0/modules/x402/facilitator.py +190 -0
  460. polyrob-1.6.0/modules/x402/invoice_assets.py +212 -0
  461. polyrob-1.6.0/modules/x402/invoicing.py +1152 -0
  462. polyrob-1.6.0/modules/x402/middleware.py +646 -0
  463. polyrob-1.6.0/modules/x402/settlement_holds.py +162 -0
  464. polyrob-1.6.0/modules/x402/settlement_scan.py +1321 -0
  465. polyrob-1.6.0/modules/x402/solana_settlement.py +186 -0
  466. polyrob-1.6.0/packs/discovery/polyrob_discovery/skills/lead-research/SKILL.md +87 -0
  467. polyrob-1.6.0/packs/discovery/polyrob_discovery/skills/web-scraping/SKILL.md +74 -0
  468. polyrob-1.6.0/packs/markets/polyrob_markets/pack.toml +229 -0
  469. polyrob-1.6.0/packs/markets/polyrob_markets/skills/hyperliquid-account-review/SKILL.md +54 -0
  470. polyrob-1.6.0/packs/markets/polyrob_markets/skills/hyperliquid-market-data/SKILL.md +53 -0
  471. polyrob-1.6.0/packs/markets/polyrob_markets/skills/hyperliquid-trading/SKILL.md +115 -0
  472. polyrob-1.6.0/packs/markets/polyrob_markets/skills/polymarket-market-research/SKILL.md +58 -0
  473. polyrob-1.6.0/packs/markets/polyrob_markets/skills/polymarket-portfolio-review/SKILL.md +60 -0
  474. polyrob-1.6.0/packs/markets/polyrob_markets/skills/polymarket-trading/SKILL.md +97 -0
  475. polyrob-1.6.0/packs/x/polyrob_x/dm_watermark.py +48 -0
  476. polyrob-1.6.0/packs/x/polyrob_x/gate_reason.py +34 -0
  477. polyrob-1.6.0/packs/x/polyrob_x/pack.toml +151 -0
  478. polyrob-1.6.0/packs/x/polyrob_x/post_spacing.py +77 -0
  479. polyrob-1.6.0/packs/x/polyrob_x/registration.py +49 -0
  480. polyrob-1.6.0/packs/x/polyrob_x/skills/social-discovery/SKILL.md +61 -0
  481. polyrob-1.6.0/packs/x/polyrob_x/skills/x-engagement/SKILL.md +154 -0
  482. polyrob-1.6.0/packs/x/polyrob_x/twitter_tool.py +2824 -0
  483. polyrob-1.6.0/polyrob/app/autonomy_runtime.py +1286 -0
  484. polyrob-1.6.0/polyrob/app/bootstrap.py +820 -0
  485. polyrob-1.6.0/polyrob/app/card_wake.py +147 -0
  486. polyrob-1.6.0/polyrob/sdk.py +95 -0
  487. polyrob-1.6.0/polyrob.egg-info/PKG-INFO +637 -0
  488. polyrob-1.6.0/polyrob.egg-info/SOURCES.txt +1870 -0
  489. polyrob-1.6.0/polyrob.egg-info/requires.txt +121 -0
  490. polyrob-1.6.0/pyproject.toml +180 -0
  491. polyrob-1.6.0/requirements.lock +5357 -0
  492. polyrob-1.6.0/surfaces/email/inbound.py +239 -0
  493. polyrob-1.6.0/surfaces/inbox_sources.py +348 -0
  494. polyrob-1.6.0/surfaces/telegram/admin_verbs.py +440 -0
  495. polyrob-1.6.0/surfaces/telegram/approval_ops.py +335 -0
  496. polyrob-1.6.0/surfaces/telegram/card_ops.py +325 -0
  497. polyrob-1.6.0/surfaces/telegram/claim_ops.py +94 -0
  498. polyrob-1.6.0/surfaces/telegram/group_ops.py +1033 -0
  499. polyrob-1.6.0/surfaces/telegram/harness.py +2911 -0
  500. polyrob-1.6.0/surfaces/telegram/identity_ops.py +175 -0
  501. polyrob-1.6.0/surfaces/telegram/interactive_tools.py +87 -0
  502. polyrob-1.6.0/surfaces/telegram/job_ops.py +250 -0
  503. polyrob-1.6.0/surfaces/telegram/lifecycle_ops.py +182 -0
  504. polyrob-1.6.0/surfaces/telegram/media.py +228 -0
  505. polyrob-1.6.0/surfaces/telegram/nft_ops.py +262 -0
  506. polyrob-1.6.0/surfaces/telegram/owner_ops.py +1037 -0
  507. polyrob-1.6.0/surfaces/telegram/pay_ops.py +118 -0
  508. polyrob-1.6.0/surfaces/telegram/prefs_ops.py +256 -0
  509. polyrob-1.6.0/surfaces/telegram/send_ops.py +269 -0
  510. polyrob-1.6.0/surfaces/telegram/skills_ops.py +53 -0
  511. polyrob-1.6.0/surfaces/telegram/status_ops.py +255 -0
  512. polyrob-1.6.0/surfaces/telegram/token_ops.py +317 -0
  513. polyrob-1.6.0/surfaces/telegram/usage_ops.py +46 -0
  514. polyrob-1.6.0/tests/test_autonomy_control_ratchet.py +107 -0
  515. polyrob-1.6.0/tests/test_board_create_grant_ratchet.py +75 -0
  516. polyrob-1.6.0/tests/test_constants_shim_ratchet.py +72 -0
  517. polyrob-1.6.0/tests/test_file_size_ratchet.py +222 -0
  518. polyrob-1.6.0/tests/test_flag_count_ratchet.py +80 -0
  519. polyrob-1.6.0/tests/test_foundation_order_ratchet.py +147 -0
  520. polyrob-1.6.0/tests/test_layering_ratchet.py +530 -0
  521. polyrob-1.6.0/tests/test_limit_single_source_ratchet.py +101 -0
  522. polyrob-1.6.0/tests/test_numeric_env_parse_ratchet.py +62 -0
  523. polyrob-1.6.0/tests/test_operator_pin_reader_ratchet.py +53 -0
  524. polyrob-1.6.0/tests/test_path_ratchet.py +213 -0
  525. polyrob-1.6.0/tests/test_prompt_surface_golden.py +116 -0
  526. polyrob-1.6.0/tests/test_remedy_grammar_ratchet.py +71 -0
  527. polyrob-1.6.0/tests/test_schema_version.py +75 -0
  528. polyrob-1.6.0/tests/test_status_silence_ratchet.py +151 -0
  529. polyrob-1.6.0/tests/test_step_budget_ratchet.py +59 -0
  530. polyrob-1.6.0/tests/test_supply_format_ratchet.py +49 -0
  531. polyrob-1.6.0/tests/test_verb_kind_drift_ratchet.py +86 -0
  532. polyrob-1.6.0/tools/agent_nft/guarded.py +118 -0
  533. polyrob-1.6.0/tools/agent_nft/reveal.py +283 -0
  534. polyrob-1.6.0/tools/agent_nft/tool.py +433 -0
  535. polyrob-1.6.0/tools/agent_nft/withdraw.py +211 -0
  536. polyrob-1.6.0/tools/alchemy/alchemy_tool.py +393 -0
  537. polyrob-1.6.0/tools/base_tool.py +526 -0
  538. polyrob-1.6.0/tools/browser/browser.py +1602 -0
  539. polyrob-1.6.0/tools/browser/nav_schemes.py +40 -0
  540. polyrob-1.6.0/tools/code_exec/sandbox_guard.py +161 -0
  541. polyrob-1.6.0/tools/code_exec/tool.py +380 -0
  542. polyrob-1.6.0/tools/code_exec/tool_rpc.py +558 -0
  543. polyrob-1.6.0/tools/controller/_helpers.py +288 -0
  544. polyrob-1.6.0/tools/controller/action_registration.py +1831 -0
  545. polyrob-1.6.0/tools/controller/agent_status_action.py +251 -0
  546. polyrob-1.6.0/tools/controller/approval.py +585 -0
  547. polyrob-1.6.0/tools/controller/approval_queue.py +1442 -0
  548. polyrob-1.6.0/tools/controller/autonomy_control_action.py +143 -0
  549. polyrob-1.6.0/tools/controller/avatar_action.py +199 -0
  550. polyrob-1.6.0/tools/controller/card_actions.py +358 -0
  551. polyrob-1.6.0/tools/controller/command_guard_hook.py +330 -0
  552. polyrob-1.6.0/tools/controller/delegation.py +208 -0
  553. polyrob-1.6.0/tools/controller/doc_authoring.py +525 -0
  554. polyrob-1.6.0/tools/controller/effect_hooks.py +191 -0
  555. polyrob-1.6.0/tools/controller/execution.py +1002 -0
  556. polyrob-1.6.0/tools/controller/mcp_registrar.py +256 -0
  557. polyrob-1.6.0/tools/controller/message_send.py +654 -0
  558. polyrob-1.6.0/tools/controller/owner_ask_action.py +344 -0
  559. polyrob-1.6.0/tools/controller/policy_chain.py +485 -0
  560. polyrob-1.6.0/tools/controller/registry/arg_cleanup.py +24 -0
  561. polyrob-1.6.0/tools/controller/registry/service.py +1551 -0
  562. polyrob-1.6.0/tools/controller/room_moderate_action.py +361 -0
  563. polyrob-1.6.0/tools/controller/room_read_action.py +263 -0
  564. polyrob-1.6.0/tools/controller/self_transfer.py +41 -0
  565. polyrob-1.6.0/tools/controller/send_message_route.py +129 -0
  566. polyrob-1.6.0/tools/controller/skill_manage.py +194 -0
  567. polyrob-1.6.0/tools/controller/tool_call_bridge.py +192 -0
  568. polyrob-1.6.0/tools/controller/tool_error_class.py +69 -0
  569. polyrob-1.6.0/tools/controller/tool_load_report.py +168 -0
  570. polyrob-1.6.0/tools/controller/tool_management.py +475 -0
  571. polyrob-1.6.0/tools/controller/tool_search_actions.py +80 -0
  572. polyrob-1.6.0/tools/controller/views.py +474 -0
  573. polyrob-1.6.0/tools/controller/worker_manage_action.py +121 -0
  574. polyrob-1.6.0/tools/cronjob_tools.py +731 -0
  575. polyrob-1.6.0/tools/dapp_browser/bridge.py +799 -0
  576. polyrob-1.6.0/tools/dapp_browser/tool.py +452 -0
  577. polyrob-1.6.0/tools/defi/approve_verb.py +186 -0
  578. polyrob-1.6.0/tools/defi/book.py +373 -0
  579. polyrob-1.6.0/tools/defi/bridge_verb.py +1076 -0
  580. polyrob-1.6.0/tools/defi/buy_screen.py +104 -0
  581. polyrob-1.6.0/tools/defi/call_verb.py +433 -0
  582. polyrob-1.6.0/tools/defi/data_holdings.py +540 -0
  583. polyrob-1.6.0/tools/defi/data_params.py +171 -0
  584. polyrob-1.6.0/tools/defi/data_reconcile.py +273 -0
  585. polyrob-1.6.0/tools/defi/data_tool.py +1331 -0
  586. polyrob-1.6.0/tools/defi/deploy_verb.py +551 -0
  587. polyrob-1.6.0/tools/defi/identity_gate.py +398 -0
  588. polyrob-1.6.0/tools/defi/lp_v4_verbs.py +198 -0
  589. polyrob-1.6.0/tools/defi/lp_verbs.py +447 -0
  590. polyrob-1.6.0/tools/defi/pool_metrics.py +176 -0
  591. polyrob-1.6.0/tools/defi/positions_view.py +280 -0
  592. polyrob-1.6.0/tools/defi/price_sources.py +236 -0
  593. polyrob-1.6.0/tools/defi/providers/geckoterminal.py +699 -0
  594. polyrob-1.6.0/tools/defi/providers/relay_bridge.py +406 -0
  595. polyrob-1.6.0/tools/defi/providers/routes/lifi.py +198 -0
  596. polyrob-1.6.0/tools/defi/reconcile.py +379 -0
  597. polyrob-1.6.0/tools/defi/refusal_repeat.py +82 -0
  598. polyrob-1.6.0/tools/defi/send_order.py +160 -0
  599. polyrob-1.6.0/tools/defi/solana_send_verb.py +579 -0
  600. polyrob-1.6.0/tools/defi/solana_swap_verb.py +783 -0
  601. polyrob-1.6.0/tools/defi/spl_deploy_verb.py +418 -0
  602. polyrob-1.6.0/tools/defi/swap_verb.py +370 -0
  603. polyrob-1.6.0/tools/defi/trade_params.py +409 -0
  604. polyrob-1.6.0/tools/defi/trade_tool.py +1376 -0
  605. polyrob-1.6.0/tools/defi/transfer_verb.py +231 -0
  606. polyrob-1.6.0/tools/defi/wrap_verb.py +306 -0
  607. polyrob-1.6.0/tools/descriptors.py +384 -0
  608. polyrob-1.6.0/tools/email_providers/mime.py +312 -0
  609. polyrob-1.6.0/tools/email_tool.py +1252 -0
  610. polyrob-1.6.0/tools/filesystem.py +1469 -0
  611. polyrob-1.6.0/tools/filesystem_docproc.py +349 -0
  612. polyrob-1.6.0/tools/goal_tools.py +1044 -0
  613. polyrob-1.6.0/tools/intel/model.py +115 -0
  614. polyrob-1.6.0/tools/intel/price.py +403 -0
  615. polyrob-1.6.0/tools/late_tool_mode.py +55 -0
  616. polyrob-1.6.0/tools/launchpad/execute.py +280 -0
  617. polyrob-1.6.0/tools/launchpad/pons.py +430 -0
  618. polyrob-1.6.0/tools/launchpad/tool.py +730 -0
  619. polyrob-1.6.0/tools/mcp/config.py +357 -0
  620. polyrob-1.6.0/tools/mcp/mcp_tool.py +1456 -0
  621. polyrob-1.6.0/tools/publish/tool.py +225 -0
  622. polyrob-1.6.0/tools/task_tool.py +637 -0
  623. polyrob-1.6.0/tools/tool_disclosure.py +469 -0
  624. polyrob-1.6.0/tools/tool_search.py +295 -0
  625. polyrob-1.6.0/tools/x402/real_client.py +1096 -0
  626. polyrob-1.6.0/tools/x402/service.py +579 -0
  627. polyrob-1.6.0/tools/x402/spend_gate.py +106 -0
  628. polyrob-1.6.0/webview/contributions.py +64 -0
  629. polyrob-1.6.0/webview/copy/en.py +1356 -0
  630. polyrob-1.6.0/webview/inbox.py +387 -0
  631. polyrob-1.6.0/webview/job_routes.py +73 -0
  632. polyrob-1.6.0/webview/pages.py +1818 -0
  633. polyrob-1.6.0/webview/pages_new.py +1827 -0
  634. polyrob-1.6.0/webview/static/app/transcript.js +974 -0
  635. polyrob-1.6.0/webview/static/app/verbs.en.json +430 -0
  636. polyrob-1.6.0/webview/static/app/work-create.js +91 -0
  637. polyrob-1.6.0/webview/static/app/work-now.js +661 -0
  638. polyrob-1.6.0/webview/static/css/style.css +4253 -0
  639. polyrob-1.6.0/webview/static/js/admin/user_detail.js +391 -0
  640. polyrob-1.6.0/webview/templates/admin/user_detail.html +224 -0
  641. polyrob-1.6.0/webview/templates/inbox.html +165 -0
  642. polyrob-1.6.0/webview/templates/signin.html +85 -0
  643. polyrob-1.6.0/webview/templates/work.html +288 -0
  644. polyrob-1.6.0/webview/webgate.py +512 -0
  645. polyrob-1.4.0/MANIFEST.in +0 -25
  646. polyrob-1.4.0/PKG-INFO +0 -639
  647. polyrob-1.4.0/README.md +0 -521
  648. polyrob-1.4.0/agents/README.md +0 -444
  649. polyrob-1.4.0/agents/prompt/__init__.py +0 -46
  650. polyrob-1.4.0/agents/task/agent/agent_state.py +0 -411
  651. polyrob-1.4.0/agents/task/agent/async_delegation.py +0 -340
  652. polyrob-1.4.0/agents/task/agent/autonomy_state.py +0 -521
  653. polyrob-1.4.0/agents/task/agent/conversation.py +0 -88
  654. polyrob-1.4.0/agents/task/agent/core/background_review.py +0 -266
  655. polyrob-1.4.0/agents/task/agent/core/construction.py +0 -1365
  656. polyrob-1.4.0/agents/task/agent/core/construction_helpers.py +0 -319
  657. polyrob-1.4.0/agents/task/agent/core/correspondent_gate.py +0 -351
  658. polyrob-1.4.0/agents/task/agent/core/curator.py +0 -414
  659. polyrob-1.4.0/agents/task/agent/core/env_context.py +0 -121
  660. polyrob-1.4.0/agents/task/agent/core/episodic_digest.py +0 -109
  661. polyrob-1.4.0/agents/task/agent/core/history_io.py +0 -275
  662. polyrob-1.4.0/agents/task/agent/core/live_health.py +0 -73
  663. polyrob-1.4.0/agents/task/agent/core/llm_provisioning.py +0 -259
  664. polyrob-1.4.0/agents/task/agent/core/logging_io.py +0 -272
  665. polyrob-1.4.0/agents/task/agent/core/memory_prefetch.py +0 -419
  666. polyrob-1.4.0/agents/task/agent/core/memory_writer.py +0 -454
  667. polyrob-1.4.0/agents/task/agent/core/next_action_internal.py +0 -1625
  668. polyrob-1.4.0/agents/task/agent/core/output_truncation.py +0 -131
  669. polyrob-1.4.0/agents/task/agent/core/owner_thread_inject.py +0 -164
  670. polyrob-1.4.0/agents/task/agent/core/project_context.py +0 -387
  671. polyrob-1.4.0/agents/task/agent/core/result_budget.py +0 -118
  672. polyrob-1.4.0/agents/task/agent/core/result_offload.py +0 -462
  673. polyrob-1.4.0/agents/task/agent/core/result_processing.py +0 -541
  674. polyrob-1.4.0/agents/task/agent/core/run_budget.py +0 -80
  675. polyrob-1.4.0/agents/task/agent/core/run_loop.py +0 -783
  676. polyrob-1.4.0/agents/task/agent/core/safety_lifecycle.py +0 -237
  677. polyrob-1.4.0/agents/task/agent/core/self_wake.py +0 -289
  678. polyrob-1.4.0/agents/task/agent/core/step.py +0 -978
  679. polyrob-1.4.0/agents/task/agent/core/step_execution.py +0 -462
  680. polyrob-1.4.0/agents/task/agent/core/tool_availability.py +0 -129
  681. polyrob-1.4.0/agents/task/agent/core/user_ingress.py +0 -436
  682. polyrob-1.4.0/agents/task/agent/message_manager/service.py +0 -1030
  683. polyrob-1.4.0/agents/task/agent/messages/compactor.py +0 -902
  684. polyrob-1.4.0/agents/task/agent/messages/filters.py +0 -518
  685. polyrob-1.4.0/agents/task/agent/messages/foundation_layers.py +0 -197
  686. polyrob-1.4.0/agents/task/agent/messages/foundation_replay.py +0 -244
  687. polyrob-1.4.0/agents/task/agent/messages/guidance.py +0 -351
  688. polyrob-1.4.0/agents/task/agent/messages/retrieval.py +0 -701
  689. polyrob-1.4.0/agents/task/agent/messages/token_counter.py +0 -748
  690. polyrob-1.4.0/agents/task/agent/profile_manager.py +0 -186
  691. polyrob-1.4.0/agents/task/agent/profile_registry.py +0 -155
  692. polyrob-1.4.0/agents/task/agent/profile_store.py +0 -602
  693. polyrob-1.4.0/agents/task/agent/prompts.py +0 -1663
  694. polyrob-1.4.0/agents/task/agent/skill_discovery.py +0 -110
  695. polyrob-1.4.0/agents/task/agent/skill_frontmatter.py +0 -94
  696. polyrob-1.4.0/agents/task/agent/skill_manager.py +0 -1673
  697. polyrob-1.4.0/agents/task/agent/skill_pins.py +0 -132
  698. polyrob-1.4.0/agents/task/agent/skill_store.py +0 -627
  699. polyrob-1.4.0/agents/task/agent/skill_validation.py +0 -56
  700. polyrob-1.4.0/agents/task/agent/skill_writer.py +0 -700
  701. polyrob-1.4.0/agents/task/agent/sub_agent_manager.py +0 -1310
  702. polyrob-1.4.0/agents/task/billed_request.py +0 -76
  703. polyrob-1.4.0/agents/task/config.py +0 -500
  704. polyrob-1.4.0/agents/task/constants.py +0 -806
  705. polyrob-1.4.0/agents/task/conversation_resume.py +0 -203
  706. polyrob-1.4.0/agents/task/goals/board.py +0 -1292
  707. polyrob-1.4.0/agents/task/goals/board_asks.py +0 -493
  708. polyrob-1.4.0/agents/task/goals/board_deps.py +0 -262
  709. polyrob-1.4.0/agents/task/goals/board_objectives.py +0 -197
  710. polyrob-1.4.0/agents/task/goals/board_planner.py +0 -163
  711. polyrob-1.4.0/agents/task/goals/board_types.py +0 -122
  712. polyrob-1.4.0/agents/task/goals/context.py +0 -223
  713. polyrob-1.4.0/agents/task/goals/dispatcher.py +0 -1676
  714. polyrob-1.4.0/agents/task/goals/escalation.py +0 -156
  715. polyrob-1.4.0/agents/task/goals/goal_run.py +0 -882
  716. polyrob-1.4.0/agents/task/goals/group_service.py +0 -352
  717. polyrob-1.4.0/agents/task/goals/memory_scope.py +0 -122
  718. polyrob-1.4.0/agents/task/goals/planner.py +0 -458
  719. polyrob-1.4.0/agents/task/goals/preflight.py +0 -152
  720. polyrob-1.4.0/agents/task/goals/rail_answers.py +0 -182
  721. polyrob-1.4.0/agents/task/goals/rail_proposals.py +0 -148
  722. polyrob-1.4.0/agents/task/goals/rail_templates.py +0 -165
  723. polyrob-1.4.0/agents/task/goals/rails.py +0 -662
  724. polyrob-1.4.0/agents/task/goals/streams.py +0 -769
  725. polyrob-1.4.0/agents/task/loop_types/registry_views.py +0 -151
  726. polyrob-1.4.0/agents/task/path.py +0 -1071
  727. polyrob-1.4.0/agents/task/robust_parse_config.py +0 -337
  728. polyrob-1.4.0/agents/task/runtime/run_as_session.py +0 -360
  729. polyrob-1.4.0/agents/task/runtime/run_outcome.py +0 -414
  730. polyrob-1.4.0/agents/task/session/cleanup.py +0 -826
  731. polyrob-1.4.0/agents/task/session/execution.py +0 -458
  732. polyrob-1.4.0/agents/task/session/hitl_ingress.py +0 -320
  733. polyrob-1.4.0/agents/task/session_class.py +0 -128
  734. polyrob-1.4.0/agents/task/task_agent_chat.py +0 -569
  735. polyrob-1.4.0/agents/task/task_agent_delivery.py +0 -999
  736. polyrob-1.4.0/agents/task/task_agent_support.py +0 -198
  737. polyrob-1.4.0/agents/task/telemetry/views.py +0 -1001
  738. polyrob-1.4.0/agents/task/tool_defaults.py +0 -206
  739. polyrob-1.4.0/agents/task_agent_lite.py +0 -978
  740. polyrob-1.4.0/api/README.md +0 -746
  741. polyrob-1.4.0/api/TASK_API_DOCS.md +0 -180
  742. polyrob-1.4.0/api/a2a/task_handler.py +0 -1157
  743. polyrob-1.4.0/api/admin_endpoints.py +0 -1531
  744. polyrob-1.4.0/api/models.py +0 -214
  745. polyrob-1.4.0/api/openai_compat/model_map.py +0 -102
  746. polyrob-1.4.0/api/openai_compat/router.py +0 -316
  747. polyrob-1.4.0/api/payment_endpoints.py +0 -432
  748. polyrob-1.4.0/api/skill_endpoints.py +0 -453
  749. polyrob-1.4.0/api/task_http_api.py +0 -1873
  750. polyrob-1.4.0/api/x402_endpoints.py +0 -543
  751. polyrob-1.4.0/cli/_doctor_members.py +0 -43
  752. polyrob-1.4.0/cli/agent_child_gate.py +0 -112
  753. polyrob-1.4.0/cli/attachments.py +0 -38
  754. polyrob-1.4.0/cli/commands/_bootstrap.py +0 -151
  755. polyrob-1.4.0/cli/commands/_lifecycle.py +0 -353
  756. polyrob-1.4.0/cli/commands/chat.py +0 -1108
  757. polyrob-1.4.0/cli/commands/config.py +0 -755
  758. polyrob-1.4.0/cli/commands/cron.py +0 -502
  759. polyrob-1.4.0/cli/commands/dashboard.py +0 -230
  760. polyrob-1.4.0/cli/commands/doctor.py +0 -1468
  761. polyrob-1.4.0/cli/commands/finance.py +0 -57
  762. polyrob-1.4.0/cli/commands/goals.py +0 -670
  763. polyrob-1.4.0/cli/commands/init.py +0 -675
  764. polyrob-1.4.0/cli/commands/kb.py +0 -411
  765. polyrob-1.4.0/cli/commands/knowledge.py +0 -116
  766. polyrob-1.4.0/cli/commands/model.py +0 -193
  767. polyrob-1.4.0/cli/commands/owner.py +0 -1646
  768. polyrob-1.4.0/cli/commands/rails.py +0 -167
  769. polyrob-1.4.0/cli/commands/run.py +0 -542
  770. polyrob-1.4.0/cli/commands/serve.py +0 -60
  771. polyrob-1.4.0/cli/commands/skill_install.py +0 -947
  772. polyrob-1.4.0/cli/commands/skills.py +0 -134
  773. polyrob-1.4.0/cli/commands/soul.py +0 -116
  774. polyrob-1.4.0/cli/commands/surfaces.py +0 -286
  775. polyrob-1.4.0/cli/commands/update.py +0 -825
  776. polyrob-1.4.0/cli/commands/wallet.py +0 -1841
  777. polyrob-1.4.0/cli/commands/workers.py +0 -235
  778. polyrob-1.4.0/cli/config_store.py +0 -321
  779. polyrob-1.4.0/cli/keys.py +0 -103
  780. polyrob-1.4.0/cli/polyrob.py +0 -347
  781. polyrob-1.4.0/cli/ui/commands/h_a23.py +0 -50
  782. polyrob-1.4.0/cli/ui/commands/h_adopt.py +0 -16
  783. polyrob-1.4.0/cli/ui/commands/h_approve.py +0 -197
  784. polyrob-1.4.0/cli/ui/commands/h_autonomy.py +0 -184
  785. polyrob-1.4.0/cli/ui/commands/h_cards.py +0 -210
  786. polyrob-1.4.0/cli/ui/commands/h_config.py +0 -366
  787. polyrob-1.4.0/cli/ui/commands/h_cron.py +0 -249
  788. polyrob-1.4.0/cli/ui/commands/h_gates.py +0 -201
  789. polyrob-1.4.0/cli/ui/commands/h_goal_one.py +0 -57
  790. polyrob-1.4.0/cli/ui/commands/h_goals_view.py +0 -122
  791. polyrob-1.4.0/cli/ui/commands/h_help.py +0 -371
  792. polyrob-1.4.0/cli/ui/commands/h_inbox.py +0 -136
  793. polyrob-1.4.0/cli/ui/commands/h_journey.py +0 -108
  794. polyrob-1.4.0/cli/ui/commands/h_money_verbs.py +0 -155
  795. polyrob-1.4.0/cli/ui/commands/h_owner.py +0 -455
  796. polyrob-1.4.0/cli/ui/commands/h_pending.py +0 -124
  797. polyrob-1.4.0/cli/ui/commands/h_rail.py +0 -46
  798. polyrob-1.4.0/cli/ui/commands/h_skills.py +0 -324
  799. polyrob-1.4.0/cli/ui/commands/handlers.py +0 -1741
  800. polyrob-1.4.0/cli/ui/dialog.py +0 -392
  801. polyrob-1.4.0/cli/ui/events.py +0 -567
  802. polyrob-1.4.0/cli/ui/first_run_notice.py +0 -117
  803. polyrob-1.4.0/cli/ui/persistent_loop.py +0 -204
  804. polyrob-1.4.0/cli/ui/plain_renderer.py +0 -396
  805. polyrob-1.4.0/cli/ui/renderer.py +0 -518
  806. polyrob-1.4.0/cli/ui/rich_renderer.py +0 -544
  807. polyrob-1.4.0/cli/ui/state.py +0 -503
  808. polyrob-1.4.0/cli/update/context.py +0 -149
  809. polyrob-1.4.0/cli/update/snapshot.py +0 -288
  810. polyrob-1.4.0/config/.env.development.template +0 -291
  811. polyrob-1.4.0/core/activity_class.py +0 -164
  812. polyrob-1.4.0/core/activity_evidence.py +0 -87
  813. polyrob-1.4.0/core/autonomy_control.py +0 -631
  814. polyrob-1.4.0/core/autonomy_marker.py +0 -121
  815. polyrob-1.4.0/core/config.py +0 -737
  816. polyrob-1.4.0/core/config_policy/__init__.py +0 -55
  817. polyrob-1.4.0/core/config_policy/autonomy_config.py +0 -504
  818. polyrob-1.4.0/core/config_policy/capability_toggles.py +0 -407
  819. polyrob-1.4.0/core/config_policy/goal_flags.py +0 -156
  820. polyrob-1.4.0/core/config_policy/local_profile.py +0 -108
  821. polyrob-1.4.0/core/config_policy/members.py +0 -382
  822. polyrob-1.4.0/core/config_policy/money_regime.py +0 -102
  823. polyrob-1.4.0/core/config_policy/policy.py +0 -119
  824. polyrob-1.4.0/core/config_policy/profiles.py +0 -184
  825. polyrob-1.4.0/core/config_policy/retired_flags.py +0 -160
  826. polyrob-1.4.0/core/config_policy/rigs.py +0 -252
  827. polyrob-1.4.0/core/config_policy/spend_lane.py +0 -262
  828. polyrob-1.4.0/core/config_service.py +0 -765
  829. polyrob-1.4.0/core/context_fences.py +0 -125
  830. polyrob-1.4.0/core/credit_sentinel.py +0 -384
  831. polyrob-1.4.0/core/db_manifest.py +0 -260
  832. polyrob-1.4.0/core/doc_age.py +0 -114
  833. polyrob-1.4.0/core/doc_claims.py +0 -390
  834. polyrob-1.4.0/core/effects.py +0 -354
  835. polyrob-1.4.0/core/env_file.py +0 -150
  836. polyrob-1.4.0/core/event_kinds.py +0 -243
  837. polyrob-1.4.0/core/flags.py +0 -225
  838. polyrob-1.4.0/core/flags_catalog.py +0 -1429
  839. polyrob-1.4.0/core/goal_board_render.py +0 -188
  840. polyrob-1.4.0/core/goal_legibility.py +0 -131
  841. polyrob-1.4.0/core/goal_suppressions.py +0 -193
  842. polyrob-1.4.0/core/goal_vocab.py +0 -86
  843. polyrob-1.4.0/core/install_facts.py +0 -124
  844. polyrob-1.4.0/core/lazy_closures/docs.docx.txt +0 -187
  845. polyrob-1.4.0/core/lazy_closures/docs.pdf.txt +0 -7
  846. polyrob-1.4.0/core/lazy_closures/media.gif.txt +0 -235
  847. polyrob-1.4.0/core/lazy_closures/media.qr.txt +0 -10
  848. polyrob-1.4.0/core/lazy_closures/memory.vector.txt +0 -232
  849. polyrob-1.4.0/core/lazy_closures/provider.anthropic.txt +0 -296
  850. polyrob-1.4.0/core/lazy_closures/provider.gemini.txt +0 -594
  851. polyrob-1.4.0/core/lazy_closures/server.api.txt +0 -1678
  852. polyrob-1.4.0/core/lazy_closures/surface.telegram.txt +0 -862
  853. polyrob-1.4.0/core/lazy_closures/tool.anysite.txt +0 -340
  854. polyrob-1.4.0/core/lazy_closures/voice.transcribe.txt +0 -402
  855. polyrob-1.4.0/core/lazy_deps.py +0 -614
  856. polyrob-1.4.0/core/lazy_installer.py +0 -434
  857. polyrob-1.4.0/core/lifecycle.py +0 -672
  858. polyrob-1.4.0/core/llm_auth/flows/device_code.py +0 -139
  859. polyrob-1.4.0/core/logging.py +0 -604
  860. polyrob-1.4.0/core/money/__init__.py +0 -18
  861. polyrob-1.4.0/core/money/classify.py +0 -56
  862. polyrob-1.4.0/core/money/ledger.py +0 -469
  863. polyrob-1.4.0/core/money_verbs.py +0 -108
  864. polyrob-1.4.0/core/open_positions.py +0 -843
  865. polyrob-1.4.0/core/owner_create.py +0 -246
  866. polyrob-1.4.0/core/owner_remedy.py +0 -332
  867. polyrob-1.4.0/core/packs/index.py +0 -278
  868. polyrob-1.4.0/core/packs/manifest.py +0 -354
  869. polyrob-1.4.0/core/path_safety.py +0 -184
  870. polyrob-1.4.0/core/paths.py +0 -67
  871. polyrob-1.4.0/core/payments/assets.py +0 -357
  872. polyrob-1.4.0/core/payments/quote.py +0 -129
  873. polyrob-1.4.0/core/position_ledger.py +0 -208
  874. polyrob-1.4.0/core/prefs.py +0 -1569
  875. polyrob-1.4.0/core/publish.py +0 -451
  876. polyrob-1.4.0/core/recap.py +0 -265
  877. polyrob-1.4.0/core/rules_sweep.py +0 -207
  878. polyrob-1.4.0/core/runtime_config.py +0 -290
  879. polyrob-1.4.0/core/runtime_paths.py +0 -445
  880. polyrob-1.4.0/core/security/browser_rail.py +0 -282
  881. polyrob-1.4.0/core/security/confined_write.py +0 -126
  882. polyrob-1.4.0/core/security/custody_env.py +0 -146
  883. polyrob-1.4.0/core/security/host_execution.py +0 -122
  884. polyrob-1.4.0/core/security/policy_order.py +0 -45
  885. polyrob-1.4.0/core/security/read_taint.py +0 -227
  886. polyrob-1.4.0/core/security/refusal_taint.py +0 -199
  887. polyrob-1.4.0/core/security/refusal_taint_store.py +0 -44
  888. polyrob-1.4.0/core/security/refusals.py +0 -53
  889. polyrob-1.4.0/core/security/secret_guard.py +0 -645
  890. polyrob-1.4.0/core/security/settings.py +0 -173
  891. polyrob-1.4.0/core/security/taints.py +0 -196
  892. polyrob-1.4.0/core/security/turn_facts.py +0 -145
  893. polyrob-1.4.0/core/self_context_writer.py +0 -578
  894. polyrob-1.4.0/core/self_evolution.py +0 -1024
  895. polyrob-1.4.0/core/signer/__init__.py +0 -76
  896. polyrob-1.4.0/core/signer/approvals.py +0 -53
  897. polyrob-1.4.0/core/signer/caps.py +0 -283
  898. polyrob-1.4.0/core/signer/provision.py +0 -118
  899. polyrob-1.4.0/core/signer/review.py +0 -84
  900. polyrob-1.4.0/core/signer/runtime.py +0 -108
  901. polyrob-1.4.0/core/signer/server.py +0 -862
  902. polyrob-1.4.0/core/standing_verbs.py +0 -22
  903. polyrob-1.4.0/core/status_delivery.py +0 -379
  904. polyrob-1.4.0/core/status_economics.py +0 -266
  905. polyrob-1.4.0/core/status_live.py +0 -128
  906. polyrob-1.4.0/core/status_loops.py +0 -496
  907. polyrob-1.4.0/core/status_money.py +0 -496
  908. polyrob-1.4.0/core/status_render.py +0 -270
  909. polyrob-1.4.0/core/status_rules.py +0 -303
  910. polyrob-1.4.0/core/status_snapshot.py +0 -261
  911. polyrob-1.4.0/core/status_types.py +0 -175
  912. polyrob-1.4.0/core/status_work.py +0 -202
  913. polyrob-1.4.0/core/surfaces/cards.py +0 -931
  914. polyrob-1.4.0/core/surfaces/continuity.py +0 -80
  915. polyrob-1.4.0/core/surfaces/conversations.py +0 -366
  916. polyrob-1.4.0/core/surfaces/dispatcher.py +0 -843
  917. polyrob-1.4.0/core/surfaces/inbound_attachments.py +0 -415
  918. polyrob-1.4.0/core/surfaces/inbox.py +0 -199
  919. polyrob-1.4.0/core/surfaces/inbox_render.py +0 -389
  920. polyrob-1.4.0/core/surfaces/missed.py +0 -160
  921. polyrob-1.4.0/core/surfaces/outbound_target.py +0 -168
  922. polyrob-1.4.0/core/surfaces/owner_admin.py +0 -271
  923. polyrob-1.4.0/core/surfaces/owner_intent.py +0 -69
  924. polyrob-1.4.0/core/surfaces/owner_thread.py +0 -627
  925. polyrob-1.4.0/core/surfaces/recap.py +0 -116
  926. polyrob-1.4.0/core/surfaces/room_actions.py +0 -1133
  927. polyrob-1.4.0/core/surfaces/session_policy.py +0 -62
  928. polyrob-1.4.0/core/surfaces/user_delivery.py +0 -1292
  929. polyrob-1.4.0/core/tool_capabilities.py +0 -548
  930. polyrob-1.4.0/core/tool_gates.py +0 -83
  931. polyrob-1.4.0/core/tool_grants.py +0 -306
  932. polyrob-1.4.0/core/verb_policy.py +0 -311
  933. polyrob-1.4.0/core/verb_policy_rows.py +0 -623
  934. polyrob-1.4.0/core/verbs.py +0 -514
  935. polyrob-1.4.0/core/version.py +0 -139
  936. polyrob-1.4.0/core/wake_queue.py +0 -305
  937. polyrob-1.4.0/core/wallet/address_lookalike.py +0 -114
  938. polyrob-1.4.0/core/wallet/bridge_guard.py +0 -636
  939. polyrob-1.4.0/core/wallet/bridge_watcher.py +0 -266
  940. polyrob-1.4.0/core/wallet/broadcast/evm.py +0 -460
  941. polyrob-1.4.0/core/wallet/buy_target.py +0 -315
  942. polyrob-1.4.0/core/wallet/chains.py +0 -631
  943. polyrob-1.4.0/core/wallet/collection_mint.py +0 -251
  944. polyrob-1.4.0/core/wallet/config.py +0 -482
  945. polyrob-1.4.0/core/wallet/deploy_guard.py +0 -431
  946. polyrob-1.4.0/core/wallet/lifi_calldata.py +0 -102
  947. polyrob-1.4.0/core/wallet/signer_envelope.py +0 -234
  948. polyrob-1.4.0/core/wallet/simulation.py +0 -596
  949. polyrob-1.4.0/core/wallet/solana_onchain.py +0 -320
  950. polyrob-1.4.0/core/wallet/solana_simulation.py +0 -313
  951. polyrob-1.4.0/core/wallet/solana_swap_bounds.py +0 -117
  952. polyrob-1.4.0/core/wallet/solana_tx_inspect.py +0 -905
  953. polyrob-1.4.0/core/wallet/submission_journal.py +0 -262
  954. polyrob-1.4.0/core/wallet/token_template.py +0 -291
  955. polyrob-1.4.0/core/wallet/tokens.py +0 -452
  956. polyrob-1.4.0/core/wallet/tx_guard.py +0 -1579
  957. polyrob-1.4.0/core/wallet/tx_guard_steps/context.py +0 -62
  958. polyrob-1.4.0/core/wallet/tx_guard_steps/measure.py +0 -720
  959. polyrob-1.4.0/core/wallet/tx_guard_steps/shape.py +0 -379
  960. polyrob-1.4.0/core/wallet/tx_guard_steps/value.py +0 -402
  961. polyrob-1.4.0/core/wallet/tx_notify.py +0 -396
  962. polyrob-1.4.0/cron/README.md +0 -79
  963. polyrob-1.4.0/cron/credential_preflight.py +0 -193
  964. polyrob-1.4.0/cron/delivery.py +0 -642
  965. polyrob-1.4.0/cron/digest.py +0 -253
  966. polyrob-1.4.0/cron/jobs.py +0 -425
  967. polyrob-1.4.0/cron/owner_rules_overlay.py +0 -62
  968. polyrob-1.4.0/cron/preflight.py +0 -100
  969. polyrob-1.4.0/cron/read_job.py +0 -275
  970. polyrob-1.4.0/cron/remedy_streak.py +0 -171
  971. polyrob-1.4.0/cron/rig_edit.py +0 -91
  972. polyrob-1.4.0/cron/room_service.py +0 -135
  973. polyrob-1.4.0/cron/runner.py +0 -723
  974. polyrob-1.4.0/cron/scheduler.py +0 -409
  975. polyrob-1.4.0/cron/service.py +0 -307
  976. polyrob-1.4.0/cron/stamp_authorship.py +0 -163
  977. polyrob-1.4.0/cron/write_job.py +0 -152
  978. polyrob-1.4.0/data/prompts/skills/adversarial-consensus/SKILL.md +0 -114
  979. polyrob-1.4.0/data/prompts/skills/browser-automation/SKILL.md +0 -55
  980. polyrob-1.4.0/data/prompts/skills/coding-workflow/SKILL.md +0 -47
  981. polyrob-1.4.0/data/prompts/skills/crypto-trading-safety/SKILL.md +0 -84
  982. polyrob-1.4.0/data/prompts/skills/dca/SKILL.md +0 -84
  983. polyrob-1.4.0/data/prompts/skills/defi-bridge/SKILL.md +0 -128
  984. polyrob-1.4.0/data/prompts/skills/defi-liquidity/SKILL.md +0 -63
  985. polyrob-1.4.0/data/prompts/skills/document-writing/SKILL.md +0 -33
  986. polyrob-1.4.0/data/prompts/skills/email-comms/SKILL.md +0 -39
  987. polyrob-1.4.0/data/prompts/skills/exits/SKILL.md +0 -107
  988. polyrob-1.4.0/data/prompts/skills/file-data-ops/SKILL.md +0 -35
  989. polyrob-1.4.0/data/prompts/skills/incident-response/SKILL.md +0 -135
  990. polyrob-1.4.0/data/prompts/skills/market-research-brief/SKILL.md +0 -104
  991. polyrob-1.4.0/data/prompts/skills/memecoin-scouting/SKILL.md +0 -247
  992. polyrob-1.4.0/data/prompts/skills/person-analyzer/SKILL.md +0 -124
  993. polyrob-1.4.0/data/prompts/skills/polyrob-user-guide/SKILL.md +0 -239
  994. polyrob-1.4.0/data/prompts/skills/polyrob-user-guide/references/autonomy.md +0 -94
  995. polyrob-1.4.0/data/prompts/skills/polyrob-user-guide/references/configuration.md +0 -709
  996. polyrob-1.4.0/data/prompts/skills/polyrob-user-guide/references/money-and-safety.md +0 -132
  997. polyrob-1.4.0/data/prompts/skills/polyrob-user-guide/references/skills-and-learning.md +0 -93
  998. polyrob-1.4.0/data/prompts/skills/polyrob-user-guide/references/surfaces.md +0 -125
  999. polyrob-1.4.0/data/prompts/skills/polyrob-user-guide/references/wallet-and-identity.md +0 -158
  1000. polyrob-1.4.0/data/prompts/skills/position-journal/SKILL.md +0 -102
  1001. polyrob-1.4.0/data/prompts/skills/post-trade-verify/SKILL.md +0 -85
  1002. polyrob-1.4.0/data/prompts/skills/pre-trade-check/SKILL.md +0 -83
  1003. polyrob-1.4.0/data/prompts/skills/presentation-creator/SKILL.md +0 -36
  1004. polyrob-1.4.0/data/prompts/skills/project-analyzer/SKILL.md +0 -169
  1005. polyrob-1.4.0/data/prompts/skills/robinhood-chain/SKILL.md +0 -124
  1006. polyrob-1.4.0/data/prompts/skills/rules.json +0 -1095
  1007. polyrob-1.4.0/data/prompts/skills/secret-handling/SKILL.md +0 -32
  1008. polyrob-1.4.0/data/prompts/skills/self-deploy/SKILL.md +0 -175
  1009. polyrob-1.4.0/data/prompts/skills/sizing-and-risk/SKILL.md +0 -101
  1010. polyrob-1.4.0/data/prompts/skills/skill-authoring/SKILL.md +0 -34
  1011. polyrob-1.4.0/data/prompts/skills/skill-security-review/SKILL.md +0 -54
  1012. polyrob-1.4.0/data/prompts/skills/stable-cash/SKILL.md +0 -55
  1013. polyrob-1.4.0/data/prompts/skills/task-planning/SKILL.md +0 -33
  1014. polyrob-1.4.0/data/prompts/skills/token-identity/SKILL.md +0 -157
  1015. polyrob-1.4.0/data/prompts/skills/token-launch/SKILL.md +0 -176
  1016. polyrob-1.4.0/data/prompts/skills/trade-execution/SKILL.md +0 -112
  1017. polyrob-1.4.0/data/prompts/skills/treasury-trading/SKILL.md +0 -496
  1018. polyrob-1.4.0/data/prompts/skills/verified-tooling/SKILL.md +0 -61
  1019. polyrob-1.4.0/data/prompts/skills/web-research/SKILL.md +0 -41
  1020. polyrob-1.4.0/data/prompts/skills/x402-pay/SKILL.md +0 -90
  1021. polyrob-1.4.0/docs/CONFIGURATION.md +0 -1403
  1022. polyrob-1.4.0/docs/guide/api.md +0 -668
  1023. polyrob-1.4.0/docs/guide/architecture.md +0 -251
  1024. polyrob-1.4.0/docs/guide/cli.md +0 -927
  1025. polyrob-1.4.0/docs/guide/configuration.md +0 -796
  1026. polyrob-1.4.0/docs/guide/console.md +0 -206
  1027. polyrob-1.4.0/docs/guide/conversation.md +0 -64
  1028. polyrob-1.4.0/docs/guide/getting-started.md +0 -434
  1029. polyrob-1.4.0/docs/guide/groups.md +0 -612
  1030. polyrob-1.4.0/docs/guide/migration/from-hermes.md +0 -224
  1031. polyrob-1.4.0/docs/guide/migration/from-openclaw.md +0 -228
  1032. polyrob-1.4.0/docs/guide/owner-controls.md +0 -414
  1033. polyrob-1.4.0/docs/guide/payments.md +0 -1524
  1034. polyrob-1.4.0/docs/guide/security-model.md +0 -618
  1035. polyrob-1.4.0/docs/guide/skills.md +0 -317
  1036. polyrob-1.4.0/docs/guide/streams.md +0 -374
  1037. polyrob-1.4.0/docs/guide/x-twitter.md +0 -176
  1038. polyrob-1.4.0/migrations/migrate.py +0 -281
  1039. polyrob-1.4.0/migrations/versions/v1_2_0_den_token_bonuses.py +0 -88
  1040. polyrob-1.4.0/modules/auth/identity_mapper.py +0 -336
  1041. polyrob-1.4.0/modules/auth/tier_manager.py +0 -175
  1042. polyrob-1.4.0/modules/cards/cards.py +0 -392
  1043. polyrob-1.4.0/modules/credits/__init__.py +0 -26
  1044. polyrob-1.4.0/modules/credits/balance_manager.py +0 -271
  1045. polyrob-1.4.0/modules/credits/balances.py +0 -81
  1046. polyrob-1.4.0/modules/credits/pricing.py +0 -256
  1047. polyrob-1.4.0/modules/credits/usage_tracker.py +0 -865
  1048. polyrob-1.4.0/modules/database/auth_tables.py +0 -361
  1049. polyrob-1.4.0/modules/llm/adapters.py +0 -1123
  1050. polyrob-1.4.0/modules/llm/aux_metering.py +0 -178
  1051. polyrob-1.4.0/modules/llm/llm_client.py +0 -955
  1052. polyrob-1.4.0/modules/llm/llm_client_registry.py +0 -301
  1053. polyrob-1.4.0/modules/llm/llm_manager.py +0 -858
  1054. polyrob-1.4.0/modules/llm/model_catalog.py +0 -1591
  1055. polyrob-1.4.0/modules/llm/openrouter_client.py +0 -958
  1056. polyrob-1.4.0/modules/llm/openrouter_routing.py +0 -65
  1057. polyrob-1.4.0/modules/llm/prefix_stamp.py +0 -105
  1058. polyrob-1.4.0/modules/llm/profiles.py +0 -607
  1059. polyrob-1.4.0/modules/memory/episodic.py +0 -125
  1060. polyrob-1.4.0/modules/memory/fts_terms.py +0 -33
  1061. polyrob-1.4.0/modules/memory/local_vector_memory_provider.py +0 -696
  1062. polyrob-1.4.0/modules/memory/registry.py +0 -273
  1063. polyrob-1.4.0/modules/memory/retention.py +0 -166
  1064. polyrob-1.4.0/modules/memory/sqlite_curated_store.py +0 -357
  1065. polyrob-1.4.0/modules/memory/sqlite_episodes_store.py +0 -229
  1066. polyrob-1.4.0/modules/memory/sqlite_memory_provider.py +0 -466
  1067. polyrob-1.4.0/modules/memory/sqlite_scope_store.py +0 -285
  1068. polyrob-1.4.0/modules/memory/storage_limits.py +0 -73
  1069. polyrob-1.4.0/modules/memory/task/hierarchical_memory.py +0 -787
  1070. polyrob-1.4.0/modules/memory/task/phase_manager.py +0 -567
  1071. polyrob-1.4.0/modules/memory/task/reflection_service.py +0 -157
  1072. polyrob-1.4.0/modules/memory/task/task_context_manager.py +0 -1110
  1073. polyrob-1.4.0/modules/memory/write_filter.py +0 -185
  1074. polyrob-1.4.0/modules/skills/skill_usage.py +0 -254
  1075. polyrob-1.4.0/modules/x402/artifact.py +0 -262
  1076. polyrob-1.4.0/modules/x402/facilitator.py +0 -82
  1077. polyrob-1.4.0/modules/x402/invoice_assets.py +0 -208
  1078. polyrob-1.4.0/modules/x402/invoicing.py +0 -1127
  1079. polyrob-1.4.0/modules/x402/middleware.py +0 -628
  1080. polyrob-1.4.0/modules/x402/settlement_holds.py +0 -49
  1081. polyrob-1.4.0/modules/x402/settlement_scan.py +0 -1039
  1082. polyrob-1.4.0/modules/x402/solana_settlement.py +0 -164
  1083. polyrob-1.4.0/packs/discovery/polyrob_discovery/skills/lead-research/SKILL.md +0 -86
  1084. polyrob-1.4.0/packs/discovery/polyrob_discovery/skills/rules.json +0 -62
  1085. polyrob-1.4.0/packs/discovery/polyrob_discovery/skills/web-scraping/SKILL.md +0 -73
  1086. polyrob-1.4.0/packs/markets/polyrob_markets/pack.toml +0 -229
  1087. polyrob-1.4.0/packs/markets/polyrob_markets/skills/hyperliquid-account-review/SKILL.md +0 -53
  1088. polyrob-1.4.0/packs/markets/polyrob_markets/skills/hyperliquid-market-data/SKILL.md +0 -52
  1089. polyrob-1.4.0/packs/markets/polyrob_markets/skills/hyperliquid-trading/SKILL.md +0 -113
  1090. polyrob-1.4.0/packs/markets/polyrob_markets/skills/polymarket-market-research/SKILL.md +0 -57
  1091. polyrob-1.4.0/packs/markets/polyrob_markets/skills/polymarket-portfolio-review/SKILL.md +0 -59
  1092. polyrob-1.4.0/packs/markets/polyrob_markets/skills/polymarket-trading/SKILL.md +0 -95
  1093. polyrob-1.4.0/packs/markets/polyrob_markets/skills/rules.json +0 -169
  1094. polyrob-1.4.0/packs/x/polyrob_x/gate_reason.py +0 -56
  1095. polyrob-1.4.0/packs/x/polyrob_x/pack.toml +0 -160
  1096. polyrob-1.4.0/packs/x/polyrob_x/registration.py +0 -64
  1097. polyrob-1.4.0/packs/x/polyrob_x/skills/rules.json +0 -100
  1098. polyrob-1.4.0/packs/x/polyrob_x/skills/social-discovery/SKILL.md +0 -60
  1099. polyrob-1.4.0/packs/x/polyrob_x/skills/x-engagement/SKILL.md +0 -153
  1100. polyrob-1.4.0/packs/x/polyrob_x/twitter_tool.py +0 -2820
  1101. polyrob-1.4.0/polyrob/app/autonomy_runtime.py +0 -1291
  1102. polyrob-1.4.0/polyrob/app/bootstrap.py +0 -793
  1103. polyrob-1.4.0/polyrob/sdk.py +0 -98
  1104. polyrob-1.4.0/polyrob.egg-info/PKG-INFO +0 -639
  1105. polyrob-1.4.0/polyrob.egg-info/SOURCES.txt +0 -1834
  1106. polyrob-1.4.0/polyrob.egg-info/requires.txt +0 -121
  1107. polyrob-1.4.0/pyproject.toml +0 -180
  1108. polyrob-1.4.0/requirements.lock +0 -5315
  1109. polyrob-1.4.0/surfaces/email/inbound.py +0 -240
  1110. polyrob-1.4.0/surfaces/inbox_sources.py +0 -285
  1111. polyrob-1.4.0/surfaces/telegram/admin_verbs.py +0 -428
  1112. polyrob-1.4.0/surfaces/telegram/adopt_ops.py +0 -265
  1113. polyrob-1.4.0/surfaces/telegram/approval_ops.py +0 -307
  1114. polyrob-1.4.0/surfaces/telegram/card_ops.py +0 -220
  1115. polyrob-1.4.0/surfaces/telegram/claim_ops.py +0 -91
  1116. polyrob-1.4.0/surfaces/telegram/group_ops.py +0 -1033
  1117. polyrob-1.4.0/surfaces/telegram/harness.py +0 -2925
  1118. polyrob-1.4.0/surfaces/telegram/identity_ops.py +0 -173
  1119. polyrob-1.4.0/surfaces/telegram/interactive_tools.py +0 -116
  1120. polyrob-1.4.0/surfaces/telegram/lifecycle_ops.py +0 -181
  1121. polyrob-1.4.0/surfaces/telegram/media.py +0 -219
  1122. polyrob-1.4.0/surfaces/telegram/nft_ops.py +0 -260
  1123. polyrob-1.4.0/surfaces/telegram/owner_ops.py +0 -1230
  1124. polyrob-1.4.0/surfaces/telegram/pay_ops.py +0 -115
  1125. polyrob-1.4.0/surfaces/telegram/prefs_ops.py +0 -144
  1126. polyrob-1.4.0/surfaces/telegram/rail_ops.py +0 -439
  1127. polyrob-1.4.0/surfaces/telegram/send_ops.py +0 -386
  1128. polyrob-1.4.0/surfaces/telegram/status_ops.py +0 -253
  1129. polyrob-1.4.0/surfaces/telegram/token_ops.py +0 -297
  1130. polyrob-1.4.0/tests/test_autonomy_control_ratchet.py +0 -108
  1131. polyrob-1.4.0/tests/test_board_create_grant_ratchet.py +0 -76
  1132. polyrob-1.4.0/tests/test_constants_shim_ratchet.py +0 -72
  1133. polyrob-1.4.0/tests/test_file_size_ratchet.py +0 -225
  1134. polyrob-1.4.0/tests/test_flag_count_ratchet.py +0 -80
  1135. polyrob-1.4.0/tests/test_foundation_order_ratchet.py +0 -136
  1136. polyrob-1.4.0/tests/test_layering_ratchet.py +0 -533
  1137. polyrob-1.4.0/tests/test_limit_single_source_ratchet.py +0 -100
  1138. polyrob-1.4.0/tests/test_numeric_env_parse_ratchet.py +0 -62
  1139. polyrob-1.4.0/tests/test_operator_pin_reader_ratchet.py +0 -52
  1140. polyrob-1.4.0/tests/test_path_ratchet.py +0 -212
  1141. polyrob-1.4.0/tests/test_remedy_grammar_ratchet.py +0 -74
  1142. polyrob-1.4.0/tests/test_schema_version.py +0 -60
  1143. polyrob-1.4.0/tests/test_status_silence_ratchet.py +0 -130
  1144. polyrob-1.4.0/tests/test_verb_kind_drift_ratchet.py +0 -86
  1145. polyrob-1.4.0/tools/agent_nft/guarded.py +0 -118
  1146. polyrob-1.4.0/tools/agent_nft/reveal.py +0 -282
  1147. polyrob-1.4.0/tools/agent_nft/tool.py +0 -433
  1148. polyrob-1.4.0/tools/agent_nft/withdraw.py +0 -210
  1149. polyrob-1.4.0/tools/alchemy/alchemy_tool.py +0 -393
  1150. polyrob-1.4.0/tools/base_tool.py +0 -528
  1151. polyrob-1.4.0/tools/browser/browser.py +0 -1604
  1152. polyrob-1.4.0/tools/code_exec/sandbox_guard.py +0 -154
  1153. polyrob-1.4.0/tools/code_exec/tool.py +0 -382
  1154. polyrob-1.4.0/tools/code_exec/tool_rpc.py +0 -558
  1155. polyrob-1.4.0/tools/controller/_helpers.py +0 -270
  1156. polyrob-1.4.0/tools/controller/action_registration.py +0 -1969
  1157. polyrob-1.4.0/tools/controller/agent_status_action.py +0 -230
  1158. polyrob-1.4.0/tools/controller/approval.py +0 -555
  1159. polyrob-1.4.0/tools/controller/approval_queue.py +0 -1438
  1160. polyrob-1.4.0/tools/controller/autonomy_control_action.py +0 -143
  1161. polyrob-1.4.0/tools/controller/avatar_action.py +0 -199
  1162. polyrob-1.4.0/tools/controller/card_actions.py +0 -217
  1163. polyrob-1.4.0/tools/controller/command_guard_hook.py +0 -307
  1164. polyrob-1.4.0/tools/controller/delegation.py +0 -208
  1165. polyrob-1.4.0/tools/controller/doc_authoring.py +0 -521
  1166. polyrob-1.4.0/tools/controller/effect_hooks.py +0 -185
  1167. polyrob-1.4.0/tools/controller/execution.py +0 -1001
  1168. polyrob-1.4.0/tools/controller/financial_claim_gate.py +0 -192
  1169. polyrob-1.4.0/tools/controller/mcp_registrar.py +0 -196
  1170. polyrob-1.4.0/tools/controller/message_send.py +0 -654
  1171. polyrob-1.4.0/tools/controller/owner_ask_action.py +0 -352
  1172. polyrob-1.4.0/tools/controller/policy_chain.py +0 -503
  1173. polyrob-1.4.0/tools/controller/refusal_taint_gate.py +0 -197
  1174. polyrob-1.4.0/tools/controller/registry/service.py +0 -1549
  1175. polyrob-1.4.0/tools/controller/room_moderate_action.py +0 -397
  1176. polyrob-1.4.0/tools/controller/room_read_action.py +0 -277
  1177. polyrob-1.4.0/tools/controller/self_transfer.py +0 -43
  1178. polyrob-1.4.0/tools/controller/send_message_route.py +0 -106
  1179. polyrob-1.4.0/tools/controller/tool_call_bridge.py +0 -167
  1180. polyrob-1.4.0/tools/controller/tool_load_report.py +0 -169
  1181. polyrob-1.4.0/tools/controller/tool_management.py +0 -464
  1182. polyrob-1.4.0/tools/controller/tool_search_actions.py +0 -80
  1183. polyrob-1.4.0/tools/controller/views.py +0 -504
  1184. polyrob-1.4.0/tools/controller/worker_manage_action.py +0 -123
  1185. polyrob-1.4.0/tools/cronjob_tools.py +0 -552
  1186. polyrob-1.4.0/tools/dapp_browser/bridge.py +0 -794
  1187. polyrob-1.4.0/tools/dapp_browser/tool.py +0 -451
  1188. polyrob-1.4.0/tools/defi/approve_verb.py +0 -184
  1189. polyrob-1.4.0/tools/defi/book.py +0 -413
  1190. polyrob-1.4.0/tools/defi/bridge_verb.py +0 -1026
  1191. polyrob-1.4.0/tools/defi/buy_screen.py +0 -51
  1192. polyrob-1.4.0/tools/defi/call_verb.py +0 -336
  1193. polyrob-1.4.0/tools/defi/data_holdings.py +0 -461
  1194. polyrob-1.4.0/tools/defi/data_params.py +0 -175
  1195. polyrob-1.4.0/tools/defi/data_reconcile.py +0 -336
  1196. polyrob-1.4.0/tools/defi/data_tool.py +0 -1338
  1197. polyrob-1.4.0/tools/defi/deploy_verb.py +0 -545
  1198. polyrob-1.4.0/tools/defi/identity_gate.py +0 -397
  1199. polyrob-1.4.0/tools/defi/lp_v4_verbs.py +0 -198
  1200. polyrob-1.4.0/tools/defi/lp_verbs.py +0 -450
  1201. polyrob-1.4.0/tools/defi/pool_metrics.py +0 -176
  1202. polyrob-1.4.0/tools/defi/positions_view.py +0 -356
  1203. polyrob-1.4.0/tools/defi/price_sources.py +0 -224
  1204. polyrob-1.4.0/tools/defi/providers/geckoterminal.py +0 -680
  1205. polyrob-1.4.0/tools/defi/providers/relay_bridge.py +0 -402
  1206. polyrob-1.4.0/tools/defi/providers/routes/lifi.py +0 -195
  1207. polyrob-1.4.0/tools/defi/reconcile.py +0 -478
  1208. polyrob-1.4.0/tools/defi/solana_send_verb.py +0 -545
  1209. polyrob-1.4.0/tools/defi/solana_swap_verb.py +0 -719
  1210. polyrob-1.4.0/tools/defi/spl_deploy_verb.py +0 -405
  1211. polyrob-1.4.0/tools/defi/swap_verb.py +0 -322
  1212. polyrob-1.4.0/tools/defi/trade_params.py +0 -370
  1213. polyrob-1.4.0/tools/defi/trade_tool.py +0 -1364
  1214. polyrob-1.4.0/tools/defi/transfer_verb.py +0 -197
  1215. polyrob-1.4.0/tools/defi/wrap_verb.py +0 -306
  1216. polyrob-1.4.0/tools/descriptors.py +0 -384
  1217. polyrob-1.4.0/tools/email_providers/mime.py +0 -312
  1218. polyrob-1.4.0/tools/email_tool.py +0 -1319
  1219. polyrob-1.4.0/tools/filesystem.py +0 -1469
  1220. polyrob-1.4.0/tools/filesystem_docproc.py +0 -349
  1221. polyrob-1.4.0/tools/goal_tools.py +0 -1058
  1222. polyrob-1.4.0/tools/intel/model.py +0 -112
  1223. polyrob-1.4.0/tools/intel/price.py +0 -350
  1224. polyrob-1.4.0/tools/launchpad/execute.py +0 -280
  1225. polyrob-1.4.0/tools/launchpad/pons.py +0 -423
  1226. polyrob-1.4.0/tools/launchpad/tool.py +0 -727
  1227. polyrob-1.4.0/tools/mcp/config.py +0 -348
  1228. polyrob-1.4.0/tools/mcp/mcp_tool.py +0 -1420
  1229. polyrob-1.4.0/tools/publish/tool.py +0 -225
  1230. polyrob-1.4.0/tools/rails/financial_claims.py +0 -335
  1231. polyrob-1.4.0/tools/task_tool.py +0 -637
  1232. polyrob-1.4.0/tools/tool_disclosure.py +0 -393
  1233. polyrob-1.4.0/tools/tool_search.py +0 -299
  1234. polyrob-1.4.0/tools/x402/real_client.py +0 -1035
  1235. polyrob-1.4.0/tools/x402/service.py +0 -511
  1236. polyrob-1.4.0/tools/x402/spend_gate.py +0 -102
  1237. polyrob-1.4.0/webview/contributions.py +0 -64
  1238. polyrob-1.4.0/webview/copy/en.py +0 -1339
  1239. polyrob-1.4.0/webview/inbox.py +0 -348
  1240. polyrob-1.4.0/webview/pages.py +0 -1841
  1241. polyrob-1.4.0/webview/pages_new.py +0 -1858
  1242. polyrob-1.4.0/webview/static/app/transcript.js +0 -974
  1243. polyrob-1.4.0/webview/static/app/verbs.en.json +0 -416
  1244. polyrob-1.4.0/webview/static/app/work-create.js +0 -91
  1245. polyrob-1.4.0/webview/static/app/work-now.js +0 -589
  1246. polyrob-1.4.0/webview/static/css/style.css +0 -4256
  1247. polyrob-1.4.0/webview/static/js/admin/user_detail.js +0 -397
  1248. polyrob-1.4.0/webview/templates/admin/user_detail.html +0 -224
  1249. polyrob-1.4.0/webview/templates/inbox.html +0 -163
  1250. polyrob-1.4.0/webview/templates/signin.html +0 -83
  1251. polyrob-1.4.0/webview/templates/work.html +0 -279
  1252. polyrob-1.4.0/webview/webgate.py +0 -509
  1253. {polyrob-1.4.0 → polyrob-1.6.0}/LICENSE +0 -0
  1254. {polyrob-1.4.0 → polyrob-1.6.0}/agents/__init__.py +0 -0
  1255. {polyrob-1.4.0 → polyrob-1.6.0}/agents/base_agent.py +0 -0
  1256. {polyrob-1.4.0 → polyrob-1.6.0}/agents/personality/character.py +0 -0
  1257. {polyrob-1.4.0 → polyrob-1.6.0}/agents/personality/character_manager.py +0 -0
  1258. {polyrob-1.4.0 → polyrob-1.6.0}/agents/personality/characters/polyrob.character.json +0 -0
  1259. {polyrob-1.4.0 → polyrob-1.6.0}/agents/personality/persona_render.py +0 -0
  1260. {polyrob-1.4.0 → polyrob-1.6.0}/agents/personality/persona_resolver.py +0 -0
  1261. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/README_PATH_MANAGEMENT.md +0 -0
  1262. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/__init__.py +0 -0
  1263. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/__init__.py +0 -0
  1264. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/core/__init__.py +0 -0
  1265. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/core/conversational_exit.py +0 -0
  1266. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/core/error_recovery.py +0 -0
  1267. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/core/llm_runner.py +0 -0
  1268. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/core/loop_detection.py +0 -0
  1269. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/core/metering_failure_log.py +0 -0
  1270. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/core/model_introspection.py +0 -0
  1271. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/core/model_swap.py +0 -0
  1272. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/core/output_validation.py +0 -0
  1273. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/core/resources.py +0 -0
  1274. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/core/run_state.py +0 -0
  1275. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/core/runtime_catalog.py +0 -0
  1276. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/core/session_control.py +0 -0
  1277. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/core/session_metadata.py +0 -0
  1278. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/core/step_telemetry.py +0 -0
  1279. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/core/timeout_reroute.py +0 -0
  1280. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/core/token_budget.py +0 -0
  1281. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/core/untrusted_render.py +0 -0
  1282. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/hitl_manager.py +0 -0
  1283. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/log_sanitize.py +0 -0
  1284. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/message_manager/config.py +0 -0
  1285. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/message_manager/tool_call_builder.py +0 -0
  1286. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/message_manager/tool_message_repair.py +0 -0
  1287. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/message_manager/views.py +0 -0
  1288. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/messages/__init__.py +0 -0
  1289. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/messages/builders.py +0 -0
  1290. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/messages/context_references.py +0 -0
  1291. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/messages/persistence.py +0 -0
  1292. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/messages/sqlite_persistence.py +0 -0
  1293. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/orchestrator.py +0 -0
  1294. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/service.py +0 -0
  1295. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/session.py +0 -0
  1296. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/skill_allowed_tools.py +0 -0
  1297. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/tool_call_tracker.py +0 -0
  1298. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/agent/views.py +0 -0
  1299. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/gif_utils.py +0 -0
  1300. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/goals/__init__.py +0 -0
  1301. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/goals/claim_liveness.py +0 -0
  1302. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/goals/completion_judge.py +0 -0
  1303. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/goals/deliverables.py +0 -0
  1304. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/goals/goal_tool_gates.py +0 -0
  1305. {polyrob-1.4.0/core → polyrob-1.6.0/agents/task}/knowledge_export.py +0 -0
  1306. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/logging_config.py +0 -0
  1307. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/loop_types/__init__.py +0 -0
  1308. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/loop_types/browser_views.py +0 -0
  1309. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/loop_types/controller_types.py +0 -0
  1310. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/loop_types/dom_history_service.py +0 -0
  1311. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/loop_types/dom_history_view.py +0 -0
  1312. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/loop_types/dom_views.py +0 -0
  1313. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/loop_types/execution_context.py +0 -0
  1314. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/runtime/__init__.py +0 -0
  1315. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/runtime/acceptance_checks.py +0 -0
  1316. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/runtime/acceptance_schema.py +0 -0
  1317. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/runtime/edit_verify.py +0 -0
  1318. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/runtime/evidence.py +0 -0
  1319. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/runtime/metering_gate.py +0 -0
  1320. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/session/__init__.py +0 -0
  1321. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/session/browser_pool.py +0 -0
  1322. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/session/feed.py +0 -0
  1323. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/session/hooks.py +0 -0
  1324. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/session/workspace.py +0 -0
  1325. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/session_registry.py +0 -0
  1326. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/session_route.py +0 -0
  1327. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/sqlite_session_registry.py +0 -0
  1328. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/task_agent_control.py +0 -0
  1329. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/task_agent_lifecycle.py +0 -0
  1330. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/telemetry/__init__.py +0 -0
  1331. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/telemetry/agent_graph.py +0 -0
  1332. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/telemetry/feed_reads.py +0 -0
  1333. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/telemetry/formatters.py +0 -0
  1334. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/telemetry/live_progress.py +0 -0
  1335. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/telemetry/manager.py +0 -0
  1336. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/telemetry/memory_events.py +0 -0
  1337. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/telemetry/narrate.py +0 -0
  1338. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/telemetry/run_activity.py +0 -0
  1339. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/telemetry/sequence.py +0 -0
  1340. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/telemetry/service.py +0 -0
  1341. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/telemetry/service_detect.py +0 -0
  1342. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/templates.py +0 -0
  1343. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/utils.py +0 -0
  1344. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/utils_json.py +0 -0
  1345. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/utils_webview.py +0 -0
  1346. {polyrob-1.4.0 → polyrob-1.6.0}/agents/task/workspace_context.py +0 -0
  1347. {polyrob-1.4.0 → polyrob-1.6.0}/api/__init__.py +0 -0
  1348. {polyrob-1.4.0 → polyrob-1.6.0}/api/a2a/__init__.py +0 -0
  1349. {polyrob-1.4.0 → polyrob-1.6.0}/api/a2a/agent_card.py +0 -0
  1350. {polyrob-1.4.0 → polyrob-1.6.0}/api/a2a/endpoints.py +0 -0
  1351. {polyrob-1.4.0 → polyrob-1.6.0}/api/a2a/models.py +0 -0
  1352. {polyrob-1.4.0 → polyrob-1.6.0}/api/a2a/streaming.py +0 -0
  1353. {polyrob-1.4.0 → polyrob-1.6.0}/api/account_access.py +0 -0
  1354. {polyrob-1.4.0 → polyrob-1.6.0}/api/api_docs.py +0 -0
  1355. {polyrob-1.4.0 → polyrob-1.6.0}/api/api_key_auth.py +0 -0
  1356. {polyrob-1.4.0 → polyrob-1.6.0}/api/app.py +0 -0
  1357. {polyrob-1.4.0 → polyrob-1.6.0}/api/auth_constants.py +0 -0
  1358. {polyrob-1.4.0 → polyrob-1.6.0}/api/auth_endpoints.py +0 -0
  1359. {polyrob-1.4.0 → polyrob-1.6.0}/api/auth_state.py +0 -0
  1360. {polyrob-1.4.0 → polyrob-1.6.0}/api/base_url.py +0 -0
  1361. {polyrob-1.4.0 → polyrob-1.6.0}/api/chat_via_task.py +0 -0
  1362. {polyrob-1.4.0 → polyrob-1.6.0}/api/contributions.py +0 -0
  1363. {polyrob-1.4.0 → polyrob-1.6.0}/api/dependencies.py +0 -0
  1364. {polyrob-1.4.0 → polyrob-1.6.0}/api/eip8004_endpoints.py +0 -0
  1365. {polyrob-1.4.0 → polyrob-1.6.0}/api/jwt_middleware.py +0 -0
  1366. {polyrob-1.4.0 → polyrob-1.6.0}/api/kb/__init__.py +0 -0
  1367. {polyrob-1.4.0 → polyrob-1.6.0}/api/kb/endpoints.py +0 -0
  1368. {polyrob-1.4.0 → polyrob-1.6.0}/api/mcp_models.py +0 -0
  1369. {polyrob-1.4.0 → polyrob-1.6.0}/api/mcp_routes.py +0 -0
  1370. {polyrob-1.4.0 → polyrob-1.6.0}/api/mcp_serve/__init__.py +0 -0
  1371. {polyrob-1.4.0 → polyrob-1.6.0}/api/mcp_serve/handlers.py +0 -0
  1372. {polyrob-1.4.0 → polyrob-1.6.0}/api/mcp_serve/router.py +0 -0
  1373. {polyrob-1.4.0 → polyrob-1.6.0}/api/middleware.py +0 -0
  1374. {polyrob-1.4.0 → polyrob-1.6.0}/api/money_contributions.py +0 -0
  1375. {polyrob-1.4.0 → polyrob-1.6.0}/api/openai_compat/__init__.py +0 -0
  1376. {polyrob-1.4.0 → polyrob-1.6.0}/api/openai_compat/errors.py +0 -0
  1377. {polyrob-1.4.0 → polyrob-1.6.0}/api/openai_compat/models.py +0 -0
  1378. {polyrob-1.4.0 → polyrob-1.6.0}/api/pack_routes.py +0 -0
  1379. {polyrob-1.4.0 → polyrob-1.6.0}/api/payment_verification.py +0 -0
  1380. {polyrob-1.4.0 → polyrob-1.6.0}/api/pricing_endpoints.py +0 -0
  1381. {polyrob-1.4.0 → polyrob-1.6.0}/api/request_limits.py +0 -0
  1382. {polyrob-1.4.0 → polyrob-1.6.0}/api/server_boot.py +0 -0
  1383. {polyrob-1.4.0 → polyrob-1.6.0}/api/session_preflight.py +0 -0
  1384. {polyrob-1.4.0 → polyrob-1.6.0}/api/session_routing.py +0 -0
  1385. {polyrob-1.4.0 → polyrob-1.6.0}/api/task_workspace.py +0 -0
  1386. {polyrob-1.4.0 → polyrob-1.6.0}/api/upload_sniff.py +0 -0
  1387. {polyrob-1.4.0 → polyrob-1.6.0}/api/upload_store.py +0 -0
  1388. {polyrob-1.4.0 → polyrob-1.6.0}/api/webhooks.py +0 -0
  1389. {polyrob-1.4.0 → polyrob-1.6.0}/api/x402_advertisement.py +0 -0
  1390. {polyrob-1.4.0 → polyrob-1.6.0}/assets/__init__.py +0 -0
  1391. {polyrob-1.4.0 → polyrob-1.6.0}/assets/brand/polyrob-avatar-512.png +0 -0
  1392. {polyrob-1.4.0 → polyrob-1.6.0}/assets/brand/polyrob-mark-256.png +0 -0
  1393. {polyrob-1.4.0 → polyrob-1.6.0}/assets/fonts/dejavu/DejaVuSans-Bold.ttf +0 -0
  1394. {polyrob-1.4.0 → polyrob-1.6.0}/assets/fonts/dejavu/DejaVuSans.ttf +0 -0
  1395. {polyrob-1.4.0 → polyrob-1.6.0}/assets/fonts/dejavu/LICENSE +0 -0
  1396. {polyrob-1.4.0 → polyrob-1.6.0}/cli/README.md +0 -0
  1397. {polyrob-1.4.0 → polyrob-1.6.0}/cli/__init__.py +0 -0
  1398. {polyrob-1.4.0 → polyrob-1.6.0}/cli/_admin_home.py +0 -0
  1399. {polyrob-1.4.0 → polyrob-1.6.0}/cli/_flag_warn.py +0 -0
  1400. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/__init__.py +0 -0
  1401. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/_errors.py +0 -0
  1402. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/_grouped.py +0 -0
  1403. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/_lifecycle_boot.py +0 -0
  1404. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/_options.py +0 -0
  1405. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/_service_ops.py +0 -0
  1406. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/_session_control.py +0 -0
  1407. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/_surface_runner.py +0 -0
  1408. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/approvals.py +0 -0
  1409. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/apps.py +0 -0
  1410. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/auth.py +0 -0
  1411. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/autonomy.py +0 -0
  1412. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/avatar.py +0 -0
  1413. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/browser.py +0 -0
  1414. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/datagen.py +0 -0
  1415. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/discord.py +0 -0
  1416. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/email.py +0 -0
  1417. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/gateway.py +0 -0
  1418. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/identity.py +0 -0
  1419. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/journey.py +0 -0
  1420. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/keys.py +0 -0
  1421. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/owner_memory.py +0 -0
  1422. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/pack.py +0 -0
  1423. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/persona.py +0 -0
  1424. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/profile.py +0 -0
  1425. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/profile_dist.py +0 -0
  1426. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/profile_transfer.py +0 -0
  1427. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/service.py +0 -0
  1428. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/session.py +0 -0
  1429. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/signal.py +0 -0
  1430. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/skill_hub.py +0 -0
  1431. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/slack.py +0 -0
  1432. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/subagents.py +0 -0
  1433. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/surface.py +0 -0
  1434. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/telegram.py +0 -0
  1435. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/todos.py +0 -0
  1436. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/tools.py +0 -0
  1437. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/uninstall.py +0 -0
  1438. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/wallet_lp.py +0 -0
  1439. {polyrob-1.4.0 → polyrob-1.6.0}/cli/commands/whatsapp.py +0 -0
  1440. {polyrob-1.4.0 → polyrob-1.6.0}/cli/delegation_receipts.py +0 -0
  1441. {polyrob-1.4.0 → polyrob-1.6.0}/cli/git_child_env.py +0 -0
  1442. {polyrob-1.4.0 → polyrob-1.6.0}/cli/gitignore.py +0 -0
  1443. {polyrob-1.4.0 → polyrob-1.6.0}/cli/inventory.py +0 -0
  1444. {polyrob-1.4.0 → polyrob-1.6.0}/cli/persona.py +0 -0
  1445. {polyrob-1.4.0 → polyrob-1.6.0}/cli/profile_review.py +0 -0
  1446. {polyrob-1.4.0 → polyrob-1.6.0}/cli/session_paths.py +0 -0
  1447. {polyrob-1.4.0 → polyrob-1.6.0}/cli/surfaces_config.py +0 -0
  1448. {polyrob-1.4.0 → polyrob-1.6.0}/cli/toolset.py +0 -0
  1449. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/__init__.py +0 -0
  1450. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/activity.py +0 -0
  1451. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/app.py +0 -0
  1452. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/approval_prompt.py +0 -0
  1453. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/autonomy_live.py +0 -0
  1454. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/autonomy_poll.py +0 -0
  1455. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/banner.py +0 -0
  1456. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/blocks.py +0 -0
  1457. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/bootstrap_notice.py +0 -0
  1458. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/candy.py +0 -0
  1459. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/__init__.py +0 -0
  1460. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_attach.py +0 -0
  1461. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_avatar.py +0 -0
  1462. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_check.py +0 -0
  1463. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_context.py +0 -0
  1464. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_contributed.py +0 -0
  1465. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_diag.py +0 -0
  1466. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_files.py +0 -0
  1467. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_finance.py +0 -0
  1468. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_holdings.py +0 -0
  1469. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_kb.py +0 -0
  1470. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_learn.py +0 -0
  1471. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_lifecycle.py +0 -0
  1472. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_mcp.py +0 -0
  1473. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_mode.py +0 -0
  1474. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_owner_reach.py +0 -0
  1475. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_persona.py +0 -0
  1476. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_prefs.py +0 -0
  1477. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_profile.py +0 -0
  1478. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_reject.py +0 -0
  1479. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_rooms.py +0 -0
  1480. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_run.py +0 -0
  1481. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_self.py +0 -0
  1482. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_send.py +0 -0
  1483. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_skills_hub.py +0 -0
  1484. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_steer.py +0 -0
  1485. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_swap.py +0 -0
  1486. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_token.py +0 -0
  1487. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_view_cells.py +0 -0
  1488. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/h_workers.py +0 -0
  1489. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/registry.py +0 -0
  1490. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/commands/window.py +0 -0
  1491. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/config_picker.py +0 -0
  1492. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/event_registry.py +0 -0
  1493. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/event_specs.py +0 -0
  1494. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/hints.py +0 -0
  1495. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/history.py +0 -0
  1496. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/identity.py +0 -0
  1497. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/input_policy.py +0 -0
  1498. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/json_renderer.py +0 -0
  1499. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/lifecycle.py +0 -0
  1500. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/line_layout.py +0 -0
  1501. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/literal.py +0 -0
  1502. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/live_hooks.py +0 -0
  1503. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/log_squelch.py +0 -0
  1504. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/model_selector.py +0 -0
  1505. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/secrets.py +0 -0
  1506. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/slash_highlight.py +0 -0
  1507. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/statusbar.py +0 -0
  1508. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/streaming.py +0 -0
  1509. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/terminal_title.py +0 -0
  1510. {polyrob-1.4.0 → polyrob-1.6.0}/cli/ui/theme.py +0 -0
  1511. {polyrob-1.4.0 → polyrob-1.6.0}/cli/update/__init__.py +0 -0
  1512. {polyrob-1.4.0 → polyrob-1.6.0}/cli/update/agent_state.py +0 -0
  1513. {polyrob-1.4.0 → polyrob-1.6.0}/cli/update/detect.py +0 -0
  1514. {polyrob-1.4.0 → polyrob-1.6.0}/cli/update/engine.py +0 -0
  1515. {polyrob-1.4.0 → polyrob-1.6.0}/cli/update/extras.py +0 -0
  1516. {polyrob-1.4.0 → polyrob-1.6.0}/cli/update/packs.py +0 -0
  1517. {polyrob-1.4.0 → polyrob-1.6.0}/cli/update/process_guard.py +0 -0
  1518. {polyrob-1.4.0 → polyrob-1.6.0}/cli/update/restore.py +0 -0
  1519. {polyrob-1.4.0 → polyrob-1.6.0}/cli/update/runners.py +0 -0
  1520. {polyrob-1.4.0 → polyrob-1.6.0}/cli/update/versions.py +0 -0
  1521. {polyrob-1.4.0 → polyrob-1.6.0}/core/README.md +0 -0
  1522. {polyrob-1.4.0 → polyrob-1.6.0}/core/__init__.py +0 -0
  1523. {polyrob-1.4.0 → polyrob-1.6.0}/core/action_names.py +0 -0
  1524. {polyrob-1.4.0 → polyrob-1.6.0}/core/action_receipt.py +0 -0
  1525. {polyrob-1.4.0 → polyrob-1.6.0}/core/admin_data_home.py +0 -0
  1526. {polyrob-1.4.0 → polyrob-1.6.0}/core/app_service/__init__.py +0 -0
  1527. {polyrob-1.4.0 → polyrob-1.6.0}/core/app_service/approval.py +0 -0
  1528. {polyrob-1.4.0 → polyrob-1.6.0}/core/app_service/config.py +0 -0
  1529. {polyrob-1.4.0 → polyrob-1.6.0}/core/app_service/egress.py +0 -0
  1530. {polyrob-1.4.0 → polyrob-1.6.0}/core/app_service/env_scan.py +0 -0
  1531. {polyrob-1.4.0 → polyrob-1.6.0}/core/app_service/fingerprint.py +0 -0
  1532. {polyrob-1.4.0 → polyrob-1.6.0}/core/app_service/nginx.py +0 -0
  1533. {polyrob-1.4.0 → polyrob-1.6.0}/core/app_service/owner_ops.py +0 -0
  1534. {polyrob-1.4.0 → polyrob-1.6.0}/core/app_service/registry.py +0 -0
  1535. {polyrob-1.4.0 → polyrob-1.6.0}/core/app_service/snapshot.py +0 -0
  1536. {polyrob-1.4.0 → polyrob-1.6.0}/core/app_service/supervisor.py +0 -0
  1537. {polyrob-1.4.0 → polyrob-1.6.0}/core/approval_input.py +0 -0
  1538. {polyrob-1.4.0 → polyrob-1.6.0}/core/approved_actions.py +0 -0
  1539. {polyrob-1.4.0 → polyrob-1.6.0}/core/artifacts.py +0 -0
  1540. {polyrob-1.4.0 → polyrob-1.6.0}/core/assets.py +0 -0
  1541. {polyrob-1.4.0 → polyrob-1.6.0}/core/async_bridge.py +0 -0
  1542. {polyrob-1.4.0 → polyrob-1.6.0}/core/avatar.py +0 -0
  1543. {polyrob-1.4.0 → polyrob-1.6.0}/core/backoff.py +0 -0
  1544. {polyrob-1.4.0 → polyrob-1.6.0}/core/base_component.py +0 -0
  1545. {polyrob-1.4.0 → polyrob-1.6.0}/core/billing_context.py +0 -0
  1546. {polyrob-1.4.0 → polyrob-1.6.0}/core/book.py +0 -0
  1547. {polyrob-1.4.0 → polyrob-1.6.0}/core/boot_reconcilers.py +0 -0
  1548. {polyrob-1.4.0 → polyrob-1.6.0}/core/bootstrap_marker.py +0 -0
  1549. {polyrob-1.4.0 → polyrob-1.6.0}/core/capability_verdict.py +0 -0
  1550. {polyrob-1.4.0 → polyrob-1.6.0}/core/cli_tool_tables.py +0 -0
  1551. {polyrob-1.4.0 → polyrob-1.6.0}/core/config_policy/_env.py +0 -0
  1552. {polyrob-1.4.0 → polyrob-1.6.0}/core/config_policy/autonomy_mode.py +0 -0
  1553. {polyrob-1.4.0 → polyrob-1.6.0}/core/config_policy/autonomy_posture.py +0 -0
  1554. {polyrob-1.4.0 → polyrob-1.6.0}/core/config_policy/builder_mode.py +0 -0
  1555. {polyrob-1.4.0 → polyrob-1.6.0}/core/config_policy/compute_posture.py +0 -0
  1556. {polyrob-1.4.0 → polyrob-1.6.0}/core/config_policy/flag_defaults.py +0 -0
  1557. {polyrob-1.4.0 → polyrob-1.6.0}/core/config_policy/flag_enums.py +0 -0
  1558. {polyrob-1.4.0 → polyrob-1.6.0}/core/config_policy/live_apply.py +0 -0
  1559. {polyrob-1.4.0 → polyrob-1.6.0}/core/config_policy/memory_policy.py +0 -0
  1560. {polyrob-1.4.0 → polyrob-1.6.0}/core/config_policy/payment_policy.py +0 -0
  1561. {polyrob-1.4.0 → polyrob-1.6.0}/core/config_policy/payment_tools.py +0 -0
  1562. {polyrob-1.4.0 → polyrob-1.6.0}/core/config_policy/posture_card.py +0 -0
  1563. {polyrob-1.4.0 → polyrob-1.6.0}/core/config_policy/runtime_gates.py +0 -0
  1564. {polyrob-1.4.0 → polyrob-1.6.0}/core/constants.py +0 -0
  1565. {polyrob-1.4.0 → polyrob-1.6.0}/core/container.py +0 -0
  1566. {polyrob-1.4.0 → polyrob-1.6.0}/core/container_hardening.py +0 -0
  1567. {polyrob-1.4.0 → polyrob-1.6.0}/core/contract_writer.py +0 -0
  1568. {polyrob-1.4.0 → polyrob-1.6.0}/core/copy/__init__.py +0 -0
  1569. {polyrob-1.4.0 → polyrob-1.6.0}/core/copy/_engine.py +0 -0
  1570. {polyrob-1.4.0 → polyrob-1.6.0}/core/copy/en.py +0 -0
  1571. {polyrob-1.4.0 → polyrob-1.6.0}/core/copy/glossary.py +0 -0
  1572. {polyrob-1.4.0 → polyrob-1.6.0}/core/credential_verdicts.py +0 -0
  1573. {polyrob-1.4.0 → polyrob-1.6.0}/core/cron_rearm.py +0 -0
  1574. {polyrob-1.4.0 → polyrob-1.6.0}/core/dapp_session_store.py +0 -0
  1575. {polyrob-1.4.0 → polyrob-1.6.0}/core/data_perms.py +0 -0
  1576. {polyrob-1.4.0 → polyrob-1.6.0}/core/delivery_channels.py +0 -0
  1577. {polyrob-1.4.0 → polyrob-1.6.0}/core/doc_kind.py +0 -0
  1578. {polyrob-1.4.0 → polyrob-1.6.0}/core/embedding.py +0 -0
  1579. {polyrob-1.4.0 → polyrob-1.6.0}/core/env.py +0 -0
  1580. {polyrob-1.4.0 → polyrob-1.6.0}/core/error_classifier.py +0 -0
  1581. {polyrob-1.4.0 → polyrob-1.6.0}/core/eval_manifest.py +0 -0
  1582. {polyrob-1.4.0 → polyrob-1.6.0}/core/event_log.py +0 -0
  1583. {polyrob-1.4.0 → polyrob-1.6.0}/core/exceptions.py +0 -0
  1584. {polyrob-1.4.0 → polyrob-1.6.0}/core/exec_identity.py +0 -0
  1585. {polyrob-1.4.0 → polyrob-1.6.0}/core/extras_spec.py +0 -0
  1586. {polyrob-1.4.0 → polyrob-1.6.0}/core/file_lock.py +0 -0
  1587. {polyrob-1.4.0 → polyrob-1.6.0}/core/gitignore.py +0 -0
  1588. {polyrob-1.4.0 → polyrob-1.6.0}/core/home_migration.py +0 -0
  1589. {polyrob-1.4.0 → polyrob-1.6.0}/core/identity.py +0 -0
  1590. {polyrob-1.4.0 → polyrob-1.6.0}/core/inference_context.py +0 -0
  1591. {polyrob-1.4.0 → polyrob-1.6.0}/core/instance.py +0 -0
  1592. {polyrob-1.4.0 → polyrob-1.6.0}/core/instruction_surfaces.py +0 -0
  1593. {polyrob-1.4.0 → polyrob-1.6.0}/core/interactive_gate.py +0 -0
  1594. {polyrob-1.4.0 → polyrob-1.6.0}/core/kb_grammar.py +0 -0
  1595. {polyrob-1.4.0 → polyrob-1.6.0}/core/key_suggest.py +0 -0
  1596. {polyrob-1.4.0 → polyrob-1.6.0}/core/lazy_closures/__init__.py +0 -0
  1597. {polyrob-1.4.0 → polyrob-1.6.0}/core/lazy_views.py +0 -0
  1598. {polyrob-1.4.0 → polyrob-1.6.0}/core/llm_auth/__init__.py +0 -0
  1599. {polyrob-1.4.0 → polyrob-1.6.0}/core/llm_auth/errors.py +0 -0
  1600. {polyrob-1.4.0 → polyrob-1.6.0}/core/llm_auth/flows/__init__.py +0 -0
  1601. {polyrob-1.4.0 → polyrob-1.6.0}/core/llm_auth/flows/base.py +0 -0
  1602. {polyrob-1.4.0 → polyrob-1.6.0}/core/llm_auth/flows/loopback_pkce.py +0 -0
  1603. {polyrob-1.4.0 → polyrob-1.6.0}/core/llm_auth/flows/manual_paste_pkce.py +0 -0
  1604. {polyrob-1.4.0 → polyrob-1.6.0}/core/llm_auth/flows/registry.py +0 -0
  1605. {polyrob-1.4.0 → polyrob-1.6.0}/core/llm_auth/health.py +0 -0
  1606. {polyrob-1.4.0 → polyrob-1.6.0}/core/llm_auth/inference.py +0 -0
  1607. {polyrob-1.4.0 → polyrob-1.6.0}/core/llm_auth/resolve.py +0 -0
  1608. {polyrob-1.4.0 → polyrob-1.6.0}/core/llm_auth/store.py +0 -0
  1609. {polyrob-1.4.0 → polyrob-1.6.0}/core/lock_closure.py +0 -0
  1610. {polyrob-1.4.0 → polyrob-1.6.0}/core/maintenance_proposals.py +0 -0
  1611. {polyrob-1.4.0 → polyrob-1.6.0}/core/mcp_admin.py +0 -0
  1612. {polyrob-1.4.0 → polyrob-1.6.0}/core/money/authority.py +0 -0
  1613. {polyrob-1.4.0 → polyrob-1.6.0}/core/money/authorize.py +0 -0
  1614. {polyrob-1.4.0 → polyrob-1.6.0}/core/money/hooks.py +0 -0
  1615. {polyrob-1.4.0 → polyrob-1.6.0}/core/money/regime.py +0 -0
  1616. {polyrob-1.4.0 → polyrob-1.6.0}/core/money/valuation.py +0 -0
  1617. {polyrob-1.4.0 → polyrob-1.6.0}/core/optional_extras.py +0 -0
  1618. {polyrob-1.4.0 → polyrob-1.6.0}/core/owner_doc_writer.py +0 -0
  1619. {polyrob-1.4.0 → polyrob-1.6.0}/core/packs/__init__.py +0 -0
  1620. {polyrob-1.4.0 → polyrob-1.6.0}/core/packs/index.json +0 -0
  1621. {polyrob-1.4.0 → polyrob-1.6.0}/core/packs/loader.py +0 -0
  1622. {polyrob-1.4.0 → polyrob-1.6.0}/core/packs/removed.json +0 -0
  1623. {polyrob-1.4.0 → polyrob-1.6.0}/core/packs/retire.py +0 -0
  1624. {polyrob-1.4.0 → polyrob-1.6.0}/core/packs/sdk.py +0 -0
  1625. {polyrob-1.4.0 → polyrob-1.6.0}/core/packs/spec.py +0 -0
  1626. {polyrob-1.4.0 → polyrob-1.6.0}/core/packs/state.py +0 -0
  1627. {polyrob-1.4.0 → polyrob-1.6.0}/core/pairing.py +0 -0
  1628. {polyrob-1.4.0 → polyrob-1.6.0}/core/payment_config.py +0 -0
  1629. {polyrob-1.4.0 → polyrob-1.6.0}/core/payments/__init__.py +0 -0
  1630. {polyrob-1.4.0 → polyrob-1.6.0}/core/profiles.py +0 -0
  1631. {polyrob-1.4.0 → polyrob-1.6.0}/core/rate_limit.py +0 -0
  1632. {polyrob-1.4.0 → polyrob-1.6.0}/core/remedy.py +0 -0
  1633. {polyrob-1.4.0 → polyrob-1.6.0}/core/run_control.py +0 -0
  1634. {polyrob-1.4.0 → polyrob-1.6.0}/core/schedule.py +0 -0
  1635. {polyrob-1.4.0 → polyrob-1.6.0}/core/seams.py +0 -0
  1636. {polyrob-1.4.0 → polyrob-1.6.0}/core/secret_patterns.py +0 -0
  1637. {polyrob-1.4.0 → polyrob-1.6.0}/core/secret_scan.py +0 -0
  1638. {polyrob-1.4.0 → polyrob-1.6.0}/core/secret_scrub.py +0 -0
  1639. {polyrob-1.4.0 → polyrob-1.6.0}/core/secrets.py +0 -0
  1640. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/__init__.py +0 -0
  1641. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/agent_child.py +0 -0
  1642. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/api_keys.py +0 -0
  1643. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/bip39_english.txt +0 -0
  1644. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/browser_origin.py +0 -0
  1645. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/command_guard.py +0 -0
  1646. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/confined_read.py +0 -0
  1647. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/document_archive.py +0 -0
  1648. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/encryption.py +0 -0
  1649. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/forged_turns.py +0 -0
  1650. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/http_probe.py +0 -0
  1651. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/internal_events.py +0 -0
  1652. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/owner_turn.py +0 -0
  1653. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/pinned_resolver.py +0 -0
  1654. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/pinned_transport.py +0 -0
  1655. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/process_hardening.py +0 -0
  1656. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/redaction.py +0 -0
  1657. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/secret_material.py +0 -0
  1658. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/session_tokens.py +0 -0
  1659. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/threat_report.py +0 -0
  1660. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/untrusted_wrap.py +0 -0
  1661. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/url_policy.py +0 -0
  1662. {polyrob-1.4.0 → polyrob-1.6.0}/core/security/workspace_io.py +0 -0
  1663. {polyrob-1.4.0 → polyrob-1.6.0}/core/security_digest.py +0 -0
  1664. {polyrob-1.4.0 → polyrob-1.6.0}/core/security_logging_filter.py +0 -0
  1665. {polyrob-1.4.0 → polyrob-1.6.0}/core/security_speakers.py +0 -0
  1666. {polyrob-1.4.0 → polyrob-1.6.0}/core/self_events.py +0 -0
  1667. {polyrob-1.4.0 → polyrob-1.6.0}/core/session_control.py +0 -0
  1668. {polyrob-1.4.0 → polyrob-1.6.0}/core/session_gc.py +0 -0
  1669. {polyrob-1.4.0 → polyrob-1.6.0}/core/session_retention.py +0 -0
  1670. {polyrob-1.4.0 → polyrob-1.6.0}/core/ship_tree.py +0 -0
  1671. {polyrob-1.4.0 → polyrob-1.6.0}/core/sidecar_relocate.py +0 -0
  1672. {polyrob-1.4.0 → polyrob-1.6.0}/core/signer/attest.py +0 -0
  1673. {polyrob-1.4.0 → polyrob-1.6.0}/core/signer/client.py +0 -0
  1674. {polyrob-1.4.0 → polyrob-1.6.0}/core/signer/peer.py +0 -0
  1675. {polyrob-1.4.0 → polyrob-1.6.0}/core/signer/protocol.py +0 -0
  1676. {polyrob-1.4.0 → polyrob-1.6.0}/core/signer/remote.py +0 -0
  1677. {polyrob-1.4.0 → polyrob-1.6.0}/core/signer/shadow.py +0 -0
  1678. {polyrob-1.4.0 → polyrob-1.6.0}/core/signer/store.py +0 -0
  1679. {polyrob-1.4.0 → polyrob-1.6.0}/core/sqlite_util.py +0 -0
  1680. {polyrob-1.4.0 → polyrob-1.6.0}/core/status_custody.py +0 -0
  1681. {polyrob-1.4.0 → polyrob-1.6.0}/core/status_identity.py +0 -0
  1682. {polyrob-1.4.0 → polyrob-1.6.0}/core/status_knowledge.py +0 -0
  1683. {polyrob-1.4.0 → polyrob-1.6.0}/core/status_liquidity.py +0 -0
  1684. {polyrob-1.4.0 → polyrob-1.6.0}/core/status_packs.py +0 -0
  1685. {polyrob-1.4.0 → polyrob-1.6.0}/core/status_rails.py +0 -0
  1686. {polyrob-1.4.0 → polyrob-1.6.0}/core/status_room_actions.py +0 -0
  1687. {polyrob-1.4.0 → polyrob-1.6.0}/core/status_rooms.py +0 -0
  1688. {polyrob-1.4.0 → polyrob-1.6.0}/core/status_sections.py +0 -0
  1689. {polyrob-1.4.0 → polyrob-1.6.0}/core/status_session.py +0 -0
  1690. {polyrob-1.4.0 → polyrob-1.6.0}/core/status_tools.py +0 -0
  1691. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/__init__.py +0 -0
  1692. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/access.py +0 -0
  1693. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/access_log.py +0 -0
  1694. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/act.py +0 -0
  1695. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/actions.py +0 -0
  1696. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/address_key.py +0 -0
  1697. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/attachments.py +0 -0
  1698. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/binding.py +0 -0
  1699. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/bootstrap.py +0 -0
  1700. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/bot_pair_guard.py +0 -0
  1701. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/catalog.py +0 -0
  1702. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/chat_policy.py +0 -0
  1703. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/circuit.py +0 -0
  1704. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/command_reply.py +0 -0
  1705. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/config.py +0 -0
  1706. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/correspondents.py +0 -0
  1707. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/dead_targets.py +0 -0
  1708. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/deep_link.py +0 -0
  1709. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/envelopes.py +0 -0
  1710. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/error_notices.py +0 -0
  1711. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/gc.py +0 -0
  1712. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/group_admin.py +0 -0
  1713. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/group_allowlist.py +0 -0
  1714. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/group_ledger.py +0 -0
  1715. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/group_roles.py +0 -0
  1716. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/group_turn.py +0 -0
  1717. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/health.py +0 -0
  1718. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/idempotency.py +0 -0
  1719. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/inbound_webhook.py +0 -0
  1720. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/ledger_ingest.py +0 -0
  1721. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/llm_outage_notice.py +0 -0
  1722. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/media.py +0 -0
  1723. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/media_access.py +0 -0
  1724. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/message_router.py +0 -0
  1725. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/outbound_allowlist.py +0 -0
  1726. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/outbound_dispatcher.py +0 -0
  1727. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/outbound_mirror.py +0 -0
  1728. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/outbound_policy.py +0 -0
  1729. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/outbound_queue.py +0 -0
  1730. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/owner_address.py +0 -0
  1731. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/owner_target.py +0 -0
  1732. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/owner_turn.py +0 -0
  1733. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/path_links.py +0 -0
  1734. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/poll_health.py +0 -0
  1735. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/proactive.py +0 -0
  1736. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/progress.py +0 -0
  1737. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/quiet_hours.py +0 -0
  1738. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/registry.py +0 -0
  1739. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/rendering.py +0 -0
  1740. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/room_action_admin.py +0 -0
  1741. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/room_action_store.py +0 -0
  1742. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/room_caps.py +0 -0
  1743. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/room_focus.py +0 -0
  1744. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/room_keys.py +0 -0
  1745. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/room_label.py +0 -0
  1746. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/room_policy.py +0 -0
  1747. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/seed.py +0 -0
  1748. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/send_policy.py +0 -0
  1749. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/sent_posts.py +0 -0
  1750. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/serialize.py +0 -0
  1751. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/session_chat_registry.py +0 -0
  1752. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/speech_out.py +0 -0
  1753. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/spill.py +0 -0
  1754. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/surface.py +0 -0
  1755. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/tappable.py +0 -0
  1756. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/transcription.py +0 -0
  1757. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/turn_reply.py +0 -0
  1758. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/voice_echo.py +0 -0
  1759. {polyrob-1.4.0 → polyrob-1.6.0}/core/surfaces/voice_guard.py +0 -0
  1760. {polyrob-1.4.0 → polyrob-1.6.0}/core/tickers.py +0 -0
  1761. {polyrob-1.4.0 → polyrob-1.6.0}/core/token_check_hook.py +0 -0
  1762. {polyrob-1.4.0 → polyrob-1.6.0}/core/token_denylist.py +0 -0
  1763. {polyrob-1.4.0 → polyrob-1.6.0}/core/tool_catalog.py +0 -0
  1764. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/__init__.py +0 -0
  1765. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/abi.py +0 -0
  1766. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/account_journal.py +0 -0
  1767. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/activity.py +0 -0
  1768. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/address_kind.py +0 -0
  1769. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/addresses.py +0 -0
  1770. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/agent_wallet.py +0 -0
  1771. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/audit_sink.py +0 -0
  1772. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/authority.py +0 -0
  1773. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/balance_cache.py +0 -0
  1774. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/bridge_status.py +0 -0
  1775. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/broadcast/__init__.py +0 -0
  1776. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/broadcast/receipt_validation.py +0 -0
  1777. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/collection_registry.py +0 -0
  1778. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/collection_reveal.py +0 -0
  1779. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/collection_trust.py +0 -0
  1780. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/contracts/FixedSupplyToken.sol +0 -0
  1781. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/derivation.py +0 -0
  1782. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/dex_registry.py +0 -0
  1783. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/erc6551.py +0 -0
  1784. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/erc8004.py +0 -0
  1785. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/evm_facts.py +0 -0
  1786. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/factory.py +0 -0
  1787. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/infra_error.py +0 -0
  1788. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/journal_log.py +0 -0
  1789. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/jupiter_v6_schema.py +0 -0
  1790. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/liquidity_guard.py +0 -0
  1791. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/nft_account.py +0 -0
  1792. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/nft_holdings.py +0 -0
  1793. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/onchain.py +0 -0
  1794. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/own_addresses.py +0 -0
  1795. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/policy.py +0 -0
  1796. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/public_identity.py +0 -0
  1797. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/relay_svm.py +0 -0
  1798. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/rpc_response.py +0 -0
  1799. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/signer.py +0 -0
  1800. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/solana_rail.py +0 -0
  1801. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/solana_signer.py +0 -0
  1802. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/solana_strays.py +0 -0
  1803. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/solana_x402.py +0 -0
  1804. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/spl_facts.py +0 -0
  1805. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/spl_token.py +0 -0
  1806. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/submission_recovery.py +0 -0
  1807. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/submission_release.py +0 -0
  1808. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/submission_store.py +0 -0
  1809. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/token_origin.py +0 -0
  1810. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/token_pins.py +0 -0
  1811. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/token_provenance.py +0 -0
  1812. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/token_trust.py +0 -0
  1813. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/trade_index.py +0 -0
  1814. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/treasury_balance.py +0 -0
  1815. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/tx_guard_steps/__init__.py +0 -0
  1816. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/tx_guard_steps/turn.py +0 -0
  1817. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/univ3_math.py +0 -0
  1818. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/view.py +0 -0
  1819. {polyrob-1.4.0 → polyrob-1.6.0}/core/wallet/x402_expiry.py +0 -0
  1820. {polyrob-1.4.0 → polyrob-1.6.0}/cron/__init__.py +0 -0
  1821. {polyrob-1.4.0 → polyrob-1.6.0}/cron/approval_defer.py +0 -0
  1822. {polyrob-1.4.0 → polyrob-1.6.0}/cron/schedule.py +0 -0
  1823. {polyrob-1.4.0 → polyrob-1.6.0}/cron/wake_gate.py +0 -0
  1824. {polyrob-1.4.0 → polyrob-1.6.0}/data/__init__.py +0 -0
  1825. {polyrob-1.4.0 → polyrob-1.6.0}/data/characters/analyst.character.json +0 -0
  1826. {polyrob-1.4.0 → polyrob-1.6.0}/data/characters/coder.character.json +0 -0
  1827. {polyrob-1.4.0 → polyrob-1.6.0}/data/characters/default.character.json +0 -0
  1828. {polyrob-1.4.0 → polyrob-1.6.0}/data/characters/ops.character.json +0 -0
  1829. {polyrob-1.4.0 → polyrob-1.6.0}/data/characters/researcher.character.json +0 -0
  1830. {polyrob-1.4.0 → polyrob-1.6.0}/data/characters/writer.character.json +0 -0
  1831. {polyrob-1.4.0 → polyrob-1.6.0}/data/prompts/skills/adversarial-consensus/references/round-briefs.md +0 -0
  1832. {polyrob-1.4.0 → polyrob-1.6.0}/data/prompts/skills/coding-workflow/references/build-failure-triage.md +0 -0
  1833. {polyrob-1.4.0 → polyrob-1.6.0}/data/prompts/skills/coding-workflow/references/cleanup-passes.md +0 -0
  1834. {polyrob-1.4.0 → polyrob-1.6.0}/data/prompts/skills/coding-workflow/references/debugging-method.md +0 -0
  1835. {polyrob-1.4.0 → polyrob-1.6.0}/data/prompts/skills/coding-workflow/references/review-lenses.md +0 -0
  1836. {polyrob-1.4.0 → polyrob-1.6.0}/data/prompts/skills/incident-response/references/incident-record.md +0 -0
  1837. {polyrob-1.4.0 → polyrob-1.6.0}/data/prompts/skills/polyrob-user-guide/references/setup-interview.md +0 -0
  1838. {polyrob-1.4.0 → polyrob-1.6.0}/data/subscription_channels.json +0 -0
  1839. {polyrob-1.4.0 → polyrob-1.6.0}/datagen/__init__.py +0 -0
  1840. {polyrob-1.4.0 → polyrob-1.6.0}/datagen/assemble.py +0 -0
  1841. {polyrob-1.4.0 → polyrob-1.6.0}/datagen/batch_runner.py +0 -0
  1842. {polyrob-1.4.0 → polyrob-1.6.0}/datagen/bulk_export.py +0 -0
  1843. {polyrob-1.4.0 → polyrob-1.6.0}/datagen/capture.py +0 -0
  1844. {polyrob-1.4.0 → polyrob-1.6.0}/datagen/formats.py +0 -0
  1845. {polyrob-1.4.0 → polyrob-1.6.0}/datagen/record.py +0 -0
  1846. {polyrob-1.4.0 → polyrob-1.6.0}/datagen/scrub.py +0 -0
  1847. {polyrob-1.4.0 → polyrob-1.6.0}/datagen/toolset_distributions.py +0 -0
  1848. {polyrob-1.4.0 → polyrob-1.6.0}/docs/guide/deployment-postures.md +0 -0
  1849. {polyrob-1.4.0 → polyrob-1.6.0}/docs/guide/feishu-dingtalk.md +0 -0
  1850. {polyrob-1.4.0 → polyrob-1.6.0}/docs/guide/instances.md +0 -0
  1851. {polyrob-1.4.0 → polyrob-1.6.0}/docs/guide/migration/README.md +0 -0
  1852. {polyrob-1.4.0 → polyrob-1.6.0}/docs/guide/operate-the-service.md +0 -0
  1853. {polyrob-1.4.0 → polyrob-1.6.0}/docs/guide/packs.md +0 -0
  1854. {polyrob-1.4.0 → polyrob-1.6.0}/docs/guide/profiles.md +0 -0
  1855. {polyrob-1.4.0 → polyrob-1.6.0}/docs/guide/rails-verification.md +0 -0
  1856. {polyrob-1.4.0 → polyrob-1.6.0}/docs/guide/self-hosting.md +0 -0
  1857. {polyrob-1.4.0 → polyrob-1.6.0}/docs/guide/upgrading.md +0 -0
  1858. {polyrob-1.4.0 → polyrob-1.6.0}/migrations/README.md +0 -0
  1859. {polyrob-1.4.0 → polyrob-1.6.0}/migrations/__init__.py +0 -0
  1860. {polyrob-1.4.0 → polyrob-1.6.0}/migrations/boot.py +0 -0
  1861. {polyrob-1.4.0 → polyrob-1.6.0}/migrations/version_manager.py +0 -0
  1862. {polyrob-1.4.0 → polyrob-1.6.0}/migrations/versions/__init__.py +0 -0
  1863. {polyrob-1.4.0 → polyrob-1.6.0}/migrations/versions/v1_0_0_baseline.py +0 -0
  1864. {polyrob-1.4.0 → polyrob-1.6.0}/migrations/versions/v1_10_0_usage_records_cache_creation.py +0 -0
  1865. {polyrob-1.4.0 → polyrob-1.6.0}/migrations/versions/v1_1_0_user_mcp_servers.py +0 -0
  1866. {polyrob-1.4.0 → polyrob-1.6.0}/migrations/versions/v1_3_0_billing_failures.py +0 -0
  1867. {polyrob-1.4.0 → polyrob-1.6.0}/migrations/versions/v1_4_0_polymarket_credentials.py +0 -0
  1868. {polyrob-1.4.0 → polyrob-1.6.0}/migrations/versions/v1_5_0_usage_records_request_id.py +0 -0
  1869. {polyrob-1.4.0 → polyrob-1.6.0}/migrations/versions/v1_6_0_x402_tx_hash_unique.py +0 -0
  1870. {polyrob-1.4.0 → polyrob-1.6.0}/migrations/versions/v1_7_0_x402_subscription_pending_unique.py +0 -0
  1871. {polyrob-1.4.0 → polyrob-1.6.0}/migrations/versions/v1_8_0_x402_tx_hash_case_normalize.py +0 -0
  1872. {polyrob-1.4.0 → polyrob-1.6.0}/migrations/versions/v1_9_0_x402_payment_asset_columns.py +0 -0
  1873. {polyrob-1.4.0 → polyrob-1.6.0}/modules/README.md +0 -0
  1874. {polyrob-1.4.0 → polyrob-1.6.0}/modules/__init__.py +0 -0
  1875. {polyrob-1.4.0 → polyrob-1.6.0}/modules/auth/__init__.py +0 -0
  1876. {polyrob-1.4.0 → polyrob-1.6.0}/modules/auth/api_key_manager.py +0 -0
  1877. {polyrob-1.4.0 → polyrob-1.6.0}/modules/auth/siwe_auth.py +0 -0
  1878. {polyrob-1.4.0 → polyrob-1.6.0}/modules/avatar/__init__.py +0 -0
  1879. {polyrob-1.4.0 → polyrob-1.6.0}/modules/avatar/push.py +0 -0
  1880. {polyrob-1.4.0 → polyrob-1.6.0}/modules/base_module.py +0 -0
  1881. {polyrob-1.4.0 → polyrob-1.6.0}/modules/cards/__init__.py +0 -0
  1882. {polyrob-1.4.0 → polyrob-1.6.0}/modules/credits/cost_utils.py +0 -0
  1883. {polyrob-1.4.0 → polyrob-1.6.0}/modules/credits/reservations.py +0 -0
  1884. {polyrob-1.4.0 → polyrob-1.6.0}/modules/credits/unified_ledger.py +0 -0
  1885. {polyrob-1.4.0 → polyrob-1.6.0}/modules/credits/usage_rollup.py +0 -0
  1886. {polyrob-1.4.0 → polyrob-1.6.0}/modules/database/__init__.py +0 -0
  1887. {polyrob-1.4.0 → polyrob-1.6.0}/modules/database/audit_log.py +0 -0
  1888. {polyrob-1.4.0 → polyrob-1.6.0}/modules/database/connection.py +0 -0
  1889. {polyrob-1.4.0 → polyrob-1.6.0}/modules/database/conversation_contexts.py +0 -0
  1890. {polyrob-1.4.0 → polyrob-1.6.0}/modules/database/database_manager.py +0 -0
  1891. {polyrob-1.4.0 → polyrob-1.6.0}/modules/database/user_mcp_servers.py +0 -0
  1892. {polyrob-1.4.0 → polyrob-1.6.0}/modules/database/user_profiles.py +0 -0
  1893. {polyrob-1.4.0 → polyrob-1.6.0}/modules/database/x402_tables.py +0 -0
  1894. {polyrob-1.4.0 → polyrob-1.6.0}/modules/eip8004/README.md +0 -0
  1895. {polyrob-1.4.0 → polyrob-1.6.0}/modules/eip8004/__init__.py +0 -0
  1896. {polyrob-1.4.0 → polyrob-1.6.0}/modules/eip8004/contracts.py +0 -0
  1897. {polyrob-1.4.0 → polyrob-1.6.0}/modules/eip8004/feedback_replays.py +0 -0
  1898. {polyrob-1.4.0 → polyrob-1.6.0}/modules/eip8004/models.py +0 -0
  1899. {polyrob-1.4.0 → polyrob-1.6.0}/modules/eip8004/payment_proof.py +0 -0
  1900. {polyrob-1.4.0 → polyrob-1.6.0}/modules/eip8004/registration.py +0 -0
  1901. {polyrob-1.4.0 → polyrob-1.6.0}/modules/eip8004/reputation.py +0 -0
  1902. {polyrob-1.4.0 → polyrob-1.6.0}/modules/eip8004/validation.py +0 -0
  1903. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/__init__.py +0 -0
  1904. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/anthropic_client.py +0 -0
  1905. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/anthropic_images.py +0 -0
  1906. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/anthropic_sampling.py +0 -0
  1907. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/available_models.py +0 -0
  1908. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/billing_guard.py +0 -0
  1909. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/brain_scrubber.py +0 -0
  1910. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/cache_hints.py +0 -0
  1911. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/compat_anthropic.py +0 -0
  1912. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/compat_clients.py +0 -0
  1913. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/credit_errors.py +0 -0
  1914. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/deepseek_client.py +0 -0
  1915. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/deferred_tools.py +0 -0
  1916. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/gemini_client.py +0 -0
  1917. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/gemini_parts.py +0 -0
  1918. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/llm_factory.py +0 -0
  1919. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/manager_inventory.py +0 -0
  1920. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/messages.py +0 -0
  1921. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/model_catalog_recent.py +0 -0
  1922. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/model_pricing.py +0 -0
  1923. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/model_registry.py +0 -0
  1924. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/model_types.py +0 -0
  1925. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/nvidia_client.py +0 -0
  1926. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/openai_client.py +0 -0
  1927. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/openrouter_reasoning.py +0 -0
  1928. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/output_budget.py +0 -0
  1929. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/provider_spec.py +0 -0
  1930. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/recovery_boundary.py +0 -0
  1931. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/responses_client.py +0 -0
  1932. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/retry_log.py +0 -0
  1933. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/sdk_caps.py +0 -0
  1934. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/seat_probe.py +0 -0
  1935. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/think_scrubber.py +0 -0
  1936. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/token_counter.py +0 -0
  1937. {polyrob-1.4.0 → polyrob-1.6.0}/modules/llm/usage_extract.py +0 -0
  1938. {polyrob-1.4.0 → polyrob-1.6.0}/modules/memory/__init__.py +0 -0
  1939. {polyrob-1.4.0 → polyrob-1.6.0}/modules/memory/backend_factory.py +0 -0
  1940. {polyrob-1.4.0 → polyrob-1.6.0}/modules/memory/cache_manager.py +0 -0
  1941. {polyrob-1.4.0 → polyrob-1.6.0}/modules/memory/memory_manager.py +0 -0
  1942. {polyrob-1.4.0 → polyrob-1.6.0}/modules/memory/models.py +0 -0
  1943. {polyrob-1.4.0 → polyrob-1.6.0}/modules/memory/provider.py +0 -0
  1944. {polyrob-1.4.0 → polyrob-1.6.0}/modules/memory/recall_consolidation.py +0 -0
  1945. {polyrob-1.4.0 → polyrob-1.6.0}/modules/memory/scope.py +0 -0
  1946. {polyrob-1.4.0 → polyrob-1.6.0}/modules/memory/sqlite_kb_store.py +0 -0
  1947. {polyrob-1.4.0 → polyrob-1.6.0}/modules/memory/task/__init__.py +0 -0
  1948. {polyrob-1.4.0 → polyrob-1.6.0}/modules/memory/task/context_retriever.py +0 -0
  1949. {polyrob-1.4.0 → polyrob-1.6.0}/modules/memory/task/lexical_retriever.py +0 -0
  1950. {polyrob-1.4.0 → polyrob-1.6.0}/modules/memory/task/null_context_manager.py +0 -0
  1951. {polyrob-1.4.0 → polyrob-1.6.0}/modules/memory/task/semantic_retriever.py +0 -0
  1952. {polyrob-1.4.0 → polyrob-1.6.0}/modules/memory/task/threat_scan.py +0 -0
  1953. {polyrob-1.4.0 → polyrob-1.6.0}/modules/memory/wikilinks.py +0 -0
  1954. {polyrob-1.4.0 → polyrob-1.6.0}/modules/payments/__init__.py +0 -0
  1955. {polyrob-1.4.0 → polyrob-1.6.0}/modules/payments/deposit_monitor.py +0 -0
  1956. {polyrob-1.4.0 → polyrob-1.6.0}/modules/payments/networks.py +0 -0
  1957. {polyrob-1.4.0 → polyrob-1.6.0}/modules/payments/price_oracle.py +0 -0
  1958. {polyrob-1.4.0 → polyrob-1.6.0}/modules/payments/treasury_sweeper.py +0 -0
  1959. {polyrob-1.4.0 → polyrob-1.6.0}/modules/payments/wallet_generator.py +0 -0
  1960. {polyrob-1.4.0 → polyrob-1.6.0}/modules/skills/__init__.py +0 -0
  1961. {polyrob-1.4.0 → polyrob-1.6.0}/modules/transcription/__init__.py +0 -0
  1962. {polyrob-1.4.0 → polyrob-1.6.0}/modules/transcription/base.py +0 -0
  1963. {polyrob-1.4.0 → polyrob-1.6.0}/modules/transcription/faster_whisper_transcriber.py +0 -0
  1964. {polyrob-1.4.0 → polyrob-1.6.0}/modules/x402/README.md +0 -0
  1965. {polyrob-1.4.0 → polyrob-1.6.0}/modules/x402/__init__.py +0 -0
  1966. {polyrob-1.4.0 → polyrob-1.6.0}/modules/x402/_db.py +0 -0
  1967. {polyrob-1.4.0 → polyrob-1.6.0}/modules/x402/inbound_receipts.py +0 -0
  1968. {polyrob-1.4.0 → polyrob-1.6.0}/modules/x402/income_chains.py +0 -0
  1969. {polyrob-1.4.0 → polyrob-1.6.0}/modules/x402/invoice_jitter.py +0 -0
  1970. {polyrob-1.4.0 → polyrob-1.6.0}/modules/x402/invoice_sizing.py +0 -0
  1971. {polyrob-1.4.0 → polyrob-1.6.0}/modules/x402/invoice_status.py +0 -0
  1972. {polyrob-1.4.0 → polyrob-1.6.0}/modules/x402/invoicing_note.py +0 -0
  1973. {polyrob-1.4.0 → polyrob-1.6.0}/modules/x402/onchain_probe.py +0 -0
  1974. {polyrob-1.4.0 → polyrob-1.6.0}/modules/x402/response_outcome.py +0 -0
  1975. {polyrob-1.4.0 → polyrob-1.6.0}/modules/x402/settlement_attempt.py +0 -0
  1976. {polyrob-1.4.0 → polyrob-1.6.0}/modules/x402/settlement_notify.py +0 -0
  1977. {polyrob-1.4.0 → polyrob-1.6.0}/modules/x402/settlement_reputation.py +0 -0
  1978. {polyrob-1.4.0 → polyrob-1.6.0}/modules/x402/settlement_subscriptions.py +0 -0
  1979. {polyrob-1.4.0 → polyrob-1.6.0}/modules/x402/settlement_watcher.py +0 -0
  1980. {polyrob-1.4.0 → polyrob-1.6.0}/modules/x402/subscriptions.py +0 -0
  1981. {polyrob-1.4.0 → polyrob-1.6.0}/modules/x402/x402_integration.py +0 -0
  1982. {polyrob-1.4.0 → polyrob-1.6.0}/packs/daytona/polyrob_daytona/__init__.py +0 -0
  1983. {polyrob-1.4.0 → polyrob-1.6.0}/packs/daytona/polyrob_daytona/backend.py +0 -0
  1984. {polyrob-1.4.0 → polyrob-1.6.0}/packs/daytona/polyrob_daytona/pack.toml +0 -0
  1985. {polyrob-1.4.0 → polyrob-1.6.0}/packs/discovery/polyrob_discovery/__init__.py +0 -0
  1986. {polyrob-1.4.0 → polyrob-1.6.0}/packs/discovery/polyrob_discovery/anysite/__init__.py +0 -0
  1987. {polyrob-1.4.0 → polyrob-1.6.0}/packs/discovery/polyrob_discovery/anysite/client.py +0 -0
  1988. {polyrob-1.4.0 → polyrob-1.6.0}/packs/discovery/polyrob_discovery/anysite/tool.py +0 -0
  1989. {polyrob-1.4.0 → polyrob-1.6.0}/packs/discovery/polyrob_discovery/pack.toml +0 -0
  1990. {polyrob-1.4.0 → polyrob-1.6.0}/packs/discovery/polyrob_discovery/perplexity.py +0 -0
  1991. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/__init__.py +0 -0
  1992. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/http_seat.py +0 -0
  1993. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/hyperliquid/__init__.py +0 -0
  1994. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/hyperliquid/api_models.py +0 -0
  1995. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/hyperliquid/models.py +0 -0
  1996. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/hyperliquid/remote_signing.py +0 -0
  1997. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/hyperliquid/routes.py +0 -0
  1998. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/hyperliquid/service.py +0 -0
  1999. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/hyperliquid/store.py +0 -0
  2000. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/hyperliquid/store_models.py +0 -0
  2001. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/order_safety.py +0 -0
  2002. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/order_submission.py +0 -0
  2003. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/polymarket/__init__.py +0 -0
  2004. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/polymarket/api_models.py +0 -0
  2005. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/polymarket/clob_adapter.py +0 -0
  2006. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/polymarket/fees.py +0 -0
  2007. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/polymarket/models.py +0 -0
  2008. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/polymarket/routes.py +0 -0
  2009. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/polymarket/service.py +0 -0
  2010. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/polymarket/store.py +0 -0
  2011. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/polymarket/store_models.py +0 -0
  2012. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/registration.py +0 -0
  2013. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/risk_limits.py +0 -0
  2014. {polyrob-1.4.0 → polyrob-1.6.0}/packs/markets/polyrob_markets/trade_gate.py +0 -0
  2015. {polyrob-1.4.0 → polyrob-1.6.0}/packs/modal/polyrob_modal/__init__.py +0 -0
  2016. {polyrob-1.4.0 → polyrob-1.6.0}/packs/modal/polyrob_modal/backend.py +0 -0
  2017. {polyrob-1.4.0 → polyrob-1.6.0}/packs/modal/polyrob_modal/pack.toml +0 -0
  2018. {polyrob-1.4.0 → polyrob-1.6.0}/packs/singularity/polyrob_singularity/__init__.py +0 -0
  2019. {polyrob-1.4.0 → polyrob-1.6.0}/packs/singularity/polyrob_singularity/backend.py +0 -0
  2020. {polyrob-1.4.0 → polyrob-1.6.0}/packs/singularity/polyrob_singularity/pack.toml +0 -0
  2021. {polyrob-1.4.0 → polyrob-1.6.0}/packs/vercel_sandbox/polyrob_vercel_sandbox/__init__.py +0 -0
  2022. {polyrob-1.4.0 → polyrob-1.6.0}/packs/vercel_sandbox/polyrob_vercel_sandbox/backend.py +0 -0
  2023. {polyrob-1.4.0 → polyrob-1.6.0}/packs/vercel_sandbox/polyrob_vercel_sandbox/pack.toml +0 -0
  2024. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/__init__.py +0 -0
  2025. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/commands/__init__.py +0 -0
  2026. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/commands/x.py +0 -0
  2027. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/commands/x_account.py +0 -0
  2028. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/console_routes.py +0 -0
  2029. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/cron_delivery.py +0 -0
  2030. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/handle_ids.py +0 -0
  2031. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/owner_verbs.py +0 -0
  2032. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/status.py +0 -0
  2033. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/surface/__init__.py +0 -0
  2034. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/surface/client.py +0 -0
  2035. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/surface/harness.py +0 -0
  2036. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/surface/launch.py +0 -0
  2037. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/surface/poller.py +0 -0
  2038. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/surface/probe.py +0 -0
  2039. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/surface/surface.py +0 -0
  2040. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/write_budget.py +0 -0
  2041. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/x_browser/__init__.py +0 -0
  2042. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/x_browser/driver.py +0 -0
  2043. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/x_browser/escalation.py +0 -0
  2044. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/x_browser/registration.py +0 -0
  2045. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/x_browser/session_store.py +0 -0
  2046. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/x_browser/signup.py +0 -0
  2047. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/x_browser/tool.py +0 -0
  2048. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/x_chat_client.py +0 -0
  2049. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/x_login_flow.py +0 -0
  2050. {polyrob-1.4.0 → polyrob-1.6.0}/packs/x/polyrob_x/x_oauth2.py +0 -0
  2051. {polyrob-1.4.0 → polyrob-1.6.0}/polyrob/__init__.py +0 -0
  2052. {polyrob-1.4.0 → polyrob-1.6.0}/polyrob/app/__init__.py +0 -0
  2053. {polyrob-1.4.0 → polyrob-1.6.0}/polyrob/app/bot.py +0 -0
  2054. {polyrob-1.4.0 → polyrob-1.6.0}/polyrob/app/initialization.py +0 -0
  2055. {polyrob-1.4.0 → polyrob-1.6.0}/polyrob.egg-info/dependency_links.txt +0 -0
  2056. {polyrob-1.4.0 → polyrob-1.6.0}/polyrob.egg-info/entry_points.txt +0 -0
  2057. {polyrob-1.4.0 → polyrob-1.6.0}/polyrob.egg-info/top_level.txt +0 -0
  2058. {polyrob-1.4.0 → polyrob-1.6.0}/setup.cfg +0 -0
  2059. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/README.md +0 -0
  2060. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/__init__.py +0 -0
  2061. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/_actor.py +0 -0
  2062. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/_launch.py +0 -0
  2063. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/_probe.py +0 -0
  2064. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/_shared.py +0 -0
  2065. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/card_builder.py +0 -0
  2066. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/dingtalk/__init__.py +0 -0
  2067. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/dingtalk/client.py +0 -0
  2068. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/dingtalk/events.py +0 -0
  2069. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/dingtalk/harness.py +0 -0
  2070. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/dingtalk/launch.py +0 -0
  2071. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/dingtalk/probe.py +0 -0
  2072. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/dingtalk/stream.py +0 -0
  2073. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/dingtalk/surface.py +0 -0
  2074. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/discord/__init__.py +0 -0
  2075. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/discord/client.py +0 -0
  2076. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/discord/gateway.py +0 -0
  2077. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/discord/harness.py +0 -0
  2078. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/discord/launch.py +0 -0
  2079. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/discord/probe.py +0 -0
  2080. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/discord/surface.py +0 -0
  2081. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/email/__init__.py +0 -0
  2082. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/email/dedup.py +0 -0
  2083. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/email/fetchers.py +0 -0
  2084. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/email/harness.py +0 -0
  2085. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/email/launch.py +0 -0
  2086. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/email/probe.py +0 -0
  2087. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/email/surface.py +0 -0
  2088. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/feishu/__init__.py +0 -0
  2089. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/feishu/cards.py +0 -0
  2090. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/feishu/client.py +0 -0
  2091. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/feishu/events.py +0 -0
  2092. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/feishu/harness.py +0 -0
  2093. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/feishu/launch.py +0 -0
  2094. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/feishu/probe.py +0 -0
  2095. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/feishu/surface.py +0 -0
  2096. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/feishu/webhook.py +0 -0
  2097. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/feishu/ws.py +0 -0
  2098. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/signal/__init__.py +0 -0
  2099. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/signal/client.py +0 -0
  2100. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/signal/harness.py +0 -0
  2101. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/signal/launch.py +0 -0
  2102. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/signal/probe.py +0 -0
  2103. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/signal/surface.py +0 -0
  2104. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/slack/__init__.py +0 -0
  2105. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/slack/client.py +0 -0
  2106. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/slack/harness.py +0 -0
  2107. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/slack/launch.py +0 -0
  2108. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/slack/probe.py +0 -0
  2109. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/slack/socket_mode.py +0 -0
  2110. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/slack/surface.py +0 -0
  2111. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/__init__.py +0 -0
  2112. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/actions.py +0 -0
  2113. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/apps_ops.py +0 -0
  2114. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/check_ops.py +0 -0
  2115. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/contacts_ops.py +0 -0
  2116. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/dapp_ops.py +0 -0
  2117. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/dedup.py +0 -0
  2118. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/dev_rail.py +0 -0
  2119. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/history_ops.py +0 -0
  2120. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/holdings_ops.py +0 -0
  2121. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/inbound.py +0 -0
  2122. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/kb_ops.py +0 -0
  2123. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/launch.py +0 -0
  2124. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/lp_ops.py +0 -0
  2125. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/moderation.py +0 -0
  2126. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/poll_backoff.py +0 -0
  2127. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/poll_batch.py +0 -0
  2128. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/probe.py +0 -0
  2129. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/rate_limit.py +0 -0
  2130. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/room_moderator.py +0 -0
  2131. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/room_turn.py +0 -0
  2132. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/surface.py +0 -0
  2133. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/swap_ops.py +0 -0
  2134. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/triggers.py +0 -0
  2135. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/voice.py +0 -0
  2136. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/telegram/why_ops.py +0 -0
  2137. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/whatsapp/__init__.py +0 -0
  2138. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/whatsapp/client.py +0 -0
  2139. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/whatsapp/harness.py +0 -0
  2140. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/whatsapp/inbound.py +0 -0
  2141. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/whatsapp/launch.py +0 -0
  2142. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/whatsapp/probe.py +0 -0
  2143. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/whatsapp/surface.py +0 -0
  2144. {polyrob-1.4.0 → polyrob-1.6.0}/surfaces/whatsapp/window.py +0 -0
  2145. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_a2a_protocol.py +0 -0
  2146. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_accessibility_snapshot.py +0 -0
  2147. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_base_deps_ratchet.py +0 -0
  2148. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_bool_env_parse_ratchet.py +0 -0
  2149. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_browser_launch_ratchet.py +0 -0
  2150. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_changelog_release.py +0 -0
  2151. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_collection_roots.py +0 -0
  2152. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_config_doc_work_item_ids.py +0 -0
  2153. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_conftest_operator_env_guard.py +0 -0
  2154. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_core_platform_boundary.py +0 -0
  2155. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_core_server_boundary.py +0 -0
  2156. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_dynamic_pricing.py +0 -0
  2157. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_effect_classification_ratchet.py +0 -0
  2158. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_embedder_needed.py +0 -0
  2159. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_event_kind_contract.py +0 -0
  2160. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_flag_retirement.py +0 -0
  2161. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_gemini_fixes.py +0 -0
  2162. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_harness_actor_claims_ratchet.py +0 -0
  2163. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_history_mutation_ratchet.py +0 -0
  2164. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_home_binding_ratchet.py +0 -0
  2165. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_import_layering.py +0 -0
  2166. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_imports_declared.py +0 -0
  2167. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_instruction_surface_ratchet.py +0 -0
  2168. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_knowledge_section_ratchet.py +0 -0
  2169. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_lazy_embedder.py +0 -0
  2170. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_llm_timeout_ssot.py +0 -0
  2171. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_mcp_tool_fix.py +0 -0
  2172. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_owner_context_ratchet.py +0 -0
  2173. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_pack_sdk_facade.py +0 -0
  2174. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_paid_room_action_ratchet.py +0 -0
  2175. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_private_cleanup_ratchet.py +0 -0
  2176. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_provider_registry_ratchet.py +0 -0
  2177. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_public_docs_links.py +0 -0
  2178. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_public_files_present.py +0 -0
  2179. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_public_release_surface.py +0 -0
  2180. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_rate_limiter_ratchet.py +0 -0
  2181. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_rename_tail.py +0 -0
  2182. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_retired_pack_dist_names_ratchet.py +0 -0
  2183. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_room_safety_ratchet.py +0 -0
  2184. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_rule_render_ratchet.py +0 -0
  2185. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_runtime_text_names_no_private_file.py +0 -0
  2186. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_verb_policy_literal_ratchet.py +0 -0
  2187. {polyrob-1.4.0 → polyrob-1.6.0}/tests/test_version_consistency.py +0 -0
  2188. {polyrob-1.4.0 → polyrob-1.6.0}/tools/README.md +0 -0
  2189. {polyrob-1.4.0 → polyrob-1.6.0}/tools/__init__.py +0 -0
  2190. {polyrob-1.4.0 → polyrob-1.6.0}/tools/agent_nft/__init__.py +0 -0
  2191. {polyrob-1.4.0 → polyrob-1.6.0}/tools/agent_nft/adopt.py +0 -0
  2192. {polyrob-1.4.0 → polyrob-1.6.0}/tools/agent_nft/core_verbs.py +0 -0
  2193. {polyrob-1.4.0 → polyrob-1.6.0}/tools/agent_nft/journal_write.py +0 -0
  2194. {polyrob-1.4.0 → polyrob-1.6.0}/tools/agent_nft/registration.py +0 -0
  2195. {polyrob-1.4.0 → polyrob-1.6.0}/tools/agent_nft/view.py +0 -0
  2196. {polyrob-1.4.0 → polyrob-1.6.0}/tools/alchemy/__init__.py +0 -0
  2197. {polyrob-1.4.0 → polyrob-1.6.0}/tools/app_service/__init__.py +0 -0
  2198. {polyrob-1.4.0 → polyrob-1.6.0}/tools/app_service/tool.py +0 -0
  2199. {polyrob-1.4.0 → polyrob-1.6.0}/tools/avatar_sources.py +0 -0
  2200. {polyrob-1.4.0 → polyrob-1.6.0}/tools/browser/__init__.py +0 -0
  2201. {polyrob-1.4.0 → polyrob-1.6.0}/tools/browser/_flags.py +0 -0
  2202. {polyrob-1.4.0 → polyrob-1.6.0}/tools/browser/actions.py +0 -0
  2203. {polyrob-1.4.0 → polyrob-1.6.0}/tools/browser/browser_manager.py +0 -0
  2204. {polyrob-1.4.0 → polyrob-1.6.0}/tools/browser/child_env.py +0 -0
  2205. {polyrob-1.4.0 → polyrob-1.6.0}/tools/browser/context.py +0 -0
  2206. {polyrob-1.4.0 → polyrob-1.6.0}/tools/browser/downloads.py +0 -0
  2207. {polyrob-1.4.0 → polyrob-1.6.0}/tools/browser/launch_security.py +0 -0
  2208. {polyrob-1.4.0 → polyrob-1.6.0}/tools/browser/playwright_utils.py +0 -0
  2209. {polyrob-1.4.0 → polyrob-1.6.0}/tools/code_exec/SANDBOX_SECURITY.md +0 -0
  2210. {polyrob-1.4.0 → polyrob-1.6.0}/tools/code_exec/__init__.py +0 -0
  2211. {polyrob-1.4.0 → polyrob-1.6.0}/tools/code_exec/backend.py +0 -0
  2212. {polyrob-1.4.0 → polyrob-1.6.0}/tools/code_exec/backend_cache.py +0 -0
  2213. {polyrob-1.4.0 → polyrob-1.6.0}/tools/code_exec/backends/__init__.py +0 -0
  2214. {polyrob-1.4.0 → polyrob-1.6.0}/tools/code_exec/backends/_proc.py +0 -0
  2215. {polyrob-1.4.0 → polyrob-1.6.0}/tools/code_exec/backends/bounded_capture.py +0 -0
  2216. {polyrob-1.4.0 → polyrob-1.6.0}/tools/code_exec/backends/docker.py +0 -0
  2217. {polyrob-1.4.0 → polyrob-1.6.0}/tools/code_exec/backends/local_subprocess.py +0 -0
  2218. {polyrob-1.4.0 → polyrob-1.6.0}/tools/code_exec/backends/remote_sandbox.py +0 -0
  2219. {polyrob-1.4.0 → polyrob-1.6.0}/tools/code_exec/backends/ssh.py +0 -0
  2220. {polyrob-1.4.0 → polyrob-1.6.0}/tools/code_exec/egress_proxy.py +0 -0
  2221. {polyrob-1.4.0 → polyrob-1.6.0}/tools/code_exec/env_policy.py +0 -0
  2222. {polyrob-1.4.0 → polyrob-1.6.0}/tools/code_exec/kernel.py +0 -0
  2223. {polyrob-1.4.0 → polyrob-1.6.0}/tools/code_exec/limits.py +0 -0
  2224. {polyrob-1.4.0 → polyrob-1.6.0}/tools/code_exec/pack_backends.py +0 -0
  2225. {polyrob-1.4.0 → polyrob-1.6.0}/tools/code_exec/result.py +0 -0
  2226. {polyrob-1.4.0 → polyrob-1.6.0}/tools/coding/__init__.py +0 -0
  2227. {polyrob-1.4.0 → polyrob-1.6.0}/tools/coding/edit.py +0 -0
  2228. {polyrob-1.4.0 → polyrob-1.6.0}/tools/coding/lsp.py +0 -0
  2229. {polyrob-1.4.0 → polyrob-1.6.0}/tools/coding/search.py +0 -0
  2230. {polyrob-1.4.0 → polyrob-1.6.0}/tools/coding/snapshot.py +0 -0
  2231. {polyrob-1.4.0 → polyrob-1.6.0}/tools/coding/textio.py +0 -0
  2232. {polyrob-1.4.0 → polyrob-1.6.0}/tools/coding/tool.py +0 -0
  2233. {polyrob-1.4.0 → polyrob-1.6.0}/tools/collabland/__init__.py +0 -0
  2234. {polyrob-1.4.0 → polyrob-1.6.0}/tools/collabland/collabland_tool.py +0 -0
  2235. {polyrob-1.4.0 → polyrob-1.6.0}/tools/controller/__init__.py +0 -0
  2236. {polyrob-1.4.0 → polyrob-1.6.0}/tools/controller/approval_interactive.py +0 -0
  2237. {polyrob-1.4.0 → polyrob-1.6.0}/tools/controller/emit.py +0 -0
  2238. {polyrob-1.4.0 → polyrob-1.6.0}/tools/controller/grant_card.py +0 -0
  2239. {polyrob-1.4.0 → polyrob-1.6.0}/tools/controller/hooks.py +0 -0
  2240. {polyrob-1.4.0 → polyrob-1.6.0}/tools/controller/insights_action.py +0 -0
  2241. {polyrob-1.4.0 → polyrob-1.6.0}/tools/controller/introspection.py +0 -0
  2242. {polyrob-1.4.0 → polyrob-1.6.0}/tools/controller/mcp_gate.py +0 -0
  2243. {polyrob-1.4.0 → polyrob-1.6.0}/tools/controller/message_delete.py +0 -0
  2244. {polyrob-1.4.0 → polyrob-1.6.0}/tools/controller/registry/__init__.py +0 -0
  2245. {polyrob-1.4.0 → polyrob-1.6.0}/tools/controller/registry/schema_generators.py +0 -0
  2246. {polyrob-1.4.0 → polyrob-1.6.0}/tools/controller/registry/schema_sanitizer.py +0 -0
  2247. {polyrob-1.4.0 → polyrob-1.6.0}/tools/controller/service.py +0 -0
  2248. {polyrob-1.4.0 → polyrob-1.6.0}/tools/controller/turn_origin.py +0 -0
  2249. {polyrob-1.4.0 → polyrob-1.6.0}/tools/controller/wallet_authority.py +0 -0
  2250. {polyrob-1.4.0 → polyrob-1.6.0}/tools/credential_cache.py +0 -0
  2251. {polyrob-1.4.0 → polyrob-1.6.0}/tools/dapp_browser/__init__.py +0 -0
  2252. {polyrob-1.4.0 → polyrob-1.6.0}/tools/dapp_browser/js.py +0 -0
  2253. {polyrob-1.4.0 → polyrob-1.6.0}/tools/dapp_browser/registration.py +0 -0
  2254. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/__init__.py +0 -0
  2255. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/account_mode.py +0 -0
  2256. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/agent_registration.py +0 -0
  2257. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/bridge_evm_leg.py +0 -0
  2258. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/bridge_price.py +0 -0
  2259. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/bridge_token_origin.py +0 -0
  2260. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/data_chain_reads.py +0 -0
  2261. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/data_lp.py +0 -0
  2262. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/data_quote.py +0 -0
  2263. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/data_render.py +0 -0
  2264. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/lp_abi.py +0 -0
  2265. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/lp_reads.py +0 -0
  2266. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/lp_receipts.py +0 -0
  2267. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/lp_v4.py +0 -0
  2268. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/lp_valuation.py +0 -0
  2269. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/nft_verbs.py +0 -0
  2270. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/payment_quote.py +0 -0
  2271. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/pool_screen.py +0 -0
  2272. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/providers/__init__.py +0 -0
  2273. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/providers/_http.py +0 -0
  2274. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/providers/alchemy_index.py +0 -0
  2275. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/providers/base.py +0 -0
  2276. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/providers/dexscreener.py +0 -0
  2277. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/providers/goplus.py +0 -0
  2278. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/providers/jupiter.py +0 -0
  2279. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/providers/jupiter_price.py +0 -0
  2280. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/providers/routes/__init__.py +0 -0
  2281. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/providers/routes/univ3_route.py +0 -0
  2282. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/providers/token_audits.py +0 -0
  2283. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/providers/univ3.py +0 -0
  2284. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/receipt_wait.py +0 -0
  2285. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/signer_entry.py +0 -0
  2286. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/solana_rail_adapters.py +0 -0
  2287. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/token_identity_ask.py +0 -0
  2288. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/token_screen.py +0 -0
  2289. {polyrob-1.4.0 → polyrob-1.6.0}/tools/defi/wallet_intel.py +0 -0
  2290. {polyrob-1.4.0 → polyrob-1.6.0}/tools/document_parser.py +0 -0
  2291. {polyrob-1.4.0 → polyrob-1.6.0}/tools/document_worker.py +0 -0
  2292. {polyrob-1.4.0 → polyrob-1.6.0}/tools/dom/__init__.py +0 -0
  2293. {polyrob-1.4.0 → polyrob-1.6.0}/tools/dom/buildDomTree.js +0 -0
  2294. {polyrob-1.4.0 → polyrob-1.6.0}/tools/dom/service.py +0 -0
  2295. {polyrob-1.4.0 → polyrob-1.6.0}/tools/email_mailbox.py +0 -0
  2296. {polyrob-1.4.0 → polyrob-1.6.0}/tools/email_providers/__init__.py +0 -0
  2297. {polyrob-1.4.0 → polyrob-1.6.0}/tools/email_providers/agentmail.py +0 -0
  2298. {polyrob-1.4.0 → polyrob-1.6.0}/tools/exceptions.py +0 -0
  2299. {polyrob-1.4.0 → polyrob-1.6.0}/tools/filesystem_doc_kind.py +0 -0
  2300. {polyrob-1.4.0 → polyrob-1.6.0}/tools/filesystem_pdf.py +0 -0
  2301. {polyrob-1.4.0 → polyrob-1.6.0}/tools/git/__init__.py +0 -0
  2302. {polyrob-1.4.0 → polyrob-1.6.0}/tools/git/tool.py +0 -0
  2303. {polyrob-1.4.0 → polyrob-1.6.0}/tools/github/__init__.py +0 -0
  2304. {polyrob-1.4.0 → polyrob-1.6.0}/tools/github/client.py +0 -0
  2305. {polyrob-1.4.0 → polyrob-1.6.0}/tools/github/tool.py +0 -0
  2306. {polyrob-1.4.0 → polyrob-1.6.0}/tools/hf_deploy/__init__.py +0 -0
  2307. {polyrob-1.4.0 → polyrob-1.6.0}/tools/hf_deploy/broker.py +0 -0
  2308. {polyrob-1.4.0 → polyrob-1.6.0}/tools/hf_deploy/digest.py +0 -0
  2309. {polyrob-1.4.0 → polyrob-1.6.0}/tools/hf_deploy/reconcile.py +0 -0
  2310. {polyrob-1.4.0 → polyrob-1.6.0}/tools/hf_deploy/registry.py +0 -0
  2311. {polyrob-1.4.0 → polyrob-1.6.0}/tools/hf_deploy/tool.py +0 -0
  2312. {polyrob-1.4.0 → polyrob-1.6.0}/tools/intel/__init__.py +0 -0
  2313. {polyrob-1.4.0 → polyrob-1.6.0}/tools/intel/cache.py +0 -0
  2314. {polyrob-1.4.0 → polyrob-1.6.0}/tools/kb_autoingest.py +0 -0
  2315. {polyrob-1.4.0 → polyrob-1.6.0}/tools/knowledge_ingest.py +0 -0
  2316. {polyrob-1.4.0 → polyrob-1.6.0}/tools/knowledge_inventory.py +0 -0
  2317. {polyrob-1.4.0 → polyrob-1.6.0}/tools/launchpad/__init__.py +0 -0
  2318. {polyrob-1.4.0 → polyrob-1.6.0}/tools/launchpad/pons_abi.py +0 -0
  2319. {polyrob-1.4.0 → polyrob-1.6.0}/tools/launchpad/provenance.py +0 -0
  2320. {polyrob-1.4.0 → polyrob-1.6.0}/tools/launchpad/registration.py +0 -0
  2321. {polyrob-1.4.0 → polyrob-1.6.0}/tools/mcp/README.md +0 -0
  2322. {polyrob-1.4.0 → polyrob-1.6.0}/tools/mcp/__init__.py +0 -0
  2323. {polyrob-1.4.0 → polyrob-1.6.0}/tools/mcp/catalog.py +0 -0
  2324. {polyrob-1.4.0 → polyrob-1.6.0}/tools/mcp/child_env.py +0 -0
  2325. {polyrob-1.4.0 → polyrob-1.6.0}/tools/mcp/oauth_bridge.py +0 -0
  2326. {polyrob-1.4.0 → polyrob-1.6.0}/tools/mcp/param_coercion.py +0 -0
  2327. {polyrob-1.4.0 → polyrob-1.6.0}/tools/mcp/protocol.py +0 -0
  2328. {polyrob-1.4.0 → polyrob-1.6.0}/tools/mcp/rate_limit.py +0 -0
  2329. {polyrob-1.4.0 → polyrob-1.6.0}/tools/mcp/security.py +0 -0
  2330. {polyrob-1.4.0 → polyrob-1.6.0}/tools/mcp/self_install.py +0 -0
  2331. {polyrob-1.4.0 → polyrob-1.6.0}/tools/mcp/server_manager.py +0 -0
  2332. {polyrob-1.4.0 → polyrob-1.6.0}/tools/mcp/subscriptions.py +0 -0
  2333. {polyrob-1.4.0 → polyrob-1.6.0}/tools/mcp/user_mcp_service.py +0 -0
  2334. {polyrob-1.4.0 → polyrob-1.6.0}/tools/mcp/validation_tracker.py +0 -0
  2335. {polyrob-1.4.0 → polyrob-1.6.0}/tools/mcp/views.py +0 -0
  2336. {polyrob-1.4.0 → polyrob-1.6.0}/tools/oauth/__init__.py +0 -0
  2337. {polyrob-1.4.0 → polyrob-1.6.0}/tools/oauth/file_store.py +0 -0
  2338. {polyrob-1.4.0 → polyrob-1.6.0}/tools/oauth/manager.py +0 -0
  2339. {polyrob-1.4.0 → polyrob-1.6.0}/tools/oauth/provider.py +0 -0
  2340. {polyrob-1.4.0 → polyrob-1.6.0}/tools/oauth/providers/__init__.py +0 -0
  2341. {polyrob-1.4.0 → polyrob-1.6.0}/tools/oauth/providers/generic_oauth2.py +0 -0
  2342. {polyrob-1.4.0 → polyrob-1.6.0}/tools/publish/__init__.py +0 -0
  2343. {polyrob-1.4.0 → polyrob-1.6.0}/tools/rails/__init__.py +0 -0
  2344. {polyrob-1.4.0 → polyrob-1.6.0}/tools/rails/verification.py +0 -0
  2345. {polyrob-1.4.0 → polyrob-1.6.0}/tools/self_env/__init__.py +0 -0
  2346. {polyrob-1.4.0 → polyrob-1.6.0}/tools/self_env/tool.py +0 -0
  2347. {polyrob-1.4.0 → polyrob-1.6.0}/tools/shell/__init__.py +0 -0
  2348. {polyrob-1.4.0 → polyrob-1.6.0}/tools/shell/backend_pool.py +0 -0
  2349. {polyrob-1.4.0 → polyrob-1.6.0}/tools/shell/discipline.py +0 -0
  2350. {polyrob-1.4.0 → polyrob-1.6.0}/tools/shell/executor.py +0 -0
  2351. {polyrob-1.4.0 → polyrob-1.6.0}/tools/shell/executor_protocol.py +0 -0
  2352. {polyrob-1.4.0 → polyrob-1.6.0}/tools/shell/host_executor.py +0 -0
  2353. {polyrob-1.4.0 → polyrob-1.6.0}/tools/shell/jobs.py +0 -0
  2354. {polyrob-1.4.0 → polyrob-1.6.0}/tools/shell/loopback_allow.py +0 -0
  2355. {polyrob-1.4.0 → polyrob-1.6.0}/tools/shell/output.py +0 -0
  2356. {polyrob-1.4.0 → polyrob-1.6.0}/tools/shell/process_registry.py +0 -0
  2357. {polyrob-1.4.0 → polyrob-1.6.0}/tools/shell/process_tool.py +0 -0
  2358. {polyrob-1.4.0 → polyrob-1.6.0}/tools/shell/receipts.py +0 -0
  2359. {polyrob-1.4.0 → polyrob-1.6.0}/tools/shell/remote_executor.py +0 -0
  2360. {polyrob-1.4.0 → polyrob-1.6.0}/tools/shell/state.py +0 -0
  2361. {polyrob-1.4.0 → polyrob-1.6.0}/tools/shell/sudo.py +0 -0
  2362. {polyrob-1.4.0 → polyrob-1.6.0}/tools/shell/tool.py +0 -0
  2363. {polyrob-1.4.0 → polyrob-1.6.0}/tools/shell/watch.py +0 -0
  2364. {polyrob-1.4.0 → polyrob-1.6.0}/tools/ship_common.py +0 -0
  2365. {polyrob-1.4.0 → polyrob-1.6.0}/tools/user_directory.py +0 -0
  2366. {polyrob-1.4.0 → polyrob-1.6.0}/tools/wallet_holder.py +0 -0
  2367. {polyrob-1.4.0 → polyrob-1.6.0}/tools/web_fetch/__init__.py +0 -0
  2368. {polyrob-1.4.0 → polyrob-1.6.0}/tools/web_fetch/fetcher.py +0 -0
  2369. {polyrob-1.4.0 → polyrob-1.6.0}/tools/web_fetch/render.py +0 -0
  2370. {polyrob-1.4.0 → polyrob-1.6.0}/tools/web_fetch/tool.py +0 -0
  2371. {polyrob-1.4.0 → polyrob-1.6.0}/tools/x402/__init__.py +0 -0
  2372. {polyrob-1.4.0 → polyrob-1.6.0}/tools/x402/client.py +0 -0
  2373. {polyrob-1.4.0 → polyrob-1.6.0}/tools/x402/discovery.py +0 -0
  2374. {polyrob-1.4.0 → polyrob-1.6.0}/tools/x402/invoice_tool.py +0 -0
  2375. {polyrob-1.4.0 → polyrob-1.6.0}/tools/x402/net_guard.py +0 -0
  2376. {polyrob-1.4.0 → polyrob-1.6.0}/tools/x402/notifications.py +0 -0
  2377. {polyrob-1.4.0 → polyrob-1.6.0}/utils/README.md +0 -0
  2378. {polyrob-1.4.0 → polyrob-1.6.0}/utils/__init__.py +0 -0
  2379. {polyrob-1.4.0 → polyrob-1.6.0}/utils/auth_utils.py +0 -0
  2380. {polyrob-1.4.0 → polyrob-1.6.0}/utils/bounded_collections.py +0 -0
  2381. {polyrob-1.4.0 → polyrob-1.6.0}/utils/circuit_breaker.py +0 -0
  2382. {polyrob-1.4.0 → polyrob-1.6.0}/utils/path_validator.py +0 -0
  2383. {polyrob-1.4.0 → polyrob-1.6.0}/utils/rate_limit_manager.py +0 -0
  2384. {polyrob-1.4.0 → polyrob-1.6.0}/utils/result_size.py +0 -0
  2385. {polyrob-1.4.0 → polyrob-1.6.0}/utils/time_utils.py +0 -0
  2386. {polyrob-1.4.0 → polyrob-1.6.0}/webview/__init__.py +0 -0
  2387. {polyrob-1.4.0 → polyrob-1.6.0}/webview/activity.py +0 -0
  2388. {polyrob-1.4.0 → polyrob-1.6.0}/webview/apps_routes.py +0 -0
  2389. {polyrob-1.4.0 → polyrob-1.6.0}/webview/artifacts_api.py +0 -0
  2390. {polyrob-1.4.0 → polyrob-1.6.0}/webview/audit.py +0 -0
  2391. {polyrob-1.4.0 → polyrob-1.6.0}/webview/cards_routes.py +0 -0
  2392. {polyrob-1.4.0 → polyrob-1.6.0}/webview/chat_open.py +0 -0
  2393. {polyrob-1.4.0 → polyrob-1.6.0}/webview/config_view.py +0 -0
  2394. {polyrob-1.4.0 → polyrob-1.6.0}/webview/console_commands.py +0 -0
  2395. {polyrob-1.4.0 → polyrob-1.6.0}/webview/copy/__init__.py +0 -0
  2396. {polyrob-1.4.0 → polyrob-1.6.0}/webview/cors.py +0 -0
  2397. {polyrob-1.4.0 → polyrob-1.6.0}/webview/emit_api.py +0 -0
  2398. {polyrob-1.4.0 → polyrob-1.6.0}/webview/error_page.py +0 -0
  2399. {polyrob-1.4.0 → polyrob-1.6.0}/webview/feed_routes.py +0 -0
  2400. {polyrob-1.4.0 → polyrob-1.6.0}/webview/host_guard.py +0 -0
  2401. {polyrob-1.4.0 → polyrob-1.6.0}/webview/knowledge.py +0 -0
  2402. {polyrob-1.4.0 → polyrob-1.6.0}/webview/login_limits.py +0 -0
  2403. {polyrob-1.4.0 → polyrob-1.6.0}/webview/owner_auth.py +0 -0
  2404. {polyrob-1.4.0 → polyrob-1.6.0}/webview/owner_login_flow.py +0 -0
  2405. {polyrob-1.4.0 → polyrob-1.6.0}/webview/pack_console.py +0 -0
  2406. {polyrob-1.4.0 → polyrob-1.6.0}/webview/posture_guard.py +0 -0
  2407. {polyrob-1.4.0 → polyrob-1.6.0}/webview/posture_routes.py +0 -0
  2408. {polyrob-1.4.0 → polyrob-1.6.0}/webview/repair_sessions.py +0 -0
  2409. {polyrob-1.4.0 → polyrob-1.6.0}/webview/serve_tokens.py +0 -0
  2410. {polyrob-1.4.0 → polyrob-1.6.0}/webview/server.py +0 -0
  2411. {polyrob-1.4.0 → polyrob-1.6.0}/webview/server_launcher.py +0 -0
  2412. {polyrob-1.4.0 → polyrob-1.6.0}/webview/session_access.py +0 -0
  2413. {polyrob-1.4.0 → polyrob-1.6.0}/webview/session_catalog.py +0 -0
  2414. {polyrob-1.4.0 → polyrob-1.6.0}/webview/session_identity.py +0 -0
  2415. {polyrob-1.4.0 → polyrob-1.6.0}/webview/socket_auth.py +0 -0
  2416. {polyrob-1.4.0 → polyrob-1.6.0}/webview/socket_limits.py +0 -0
  2417. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/agent.js +0 -0
  2418. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/app.css +0 -0
  2419. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/cards.js +0 -0
  2420. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/chat-open.js +0 -0
  2421. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/chats.js +0 -0
  2422. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/file-attach.js +0 -0
  2423. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/format.js +0 -0
  2424. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/http.js +0 -0
  2425. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/inbox.js +0 -0
  2426. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/live.js +0 -0
  2427. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/money-move.js +0 -0
  2428. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/money-tokens.js +0 -0
  2429. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/money.js +0 -0
  2430. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/palette.js +0 -0
  2431. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/pause.js +0 -0
  2432. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/settings-control.js +0 -0
  2433. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/socket-client.js +0 -0
  2434. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/work-apps.js +0 -0
  2435. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/worklog.js +0 -0
  2436. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/app/workpane.js +0 -0
  2437. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/css/components.css +0 -0
  2438. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/css/fonts.css +0 -0
  2439. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/css/pages/admin.css +0 -0
  2440. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/css/pages/signin.css +0 -0
  2441. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/css/variables.css +0 -0
  2442. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/css/webgate.css +0 -0
  2443. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/fonts/JetBrainsMono-Medium.woff2 +0 -0
  2444. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/fonts/JetBrainsMono-Regular.woff2 +0 -0
  2445. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/fonts/LICENSE-JetBrainsMono +0 -0
  2446. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/fonts/LICENSE-VT323 +0 -0
  2447. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/fonts/VT323-Regular.woff2 +0 -0
  2448. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/img/favicon.ico +0 -0
  2449. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/js/admin/activity.js +0 -0
  2450. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/js/admin/dashboard.js +0 -0
  2451. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/js/admin/users.js +0 -0
  2452. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/js/admin/utils.js +0 -0
  2453. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/js/constants.js +0 -0
  2454. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/js/error-handler.js +0 -0
  2455. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/js/error-page.js +0 -0
  2456. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/js/ethers.min.js +0 -0
  2457. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/js/signin.js +0 -0
  2458. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/js/socket.io.min.js +0 -0
  2459. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/js/status-uptime.js +0 -0
  2460. {polyrob-1.4.0 → polyrob-1.6.0}/webview/static/js/theme.js +0 -0
  2461. {polyrob-1.4.0 → polyrob-1.6.0}/webview/stats_service.py +0 -0
  2462. {polyrob-1.4.0 → polyrob-1.6.0}/webview/template_globals.py +0 -0
  2463. {polyrob-1.4.0 → polyrob-1.6.0}/webview/templates/__init__.py +0 -0
  2464. {polyrob-1.4.0 → polyrob-1.6.0}/webview/templates/admin/activity.html +0 -0
  2465. {polyrob-1.4.0 → polyrob-1.6.0}/webview/templates/admin/dashboard.html +0 -0
  2466. {polyrob-1.4.0 → polyrob-1.6.0}/webview/templates/admin/users.html +0 -0
  2467. {polyrob-1.4.0 → polyrob-1.6.0}/webview/templates/agent.html +0 -0
  2468. {polyrob-1.4.0 → polyrob-1.6.0}/webview/templates/chat.html +0 -0
  2469. {polyrob-1.4.0 → polyrob-1.6.0}/webview/templates/error.html +0 -0
  2470. {polyrob-1.4.0 → polyrob-1.6.0}/webview/templates/layout.html +0 -0
  2471. {polyrob-1.4.0 → polyrob-1.6.0}/webview/templates/money.html +0 -0
  2472. {polyrob-1.4.0 → polyrob-1.6.0}/webview/templates/owner_login.html +0 -0
  2473. {polyrob-1.4.0 → polyrob-1.6.0}/webview/templates/shell.html +0 -0
  2474. {polyrob-1.4.0 → polyrob-1.6.0}/webview/templates/status.html +0 -0
  2475. {polyrob-1.4.0 → polyrob-1.6.0}/webview/theme.py +0 -0
  2476. {polyrob-1.4.0 → polyrob-1.6.0}/webview/tokens_routes.py +0 -0
  2477. {polyrob-1.4.0 → polyrob-1.6.0}/webview/wallet_reader.py +0 -0
  2478. {polyrob-1.4.0 → polyrob-1.6.0}/webview/worklog_api.py +0 -0
  2479. {polyrob-1.4.0 → polyrob-1.6.0}/webview/workspace_paths.py +0 -0
  2480. {polyrob-1.4.0 → polyrob-1.6.0}/webview/workspace_routes.py +0 -0
@@ -0,0 +1,2022 @@
1
+ # Changelog
2
+
3
+ All notable changes to POLYROB are documented here. The format is based on
4
+ [Keep a Changelog](https://keepachangelog.com/), and this project adheres to
5
+ [Semantic Versioning](https://semver.org/).
6
+
7
+ This is the full technical record. Entries use only the six Keep a Changelog
8
+ headings and describe shipped behavior; the rules are in `RELEASING.md`. The
9
+ short, user-facing notes for each release are on its GitHub Release page.
10
+
11
+ ## [Unreleased]
12
+
13
+ ## [1.6.0] — 2026-10-20
14
+
15
+ ### Added
16
+
17
+ - The agent continues by itself once the owner has decided every card it raised: one wake per card group with each
18
+ card's outcome; a quote, extra-check or recovery card stays in the group; a failed confirm offers its extra check as
19
+ a card, and Refresh works on an expired quote.
20
+
21
+ ### Changed
22
+
23
+ - Goal, cron, delegated and worker runs stop at one operator step cap, `AUTONOMOUS_MAX_STEPS` (150), and at
24
+ `AUTONOMOUS_RUN_BUDGET_USD` ($2.00) of spend, sub-agents included; at the cap they report once, and a run that stops
25
+ before `done()` names why in its record, the CLI and the session status.
26
+
27
+ ### Fixed
28
+
29
+ - The interactive-terminal log formatter interpolates %-style arguments instead of printing a literal `%s`.
30
+ - The money simulation no longer runs a built transaction at its placeholder 120k gas limit: every aggregator swap
31
+ ran out of gas in simulation ("execution reverted", data 0x) and was refused.
32
+ - The owner-thread delta keeps the newest rows and names the rest; the owner's commands, card taps and their results
33
+ no longer read as the agent's own or an autonomous run's; a pinned stablecoin keeps its peg when one source is
34
+ outvoted.
35
+
36
+ ### Removed
37
+
38
+ - The `max_steps` argument of `goal_create`, `delegate_task` and `worker_manage`, the console goal form's step field,
39
+ `polyrob workers new/edit --max-steps`, `polyrob cron edit --max-steps` and the `GOAL_DEFAULT_MAX_STEPS` flag.
40
+
41
+ ### Security
42
+
43
+ - `aiohttp` is raised to 3.14.4 or later (locked 3.14.5) for the keepalive-timeout, unbounded-memory and Secure-cookie
44
+ advisories.
45
+ - A payout-shaped call or endowed deploy needs the owner tap on every lane, a seed in a readable `.env` refuses host
46
+ code runs, owner money jobs need a card, and x402 books the signed amount.
47
+
48
+ ## [1.5.0] — 2026-10-18
49
+
50
+ ### Added
51
+
52
+ - `polyrob job edit --tools a,b,c` sets a job's explicit toolset (`payload.tools`, `none` clears it), validated against the
53
+ core and first-party pack tool ids, so a posting job can be kept off the spending tools.
54
+ - A cron job or goal write that pins an unknown skill id is refused (the lane gate's one validator); a pinned skill missing at
55
+ run time is named in the first line of the run's instructions.
56
+ - A run record's `meta` says how its skills loaded: `skills_auto` (pinned at session start) beside `skills_loaded`, and
57
+ `skills_regime`; the rest were loaded with `load_skill`. Measurement only: nothing retires a skill.
58
+ - Bundled skills are seeded into `<data_home>/skills/bundled/` and served from there: a fix is the agent's pending draft the owner
59
+ accepts, with no deploy; an update replaces only unmodified copies and its report names the kept ones.
60
+ - Every shipped skill has a `metadata.polyrob-when` line (at most 60 chars) that the skill index shows after its id; a skill write
61
+ with a longer one is refused, and a test checks the shipped library.
62
+ - A skill change ledger in `skill_usage.db` (action, actor, before/after sha, archive path, `absorbed_into`); archived bodies are
63
+ content-addressed; `rollback_skill` restores one through the write gate; a background or curator delete names its absorber.
64
+ - `tests/golden/prompt_surface/` holds the system text and `tools[]` the model receives on eight surfaces (owner Telegram DM and
65
+ REPL, cron, goal, room, correspondent, leaf, prod-posture owner DM) with sizes per layer; a prompt change regenerates it: `python devtools/gen_prompt_surfaces.py`.
66
+ - `/job stop <id> --forever` stops the job's lane (pinned skill, else rig): no non-owner job there until `/job allow`; a per-turn
67
+ `<operations>` block shows live jobs, goals, pauses and stops and outranks owner.md and recall; owner.md promote rebases.
68
+ - `/usage [days]` on every seat (spend by model, kind, job and day, cache %, $ per useful run) and a "Top AI cost" digest line; a cron
69
+ `payload.precheck` skips a quiet watch tick with no model call; `model_call_quality` and `prompt_manifest` events; `polyrob doctor` billed-vs-catalog line.
70
+ - `HEAVY_MODEL`: a money-class cron job or goal (`priority=money`, or a money tool in its toolset or rig) that pins no model runs on this
71
+ model on the pinned provider, through a `model_tier` column of `REGIME_POLICY`, so a box keeps a cheap default for chat and routine runs.
72
+ - `/inbox` reads every decision list (open cards, signer approvals, agent-written jobs and goals); `/pending` is its view and the console API
73
+ agrees; `/missed` names the cap only when the cap was the cause.
74
+ - Telegram and the console gain `/model` (the model, each pin and its source; a write goes through the config oracle), `/skills` and
75
+ `/config get|explain`; the REPL-only verbs are rows of `core/verbs.py` (`seats=("repl",)`). The `/approve list|add|remove` alias is removed.
76
+ - `agent_status` (health, next runs, release notes) is on every posture; `AGENT_STATUS_TOOL` gates only wallet/ledger/config. The identity
77
+ names `POLYROB <version>, instance <name>`; episodes keep `meta.skills_loaded`; the guide skill gains a generated `references/verbs.md`.
78
+
79
+ ### Changed
80
+
81
+ - `cronjob_edit` reports the job's next run, and both it and `cronjob_show` name any other live job firing at the SAME
82
+ minute, so a judge meant to run "24h after the announce" cannot silently share the announce's schedule.
83
+ - A `prompt_manifest` row carries `estimate_gap` (provider `prompt_tokens` minus the slot estimates); the deploy log prints
84
+ the bundled-skill seed lines; `knowledge_export` moves from `core/` to `agents/task/` (no upward edge).
85
+ - `skill_manage create` needs a `when` index line (<= 60 chars, written into the frontmatter); the skill writer and the REST
86
+ skill API no longer write keyword triggers into a tenant rule.
87
+ - `skill_manage` `patch`/`edit`/`delete` carry the sha256 `load_skill` returns (a stale one refuses with the current sha); `create`
88
+ never overwrites; new `edit` and `rollback` actions; the scan and lint check only the lines a write adds.
89
+ - `treasury-trading` fits the pin budget: a 19K core with the NO ROUTE rule in its head; the chain table, execution order, NFTs and
90
+ learning-the-meta move to `references/`. A test holds every shipped skill body to 20,000 chars.
91
+ - Skills load on purpose: only pinned skills (a job's or goal's `payload.skills`, persona seeds, their `requires`) load at session
92
+ start; every other session gets a short index and calls `load_skill`. The keyword matcher and per-turn re-match are deleted.
93
+ - One block owns tool status: with `<tool-catalog>` pinned, its lines carry each gate (flag, unmet posture limb) and
94
+ `<tool-availability>` keeps only the goal line; an owner seat pins the catalog without `POLYROB_LOCAL`.
95
+ - A session resumed for a correspondent runs on `filesystem`, `task` and `message` instead of the ambient grant
96
+ (75 to 39 tool schemas): the capability gate refuses every high-impact tool there anyway.
97
+ - Owner chat runs on the cron shape: the `owner` rig and granted money tools eager, `<tool-catalog>` + `load_tool` always,
98
+ the `tool_call` bridge, one catalog / load / not-loaded text on every seat; prod-posture owner DM 58K to 39K tokens.
99
+ - An active user skill's reviewed revision lives in `skill_usage.db`, not the tenant `rules.json`; a legacy hash there
100
+ still verifies until the skill's next write moves it.
101
+ - The system prompt's prose moved out of `prompts.py` (1,467 → 1,062 lines) into `data/prompts/system/<block>.md`, read by `core/prompt_text.py`;
102
+ Python keeps the conditions and the order; each block has a size ceiling, and the owner-facing texts pass the glossary.
103
+ - A skill's SKILL.md frontmatter is its only metadata source: the builtin and pack `rules.json` files are gone,
104
+ the rule index is built from `metadata.polyrob-*` (the `tool_ids` gate, priority, auto-activate, and the new `polyrob-requires`).
105
+ - `<owner-instructions>`, the standing-goals line and the live-state line render only on an owner seat (owner chat, and live state on
106
+ autonomous runs), never in a room, a correspondent chat or a sub-agent; the prompt golden's leaf is built as `delegate_task` builds it.
107
+ - The session's workspace path left `<environment>` for its own foundation row, and it and the task now come after the skill and tool
108
+ catalogs, so two runs of one cron job or goal share the cached prefix through the catalogs.
109
+ - One gate text per tool: `core/tool_gates.py::REMEDIES` holds every remedy, a gate row (core or `pack.toml`) names a key,
110
+ and `<tool-availability>` and `<tool-catalog>` render the same text; the trading venues no longer say "never autonomous".
111
+ - One home for the skill catalog: `core/skills` holds frontmatter, scopes with one `resolve` (two non-builtin skills
112
+ with one name and different bodies are refused) and the gate predicates; the writer and migration move to `modules/skills`.
113
+ - The system prompt no longer lists every action in `<available-actions>` (about 3K tokens): in native tool mode `tools[]` is the one list;
114
+ the JSON fallback keeps it, and the action index lists an aliased action once.
115
+ - The system prompt states each rule once (done vs send_message, the memory field, paths, live state; pause and work only in `<operations>`),
116
+ names `web_fetch_fetch_url` and no `polyrob …` command, and calls a model-written rule a draft; the SOUL template drops its approval lines.
117
+ - Agent steps: OpenRouter sends `tool_choice=required`; an empty completion retries in the call; a tool name is repaired; an autonomous
118
+ run that acted ends on a text reply; owner chat compacts on an 80k history budget and keeps the current request; tool disclosure is on for autonomous runs.
119
+ - One session-regime table (`REGIME_POLICY`) decides pinning, recall rank, owner memory and run records per session kind;
120
+ `OWNER_THREAD_TAIL_HOURS` defaults to 24; memory filter v4 drops step narration (the purge reruns, backup first).
121
+ - Jobs: `/jobs` (next run, last outcome, author) and `/job new|show|edit|pause|resume|run|stop` on every seat, `polyrob job …` (`polyrob cron` an
122
+ alias for one release); a paused job shows no next run; a stop records its seat; one scheduler-off sentence; `/cron` is removed.
123
+ - Goals: `/goal new|show|retry|pause|stop [--forever]` on every seat (`/goal ready|resume|cancel` deleted); `paused` is a status; stop is once unless
124
+ `--forever`, the same on chat, CLI, console and `goal_cancel`; console Work lists stored goals and jobs when off.
125
+ - `CHANGELOG.md` ships in the wheel (`core/CHANGELOG.md`); on a deploy `release_notes('latest')` leads with `[Unreleased]`; the guide and
126
+ its skill explain standing work as job / goal / decision / pause with one which-one table, and retire rail, objective and stream.
127
+ - Status names the next 5 runs or why none runs, and says IDLE (not RUNNING) while autonomy is off; a blocked
128
+ goal names its error; runtime cost names its window; digest, `/recap`, `/journey` name a failed read.
129
+ - The holdings read values the native coin as money: its row shows the USD value and what is spendable above the chain's fee reserve (`ChainRow.fee_reserve`, e.g. 0.002 ETH on an L2), and a `total incl. native` line counts it; an unpriced native is named, never counted.
130
+
131
+ ### Removed
132
+
133
+ - Dead skill code: the `action_names` trigger (no shipped rule could fire on it), `SkillContext`, the second frontmatter parser,
134
+ the unused scope list, `scripts/skills_frontmatter_sync.py` and the `adopt` keyword. The guide states the real skill precedence.
135
+ - The unread prompt constants in `agents/prompt` and every mention of the retired `OWNER_RULES_IMMEDIATE` env in code comments and tests; the docstrings now say a model-written rule is a draft the owner confirms.
136
+ - Text-guessing gates: read taint, refusal taint, the financial-claim gate, `authored_by`/`/adopt`, the memory write filter and cron's
137
+ job-text regexes. Unattended money needs a non-`supervised` money regime at the verb; 4 flags retire.
138
+ - One way to pick the model: `CHAT_PROVIDER`/`CHAT_MODEL` retire to `DEFAULT_PROVIDER`/`DEFAULT_MODEL`, `COMPACTION_AUTO_AUX` to
139
+ `AUX_AUTO`; `POLYROB_<PROVIDER>_MODEL` is no longer read. `polyrob doctor` names each retired line still set.
140
+ - Rails, objectives, streams and the planner: `/rail`, `polyrob rails`, `/goal objective`, the `streams`/`planner`
141
+ pause scopes, `polyrob owner pause-streams`; 11 flags retire. A recurring need is a scheduled job.
142
+
143
+ ### Fixed
144
+
145
+ - A 1.4.0 server data home (`<POLYROB_DATA_DIR>/data`) moves up into the data home at first start, under a lock;
146
+ nothing is merged, overwritten or deleted, and `polyrob doctor` names what stayed. Before, the upgrade opened an empty `bot.db`.
147
+ - `propose_action`'s `replaces` closes only the owner's own proposal cards, never a quote waiting for Confirm, a choice
148
+ card or another user's card.
149
+ - Telegram `/model` checks both halves of the pin before it writes either, so a higher layer that pins only
150
+ `DEFAULT_MODEL` no longer gets a provider of another model family.
151
+ - REPL `/usage` still shows this chat's usage when the data home cannot be read; the spend view says "could not read".
152
+ - Console Inbox Approve/Reject on a signer approval goes to the signer's decider (it answered "unknown pending kind").
153
+ - `/goal stop <id> --forever` typed with a phone dash (`—forever`) switches the goal off; `/goal retry` help says it
154
+ re-queues a blocked or paused goal, and a pause then retry no longer runs two copies of the goal.
155
+ - `python -m migrations.migrate status` reads the same `bot.db` that `upgrade` writes.
156
+ - The "MCP is off" refusal names what the owner sets, not an internal key.
157
+ - Rolling back a bundled skill after an update works; accepting a bundled fix no longer deletes a newer draft, is refused
158
+ when its ledger row cannot be written, and a partial first seed keeps serving the packaged library.
159
+ - Recap and the daily digest say the episode store could not be read, instead of reporting no activity.
160
+ - Console job create answers a named 503 when the job store cannot be read; a job edit no longer loses a pause or an
161
+ outcome written at the same time.
162
+ - REPL `/skills <query>` filters on the whole query, as Telegram does; `polyrob-requires` accepts a JSON string, a YAML
163
+ list or a number/null.
164
+ - Memory: while the store is full, the retry queue keeps only the newest summaries that fit one row and logs each drop.
165
+ - The rate-guard deferral cap counts deferrals in a row, not over the goal's life.
166
+ - Compaction keeps message ages (an old money receipt no longer keeps its full text) and adds no "[HISTORY CUT]"
167
+ note when nothing was cut; a rejected call's correction note no longer stacks up.
168
+ - A reused sub-agent's new run no longer takes its opening plan as the final report.
169
+ - A mistyped tool name is no longer repaired into a different money or outbound action (`launchpad_claim` ran as
170
+ `launchpad_sell`); the call gets the normal refusal instead.
171
+ - A goal run stopped by its spend budget is recorded as a failure; it is no longer deferred and re-run at full cost.
172
+ - When the compaction summariser fails, the owner's newest in-chat instructions stay instructions.
173
+ - `/send` sends any held token: with no spend-grade price it asks one extra step (`anyway`), owner lane only. Pinned
174
+ stables (USDG) price at their peg; an L2 WETH falls back to mainnet ETH; the agent now sees its session's verb replies.
175
+ - `goal_create` refuses a goal whose acceptance is the goal board itself ("a goal row exists", "goal_show
176
+ read-back"); no run can complete such a goal, and each judged failure bred more goals.
177
+ - `send_message` rewrites an `/approve_p_…` / `/reject_p_…` token the owner already decided as "(already
178
+ approved <time> — nothing to tap)" and adds one "(Correction: …)" line; a token still queued is left alone.
179
+ - A cron job's `payload.post_spacing_hours` (`polyrob job edit --post-spacing-hours`) is now enforced by the
180
+ X tool: a post, quote, thread or repost inside the window since that job's own last post is refused, so
181
+ pacing is no longer prose the model checks after posting.
182
+ - A swap Confirm whose fresh quote still clears the confirmed minimum re-requests the route at a tighter
183
+ slippage instead of refusing "the minimum received fell below the confirmed quote"; the floor never drops.
184
+ - Two first writers of a new session no longer raise "user_id cannot be determined": the session's user is recorded
185
+ before its directory exists. The REST skill API writes a tenant `rules.json` atomically, through the skill writer.
186
+ - A token the owner pinned (`/wallet trust`) passes a buy-screen check no provider answered (USDG on robinhood
187
+ never gets `is_honeypot`); hard failures and a high sell tax still refuse. A swap dry run now runs the screen.
188
+ - The unchecked-route refusal and the spend-limits brief now name the owner's pin verb
189
+ (`/wallet trust <chain> <address> <SYMBOL> go`) and say no setting raises the $5 ticket.
190
+ - A tool call that restates its own tool as an `action` arg (`twitter_whoami(action='whoami')`) no longer fails
191
+ validation; the arg is dropped only when the tool declares no `action` field.
192
+ - A scheduled run that found nothing new sends no message (the autonomous contract said "silence is a failure mode" and
193
+ no-op cron runs began to ping the owner every 2 hours); a job text that asks for a silent close binds.
194
+ - The bundled-skill seed runs when the service can write the data home through its group (prod is `root:polyrob-data`);
195
+ an owner-uid check refused it, so nothing was seeded. A root shell on a service-group home skips without an error.
196
+ - A one-shot cron job that ends `failed` is disabled in the same write, as `done` is; an old failed row with `enabled=1` is
197
+ disabled when the store opens.
198
+ - The deploy deletes skills that left the shipped library: stale pre-pack copies on the box were indexed as builtins,
199
+ so every pack skill was renamed `<pack>:<id>` and a pinned plain id served the old body.
200
+ - The `prompt_manifest` row is written after the first call, so it records the tool-schema cost and the first-step blocks (it read
201
+ 0 and missed them), with a size per foundation layer and the provider's own `prompt_tokens`.
202
+ - A cron job that finishes as `done` is disabled in the same write, and the cron store clears old done-but-enabled rows and the dead `authored_by`/`adopted_skills_digest` payload keys when it opens; finished jobs no longer read as live rails.
203
+ - The owner/self doc writer refuses a second `## Superseded` heading and an agent write that would retire more than 3 active rules at once; a misplaced heading demoted 27 live owner rules twice in one morning.
204
+ - A `/send` proposal to an address that already has an open `/send` card is refused unless it names the cards it `replaces` (closed) or says `also_owed`; re-split payouts stacked ~$233 of cards on a $100 pool.
205
+ - A typed owner reply to an open `present_choice` card closes it at once ("replied in text", never parsed into a pick); before, the turn sat until the wait ran out.
206
+ - A service-user write into a setgid shared store (skills, identity) is group-shared 0660, not 0600; before, only root writes were.
207
+ - Self/owner identity docs are written 0660 (group-shared), not mkstemp's 0600 — a promote left `owner.md`/`self.md` unreadable to the `polyrob-data` group.
208
+ - `present_choice` gets at least its declared `wait_seconds` (+30 s) from the controller; the generic 180 s action timeout cut a 300 s owner choice short.
209
+ - A goal run a rate guard refused (`retry_after_sec=N`, e.g. the X post cooldown) is deferred, not failed: back to `ready` with `payload.not_before`, no failure counted, at most 3 deferrals in a row.
210
+ - A `tool_call` the target rejects now lists every parameter (type, required, description) and names empty `arguments`; the X post-cooldown hint names `cronjob_schedule`'s real `schedule` field.
211
+ - An unblocked goal is no longer held by the dispatcher's own "Unblock goal" ask: `GoalBoard.unblock` now releases it, as retry and the outage requeue already did.
212
+ - Recall and live limits survive a tool-free step; aux calls record tokens and billed cost; `AUX_AUTO` works on OpenRouter and reflection
213
+ runs; a live chat follows a moved model pin; the server no longer loads the code root's `AGENTS.md` as project context.
214
+ - Long owner chats: one compaction policy (the 90 % prune is gone); a prune keeps the summary and the latest owner message;
215
+ the first chat message is dated and the newest owner message wins; owner instructions survive compaction as instructions.
216
+ - Jobs and goals keep a run record on every exit (time cap, pause, step budget) and see `<previous-runs>`; a goal reads the
217
+ answers to its own asks; answers are consumed after a completed run; a plain owner reply reaches the job it answers.
218
+ - Memory recall ranks by recency and by the reader's regime (a job's own runs first), dates every hit, keeps `[unverified]`
219
+ through summaries, and says "could not read" on a failed read; a reload no longer re-writes old findings as new.
220
+ - Tool results over the wire cap are saved with a real read path; children report `incomplete` and their full text; a reload
221
+ re-renders changed rules/prompt/skills; `<live-health>` carries the live spend limits; a money denial names the caps.
222
+ - A deployed instance has one `<data home>/.env`, one env ladder and one data dir; a write `polyrob.env` pins is
223
+ refused naming that file; `explain` labels `env:systemd|file|shell`; `/restart` is promised only when it applies.
224
+ - A guard-refused money quote makes no card and no `go` hint; the per-tx refusal names its cap and the
225
+ `/config set` remedy; owner-verb replies and card taps (as the line confirmed) reach the owner thread.
226
+ - Money-verb results under 24 h keep full text through ageing; the step clock reads UTC; the compaction warning reads the 70/85 ladder; `cronjob_edit` says a new schedule runs a job sooner; an owner money QUESTION gets a quote and a card.
227
+ - A blocked goal put back to `ready` (owner retry, provider-outage requeue) closes the dispatcher's own "Unblock goal" ask; before, that open ask held the goal and nothing dispatched. An owner-decision ask still holds it.
228
+ - `defi_data.reconcile` compares only the chain it reads: a ledger row naming another chain (or one the rail store holds elsewhere) is skipped, a chainless row reading zero is "unscoped" (UNVERIFIED) not missing, a row marked CLOSED is closed, and an unbacked rail row names `/writeoff`.
229
+ - OpenRouter's in-flight 402 (`in_flight_budget_exceeded`: a funded account whose concurrent reservations pass the balance) backs off and retries like a rate limit; it no longer latches the credit sentinel, pauses autonomy for 6 h or fails a goal over to another provider.
230
+
231
+ ### Security
232
+
233
+ - A goal or cron `target_token` is identity trust only with an explicit `target_authored_by: owner` stamp (owner seat or
234
+ verbatim owner turn); a row with a target and no stamp, such as one written before the stamp existed, is restrict-only.
235
+ - A multitenant console lists the instance's signer approvals only for the owner tenant.
236
+ - `POLYROB_SUPPORT_URL` and `POLYROB_SUPPORT_HANDLE` have no default (the link is hidden until set); shipped code, tests
237
+ and skills carry no instance identifier; the task-API access refusal is generic.
238
+
239
+ ## [1.4.0] — 2026-10-13
240
+
241
+ **Upgrading from 1.3.x:** move posture-member lines (e.g. `SHELL_TOOLS_ENABLED=false`) into one
242
+ `POLYROB_OVERRIDES=...` line — a direct member line is now ignored; rename `BOT_INSTANCE_ID`,
243
+ `BOT_OWNER_USER_ID`, `MASTER_SEED` and `WEBGATE_MULTITENANT`, which now refuse to start; update imports
244
+ of the moved modules. A `DEFAULT_MODEL`/`CHAT_MODEL` pin now wins over `POLYROB_<PROVIDER>_MODEL` for the pinned
245
+ provider. `polyrob doctor` names each line to change; see [upgrading](docs/guide/upgrading.md).
246
+
247
+ ### Added
248
+
249
+ - `polyrob service start|stop|restart|logs`, `/restart`, `/update`: finish the work, exit 75, restart, report back;
250
+ an update that never starts rolls back. `/status` names settings awaiting a restart.
251
+ - `defi_trade.bridge` bridges INTO Solana (native SOL or USDC). The arrival is proven by the delivering transaction's
252
+ own balance change for our account (a trade during the wait never counts as the bridge); Relay's Solana id is a registered alias.
253
+ - `defi_trade.bridge` takes the origin chain's pinned USDC as the origin (`token_in="usdc"`, `/bridge … from usdc`,
254
+ `--token-in`): on EVM an exact approve to the pinned Relay depository, then the guarded deposit, revoked on refusal.
255
+ - `polyrob.sdk`, the stable host API for packs; packs no longer import private host names.
256
+
257
+ ### Changed
258
+
259
+ - The composition root (`bootstrap`, `initialization`, `autonomy_runtime`, `bot`) moved from `core/` to `polyrob/app/`;
260
+ `core/intel` and `core/rails` moved to `tools/`. Importers of the old paths must use the new ones (no shims).
261
+ - The agent loop's own types moved from `tools/` to `agents/task/loop_types/` (`tools.controller.types`,
262
+ `tools.browser.views`, `tools.dom.views`, `tools.controller.registry.views`, no shims), and
263
+ `agents.task.goals.autonomy_marker` is now `core.autonomy_marker`.
264
+ - The layering ratchet tiers cron, app, migrations, entry points, SDK and packs, counts `"pkg.mod:attr"` strings and
265
+ caps the largest import cycle (588 → 200 modules).
266
+ - The 51 posture-bundle member flags are set only by their bundle or by one `POLYROB_OVERRIDES=FLAG=value,...` line
267
+ (file access); a direct member line is ignored and `doctor` shows its replacement. Flags 722 → 672.
268
+ - Git, MCP stdio, lazy installs, coding snapshots, `self_env`, local `run_code` and third-party packs run beside the
269
+ wallet in every signer mode; the key is protected by isolation. The shell floor is judged per command segment.
270
+ - One owner-turn definition, one view of the three taints, one `TurnFacts` seat-context constructor and one policy
271
+ hook chain; HTTP `/execute` and `/lp` run the denylist, effect and refusal-taint hooks; `tx_guard` asks `authorize_spend`.
272
+ - Verb kinds (outbound, produced output, late send, read job, room-refused, background) are columns of the verb rows;
273
+ every gate and list derives from them.
274
+ - One database registry (`core/db_manifest.DB_REGISTRY`) feeds the backup set and the shell guard; named store-path
275
+ helpers replace open-coded `.db` joins.
276
+ - The money authorizer `tx_guard._authorize` is 25 ordered step functions over one `GuardContext`
277
+ (`core/wallet/tx_guard_steps/`); the step order and the exact decisions are pinned by tests. No behaviour change.
278
+ - The god files are split with no behaviour change: Telegram owner verbs use one seat table, each status section
279
+ has its own module, the defi tools use `*_verb.py` modules, GoalBoard is store mixins, and `Agent.__init__` is builders.
280
+ - `import core` no longer reconfigures the host's root logger; the process entry points set up logging.
281
+ - First-party packs inherit the core version, and the pyproject extras are the one dependency spec; a release
282
+ bump edits `pyproject.toml` only and the lazy-install pins derive from the extras.
283
+ - Console writability and secret masking come from a per-flag `Access` column in `docs/CONFIGURATION.md`, not
284
+ from name patterns; one "Posture bundles" table lists each bundle's members.
285
+ - The deploy reconciles every installed unit that `deployment/units.toml` declares, restores them on rollback and
286
+ ships only `scripts/ops/`; the host env templates are generated from the flags catalog.
287
+ - Private tests and lab harnesses live under `ops/`; shipped tests read no private file, `tests/unit/scripts` is
288
+ collected again, and one classifier (`scripts/public_export.sh`) builds and tests the public export in CI.
289
+ - The test suite runs in parallel (pytest-xdist; CI = a static ratchet job + five shards), the root conftest costs
290
+ ~1 ms per test instead of ~7.6 ms, and the ratchets share one parse cache.
291
+ - Releases before 1.0.0 moved to `CHANGELOG-archive.md`.
292
+
293
+ ### Removed
294
+
295
+ - `utils/user_utils.py`, the payment `__main__` runners, the `core.Bot`/`core.initialize_*` lazy exports and `MANAGER_METADATA`.
296
+ - The individual env rows for the 51 posture members and the `posture_flag`/`safe_local_flag` helpers.
297
+ - The unread `modules/database/schema.sql` and the dead `./.polyrob/.env` project-write code.
298
+ - The 43 flags marked "Retire after 1.4"; their default behaviour is permanent. `BOT_INSTANCE_ID`, `BOT_OWNER_USER_ID`,
299
+ `MASTER_SEED` or `WEBGATE_MULTITENANT=true` set alone refuse to start and name the rename; `doctor` lists retired names.
300
+ - 61 internal tuning env knobs are module constants with unchanged defaults, and four dead flag rows are gone.
301
+ - The Fly kit, `deployment/legacy/`, `CLEAN_DEPLOY.md` and the dead one-off scripts.
302
+
303
+ ### Fixed
304
+
305
+ - `DEFAULT_MODEL`/`CHAT_MODEL` reach every run on the pinned provider (cron, goals, planner, clients, fallback), not only
306
+ chat; `core.runtime_config` is the one reader of the pin, and a blank `CHAT_` value no longer hides `DEFAULT_`.
307
+ - `polyrob update --apply` sees a live owner turn under the `polyrob service` user unit: the turn marker
308
+ follows the data home, not the unit's working directory.
309
+ - Owner rules: a patch edits only the active rules (Superseded history is never rewritten), duplicate Superseded
310
+ entries collapse, the cap is 24,000 chars, and an over-cap doc loads truncated with a warning, not dropped.
311
+ - Memory recall searches the turn's own words: a cron run its job text (not the owner-rules overlay), a goal its title
312
+ and body, a chat turn the newest owner message; FTS drops stopwords; one injection is capped at ~9k chars.
313
+ - Memory no longer stores tool-call echoes, strategic-clue hints or short run-status lines; a one-time curator purge
314
+ backs up memory.db, then cleans stored rows; unprotected cron/goal rows age out after 45 days.
315
+ - The X post gate says why a post needs the owner (the untrusted source read, or the agent-authored job and `/adopt`);
316
+ a write receipt no longer taints a run, and `cronjob_list` names each job's author.
317
+ - The X DM read resolves a handle from the inbox listing's id; a handle X does not know is a dead target, skipped
318
+ 7 days; a token refresh, a late-approved send and a cron post close their X Chat client's session.
319
+ - In a scheduled or goal run, `send_message` refuses a line that starts with `@handle` and names `message()`; a
320
+ delivered send says it went to the owner's private chat, and so does the owner-thread line.
321
+ - Unknown-setting refusals (`preferences`, `polyrob config`, `/config`, the env typo audit) find the close key even
322
+ when its words are in another order; `preferences explain`/`set` name up to three.
323
+ - A provider credit refusal (z.ai 429 code 1113) is a named NO BALANCE error, not retried as a rate limit; failover
324
+ starts at once, and the SDK sends it once instead of three times.
325
+ - Telegram polling backs off 1 s → 30 s with jitter on a getUpdates failure streak instead of retrying every second.
326
+ - A gated tool a session re-requests is warned once per process; the MCP tool is not offered with no MCP server.
327
+ - An owner-approved X post sent after the asking run stopped waiting, and a cron job's X delivery, now initialize the Twitter tool they build; both failed "client is not constructed" and lost the approval.
328
+ - An owner buyback of a trusted token (own launch, owner pin or owner target) on a chain no price source covers is no longer capped at the $5 unchecked-route ticket; a disagreeing route and an untrusted token still are. An EVM swap dry run now reports that refusal instead of passing.
329
+ - The X browser rail was missing from the financial-claim gate and the evidence ledger (lists named `x_post`).
330
+ - The Telegram DM gate admits `POLYROB_OWNER_TELEGRAM_ID`; a shadow signer that never answered uses the local caps
331
+ with a notice, not $0.
332
+ - The HTTP KB, the server session tree and the owner verbs `soul`/`persona`/`knowledge`/`kb` use the deployed data home.
333
+ - Six fire-and-forget tasks, including the approval-queue owner wake, are retained; a failed `polyrob run` bootstrap
334
+ turns logging back on.
335
+ - An Agent built without a `memory_manager` keeps its chat persona; the memory fallback no longer replaces the
336
+ config the MessageManager reads `persona_block` from.
337
+ - `send_message` says it reaches only the session's own person (the owner in a scheduled run) and names
338
+ `message(target=…)` for rooms, so a room reply no longer lands in the owner's private chat.
339
+ - Env reads the flag catalog missed are documented, including `BYPASS_PAYMENT_FOR_ADMINS` (default on); nineteen
340
+ flags that read only the exact string `true` use the shared parser, and a test checks documented defaults.
341
+ - `bs4`, `yarl`, `eth-utils` and `eth-abi` are declared dependencies; a test fails on any undeclared import.
342
+ - Refusals, remedies and the profile unit no longer tell users to run `scripts/` or `deployment/` files.
343
+ - The migrations schema-version fallback names 1.10.0, the newest shipped migration, not 1.4.0.
344
+ - `VOICE_TRANSCRIPTION_ENABLED` is documented as default ON, which is what the code does; the docs and
345
+ `polyrob doctor --flags` said OFF while every voice note was transcribed.
346
+ - The console Activity stream reads telemetry from the one telemetry location (`core.event_log.telemetry_db_path`),
347
+ so it no longer shows an empty system feed after the sidecar move or with `TELEMETRY_EVENT_LOG_PATH` set.
348
+ - A large tool result offloaded during a run whose workspace is the project folder is written there, where
349
+ `filesystem_read_file` looks, instead of the session directory the read could never reach.
350
+
351
+ ### Security
352
+
353
+ - One owner-set security settings table (`SECURITY_SETTINGS`, `core/security/settings.py`): every check that can refuse
354
+ natural work reads its row; the fixed floor rows are listed beside it and shown on the `custody` status line.
355
+
356
+
357
+ ## [1.3.0] — 2026-10-09
358
+
359
+ ### Added
360
+
361
+ - **Terminal parity:** host shell at posture 3 behind one command guard; jobs with stdin, PTY, notify and receipts;
362
+ sudo prompt; ssh, Podman, Modal, Daytona, Vercel and Singularity backends; egress proxy; tool-calling scripts and
363
+ a persistent Python kernel in `run_code`.
364
+ - **Full mailbox for the agent:** list, read, save attachment, threaded reply, forward, folders, mark, move and delete
365
+ to Trash; `email_send` gains cc, bcc, html and attachments, every recipient gated. `email_read_machine_mail` returns
366
+ activation links and codes from auto-generated mail only.
367
+ - **Room moderation:** `room_moderate` mutes, unmutes, bans, unbans and deletes messages in an allowlisted room; owner
368
+ and admins are never targets, and a room turn or tainted session cannot call it. `room_read` lines carry `{uid=… msg=…}`.
369
+ - **Telegram post deletion:** receipts carry a message id; `message(action="posts")` lists the agent's posts and
370
+ `message(action="delete")` removes them by row, id or last N on owner instruction (not past 48 h or others' posts).
371
+ - **`/adopt`:** the owner makes an agent-authored cron job or goal their own from an action card that shows the whole
372
+ task, every payload key and each pinned skill with a content digest, and binds them.
373
+ - **Procedure skills:** `incident-response`, `adversarial-consensus` (blind `delegate_task` panel, judged, never
374
+ averaged) and four `coding-workflow` references (review, triage, debugging, cleanup).
375
+ - **The agent knows the version it runs:** `<environment>`, status and `agent_status` show `get_version()` and the
376
+ deployed sha; `agent_status(release_notes=...)` reads the shipped CHANGELOG.md.
377
+ - `defi_data.wallet_activity` on another address lists our own recorded payments to it from the wallet audit ledger
378
+ (an unreadable ledger reads UNKNOWN).
379
+
380
+ ### Changed
381
+
382
+ - **Wallet caps:** with a signer installed, every agent limit (per-tx, daily, x402 per-payment and window) clamps to
383
+ the signer's; the signer is the one envelope, raised only by root. Each limit flag has one resolver.
384
+ - **Shell defaults:** ceiling 300 → 600 s and a longer timeout becomes a background job; a gated `shell_run` waits for
385
+ the owner only on a dangerous command (`SHELL_APPROVAL_MODE=every` restores the old behavior).
386
+ - **One authorship rule for standing work:** owner authority reads a positive `authored_by=owner` stamp; an owner turn
387
+ that read outside text writes agent work and says so. Owner goals carry owner cron jobs' standing authority.
388
+ - **Fewer owner taps:** trusted Solana and EVM buys, Polymarket and plain Hyperliquid cancels, sends to the owner's or
389
+ own address, `$(…)`, relative `rm -r`, `env | grep`, workspace dev commands and 12 console settings need no approval.
390
+ - **Cron runs follow the owner:** a run opens with every newer owner rule marked as overriding the job text; an
391
+ approved answer to a run's ask re-runs the job now, and every seat says where the answer went.
392
+ - **Rules docs hold twice as much** (owner 16000, contract 8000, self 12000 chars), and a background run's patch of an
393
+ active rules doc lands a pending revision for `owner promote` instead of a refusal.
394
+ - `DEFAULT_TOOL_TIMEOUT_SECONDS` defaults to 180 s instead of 60 s, still below the step timeout.
395
+ - The unconfigured local data home is `~/.polyrob/data`, never `./.polyrob`; the Docker image uses `/app/.polyrob`.
396
+
397
+ ### Removed
398
+ - The deprecated `/api/polymarket/*` and `/api/hyperliquid/*` mounts that 1.2.0 kept for one release; use
399
+ `/api/packs/markets/...` (the old paths now answer 404).
400
+
401
+ ### Fixed
402
+ - A bare `pip install polyrob` could not import `tools` (and refused the `discovery` pack): `openai` 3.x moved to
403
+ `httpx2`, so `httpx` is now a direct base dependency.
404
+
405
+ - The agent's file tools read, copy, grep and edit a world-readable hard-linked file (uv/pnpm cache trees) and
406
+ app snapshots ship it; a link to a private file, every append and every store/ledger read stay refused.
407
+ - `defi_data.wallet_holdings` (an explicit, public address) is a read-job verb again.
408
+ - A measured insufficient balance/allowance (LP builders) and a vetted Solana simulation that reverted are
409
+ tagged preconditions and no longer taint the run; the LP node-rejected broadcast carries its kind.
410
+ - `polyrob autonomy on/off` and `config set` write the home `.env` the CLI reads; `--project` (a never-loaded
411
+ `./.polyrob/.env`) is refused and names that file. `init`/the REPL no longer create `./.polyrob/sessions`;
412
+ `uninstall`, profile and help texts name the real data home.
413
+ - An autonomous X post waits in-run for the owner's tap and ends inside the `twitter` action timeout; a late approval
414
+ sends exactly the approved parameters once. An untainted owner-authored cron job posts without a per-run approval.
415
+ - X DMs work on encrypted X Chat: unsigned sender keys read as `verified: false`, and plaintext is used only for a cold
416
+ open X Chat refuses, when the owner approval names it. An account with no tweets reads as an empty timeline.
417
+ - The agent can click and type in the browser again: the indexed element list reaches the prompt, and page extraction
418
+ uses `aria_snapshot()` since Playwright 1.63 removed `page.accessibility`.
419
+ - `defi_data.wallet_activity` and `token_origin` work again: an explicit param model reaches an unannotated or dotted
420
+ `params` argument as the model instead of splatted kwargs.
421
+ - `defi_data.reconcile` reuses an unchanged dust verdict (6 h), so airdrops no longer time out the money rails' gate;
422
+ a market or precondition error no longer taints a run's public rails.
423
+ - Jupiter swaps decode every v6 route variant and the `route_v2` layouts; Solana swaps resolve lookup tables; a declared
424
+ `max_spend_usd` asserts the value only, with the network fee charged to the caps.
425
+ - Wallet: an expired unsettled x402 payment resolves from chain state, our own bridge's arrival is not an "unmatched
426
+ payment", and the agent-NFT send card shows the holdings.
427
+ - `hf_deploy`/`app_deploy` refuse a file that changed after the last green `run_tests`; a delegated child stopped at
428
+ its step limit reads "stopped before finishing"; `done` turns back once while todos are open.
429
+ - A goal run whose `done()` opens with `BLOCKED:` is blocked, not done; a blocked goal has one open owner ask; goal
430
+ claims fence each run, so a stale run cannot overwrite its replacement.
431
+ - Scheduled jobs respect live edits and cancellations; stepped day fields such as `*/2` keep their days; `cronjob_show`
432
+ names when and via which surface a job was cancelled.
433
+ - A turn never delivers the same reply twice, and the LLM-timeout notice says the step is retrying instead of asking
434
+ the owner to resend (which could pay twice).
435
+ - A tool's deliberate `ServiceError` refusal reaches the agent without a traceback; the log keeps it.
436
+ - A failed lookup is not proof of absence: a not-found read names the path tried and offers same-name files; a finding
437
+ beside a failed tool call is stored `[unverified]`.
438
+ - The workspace note never invents an upload: relative paths, record-backed upload claims and declared `authored_by:`;
439
+ A2A peer messages are labelled as not the owner, and an unreadable self-context doc is named.
440
+ - SQLite opens tolerate a sidecar unlinked by another account, and the shared data root is never sticky, so the outbox
441
+ dispatcher no longer fails with "readonly database".
442
+ - Cancelled, failed and resumed autonomous runs release their sandbox; sandbox reapers skip when the Docker socket is
443
+ unreachable; the cross-session turn store has its own 100k-row bound.
444
+ - Room moderation no longer repeats (room posts join the room ledger, deleted lines are marked), and Telegram polling
445
+ logs one recovery line after an outage streak.
446
+ - `config set/unset` and `tools enable/disable` keep the home scope with `--global`; Microsoft 365
447
+ `Authentication-Results` that open with a result are read; owner CLI API-key creation works under the strict tier.
448
+
449
+ ### Security
450
+
451
+ - Deployment: ops loops run as an unprivileged account; the agent never runs as root and its HOME leaves the data home;
452
+ root steps use pinned no-follow descriptors; rollbacks stay inside configured paths; console vhosts pin TLS and HSTS.
453
+ - Signer: its own venv; serves only a client's main process; keeps full approval details in a bounded queue; needs
454
+ on-box approval for owner-queue verdicts; Hyperliquid RPC signs cancellations only; clients refuse before cap check.
455
+ - The spend ledger is sealed with a seed-derived MAC; browser egress closes the host's own and special-use addresses;
456
+ `CODE_EXEC_SSH_KNOWN_HOSTS` pins the ssh backend's host key.
457
+ - CI and release: least-privilege workflows, SHA-pinned actions, digest-pinned base images, a checksummed gitleaks
458
+ download, a read-only build job and tag-only release; PyJWT and multidict floors rise.
459
+ - Console: owner authentication on local consoles including Socket.IO; session JWT audience, strict cookies and one
460
+ origin check; login budgets persist and group IPv6 by /64; logout is a same-origin POST; scripts are self-only.
461
+ - Console and API isolation: tenants cannot read MCP, health, telemetry or instance flags; trust and money flags are
462
+ file-only; `polyrob dashboard` boots with a one-time password; session feeds cannot join global rooms.
463
+ - API keys carry read/write scopes and bounded expiry (legacy keys are replaced via wallet sign-in); rate limits key on
464
+ an IPv6 /64; SIWE nonces, the A2A list page and live SSE streams per caller are bounded.
465
+ - Billing: credits reserve before inference and settle once; the compute tier gate covers every paid surface; unpriced
466
+ models are refused; billed sessions get standard step and tool bounds; continuations recheck payment admission.
467
+ - Payments: settlement validates hash, chain and replay; test-network invoices and deposits are never income; inbound
468
+ submissions persist before settlement; x402 recipients are bound at approval and signing.
469
+ - Spend accounting counts EVM gas, Solana fees and rent, rounds risk upward and keeps decimal deposit precision; direct
470
+ transfers need owner approval, and payees that look like a recent payee (address poisoning) are refused.
471
+ - Swaps, bridges and LPs verify LI.FI, Jupiter and v3 calldata minimums and recipients before signing; floors compare
472
+ against independent prices; Solana routes refuse unrelated outflows; positions size from simulated balance changes.
473
+ - Venue orders reserve at the network boundary, use live reference prices with a price band and worst-case slippage,
474
+ enforce exposure and leverage limits, and never book a rejected order; worst market fees count against the caps.
475
+ - Untrusted content: repository, filesystem, delegated and paid-server results are framed as data; forged control
476
+ fences are neutralized; room titles, blocked members' history and pool labels stay out of instructions.
477
+ - Provenance: model-created goals and cron jobs keep agent provenance; persistent rules and skills need owner review;
478
+ an `owner_ask` answer must quote the owner's turn; correspondent turns cannot keep private owner documents.
479
+ - Shell guard: newline boundaries, wrappers and brace groups are judged; wildcard grants over shell syntax are refused;
480
+ git takes plain branch names; non-Python `run_code` runs through the guard; owner-only CLI verbs refuse under the agent.
481
+ - Surfaces: non-owner DMs are denied on non-Telegram surfaces; the WhatsApp webhook secret is required; email senders
482
+ need an MX-authenticated From; IMAP verifies certificates; voice media is bounded; pairing codes expire.
483
+ - Filesystem: SQLite stores are created private and linked stores refused; publication, export and attachment reads are
484
+ confined; file tools use `O_NOFOLLOW` descriptors; CLI startup ignores project-local env and MCP files.
485
+ - Secrets: endpoint credentials are redacted in config listings, errors and logs; X cookies import through hidden
486
+ prompts; provider failures omit credential-bearing URLs; legacy unguarded Twitter writes are retired.
487
+ - Packs and updates: a third-party pack builds to a wheel with no outside files; index rows admit only plain names; a
488
+ profile review shows its env keys, MCP, cron and skill content; app deploys bind the approved directory and digest.
489
+ - Memory and identity: planner and recall writes stay scoped and new notes await owner review; correspondent sessions
490
+ write no owner episode; ERC-8004 identity selects only a self-minted token.
491
+
492
+ ## [1.2.1] — 2026-10-03
493
+
494
+ ### Changed
495
+
496
+ - **Agent-NFT snapshot, inspect, journal and bind run in core:** they no longer need the agent-NFT package, which keeps
497
+ only mint, adopt's pfp/positions/Brief and a collection's own view lines.
498
+
499
+ ### Added
500
+
501
+ - **`VALUELESS_CHAIN_MONEY` (off):** the owner's opt-in to a core run on Robinhood Chain testnet 46630 — its native coin
502
+ is priced at $0, so the USD caps do not bind, and every fee stays bounded in wei.
503
+ - **`agent_nft_adopt`:** an owner-approved verb that reads an agent NFT's journal history from the chain, runs the
504
+ package's adopt, then writes a handover entry; a note with no action is now an on-chain journal entry too.
505
+ - **`/nft trust <collection>`:** the owner trusts an agent-NFT collection from chat — a read-only quote card, then `go`
506
+ writes an owner pin (no mint/reveal) beside the token pins; the root file stays for admin pins. `/nft` lists the trusted collections.
507
+ - **The agent-NFT journal goes on chain:** each account action carries its signed entry in the same `executeBatch`
508
+ (`JournalLog.log`); the next entry continues the chain read from the account's events. No site upload.
509
+
510
+ ### Fixed
511
+
512
+ - **Reconcile gate timeout:** `defi_data.reconcile` prices the chain side from the batch prefetch (booked tokens
513
+ first) and values rows on a small pool; a 116-token treasury fell from >90 s (past the 60 s budget) to ~13 s.
514
+ - **Sandbox reapers:** both skip when the process cannot open the Docker socket (the agent identity is outside
515
+ `docker` by design), ending ~100 refused `docker ps` WARNING lines a day.
516
+ - **Identity doc caps:** owner facts rise 4000 → 8000 chars and SELF 2200 → 6000 (both had filled and refused a new
517
+ owner rule); tool descriptions quote the live caps.
518
+ - **X login:** building an X client no longer spends the rotating refresh token, refresh logs name
519
+ their process, and `/x login`/`/x status` say the 2-hour access token renews itself.
520
+ - **Holdings watch:** the scan runs off the event loop; the owner hears once after 6 failed passes in a row
521
+ and once when it works again.
522
+ - **`/journey`, `/recap` and `polyrob journey` default to 24 h** on every seat, and the REPL reads the deployed home.
523
+ - **Outbound delivery:** the auto-opened breaker probes and closes; a repeated message is sent, not swallowed; a
524
+ process drains only its own surfaces, on a lease; quiet holds keep target, files and full text in `digest.timezone`.
525
+ - **Money waits survive a cancel:** Ctrl-C during any receipt wait (send, swap, LP, claim, launch, deploy, call, NFT) records
526
+ the broadcast against the cap and `/book` and says the tx may have gone through; Telegram runs every `go` verb off the poll loop.
527
+ - **Console reads say when they fail:** identity, memory, Work › Log, pickers and the activity tail report "could not read"
528
+ instead of empty; the thread re-syncs after a reconnect or `feed_gap`; own_ops opens every listed chat; money cells format.
529
+ - **Seat parity:** bare `/approve` never decides; one `/kb` grammar; the REPL reads the deployed owner and instance; inline
530
+ approvals need a slash token; console typos get the help answer; quote-card Refresh re-quotes from the typed words.
531
+ - **Chat surfaces:** Discord stops on a fatal close code and no longer blocks its gateway; IMAP runs off the loop with a
532
+ timeout; harness replies split to the platform limit; WhatsApp/Feishu replays refused; email auto-replies ignored.
533
+ - **HTTP API:** `Bearer rob_…` keys and `X-Service-Token` authenticate; the JWT `user_id` claim wins; validation errors are 422;
534
+ `/v1` accepts content-part arrays and streams errors and usage in the OpenAI shape; A2A push-config reads and deletes work.
535
+ - **Agent-NFT journal entries are signed under `WALLET_SIGNER=remote`:** the signer's new `journal.sign`
536
+ op signs the account journal template and nothing else; before, no entry was ever written.
537
+
538
+ ### Security
539
+
540
+ - Owner authority needs an `authored_by=owner` stamp (`python -m cron.stamp_authorship`); `/adopt` shows
541
+ all and binds pinned skills; the shell guard resolves symlinks and state-db writes; taint exemptions
542
+ are tagged at the source; an autonomous X post waits for the owner's tap, not "denied".
543
+ - Entry points run isolated; the data home never comes from the cwd; the shell guard sees through
544
+ wrappers; pack wheels, profile installs, git refs, app deploys and file ops are pinned; scrubbing,
545
+ the X lock, TLS and CI permissions are tightened.
546
+ - Deployment counters replace legacy agent-owned files atomically with private inodes,
547
+ preserving open aliases and refusing link redirection during upgrades.
548
+
549
+ - Require an approved USD ceiling for Hyperliquid orders and show venue USD amounts on every approval card; live price or slippage changes cannot exceed the approved ceiling.
550
+
551
+ - Bound Telegram chat dispatch and voice transcription; a cancelled or timed-out transcription retains its CPU slot until the worker finishes.
552
+
553
+ - Refuse third-party code packs when remote signing is available and refuse their installation as root, preventing pack builds from sharing signer privileges.
554
+
555
+ - Enforce atomic per-tenant memory row and content-size limits, preserving existing knowledge when an oversized replacement is refused.
556
+
557
+ - Publish profile backups atomically with owner-only permissions, refuse existing output links/files and clarify the limits of text redaction.
558
+
559
+ - Detect unlabelled English BIP-39 seed phrases by checksum and Solana key arrays by their public key before persistence or export.
560
+
561
+ - Default new-wallet welcome credits to zero and refresh stale access-token holder entitlement before access; unverifiable ownership fails closed.
562
+
563
+ - Broaden address-poisoning checks, refuse unreadable history and apply the same recipient check to agent-account NFT handovers.
564
+
565
+ - Mark settled x402 payments for refund review when HTTP-200 JSON reports an application failure, including JSON-RPC errors.
566
+
567
+ - Share durable hourly X write limits across API and browser tools, workers and sessions; reserve all thread posts before sending.
568
+
569
+ - Scrub episode content and structured metadata, and use the same scrubbed knowledge text for keyword storage and vector embedding.
570
+
571
+ - Verify the expected X account before persisting an OAuth callback; bind login links and refreshed credentials to that account ID.
572
+
573
+ - Keep Signal identity stable across phone-number privacy changes by requiring the daemon account UUID; legacy phone-based permissions need review on upgrade.
574
+
575
+ - Label human transcript authors without implying owner authority and keep different senders distinct.
576
+
577
+ - Validate local dependency overlays, retain root ownership of fresh browser installations, and run deployment imports and migrations as the agent service account.
578
+
579
+ - Bind profile installs and updates to reviewed content digests and immutable remote commits; reject linked, special and oversized source files.
580
+
581
+ - Disable generated mass mentions and application links across chat transports; keep private command replies out of rooms and bound denial notices.
582
+
583
+ - Require authentication for API docs, schema and model discovery; expose detailed health metrics only on the administrator route.
584
+
585
+ - Reject lossy session identifiers instead of stripping or truncating them; API and console data paths require canonical IDs.
586
+
587
+ - Keep automatically indexed agent documents in a separate unreviewed collection; only explicit ingestion adds them to default knowledge recall.
588
+
589
+ - Enforce the autonomous tool ceiling during progressive loading and show the same restriction in catalog, search and describe results.
590
+
591
+ - Preserve brain and reasoning scrub state across streamed chunks; public rooms receive only complete, scrubbed replies.
592
+
593
+ - Confine browser downloads, frame automation alerts as quoted reports, and require PKCE with expiring, principal-bound OAuth callback state.
594
+
595
+ - Pin portal Markdown dependencies to current releases and verify their CDN bytes with SHA-384 subresource integrity.
596
+
597
+ - Drop Fly startup privileges before loading volume code, refuse root checkout installs, and stop persisting or sourcing process secrets as shell text.
598
+
599
+ - Require hashed release wheels for legacy optional installs, run the API container without root, bind Compose to localhost, and disable the retired TLS-key copying script.
600
+
601
+ - Autonomous coding-agent launchers refuse root; workspace and coding I/O reject hard-link escapes.
602
+ - Room and correspondent findings cannot enter owner memory; explicit job tools obey the current agent ceiling,
603
+ resumed autonomous sessions retain their classification, and persona/toolset edits require owner review.
604
+ - API accounts obey administrator blocks across protected routes; tenant consoles cannot create owner-authored
605
+ work, MCP hints cannot disable effect gates, and shared X credentials are unavailable to delegates.
606
+ - Persisted text redacts quoted credential keys, Basic authentication, URL userinfo, cookies and GitHub tokens;
607
+ file guards cover Docker, Kubernetes, GitHub and Solana credential stores.
608
+
609
+ - **The REPL history keeps no secrets:** `/config set` of a secret key and any line with a 64-hex key are not
610
+ recorded, the file is `0600`, and the display scrubber redacts a labelled private key.
611
+ - **An edited Telegram message never runs again:** edits are dropped before routing, so a corrected old `/send … go` or
612
+ `/pay … go` cannot move money twice; Telegram dedup keeps 24 h and honours `retry_after`.
613
+ - **API keys cannot mint or revoke keys;** key validation is cached 60 s and revoked at once; x402 charges only a new A2A
614
+ `message/send`, and a post-settlement failure is marked refund-due; `/api/chat/message` is payment-gated; uploads refuse symlinks.
615
+ - **Room offer cancel is compare-and-set:** a cancel can no longer overwrite an offer the settlement watcher just marked paid.
616
+ - **Console hardening:** an empty `WEBGATE_HOST` no longer binds all interfaces; own_ops refuses to boot without login
617
+ config; refused socket joins stay rate-limited; `/logout` clears storage without inline script; no server text in `innerHTML`.
618
+ - **ERC-6909 approvals are seen:** the guard refuses an ERC-6909 grant and measures a claim-token move like an
619
+ NFT's; the account approval scan and `agent_nft_revoke_all` cover ERC-6909 allowances and operators.
620
+ - **Agent-NFT account calls are held to the pinned collection:** the account's `token()` must be a pinned
621
+ collection with unchanged code; no asset may go to the account of an unminted token; and nothing may move
622
+ on the treasury side of an account call except the account paying its owner.
623
+
624
+ ## [1.2.0] — 2026-10-02
625
+
626
+ ### Added
627
+
628
+ - **Telegram avatar push.** `polyrob avatar push --telegram [--telegram-chat ID]` now sets the bot photo
629
+ (`setMyProfilePhoto`, JPEG) and each named group's photo (`setChatPhoto`); hash-idempotent, falls back
630
+ to the BotFather steps.
631
+ - **Check any wallet or token.** New read verbs `wallet_holdings`, `wallet_activity` and
632
+ `token_origin` (Solana and EVM), `positions` (the agent's own P&L), the `/check` command, and
633
+ cron price watches with an alert threshold.
634
+ - **One owner word per concept.** A glossary of owner words (chat, goal, scheduled job, decision,
635
+ holdings, limit, network, abilities, permissions and more) is now checked across the console, the
636
+ command help, Telegram and the terminal; the number of strings with an old word can only fall.
637
+ - **`/run` on Telegram and in the terminal:** list what runs in the background now, numbered, and
638
+ pause, resume or stop ONE run (`/run pause 2`). Before, only the `polyrob session` command could
639
+ do this. Refused inside a group.
640
+ - **Agent NFTs:** `/nft` lists the owned NFTs with their accounts, balances and open approvals;
641
+ `/nft send <id> <to> [go]` gives one away; a watch tells the owner when one arrives or leaves.
642
+ Sends, swaps, claims and portfolio reads take `account=` or `nft=`. Needs `AGENT_NFT_ENABLED`.
643
+ - **Agent NFTs:** the `agent_nft` tool (inspect, journal, revoke, mint, reveal, withdraw)
644
+ behind `AGENT_NFT_ENABLED` (default off). The treasury acts through an NFT's ERC-6551
645
+ account only as the NFT's owner; positions take `account=`.
646
+ - **NFT collections:** the owner pins one in `/etc/polyrob/agent_nft_collections.json`
647
+ (empty by default: every mint and reveal refuses). `tx_guard` checks exact mint and reveal
648
+ shapes; `AGENT_NFT_REVEAL_MAX_GAS_USD` (1.00) caps a reveal.
649
+ - **Cron write jobs:** `payload.write_verb` runs one allowlisted write verb (the collection
650
+ reveal) with no model turn, through its own gates and `tx_guard`. Off unless
651
+ `CRON_WRITE_JOBS_ENABLED=true`; only an owner-authored job may carry one.
652
+ - **Cron read jobs and pause windows:** `payload.read_verb` runs one allowlisted read verb
653
+ with no model turn (`deliver_on` `alert`, `always` or `never`); a tick inside
654
+ `payload.pause_windows` is skipped at $0. Read and write jobs may recur every minute.
655
+ - **Uniswap v4 liquidity:** `defi_data.pool_metrics` monitors a Pons v4 pool, `lp_pool_info`
656
+ and `lp_quote` read one, and `defi_trade.lp_add(protocol='v4')` adds a full-range
657
+ position. New caps `LP_ETH_CAP` (default 0), `LP_ETH_DAILY_CAP` and `LP_ETH_FLOOR`.
658
+ - **X login from chat:** `/x login` renews the agent's X API login from any owner seat
659
+ through a one-time authorize link (needs `X_OAUTH2_REDIRECT_URI`); `/x status`, `/status`
660
+ and `polyrob doctor` show the login state.
661
+ - **Packs:** optional extensions (`polyrob.packs` entry points, `pack.toml`) add tools,
662
+ verbs, routes and skills; `polyrob pack list|info|doctor|enable|disable|install|remove`,
663
+ `POLYROB_PACKS_DISABLED`.
664
+ - **Cron:** a job whose rail needs a credential only the owner can fix (an expired X login,
665
+ an X API 402) is skipped at $0 instead of running a model turn; the owner is told once.
666
+ - **Cron:** a job that names the same owner-only remedy on 3 runs in a row raises one owner
667
+ question: I will run it, or retire this job.
668
+ - **Owner money verbs:** `/send`, `/swap`, `/pay <url>`, `/writeoff` and `/unquarantine` on
669
+ Telegram and the REPL. The bare form quotes; `go` acts within the quote (+5%, or `max
670
+ <usd>`). The chain is never guessed; a token is an address. Not in rooms.
671
+ - **Action cards:** a money quote is a card with Confirm / Refresh / Cancel
672
+ (`/card_<id>_ok|re|no`); Confirm runs the quoted line once, with every gate. `/cards`
673
+ lists open cards; bare `/send` or `/swap` and the console's *Make a move* build the order.
674
+ - **Agent tools:** `present_choice(question, options)` shows 2–6 buttons and returns the
675
+ owner's pick; `propose_action(command, why)` puts a money verb to the owner as a card.
676
+ Both are refused in rooms, in sub-agents and in correspondent sessions.
677
+ - **Token trust:** `/wallet tokens`, `/wallet trust|untrust`, `polyrob wallet
678
+ pin-token|unpin-token|pins` and console Money › Book. A buy of an unproven look-alike asks
679
+ the owner once; a token this instance launched is trusted.
680
+ - **Buy targets:** a goal or cron job may declare `target_token: {chain, address}`; the run
681
+ then acquires no other non-canonical token, and the work it creates inherits the target.
682
+ - **Solana sends:** `defi_trade.solana_transfer` sends SOL or an SPL token by mint, creates
683
+ a missing token account, defaults to `dry_run`, and refuses Token-2022 transfer fees,
684
+ hooks and unknown extensions.
685
+ - **Wallet submissions:** `polyrob wallet submissions` lists unresolved submissions (one
686
+ blocks every send); `polyrob wallet release-submission <ref>` releases one only by booking
687
+ its worst-case charge (`--charge-usd`, or `--never-sent --reason`).
688
+ - **Wallet caps:** `polyrob doctor`, `/status` and `polyrob wallet set-cap` say when the
689
+ agent's cap is above the signer's hard cap in `signer.toml`, and name both remedies.
690
+ - **x402:** `x402_pay` joins the autonomous toolset when `DEFI_AGENT_AUTONOMY` is armed: up
691
+ to `X402_AUTONOMOUS_MAX_USD` it pays and reports, above it waits for `/approve`.
692
+ `x402_fetch` takes `request_id`, so a retry never pays twice.
693
+ - **Trading skills:** ten procedure skills (`token-identity`, `pre-trade-check`,
694
+ `trade-execution`, `exits`, `dca` and more); `treasury-trading` is split into five smaller
695
+ skills; `hyperliquid-trading` and `polymarket-trading` teach the basics.
696
+ - **Skills:** a skill's `requires` list pulls in at most two prerequisite skills past
697
+ `max_skills`; a disabled skill is never pulled back in.
698
+ - **Chat:** `/why [n]` lists the last gate refusals (default 5, at most 20) with the tool
699
+ and the gate's reason, on Telegram, the REPL and the console.
700
+ - **Chat:** `/cron list|show|add|edit|cancel` on Telegram and the REPL alike; `add` takes
701
+ `tools=` and `target=<address> chain=<chain>`, and `edit` changes the schedule or the
702
+ task.
703
+ - **Chat:** an owner question with lettered options (`A) … or B) …`) carries one answer
704
+ button per option on Telegram.
705
+ - **Cron:** `cronjob_show` returns a job's full definition; `cronjob_edit` changes a live
706
+ job in place (task, schedule, cap, rig, delivery, skills). An autonomous run may edit only
707
+ its own jobs.
708
+ - **Outward acts:** every outward act is one `external_write` telemetry row by class
709
+ (social, comms, public, money, code, self, network); an autonomous write in a class the
710
+ owner paused is refused. `EXTERNAL_WRITE_TELEMETRY` and `EXTERNAL_WRITE_PAUSE_GATE` (on).
711
+ - **Security ledger:** rate-limit trips are recorded and ranked. `scripts/security_scan.py`
712
+ runs pip-audit, gitleaks and host checks (exit 0 clean, 1 findings, 2 incomplete, 3
713
+ error); the verdict shows on the `security` status line.
714
+ - **Memory scopes:** a goal tree or a cron job can keep its memory in its own scope
715
+ (`AUTONOMY_MEMORY_REGIME` `shared`|`scoped`|`sealed`, default `scoped`); `polyrob owner
716
+ memory scopes`. Behind `MEMORY_SCOPES_ENABLED` (default off).
717
+ - **Rails:** standing work is configuration: a rail is an objective with a recurrence,
718
+ managed with `/rail` and `polyrob rails` (new, edit, on/off, grant, revoke, export,
719
+ import). A money grant stays inert unless money is armed.
720
+ - **Workers:** `delegate_task(profile="<id>")` runs an owner-approved worker with its own
721
+ brief, budget, model and tools; `polyrob workers` and `/workers`. The agent can only
722
+ propose a worker. Behind `WORKERS_ENABLED` (default off).
723
+ - **Wallet signer:** `polyrob-signer` is a separate process that holds the seed, re-runs the
724
+ money guard, signs only known shapes and holds anything above its caps in
725
+ `/etc/polyrob/signer.toml`. `WALLET_SIGNER=local|shadow|remote` (default `local`).
726
+ - **Files:** `filesystem_append_file` takes `after_anchor` and inserts after the one line
727
+ that contains it; no match or more than one match writes nothing.
728
+ - **Feishu / Lark surface:** set `FEISHU_APP_ID` and `FEISHU_APP_SECRET` (long connection,
729
+ extra `[feishu]`) or `FEISHU_TRANSPORT=webhook`; `OWNER_FEISHU_ID` makes it an owner seat.
730
+ In a group it answers only when @-mentioned.
731
+ - **DingTalk surface:** Stream Mode (no public URL, no extra), text in DMs and on an
732
+ @-mention in groups. Credentials `DINGTALK_CLIENT_ID` / `DINGTALK_CLIENT_SECRET`.
733
+ - **Surfaces:** `polyrob surfaces list | add | probe` shows each surface's flag and
734
+ credentials, stores a credential in the env file, and proves it with a read that never
735
+ sends.
736
+ - **Surfaces:** Discord, Slack and Signal read the owner's photos and files like Telegram
737
+ and email; a contact's files are named but never downloaded.
738
+ - **Telegram:** approval notices and `/pending` carry approve/reject buttons (a press counts
739
+ as the presser typing the command); the "/" menu comes from the verb table.
740
+ - **Telegram voice replies:** with `/prefs set voice.replies true` the agent also answers a
741
+ DM with a voice note (OpenAI speech or local espeak-ng). Off by default.
742
+ - **Chains:** Optimism as a read-only chain (token screens, prices, balances); no money
743
+ moves on it.
744
+ - **Pause:** `/pause release` holds the release train.
745
+ - **Money claims:** an outbound message that says money moved ("I paid $5") is refused as
746
+ `financial_claim_unverified` unless the wallet audit log or a settled invoice holds a
747
+ matching record. `FINANCIAL_CLAIM_GATE_ENABLED` (default on).
748
+ - **Custody status:** a `custody` status section says whether the process is non-dumpable
749
+ and its env scrubbed, and shows the lazy-install mode and the installed features.
750
+ - **Prompt cache:** `ANTHROPIC_CACHE_TTL` (`auto`|`5m`|`1h`, default `auto`): a 1h cache for
751
+ an interactive turn and 5m for an autonomous run, on the Anthropic API only. `/status`
752
+ economics shows cache `writes` (migration `v1.10.0`).
753
+ - **Knowledge:** a `knowledge` status section; the knowledge base indexes what the agent
754
+ writes (`KB_AUTO_INGEST_ARTIFACTS`, `polyrob kb reindex`); sessions expire after
755
+ `SESSION_RETENTION_DAYS` (90, `polyrob sessions prune`); repeated recall becomes one note.
756
+ - **Install:** `install.sh` installs POLYROB on Linux, macOS and WSL2 in one command
757
+ (`--uninstall` keeps your data). New `polyrob setup`, `service`, `uninstall`, `config
758
+ edit` and `tools enable|disable`; an optional extra installs on first use.
759
+
760
+ ### Changed
761
+
762
+ - **Agent NFTs:** `agent_nft_withdraw_token` requires `to=`; it and `agent_nft_revoke_all` work
763
+ without the optional agent-NFT package.
764
+ - **The owner sign-in page and its errors read in plain words** ("Sign in to Rob").
765
+ - **Live-update refusals show a plain console sentence,** never the server's text.
766
+ - **The console nav says Chat and Rob;** the chats button has a visible name ("Chats ⌘K"), the
767
+ pause button says "Pause Rob", and the head lines are short and plain.
768
+ - **The avatar is an image slot.** Every new instance starts with the polyrob mark; set your own
769
+ from a file, a URL or an NFT (`polyrob avatar set`, `/avatar set`, `agent_avatar set_from` on an
770
+ owner turn). Every surface shows it.
771
+ - **Inbox cards say how long they have waited,** and when they expire if they can.
772
+ - **Rob > Overview shows each permission as a question with a Yes or No answer,** names what it
773
+ could not check in plain words, and says where memory is kept in words.
774
+ - **The console no longer shows labels in capital letters.**
775
+ - **The console no longer shows developer source footers;** the Inbox says in one line whether
776
+ every list answered.
777
+ - **Token reads:** prices come from DexScreener, GeckoTerminal and Jupiter and block a trade only
778
+ when they differ by more than 10 % (25 % on thin pools); the `token_info` screen adds on-chain
779
+ facts, Jupiter, RugCheck and Honeypot.is in a short summary. `DEFI_DATA_ENABLED` is on by default.
780
+ - **Replies:** the agent speaks to its user only with `send_message`; `done(text)` is the
781
+ run record. A cron `deliver` gets the run's last `send_message` (none sent, none
782
+ delivered); `style.verbosity=detailed` appends the record for the owner.
783
+ - **Prompts and tool text:** the model notes, the sub-agent contract, the output judge and
784
+ the tool descriptions match the code: `send_message` then `done`, `propose_action` for a
785
+ money move, `present_choice` for a choice, and the real units and limits.
786
+ - **Persona:** a chat seat renders the persona in `PERSONALITY_DEFAULT_CHARACTER`.
787
+ - **Skills:** the money, markets, X, discovery and general skills match the code and name
788
+ chat verbs, never a `polyrob …` command; money triggers no longer fire on common words,
789
+ and `secret-handling`, `person-analyzer` and others have narrower triggers.
790
+ - **First-party packs:** `discovery`, `markets` and `x` ship inside the `polyrob` wheel. ⚠️
791
+ Their SDKs stay extras (`polyrob[twitter]`, `[anysite]`, `[crypto]`); without one, the
792
+ pack's tools are withheld with the remedy. `install.sh --packs` adds them.
793
+ - **Markets pack:** the Polymarket and Hyperliquid tools are the `markets` pack; their
794
+ routes moved to `/api/packs/markets/polymarket/*` and `/api/packs/markets/hyperliquid/*`.
795
+ - **Owner authority:** in a genuine owner turn (chat, or `/send … go`, `/bridge … go`,
796
+ `/pay`) the autonomy pause and the autonomous ceiling do not apply; the caps and the
797
+ simulation bind everyone. An owner approval now sends, not re-queues.
798
+ - **Refusal taint:** after a money action fails or a gate refuses it, the rest of that run
799
+ cannot post to a public or non-owner destination; a public cron `deliver` goes to the
800
+ owner instead. A genuine owner turn clears the taint.
801
+ - **Token identity:** `defi_trade.swap`, `solana_swap` and `launchpad_buy` check WHICH
802
+ contract they buy before any quote: a symbol pinned to another address, a second contract
803
+ for a tracked symbol and an unverified token above $5 are refused.
804
+ - **Book:** `/book` and `defi_data.reconcile` warn when one symbol has more than one
805
+ contract, show positions the ledger does not list and each position's status, and no
806
+ longer claim trading is halted on a disagreement.
807
+ - **Copy:** owner-facing refusals name chat verbs (`/resume`, `/pending`), a daily-cap
808
+ refusal says when the cap frees, and the agent may not claim an act is queued or sent
809
+ without a tool result.
810
+ - **Telegram:** `/config set` shows where a flag write applies.
811
+ - **Lean base install:** `pip install polyrob` carries 24 base dependencies (was 36) and one
812
+ provider SDK; the rest moved to extras (`gemini`, `anthropic`, `memory-vector`, `docs`,
813
+ `media`, `server`). ⚠️ Without `server` an upload is refused with 503.
814
+ - **Goals:** `/goal cancel <id>` means never again (`--once` stops only this run; `/goal
815
+ allow` turns it back on). `/goals` shows what is off, who asked for each goal, and a `NOW
816
+ · STUCK · NEXT · OVER` summary.
817
+ - **Config:** `polyrob config set`, the REPL `/config set` (now with `--global`) and the
818
+ console validate and report the same way; a REPL write of a live-safe autonomy flag
819
+ applies at once, and `/autonomy on|off` needs no restart.
820
+ - **Owner rules:** `OWNER_RULES_IMMEDIATE` defaults on (a rule stated in chat binds on that
821
+ turn), `OWNER_DOC_MAX_CHARS` goes 1600 → 4000, a replaced rule moves under `##
822
+ Superseded`, and a `rules` status section names anything not loaded.
823
+ - **Records:** a workspace `.md` declares `kind: instruction | record`, and the file verbs
824
+ refuse to rewrite or delete a record (`DOC_KIND_ENFORCED`, default on). A cron job or goal
825
+ can pin its skills (`skills=[…]`).
826
+ - **Surfaces:** `polyrob gateway` starts Discord, Slack, Signal, WhatsApp and every new
827
+ surface once its credentials are set (`*_SURFACE_ENABLED=false` keeps one off); new
828
+ options `--skip`, `--no-autonomy`, `--idle-when-empty`, `--host`.
829
+ - **Webhooks:** a webhook surface can answer a platform challenge and ack before the turn
830
+ runs (replayed once after a restart); bodies are capped (64 KB, WhatsApp 3 MB) and a bot
831
+ is capped at 20 lines a minute.
832
+ - **Money regime:** the posture card shows `supervised`, `autonomous` or `armed` and names
833
+ what is missing; `AUTONOMOUS_RIG_DEFAULT=money_rail` no longer gives `defi_trade` to
834
+ agent-authored work outside `armed`.
835
+ - **Prices:** `token_info` names the pool behind a price and grades confidence on that
836
+ pool's depth; the busiest pool by 24h volume is picked; an unknown price stays unknown,
837
+ never `0.0`.
838
+ - **Prompt cache:** `TOOL_SCHEMA_STABLE_ORDER`, `STABLE_AUTONOMOUS_TOOLSET`,
839
+ `TOOL_RESULT_MAX_TOKENS` (6000) and `OPENROUTER_PROMPT_CACHE` default on; a restart
840
+ replays the rendered prompt (`FOUNDATION_REPLAY`) and catalog changes arrive at the tail.
841
+ - **Late tools:** a tool loaded mid-session grows `tools[]` (default), is deferred on an
842
+ Anthropic model that supports it (`ANTHROPIC_DEFERRED_TOOLS`, on), or goes through the
843
+ `tool_call` bridge (`TOOL_SCHEMAS_FROZEN`, off).
844
+ - **Preferences:** `voice.transcript_echo`, `stream.telegram` and
845
+ `delivery.lifecycle_daily_cap` are owner preferences.
846
+ - **Context:** a tool result reaches the model once; compaction thresholds are 70/85/95 %
847
+ (`COMPACTION_*_PCT`), old long tool results shrink to a pointer first, and old images
848
+ retire in batches. `/context` reads the provider's own token count.
849
+ - **Context:** the project-context file cap follows the model window (4%, 4,000–40,000
850
+ tokens); `MAX_EXTRACTED_CONTENT_SIZE` drops to 100,000 characters and
851
+ `MAX_EXTRACTED_CONTENT_TURN_SIZE` (200,000) bounds a turn.
852
+ - **Billing:** on OpenRouter the billed `usage.cost` outranks the catalog estimate; an
853
+ absent cost is `None`, never `0.0`.
854
+ - **Update:** `polyrob update --apply` reinstalls the extras you have under
855
+ `requirements.lock` and waits up to `--wait-idle` (1800 s) for running work (`--no-wait`,
856
+ `--force`).
857
+ - **Models:** an unknown `claude*` id resolves by family (`opus`, `sonnet`, `fable`,
858
+ `haiku`, bare `claude`) instead of a 200K sonnet row.
859
+
860
+ ### Deprecated
861
+
862
+ - The venue API paths `/api/polymarket/*` and `/api/hyperliquid/*` still answer for one
863
+ release with a `Deprecation` header. Move clients to `/api/packs/markets/...`; 1.3.0
864
+ removes the old paths.
865
+ - `LAZY_DEPS_ENABLED` is a deprecated alias of `LAZY_DEPS_MODE` (`true` = `trusted`, `false`
866
+ = `off`).
867
+
868
+ ### Removed
869
+
870
+ - **The Mindprint avatar generator.** `polyrob pfp` (generate, randomize, keep, say, studio), the
871
+ console's `/pfp.*` routes and the live terminal face are gone. A kept face is not carried over:
872
+ the slot shows the polyrob mark until you run `polyrob avatar set <image>`.
873
+ - **Dead prompt code:** the unused system-prompt managers and the shipped
874
+ `data/prompts/system_prompts.json` and `autov2_prompts.json`;
875
+ `send_message.timeout_seconds` left the schema (a call that passes it still works).
876
+ - **Separate first-party pack distributions,** `PROD_PACKS` and the per-pack closure files.
877
+ `install.sh`, `polyrob update` and `python -m migrations.migrate upgrade` retire a
878
+ leftover one.
879
+ - **Plain chat text is never a command.** A sentence that starts with stop, pause or resume
880
+ is chat; use `/pause` (`/halt`) and `/resume`. The plain-word approve/reject and the
881
+ `pause.phrases` preference are gone; use `/approve`, `/reject` or the tap tokens.
882
+ - The `VOICE_TRANSCRIPT_ECHO`, `TELEGRAM_INCREMENTAL_STREAM` and
883
+ `USER_DELIVERY_LIFECYCLE_DAILY_CAP` env flags (now owner preferences).
884
+ - The agent-writable `project/.pylibs` lazy-install directory.
885
+ - The unused `CompactionManager` policy and the dead `AUTO_KNOWLEDGE_RETENTION_DAYS`
886
+ setting.
887
+
888
+ ### Fixed
889
+
890
+ - **Honest avatar replies.** `agent_avatar set_from` and Telegram `/avatar set` no longer claim the new
891
+ image is on every surface; they say the X/Telegram profile photos change only on `polyrob avatar push`.
892
+ - **`/x status` says what each X credential unlocks and how to restore it**: the API login
893
+ covers DMs (`/x login`); the browser session covers posts and outreach (`polyrob x-account capture-session`).
894
+ - **`polyrob dashboard` no longer creates `./data/task` in the folder it runs from:** with no
895
+ `DATA_ROOT`/`POLYROB_DATA_DIR`, its session tree is `<data home>/sessions`, the tree `polyrob`
896
+ writes. `HEAD /avatar.png` answers 200 instead of 405.
897
+ - **A console run that ended without a closing event no longer reads "Working for …" forever:** it
898
+ says "Stopped after … without a final word.", and the Timeline counts steps, not "actions".
899
+ - **`defi_data.positions` lists holdings open only in the position ledger** (bought before the rail
900
+ book) as LEDGER-ONLY with basis unknown, read-only; an unreadable ledger says "could not read".
901
+ - **The position-ledger reader keeps the first row per address**, so superseded rows left in the
902
+ `## Open positions` table no longer count twice or show up as reconcile mismatches.
903
+ - **Anthropic and Anthropic-compatible providers work again with `anthropic` 1.6:** a call no longer
904
+ fails with "unexpected keyword argument 'temperature'"; a third-party endpoint still receives the
905
+ sampling settings.
906
+ - **`launchpad_claim` labels its dollar line as the claim's gas fee** (`cost:`), not as the value
907
+ of what is claimed.
908
+ - **`polyrob wallet init` with no `--data-dir` writes the derivation scheme under `<home>/wallet`,**
909
+ where the running agent reads it; before, a bip44 wallet could resolve to a different address.
910
+ - **An operator-pinned Solana payment mint keeps its case;** before, the asset store lowercased it
911
+ and named an account that does not exist.
912
+ - **An unknown console address shows the error page instead of raw JSON;** it says what happened in
913
+ plain words and keeps the details behind "Show details".
914
+ - **`cronjob_show` names the job's provider pin** — `provider: (owner's seat)` or `<pin> (pinned)`,
915
+ and for a credit-dead pin, the seat it reroutes to (or that runs are skipped).
916
+ - **The console no longer shows a stuck rate-limit banner after a few page loads;** live updates
917
+ resume by themselves.
918
+ - **A credit top-up now unlatches the provider on its own.** At most once per 5 minutes the goal
919
+ dispatcher re-checks a latched seat's balance (OpenRouter `/credits`) and releases the seat only
920
+ when the provider reports a positive balance.
921
+ - **The chat page no longer clips the file pane or covers it with the message box;** on a phone the
922
+ pane opens as a drawer ("Files and steps").
923
+ - **A chat's Files list shows only the files that chat wrote,** plus what you gave it; the
924
+ shared project folder is behind one link with its size.
925
+ - **The chat's file list reads at most 500 entries four folders deep** and no longer re-reads the
926
+ folder every 30 seconds while live updates work.
927
+ - **Starting a task where no language model is available now fails with a clear reason** (503
928
+ `no_model`) instead of an empty chat; the console keeps your text and names Telegram and the terminal.
929
+ - **A chat shows your question even when the run failed;** a scheduled job's run says it is not a
930
+ chat, with its task behind a disclosure. A bound chat's tab says Chat, not New.
931
+ - **The chats list names who started each chat,** tells a failed chat from a stopped one, shows
932
+ finished chats in a neutral colour and shows times in your time zone.
933
+ - **The chats list no longer shows raw file errors.** A row with a part that would not read says
934
+ "Part of this chat is missing."; the rows say "Done", "Unknown", "Untitled chat" and "Watch only".
935
+ - **Reopening a long chat shows its newest events,** not its oldest.
936
+ - **The chat no longer draws a step twice** or misses one that happened while the page loaded.
937
+ - **Messages you add while Rob works now show in the chat.**
938
+ - **A chat that failed now says so;** a chat waiting for your answer no longer shows as stopped.
939
+ - **The chat no longer lists sending a reply or finishing as steps,** draws each reply under its
940
+ own steps, and ends each turn with its own summary.
941
+ - **Chat step times and the turn duration show real times** instead of 0:00 and 0s, and a
942
+ receipt says "1 step", not "1 actions".
943
+ - **On a phone, the Schedule table labels its first column** ("What it does") again.
944
+ - **The Work pane names a partial file read** instead of drawing a blank line.
945
+ - Token reads: Arbitrum and Polygon had no price, Solana holdings lost decimals and Token-2022,
946
+ Alchemy read one page, `reconcile` never said CLEAN on an airdropped wallet, and an unknown
947
+ cost basis was stored as $0.
948
+ - Every tool call now records its completion. Before, the console, the REPL fallback and
949
+ Telegram progress never saw a tool finish, because the completion was written only on a code
950
+ path that never ran.
951
+ - Session feed folders no longer fill with lock files.
952
+ - A reply could fail to appear live in the console until a reload.
953
+ - Events of a session resumed after a restart no longer overwrite its first events.
954
+ - Rob no longer stores the conversation context it is given as a memory of its own.
955
+ - **ERC-8004 identity:** `read_agent_id` works on a registry that is not ERC721Enumerable
956
+ (the Robinhood Chain registries), so the double-registration check no longer says "could
957
+ not check"; agentId 0 is a real id.
958
+ - **Money figures:** `defi_data.portfolio` values canonical and pinned tokens first, so the
959
+ wallet's own position no longer shows as raw units; `launchpad_claim` prints what a claim
960
+ is worth. The agent gives the owner only tool-printed money figures.
961
+ - **Stall reports:** each stall of the goal pipeline names itself (`stall #N` and the time),
962
+ so a later stall is no longer dropped as a duplicate.
963
+ - **Prompts:** the per-step reminder, the correspondent DM framing, the browser and
964
+ Polymarket blocks and `<owner-instructions>` name only what the session really has; the
965
+ background reviewer now sees the work it reviews.
966
+ - **Browser:** `search_google` URL-encodes the query; a `&`, `#` or `%` no longer cuts it.
967
+ - **Apps:** the approve hints name `/apps approve` and the console, not a shell command.
968
+ - **Tools:** `session_search(collection=…)` says so when the knowledge base is off or
969
+ failing.
970
+ - **Skills:** a cron-only session no longer gets `dca` or `exits`, matched skills are
971
+ delivered first and can be loaded again after compaction, and one malformed user rule no
972
+ longer drops every skill.
973
+ - **Runtime nudges:** the planning, empty-action, loop and verify-before-done nudges enter
974
+ history as control messages, not as a user turn, so a nudge can no longer become the
975
+ active task; the texts name only registered actions.
976
+ - **X OAuth 2.0:** a refused refresh token records a re-login verdict naming `/x login` and
977
+ is not re-sent; two processes no longer spend the same refresh token; DMs fall back to the
978
+ OAuth 1.0a keys on a 401.
979
+ - **X posts:** a new tweet that is not readable yet is reported as X lag, not as a failed
980
+ post.
981
+ - **`polyrob x-account`:** on a deployed box it acts on the deployed data home and refuses
982
+ when a key it needs is missing; before, it wrote a record the agent could not read.
983
+ - **Deploy:** `RESTART_ONLY=1` restarts every unit that reads `/etc/polyrob/polyrob.env`.
984
+ - **Approvals:** a decided Telegram button is removed; the REPL and the console chat box run
985
+ the tap tokens (`/approve_p_<hex>`, `/fulfill_<ask>_<letter>`); the fallback grant card
986
+ carries one-tap tokens.
987
+ - **Money:** a send whose outcome is unknown says "outcome unknown — do not send again",
988
+ never "NOT sent"; such a bridge stays `in_flight`.
989
+ - **Packs:** a pack's money verbs can register, pack faults are isolated per pack, and
990
+ `polyrob update` installs the `markets` pack for a `crypto` install.
991
+ - **Wallet:** `defi_trade.transfer` sends the native gas asset (`token='native'`); a repeat
992
+ `/send` to a Solana address is no longer a replay; a run that can never sign no longer
993
+ raises an approval.
994
+ - **Wallet:** an unreadable pin or position store reads as UNREADABLE, not empty; chain
995
+ names are case-insensitive; `approve_token` clamps a near-balance amount; armed goal runs
996
+ can transfer, not only swap.
997
+ - **x402:** a payment above $1 is no longer refused by the SDK's default; a multi-network
998
+ challenge is paid on Base USDC; a metered URL is payable more than once; the replay key is
999
+ stored whole before signing.
1000
+ - **Chat:** a cron job created from chat gets `CRON_DEFAULT_MAX_DURATION_SEC`; "resume",
1001
+ "continue" or "restart" never pause.
1002
+ - **Coding:** the verify-before-done and ship-what-was-tested gates fire again and no longer
1003
+ fire on prose edits or a refused `run_tests`; `run_tests` writes its full output to a log
1004
+ and gets 300 s.
1005
+ - **Coding:** edits keep CRLF, BOM, mode and hard links, refuse binary and read-only files
1006
+ and write atomically; `apply_patch` matches hunks more reliably; TypeScript checks use the
1007
+ nearest `tsconfig.json`.
1008
+ - **Telegram:** `/bridge … go` above the autonomous ceiling no longer freezes the bot; it
1009
+ reports when it lands.
1010
+ - **Publishing:** `publish` accepts a directory such as `dist/`, swaps in a complete new
1011
+ version of a live page and reports a failed promotion.
1012
+ - **Hyperliquid:** agent approval, leverage changes and order cancellations enter the owner
1013
+ approval queue in both payment modes.
1014
+ - **Skills:** skill provenance is per tenant; chained `patch_skill` edits make one pending
1015
+ item; a queued owner rule offers a tappable `/approve_p_<hex>`.
1016
+ - **Autonomy:** rails keep a money-free base, seeders recheck due state, direct cron room
1017
+ delivery respects the pause, and a failed database read is unreadable, not empty.
1018
+ - **Console:** the wallet views show the submission journal again, and Money's Cash and
1019
+ Limits say when the ledger could not be read instead of showing zeros.
1020
+ - **X:** the startup self-test uses the credential the client really carries (no false `403
1021
+ Forbidden`).
1022
+ - **Owner thread:** records the true surface and refuses a cron `deliver_target` that is not
1023
+ the owner's own address.
1024
+ - **Webhooks:** failed turns are kept and pending events retry on redelivery.
1025
+ - **Runtime:** admin token checks and billing reconciliation work again; X cooldown
1026
+ telemetry no longer raises `NameError`; speech converters get no credentials and are
1027
+ stopped on timeout.
1028
+ - **MCP:** a cached MCP resource read no longer fails.
1029
+ - **Uninstall:** `polyrob uninstall --purge` names and deletes both homes behind a typed
1030
+ confirmation; `polyrob doctor` reads system units too.
1031
+ - **Install:** `requirements.lock` serves Python 3.11 again; a missing extra is named
1032
+ instead of a raw `ModuleNotFoundError`; `polyrob update` no longer reads a `pid: 0` marker
1033
+ as a live turn.
1034
+ - **Context:** the emergency prune keeps at least the last 3 messages with complete tool
1035
+ pairs.
1036
+ - **Console Inbox:** a `tool_approval` card shows the full grant card, not a 160-character
1037
+ preview.
1038
+ - **REPL approvals:** `[s]ession` and `[a]lways` no longer widen a money action to every
1039
+ later amount; a money action offers only once, deny or never.
1040
+ - **Console:** `/send … go` or `/bridge … go` in the chat box answers "started" at once; the
1041
+ result arrives as a notice.
1042
+ - **Cron:** a job is no longer skipped as an X DM job because its task text quotes or
1043
+ forbids a DM.
1044
+
1045
+ ### Security
1046
+
1047
+ - **Feishu/Lark webhooks are signed or refused:** an event outside a ±5-minute timestamp
1048
+ window is refused, and token-only mode (no `FEISHU_ENCRYPT_KEY`) refuses every event unless
1049
+ `FEISHU_WEBHOOK_ALLOW_UNSIGNED=true`.
1050
+ - **A cross-chain bridge from an EVM chain pays only Relay's pinned deposit contracts:** a quote
1051
+ naming any other `to` refuses before signing (the Solana origin already pinned the program).
1052
+ - **`polyrob-signer` spends an owner's over-cap grant when a send may have left**, so one approval
1053
+ cannot carry a second over-cap send after an unknown outcome or a failed ledger write.
1054
+ - **An installed skill's reference files get the same Unicode and bidi-override scan as its
1055
+ `SKILL.md`.**
1056
+ - **Agent NFTs:** a pinned collection's token leaves a wallet only when its account has no open
1057
+ approval, and `tx_guard` re-checks the collection's `runtime_sha256` on every mint, reveal
1058
+ or move; an unreadable or changed check refuses.
1059
+ - **Token-bound accounts:** `tx_guard` refuses the Tokenbound forwarder, an account selector
1060
+ at any calldata offset (including `executeNested`), and any move of an NFT into an account
1061
+ of its own collection; only one exact approve, call, reset `executeBatch` passes.
1062
+ - **NFT sale safety:** the open-approval scan covers ERC-20, ERC-721 and Permit2 grants of
1063
+ an NFT's account, with guarded ERC-721 and Permit2 revoke shapes. A read-only
1064
+ `robinhood-testnet` chain (`DEFI_EVM_RPC_ROBINHOOD_TESTNET`) serves the account reads.
1065
+ - **Money and outbound rails:** launchpad `slippage_bps` is capped at 1000; `email_send` has
1066
+ the same forged-turn gate as `message`; a leaf sub-agent cannot ask the owner; the markets
1067
+ pack's own-account reads are blocked for correspondents.
1068
+ - **Skills:** a user skill can never take a builtin or pack skill id (before,
1069
+ `secret-handling` could be replaced).
1070
+ - **Correspondent sessions:** memory recall, the digests, the continuity bridges and the
1071
+ health note are skipped in a session whose output goes to a third party.
1072
+ - **Untrusted framing:** browser, MCP and web results, recalled summaries, delegated parent
1073
+ context and attached text files are wrapped as untrusted data on every path.
1074
+ - **Packs:** a manifest cannot grant itself first-party privileges; third-party code packs
1075
+ are refused while the process holds the wallet seed.
1076
+ - **Money:** only the owner's own approval lifts the autonomous ceiling; a dapp page's
1077
+ transaction is never an owner turn; a failed pause probe or ledger result refuses.
1078
+ - **Wallet:** the agent's file tools cannot write the owner pin and token-provenance stores.
1079
+ - **Publishing and coding:** published pages carry the vhost's security headers (re-run
1080
+ `scripts/setup_publish_vhost.sh`); `coding.grep` applies the read policy to every file.
1081
+ - **Custody:** the custody process is non-dumpable and the seed variables leave
1082
+ `os.environ`, so a child cannot read them; a mistyped seed never reaches a log; the wallet
1083
+ audit files are `0600`. ⚠️ No core dumps and no `py-spy`/`gdb` attach.
1084
+ - **Installs:** every install is hash-pinned by `requirements.lock`. Lazy installs go
1085
+ through one trusted installer (`LAZY_DEPS_MODE` `off|trusted|legacy`, default `trusted`).
1086
+ ⚠️ A server without custody now installs lazily; `LAZY_DEPS_MODE=off` keeps the refusal.
1087
+ - **Approvals:** an approve counts as an exit only to a pinned route spender; the approval
1088
+ card shows every money field and a calldata digest.
1089
+ - **Swaps:** every EVM swap asserts its minimum output; `solana_swap` checks the simulated
1090
+ output and refuses an unobserved output mint.
1091
+ - **Solana guard:** every top-level token and system instruction is decoded (authority
1092
+ changes, closes, durable nonces and a fee above 0.01 SOL refuse), and the Solana bridge
1093
+ requires the pinned Relay program.
1094
+ - **Generic call and dapp:** position managers, v4 pool managers, Permit2 and Pons contracts
1095
+ are reachable only through their typed verbs; Permit2 grants are refused.
1096
+ - **Deploy:** `deploy_token` refuses `vanity` / `salt` and must mint exactly the supply to
1097
+ the wallet; the ERC-8004 agentId comes from the receipt and a second registration in
1098
+ flight is refused.
1099
+ - **Payments:** the deposit monitor credits only the increase; every EVM invoice gets a
1100
+ random sub-cent tail; a canceled subscription is never reactivated; an x402 authorization
1101
+ over 600 s is refused.
1102
+ - **Gates:** wallet reads are owner-scoped; Hyperliquid and Polymarket bind the tenant per
1103
+ call; `/pause trading` binds every entry verb; a forwarded Telegram message taints the
1104
+ turn.
1105
+ - **Runtime:** money verbs run off the event loop; a reverted swap writes no position; LP
1106
+ add and remove check the pool price and cap slippage at 1000 bps; the bridge re-authorizes
1107
+ after an owner wait.
1108
+
1109
+ ## [1.1.0] — 2026-09-21
1110
+
1111
+ ### Fixed (interface deep audit — 2026-09-21)
1112
+ Five parallel audits of the console, the HTTP/A2A/OpenAI-compat API, the CLI, the
1113
+ REPL, Telegram/email and cross-surface parity found ~270 defects; all are closed in
1114
+ this pass. The behaviour-visible ones:
1115
+ - **Console** — `GET /api/webgate/pending` renders the same composer as the Inbox
1116
+ (a locked queue is NAMED, never a shorter list); Work › Now reads `live.goals`
1117
+ (un-windowed) and dedupes against `session_id`; an ask can be ANSWERED in writing
1118
+ (`{"answer"}` rides through `GoalBoard.decide_ask(answer=)` into the retry prompt);
1119
+ a Pause/Resume control in the shell header; app Kill/Logs, file links, the chat
1120
+ file picker, Keep for the avatar; `command_reply` rendered for a slash verb (and a
1121
+ verb typed on the cold open no longer becomes a session task); knowledge/worklog/
1122
+ artifacts/invoices/live readers carry typed error/partial/`filtered_out`/
1123
+ `outstanding_*` fields; the `/pending` and `/profile` pages, `/api/sessions`
1124
+ (a 1,790-dir synchronous walk), `/api/session/{id}/stats`, the CDN script tags,
1125
+ and 19 dead assets are gone; `docs/guide/console.md` and the README match the tree.
1126
+ - **API** — ONE public-path allow-list shared by both auth gates (`api/auth_constants.py`;
1127
+ SIWE, the agent card, x402 challenge/pay and pricing were 401 whenever `API_SECRET`
1128
+ was set, and a settled x402 payment then got a 401 with no refund); x402 settles
1129
+ ONLY on the gated routes; `rob_xxx` API keys validate without `ENABLE_AUTH`;
1130
+ `API_AUTH_TOKEN` is a `service` role on `X-Service-Token` (not admin; `X-API-KEY`
1131
+ works one more release with a WARN) and `GET /api/test-auth` is deleted;
1132
+ `/api/task/metrics` is admin-only; `/health` can be degraded; A2A artifacts have a
1133
+ real tenant-scoped `GET …/workspace/{path}`, `initializing` is WORKING, push URLs
1134
+ pass the SSRF validator, every session op routes through `guard_remote`, `cancel`
1135
+ checks ownership; `polyrob serve --workers N>1` refuses unless
1136
+ `API_AUTONOMY_RUNTIME=false`; `/v1/chat/completions` threads `temperature`,
1137
+ 400s (OpenAI-shaped) on unsupported params, marks `usage.estimated`; ERC-8004
1138
+ `trustMode: onchain` needs a real agent_id + registry; docs corrected.
1139
+ - **CLI** — every owner/admin verb reads the deployed data home
1140
+ (`admin_data_dir`) and the owner tenant (`keys`, `wallet init|book|bridges|overview`,
1141
+ `owner invoices|settle|sub|correspondents|approve`, `approvals`, `apps`, `cron`,
1142
+ `session`, `subagents`, `finance` were on a shell/CWD home — a confident zero over a
1143
+ live store); `goals list|tree` read `list_recent`/`status_counts`; `surface list`
1144
+ reads the real dead-target store; EIP-55 kept on `wallet asset add`; `doctor --json`
1145
+ is the typed snapshot; `wallet set-cap` writes the live pref; new verbs
1146
+ `wallet claim|nft|dapp`, `identity register|set-uri`, `owner correspondents --history`,
1147
+ `owner paid enable|disable|price|asset|offers`, `owner groups admins`.
1148
+ - **REPL** — addresses/paths/tx hashes are no longer redacted; `/approve <id>`
1149
+ DECIDES on every seat (`/gates` manages the gates); `/reject` reads the union;
1150
+ `/cron list|add|cancel`; `/groups /mute /unmute /ban /unban /paid /cancel /new
1151
+ /start /claim /nft /dapp /contacts /identity`; `/apps <verb>`; `/status` is the
1152
+ snapshot and `/meter` the token meter; full session ids; one empty grammar.
1153
+ - **Telegram** — help is RENDERED from `core.verbs` (one SSOT, contract-tested);
1154
+ a room admin can no longer self-grant `admin`; `blocked` fails CLOSED; a paired
1155
+ sender on a forgeable surface (email) is never OWNER; free `/mute /ban` no longer
1156
+ raise; `/bridge /launch /deploy /lp` no longer block the polling loop; `/goal <id>`
1157
+ resolves without `board.list`; `/wallet balances` shows the LIVE caps and the
1158
+ cap note names `/config set budget.wallet_per_tx_usd`; `/paid cancel` is
1159
+ room-scoped; `/missed` is unclipped; a correspondent's attachment is named;
1160
+ `/cron /goal /fulfill` refused from a room; room toolset is a closed allowlist.
1161
+ - **Email + delivery rails** — see the D-section of the review (BODY.PEEK, dedup
1162
+ after dispatch, honest queue outcomes, pause gate on `email_send`, secret scrub,
1163
+ IMAP verdicts, attachments on AgentMail, HTML-only bodies, thread anchors).
1164
+ - **Parity contract** — `tests/unit/test_surface_parity.py` scans every console
1165
+ router, carries 27 new rows (six of them all-`None` on purpose), and gains
1166
+ `test_repl_covers_every_telegram_owner_verb` + `test_board_view_never_calls_list`
1167
+ + `test_repl_help_group_matches_core_verbs`.
1168
+ - **Revalidation pass (same day)** — four fresh reviewers re-read the eight commits and
1169
+ their dependents; ~45 more defects closed. The ones that mattered: the workers>1 refusal
1170
+ lived only in the CLI (the systemd entry `main.py` skipped it — now in `server_boot`);
1171
+ `require_service`'s 503 was unreachable (the container accessor RAISES, so `/api/hyperliquid|
1172
+ mcp|polymarket|admin` and SIWE answered 500); `X-Service-Token` could not pass CORS
1173
+ preflight and the console still proxied the operator token under `X-API-KEY`; the `/v1`
1174
+ OpenAI envelope skipped middleware-level 401/413; `/health` could 500 on a non-numeric
1175
+ metric; the agent-callable `read_emails` still used `RFC822` (which set `\Seen` and
1176
+ emptied the surface's inbound queue); the new outbound-queue status line looked for
1177
+ `outbox.db` on the wrong axis; a queued cross-process delivery was journalled `failed`;
1178
+ the AgentMail outage verdict could never clear; `/help gates` said "unknown command"; a
1179
+ room admin's `blocked` grant and the paired-email rule re-proven; `/fulfill <id> [answer]`
1180
+ and `/approve <id> <answer>` carry the owner's words on every seat; every CLI money ACTION
1181
+ spent under the SHELL's tenant while every VIEW read the deployed one; a `/dapp` READ
1182
+ created `dapp_sessions.db`; `KV_RE` never claimed `private_key`/`mnemonic`/`seed_phrase`/
1183
+ `passphrase`/`keystore` (they survived every scrubber verbatim); `refund_due` (a settled
1184
+ machine payment we owe back) now has one status vocabulary (`modules/x402/invoice_status.py`),
1185
+ a ledger line, a status WARN, a critical-lane owner notice and a listing filter on every seat;
1186
+ paid-room remedies are seat-aware; six REPL help groups matched to `core.verbs`; the
1187
+ `GROUP_TURN_TOOLS`/`INBOUND_MEDIA_ENABLED`/`API_AUTH_TOKEN` flag rows corrected (+regen).
1188
+
1189
+
1190
+ ### Added (057 — runtime structural upgrade, implemented 2026-09-20)
1191
+ All flag-gated and default-inert unless noted; prod arms them per the proposal's
1192
+ §4 defaults. Full flag table in `docs/CONFIGURATION.md` (24 new rows).
1193
+ - **WS-A tool rigs** — `core/config_policy/rigs.py` (the ONE table `money_rail` /
1194
+ `social` / `research` / `ops` / `full`, fixed id order); `payload.rig` on cron jobs
1195
+ and goals, `polyrob cron edit --rig`, `AUTONOMOUS_RIG_DEFAULT`;
1196
+ `AUTONOMOUS_TOOL_DISCLOSURE` lets an autonomous session widen a narrow rig;
1197
+ `STABLE_AUTONOMOUS_TOOLSET` + `TOOL_SCHEMA_STABLE_ORDER` keep the cached prompt
1198
+ prefix byte-stable; the email tool's catalog status reads `gated:credentials-rejected`.
1199
+ - **WS-B budgets by session class** — `agents/task/session_class.py` is the ONE
1200
+ answer to "is this session autonomous"; `AUTONOMOUS_CONTEXT_BUDGET_TOKENS` makes
1201
+ compaction reachable; `TOOL_RESULT_MAX_TOKENS`, `AUTONOMOUS_READ_PAGE_LINES`,
1202
+ `AUTONOMOUS_MAX_OUTPUT_TOKENS`, `LLM_OUTPUT_TRUNCATION_RETRY` (+ the
1203
+ `llm_output_truncated` event), `LLM_TIMEOUT_BY_OUTPUT` (timeout sized by expected
1204
+ output, not input), `LLM_TIMEOUT_REROUTE`, `AUTONOMOUS_SCREENSHOT_ON_BROWSER_ONLY`;
1205
+ `write_file`/`append_file` results carry `size_bytes` + `sha256`.
1206
+ - **WS-C pre-empt without discarding** — `payload.preempts` (default = money) is the
1207
+ pre-emption property; the yield is scoped to the goal holding the workspace (the
1208
+ planner is never cancelled), attaches artefacts before the cancel unwinds, and is
1209
+ a `goal_run yielded` event; `GOAL_YIELD_GRACE_SEC`, `GOAL_RESUME_SAME_SESSION`
1210
+ (+ `goal_run resumed`), `GOAL_PREFLIGHT_ENABLED`/`_STEP_SEC` (056 WS5 2b),
1211
+ `GOAL_YIELD_AGEING`, `CRON_DEFAULT_MAX_DURATION_SEC`; deferrals are `goal_run
1212
+ deferred` events; the yield probe runs inside the TickLock; the change gate never
1213
+ gates a money job; `polyrob cron prune`, `cron list` hides cancelled; the goal
1214
+ dispatcher reads the cross-process turn marker.
1215
+ - **WS-D provenance** — `source=`/`observed_at=` on `owner_doc_manage` /
1216
+ `self_context_manage` (changed lines stamped ` [from: <source> <date>]`),
1217
+ `DOC_CLAIM_PROVENANCE_REQUIRED` (a FORMAT guard on claim-shaped lines), the
1218
+ foundation block states the docs' age, and a room's allowlist note renders as a
1219
+ dated LABEL, never its name (`core/surfaces/room_label.py`; `group_allowlist.updated_at`).
1220
+ - **WS-E verification** — `core/rails/verification.py` is the ONE per-rail proof table
1221
+ (x_post / x_reply / telegram_channel / telegram_group / email / onchain), rendered
1222
+ on the `message`, `x_post`/`x_reply` and `email_send` results, cited by
1223
+ `room_read`, generated into `docs/guide/rails-verification.md`; the corrupted
1224
+ bullet in the `x-engagement` skill is repaired.
1225
+ - **WS-F durable rail verdicts** — `core/credential_verdicts.py` is a store
1226
+ (`verdicts.db`, `first_seen`/`last_seen`/`count`, shared by every unit); the email
1227
+ surface polls IMAP without the SMTP probe; the X API 402 is a durable
1228
+ `x_api_rejected` event; a missing key is a verdict warned once per process.
1229
+ - **WS-G identities** — `polyrob doctor --perms [--strict]` over `core/data_perms.py`;
1230
+ the deploy's ownership pass covers the whole data home; the three ops-loop units
1231
+ join `polyrob-data` with `UMask=0002`; a root euid refuses owner-CLI writes on a
1232
+ deployed box (`--as-root` / `POLYROB_ALLOW_ROOT_CLI`).
1233
+ - **WS-H deploy + shutdown** — `deploy_when_idle.sh` fails closed, parses the marker
1234
+ as JSON and carries a daily budget (`DEPLOY_DAILY_MAX`, 6); console/API turns hold
1235
+ the turn gate (`SURFACE_OWNER_TURN`, ON); on SIGTERM the in-flight cron/goal run
1236
+ gets an ending (`AUTONOMY_SHUTDOWN_DRAIN`, ON) and `TimeoutStopSec=90`.
1237
+ - **WS-I economics** — the status snapshot's `economics` section (calls, $/day,
1238
+ cached share, uncached/output per call, p50/p90 latency, truncations, first-call
1239
+ cache hits, `budget_runway` when a balance was read) from `usage_records`; the
1240
+ loops section renders standing rail verdicts with a SINCE clock, `rail_cut_repeat`,
1241
+ and the goals section renders `yielded ×N · resumed ×M · deferred ×K`; the security
1242
+ section renders the data-home permission audit.
1243
+
1244
+ ### Changed
1245
+ - Corrections to the load-bearing numbers behind the 057 design, measured against
1246
+ production `usage_records`/telemetry: prompt caching IS live (80% of input tokens
1247
+ cached), latency is output-bound, and compaction was unreachable under
1248
+ `TASK_MAX_INPUT_TOKENS=200000`.
1249
+
1250
+ ### Fixed (deployment)
1251
+ - `polyrob.service`, `polyrob-email.service` and `polyrob-webview.service` now run with
1252
+ `UMask=0002`: with systemd's default 022 the WAL sidecars one unit created under the shared
1253
+ data dir were group-read-only, so a sibling unit hit `attempt to write a readonly database`
1254
+ (the email surface's outbound queue, twice in two days). Same fix the root helper units got
1255
+ on 2026-09-18; ratcheted by `tests/unit/test_shared_data_units_umask.py`.
1256
+
1257
+ ### Added
1258
+ - **`goal_ask`** — a rail that hits a question only the owner can answer now raises a
1259
+ durable board ask instead of asking once into a chat line that scrolls away. The ask is
1260
+ dedup-refreshed, visible on every owner seat, and the goal that raised it is HELD (not
1261
+ re-served) while it is open: on 2026-09-12 one rail re-fired seven times in 75 minutes
1262
+ while the owner was deciding, and a buyback rail stalled for 12 hours on a question that
1263
+ was asked once and never resurfaced.
1264
+ - `polyrob cron edit` gains `--task-file <path>` (replace a job's prose without
1265
+ re-scheduling it), `--deliver <target|none>` and `--rig <name>`; `cron show|edit|cancel`
1266
+ accept a unique job-id prefix, and a rig error is reported separately from a job error.
1267
+ - `OPENROUTER_REASONING_ENABLED=false` sends `reasoning.enabled=false` — measured as the one
1268
+ lever a DeepInfra upstream honours — and `OPENROUTER_REASONING_MAX_TOKENS` bounds the
1269
+ model's reasoning inside the output cap. A cut spent on REASONING gets its own note and
1270
+ its own count, so "the answer was truncated" and "the thinking was truncated" stop
1271
+ reading alike.
1272
+ - Every OpenRouter call stamps `prefix_sha`/`tools_sha` onto its usage record, which makes a
1273
+ cache miss attributable to a changed prompt prefix rather than guessed at.
1274
+ - The composed daily digest rolls up the owner messages a cap or a pause suppressed
1275
+ (window-bounded, oldest first, day-stamped, capped at 8); an unreadable store is named
1276
+ rather than read as "nothing was missed".
1277
+ - `OPENROUTER_PROVIDER_SORT` (`latency`|`throughput`|`price`, default unset = byte-identical):
1278
+ asks OpenRouter to order upstreams for the SAME model by latency instead of its price-first
1279
+ default — an ops knob for a seat whose cheapest upstream stalls (four 290–410 s timeouts and
1280
+ five money-rail cap cuts in one afternoon on prod).
1281
+
1282
+ ### Fixed
1283
+
1284
+ - `anysite_api`: an empty answer from a `/search/` endpoint to a query longer than two words now
1285
+ carries a hint that the endpoint silently rejects long phrasings and names the two-word retry —
1286
+ the agent had twice recorded a live theme as "exhausted" on a query-shape artefact.
1287
+ - `scripts/deploy_when_idle.sh` also vetoes a deploy while an owner DM was routed in the last
1288
+ `OWNER_DM_VETO_SEC` (600) seconds, read from the `inbound_routed{tier=owner}` telemetry row
1289
+ the harness writes before any turn starts — independent of the turn marker, which failed
1290
+ twice on 2026-09-19. An unreadable telemetry DB counts as busy. `DEPLOY_WHEN_IDLE_DRY_RUN=1`
1291
+ exercises the decision without deploying (bash test).
1292
+ - The live-turn marker (`turn.active`) now always lives under `<POLYROB_DATA_DIR>/locks/`, the
1293
+ location the deploy waiter, the cron tick and `polyrob doctor` read. The agent process sets
1294
+ `POLYROB_WORKSPACE_LOCK_DIR=<project>/.polyrob`, so the marker was landing there instead and
1295
+ two deploys (10:36Z, 18:29Z on 2026-09-19) fired in the middle of a live owner turn.
1296
+ - `room_read` no longer lets an empty room ledger read as "my posts may not have rendered":
1297
+ Telegram never delivers a bot's OWN posts back as updates, so a channel only the bot posts
1298
+ to stays at 0 lines by design — both the room listing and the per-room read now say so and
1299
+ name the send receipt as the delivery confirmation (prod 2026-09-19: the agent told the
1300
+ owner for two days that channel posts were "receipt-only, visibility unconfirmed").
1301
+ - `defi_data.swap_quote` cross-checks the route's output against the keyless indexer-implied
1302
+ output and renders `⚠ SUSPECT QUOTE` when they disagree by more than 5× either way (the
1303
+ `lifi:fly` cold-response constant of 2026-09-19); consistent quotes say so, and a missing
1304
+ or zero-liquidity price renders `cross-check: unavailable` — never a verdict.
1305
+ - History dedup no longer replaces a SHORT identical tool result with a "[duplicate of …]"
1306
+ back-reference (`DEDUP_MIN_CHARS`, 160): three identical `Edited <file>` confirmations in
1307
+ one step were reported by the agent as "the dedup artifact" instead of three landed edits,
1308
+ and the pointer was longer than what it replaced.
1309
+ - A screenshot of a never-navigated page (`about:blank` / new tab) is no longer attached
1310
+ to the state message: every step of a run that never touched the browser was shipping one
1311
+ useless image per call through the vision path of the metered seat (`agents/task/agent/
1312
+ prompts.py::is_blank_page_url`). A navigated page's screenshot is unchanged.
1313
+ - The system prompt now states the executor's real per-step tool-call cap (5) instead of
1314
+ the config ceiling (10), and a deferred call's notice says it did NOT run and must be
1315
+ re-issued — a 6-call batch used to lose its 6th call from the agent's point of view.
1316
+ - The GeckoTerminal client retries once (2 s) on a 429, and a provider error that survives
1317
+ the retry now propagates from the pool resolver: `defi_data_ohlcv` says "could not resolve a
1318
+ pool: HTTP 429" instead of "no indexed pool found … not an outage" (five batched candle
1319
+ reads were reported as absent pools on 2026-09-19).
1320
+ - The X API tool remembers a `402 Payment Required` (credits depleted) for 60 min and refuses
1321
+ every further API call locally with the owner remedy instead of re-discovering it per
1322
+ endpoint (a round burned 52 calls in 15 min); a successful call clears the verdict.
1323
+ - `defi_data_swap_quote` stamps `quoted_at` (UTC) and the pair addresses on every quote, so
1324
+ two re-quotes that happen to agree are never byte-identical and the history compaction
1325
+ pass no longer folds a fresh read into "[duplicate of an earlier tool result]".
1326
+ - `defi_data_ohlcv` accepts a 32-byte pool id (Robinhood Chain singleton pools) for both
1327
+ the auto-resolved and an explicit `pool=`; the path validator treated every pool as a
1328
+ 20-byte address, so every RH candle read was refused. A token address is still an address.
1329
+ - `coding_grep` given a FILE path greps that file (it used to walk it as a directory and
1330
+ answer "(no matches)"); a path that is neither a file nor a directory errors naming it.
1331
+ - `kb_ingest` no longer refuses the agent's own plain-text documents (`.md/.txt/.rst`)
1332
+ under a workspace `data/` directory purely by path: they are admitted when they sit
1333
+ outside the runtime data subtrees and a content secret-scan passes. The broad
1334
+ `is_secret_path` classifier is unchanged for every other consumer.
1335
+ - The autonomous X post cooldown refusal now names the remaining window and the exact
1336
+ one-shot deferral (`cronjob_schedule` at an ISO instant) so a NEW executed-transaction
1337
+ report is deferred rather than dropped; a genuine re-fire is still told to skip.
1338
+ - Goal dispatch no longer starves behind staggered money rails: with
1339
+ `GOAL_YIELD_FOR_MONEY_RAIL` on, a scheduled money-class cron job does not hold the
1340
+ board back through `GOAL_DISPATCH_CRON_HEADROOM_SEC` (it pre-empts a running goal
1341
+ instead); a job mid-run and every ops-class job still defer.
1342
+ - The autonomous context budget gauges the HISTORY only — it no longer clamps the model's
1343
+ safety limit, which cut the first rail of a run at step 1.
1344
+ - The state message honours `TOOL_RESULT_MAX_TOKENS` too. It reprinted every tool result
1345
+ raw under a separate 100k-character limit, so five large JSON answers put ~110k uncached
1346
+ tokens into a single step (210k in, a 221 s timeout) with the 6k cap already armed.
1347
+ - A tool-less auxiliary LLM call no longer inherits the last step's toolset, and the
1348
+ native-tools billing path feeds the output-scaled timeout (it was sizing the budget from
1349
+ input alone).
1350
+ - An LLM timeout inside an AUTONOMOUS run never DMs the owner: a background rail's retry is
1351
+ not owner news.
1352
+ - `read_file` paged past the end of a file is an honest empty answer naming the line count,
1353
+ not a crash.
1354
+ - `coding_grep`, `kb_ingest` and the tool-availability note keep their fixes from the same
1355
+ window; the compute gates now name the limb that is ACTUALLY unmet (production ran
1356
+ posture 1 with `CODE_EXEC_ENABLED=false` and the note still said "raise the posture").
1357
+ - A credential verdict's re-probe hold doubles per repeat failure to a 6 h cap, and an SMTP
1358
+ verdict is keyed on a password change-detector digest, so a corrected password clears the
1359
+ verdict instead of waiting out a fixed TTL. A verdict READ never creates `verdicts.db`.
1360
+ - Files and SQLite stores born BETWEEN deploys are group-writable from birth (one birth
1361
+ rule in `core/sqlite_util.py` and the session state writer). A store created 30 seconds
1362
+ after a deploy's ownership pass was born `0644` and degraded with "attempt to write a
1363
+ readonly database".
1364
+ - A ledger or cooldown READ never creates `telemetry_events.db`, and a `/dapp` read never
1365
+ creates `dapp_sessions.db` — a read that plants a file makes "no data" and "never ran"
1366
+ indistinguishable.
1367
+ - `polyrob doctor` reads the DEPLOYED owner tenant (refusing rather than guessing when the
1368
+ env file is unreadable) and its money section reads without a DI container: an unread
1369
+ ledger leg renders `unavailable`, never `$0.00`. `GET /api/webgate/doctor` names a failed
1370
+ report (`checks: null` + `checks_error`) instead of a confident empty list.
1371
+ - An unreadable `./.polyrob/.env` candidate or an unreadable `.git` probe on the local
1372
+ bootstrap ladder is skipped, not a crash — both killed `polyrob owner asks` when it ran
1373
+ as the service user from another user's clone.
1374
+ - Promoting an owner-approved draft no longer trips the claim-provenance guard: the owner's
1375
+ approval of a SOURCED draft is not an unsourced claim.
1376
+ - A cron job that already told the owner during its run does not send the delivery echo
1377
+ again.
1378
+ - `polyrob doctor` in a directory the agent has never run in creates NOTHING. Its new
1379
+ money section builds the unified ledger, whose caps block asks for the wallet policy
1380
+ gate, and two read-creates-a-store defects followed: constructing the wallet audit sink
1381
+ mkdir'd `<cwd>/.polyrob/wallet/` and minted an `audit.jsonl.lock` before reading a byte
1382
+ (both are now deferred to the first real write), and on a base install without the
1383
+ `crypto` extra the missing-dependency WARNING was enough to mint
1384
+ `<cwd>/.polyrob/logs/bot.log` (a base install has no wallet by design — that is not a
1385
+ warn-worthy condition). The clean-room wheel gate gained a test for the second, which
1386
+ the dev tree structurally cannot see.
1387
+
1388
+ ## [1.0.3] — 2026-09-19
1389
+
1390
+ ### Added
1391
+ - `polyrob x-account import-session <storage_state.json> | --auth-token … --ct0 …` and
1392
+ `capture-session --out <file>`: a desktop-captured X login can now reach a headless
1393
+ server. The encrypted session store is per-box (Fernet key + identity), so the hand-off
1394
+ is plain Playwright storage state (or the two login cookies), stored under the server's
1395
+ own key on import; a file with no `auth_token` is refused.
1396
+ - **Autonomy scheduling.** A running board goal no longer starts just ahead of a due cron
1397
+ job (`GOAL_DISPATCH_CRON_HEADROOM_SEC`, also honoured while a job is mid-run), and a cron
1398
+ job classed `money` (`payload.priority`, set with `polyrob cron edit <id> --priority
1399
+ money`) can pre-empt a running board goal: the goal returns to `ready` with no failure
1400
+ counted and a `resume_note`, the rail runs on the same tick (`GOAL_YIELD_FOR_MONEY_RAIL`,
1401
+ default off). A human turn is never pre-empted. `polyrob cron edit --schedule '<spec>'`
1402
+ re-times a job with its next run recomputed.
1403
+ - **Goal budgets.** `goal_create` gained `max_steps` (6–60) and `report_back`; the default
1404
+ budget for a goal that sets none is `GOAL_DEFAULT_MAX_STEPS` (30, was a literal 20). A goal
1405
+ created from a chat reports back in one line unless `report_back=true`.
1406
+ - **Owner turns hold the shared workspace on headless surfaces.** A Telegram/email owner turn
1407
+ (like a REPL turn) marks the process busy, writes `<data>/locks/turn.active`, and takes the
1408
+ cross-process workspace lock — never refusing the human — so cron/goal ticks and the deploy
1409
+ waiter defer while you are mid-turn (`INTERACTIVE_GATE_MARKER`, default on; the lock dir is
1410
+ derived from `POLYROB_DATA_DIR` when unset). `/status` shows `turn: … active since HH:MM`.
1411
+ - **Rail ledger on every status seat.** Every `cron_run` now ends with a terminal event —
1412
+ `done`, `failed`, `cut_by_cap`, `held` (owner pause), `deferred` (owner ask), or
1413
+ `cut_by_restart` (orphan reclaimed after a restart) — and the `loops` status section shows
1414
+ each enabled job's last outcome (`rail EXIT: done 04:18 · 7 steps · 6m`, or
1415
+ `started HH:MM, no end recorded`) plus a `rail_cut` health warning with the remedy.
1416
+ - **External rails as health facts.** `/status` warns when the X browser rail is enabled
1417
+ without a stored login session (naming `polyrob x-account capture-session`), when the
1418
+ anysite user-search endpoint answers empty three calls running (`rail_probe` events), and
1419
+ when an SMTP login was rejected (`email_auth_rejected`), each with the remedy.
1420
+ - **Filesystem verbs shaped for JSON-lines data.** `jsonl_append` (one compact line per
1421
+ object), `jsonl_remove(key, values)` (backup → rewrite → verify → atomic replace; one bad
1422
+ line refuses the whole rewrite), `jsonl_validate` (counts, bad lines, duplicates), and
1423
+ `copy_file` (byte copy, no overwrite unless asked — the backup-before-rewrite primitive).
1424
+ - **`x_browser.x_reply`** — reply under an existing X post through the saved browser session
1425
+ (the lane the API tier refuses for non-mentioners); owner-approval-gated like `x_post`.
1426
+ - **Skill revisions from background turns.** A background/forged turn's `skill_manage
1427
+ patch` of an active skill lands a pending revision under `.pending/<id>/` for the owner's
1428
+ `polyrob owner promote skill` — the active skill is never touched by a forged turn.
1429
+ - **Stale session-directory GC** (`core/session_gc.py`): per-session dirs untouched for 14
1430
+ days are reported (dry-run, `session_gc` event) and removed only with
1431
+ `SESSION_DIR_GC_APPLY=true`; the first pass runs 10 minutes after start, then daily. The
1432
+ deployer purges the pip cache and vacuums the journal after a successful install.
1433
+ - The deployer gains an idle-wait entry point: it waits (up to the cron ceiling) for
1434
+ no running cron job, no running goal and no live turn, then runs `deploy_prod.sh`
1435
+ (which now refuses a direct call unless `DEPLOY_FORCE=1`). Units are runtime-masked while
1436
+ the virtualenv is rewritten and unmasked on start and on rollback.
1437
+
1438
+ - `polyrob cron edit <id> --max-duration N` — change a scheduled job's hard cap
1439
+ (tenant-scoped, ≤1800 s like the agent tool; applies from the next run). The
1440
+ EXIT/SCOUT treasury rails had a 240 s cap and timed out on 22 of 24 runs; the
1441
+ cron ceiling itself rose 600 → 1800 s because the hourly buyback rail runs
1442
+ 1-5 min per step and was cut at step 6 before its swap.
1443
+ - The `/dev` owner→developer rail relays through a host spool (`<data>/dev_rail/`)
1444
+ drained by an owner-run unit, because the hardened service identity cannot reach
1445
+ the developer's tools directly.
1446
+
1447
+ ### Fixed
1448
+
1449
+ - **Context overflow no longer kills a run.** The pre-LLM token check prunes once
1450
+ (`emergency_context_prune`) and re-checks before raising; a five-page tool step used to end
1451
+ the run with `Token overflow` and lose the round.
1452
+ - **Posture is a ceiling, not a request.** `AGENT_COMPUTE_POSTURE>=1` adds `code_execution`,
1453
+ `shell` and `coding` to autonomous toolsets only when each tool's own flag is on; a
1454
+ deploy with the flags off no longer stamps a false `[tool gap]` line on every goal record.
1455
+ The flag predicates live in `core.config_policy.capability_toggles` (tools delegate).
1456
+ - **`email` is dropped from the effective autonomous toolset while its SMTP login is
1457
+ rejected** (`core/credential_verdicts.py`, fed by the email tool's 535 path and cleared on
1458
+ the next success); the tool also remembers a rejected login for 15 minutes instead of
1459
+ re-sending bad credentials at every session start.
1460
+ - **`append_file` given a JSON object wrote a pretty-printed multi-line record** into a
1461
+ JSON-lines store; it now writes one compact line per object. `coding_str_replace` coerces a
1462
+ JSON object passed as `old_string`/`new_string` to its compact line and says so in the
1463
+ result instead of failing validation.
1464
+ - **`message` is not a missing tool.** The goal vocabulary infers the `message` action from
1465
+ "telegram"; the tool loader recorded it as `gated:unknown-tool` on every such goal.
1466
+ Action ids are recognised (`ACTION_IDS_NOT_TOOLS`); an absent action names its flag.
1467
+ - **Docker socket unreachable → one honest refusal, not a retry storm.** `run_tests`/
1468
+ `run_code` refuse up front when the agent identity cannot open the Docker socket, naming
1469
+ the posture and "do not retry".
1470
+ - `x_login_check` declares an explicit empty parameter model (ended a per-session WARNING).
1471
+ - Twitter `get_timeline` accepts `max_results` 1–100 (the X floor is clamped inside the call).
1472
+ - Browser stale-context reaper measures idle time, not allocation age.
1473
+ - A message drained on the `done()` step earns the next step instead of ending the run.
1474
+ - A host-level money-verb broadcast failure ends the run with the verbatim line.
1475
+ - Root-run confined writes take the parent's service group (dirs 0770, files 0660).
1476
+
1477
+ - `filesystem_read_file` on an over-cap multi-line file returns a numbered tail
1478
+ window under a `TRUNCATED` header instead of refusing (append-only ledgers were
1479
+ refused 15×/6h on prod).
1480
+ - H-MEM (`TaskContextManager`) base path was CWD-relative `data/auto` — read-only
1481
+ under `ProtectSystem=strict`; now `<data_home>/auto` (`DATA_PATH` still wins).
1482
+ - One log file per service entrypoint (`bot.log` / `email.log` / `webview.log`,
1483
+ `POLYROB_LOG_FILE` override) — three non-root units sharing one rotating file
1484
+ raised `PermissionError` on every emit in two of them.
1485
+ - `deploy_prod.sh` owns `$DATA_DIR/auto` for the agent identity (its root-run
1486
+ import-test created it 0700 root and every session then failed at init).
1487
+
1488
+ - **`polyrob update --apply` inside a foreign git repo.** A wheel whose
1489
+ site-packages sat inside somebody else's checkout (`/work/project/.venv/…`)
1490
+ was classified `git`, and `--apply` ran `git pull` + `pip install .` against
1491
+ THAT project. `site-packages`/`dist-packages` now never resolve a repo root.
1492
+ Also: `--apply` on pip/pipx/systemd/docker exits 1 with a structured `--json`
1493
+ payload (was exit 0 + nothing); the release `tag_name` is validated and
1494
+ checked out as `refs/tags/<ref>`; rollback is `git reset --keep`; one snapshot
1495
+ restore per failed step (`migrate_guarded.py` removed); `--json` never blocks
1496
+ on stdin; draft/pre-releases are filtered; snapshots pruned to 3 after an
1497
+ apply; `--channel git` measures the branch against its upstream instead of
1498
+ the release list; `ls /opt/polyrob` no longer counts as a running agent.
1499
+ - **Migrations ran in filename order.** `v1_10_0_*` sorts before `v1_2_0_*`;
1500
+ `shipped_migrations` now sorts by parsed version. The boot-time pre-migration
1501
+ snapshot now includes the configured `DB_PATH` (on prod the one database
1502
+ being migrated was the one NOT backed up) and takes the updater's
1503
+ `update.lock`. `session_registry.db` joins the DB manifest.
1504
+ - **Deployer.** One `pip install -c requirements.lock -e "/opt/polyrob[…]"`
1505
+ replaces a non-editable install that left a SECOND code copy in
1506
+ site-packages (4 of 7 units ran that copy); every active unit sourced from
1507
+ `deployment/` is reconciled (the webview unit carrying the de-root hardening
1508
+ never was); `polyrob-browser-server.service` is quiesced with the family;
1509
+ free space is checked on `$TMP`'s mount; the character preflight honours
1510
+ `POLYROB_DATA_DIR`; the wallet chown is guarded; the import test covers the
1511
+ telegram surface.
1512
+ - **`polyrob serve` trusted `X-Forwarded-For` from anyone** — default is now
1513
+ `127.0.0.1`; new `UVICORN_FORWARDED_ALLOW_IPS`.
1514
+ - **`polyrob profile create --service`** wrote a weaker `polyrob-<name>.service`
1515
+ (collided with `polyrob-email`); it now renders the committed
1516
+ `polyrob@.service` template (byte-pinned) and enables `polyrob@<name>`.
1517
+ - `polyrob approvals *` / `polyrob config set` act on the DEPLOYED data home.
1518
+ - `setup_publish_vhost.sh` chowns the publish root to the agent (first publish
1519
+ EACCES'd) and no longer guesses a port for `/api/`.
1520
+
1521
+ ### Changed
1522
+
1523
+ - `requirements.lock` is `uv pip compile --all-extras --universal` (every extra
1524
+ pinned, none installed unless named); `requirements.txt` is a thin pointer
1525
+ (`-c requirements.lock` + the prod extras). Root units that stay root gain
1526
+ `Group=polyrob-data` + `UMask=0002`. `.dockerignore` added; the image sets
1527
+ `UVICORN_HOST=0.0.0.0` + `POLYROB_IN_DOCKER=1`. `release.yml` runs only on
1528
+ the public repository.
1529
+
1530
+ ### Removed
1531
+
1532
+ - `webview/webview.service`, `scripts/publish_prune.sh`,
1533
+ `deployment/nginx_continuous_chat_fix.conf`, `.github/workflows/deploy-portal.yml`;
1534
+ the api+webgate units, `nginx.conf`, the Xvfb trio and the SSL scripts moved to
1535
+ `deployment/legacy/`; `deployment/CLEAN_DEPLOY.md` retired.
1536
+
1537
+ ## [1.0.2] — 2026-09-18
1538
+
1539
+ ### Added
1540
+
1541
+ - Fly.io single-tenant container posture (`deployment/fly/`): a runtime image
1542
+ (python + `polyrob[all]` + Chromium + tmux + git + the native Claude Code CLI),
1543
+ a one-machine `fly.toml` with NO services and no IP (nothing listens;
1544
+ Telegram is outbound), an entrypoint that clones the private repo onto the
1545
+ volume (credential store, never a token in the URL), layers the committed
1546
+ non-secret flags UNDER the Fly secrets, installs an instance kit on first
1547
+ boot and runs three processes as one non-root user: the agent runner
1548
+ (`touch /data/restart.agent` = clean restart after a `git pull` = deploy),
1549
+ the Claude dev `/loop` in tmux (the `/dev` Telegram rail pastes into it),
1550
+ and a watchdog. A second instance gets its own `<name>.fly.env` + a container-specific
1551
+ `dev-loop-prompt.md`. `deployment/fly/README.md` lists what to buy and which
1552
+ secrets to set.
1553
+ - X OAuth 2.0 user token: encrypted store + **auto-refresh** (`tools/x_oauth2.py`).
1554
+ The X Chat DM read (where every inbound DM now lands) needs a user-context
1555
+ OAuth2 token that X expires two hours after mint; the tree read ONE static
1556
+ env value and never refreshed it, so a hand-minted token proved the rail once
1557
+ and then inbound went dark. Every consumer (`surfaces/x/client.py`,
1558
+ `tools/twitter_tool.py`, the `polyrob x`/gateway presence checks, the CLI
1559
+ twitter gate) now resolves through `resolve_access_token`: store → refresh
1560
+ within 5 min of expiry (refresh token ROTATED and persisted before the old one
1561
+ is dropped; a failed refresh keeps the old pair) → env seed
1562
+ (`TWITTER_OAUTH2_ACCESS_TOKEN` + new `TWITTER_OAUTH2_REFRESH_TOKEN`, stored
1563
+ once) → static env override. The DM client retries a 401 exactly once on a
1564
+ refreshed token; the twitter tool rebuilds its DM + Chat clients before every
1565
+ DM read/send. `polyrob x-account oauth-login` (PKCE with a local callback),
1566
+ `oauth-import` (hidden prompts), `oauth-status`, `oauth-refresh`. New flags
1567
+ `TWITTER_OAUTH2_CLIENT_ID` / `_CLIENT_SECRET` / `_REFRESH_TOKEN`.
1568
+
1569
+ ### Changed
1570
+
1571
+ - **The per-transaction wallet ceiling is the owner's, from chat** (owner ruling
1572
+ 2026-09-18, after the second time an approved raise did nothing).
1573
+ `budget.wallet_per_tx_usd` is now an owner-override preference: an approved
1574
+ value replaces the `AGENT_WALLET_MAX_PER_TX_USD` default in either direction,
1575
+ clamped to the daily cap (`core/wallet/config.py::effective_max_per_tx_usd`).
1576
+ The daily cap (`budget.wallet_daily_usd` over `WALLET_DAILY_CAP_USD`) stays
1577
+ min-merged and env-only — it is the operator's hard envelope, so a single
1578
+ transaction can never exceed what a day may lose and no raise made from chat
1579
+ moves the maximum daily loss. Prod 2026-09-17: the owner approved
1580
+ `wallet_per_tx_usd = 220`, the pref sat on disk, the guard kept reading the
1581
+ env's $120, and the agent asked the owner to edit `polyrob.env` and restart.
1582
+
1583
+ ### Fixed
1584
+
1585
+ - **The wallet caps apply LIVE.** `PolicyGate` copied both caps at construction
1586
+ (process start), so `budget.wallet_per_tx_usd` / `budget.wallet_daily_usd` —
1587
+ documented and shown as `applies: live` — took effect only at the next
1588
+ restart, in EITHER direction (an owner tightening from chat was just as
1589
+ inert). `WalletConfig.cap_resolver` (`live_caps_resolver`) is consulted on
1590
+ every `check()` and by the cap properties; a hand-built config keeps the
1591
+ frozen values; a raising resolver keeps what the gate had.
1592
+ - **The approval pre-hook read the raw env ceiling, not the owner's.**
1593
+ `spend_lane.autonomous_ceiling_usd()` read `DEFI_AUTONOMOUS_MAX_USD` while
1594
+ `tx_guard` step 9 read the pref-resolved `budget.defi_autonomous_usd`, so the
1595
+ two halves of one lane disagreed: the owner approved a $300 autonomous
1596
+ ceiling, tx_guard honoured it, and the hook still demanded a tap for every
1597
+ live swap over the env's $5 — three taps in one afternoon for trades the
1598
+ owner had said may run unattended, and an unattended cron buyback that could
1599
+ never run. The hook now delegates to `tx_guard.autonomous_max_usd` (fail-open
1600
+ to the env value, never wider).
1601
+ - **Approving an ask a CRON run raised re-arms the job instead of waking the
1602
+ dead run.** The ask had no goal to re-arm, so resume-on-grant self-woke the
1603
+ finished cron session — a forged turn the money guard refuses — and the agent
1604
+ told the owner "trigger it from your seat" for a trade the owner had just
1605
+ approved (prod 2026-09-17 16:14). Autonomous sessions now remember their cron
1606
+ job (`autonomy_marker.cron_job_for_session`, threaded through
1607
+ `run_task_to_outcome(cron_job_id=)`), the ask carries `cron_job_id`, and an
1608
+ approval pulls that job's `next_run_at` to now (`core/cron_rearm.py`, the one
1609
+ UPDATE both `CronJobStore.run_now` and the owner queue use) so the next tick —
1610
+ a genuine cron turn — redeems the grant. No wake. A running job is left alone
1611
+ and the owner is told its next run redeems the grant.
1612
+ - **A guarded proposal that could never take effect is refused, not queued.**
1613
+ For a min-merged key with the env set, a value above the env value resolved
1614
+ to the env value after the tap — the owner saw "tap to approve", tapped, and
1615
+ nothing moved. `propose_pref_change` now refuses up front and names the exact
1616
+ env line (`WALLET_DAILY_CAP_USD=…` in the service env file) that would.
1617
+
1618
+ - `FileTokenStore` writes follow the shared-data identity convention
1619
+ (`<writer>:polyrob-data 0660` under a group-writable data dir; an existing
1620
+ file keeps its mode + group). It wrote `0600` in the writer's primary group,
1621
+ so the OAuth2 pair the root CLI imported was unreadable by `polyrob-agent`
1622
+ — the unit that needed it — and an agent-written refresh would have been
1623
+ unreadable by the owner's CLI the same way.
1624
+ - `FileTokenStore` no longer treats an UNREADABLE file as a CORRUPT one. On
1625
+ prod the `polyrob-email` unit (a non-root service identity) got `EACCES` on
1626
+ the root-owned `0600` X token store that `polyrob.service` had just written,
1627
+ and the corruption branch renamed the file aside — deleting the agent's
1628
+ freshly imported OAuth2 pair from under the process that owned it. An
1629
+ `OSError` on read now logs and yields an empty in-memory store for THAT
1630
+ process only; the file is left where it is.
1631
+
1632
+ - **The browser rail under wallet custody (proposal 049).** A custody process
1633
+ refused local Chromium — correctly — but never reached the isolated browser
1634
+ it was told to use: `BrowserManager` passed the `BrowserConfig` into
1635
+ `Browser`'s BotConfig slot, so `BROWSER_CDP_URL`/`BROWSER_WSS_URL` were
1636
+ dropped (prod 2026-09-17: the service ran, the env was set, 4,517 refusals in
1637
+ 24 h, and the agent told the owner "no remote browser configured"). Over CDP,
1638
+ every session then attached to the service's default PERSISTENT context — no
1639
+ `storage_state` (the X login silently dropped), no service-worker block, one
1640
+ cookie jar shared by every session and tenant. Both fixed: the endpoint
1641
+ reaches the browser, and a remote browser always gets a fresh context.
1642
+ - Owner-ceremony launches (`x-account capture-session`/`signup`, the pfp still)
1643
+ now consult the one launch policy: refused under custody, scrubbed env,
1644
+ sandbox on. `tests/test_browser_launch_ratchet.py` pins the launch sites.
1645
+
1646
+ ### Added
1647
+
1648
+ - `core/security/browser_rail.py`: the ONE answer to "can this process drive a
1649
+ browser, and through what" — `none (custody) → install`, `configured,
1650
+ unreachable (<reason>) → check the service`, `remote cdp ok (<version>)`.
1651
+ Read by the launch refusal, the step loop (which now skips the per-step page
1652
+ observation and warns once instead of three ERRORs per step), the
1653
+ `<tool-catalog>` (`gated:custody-no-browser` for `browser`/`x_browser`/
1654
+ `dapp_browser`), the status snapshot's `identity` section (`browser:` line;
1655
+ WARN only when a configured endpoint fails) and `polyrob doctor`.
1656
+ - `polyrob browser install|update|status|render`: the isolated browser
1657
+ service as a boundary — dedicated UID, Chromium **sandbox on** via an AppArmor
1658
+ `userns` profile (Ubuntu 24.04 restricts unprivileged user namespaces; the
1659
+ earlier unit's `--no-sandbox` was a wrong diagnosis of that), a UID-keyed nft
1660
+ egress chain (no loopback / RFC1918 / link-local / metadata from the browser),
1661
+ Chromium for the venv's Playwright pin. `deployment/polyrob-browser.service`,
1662
+ `polyrob-browser-egress.service`, `hardening/polyrob-browser-egress.sh` and
1663
+ `hardening/apparmor/polyrob-browser` are the CLI's rendered output, pinned by
1664
+ a test. `scripts/deploy_prod.sh` prints the browser revision beside the pin
1665
+ and updates on drift. `--mode server --listen <private-ip>` on a SECOND host
1666
+ writes a Playwright-server unit instead (token in a root-only env file,
1667
+ private bind enforced) and prints the agent's `BROWSER_WSS_URL` — the shape
1668
+ that removes the shared kernel. Guide: `docs/guide/self-hosting.md`.
1669
+
1670
+ ### Fixed
1671
+
1672
+ - The REPL painted 5–10 blank rows above the prompt for every provider error
1673
+ and never showed the error text: `core/logging.py` gave the file handler
1674
+ and the console handler ONE `ComfyFormatter`, whose 0.5 s duplicate filter
1675
+ saw the console's copy of each record as a repeat of the file's and
1676
+ returned `""` — the `StreamHandler` still wrote the newline, and every such
1677
+ write erased and redrew the prompt. Duplicate suppression is now a
1678
+ per-handler `logging.Filter` (a formatter cannot drop a record), and the
1679
+ REPL console renders one compact `✗ component: message` line per error;
1680
+ a re-wrapped exception (one 401 logged five layers of the same text) is
1681
+ collapsed to its first line on the console only — `bot.log` keeps every
1682
+ layer.
1683
+ - Gemini: a text part was dropped and logged as `Gemini function_call
1684
+ missing name` at ERROR. A proto `Part` answers `hasattr(part,
1685
+ "function_call")` True for every oneof member, so a plain text part hit the
1686
+ nameless-call branch and `continue`d — every text-only Gemini reply became
1687
+ "Model output has empty action list", the model was pushed into a filler
1688
+ step, and the REPL showed a second bubble ("Я жду твоего ответа"). Presence
1689
+ is now asked via `"function_call" in part`.
1690
+ - A session the terminal created (REPL, one-shot `polyrob run`) is a live
1691
+ surface: it renders every reply from the feed but bound no router, so
1692
+ `maybe_deliver_autonomous_send` pushed each chat reply through the owner
1693
+ delivery rail — dedup, the hourly rate limit and the daily cap included.
1694
+ Past the cap `send_message` told the model its answer was "NOT delivered",
1695
+ the model re-sent an apology (another duplicate bubble) and the turn closed
1696
+ `failed`. `core.surfaces.binding.bind_terminal_surface` marks such a
1697
+ session; `--resume` keeps the durable rail (2026-08-28 incident).
1698
+ - The bounded planning turn (`ALLOWED_REASONING_TURNS`) no longer logs two
1699
+ ERROR lines ("violates the agent contract") before the caller grants it.
1700
+
1701
+ ### Changed
1702
+
1703
+ - `done(text)` no longer reaches the user on any chat surface. `done` writes
1704
+ the run log (history + session feed) and nothing else; only `send_message`
1705
+ / `message` speak, in a DM as in a room — exactly what the prompt has told
1706
+ the model since C1. The old router mirror published `done` whenever
1707
+ `send_message` had not claimed the turn, and the `message` tool (a file
1708
+ with a caption) never claimed it, so on prod (2026-09-17) the owner received
1709
+ the answer AND a 2,400-char third-person session recap after every such
1710
+ turn. The unbound HTTP paths (`chat_once`, `/v1/chat/completions`) still
1711
+ fall back to `done`'s text for the response body when the turn spoke
1712
+ nothing — a request needs a body.
1713
+
1714
+ ### Removed
1715
+
1716
+ - `CHAT_SINGLE_FINAL`. Its only consumer was the `done` mirror's latch gate;
1717
+ with the mirror gone there is no second voice to gate, and a flag would be
1718
+ a knob on a rule the prompt states without one. `core/surfaces/turn_reply.py`
1719
+ keeps only the reply-text record the unbound paths read.
1720
+
1721
+ ## [1.0.1] — 2026-09-17
1722
+
1723
+ ### Added
1724
+
1725
+ - `self-deploy` skill: an agent-facing bootstrap for a FRESH instance —
1726
+ assess (model, wallet + funding per chain, email, X, autonomy grants, tool
1727
+ catalog), provision what a lever exists for (own inbox, X account, standing
1728
+ work), bundle the human-only asks into ONE message (API keys, funding
1729
+ addresses read from a tool, env flags, a CAPTCHA), verify by a READ, and
1730
+ report one readiness table. Until now `polyrob init` was the human's wizard
1731
+ and the setup interview covered only the owner contract.
1732
+ - `twitter_poll_results(tweet_id)`: reads the options, votes, shares,
1733
+ `voting_status` and end time of a poll the agent posted. The tool could post
1734
+ a poll (`poll_options`) but no read asked for `attachments.poll_ids`, so the
1735
+ agent could ask the community and never learn the answer. The
1736
+ `x-engagement` skill now teaches the post → record id → read → aggregate loop
1737
+ and pins poll answers as DATA.
1738
+ - X message reads distinguish legacy Direct Messages from encrypted X Chat,
1739
+ support OAuth 2.0 PKCE user tokens, and can verify/decrypt Chat event history
1740
+ with the official Chat XDK and account keys instead of misreporting ciphertext
1741
+ or a legacy-only page as an empty inbox.
1742
+ - The `identity` status section now reports the agent's reachable identities:
1743
+ `email:` (the address it sends AS, or `none → remedy`) and `x:` (API rail
1744
+ configured / PARTIAL with the missing key names / none, plus the handle and
1745
+ whether writes are armed). Env PRESENCE only, never a value.
1746
+ - A `liquidity` status section on every seat (status snapshot, `polyrob wallet
1747
+ overview`, Telegram `/wallet overview`, console `GET /api/webgate/liquidity`)
1748
+ lists the treasury's Uniswap v3 positions with their fees; on-chain
1749
+ enumeration is opt-in and owner-only. `/lp` is listed in the money verb
1750
+ group on every chat surface.
1751
+ - `launchpad_status` names the graduated pool (PoolKey + pool id) once a Pons
1752
+ V2 curve has graduated, and states the fee reality: the LP fee is 0, the
1753
+ hook collects, creator income is claimed via the escrow, and the launch
1754
+ locker position cannot be withdrawn.
1755
+ - `X_SIGNUP_HANDLE` / `X_SIGNUP_DISCLOSURE`: the @handle `x_signup_start`
1756
+ requests and the automation-disclosure bio it writes.
1757
+
1758
+ ### Changed
1759
+
1760
+ - Post-1.0 alignment sweep: one home per shared rule instead of hand-carried
1761
+ copies. `core.event_log` owns the telemetry db resolution and a fail-open
1762
+ `emit()` (the recap reader used to ignore `TELEMETRY_EVENT_LOG_PATH` and
1763
+ create the db on read); every owner/admin CLI verb resolves its data home
1764
+ through `cli/_admin_home.py` (the deployed-home rule now also covers
1765
+ `apps`, `surface`, `cron`, `goals`, `journey`, and `owner pending`'s goal
1766
+ board, which came from a third resolver); the sub-agent and owner-pause
1767
+ refusals every money verb states live in `core.wallet.authority`; the
1768
+ publish/app-service owner-turn clauses in `core.security.owner_turn`; the
1769
+ ship rail's orchestrator/approval/workspace helpers in `tools/ship_common.py`;
1770
+ the goal board's status/kind vocabulary in `core.goal_vocab`; the `/help`
1771
+ group order is read from `core.verbs`; the copy-layer engine is shared by
1772
+ `core.copy` and `webview.copy`; the Telegram update dedup is the core
1773
+ `IdempotencyStore` over its existing table. Twelve open-coded boolean
1774
+ truth sets now parse through `core.env`, pinned shrink-only by
1775
+ `tests/test_bool_env_parse_ratchet.py`.
1776
+ - Social-agent skills and toolsets now route public discovery, native X account
1777
+ reads, encrypted Chat, browser inbox fallback, and approval-gated writes through
1778
+ the capabilities that actually implement each operation.
1779
+ - REPL slash commands parse quoted arguments (`/steer "two words"` is one
1780
+ argument); an unbalanced quote is refused with the remedy. Free-text verbs
1781
+ (`/learn`, `/persona`) keep the raw line. `/export` names the formats the
1782
+ REPL supports and points at `polyrob session export` for the rest; `/logs`
1783
+ prints the log directory instead of a CLI verb that does not exist.
1784
+ - The approval `awaiting` event names the provider that will decide.
1785
+ - `lp_collect` / `lp_remove` set their receipt minimum from a simulated
1786
+ collect, not the position's fee-growth estimate (core rounding leaves the
1787
+ estimate several raw units high, which made a correct collect refuse).
1788
+ Every position receipt also asserts the fungible legs. LP legs are no longer
1789
+ written into the token-keyed position book: adding them double-counted
1790
+ tokens already held, and removing them on withdrawal erased unrelated
1791
+ holdings. Position receipts stay in the NFT and transaction telemetry until
1792
+ an LP-specific basis exists.
1793
+
1794
+ ### Fixed
1795
+
1796
+ - Scheduled agent runs now propagate wall-clock cancellation and are recorded as
1797
+ incomplete unless the agent actually calls `done()`. The default cron budget is
1798
+ ten minutes, preventing slow provider calls from silently turning unfinished
1799
+ treasury rails into successful ticks.
1800
+ - Provider health distinguishes a sentinel on the serving provider from one on an
1801
+ unused fallback. A credit-limited fallback is shown as a warning and explicitly
1802
+ does not claim to block the live provider.
1803
+ - Live incremental streams claim the turn's reply latch after becoming visible,
1804
+ preventing `done()` bookkeeping from producing a second user-facing response.
1805
+ - Browser management accepts operator-configured CDP and WebSocket endpoints, so
1806
+ hardened custody deployments can keep Chromium outside the signing service.
1807
+ - The owner's spend ceilings are read from the same home the preference
1808
+ writers use. `tx_guard`, the wallet config fallback and the Telegram
1809
+ `/wallet autonomous` verb resolved the preference store through the
1810
+ process home (an empty tree under a service account), so an approved
1811
+ `budget.defi_autonomous_usd` was recorded and never read and the guard kept
1812
+ refusing at the env default. Those seats may no longer call the process
1813
+ home (ratcheted).
1814
+ - X self-registration: `XPageDriver.set_handle_and_profile` was a `pass` stub
1815
+ while the docs claimed the disclosure was written into the bio — no handle
1816
+ and no disclosure were ever applied. It now edits `/settings/screen_name` and
1817
+ `/settings/profile` best-effort and RETURNS what it applied; the signup
1818
+ result carries `requested_handle`/`handle_applied`/`bio_applied` and the tool
1819
+ says plainly when the disclosure is NOT on the profile yet. The flow refuses
1820
+ up front with the remedy when the agent has no email or no inbox client
1821
+ (it used to fill an EMPTY email and pause several steps later on "no code
1822
+ arrived"), provisions the AgentMail inbox idempotently before opening a
1823
+ browser, and the default disclosure names the instance instead of the
1824
+ owner's internal tenant id (`operated by local`).
1825
+ - `x_browser` stays explicit-grant-only: it is `high_impact` +
1826
+ `delegate_blocked`, so it is not on the CLI optional-registrar table and is
1827
+ reached by explicit `tool_ids` only.
1828
+ - A per-profile daemon (`polyrob profile create --service`) no longer loads
1829
+ the primary instance's environment first: any key the profile did not
1830
+ override leaked through (its Telegram token → a 409 fight, its `TWITTER_*`
1831
+ keys → the profile posted AS the primary, its owner ids and money flags). A
1832
+ profile daemon reads its own environment files only.
1833
+ - `defi_trade.register_agent` / `set_agent_uri` referenced `os.environ` with
1834
+ no module-level import (latent `NameError`).
1835
+ - The coding and git tools resolve their confined root per TENANT, not the
1836
+ anonymous bucket, on a multi-tenant server.
1837
+ - The `twitter` extra now carries `chatxdk`, which the encrypted X Chat reads
1838
+ need; a base install without the extra still imports.
1839
+
1840
+ ### Deployment
1841
+
1842
+ - The signing service owns the wallet state directory while wallet artifacts
1843
+ remain group-readable, allowing the durable submission journal to be created on
1844
+ the first broadcast without weakening the service-identity boundary.
1845
+
1846
+ ## [1.0.0] — 2026-09-16
1847
+
1848
+ POLYROB 1.0 is the first stable public release. It brings the terminal, web
1849
+ console, chat surfaces, autonomy runtime, tool system and optional wallet rails
1850
+ under one documented control model, with explicit owner authority and
1851
+ fail-closed boundaries around credentials, sessions and money.
1852
+
1853
+ ### Agent, CLI and operator control
1854
+
1855
+ - The terminal client now supports interactive chat and one-shot runs with
1856
+ task files or stdin, file and image attachments, JSON/JSONL results,
1857
+ profile-scoped history, persistent background delegation receipts and full
1858
+ session identifiers.
1859
+ - Safe controls can pause, steer or stop a busy session at step boundaries.
1860
+ Cross-process controls are acknowledged, keyless stops are supported, and
1861
+ update/rollback refuses while a live process owns a database unless the
1862
+ operator explicitly forces it.
1863
+ - Status, doctor, owner, wallet, session and REPL views share the same typed
1864
+ runtime snapshot. Provider fallback updates the displayed provider/model only
1865
+ after the main agent actually switches.
1866
+ - A turn commits one user-facing reply. Completion bookkeeping no longer
1867
+ produces a second chat message, and workspace paths resolve to attachments,
1868
+ console links or an honest server-only state.
1869
+
1870
+ ### Web console
1871
+
1872
+ - The console now has one responsive five-destination shell for Chat, Work,
1873
+ Money, Inbox and Agent. The legacy page set and `WEBVIEW_UI` switch are
1874
+ removed.
1875
+ - Work shows running goals, schedules, cron jobs and live sessions, and can
1876
+ create goals and schedules through the same guarded writers used elsewhere.
1877
+ Money presents typed positions, movements, invoices and limits. Agent exposes
1878
+ identity, memory, skills, capabilities and permitted configuration controls.
1879
+ - The console includes durable light/dark/automatic themes, a shared command
1880
+ palette, live Socket.IO refresh, paginated chat summaries, typed artifacts
1881
+ and narrated tool activity.
1882
+ - Inline scripts were removed from the console CSP. Owner routes, session
1883
+ transcripts, files and event streams are tenant-scoped; logout revokes the
1884
+ active token and authentication storage failures deny access.
1885
+ - Console mutations rely on the HttpOnly session cookie. The standalone proxy
1886
+ forwards authenticated identity to the task API and renders structured
1887
+ refusals. Money includes an owner-scoped, read-only wallet view with safety
1888
+ labels, trusted cached balances and unresolved-submission warnings.
1889
+
1890
+ ### Autonomy, groups and owner authority
1891
+
1892
+ - Telegram groups have a public-session profile, per-chat roles and policy,
1893
+ bounded toolsets, reply threading, a room ledger and owner-only administration
1894
+ from direct messages. Denied room turns do not leak owner facts or private
1895
+ notices into the room.
1896
+ - Optional paid room actions use expiring offers, asset-aware x402 invoices,
1897
+ settlement verification, effect receipts and credits when a paid effect
1898
+ cannot be applied.
1899
+ - Owner stop instructions persist across restarts. Paused streams stay paused,
1900
+ only an owner can resume global autonomy, and owner rules distinguish
1901
+ restrictive instructions from permission-granting changes.
1902
+ - Delivery suppression is observable and recoverable: missed notices, caps,
1903
+ quiet-hour holds and unavailable producers are represented in status rather
1904
+ than silently counted as delivery.
1905
+
1906
+ ### Skills, memory, models and identity
1907
+
1908
+ - Curated character profiles ship in wheel and source distributions. Persona
1909
+ selection, authoring and inspection are available from the CLI, REPL and
1910
+ console, and the neutral stock avatar now ships without instance-specific
1911
+ identity.
1912
+ - Skill triggers, action names and tool IDs are checked against the runtime
1913
+ index. Trading, token assessment and verified-tooling guidance cover the
1914
+ capabilities exposed by the current tool catalog.
1915
+ - Owners can add, test and remove HTTPS MCP servers from the CLI, REPL or
1916
+ Telegram. Persisted servers reload per tenant; stdio entries remain local
1917
+ configuration and are refused in wallet-custody processes.
1918
+ - Model profiles and auxiliary routing were expanded, while prompt catalogs and
1919
+ recent context are kept within model size ceilings.
1920
+
1921
+ ### Optional wallet, payments and on-chain tools
1922
+
1923
+ - The optional wallet stack supports guarded EVM and Solana swaps, bridges,
1924
+ token deployment, contract calls, launchpads, dapp sessions, NFT inspection
1925
+ and transfer, revenue collection, ERC-8004 identity, asset-aware x402
1926
+ settlement and initial Uniswap v3 liquidity reads and writes.
1927
+ - Money tools remain disabled until their feature flags, tool grants, owner
1928
+ approval and spend policy all allow the action. Unpriced approvals and
1929
+ undeclared token or NFT movement are refused; submitted and confirmed effects
1930
+ are recorded separately.
1931
+ - Durable spend reservations are serialized across processes. Corrupt or
1932
+ unreadable accounting blocks further spending, chain and venue attribution is
1933
+ retained, and receipt reconciliation checks the landed effect before marking
1934
+ an action complete.
1935
+ - Token assessment adds resolver fallbacks, holder concentration, price history,
1936
+ new-pool discovery and composite screening with explicit partial/unknown
1937
+ states. These rails remain experimental and off by default.
1938
+
1939
+ ### Security and release integrity
1940
+
1941
+ - Evaluation runs default to reviewed fixture scenarios with sealed run,
1942
+ configuration and source identity. Missing, unknown, drifted or mismatched
1943
+ evidence fails scoring, and unbudgeted live evaluation seeding is disabled.
1944
+
1945
+ - Child processes receive a credential-scrubbed environment. Managed RPC URLs,
1946
+ bearer tokens and provider keys are masked in configuration, logs, stored
1947
+ results and terminal output.
1948
+ - Browser and fetch paths enforce URL and redirect checks, block protected
1949
+ network ranges, reject compressed responses, pin validated addresses and use
1950
+ one deadline across DNS and redirect hops. Untrusted content is framed at
1951
+ model and browser-render boundaries.
1952
+ - Host execution is refused when wallet custody or a payment/deposit master seed
1953
+ requires a sandbox, including when the agent wallet itself is disabled.
1954
+ - Session tokens require finite expiry and revocation identifiers. API request
1955
+ bodies, command output and concurrent reads are bounded; cancelled host and
1956
+ container processes are reaped.
1957
+ - External payment, exchange and treasury submissions journal their local
1958
+ intent, signature or transaction hash before broadcast. Ambiguous outcomes
1959
+ keep the spend interlock held until reconciliation, preventing a blind retry.
1960
+ - EVM and treasury sends reserve before signing. Submission-journal identity and
1961
+ high-water checks refuse missing or truncated history; venue attempts cannot
1962
+ be released by smaller charges or charges for another venue. A read-only
1963
+ recovery diagnostic checks EVM/Solana chain evidence while retaining every
1964
+ reservation. Shared urllib RPC replies have raw byte and encoding limits;
1965
+ malformed or unrelated EVM receipts remain pending.
1966
+ - Treasury sweeps verify the configured chain and derived signing address,
1967
+ reserve the signed gas cost, use pending nonces and require a matching
1968
+ successful receipt before bookkeeping can complete.
1969
+ - Chromium launches with sandboxing enabled. Sandbox opt-out is restricted to
1970
+ local non-custody development, failed startup reaps the driver, and remote
1971
+ browser credentials are redacted from connection errors.
1972
+ - Package manifests now carry the migrations, console assets, avatar engine,
1973
+ character library, contract sources, browser DOM helper and bundled fonts
1974
+ used at runtime. Release checks install the wheel into a bare environment and
1975
+ exercise version, help, doctor and migration commands before publication.
1976
+ - Knowledge ingestion reads bounded, descriptor-relative snapshots; rejects
1977
+ symlinks, hard-link aliases and special files; and hashes the same bytes it
1978
+ parses. DOCX admission bounds archive expansion, part and table counts, XML
1979
+ structure and extracted text, while failed replacements preserve existing
1980
+ knowledge.
1981
+ - Upload capacity remains reserved until temporary request storage is consumed
1982
+ or closed, binary sniffing is bounded, and mismatched content lengths are
1983
+ rejected.
1984
+ - Wallet audit locks are reusable only by the asyncio task that owns the spend
1985
+ reservation; unrelated tasks and worker threads cannot borrow another task's
1986
+ reservation.
1987
+ - Package builds now require setuptools 83.0 or newer.
1988
+ - Skill writes and promotions validate tenant identifiers, refuse linked paths,
1989
+ use descriptor-relative atomic writes and archives, and fail closed when the
1990
+ threat scanner is unavailable. Project-context snapshots are bounded.
1991
+ - Acceptance declarations are validated before execution or goal creation. File
1992
+ probes are confined, artifact IDs bind to their goal and session, hash/content
1993
+ checks use one snapshot, and HTTP probes pin public addresses and revalidate
1994
+ redirects.
1995
+ - Provider recovery adopts the shared model state, restores the requested native
1996
+ tool mode and refreshes capability catalogs before each step. Source precedence
1997
+ separates current owner intent from factual evidence.
1998
+ - Short untrusted tool strings are framed, final action evidence survives long
1999
+ runs, test verification requires real comparable results, and memory corrections
2000
+ do not delete nonidentical facts solely from embedding similarity.
2001
+ - Knowledge sources publish chunks and hash/count metadata atomically, preserving
2002
+ the previous source on failure and excluding stale vector-cache content.
2003
+ - Directory discovery is bounded by output, entry count, depth and elapsed time.
2004
+ PDF and DOCX parsing runs in admitted subprocesses with cancellation cleanup;
2005
+ Linux adds an address-space limit.
2006
+
2007
+ ### Breaking changes and migration
2008
+
2009
+ - The version advances directly from 0.13.0 to 1.0.0; no 0.14.0 release was
2010
+ published.
2011
+ - The legacy console routes and `WEBVIEW_UI` selector are removed. Use the five
2012
+ destination console and `/api/webgate/*` endpoints.
2013
+ - Public group sessions no longer inherit owner memory, project context or
2014
+ owner-only tools. Deployments that relied on broad group access must configure
2015
+ explicit per-chat policy and tool grants.
2016
+ - Review the [upgrading guide](docs/guide/upgrading.md),
2017
+ [configuration reference](docs/CONFIGURATION.md) and
2018
+ [security model](docs/guide/security-model.md) before enabling autonomy,
2019
+ wallet custody, code execution or public chat surfaces.
2020
+
2021
+ Releases before 1.0.0 (0.4.2 through 0.13.0) are in
2022
+ [`CHANGELOG-archive.md`](CHANGELOG-archive.md).