polyrob 1.0.2__tar.gz → 1.0.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {polyrob-1.0.2/polyrob.egg-info → polyrob-1.0.3}/PKG-INFO +4 -2
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/next_action_internal.py +5 -2
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/run_loop.py +37 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/step_execution.py +11 -4
- polyrob-1.0.3/agents/task/agent/core/token_budget.py +29 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/filters.py +12 -2
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/prompts.py +35 -5
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/skill_writer.py +8 -4
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/constants.py +21 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/dispatcher.py +122 -6
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/task_agent_lifecycle.py +44 -2
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/tool_defaults.py +15 -2
- {polyrob-1.0.2 → polyrob-1.0.3}/api/server_boot.py +4 -2
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/approvals.py +5 -3
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/config.py +10 -7
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/cron.py +39 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/profile.py +55 -31
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/update.py +84 -21
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/x_account.py +104 -5
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/banner.py +2 -2
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/update/detect.py +9 -3
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/update/engine.py +19 -35
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/update/process_guard.py +32 -4
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/update/runners.py +66 -10
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/update/snapshot.py +14 -2
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/update/versions.py +22 -9
- {polyrob-1.0.2 → polyrob-1.0.3}/config/.env.development.template +3 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/autonomy_runtime.py +13 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/capability_toggles.py +20 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/goal_flags.py +26 -0
- polyrob-1.0.3/core/credential_verdicts.py +33 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/db_manifest.py +5 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/event_kinds.py +8 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/flags_catalog.py +9 -0
- polyrob-1.0.3/core/interactive_gate.py +256 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/logging.py +33 -2
- {polyrob-1.0.2 → polyrob-1.0.3}/core/runtime_paths.py +12 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security/confined_write.py +22 -0
- polyrob-1.0.3/core/session_gc.py +108 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/status_snapshot.py +134 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/version.py +1 -1
- polyrob-1.0.3/core/wallet/infra_error.py +30 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cron/jobs.py +81 -1
- {polyrob-1.0.2 → polyrob-1.0.3}/cron/scheduler.py +65 -4
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polyrob-user-guide/references/configuration.md +9 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/CONFIGURATION.md +11 -2
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/cli.md +2 -1
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/getting-started.md +13 -10
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/profiles.md +1 -1
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/self-hosting.md +84 -18
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/upgrading.md +30 -11
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/x-twitter.md +7 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/migrations/boot.py +12 -1
- {polyrob-1.0.2 → polyrob-1.0.3}/migrations/version_manager.py +16 -4
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/openrouter_client.py +4 -4
- polyrob-1.0.3/modules/llm/openrouter_routing.py +34 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/task_context_manager.py +2 -5
- {polyrob-1.0.2 → polyrob-1.0.3/polyrob.egg-info}/PKG-INFO +4 -2
- {polyrob-1.0.2 → polyrob-1.0.3}/polyrob.egg-info/SOURCES.txt +5 -1
- {polyrob-1.0.2 → polyrob-1.0.3}/polyrob.egg-info/requires.txt +3 -1
- {polyrob-1.0.2 → polyrob-1.0.3}/pyproject.toml +3 -3
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/dev_rail.py +6 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/harness.py +8 -1
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_version_consistency.py +2 -2
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/anysite/tool.py +41 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/browser_manager.py +24 -17
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/__init__.py +2 -1
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/sandbox_guard.py +44 -2
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/coding/__init__.py +2 -2
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/coding/search.py +24 -3
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/coding/tool.py +35 -3
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/approval.py +1 -1
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/room_read_action.py +10 -2
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/tool_load_report.py +36 -1
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/tool_management.py +12 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/views.py +57 -1
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/cronjob_tools.py +5 -2
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/data_tool.py +87 -3
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/geckoterminal.py +34 -4
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/email_tool.py +55 -1
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/filesystem.py +255 -9
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/goal_tools.py +15 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/knowledge_ingest.py +52 -4
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/shell/__init__.py +2 -2
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/twitter_tool.py +74 -8
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/x_browser/driver.py +24 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/x_browser/tool.py +93 -2
- polyrob-1.0.2/cli/update/migrate_guarded.py +0 -61
- polyrob-1.0.2/core/interactive_gate.py +0 -95
- {polyrob-1.0.2 → polyrob-1.0.3}/LICENSE +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/MANIFEST.in +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/README.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/README.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/base_agent.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/personality/character.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/personality/character_manager.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/personality/characters/polyrob.character.json +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/personality/persona_render.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/personality/persona_resolver.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/prompt/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/prompt/base_prompt.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/prompt/system.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/README_PATH_MANAGEMENT.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/agent_state.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/async_delegation.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/autonomy_state.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/conversation.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/background_review.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/construction.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/conversational_exit.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/correspondent_gate.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/curator.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/env_context.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/episodic_digest.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/error_recovery.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/history_io.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/live_health.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/llm_provisioning.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/llm_runner.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/logging_io.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/loop_detection.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/memory_prefetch.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/memory_writer.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/metering_failure_log.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/model_introspection.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/model_swap.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/output_validation.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/project_context.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/resources.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/result_offload.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/result_processing.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/run_budget.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/runtime_catalog.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/safety_lifecycle.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/self_wake.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/session_control.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/session_metadata.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/step.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/step_telemetry.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/tool_availability.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/turn_input.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/untrusted_render.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/core/user_ingress.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/hitl_manager.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/log_sanitize.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/message_manager/config.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/message_manager/service.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/message_manager/tool_call_builder.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/message_manager/tool_message_repair.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/message_manager/views.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/builders.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/compactor.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/context_references.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/guidance.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/persistence.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/retrieval.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/sqlite_persistence.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/messages/token_counter.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/orchestrator.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/profile_manager.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/profile_registry.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/profile_store.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/service.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/session.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/skill_discovery.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/skill_frontmatter.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/skill_manager.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/skill_store.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/skill_validation.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/sub_agent_manager.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/tool_call_tracker.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/agent/views.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/config.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/conversation_resume.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/autonomy_marker.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/board.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/claim_liveness.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/completion_judge.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/context.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/deliverables.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/escalation.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/goal_tool_gates.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/group_service.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/planner.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/goals/streams.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/logging_config.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/path.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/robust_parse_config.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/runtime/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/runtime/acceptance_checks.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/runtime/acceptance_schema.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/runtime/edit_verify.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/runtime/evidence.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/runtime/metering_gate.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/runtime/run_as_session.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/runtime/run_outcome.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session/browser_pool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session/cleanup.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session/execution.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session/feed.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session/hitl_ingress.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session/hooks.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session/workspace.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session_registry.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/session_route.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/sqlite_session_registry.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/task_agent_chat.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/task_agent_control.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/task_agent_delivery.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/task_agent_support.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/agent_graph.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/feed_reads.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/formatters.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/live_progress.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/manager.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/memory_events.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/narrate.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/run_activity.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/sequence.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/service.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/service_detect.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/telemetry/views.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/templates.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/utils.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/utils_json.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/utils_webview.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task/workspace_context.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/agents/task_agent_lite.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/README.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/TASK_API_DOCS.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/a2a/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/a2a/agent_card.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/a2a/endpoints.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/a2a/models.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/a2a/streaming.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/a2a/task_handler.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/admin_endpoints.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/app.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/auth_constants.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/auth_endpoints.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/auth_state.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/chat_via_task.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/dependencies.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/eip8004_endpoints.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/hyperliquid_models.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/hyperliquid_routes.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/jwt_middleware.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/kb/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/kb/endpoints.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/mcp_models.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/mcp_routes.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/mcp_serve/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/mcp_serve/handlers.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/mcp_serve/router.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/middleware.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/models.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/openai_compat/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/openai_compat/model_map.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/openai_compat/models.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/openai_compat/router.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/payment_endpoints.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/payment_verification.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/polymarket_models.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/polymarket_routes.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/pricing_endpoints.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/request_limits.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/session_routing.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/skill_endpoints.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/task_http_api.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/webhooks.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/api/x402_endpoints.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/assets/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/assets/fonts/dejavu/DejaVuSans-Bold.ttf +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/assets/fonts/dejavu/DejaVuSans.ttf +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/assets/fonts/dejavu/LICENSE +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/avatar/README.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/avatar/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/avatar/config/rob.json +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/avatar/mindprint.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/avatar/renders/rob.meta.json +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/avatar/renders/rob.png +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/avatar/studio.html +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/avatar/webview/avatar-live.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/README.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/_admin_home.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/_flag_warn.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/attachments.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/_bootstrap.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/_errors.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/_grouped.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/_options.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/_session_control.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/_surface_runner.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/apps.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/auth.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/autonomy.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/browser.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/chat.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/dashboard.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/datagen.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/discord.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/doctor.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/email.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/finance.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/gateway.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/goals.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/identity.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/init.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/journey.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/kb.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/keys.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/knowledge.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/model.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/owner.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/persona.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/pfp.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/profile_dist.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/profile_transfer.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/run.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/serve.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/session.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/signal.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/skill_install.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/skills.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/slack.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/soul.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/subagents.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/surface.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/telegram.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/todos.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/tools.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/wallet.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/wallet_lp.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/whatsapp.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/commands/x.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/config_store.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/delegation_receipts.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/git_child_env.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/gitignore.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/inventory.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/keys.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/persona.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/polyrob.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/session_paths.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/toolset.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/activity.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/app.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/approval_prompt.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/autonomy_poll.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/blocks.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/bootstrap_notice.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/candy.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_a23.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_approve.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_attach.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_autonomy.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_config.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_context.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_cron.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_diag.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_files.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_finance.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_goal_one.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_help.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_inbox.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_journey.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_kb.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_learn.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_mcp.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_mode.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_money_verbs.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_owner.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_pending.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_persona.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_pfp.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_prefs.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_profile.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_reject.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_self.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_skills.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_steer.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/h_token.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/handlers.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/registry.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/commands/window.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/config_picker.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/dialog.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/event_registry.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/event_specs.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/events.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/first_run_notice.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/hints.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/history.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/identity.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/input_policy.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/json_renderer.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/lifecycle.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/line_layout.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/literal.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/live_hooks.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/log_squelch.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/model_selector.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/persistent_loop.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/plain_renderer.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/renderer.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/rich_renderer.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/secrets.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/slash_highlight.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/state.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/statusbar.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/streaming.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/terminal_render.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/terminal_title.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/ui/theme.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/update/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cli/update/context.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/README.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/action_receipt.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/activity_class.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/activity_evidence.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/admin_data_home.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/config.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/egress.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/env_scan.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/fingerprint.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/nginx.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/owner_ops.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/registry.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/snapshot.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/app_service/supervisor.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/approval_input.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/artifacts.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/assets.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/async_bridge.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/autonomy_control.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/backoff.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/base_component.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/book.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/bootstrap.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/bot.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/capability_verdict.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/_env.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/autonomy_config.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/autonomy_mode.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/autonomy_posture.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/builder_mode.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/compute_posture.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/flag_defaults.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/flag_enums.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/local_profile.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/memory_policy.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/payment_policy.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/payment_tools.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/policy.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/posture_card.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/runtime_gates.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_policy/spend_lane.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/config_service.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/constants.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/container.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/container_hardening.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/contract_writer.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/copy/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/copy/_engine.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/copy/en.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/credit_sentinel.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/cron_rearm.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/dapp_session_store.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/embedding.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/env.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/env_file.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/error_classifier.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/eval_manifest.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/event_log.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/exceptions.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/exec_identity.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/flags.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/gitignore.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/goal_board_render.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/goal_vocab.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/home_migration.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/identity.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/initialization.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/instance.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/knowledge_export.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/errors.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/flows/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/flows/base.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/flows/device_code.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/flows/loopback_pkce.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/flows/manual_paste_pkce.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/flows/registry.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/health.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/resolve.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/llm_auth/store.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/maintenance_proposals.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/mcp_admin.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/open_positions.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/optional_extras.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/owner_create.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/owner_doc_writer.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/owner_remedy.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/pairing.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/path_safety.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/paths.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/payment_config.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/payments/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/payments/assets.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/payments/quote.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/position_ledger.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/prefs.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/profiles.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/publish.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/rate_limit.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/recap.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/runtime_config.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/seams.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/secret_patterns.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/secret_scan.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/secret_scrub.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/secrets.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security/browser_rail.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security/confined_read.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security/document_archive.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security/encryption.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security/forged_turns.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security/host_execution.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security/http_probe.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security/owner_turn.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security/redaction.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security/refusals.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security/secret_guard.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security/session_tokens.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security/threat_report.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security/untrusted_wrap.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security/url_policy.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security_digest.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security_flags.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/security_logging_filter.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/self_context_writer.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/self_events.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/self_evolution.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/session_control.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/ship_tree.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/sidecar_relocate.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/sqlite_util.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/status_liquidity.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/status_live.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/status_render.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/access.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/access_log.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/act.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/address_key.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/attachments.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/binding.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/bootstrap.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/chat_policy.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/circuit.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/command_reply.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/config.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/continuity.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/conversations.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/correspondents.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/dead_targets.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/deep_link.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/dispatcher.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/envelopes.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/error_notices.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/gc.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/group_admin.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/group_allowlist.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/group_ledger.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/group_roles.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/group_turn.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/health.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/idempotency.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/inbound_attachments.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/inbound_webhook.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/inbox.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/inbox_render.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/ledger_ingest.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/llm_outage_notice.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/media.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/message_router.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/missed.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/outbound_allowlist.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/outbound_dispatcher.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/outbound_mirror.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/outbound_policy.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/outbound_queue.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/outbound_target.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/owner_address.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/owner_admin.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/owner_intent.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/owner_target.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/path_links.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/poll_health.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/proactive.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/progress.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/quiet_hours.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/recap.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/registry.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/rendering.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/room_action_admin.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/room_action_store.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/room_actions.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/room_caps.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/room_focus.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/room_keys.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/room_policy.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/seed.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/send_policy.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/serialize.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/session_chat_registry.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/session_policy.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/spill.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/surface.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/tappable.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/transcription.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/turn_reply.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/user_delivery.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/voice_echo.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/surfaces/voice_guard.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/tickers.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/token_denylist.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/tool_capabilities.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/tool_catalog.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/verbs.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wake_queue.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/abi.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/addresses.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/agent_wallet.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/audit_sink.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/authority.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/balance_cache.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/bridge_guard.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/bridge_status.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/bridge_watcher.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/broadcast/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/broadcast/evm.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/broadcast/receipt_validation.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/chains.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/config.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/contracts/FixedSupplyToken.sol +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/deploy_guard.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/derivation.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/dex_registry.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/erc8004.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/factory.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/liquidity_guard.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/onchain.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/policy.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/public_identity.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/relay_svm.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/rpc_response.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/signer.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/simulation.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/solana_onchain.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/solana_rail.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/solana_signer.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/solana_simulation.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/solana_strays.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/solana_tx_inspect.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/solana_x402.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/spl_token.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/submission_journal.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/submission_recovery.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/submission_store.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/token_template.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/tokens.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/trade_index.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/tx_guard.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/tx_notify.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/univ3_math.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/core/wallet/view.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cron/README.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cron/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cron/approval_defer.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cron/delivery.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cron/digest.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cron/room_service.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cron/runner.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cron/schedule.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cron/service.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/cron/wake_gate.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/characters/analyst.character.json +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/characters/coder.character.json +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/characters/default.character.json +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/characters/ops.character.json +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/characters/researcher.character.json +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/characters/writer.character.json +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/autov2_prompts.json +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/browser-automation/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/coding-workflow/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/crypto-trading-safety/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/document-writing/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/email-comms/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/file-data-ops/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/hyperliquid-account-review/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/hyperliquid-market-data/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/hyperliquid-trading/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/lead-research/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/market-research-brief/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/person-analyzer/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polymarket-market-research/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polymarket-portfolio-review/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polymarket-trading/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polyrob-user-guide/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polyrob-user-guide/references/autonomy.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polyrob-user-guide/references/money-and-safety.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polyrob-user-guide/references/setup-interview.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polyrob-user-guide/references/skills-and-learning.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polyrob-user-guide/references/surfaces.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/polyrob-user-guide/references/wallet-and-identity.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/presentation-creator/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/project-analyzer/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/rules.json +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/secret-handling/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/self-deploy/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/skill-authoring/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/skill-security-review/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/social-discovery/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/task-planning/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/treasury-trading/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/verified-tooling/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/web-research/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/web-scraping/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/skills/x-engagement/SKILL.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/prompts/system_prompts.json +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/data/subscription_channels.json +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/datagen/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/datagen/assemble.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/datagen/batch_runner.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/datagen/bulk_export.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/datagen/capture.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/datagen/formats.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/datagen/record.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/datagen/scrub.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/datagen/toolset_distributions.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/api.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/architecture.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/configuration.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/console.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/deployment-postures.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/groups.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/instances.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/migration/README.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/migration/from-hermes.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/migration/from-openclaw.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/owner-controls.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/payments.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/security-model.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/skills.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/docs/guide/streams.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/migrations/README.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/migrations/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/migrations/migrate.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_0_0_baseline.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_1_0_user_mcp_servers.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_2_0_den_token_bonuses.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_3_0_billing_failures.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_4_0_polymarket_credentials.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_5_0_usage_records_request_id.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_6_0_x402_tx_hash_unique.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_7_0_x402_subscription_pending_unique.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_8_0_x402_tx_hash_case_normalize.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/migrations/versions/v1_9_0_x402_payment_asset_columns.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/README.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/auth/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/auth/api_key_manager.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/auth/identity_mapper.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/auth/siwe_auth.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/auth/tier_manager.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/base_module.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/credits/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/credits/balance_manager.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/credits/balances.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/credits/cost_utils.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/credits/pricing.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/credits/unified_ledger.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/credits/usage_rollup.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/credits/usage_tracker.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/audit_log.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/auth_tables.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/connection.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/conversation_contexts.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/database_manager.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/hyperliquid.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/polymarket.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/user_mcp_servers.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/user_profiles.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/database/x402_tables.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/eip8004/README.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/eip8004/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/eip8004/contracts.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/eip8004/models.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/eip8004/payment_proof.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/eip8004/registration.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/eip8004/reputation.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/eip8004/validation.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/adapters.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/anthropic_client.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/aux_metering.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/available_models.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/brain_scrubber.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/cache_hints.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/compat_clients.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/deepseek_client.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/gemini_client.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/gemini_parts.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/llm_client.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/llm_client_registry.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/llm_factory.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/llm_manager.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/manager_inventory.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/messages.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/model_catalog.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/model_catalog_recent.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/model_pricing.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/model_registry.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/model_types.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/nvidia_client.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/openai_client.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/profiles.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/provider_spec.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/responses_client.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/retry_log.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/sdk_caps.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/think_scrubber.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/token_counter.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/llm/usage_extract.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/backend_factory.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/cache_manager.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/episodic.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/local_vector_memory_provider.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/memory_manager.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/models.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/provider.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/registry.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/sqlite_curated_store.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/sqlite_episodes_store.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/sqlite_kb_store.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/sqlite_memory_provider.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/compaction_manager.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/context_retriever.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/hierarchical_memory.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/lexical_retriever.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/null_context_manager.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/phase_manager.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/reflection_service.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/semantic_retriever.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/task/threat_scan.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/memory/wikilinks.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/payments/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/payments/deposit_monitor.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/payments/networks.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/payments/price_oracle.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/payments/treasury_sweeper.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/payments/wallet_generator.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/cards.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/config.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/identity.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/mesh.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/push.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/renderer.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/still.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/store.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/pfp/voice.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/skills/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/skills/skill_usage.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/transcription/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/transcription/base.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/transcription/faster_whisper_transcriber.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/README.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/_db.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/artifact.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/invoice_assets.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/invoice_jitter.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/invoice_sizing.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/invoicing.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/invoicing_note.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/middleware.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/onchain_probe.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/settlement_notify.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/settlement_reputation.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/settlement_scan.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/settlement_subscriptions.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/settlement_watcher.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/solana_settlement.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/subscriptions.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/modules/x402/x402_integration.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/polyrob.egg-info/dependency_links.txt +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/polyrob.egg-info/entry_points.txt +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/polyrob.egg-info/top_level.txt +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/setup.cfg +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/README.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/_shared.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/discord/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/discord/client.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/discord/gateway.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/discord/harness.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/discord/surface.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/email/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/email/dedup.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/email/fetchers.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/email/harness.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/email/inbound.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/email/surface.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/inbox_sources.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/signal/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/signal/client.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/signal/harness.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/signal/surface.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/slack/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/slack/client.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/slack/harness.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/slack/socket_mode.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/slack/surface.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/apps_ops.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/dedup.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/group_ops.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/inbound.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/interactive_tools.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/lp_ops.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/media.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/moderation.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/owner_intent_gate.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/owner_ops.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/rate_limit.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/room_moderator.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/room_turn.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/surface.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/token_ops.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/triggers.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/telegram/voice.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/whatsapp/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/whatsapp/client.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/whatsapp/harness.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/whatsapp/inbound.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/whatsapp/surface.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/whatsapp/window.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/x/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/x/chat_client.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/x/client.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/x/harness.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/x/poller.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/surfaces/x/surface.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_a2a_protocol.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_accessibility_snapshot.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_autonomy_control_ratchet.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_bool_env_parse_ratchet.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_browser_launch_ratchet.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_changelog_release.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_conftest_operator_env_guard.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_core_platform_boundary.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_core_server_boundary.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_dynamic_pricing.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_effect_classification_ratchet.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_embedder_needed.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_event_kind_contract.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_file_size_ratchet.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_gemini_fixes.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_home_binding_ratchet.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_import_layering.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_layering_ratchet.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_lazy_embedder.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_llm_timeout_ssot.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_mcp_tool_fix.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_numeric_env_parse_ratchet.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_paid_room_action_ratchet.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_path_ratchet.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_private_cleanup_ratchet.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_provider_registry_ratchet.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_public_docs_links.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_public_files_present.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_public_release_surface.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_rate_limiter_ratchet.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_rename_tail.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_room_safety_ratchet.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_schema_version.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tests/test_status_silence_ratchet.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/README.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/alchemy/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/alchemy/alchemy_tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/anysite/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/anysite/client.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/app_service/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/app_service/tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/base_tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/_flags.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/actions.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/browser.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/child_env.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/context.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/launch_security.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/playwright_utils.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/browser/views.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/SANDBOX_SECURITY.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/backend.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/backend_cache.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/backends/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/backends/_proc.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/backends/bounded_capture.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/backends/docker.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/backends/local_subprocess.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/backends/ssh.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/env_policy.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/limits.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/result.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/code_exec/tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/coding/edit.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/coding/lsp.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/coding/snapshot.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/collabland/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/collabland/collabland_tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/_helpers.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/action_registration.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/agent_status_action.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/approval_interactive.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/approval_queue.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/autonomy_control_action.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/avatar_action.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/delegation.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/doc_authoring.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/emit.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/execution.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/execution_context.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/grant_card.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/hooks.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/insights_action.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/introspection.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/mcp_registrar.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/message_send.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/registry/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/registry/schema_generators.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/registry/schema_sanitizer.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/registry/service.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/registry/views.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/service.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/tool_search_actions.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/turn_origin.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/types.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/controller/wallet_authority.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/credential_cache.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/crypto_trade_gate.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/dapp_browser/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/dapp_browser/bridge.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/dapp_browser/js.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/dapp_browser/registration.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/dapp_browser/tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/agent_registration.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/book.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/bridge_evm_leg.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/bridge_verb.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/call_verb.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/deploy_verb.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/lp_abi.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/lp_reads.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/lp_receipts.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/lp_valuation.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/lp_verbs.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/nft_verbs.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/payment_quote.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/pool_screen.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/_http.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/alchemy_index.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/base.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/dexscreener.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/goplus.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/jupiter.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/relay_bridge.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/routes/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/routes/lifi.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/routes/univ3_route.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/providers/univ3.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/reconcile.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/spl_deploy_verb.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/defi/trade_tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/descriptors.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/document_parser.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/document_worker.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/dom/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/dom/buildDomTree.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/dom/history_tree_processor/service.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/dom/history_tree_processor/view.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/dom/service.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/dom/views.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/email_providers/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/email_providers/agentmail.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/exceptions.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/filesystem_docproc.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/filesystem_pdf.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/git/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/git/tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/github/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/github/client.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/github/tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/hf_deploy/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/hf_deploy/broker.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/hf_deploy/digest.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/hf_deploy/reconcile.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/hf_deploy/registry.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/hf_deploy/tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/hyperliquid/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/hyperliquid/models.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/hyperliquid/service.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/knowledge_inventory.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/launchpad/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/launchpad/execute.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/launchpad/pons.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/launchpad/pons_abi.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/launchpad/registration.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/launchpad/tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/README.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/catalog.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/child_env.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/config.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/mcp_tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/oauth_bridge.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/param_coercion.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/protocol.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/rate_limit.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/security.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/self_install.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/server_manager.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/subscriptions.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/user_mcp_service.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/validation_tracker.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/mcp/views.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/oauth/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/oauth/file_store.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/oauth/manager.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/oauth/provider.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/oauth/providers/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/oauth/providers/generic_oauth2.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/perplexity_tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/polymarket/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/polymarket/clob_adapter.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/polymarket/models.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/polymarket/service.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/publish/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/publish/tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/self_env/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/self_env/tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/shell/backend_pool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/shell/discipline.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/shell/executor.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/shell/loopback_allow.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/shell/process_registry.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/shell/process_tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/shell/state.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/shell/tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/ship_common.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/task_tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/tool_disclosure.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/tool_search.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/user_directory.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/wallet_holder.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/web_fetch/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/web_fetch/fetcher.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/web_fetch/render.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/web_fetch/tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/x402/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/x402/client.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/x402/discovery.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/x402/invoice_tool.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/x402/net_guard.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/x402/real_client.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/x402/service.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/x402/spend_gate.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/x_browser/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/x_browser/escalation.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/x_browser/registration.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/x_browser/session_store.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/x_browser/signup.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/x_chat_client.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/tools/x_oauth2.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/utils/README.md +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/utils/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/utils/auth_utils.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/utils/bounded_collections.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/utils/circuit_breaker.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/utils/gif_utils.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/utils/path_validator.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/utils/rate_limit_manager.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/utils/result_size.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/utils/time_utils.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/utils/user_utils.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/activity.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/apps_routes.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/artifacts_api.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/audit.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/chat_open.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/config_view.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/console_commands.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/copy/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/copy/en.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/cors.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/dev/package-lock.json +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/dev/package.json +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/emit_api.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/inbox.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/knowledge.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/owner_auth.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/owner_login_flow.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/pages.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/pages_new.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/posture_guard.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/posture_routes.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/repair_sessions.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/serve_tokens.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/server.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/server_launcher.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/session_access.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/session_catalog.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/session_identity.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/socket_auth.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/agent.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/app.css +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/chat-open.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/chats.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/http.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/inbox.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/live.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/money.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/palette.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/settings-control.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/socket-client.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/transcript.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/verbs.en.json +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/work-apps.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/work-create.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/work-now.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/worklog.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/app/workpane.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/activity.css +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/chat.css +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/components.css +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/config-panel.css +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/fonts.css +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/pages/admin.css +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/pages/profile.css +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/pages/settings.css +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/pages/signin.css +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/style.css +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/variables.css +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/webgate.css +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/css/workspace-fullwidth-fix.css +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/fonts/JetBrainsMono-Medium.woff2 +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/fonts/JetBrainsMono-Regular.woff2 +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/fonts/LICENSE-JetBrainsMono +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/fonts/LICENSE-VT323 +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/fonts/VT323-Regular.woff2 +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/img/favicon.ico +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/admin/activity.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/admin/dashboard.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/admin/user_detail.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/admin/users.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/admin/utils.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/constants.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/error-handler.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/error-page.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/ethers.min.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/event-filter.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/event-store.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/file-attachments.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/index.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/pending.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/performance-utils.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/profile.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/screenshot.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/sidebar-data.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/signin.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/socket.io.min.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/socketio-loader.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/stats.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/status-uptime.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/theme.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/static/js/ui-utils.js +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/stats_service.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/template_globals.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/__init__.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/admin/activity.html +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/admin/dashboard.html +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/admin/user_detail.html +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/admin/users.html +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/agent.html +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/chat.html +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/error.html +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/inbox.html +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/layout.html +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/money.html +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/owner_login.html +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/pending.html +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/profile.html +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/shell.html +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/signin.html +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/status.html +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/templates/work.html +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/theme.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/wallet_reader.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/webgate.py +0 -0
- {polyrob-1.0.2 → polyrob-1.0.3}/webview/worklog_api.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: polyrob
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.3
|
|
4
4
|
Summary: POLYROB — autonomous AI agent framework
|
|
5
5
|
Author: The POLYROB Authors
|
|
6
6
|
License-Expression: MIT
|
|
@@ -16,7 +16,7 @@ License-File: LICENSE
|
|
|
16
16
|
Requires-Dist: pydantic>=2.0.0
|
|
17
17
|
Requires-Dist: pydantic-settings>=2.0.0
|
|
18
18
|
Requires-Dist: python-dotenv>=1.0.0
|
|
19
|
-
Requires-Dist: openai>=1.
|
|
19
|
+
Requires-Dist: openai>=1.26.0
|
|
20
20
|
Requires-Dist: anthropic>=0.20.0
|
|
21
21
|
Requires-Dist: google-generativeai>=0.8.0
|
|
22
22
|
Requires-Dist: tiktoken>=0.7.0
|
|
@@ -47,6 +47,8 @@ Requires-Dist: httplib2>=0.32.0
|
|
|
47
47
|
Requires-Dist: pyasn1>=0.6.4
|
|
48
48
|
Requires-Dist: anysite-cli>=0.3
|
|
49
49
|
Requires-Dist: pyyaml>=6
|
|
50
|
+
Requires-Dist: packaging>=23.2
|
|
51
|
+
Requires-Dist: h2>=4.4.1
|
|
50
52
|
Provides-Extra: server
|
|
51
53
|
Requires-Dist: fastapi==0.141.1; extra == "server"
|
|
52
54
|
Requires-Dist: starlette==1.6.0; extra == "server"
|
|
@@ -670,8 +670,11 @@ Then emit your function calls."""
|
|
|
670
670
|
converted_input_messages = self.message_manager.merge_successive_messages(converted_input_messages, HumanMessage)
|
|
671
671
|
converted_input_messages = self.message_manager.merge_successive_messages(converted_input_messages, AIMessage)
|
|
672
672
|
|
|
673
|
-
# Check token safety using MessageManager's API (SINGLE SOURCE OF TRUTH)
|
|
674
|
-
|
|
673
|
+
# Check token safety using MessageManager's API (SINGLE SOURCE OF TRUTH).
|
|
674
|
+
# Overflow first gets ONE emergency prune (the recalibration above can
|
|
675
|
+
# reveal an overflow the step-boundary gate never saw); raises if still over.
|
|
676
|
+
from agents.task.agent.core.token_budget import ensure_token_budget
|
|
677
|
+
safety_check = ensure_token_budget(self.message_manager, self.logger)
|
|
675
678
|
self.logger.debug(
|
|
676
679
|
f"Token usage: {safety_check['usage_percent']:.1f}% "
|
|
677
680
|
f"({safety_check['current_tokens']}/{safety_check['max_limit']} tokens)"
|
|
@@ -78,6 +78,7 @@ from agents.task.agent.core.step import StepMixin
|
|
|
78
78
|
from agents.task.agent.core.history_io import HistoryIOMixin
|
|
79
79
|
from agents.task.agent.core.logging_io import LoggingIOMixin
|
|
80
80
|
from agents.task.agent.core.safety_lifecycle import SafetyLifecycleMixin
|
|
81
|
+
from core.wallet.infra_error import is_infra_broadcast_failure
|
|
81
82
|
from agents.task.agent.core.user_ingress import UserIngressMixin
|
|
82
83
|
from agents.task.agent.core.llm_provisioning import LLMProvisioningMixin
|
|
83
84
|
from agents.task.agent.core.model_introspection import ModelIntrospectionMixin
|
|
@@ -474,6 +475,30 @@ class RunLoopMixin:
|
|
|
474
475
|
self.message_manager.inject_user_guidance(user_messages, session_context=session_context)
|
|
475
476
|
self.logger.info(f"✅ Injected {len(user_messages)} messages into conversation")
|
|
476
477
|
|
|
478
|
+
# A money verb that failed for a HOST reason (permission denied,
|
|
479
|
+
# read-only fs, unopenable db — "broadcast failed: … nothing was
|
|
480
|
+
# sent") cannot succeed later in this run and is an ops fact, not a
|
|
481
|
+
# puzzle: 2026-09-16/17 the EXIT rails spent 8 steps on `ls -la`/
|
|
482
|
+
# `run_code` forensics after exactly this, and the owner learned of
|
|
483
|
+
# the outage 5 h late with the wrong cause. End the run with the
|
|
484
|
+
# verbatim line so the runner reports one failed run, right cause.
|
|
485
|
+
_infra = next((r.error for r in (self._last_result or [])
|
|
486
|
+
if getattr(r, "error", None)
|
|
487
|
+
and is_infra_broadcast_failure(r.error)), None)
|
|
488
|
+
if _infra:
|
|
489
|
+
self.logger.error(
|
|
490
|
+
f"MONEY VERB INFRA FAILURE — ending the run, nothing was sent: {_infra[:400]}")
|
|
491
|
+
try:
|
|
492
|
+
from core.event_log import emit as _emit_event
|
|
493
|
+
_emit_event("money_verb_infra_failure", source="run_loop",
|
|
494
|
+
user_id=str(getattr(self, "user_id", "") or ""),
|
|
495
|
+
session_id=str(self.session_id),
|
|
496
|
+
attrs={"error": _infra[:400]})
|
|
497
|
+
except Exception:
|
|
498
|
+
pass
|
|
499
|
+
self.state.stopped = True
|
|
500
|
+
break
|
|
501
|
+
|
|
477
502
|
# R1: track consecutive reply-only steps. A reply-only step is one
|
|
478
503
|
# whose every result is a non-blocking user-facing reply (no tool
|
|
479
504
|
# ran); anything else (productive tool, planning turn, error, done)
|
|
@@ -486,6 +511,18 @@ class RunLoopMixin:
|
|
|
486
511
|
|
|
487
512
|
# Check if the agent is done
|
|
488
513
|
if results and any(result.is_done for result in results):
|
|
514
|
+
# A message that arrived DURING the finishing step was just drained
|
|
515
|
+
# and injected above — the HITL queue is now empty, so the harness's
|
|
516
|
+
# "pending input" resume would never fire and the message would sit
|
|
517
|
+
# unanswered at the history tail (2026-09-18 08:12Z: the owner's
|
|
518
|
+
# "Ok I meant 0.04…" correction landed on Rob's done() step and got
|
|
519
|
+
# no reply). It earns the next step instead of dying with done().
|
|
520
|
+
if user_messages:
|
|
521
|
+
self.logger.info(
|
|
522
|
+
f"{len(user_messages)} message(s) arrived during the finishing "
|
|
523
|
+
"step — continuing the run so they get a turn")
|
|
524
|
+
continue
|
|
525
|
+
|
|
489
526
|
# I-3 / H3 (dedup decision D1): the agent can edit code and call
|
|
490
527
|
# done() without ever re-running tests. Derive the signal from the
|
|
491
528
|
# EXISTING action ledger (agents/task/runtime/edit_verify.py, which
|
|
@@ -15,6 +15,13 @@ from agents.task.agent.views import ActionResult
|
|
|
15
15
|
from modules.llm.messages import HumanMessage
|
|
16
16
|
from agents.task.constants import MAX_MCP_PER_STEP
|
|
17
17
|
|
|
18
|
+
# Hard ceiling on tool calls executed in ONE step; the rest are deferred to the next
|
|
19
|
+
# step with a notice. ONE constant — the system prompt (`prompts.py`) renders this same
|
|
20
|
+
# number, so the model is never told a bigger batch than the executor will run
|
|
21
|
+
# (2026-09-19: the prompt said 1-10, the executor ran 5, and the 6th call vanished
|
|
22
|
+
# from the agent's point of view).
|
|
23
|
+
MAX_TOOL_CALLS_PER_STEP = 5
|
|
24
|
+
|
|
18
25
|
#: OR-4: how many consecutive empty-action steps before the strong "thinking loop"
|
|
19
26
|
#: intervention fires. Default 2 (one step sooner than the legacy 3) so a model
|
|
20
27
|
#: that answers in prose without a tool call — Grok/GPT-5 on content-gen — is
|
|
@@ -371,7 +378,6 @@ class StepExecutionMixin:
|
|
|
371
378
|
# a whole extra LLM round trip (~60k input tokens) to re-request work the
|
|
372
379
|
# model had already decided on. 5 covers the common read-only fan-out while
|
|
373
380
|
# keeping a hard ceiling on single-step context growth.
|
|
374
|
-
MAX_TOOL_CALLS_PER_STEP = 5 # Allow up to 5 parallel calls
|
|
375
381
|
actions_to_execute = model_output.action
|
|
376
382
|
deferred_actions = []
|
|
377
383
|
|
|
@@ -387,11 +393,12 @@ class StepExecutionMixin:
|
|
|
387
393
|
deferred_names = [getattr(a, 'name', str(a)[:30]) for a in deferred_actions]
|
|
388
394
|
self.message_manager.push_ephemeral_message(
|
|
389
395
|
HumanMessage(content=(
|
|
390
|
-
f"⚠️ **Tool Call Limit Applied**\n\n"
|
|
391
|
-
f"{
|
|
396
|
+
f"⚠️ **Tool Call Limit Applied — {len(deferred_actions)} call(s) did NOT run**\n\n"
|
|
397
|
+
f"A step executes at most {MAX_TOOL_CALLS_PER_STEP} tool calls; these were NOT "
|
|
398
|
+
f"executed and have NO result:\n"
|
|
392
399
|
f"- {', '.join(deferred_names[:5])}"
|
|
393
400
|
f"{'...' if len(deferred_names) > 5 else ''}\n\n"
|
|
394
|
-
f"
|
|
401
|
+
f"Call them again now, 1-{MAX_TOOL_CALLS_PER_STEP} at a time — do not assume they ran."
|
|
395
402
|
))
|
|
396
403
|
)
|
|
397
404
|
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"""Pre-LLM token budget: prune once before the overflow kills the run.
|
|
2
|
+
|
|
3
|
+
The step-boundary compaction gate (``core/step.py``) reads the running
|
|
4
|
+
estimate; token counts are RECALIBRATED just before the LLM call, and a step
|
|
5
|
+
that appended several large tool results can cross the safe line only after
|
|
6
|
+
that recalibration — the gate never saw it. Raising there ends the run with
|
|
7
|
+
no fallback provider (prod 2026-09-18 14:34Z, ``966d3539``). The emergency
|
|
8
|
+
prune is the non-LLM safety net designed for exactly this; give it one turn
|
|
9
|
+
before raising, and raise only if the history is still over the line.
|
|
10
|
+
"""
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
import logging
|
|
14
|
+
from typing import Any, Dict
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def ensure_token_budget(message_manager: Any, logger: logging.Logger) -> Dict[str, Any]:
|
|
18
|
+
"""Return the safety-check dict; prune once on overflow; raise if still unsafe."""
|
|
19
|
+
check = message_manager.check_token_safety(raise_on_overflow=False)
|
|
20
|
+
if check.get("safe", True):
|
|
21
|
+
return check
|
|
22
|
+
logger.warning(
|
|
23
|
+
"🚨 Pre-call token overflow (%s/%s, %.1f%%) — emergency prune before raising",
|
|
24
|
+
check.get("current_tokens"), check.get("max_limit"), check.get("usage_percent", 0.0))
|
|
25
|
+
try:
|
|
26
|
+
message_manager.emergency_context_prune()
|
|
27
|
+
except Exception:
|
|
28
|
+
logger.warning("emergency prune failed; re-checking budget", exc_info=True)
|
|
29
|
+
return message_manager.check_token_safety(raise_on_overflow=True)
|
|
@@ -22,8 +22,17 @@ from agents.task.agent.message_manager.tool_call_builder import (
|
|
|
22
22
|
logger = logging.getLogger(__name__)
|
|
23
23
|
|
|
24
24
|
|
|
25
|
+
# A tool result shorter than this is never replaced by a back-reference: the
|
|
26
|
+
# pointer text is ~80 chars, so there is nothing to save, and a short result is
|
|
27
|
+
# usually a CONFIRMATION ("Edited kb-root-position-ledger.md") the agent needs
|
|
28
|
+
# verbatim — prod 2026-09-19 15:35Z: three identical `coding_str_replace`
|
|
29
|
+
# confirmations in one step came back as "[duplicate of …]" and the agent
|
|
30
|
+
# reported "3 that returned the dedup artifact" instead of three landed edits.
|
|
31
|
+
DEDUP_MIN_CHARS = 160
|
|
32
|
+
|
|
33
|
+
|
|
25
34
|
def dedup_tool_results(messages: List[BaseMessage]) -> List[BaseMessage]:
|
|
26
|
-
"""Replace byte-identical repeated tool outputs with a back-reference (B2).
|
|
35
|
+
"""Replace byte-identical repeated LONG tool outputs with a back-reference (B2).
|
|
27
36
|
|
|
28
37
|
Reference does this (MD5-keyed) in its compaction pre-pass — cheap token savings on
|
|
29
38
|
retry/polling loops where the same tool returns the same payload repeatedly. The
|
|
@@ -38,7 +47,8 @@ def dedup_tool_results(messages: List[BaseMessage]) -> List[BaseMessage]:
|
|
|
38
47
|
seen: Dict[str, int] = {}
|
|
39
48
|
out: List[BaseMessage] = []
|
|
40
49
|
for msg in messages:
|
|
41
|
-
if isinstance(msg, ToolMessage) and isinstance(msg.content, str)
|
|
50
|
+
if (isinstance(msg, ToolMessage) and isinstance(msg.content, str)
|
|
51
|
+
and len(msg.content) >= DEDUP_MIN_CHARS):
|
|
42
52
|
digest = hashlib.md5(msg.content.encode("utf-8", "ignore")).hexdigest()[:12]
|
|
43
53
|
if digest in seen:
|
|
44
54
|
ref = ToolMessage(
|
|
@@ -75,7 +75,7 @@ class SystemPrompt:
|
|
|
75
75
|
self.verbosity = str(verbosity).strip().lower() if verbosity else "normal"
|
|
76
76
|
self.persona_block = (persona_block or "").strip()
|
|
77
77
|
self.action_descriptions = action_description
|
|
78
|
-
self.max_actions_per_step = max_actions_per_step #
|
|
78
|
+
self.max_actions_per_step = max_actions_per_step # config ceiling; the executor cap is lower
|
|
79
79
|
self.use_native_tools = use_native_tools # Whether using native tool calling
|
|
80
80
|
self.model_name = model_name.lower() if model_name else ""
|
|
81
81
|
self.provider = provider.lower() if provider else ""
|
|
@@ -683,10 +683,10 @@ Memory Guidelines:
|
|
|
683
683
|
- Include what you LEARNED (insights, discoveries)
|
|
684
684
|
- Track progress if quantitative goal (e.g. "3/10 files processed")
|
|
685
685
|
|
|
686
|
-
Function Calls: Call 1-{self.
|
|
686
|
+
Function Calls: Call 1-{self._effective_actions_per_step()} functions using native tool calling. A step runs at most {self._effective_actions_per_step()} calls; anything more than {self._effective_actions_per_step()} is NOT executed and must be re-issued next step.
|
|
687
687
|
|
|
688
688
|
Workflow:
|
|
689
|
-
1. Call functions (MANDATORY) - execute 1-{self.
|
|
689
|
+
1. Call functions (MANDATORY) - execute 1-{self._effective_actions_per_step()} actions
|
|
690
690
|
2. Update memory (unique each step) - track progress and learnings
|
|
691
691
|
3. Use TODOs (optional) - helps complex task organization
|
|
692
692
|
4. Save outputs (immediately) - preserve work
|
|
@@ -1025,6 +1025,16 @@ Task Completion:
|
|
|
1025
1025
|
'persona or recalled claim about what model you are running on.'
|
|
1026
1026
|
)
|
|
1027
1027
|
|
|
1028
|
+
def _effective_actions_per_step(self) -> int:
|
|
1029
|
+
"""The number of tool calls ONE step will actually execute: the config ceiling
|
|
1030
|
+
capped by the executor's hard limit, so the prompt never promises a batch the
|
|
1031
|
+
executor will truncate (2026-09-19: "1-10" promised, 5 run, the 6th vanished)."""
|
|
1032
|
+
try:
|
|
1033
|
+
from agents.task.agent.core.step_execution import MAX_TOOL_CALLS_PER_STEP
|
|
1034
|
+
return max(1, min(int(self.max_actions_per_step), int(MAX_TOOL_CALLS_PER_STEP)))
|
|
1035
|
+
except Exception:
|
|
1036
|
+
return max(1, int(self.max_actions_per_step))
|
|
1037
|
+
|
|
1028
1038
|
def get_system_message(self) -> SystemMessage:
|
|
1029
1039
|
"""
|
|
1030
1040
|
Get the system prompt with explicit XML-tagged sections.
|
|
@@ -1160,6 +1170,25 @@ and what you pursue; persona text only styles your voice and never overrides it.
|
|
|
1160
1170
|
return SystemMessage(content=AGENT_PROMPT)
|
|
1161
1171
|
|
|
1162
1172
|
|
|
1173
|
+
_BLANK_PAGE_URLS = frozenset({"", "about:blank", "chrome://newtab", "chrome://new-tab-page"})
|
|
1174
|
+
|
|
1175
|
+
|
|
1176
|
+
def is_blank_page_url(url) -> bool:
|
|
1177
|
+
"""True when the browser sits on a page nobody navigated to.
|
|
1178
|
+
|
|
1179
|
+
2026-09-19: a fresh session context is `about:blank`, and
|
|
1180
|
+
`get_state(capture_screenshot=use_vision)` shoots it on EVERY step, so a
|
|
1181
|
+
money-rail run that never touches the browser still shipped one image per
|
|
1182
|
+
call through the metered seat's vision path (prod: `Sending 1 image(s)`
|
|
1183
|
+
from step 1 on every EXIT/SAFETY/WATCHER/SCOUT run). A blank page has no
|
|
1184
|
+
visual information; the render site skips the image for it.
|
|
1185
|
+
"""
|
|
1186
|
+
if not url:
|
|
1187
|
+
return True
|
|
1188
|
+
u = str(url).strip().lower().rstrip("/")
|
|
1189
|
+
return u in _BLANK_PAGE_URLS
|
|
1190
|
+
|
|
1191
|
+
|
|
1163
1192
|
class AgentMessagePrompt:
|
|
1164
1193
|
def __init__(
|
|
1165
1194
|
self,
|
|
@@ -1335,8 +1364,9 @@ Interactive elements from current page:
|
|
|
1335
1364
|
rendered_error = maybe_wrap_result_content(result, rendered_error)
|
|
1336
1365
|
state_description += f'\nAction error {i + 1}/{len(self.result)}: {rendered_error}'
|
|
1337
1366
|
|
|
1338
|
-
if self.state.screenshot and use_vision == True:
|
|
1339
|
-
# Format message for vision model
|
|
1367
|
+
if self.state.screenshot and use_vision == True and not is_blank_page_url(self.state.url):
|
|
1368
|
+
# Format message for vision model (a blank/never-navigated page is
|
|
1369
|
+
# rendered text-only — see is_blank_page_url)
|
|
1340
1370
|
return HumanMessage(
|
|
1341
1371
|
content=[
|
|
1342
1372
|
{'type': 'text', 'text': state_description},
|
|
@@ -321,9 +321,13 @@ class SkillWriterMixin:
|
|
|
321
321
|
return SkillWriteResult(skill_id, False, errors=[f"skill '{skill_id}' not found for user"])
|
|
322
322
|
# A forged (non-user) turn may refine its OWN pending draft but must never
|
|
323
323
|
# mutate an already-ACTIVE skill (that's user-controlled instruction content).
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
324
|
+
# 056 WS6 (2026-09-19): instead of refusing, the SAME call lands a pending
|
|
325
|
+
# REVISION of the active skill under `.pending/<id>/` for the owner's
|
|
326
|
+
# `promote` — the active file is still never touched by a forged turn
|
|
327
|
+
# (SK-F10 holds; goal 367150fd7a0e had to be hand-applied by ops before).
|
|
328
|
+
propose_only = created_by in _NON_USER_AUTHORS and not self._is_pending_path(skill_file)
|
|
329
|
+
if propose_only:
|
|
330
|
+
pending = True
|
|
327
331
|
try:
|
|
328
332
|
current = self._read_skill_text(skill_file)
|
|
329
333
|
except Exception as e:
|
|
@@ -345,7 +349,7 @@ class SkillWriterMixin:
|
|
|
345
349
|
# Re-run the full validate+scan gate on the NEW body.
|
|
346
350
|
return self.create_skill(skill_id, updated, user_id=uid, created_by=created_by,
|
|
347
351
|
pending=pending if pending is not None else self._is_pending_path(skill_file),
|
|
348
|
-
expected_revision=actual_revision)
|
|
352
|
+
expected_revision=None if propose_only else actual_revision)
|
|
349
353
|
|
|
350
354
|
def delete_skill(self, skill_id: str, *, user_id: str,
|
|
351
355
|
absorbed_into: Optional[str] = None,
|
|
@@ -519,6 +519,27 @@ def autonomous_mode_tools() -> tuple:
|
|
|
519
519
|
return AUTONOMOUS_MODE_TOOLS
|
|
520
520
|
|
|
521
521
|
|
|
522
|
+
def effective_autonomous_tools() -> tuple:
|
|
523
|
+
"""056 WS4: `autonomous_mode_tools()` minus the tools this deploy cannot
|
|
524
|
+
actually serve right now — today `email` when the transport is SMTP and the
|
|
525
|
+
credentials were rejected within the backoff window (`tools.email_tool`
|
|
526
|
+
remembers a 535 process-wide). The CONSTANT is untouched; only the set the
|
|
527
|
+
goal/cron dispatchers REQUEST moves, so a goal record stops carrying a false
|
|
528
|
+
`[tool gap] email …` line (330 failed loads in 48 h, 2026-09-17→19). An
|
|
529
|
+
AgentMail transport is unaffected by an SMTP rejection. Fail-open: any probe
|
|
530
|
+
error keeps the tool in."""
|
|
531
|
+
tools = tuple(autonomous_mode_tools())
|
|
532
|
+
try:
|
|
533
|
+
from core.config_policy.capability_toggles import email_provider
|
|
534
|
+
if "email" in tools and email_provider() == "smtp":
|
|
535
|
+
from core.credential_verdicts import rejected_within
|
|
536
|
+
if rejected_within("smtp", 900.0): # = tools.email_tool.SMTP_AUTH_BACKOFF_SEC
|
|
537
|
+
tools = tuple(t for t in tools if t != "email")
|
|
538
|
+
except Exception:
|
|
539
|
+
pass
|
|
540
|
+
return tools
|
|
541
|
+
|
|
542
|
+
|
|
522
543
|
# MCP Tool Throttling (single source of truth)
|
|
523
544
|
# MCP actions (scraping, searches, APIs) are expensive and execute SEQUENTIALLY
|
|
524
545
|
# Each MCP action takes 30-180 seconds. Limiting prevents timeout cascades.
|
|
@@ -13,6 +13,7 @@ from __future__ import annotations
|
|
|
13
13
|
|
|
14
14
|
import asyncio
|
|
15
15
|
import logging
|
|
16
|
+
import json
|
|
16
17
|
import os
|
|
17
18
|
from pathlib import Path
|
|
18
19
|
from typing import Any, List, Optional
|
|
@@ -159,11 +160,12 @@ def default_goal_tools() -> list:
|
|
|
159
160
|
(self-maintenance tier). Under effective AUTONOMY_MODE=autonomous the base
|
|
160
161
|
switches to the full AUTONOMOUS_MODE_TOOLS grant (never money/host — those
|
|
161
162
|
still ride compute posture, unaffected by mode)."""
|
|
162
|
-
from agents.task.constants import
|
|
163
|
+
from agents.task.constants import effective_autonomous_tools, full_autonomy_enabled
|
|
163
164
|
from agents.task.tool_defaults import with_compute_tools
|
|
164
|
-
# `
|
|
165
|
-
#
|
|
166
|
-
|
|
165
|
+
# `effective_autonomous_tools()` (056 WS4) = `autonomous_mode_tools()` — which
|
|
166
|
+
# folds in the defi rail when DEFI_AGENT_AUTONOMY is armed — minus tools this
|
|
167
|
+
# deploy cannot serve right now (email on rejected SMTP credentials).
|
|
168
|
+
tools = list(effective_autonomous_tools()) if full_autonomy_enabled() else list(_DEFAULT_GOAL_TOOLS)
|
|
167
169
|
with_compute_tools(tools) # SSOT for the posture>=1 additions (014 A2)
|
|
168
170
|
if _hf_deploy_goal_tool_enabled() and "hf_deploy" not in tools:
|
|
169
171
|
tools.append("hf_deploy")
|
|
@@ -187,6 +189,64 @@ def child_inheritable_tools() -> frozenset:
|
|
|
187
189
|
return CHILD_INHERITABLE_TOOLS
|
|
188
190
|
|
|
189
191
|
|
|
192
|
+
def imminent_cron_job(data_dir: str, now, headroom_sec: int) -> Optional[str]:
|
|
193
|
+
"""Name the cron job due within ``headroom_sec`` (overdue included), else None.
|
|
194
|
+
|
|
195
|
+
Pure read of ``<data_dir>/cron.db``; ``headroom_sec <= 0`` or an absent /
|
|
196
|
+
unreadable store answers None without touching disk (fail-open: dispatch).
|
|
197
|
+
A goal run marks the shared project-root workspace busy and cron ticks skip
|
|
198
|
+
until it ends, so the dispatcher uses this to let a due rail go FIRST."""
|
|
199
|
+
if headroom_sec <= 0:
|
|
200
|
+
return None
|
|
201
|
+
from datetime import timedelta
|
|
202
|
+
db_path = os.path.join(data_dir, "cron.db")
|
|
203
|
+
if not os.path.exists(db_path):
|
|
204
|
+
return None
|
|
205
|
+
# Read-only over core.sqlite_util (the layering ratchet forbids agents -> cron);
|
|
206
|
+
# the predicate mirrors CronJobStore.due() (enabled, scheduled, next_run_at set)
|
|
207
|
+
# plus a job mid-run — it holds the workspace now, and its next_run_at is still
|
|
208
|
+
# the past due time until it finishes.
|
|
209
|
+
try:
|
|
210
|
+
from core.sqlite_util import execute_retry
|
|
211
|
+
rows = execute_retry(
|
|
212
|
+
db_path,
|
|
213
|
+
"SELECT id, task, next_run_at, status, payload FROM cron_jobs WHERE enabled=1 "
|
|
214
|
+
"AND status IN ('scheduled','running') AND next_run_at IS NOT NULL "
|
|
215
|
+
"AND next_run_at <= ? "
|
|
216
|
+
"ORDER BY next_run_at",
|
|
217
|
+
((now + timedelta(seconds=headroom_sec)).isoformat(),), fetch="all")
|
|
218
|
+
except Exception:
|
|
219
|
+
logger.debug("imminent-cron probe failed; dispatching", exc_info=True)
|
|
220
|
+
return None
|
|
221
|
+
# 056 D1 follow-up (2026-09-19): a SCHEDULED money-class job pre-empts a running
|
|
222
|
+
# goal at the step boundary (`yield_for_rail`), so with yield on it need not hold
|
|
223
|
+
# the board back — after the D4 stagger the four rails' headroom windows covered
|
|
224
|
+
# every minute of an even hour and two goals sat `ready` for 40 min. A job mid-run
|
|
225
|
+
# holds the workspace NOW (nothing to pre-empt) and an ops-class job cannot
|
|
226
|
+
# pre-empt at all, so both still defer.
|
|
227
|
+
try:
|
|
228
|
+
from core.config_policy.goal_flags import GoalFlagsMixin
|
|
229
|
+
_yield_on = bool(GoalFlagsMixin.goal_yield_for_money_rail())
|
|
230
|
+
except Exception:
|
|
231
|
+
_yield_on = False
|
|
232
|
+
for job_id, task, next_run_at, status, payload in rows or []:
|
|
233
|
+
if _yield_on and status == "scheduled" and _payload_is_money(payload):
|
|
234
|
+
continue
|
|
235
|
+
return f"{str(job_id)[:12]} {(task or '')[:40]!r} due {next_run_at}"
|
|
236
|
+
return None
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
def _payload_is_money(payload) -> bool:
|
|
240
|
+
"""Mirror of ``cron.jobs.is_money_job`` over the raw stored payload (the
|
|
241
|
+
layering ratchet forbids agents -> cron)."""
|
|
242
|
+
try:
|
|
243
|
+
if isinstance(payload, (str, bytes)):
|
|
244
|
+
payload = json.loads(payload or "{}")
|
|
245
|
+
return str((payload or {}).get("priority") or "").lower() == "money"
|
|
246
|
+
except Exception:
|
|
247
|
+
return False
|
|
248
|
+
|
|
249
|
+
|
|
190
250
|
def effective_goal_max_concurrent(user_id: Optional[str], home_dir) -> int:
|
|
191
251
|
"""Owner's in-flight goal cap: pref (min-merged, spec ``goals.max_concurrent``)
|
|
192
252
|
over the ``GOAL_MAX_CONCURRENT`` env default. No pref file present =>
|
|
@@ -401,6 +461,7 @@ class GoalDispatcher:
|
|
|
401
461
|
and UNCONDITIONALLY — before the ``GOALS_ENABLED`` gate (AU-F4.3) — so a
|
|
402
462
|
crashed ``running`` row isn't stuck forever if the flag was flipped off.
|
|
403
463
|
"""
|
|
464
|
+
from datetime import datetime
|
|
404
465
|
from agents.task.constants import AutonomyConfig
|
|
405
466
|
|
|
406
467
|
# AU-F4.3: reclaim expired claims BEFORE the enabled-gate so a crashed
|
|
@@ -538,6 +599,18 @@ class GoalDispatcher:
|
|
|
538
599
|
if slots == 0:
|
|
539
600
|
return 0
|
|
540
601
|
ready = self._ready_for_dispatch(slots)
|
|
602
|
+
# A due cron rail goes first: on the shared workspace a goal run would
|
|
603
|
+
# mark the process busy and hold that rail for its whole runtime.
|
|
604
|
+
# Checked only when something is actually ready (an empty board must
|
|
605
|
+
# not read cron.db and log a deferral every tick).
|
|
606
|
+
if ready:
|
|
607
|
+
_imminent = imminent_cron_job(
|
|
608
|
+
os.path.dirname(self.board.db_path), datetime.now(),
|
|
609
|
+
AutonomyConfig.goal_dispatch_cron_headroom_sec())
|
|
610
|
+
if _imminent:
|
|
611
|
+
logger.info("goal dispatch deferred (%d ready): cron job %s",
|
|
612
|
+
len(ready), _imminent)
|
|
613
|
+
return 0
|
|
541
614
|
ttl = AutonomyConfig.goal_claim_ttl_sec()
|
|
542
615
|
worker = self._worker
|
|
543
616
|
dispatched = 0
|
|
@@ -621,6 +694,27 @@ class GoalDispatcher:
|
|
|
621
694
|
logger.warning("hold_inflight: board hold failed", exc_info=True)
|
|
622
695
|
return []
|
|
623
696
|
|
|
697
|
+
async def yield_for_rail(self, job) -> List[str]:
|
|
698
|
+
"""056 WS5 (D1): a due MONEY cron job pre-empts this process's running goal
|
|
699
|
+
runs — `hold_inflight` (cancel at the step boundary, rows back to `ready`,
|
|
700
|
+
no failure increment) plus a `resume_note` so the goal knows why it
|
|
701
|
+
restarts and where its own artefacts are. Returns the held goal ids."""
|
|
702
|
+
jid = str(getattr(job, "id", "") or "")
|
|
703
|
+
jtask = str(getattr(job, "task", "") or "")[:40]
|
|
704
|
+
held = await self.hold_inflight(f"money rail {jid} ({jtask}) due")
|
|
705
|
+
from datetime import datetime as _dt
|
|
706
|
+
stamp = _dt.utcnow().strftime("%H:%MZ")
|
|
707
|
+
for gid in held:
|
|
708
|
+
try:
|
|
709
|
+
self.board.merge_payload(gid, {
|
|
710
|
+
"resume_note": (f"Yielded at {stamp} because the money rail {jtask} "
|
|
711
|
+
f"({jid[:8]}) came due; this is a RESTART — read what "
|
|
712
|
+
f"you already wrote to disk before redoing anything.")})
|
|
713
|
+
self.board._event(gid, "yielded", {"job_id": jid, "task": jtask})
|
|
714
|
+
except Exception:
|
|
715
|
+
logger.debug("yield note failed for %s", gid, exc_info=True)
|
|
716
|
+
return held
|
|
717
|
+
|
|
624
718
|
async def _run_goal(self, goal: Goal) -> None:
|
|
625
719
|
"""Run one claimed goal on the task-agent core, then record + self-wake."""
|
|
626
720
|
session_id = None
|
|
@@ -741,7 +835,7 @@ class GoalDispatcher:
|
|
|
741
835
|
"provider": provider,
|
|
742
836
|
"model": model,
|
|
743
837
|
"tools": self._resolve_tools(goal),
|
|
744
|
-
"max_steps": payload.get("max_steps",
|
|
838
|
+
"max_steps": payload.get("max_steps", AutonomyConfig.goal_default_max_steps()),
|
|
745
839
|
"temperature": 0.0,
|
|
746
840
|
"goal_id": goal.id,
|
|
747
841
|
}
|
|
@@ -1356,6 +1450,28 @@ class GoalDispatcher:
|
|
|
1356
1450
|
except Exception:
|
|
1357
1451
|
logger.debug("blocked-goal ask creation skipped", exc_info=True)
|
|
1358
1452
|
|
|
1453
|
+
@staticmethod
|
|
1454
|
+
def _wake_text(goal: Goal, final: str, verified: str = "verified") -> str:
|
|
1455
|
+
"""056 WS7: what a completed goal says when it re-enters the session that
|
|
1456
|
+
CREATED it. Default = ONE line (`goal <id8> done — <first line>`, ≤280
|
|
1457
|
+
chars) — the origin session already has the artefacts on disk and a full
|
|
1458
|
+
result re-entering it cost the owner a 5-step "verification" turn
|
|
1459
|
+
(2026-09-19 03:00Z). `payload.report_back=true` (goal_create) keeps the
|
|
1460
|
+
full completion text for goals whose whole point is the report."""
|
|
1461
|
+
payload = goal.payload or {}
|
|
1462
|
+
if payload.get("report_back"):
|
|
1463
|
+
head = (f"✅ Background goal '{goal.title}' completed." if verified == "verified"
|
|
1464
|
+
else f"Background goal '{goal.title}' finished — done (unverified).")
|
|
1465
|
+
return f"{head}\nResult:\n{str(final)[:1500]}"
|
|
1466
|
+
first = ""
|
|
1467
|
+
for line in str(final or "").splitlines():
|
|
1468
|
+
if line.strip():
|
|
1469
|
+
first = line.strip()
|
|
1470
|
+
break
|
|
1471
|
+
state = "done" if verified == "verified" else "done (unverified)"
|
|
1472
|
+
text = f"goal {str(goal.id)[:8]} {state} — {first}"
|
|
1473
|
+
return text if len(text) <= 280 else text[:277] + "…"
|
|
1474
|
+
|
|
1359
1475
|
def _completion_text(self, goal: Goal, final: str, verified: str = "verified",
|
|
1360
1476
|
deliverable_lines: Optional[list] = None,
|
|
1361
1477
|
session_link: Optional[str] = None) -> str:
|
|
@@ -1484,7 +1600,7 @@ class GoalDispatcher:
|
|
|
1484
1600
|
if deliver is None:
|
|
1485
1601
|
return
|
|
1486
1602
|
delivered = await deliver(origin, goal.user_id,
|
|
1487
|
-
self.
|
|
1603
|
+
self._wake_text(goal, final, "verified"),
|
|
1488
1604
|
metadata={"source": "goal", "goal_id": goal.id,
|
|
1489
1605
|
"run_session_id": session_id})
|
|
1490
1606
|
if delivered:
|
|
@@ -56,17 +56,59 @@ class TaskAgentLifecycleMixin:
|
|
|
56
56
|
if not getattr(self, "_owns_workspace_gc", True):
|
|
57
57
|
logger.debug("workspace GC not owned by this process — loop not running")
|
|
58
58
|
return
|
|
59
|
+
# 056 WS8: the first pass runs 10 min after start, then daily. With
|
|
60
|
+
# ~28 restarts/day on prod the old "sleep 24 h first" never fired once,
|
|
61
|
+
# and 1,642 stale session dirs (4.0 GB) accumulated.
|
|
62
|
+
delay = 600
|
|
59
63
|
while True:
|
|
60
64
|
try:
|
|
61
|
-
|
|
62
|
-
|
|
65
|
+
await asyncio.sleep(delay)
|
|
66
|
+
delay = 86400
|
|
63
67
|
|
|
64
68
|
if self.session_manager:
|
|
65
69
|
cleaned = self.session_manager.cleanup_old_workspaces(max_age_days=7)
|
|
66
70
|
logger.info(f"Workspace cleanup: removed {cleaned} old workspaces")
|
|
71
|
+
self._session_dir_gc()
|
|
67
72
|
|
|
68
73
|
except Exception as e:
|
|
69
74
|
logger.error(f"Error in workspace cleanup: {e}")
|
|
75
|
+
|
|
76
|
+
def _session_dir_gc(self) -> None:
|
|
77
|
+
"""056 WS8: collect stale per-session dirs (dry-run unless
|
|
78
|
+
SESSION_DIR_GC_APPLY=true). Live/resident session ids are protected;
|
|
79
|
+
the report is logged and recorded as a `session_gc` event so the owner
|
|
80
|
+
sees the numbers before the switch is flipped."""
|
|
81
|
+
try:
|
|
82
|
+
from agents.task.path import pm
|
|
83
|
+
from agents.task.session_registry import resident_session_ids
|
|
84
|
+
from core.session_gc import collect_stale_sessions
|
|
85
|
+
sessions_root = str(getattr(pm(), "data_root", "") or "")
|
|
86
|
+
protect = set()
|
|
87
|
+
try:
|
|
88
|
+
protect.update(resident_session_ids(self))
|
|
89
|
+
except Exception:
|
|
90
|
+
pass
|
|
91
|
+
try:
|
|
92
|
+
if self.session_manager:
|
|
93
|
+
protect.update(self.session_manager.get_active_sessions())
|
|
94
|
+
except Exception:
|
|
95
|
+
pass
|
|
96
|
+
rep = collect_stale_sessions(sessions_root, max_age_days=14, protect=protect)
|
|
97
|
+
logger.info("session gc (%s): candidates=%s removed=%s bytes=%s kept_recent=%s "
|
|
98
|
+
"protected=%s errors=%s sample=%s",
|
|
99
|
+
"APPLY" if rep.get("apply") else "DRY-RUN", rep.get("candidates"),
|
|
100
|
+
rep.get("removed"), rep.get("bytes"), rep.get("kept_recent"),
|
|
101
|
+
rep.get("protected"), rep.get("errors"), rep.get("sample"))
|
|
102
|
+
try:
|
|
103
|
+
from core.event_log import get_event_log, event_log_enabled
|
|
104
|
+
from core.event_kinds import SESSION_GC
|
|
105
|
+
if event_log_enabled():
|
|
106
|
+
get_event_log().record(SESSION_GC, user_id="", source="lifecycle",
|
|
107
|
+
**{k: v for k, v in rep.items() if k != "sample"})
|
|
108
|
+
except Exception:
|
|
109
|
+
pass
|
|
110
|
+
except Exception as e:
|
|
111
|
+
logger.warning("session gc skipped: %s", e)
|
|
70
112
|
@staticmethod
|
|
71
113
|
def _session_age_seconds(created_at, now: Optional[datetime] = None) -> Optional[float]:
|
|
72
114
|
"""Age in seconds from an ISO 'created_at' string, or None if unparseable."""
|
|
@@ -155,8 +155,21 @@ def with_compute_tools(tools: list[str]) -> list[str]:
|
|
|
155
155
|
try:
|
|
156
156
|
from agents.task.constants import compute_posture
|
|
157
157
|
if compute_posture() >= 1:
|
|
158
|
-
|
|
159
|
-
|
|
158
|
+
# 056 WS4: posture is the CEILING; each tool's own flag still decides.
|
|
159
|
+
# Prod ran posture 1 with CODE_EXEC_ENABLED/SHELL_TOOLS_ENABLED off and
|
|
160
|
+
# every goal record carried a false "[tool gap] code_execution …" line
|
|
161
|
+
# (43 in 48 h) — the deploy was asking for tools it had switched off.
|
|
162
|
+
from core.config_policy.capability_toggles import (
|
|
163
|
+
code_exec_enabled, shell_tools_enabled, coding_tools_enabled)
|
|
164
|
+
wanted = (("code_execution", code_exec_enabled),
|
|
165
|
+
("shell", shell_tools_enabled),
|
|
166
|
+
("coding", coding_tools_enabled))
|
|
167
|
+
for t, enabled in wanted:
|
|
168
|
+
try:
|
|
169
|
+
on = bool(enabled())
|
|
170
|
+
except Exception:
|
|
171
|
+
on = False
|
|
172
|
+
if on and t not in tools:
|
|
160
173
|
tools.append(t)
|
|
161
174
|
except Exception:
|
|
162
175
|
pass
|
|
@@ -63,8 +63,10 @@ def run_server(host=None, port=None, workers=None, *, reload=None, log_level=Non
|
|
|
63
63
|
workers=workers if not reload else 1, # Can't use multiple workers with reload
|
|
64
64
|
reload=reload,
|
|
65
65
|
log_level=log_level,
|
|
66
|
-
# Proxy headers for nginx
|
|
66
|
+
# Proxy headers for nginx. Trust X-Forwarded-For ONLY from the local reverse
|
|
67
|
+
# proxy by default: "*" lets any direct caller claim 127.0.0.1 and pass every
|
|
68
|
+
# localhost-only check (webview/server_launcher.py pins the same default).
|
|
67
69
|
proxy_headers=True,
|
|
68
|
-
forwarded_allow_ips="
|
|
70
|
+
forwarded_allow_ips=os.environ.get("UVICORN_FORWARDED_ALLOW_IPS", "127.0.0.1"),
|
|
69
71
|
factory=True
|
|
70
72
|
)
|
|
@@ -23,13 +23,15 @@ from __future__ import annotations
|
|
|
23
23
|
import click
|
|
24
24
|
|
|
25
25
|
from core.prefs import load_preferences, propose_pref_change, write_preference
|
|
26
|
-
from
|
|
26
|
+
from cli._admin_home import admin_data_dir
|
|
27
27
|
from tools.controller.approval import effective_approval_state
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
def _default_home_dir() -> str:
|
|
31
|
-
"""
|
|
32
|
-
|
|
31
|
+
"""The DEPLOYED data home (cli/_admin_home.py, the 031 rule) — the approval set is
|
|
32
|
+
the daemon's; resolving the shell-local home here wrote to /root/.polyrob on prod
|
|
33
|
+
and printed success (the same class as the recorded `delivery.daily_cap` defect)."""
|
|
34
|
+
return admin_data_dir()
|
|
33
35
|
|
|
34
36
|
|
|
35
37
|
@click.group("approvals")
|