polyrob 0.5.0__py3-none-any.whl
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.
- agents/README.md +453 -0
- agents/__init__.py +164 -0
- agents/base_agent.py +743 -0
- agents/personality/character.py +119 -0
- agents/personality/character_manager.py +309 -0
- agents/personality/characters/rob.character.json +56 -0
- agents/personality/characters/trump.character.json +63 -0
- agents/personality/persona_render.py +78 -0
- agents/personality/persona_resolver.py +115 -0
- agents/prompt/__init__.py +58 -0
- agents/prompt/base_prompt.py +92 -0
- agents/prompt/system.py +417 -0
- agents/task/README_PATH_MANAGEMENT.md +141 -0
- agents/task/__init__.py +162 -0
- agents/task/agent/__init__.py +70 -0
- agents/task/agent/agent_state.py +408 -0
- agents/task/agent/async_delegation.py +274 -0
- agents/task/agent/autonomy_state.py +275 -0
- agents/task/agent/conversation.py +75 -0
- agents/task/agent/core/__init__.py +6 -0
- agents/task/agent/core/aux_metering.py +61 -0
- agents/task/agent/core/background_review.py +157 -0
- agents/task/agent/core/construction.py +1179 -0
- agents/task/agent/core/conversational_exit.py +49 -0
- agents/task/agent/core/correspondent_gate.py +227 -0
- agents/task/agent/core/curator.py +246 -0
- agents/task/agent/core/episodic_digest.py +103 -0
- agents/task/agent/core/error_recovery.py +480 -0
- agents/task/agent/core/history_io.py +257 -0
- agents/task/agent/core/llm_provisioning.py +287 -0
- agents/task/agent/core/llm_runner.py +547 -0
- agents/task/agent/core/logging_io.py +276 -0
- agents/task/agent/core/loop_detection.py +262 -0
- agents/task/agent/core/memory_prefetch.py +325 -0
- agents/task/agent/core/memory_writer.py +667 -0
- agents/task/agent/core/model_introspection.py +82 -0
- agents/task/agent/core/model_swap.py +177 -0
- agents/task/agent/core/next_action_internal.py +1331 -0
- agents/task/agent/core/output_validation.py +303 -0
- agents/task/agent/core/project_context.py +272 -0
- agents/task/agent/core/resources.py +93 -0
- agents/task/agent/core/result_processing.py +389 -0
- agents/task/agent/core/run_loop.py +661 -0
- agents/task/agent/core/safety_lifecycle.py +228 -0
- agents/task/agent/core/secret_guard.py +293 -0
- agents/task/agent/core/self_wake.py +280 -0
- agents/task/agent/core/session_metadata.py +104 -0
- agents/task/agent/core/step.py +781 -0
- agents/task/agent/core/step_execution.py +398 -0
- agents/task/agent/core/step_telemetry.py +222 -0
- agents/task/agent/core/test_aux_metering.py +50 -0
- agents/task/agent/core/test_billing_failover.py +68 -0
- agents/task/agent/core/test_fatal_error_classifier.py +38 -0
- agents/task/agent/core/test_judge_validation.py +275 -0
- agents/task/agent/core/test_model_swap.py +190 -0
- agents/task/agent/core/test_reflection_offload.py +54 -0
- agents/task/agent/core/turn_input.py +8 -0
- agents/task/agent/core/untrusted_wrap.py +103 -0
- agents/task/agent/core/user_ingress.py +228 -0
- agents/task/agent/hitl_manager.py +396 -0
- agents/task/agent/log_sanitize.py +36 -0
- agents/task/agent/message_manager/config.py +97 -0
- agents/task/agent/message_manager/service.py +758 -0
- agents/task/agent/message_manager/tests.py +305 -0
- agents/task/agent/message_manager/tool_call_builder.py +539 -0
- agents/task/agent/message_manager/tool_message_repair.py +364 -0
- agents/task/agent/message_manager/views.py +143 -0
- agents/task/agent/messages/__init__.py +8 -0
- agents/task/agent/messages/builders.py +309 -0
- agents/task/agent/messages/compactor.py +611 -0
- agents/task/agent/messages/context_references.py +271 -0
- agents/task/agent/messages/filters.py +333 -0
- agents/task/agent/messages/guidance.py +328 -0
- agents/task/agent/messages/persistence.py +448 -0
- agents/task/agent/messages/retrieval.py +506 -0
- agents/task/agent/messages/sqlite_persistence.py +85 -0
- agents/task/agent/messages/test_compaction_upgrade.py +349 -0
- agents/task/agent/messages/test_persistence_subdir_fix.py +28 -0
- agents/task/agent/messages/test_sqlite_persistence.py +54 -0
- agents/task/agent/messages/token_counter.py +532 -0
- agents/task/agent/orchestrator.py +776 -0
- agents/task/agent/profile_manager.py +105 -0
- agents/task/agent/profile_registry.py +173 -0
- agents/task/agent/prompts.py +1090 -0
- agents/task/agent/scenario_registry.py +226 -0
- agents/task/agent/service.py +509 -0
- agents/task/agent/session.py +984 -0
- agents/task/agent/skill_discovery.py +110 -0
- agents/task/agent/skill_frontmatter.py +94 -0
- agents/task/agent/skill_manager.py +1201 -0
- agents/task/agent/skill_store.py +627 -0
- agents/task/agent/skill_validation.py +56 -0
- agents/task/agent/skill_writer.py +492 -0
- agents/task/agent/sub_agent_manager.py +1137 -0
- agents/task/agent/test_session_disk_recovery.py +34 -0
- agents/task/agent/tests.py +513 -0
- agents/task/agent/tool_call_tracker.py +511 -0
- agents/task/agent/views.py +469 -0
- agents/task/config.py +432 -0
- agents/task/constants.py +1384 -0
- agents/task/flag_defaults.py +63 -0
- agents/task/goals/__init__.py +1 -0
- agents/task/goals/autonomy_marker.py +28 -0
- agents/task/goals/board.py +690 -0
- agents/task/goals/completion_judge.py +247 -0
- agents/task/goals/context.py +62 -0
- agents/task/goals/dispatcher.py +848 -0
- agents/task/goals/escalation.py +102 -0
- agents/task/goals/planner.py +114 -0
- agents/task/logging_config.py +155 -0
- agents/task/path.py +991 -0
- agents/task/robust_parse_config.py +400 -0
- agents/task/runtime/__init__.py +0 -0
- agents/task/runtime/run_as_session.py +130 -0
- agents/task/runtime_safety.py +308 -0
- agents/task/session/__init__.py +5 -0
- agents/task/session/browser_pool.py +130 -0
- agents/task/session/cleanup.py +612 -0
- agents/task/session/execution.py +397 -0
- agents/task/session/feed.py +200 -0
- agents/task/session/hitl_ingress.py +201 -0
- agents/task/session/hooks.py +83 -0
- agents/task/session/multi_agent.py +243 -0
- agents/task/session/workspace.py +91 -0
- agents/task/session_registry.py +91 -0
- agents/task/session_route.py +35 -0
- agents/task/sqlite_session_registry.py +261 -0
- agents/task/surface_config.py +185 -0
- agents/task/telemetry/__init__.py +58 -0
- agents/task/telemetry/event_log.py +180 -0
- agents/task/telemetry/formatters.py +642 -0
- agents/task/telemetry/manager.py +571 -0
- agents/task/telemetry/memory_events.py +66 -0
- agents/task/telemetry/self_events.py +53 -0
- agents/task/telemetry/sequence.py +160 -0
- agents/task/telemetry/service.py +1265 -0
- agents/task/telemetry/views.py +882 -0
- agents/task/templates.py +98 -0
- agents/task/test_aux_chain.py +151 -0
- agents/task/test_aux_router.py +41 -0
- agents/task/tests/test_parse_robustness.py +170 -0
- agents/task/tool_defaults.py +110 -0
- agents/task/utils.py +762 -0
- agents/task/utils_json.py +768 -0
- agents/task/utils_webview.py +86 -0
- agents/task/workspace_context.py +229 -0
- agents/task_agent_lite.py +2398 -0
- api/README.md +683 -0
- api/TASK_API_DOCS.md +151 -0
- api/__init__.py +0 -0
- api/a2a/__init__.py +37 -0
- api/a2a/agent_card.py +337 -0
- api/a2a/client.py +657 -0
- api/a2a/endpoints.py +375 -0
- api/a2a/models.py +268 -0
- api/a2a/streaming.py +419 -0
- api/a2a/task_handler.py +929 -0
- api/admin_endpoints.py +1584 -0
- api/app.py +923 -0
- api/auth_constants.py +28 -0
- api/auth_endpoints.py +402 -0
- api/auth_state.py +36 -0
- api/chat_via_task.py +42 -0
- api/conversation_manager.py +231 -0
- api/dependencies.py +186 -0
- api/eip8004_endpoints.py +452 -0
- api/hyperliquid_models.py +174 -0
- api/hyperliquid_routes.py +450 -0
- api/interfaces.py +207 -0
- api/jwt_middleware.py +83 -0
- api/kb/__init__.py +1 -0
- api/kb/endpoints.py +314 -0
- api/mcp_models.py +279 -0
- api/mcp_routes.py +438 -0
- api/middleware.py +526 -0
- api/models.py +176 -0
- api/openai_compat/__init__.py +0 -0
- api/openai_compat/model_map.py +25 -0
- api/openai_compat/models.py +59 -0
- api/openai_compat/router.py +140 -0
- api/payment_endpoints.py +444 -0
- api/payment_verification.py +138 -0
- api/polymarket_models.py +155 -0
- api/polymarket_routes.py +501 -0
- api/pricing_endpoints.py +89 -0
- api/session_routing.py +54 -0
- api/skill_endpoints.py +453 -0
- api/task_http_api.py +1856 -0
- api/webhooks.py +52 -0
- api/x402_endpoints.py +280 -0
- avatar/README.md +44 -0
- avatar/__init__.py +1 -0
- avatar/config/rob.json +7 -0
- avatar/mindprint.js +395 -0
- avatar/renders/rob.meta.json +20 -0
- avatar/renders/rob.png +0 -0
- avatar/studio.html +373 -0
- avatar/webview/avatar-live.js +44 -0
- cli/README.md +89 -0
- cli/__init__.py +0 -0
- cli/cli_surface.py +67 -0
- cli/commands/__init__.py +0 -0
- cli/commands/_bootstrap.py +49 -0
- cli/commands/_errors.py +53 -0
- cli/commands/chat.py +973 -0
- cli/commands/config.py +100 -0
- cli/commands/dashboard.py +103 -0
- cli/commands/doctor.py +222 -0
- cli/commands/email.py +174 -0
- cli/commands/gateway.py +346 -0
- cli/commands/goals.py +509 -0
- cli/commands/init.py +276 -0
- cli/commands/journey.py +30 -0
- cli/commands/kb.py +280 -0
- cli/commands/model.py +107 -0
- cli/commands/owner.py +431 -0
- cli/commands/pfp.py +232 -0
- cli/commands/run.py +414 -0
- cli/commands/serve.py +41 -0
- cli/commands/session.py +684 -0
- cli/commands/skill_install.py +786 -0
- cli/commands/skills.py +128 -0
- cli/commands/subagents.py +100 -0
- cli/commands/surface.py +81 -0
- cli/commands/telegram.py +185 -0
- cli/commands/todos.py +209 -0
- cli/commands/tools.py +102 -0
- cli/commands/update.py +316 -0
- cli/commands/whatsapp.py +175 -0
- cli/config_store.py +276 -0
- cli/gitignore.py +43 -0
- cli/inventory.py +46 -0
- cli/keys.py +101 -0
- cli/persona.py +17 -0
- cli/polyrob.py +137 -0
- cli/ui/__init__.py +64 -0
- cli/ui/activity.py +141 -0
- cli/ui/app.py +538 -0
- cli/ui/banner.py +233 -0
- cli/ui/blocks.py +534 -0
- cli/ui/bootstrap_notice.py +47 -0
- cli/ui/commands/__init__.py +41 -0
- cli/ui/commands/h_cron.py +64 -0
- cli/ui/commands/h_journey.py +164 -0
- cli/ui/commands/h_kb.py +121 -0
- cli/ui/commands/h_learn.py +100 -0
- cli/ui/commands/h_mcp.py +215 -0
- cli/ui/commands/h_self.py +113 -0
- cli/ui/commands/h_skills.py +314 -0
- cli/ui/commands/handlers.py +1672 -0
- cli/ui/commands/registry.py +426 -0
- cli/ui/dialog.py +425 -0
- cli/ui/event_registry.py +110 -0
- cli/ui/event_specs.py +45 -0
- cli/ui/events.py +433 -0
- cli/ui/identity.py +15 -0
- cli/ui/lifecycle.py +159 -0
- cli/ui/live_hooks.py +43 -0
- cli/ui/model_selector.py +532 -0
- cli/ui/persistent_loop.py +181 -0
- cli/ui/pick.py +113 -0
- cli/ui/plain_renderer.py +351 -0
- cli/ui/renderer.py +384 -0
- cli/ui/rich_renderer.py +533 -0
- cli/ui/secrets.py +115 -0
- cli/ui/state.py +376 -0
- cli/ui/statusbar.py +231 -0
- cli/ui/streaming.py +254 -0
- cli/ui/terminal_render.py +105 -0
- cli/ui/theme.py +132 -0
- cli/update/__init__.py +6 -0
- cli/update/context.py +121 -0
- cli/update/detect.py +176 -0
- cli/update/engine.py +95 -0
- cli/update/migrate_guarded.py +55 -0
- cli/update/process_guard.py +215 -0
- cli/update/runners.py +78 -0
- cli/update/snapshot.py +270 -0
- cli/update/versions.py +205 -0
- core/README.md +377 -0
- core/__init__.py +174 -0
- core/assets.py +87 -0
- core/async_bridge.py +76 -0
- core/autonomy_runtime.py +259 -0
- core/base_component.py +302 -0
- core/bootstrap.py +681 -0
- core/bot.py +310 -0
- core/config.py +833 -0
- core/constants.py +126 -0
- core/container.py +462 -0
- core/db_manifest.py +101 -0
- core/embedding.py +57 -0
- core/env.py +39 -0
- core/exceptions.py +287 -0
- core/flags.py +144 -0
- core/flags_catalog.py +345 -0
- core/home_migration.py +62 -0
- core/identity.py +118 -0
- core/initialization.py +1004 -0
- core/instance.py +537 -0
- core/interactive_gate.py +96 -0
- core/logging.py +436 -0
- core/owner_doc_writer.py +176 -0
- core/pairing.py +193 -0
- core/path_safety.py +20 -0
- core/paths.py +27 -0
- core/payment_config.py +21 -0
- core/permissions.py +322 -0
- core/runtime_config.py +96 -0
- core/runtime_paths.py +135 -0
- core/seams.py +35 -0
- core/secret_scan.py +25 -0
- core/secret_scrub.py +71 -0
- core/secrets.py +35 -0
- core/security_logging_filter.py +148 -0
- core/self_context_writer.py +333 -0
- core/self_evolution.py +294 -0
- core/session_context.py +47 -0
- core/sqlite_util.py +59 -0
- core/surfaces/__init__.py +16 -0
- core/surfaces/access.py +118 -0
- core/surfaces/binding.py +88 -0
- core/surfaces/bootstrap.py +78 -0
- core/surfaces/circuit.py +168 -0
- core/surfaces/continuity.py +77 -0
- core/surfaces/correspondents.py +228 -0
- core/surfaces/dispatcher.py +216 -0
- core/surfaces/envelopes.py +75 -0
- core/surfaces/gc.py +30 -0
- core/surfaces/idempotency.py +57 -0
- core/surfaces/inbound_webhook.py +124 -0
- core/surfaces/media.py +32 -0
- core/surfaces/message_router.py +91 -0
- core/surfaces/outbound_allowlist.py +80 -0
- core/surfaces/outbound_dispatcher.py +110 -0
- core/surfaces/outbound_mirror.py +37 -0
- core/surfaces/outbound_queue.py +107 -0
- core/surfaces/outbound_target.py +12 -0
- core/surfaces/owner_admin.py +29 -0
- core/surfaces/proactive.py +78 -0
- core/surfaces/progress.py +108 -0
- core/surfaces/rate_bucket.py +21 -0
- core/surfaces/registry.py +51 -0
- core/surfaces/rendering.py +53 -0
- core/surfaces/send_policy.py +14 -0
- core/surfaces/serialize.py +24 -0
- core/surfaces/session_chat_registry.py +112 -0
- core/surfaces/session_policy.py +60 -0
- core/surfaces/surface.py +288 -0
- core/surfaces/transcription.py +88 -0
- core/surfaces/voice_echo.py +26 -0
- core/surfaces/voice_guard.py +23 -0
- core/tickers.py +174 -0
- core/tool_catalog.py +192 -0
- core/version.py +75 -0
- core/wallet/__init__.py +5 -0
- core/wallet/agent_wallet.py +59 -0
- core/wallet/audit_sink.py +61 -0
- core/wallet/config.py +70 -0
- core/wallet/factory.py +87 -0
- core/wallet/policy.py +104 -0
- core/wallet/signer.py +51 -0
- cron/README.md +65 -0
- cron/__init__.py +0 -0
- cron/delivery.py +277 -0
- cron/digest.py +124 -0
- cron/jobs.py +207 -0
- cron/runner.py +297 -0
- cron/schedule.py +194 -0
- cron/scheduler.py +201 -0
- cron/service.py +57 -0
- cron/wake_gate.py +223 -0
- data/__init__.py +1 -0
- data/prompts/autov2_prompts.json +87 -0
- data/prompts/skills/browser-automation/SKILL.md +43 -0
- data/prompts/skills/coding-workflow/SKILL.md +36 -0
- data/prompts/skills/crypto-trading-safety/SKILL.md +53 -0
- data/prompts/skills/document-writing/SKILL.md +33 -0
- data/prompts/skills/email-comms/SKILL.md +33 -0
- data/prompts/skills/file-data-ops/SKILL.md +35 -0
- data/prompts/skills/hyperliquid-account-review/SKILL.md +48 -0
- data/prompts/skills/hyperliquid-market-data/SKILL.md +52 -0
- data/prompts/skills/hyperliquid-trading/SKILL.md +59 -0
- data/prompts/skills/lead-research/SKILL.md +86 -0
- data/prompts/skills/market-research-brief/SKILL.md +104 -0
- data/prompts/skills/person-analyzer/SKILL.md +124 -0
- data/prompts/skills/polymarket-market-research/SKILL.md +54 -0
- data/prompts/skills/polymarket-portfolio-review/SKILL.md +50 -0
- data/prompts/skills/polymarket-trading/SKILL.md +55 -0
- data/prompts/skills/presentation-creator/SKILL.md +36 -0
- data/prompts/skills/project-analyzer/SKILL.md +169 -0
- data/prompts/skills/rules.json +268 -0
- data/prompts/skills/secret-handling/SKILL.md +20 -0
- data/prompts/skills/skill-authoring/SKILL.md +31 -0
- data/prompts/skills/skill-security-review/SKILL.md +27 -0
- data/prompts/skills/social-discovery/SKILL.md +57 -0
- data/prompts/skills/task-planning/SKILL.md +33 -0
- data/prompts/skills/web-research/SKILL.md +39 -0
- data/prompts/skills/web-scraping/SKILL.md +73 -0
- data/prompts/skills/x-engagement/SKILL.md +69 -0
- data/prompts/system_prompts.json +4 -0
- data/subscription_channels.json +5 -0
- modules/README.md +503 -0
- modules/__init__.py +124 -0
- modules/auth/__init__.py +13 -0
- modules/auth/api_key_manager.py +157 -0
- modules/auth/identity_mapper.py +380 -0
- modules/auth/siwe_auth.py +273 -0
- modules/auth/tier_manager.py +173 -0
- modules/base_module.py +190 -0
- modules/credits/__init__.py +29 -0
- modules/credits/balance_manager.py +237 -0
- modules/credits/cost_utils.py +129 -0
- modules/credits/pricing.py +139 -0
- modules/credits/unified_ledger.py +148 -0
- modules/credits/usage_meter.py +310 -0
- modules/credits/usage_tracker.py +674 -0
- modules/database/__init__.py +33 -0
- modules/database/audit_log.py +322 -0
- modules/database/auth_tables.py +276 -0
- modules/database/connection.py +644 -0
- modules/database/connection_pool.py +305 -0
- modules/database/conversation_contexts.py +446 -0
- modules/database/database_manager.py +237 -0
- modules/database/hyperliquid.py +375 -0
- modules/database/polymarket.py +574 -0
- modules/database/user_mcp_servers.py +728 -0
- modules/database/user_profiles.py +562 -0
- modules/database/utils.py +107 -0
- modules/database/x402_tables.py +92 -0
- modules/eip8004/README.md +1069 -0
- modules/eip8004/__init__.py +65 -0
- modules/eip8004/contracts.py +498 -0
- modules/eip8004/models.py +271 -0
- modules/eip8004/registration.py +148 -0
- modules/eip8004/reputation.py +367 -0
- modules/eip8004/validation.py +277 -0
- modules/llm/__init__.py +97 -0
- modules/llm/adapters.py +963 -0
- modules/llm/anthropic_client.py +831 -0
- modules/llm/available_models.py +106 -0
- modules/llm/brain_scrubber.py +137 -0
- modules/llm/cache_hints.py +162 -0
- modules/llm/deepseek_client.py +562 -0
- modules/llm/gemini_client.py +1367 -0
- modules/llm/llm_client.py +1139 -0
- modules/llm/llm_client_registry.py +188 -0
- modules/llm/llm_factory.py +237 -0
- modules/llm/llm_manager.py +1036 -0
- modules/llm/messages.py +374 -0
- modules/llm/model_registry.py +1935 -0
- modules/llm/nvidia_client.py +125 -0
- modules/llm/openai_client.py +800 -0
- modules/llm/openrouter_client.py +969 -0
- modules/llm/profiles.py +178 -0
- modules/llm/test_anthropic_cache_capture.py +35 -0
- modules/llm/test_cached_pricing_derivation.py +24 -0
- modules/llm/think_scrubber.py +444 -0
- modules/llm/token_counter.py +268 -0
- modules/memory/__init__.py +35 -0
- modules/memory/backend_factory.py +83 -0
- modules/memory/cache_manager.py +186 -0
- modules/memory/episodic.py +108 -0
- modules/memory/local_vector_memory_provider.py +552 -0
- modules/memory/memory_manager.py +225 -0
- modules/memory/models.py +312 -0
- modules/memory/provider.py +210 -0
- modules/memory/registry.py +205 -0
- modules/memory/sqlite_memory_provider.py +767 -0
- modules/memory/task/__init__.py +52 -0
- modules/memory/task/compaction_manager.py +157 -0
- modules/memory/task/context_retriever.py +809 -0
- modules/memory/task/hierarchical_memory.py +1002 -0
- modules/memory/task/lexical_retriever.py +71 -0
- modules/memory/task/null_context_manager.py +213 -0
- modules/memory/task/phase_manager.py +625 -0
- modules/memory/task/reflection_service.py +157 -0
- modules/memory/task/semantic_retriever.py +218 -0
- modules/memory/task/task_context_manager.py +1165 -0
- modules/memory/task/test_forgetting_engages.py +24 -0
- modules/memory/task/test_reflection_llm.py +39 -0
- modules/memory/task/test_threat_scan.py +53 -0
- modules/memory/task/threat_scan.py +90 -0
- modules/memory/test_sqlite_memory_provider.py +106 -0
- modules/memory/user_profile_manager.py +527 -0
- modules/payments/__init__.py +11 -0
- modules/payments/deposit_monitor.py +478 -0
- modules/payments/price_oracle.py +70 -0
- modules/payments/treasury_sweeper.py +401 -0
- modules/payments/wallet_generator.py +145 -0
- modules/pfp/__init__.py +1 -0
- modules/pfp/config.py +92 -0
- modules/pfp/mesh.py +565 -0
- modules/pfp/push.py +69 -0
- modules/pfp/renderer.py +85 -0
- modules/pfp/store.py +82 -0
- modules/skills/__init__.py +1 -0
- modules/skills/skill_usage.py +248 -0
- modules/transcription/__init__.py +24 -0
- modules/transcription/base.py +20 -0
- modules/transcription/faster_whisper_transcriber.py +55 -0
- modules/x402/README.md +249 -0
- modules/x402/__init__.py +22 -0
- modules/x402/invoicing.py +416 -0
- modules/x402/middleware.py +364 -0
- modules/x402/settlement_watcher.py +145 -0
- modules/x402/x402_integration.py +344 -0
- polyrob-0.5.0.dist-info/METADATA +482 -0
- polyrob-0.5.0.dist-info/RECORD +745 -0
- polyrob-0.5.0.dist-info/WHEEL +5 -0
- polyrob-0.5.0.dist-info/entry_points.txt +2 -0
- polyrob-0.5.0.dist-info/licenses/LICENSE +21 -0
- polyrob-0.5.0.dist-info/top_level.txt +12 -0
- surfaces/README.md +70 -0
- surfaces/__init__.py +0 -0
- surfaces/email/__init__.py +0 -0
- surfaces/email/dedup.py +44 -0
- surfaces/email/harness.py +187 -0
- surfaces/email/inbound.py +159 -0
- surfaces/email/seed.py +60 -0
- surfaces/email/surface.py +105 -0
- surfaces/telegram/__init__.py +0 -0
- surfaces/telegram/dedup.py +83 -0
- surfaces/telegram/harness.py +886 -0
- surfaces/telegram/inbound.py +145 -0
- surfaces/telegram/interactive_tools.py +49 -0
- surfaces/telegram/markdown.py +347 -0
- surfaces/telegram/rate_limit.py +167 -0
- surfaces/telegram/surface.py +187 -0
- surfaces/telegram/voice.py +52 -0
- surfaces/whatsapp/__init__.py +0 -0
- surfaces/whatsapp/client.py +51 -0
- surfaces/whatsapp/harness.py +62 -0
- surfaces/whatsapp/inbound.py +132 -0
- surfaces/whatsapp/surface.py +64 -0
- surfaces/whatsapp/window.py +34 -0
- tools/README.md +578 -0
- tools/__init__.py +424 -0
- tools/alchemy/__init__.py +5 -0
- tools/alchemy/alchemy_tool.py +389 -0
- tools/anysite/__init__.py +17 -0
- tools/anysite/client.py +88 -0
- tools/anysite/tool.py +89 -0
- tools/base_tool.py +468 -0
- tools/browser/__init__.py +22 -0
- tools/browser/actions.py +118 -0
- tools/browser/browser.py +1457 -0
- tools/browser/browser_manager.py +690 -0
- tools/browser/context.py +1748 -0
- tools/browser/playwright_utils.py +137 -0
- tools/browser/views.py +56 -0
- tools/code_exec/SANDBOX_SECURITY.md +144 -0
- tools/code_exec/__init__.py +178 -0
- tools/code_exec/backend.py +73 -0
- tools/code_exec/backends/__init__.py +1 -0
- tools/code_exec/backends/docker.py +779 -0
- tools/code_exec/backends/local_subprocess.py +154 -0
- tools/code_exec/env_policy.py +45 -0
- tools/code_exec/result.py +42 -0
- tools/code_exec/sandbox_guard.py +59 -0
- tools/code_exec/tool.py +227 -0
- tools/coding/__init__.py +50 -0
- tools/coding/edit.py +107 -0
- tools/coding/search.py +113 -0
- tools/coding/tool.py +353 -0
- tools/collabland/__init__.py +5 -0
- tools/collabland/collabland_tool.py +471 -0
- tools/controller/__init__.py +0 -0
- tools/controller/_helpers.py +165 -0
- tools/controller/action_registration.py +1765 -0
- tools/controller/approval.py +244 -0
- tools/controller/approval_interactive.py +90 -0
- tools/controller/delegation.py +195 -0
- tools/controller/execution.py +797 -0
- tools/controller/execution_context.py +141 -0
- tools/controller/hooks.py +135 -0
- tools/controller/introspection.py +344 -0
- tools/controller/mcp_registrar.py +190 -0
- tools/controller/message_send.py +31 -0
- tools/controller/registry/__init__.py +4 -0
- tools/controller/registry/schema_generators.py +395 -0
- tools/controller/registry/schema_sanitizer.py +406 -0
- tools/controller/registry/service.py +1266 -0
- tools/controller/registry/views.py +151 -0
- tools/controller/service.py +409 -0
- tools/controller/tool_management.py +334 -0
- tools/controller/types.py +28 -0
- tools/controller/views.py +450 -0
- tools/cronjob_tools.py +166 -0
- tools/crypto_trade_gate.py +59 -0
- tools/descriptors.py +452 -0
- tools/dom/__init__.py +0 -0
- tools/dom/history_tree_processor/service.py +244 -0
- tools/dom/history_tree_processor/view.py +99 -0
- tools/dom/service.py +471 -0
- tools/dom/views.py +346 -0
- tools/email_tool.py +403 -0
- tools/exceptions.py +169 -0
- tools/filesystem.py +1038 -0
- tools/filesystem_docproc.py +331 -0
- tools/filesystem_pdf.py +755 -0
- tools/git/__init__.py +42 -0
- tools/git/tool.py +258 -0
- tools/github/__init__.py +33 -0
- tools/github/client.py +94 -0
- tools/github/tool.py +237 -0
- tools/goal_tools.py +309 -0
- tools/hyperliquid/__init__.py +56 -0
- tools/hyperliquid/models.py +233 -0
- tools/hyperliquid/service.py +1680 -0
- tools/knowledge_ingest.py +950 -0
- tools/mcp/README.md +535 -0
- tools/mcp/__init__.py +52 -0
- tools/mcp/catalog.py +115 -0
- tools/mcp/config.py +337 -0
- tools/mcp/mcp_tool.py +1415 -0
- tools/mcp/param_coercion.py +289 -0
- tools/mcp/protocol.py +1520 -0
- tools/mcp/rate_limit.py +50 -0
- tools/mcp/security.py +424 -0
- tools/mcp/self_install.py +111 -0
- tools/mcp/server_manager.py +829 -0
- tools/mcp/subscriptions.py +72 -0
- tools/mcp/user_mcp_service.py +899 -0
- tools/mcp/validation_tracker.py +89 -0
- tools/mcp/views.py +346 -0
- tools/oauth/__init__.py +17 -0
- tools/oauth/manager.py +75 -0
- tools/oauth/provider.py +69 -0
- tools/oauth/providers/__init__.py +1 -0
- tools/oauth/providers/generic_oauth2.py +96 -0
- tools/perplexity_tool.py +280 -0
- tools/polymarket/__init__.py +41 -0
- tools/polymarket/clob_adapter.py +76 -0
- tools/polymarket/models.py +182 -0
- tools/polymarket/service.py +2082 -0
- tools/self_env/__init__.py +61 -0
- tools/self_env/tool.py +274 -0
- tools/shell/__init__.py +80 -0
- tools/shell/backend_pool.py +118 -0
- tools/shell/discipline.py +62 -0
- tools/shell/executor.py +157 -0
- tools/shell/loopback_allow.py +87 -0
- tools/shell/process_registry.py +113 -0
- tools/shell/process_tool.py +131 -0
- tools/shell/state.py +129 -0
- tools/shell/tool.py +151 -0
- tools/task_tool.py +637 -0
- tools/twitter_tool.py +2086 -0
- tools/user_directory.py +179 -0
- tools/web_fetch/__init__.py +3 -0
- tools/web_fetch/fetcher.py +144 -0
- tools/web_fetch/render.py +44 -0
- tools/web_fetch/tool.py +60 -0
- tools/x402/__init__.py +60 -0
- tools/x402/client.py +47 -0
- tools/x402/invoice_tool.py +143 -0
- tools/x402/real_client.py +250 -0
- tools/x402/service.py +131 -0
- utils/README.md +498 -0
- utils/__init__.py +46 -0
- utils/auth_utils.py +114 -0
- utils/bounded_collections.py +162 -0
- utils/circuit_breaker.py +389 -0
- utils/gif_utils.py +435 -0
- utils/markdown_utils.py +291 -0
- utils/message_utils.py +147 -0
- utils/metrics.py +36 -0
- utils/path_validator.py +227 -0
- utils/rate_limit_manager.py +399 -0
- utils/result_size.py +296 -0
- utils/time_utils.py +206 -0
- utils/user_utils.py +188 -0
- webview/README.md +111 -0
- webview/RENAME_AND_ALIGN_HANDOFF.md +200 -0
- webview/__init__.py +8 -0
- webview/activity.py +636 -0
- webview/owner_auth.py +108 -0
- webview/pages.py +448 -0
- webview/repair_sessions.py +399 -0
- webview/server.py +4323 -0
- webview/server_launcher.py +112 -0
- webview/static/css/activity.css +89 -0
- webview/static/css/chat.css +1772 -0
- webview/static/css/components.css +1190 -0
- webview/static/css/config-panel.css +651 -0
- webview/static/css/pages/admin.css +766 -0
- webview/static/css/pages/profile.css +231 -0
- webview/static/css/pages/settings.css +297 -0
- webview/static/css/pages/signin.css +316 -0
- webview/static/css/style.css +4250 -0
- webview/static/css/variables.css +147 -0
- webview/static/css/workspace-fullwidth-fix.css +109 -0
- webview/static/img/favicon.ico +0 -0
- webview/static/js/activity.js +394 -0
- webview/static/js/admin/activity.js +186 -0
- webview/static/js/admin/dashboard.js +163 -0
- webview/static/js/admin/user_detail.js +400 -0
- webview/static/js/admin/users.js +174 -0
- webview/static/js/admin/utils.js +214 -0
- webview/static/js/chat.js +3178 -0
- webview/static/js/config-panel.js +522 -0
- webview/static/js/constants.js +20 -0
- webview/static/js/error-handler.js +226 -0
- webview/static/js/ethers.min.js +1 -0
- webview/static/js/event-filter.js +137 -0
- webview/static/js/event-store.js +351 -0
- webview/static/js/file-attachments.js +374 -0
- webview/static/js/file-loader.js +163 -0
- webview/static/js/index.js +103 -0
- webview/static/js/performance-utils.js +196 -0
- webview/static/js/profile.js +396 -0
- webview/static/js/screenshot.js +386 -0
- webview/static/js/session.js +1527 -0
- webview/static/js/settings.js +1288 -0
- webview/static/js/sidebar-data.js +766 -0
- webview/static/js/sidebar-toggle.js +296 -0
- webview/static/js/socket.io.min.js +7 -0
- webview/static/js/stats.js +355 -0
- webview/static/js/ui-utils.js +420 -0
- webview/static/js/workspace.js +966 -0
- webview/stats_service.py +613 -0
- webview/templates/__init__.py +1 -0
- webview/templates/__pycache__/__init__.cpython-311.pyc +0 -0
- webview/templates/activity.html +36 -0
- webview/templates/admin/activity.html +122 -0
- webview/templates/admin/dashboard.html +112 -0
- webview/templates/admin/user_detail.html +228 -0
- webview/templates/admin/users.html +105 -0
- webview/templates/autonomy.html +60 -0
- webview/templates/error.html +133 -0
- webview/templates/finance.html +90 -0
- webview/templates/identity.html +73 -0
- webview/templates/index.html +42 -0
- webview/templates/layout.html +125 -0
- webview/templates/memory.html +59 -0
- webview/templates/owner_login.html +15 -0
- webview/templates/profile.html +121 -0
- webview/templates/session.html +312 -0
- webview/templates/settings.html +534 -0
- webview/templates/sidebar.html +112 -0
- webview/templates/signin.html +213 -0
- webview/templates/status.html +14 -0
- webview/templates/system.html +45 -0
- webview/webgate.py +196 -0
agents/README.md
ADDED
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
# Agents Package - AI Agent System
|
|
2
|
+
|
|
3
|
+
_Last reviewed: 2026-06-30. For the authoritative architecture see ../AGENTS.md; for env flags see ../docs/CONFIGURATION.md._
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The `agents` package provides the POLYROB platform's agent system. As of the 2026 chat consolidation,
|
|
8
|
+
there is a **single** primary agent — the Task agent (`TaskAgent`, exported from `agents/__init__.py`)
|
|
9
|
+
— which handles both task automation and conversational chat (the former `ChatAgent` was removed and
|
|
10
|
+
its chat path folded into `TaskAgent.chat_once`). The package also provides the personality/character
|
|
11
|
+
system and the system-prompt support used by the Task agent.
|
|
12
|
+
|
|
13
|
+
## Architecture Philosophy
|
|
14
|
+
|
|
15
|
+
- **Single front-door agent**: one Task agent core serves both task automation and chat
|
|
16
|
+
- **Mixin composition over god-files**: the four large classes (`Agent`, `SessionOrchestrator`,
|
|
17
|
+
`MessageManager`, `Controller`) each compose focused mixins rather than growing one file; new
|
|
18
|
+
behavior gets its own mixin/module (see ../AGENTS.md "Decomposition note")
|
|
19
|
+
- **Personality-driven**: a `Character` system feeds personality/style into the system prompt
|
|
20
|
+
- **Provider flexibility**: multiple LLM providers with intelligent fallback (native LLM layer)
|
|
21
|
+
- **Preserve LLM content, never synthesize**: brain state is extracted from preserved content
|
|
22
|
+
- **Single source of truth per concern**: e.g. `ToolCallTracker` for tool-call IDs
|
|
23
|
+
|
|
24
|
+
## Package Structure
|
|
25
|
+
|
|
26
|
+
Only directories/files that exist are listed; the agent core is mixin-based, so the file count under
|
|
27
|
+
`task/agent/core/` is large — representative files are shown.
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
agents/
|
|
31
|
+
├── __init__.py # Lazy package exports (TaskAgent, BaseAgent, managers) + registry
|
|
32
|
+
├── README.md # This documentation
|
|
33
|
+
├── base_agent.py # Abstract base class (BaseAgent) for agents
|
|
34
|
+
├── task_agent_lite.py # TaskAgent wrapper + SessionRequest (incl. chat_once)
|
|
35
|
+
│
|
|
36
|
+
├── personality/ # Character and personality system
|
|
37
|
+
│ ├── character.py # Character (class Character(BaseComponent))
|
|
38
|
+
│ ├── character_manager.py # Character lifecycle management
|
|
39
|
+
│ ├── persona_render.py # Persona/style rendering helpers
|
|
40
|
+
│ └── characters/ # Character definition files
|
|
41
|
+
│ ├── rob.character.json # Default POLYROB character
|
|
42
|
+
│ └── trump.character.json # Example character
|
|
43
|
+
│
|
|
44
|
+
├── prompt/ # System-prompt support
|
|
45
|
+
│ ├── __init__.py
|
|
46
|
+
│ ├── base_prompt.py # BasePromptManager (file-based prompt storage)
|
|
47
|
+
│ └── system.py # SystemPromptManager (prompt orchestration)
|
|
48
|
+
│
|
|
49
|
+
└── task/ # Task automation subsystem
|
|
50
|
+
├── __init__.py
|
|
51
|
+
├── config.py # Task configuration
|
|
52
|
+
├── constants.py # Task constants + AutonomyConfig / local-mode flags
|
|
53
|
+
├── logging_config.py # Task logging configuration
|
|
54
|
+
├── path.py # Centralized path manager (pm())
|
|
55
|
+
├── tool_defaults.py # Default tool_ids resolution
|
|
56
|
+
├── templates.py # Agent/session templates
|
|
57
|
+
├── surface_config.py # Per-surface config
|
|
58
|
+
├── session_registry.py # In-process session→orchestrator map (SessionRegistry)
|
|
59
|
+
├── sqlite_session_registry.py # SQLite-backed cross-process variant (opt-in)
|
|
60
|
+
├── session_route.py # Session routing classification (LOCAL/REMOTE/MISSING)
|
|
61
|
+
├── workspace_context.py # Workspace context
|
|
62
|
+
├── runtime_safety.py # Safety controls
|
|
63
|
+
├── utils.py / utils_json.py / utils_webview.py / robust_parse_config.py
|
|
64
|
+
│
|
|
65
|
+
├── agent/ # Task agent implementation (mixin-based)
|
|
66
|
+
│ ├── __init__.py
|
|
67
|
+
│ ├── service.py # class Agent(... mixins ...) — step/run loop core
|
|
68
|
+
│ ├── orchestrator.py # class SessionOrchestrator(... mixins ...)
|
|
69
|
+
│ ├── session.py # SessionStatus enum + SessionManager
|
|
70
|
+
│ ├── agent_state.py # Agent state tracking
|
|
71
|
+
│ ├── views.py # View models (AgentHistoryList, AgentError, etc.)
|
|
72
|
+
│ ├── prompts.py # Task-specific prompt construction
|
|
73
|
+
│ ├── tool_call_tracker.py # ToolCallTracker — SINGLE source of truth for call IDs
|
|
74
|
+
│ ├── hitl_manager.py # Human-in-the-loop
|
|
75
|
+
│ ├── profile_manager.py / profile_registry.py / scenario_registry.py
|
|
76
|
+
│ ├── conversation.py # Conversation / Turn (chat plumbing)
|
|
77
|
+
│ ├── skill_manager.py # SkillManager(SkillWriterMixin) — skill match/load
|
|
78
|
+
│ ├── skill_writer.py # SkillWriterMixin — create/patch/delete/promote (writable skills)
|
|
79
|
+
│ ├── sub_agent_manager.py # SubAgentManager — delegation (run_subtask / parallel)
|
|
80
|
+
│ ├── async_delegation.py # AsyncDelegationRegistry — background delegation results
|
|
81
|
+
│ ├── log_sanitize.py
|
|
82
|
+
│ │
|
|
83
|
+
│ ├── core/ # Step loop, construction, and agent-intelligence concerns (mixins)
|
|
84
|
+
│ │ ├── construction.py # AgentConstructionMixin — wiring at session start
|
|
85
|
+
│ │ ├── run_loop.py # RunLoopMixin.run() — the multi-step run loop
|
|
86
|
+
│ │ ├── step.py # StepMixin — _prepare_step / _call_llm / _record_step / _finalize_step
|
|
87
|
+
│ │ ├── step_execution.py # StepExecutionMixin — _execute_actions
|
|
88
|
+
│ │ ├── result_processing.py# ResultProcessingMixin — _process_action_results
|
|
89
|
+
│ │ ├── step_telemetry.py # StepTelemetryMixin
|
|
90
|
+
│ │ ├── llm_runner.py # LLMRunnerMixin — LLM invocation + provider fallback
|
|
91
|
+
│ │ ├── llm_provisioning.py # LLMProvisioningMixin — main/aux/judge LLM provisioning
|
|
92
|
+
│ │ ├── memory_writer.py # MemoryWriterMixin — H-MEM writes + summaries
|
|
93
|
+
│ │ ├── memory_prefetch.py # MemoryPrefetchMixin — recall injection
|
|
94
|
+
│ │ ├── output_validation.py# OutputValidationMixin — _validate_output (judge)
|
|
95
|
+
│ │ ├── error_recovery.py # ErrorRecoveryMixin — _handle_step_error / billing failover
|
|
96
|
+
│ │ ├── loop_detection.py # LoopDetectionMixin
|
|
97
|
+
│ │ ├── conversational_exit.py # 2-reply-only-step turn end
|
|
98
|
+
│ │ ├── correspondent_gate.py # Capability gate for correspondent-tainted sessions
|
|
99
|
+
│ │ ├── untrusted_wrap.py # <untrusted_tool_result> framing
|
|
100
|
+
│ │ ├── background_review.py# BackgroundReviewMixin — post-turn aux reviewer fork
|
|
101
|
+
│ │ ├── self_wake.py # Self-wake re-entry rail
|
|
102
|
+
│ │ ├── curator.py # Skill curator (stale/archive/reactivate)
|
|
103
|
+
│ │ ├── secret_guard.py / safety_lifecycle.py / project_context.py
|
|
104
|
+
│ │ ├── history_io.py / logging_io.py / session_metadata.py / resources.py
|
|
105
|
+
│ │ ├── turn_input.py / user_ingress.py / next_action_internal.py
|
|
106
|
+
│ │ └── model_introspection.py
|
|
107
|
+
│ │
|
|
108
|
+
│ ├── messages/ # MessageManager concern mixins
|
|
109
|
+
│ │ ├── token_counter.py # TokenCounterMixin
|
|
110
|
+
│ │ ├── compactor.py # CompactorMixin — context compaction / LLM synthesis
|
|
111
|
+
│ │ ├── persistence.py # PersistenceMixin — checkpoint/disk (JSON source of truth)
|
|
112
|
+
│ │ ├── sqlite_persistence.py # SqlitePersistenceMixin — opt-in durable write-mirror
|
|
113
|
+
│ │ ├── filters.py # FiltersMixin — sensitive-data scrub, tool-sequence repair
|
|
114
|
+
│ │ ├── guidance.py # GuidanceMixin — injected guidance/control messages
|
|
115
|
+
│ │ ├── builders.py # MessageBuildersMixin
|
|
116
|
+
│ │ ├── retrieval.py # MessageRetrievalMixin — get_messages_for_llm
|
|
117
|
+
│ │ └── context_references.py # @-context references
|
|
118
|
+
│ │
|
|
119
|
+
│ └── message_manager/ # MessageManager façade + tool-call plumbing
|
|
120
|
+
│ ├── service.py # class MessageManager(... messages/ mixins ...)
|
|
121
|
+
│ ├── config.py / views.py
|
|
122
|
+
│ ├── tool_call_builder.py # ToolCallBuilder — format normalization only
|
|
123
|
+
│ └── tool_message_repair.py
|
|
124
|
+
│
|
|
125
|
+
├── session/ # SessionOrchestrator concern mixins
|
|
126
|
+
│ ├── browser_pool.py # BrowserPoolMixin
|
|
127
|
+
│ ├── multi_agent.py # MultiAgentMixin
|
|
128
|
+
│ ├── feed.py # FeedMixin
|
|
129
|
+
│ ├── workspace.py # WorkspaceMixin
|
|
130
|
+
│ ├── execution.py # SessionExecutionMixin (run_session)
|
|
131
|
+
│ ├── cleanup.py # SessionCleanupMixin
|
|
132
|
+
│ ├── hitl_ingress.py # HITLIngressMixin
|
|
133
|
+
│ └── hooks.py # SessionHooksMixin — session/subagent lifecycle hooks
|
|
134
|
+
│
|
|
135
|
+
├── goals/ # Durable goal board (autonomy W4)
|
|
136
|
+
│ ├── board.py # Goal + GoalBoard (data/goals.db, atomic CAS claim)
|
|
137
|
+
│ └── dispatcher.py # GoalDispatcher + GoalTicker
|
|
138
|
+
│
|
|
139
|
+
├── runtime/ # Shared run-as-session entrypoint
|
|
140
|
+
│ └── run_as_session.py # run_task_as_session() (used by cron/goals)
|
|
141
|
+
│
|
|
142
|
+
└── telemetry/ # Task telemetry system
|
|
143
|
+
├── service.py / manager.py / formatters.py / sequence.py / views.py
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Core Agent System
|
|
147
|
+
|
|
148
|
+
### BaseAgent (`base_agent.py`)
|
|
149
|
+
|
|
150
|
+
Abstract base class (`class BaseAgent(BaseComponent)`) providing standardized agent lifecycle and
|
|
151
|
+
common LLM/character plumbing. `TaskAgent` subclasses it.
|
|
152
|
+
|
|
153
|
+
**Selected interface** (see the source for the full surface):
|
|
154
|
+
```python
|
|
155
|
+
class BaseAgent(BaseComponent):
|
|
156
|
+
def __init__(self, *, config: BotConfig, container: DependencyContainer, name: str): ...
|
|
157
|
+
async def process_input(self, input_text: str, context_id: str, **kwargs) -> str: ...
|
|
158
|
+
async def start_conversation(self, user_id: str, **kwargs) -> bool: ...
|
|
159
|
+
async def set_character(self, character: "Character") -> None: ...
|
|
160
|
+
async def set_llm_client(self, client_name: str) -> bool: ...
|
|
161
|
+
async def generate_response(self, messages, **kwargs) -> str: ...
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**Lifecycle states** (inherited from `BaseComponent`): uninitialized → initializing → ready →
|
|
165
|
+
processing → error / cleaning-up. These are the *component* lifecycle states, distinct from a
|
|
166
|
+
running task session's `SessionStatus` (below).
|
|
167
|
+
|
|
168
|
+
### Conversational chat
|
|
169
|
+
|
|
170
|
+
There is no longer a separate `ChatAgent` class. Conversational chat is served by the Task agent
|
|
171
|
+
via `TaskAgent.chat_once(...)` (`task_agent_lite.py`) — a single-turn entry point used by the
|
|
172
|
+
OpenAI-compatible `/v1/chat/completions` surface and other chat front-doors. This collapsed the
|
|
173
|
+
previously separate chat code path into one agent core.
|
|
174
|
+
|
|
175
|
+
### TaskAgent (`task_agent_lite.py`)
|
|
176
|
+
|
|
177
|
+
The platform's single primary agent: a session manager that creates `SessionOrchestrator`s and
|
|
178
|
+
handles both complex multi-step task automation and conversational chat. Active orchestrators are
|
|
179
|
+
held behind **SessionRegistry** (`task/session_registry.py`) — use
|
|
180
|
+
`get_orchestrator`/`register_orchestrator`/`remove_orchestrator`, never the dict directly.
|
|
181
|
+
|
|
182
|
+
**Features**:
|
|
183
|
+
- Session management for long-running tasks (`create_session` / `run_session`)
|
|
184
|
+
- Browser automation via Playwright (opt-in tool)
|
|
185
|
+
- Service integration (email, social media, documents)
|
|
186
|
+
- Task decomposition and planning
|
|
187
|
+
- Conversational chat via `chat_once`
|
|
188
|
+
- Human-in-the-loop controls
|
|
189
|
+
|
|
190
|
+
## Task Automation Subsystem (`task/`)
|
|
191
|
+
|
|
192
|
+
### SessionRequest (`task_agent_lite.py`)
|
|
193
|
+
|
|
194
|
+
The request shape passed to `TaskAgent.create_session(...)` (defined alongside `TaskAgent`, **not**
|
|
195
|
+
in `orchestrator.py`):
|
|
196
|
+
```python
|
|
197
|
+
@dataclass
|
|
198
|
+
class SessionRequest:
|
|
199
|
+
task: str # Task description
|
|
200
|
+
model: str = "gpt-5" # LLM model (overridden by env/key resolution)
|
|
201
|
+
provider: str = "openai" # LLM provider
|
|
202
|
+
tools: List[str] = None # → ["browser", "filesystem", "task"] if None
|
|
203
|
+
max_steps: int = 50 # Maximum automation steps
|
|
204
|
+
use_vision: bool = True # Enable vision capabilities
|
|
205
|
+
```
|
|
206
|
+
Note: actual provider/model are resolved at chat/session time from whichever API key is present
|
|
207
|
+
(see `_resolve_chat_provider_model` and the shared runtime resolver), so the `gpt-5`/`openai`
|
|
208
|
+
defaults rarely win in practice.
|
|
209
|
+
|
|
210
|
+
### SessionStatus (`task/agent/session.py`)
|
|
211
|
+
|
|
212
|
+
Session lifecycle is tracked by `SessionStatus` (an `Enum`). The valid states are:
|
|
213
|
+
- `CREATED` — initial state after creation
|
|
214
|
+
- `RUNNING` — currently executing
|
|
215
|
+
- `COMPLETED` — finished successfully (waiting for a possible follow-up)
|
|
216
|
+
- `RESUMED` — continuous-chat resume (transitional)
|
|
217
|
+
- `SUSPENDED` — evicted from memory, persisted to disk
|
|
218
|
+
- `FAILED` — execution failed
|
|
219
|
+
- `CANCELLED` — user cancelled (terminal)
|
|
220
|
+
|
|
221
|
+
There is **no** `PENDING` or `PAUSED` state. `PAUSED` was removed in favor of `CANCELLED` for user
|
|
222
|
+
interruption; follow-up messages use the `COMPLETED → RESUMED` flow. Transitions are enforced by
|
|
223
|
+
`SessionManager` (`session.py`).
|
|
224
|
+
|
|
225
|
+
### Agent (`task/agent/service.py`)
|
|
226
|
+
|
|
227
|
+
The task-execution core is `class Agent`, composed from many focused mixins (run loop, step phases,
|
|
228
|
+
LLM runner, memory, error recovery, output validation, loop detection, etc.) via MRO:
|
|
229
|
+
|
|
230
|
+
```python
|
|
231
|
+
class Agent(AgentConstructionMixin, RunLoopMixin, StepMixin, StepExecutionMixin,
|
|
232
|
+
StepTelemetryMixin, ResultProcessingMixin, LLMRunnerMixin,
|
|
233
|
+
NextActionInternalMixin, ErrorRecoveryMixin, OutputValidationMixin,
|
|
234
|
+
MemoryWriterMixin, MemoryPrefetchMixin, BackgroundReviewMixin,
|
|
235
|
+
HistoryIOMixin, LoggingIOMixin, SafetyLifecycleMixin, UserIngressMixin,
|
|
236
|
+
TurnInputMixin, LLMProvisioningMixin, ModelIntrospectionMixin,
|
|
237
|
+
LoopDetectionMixin, ResourceMixin, SessionMetadataMixin):
|
|
238
|
+
...
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
Construction uses two dataclasses — `Agent.__init__(self, config: AgentConfig, deps: AgentDeps)`
|
|
242
|
+
(use `Agent.from_params(**kwargs)` for the legacy kwarg form). There are **no** `run_task()` /
|
|
243
|
+
`pause()` / `resume()` / `cancel()` methods on `Agent`; execution is the run loop plus per-step
|
|
244
|
+
phases.
|
|
245
|
+
|
|
246
|
+
**Run loop** — `RunLoopMixin.run(max_steps=100, _continue_session=False)` (`core/run_loop.py`)
|
|
247
|
+
drives the session, returning an `AgentHistoryList`. It calls `step()` repeatedly until the agent is
|
|
248
|
+
done, an error halts it, or a guard (conversational-exit, loop-detection, max-steps) fires.
|
|
249
|
+
|
|
250
|
+
**Step phases** — a single step (`StepMixin._step_impl`, `core/step.py`) is split into phases:
|
|
251
|
+
`_prepare_step` → `_call_llm` → `_validate_and_intervene` → `_execute_actions` →
|
|
252
|
+
`_process_action_results` → `_record_step` → `_finalize_step`. `_execute_actions` lives in
|
|
253
|
+
`StepExecutionMixin` (`core/step_execution.py`); `_process_action_results` in `ResultProcessingMixin`
|
|
254
|
+
(`core/result_processing.py`).
|
|
255
|
+
|
|
256
|
+
**Tool-call flow** (native tools): LLM returns `tool_calls` → `ToolCallBuilder.normalize_tool_call()`
|
|
257
|
+
(format only) → `ToolCallTracker.register_tool_calls()` (ID tracking, single source of truth) →
|
|
258
|
+
`Registry.tool_calls_to_actions()` (Pydantic validation) → `Controller.multi_act()` (execution) →
|
|
259
|
+
`MessageManager.add_tool_response()` → `ToolCallTracker.complete_step()`.
|
|
260
|
+
|
|
261
|
+
### SessionOrchestrator (`task/agent/orchestrator.py`)
|
|
262
|
+
|
|
263
|
+
Coordinates a session's agents, services and browser contexts across the lifecycle. Like `Agent`,
|
|
264
|
+
it composes its concerns from mixins under `task/session/`:
|
|
265
|
+
|
|
266
|
+
```python
|
|
267
|
+
class SessionOrchestrator(WorkspaceMixin, FeedMixin, MultiAgentMixin, BrowserPoolMixin,
|
|
268
|
+
HITLIngressMixin, SessionCleanupMixin, SessionExecutionMixin,
|
|
269
|
+
SessionHooksMixin):
|
|
270
|
+
...
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
`SessionExecutionMixin.run_session` runs the agent loop for a session; `SessionHooksMixin` provides
|
|
274
|
+
fail-open session + sub-agent start/end lifecycle hooks.
|
|
275
|
+
|
|
276
|
+
### MessageManager (`task/agent/message_manager/service.py`)
|
|
277
|
+
|
|
278
|
+
Message storage + retrieval, composed from the `task/agent/messages/` mixins:
|
|
279
|
+
|
|
280
|
+
```python
|
|
281
|
+
class MessageManager(TokenCounterMixin, CompactorMixin, PersistenceMixin, FiltersMixin,
|
|
282
|
+
GuidanceMixin, MessageBuildersMixin, MessageRetrievalMixin):
|
|
283
|
+
...
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
Token math, compaction (synthesis), persistence and filters live in the mixins, not inline. JSON
|
|
287
|
+
(`message_history.json`) is the source of truth; `MESSAGE_STORE_BACKEND=sqlite` adds a write-only
|
|
288
|
+
durable mirror.
|
|
289
|
+
|
|
290
|
+
### Telemetry System (`task/telemetry/`)
|
|
291
|
+
|
|
292
|
+
Per-step telemetry: step tracking, token usage, cost calculation, performance metrics and session
|
|
293
|
+
analytics (`service.py`, `manager.py`, `formatters.py`, `sequence.py`, `views.py`).
|
|
294
|
+
|
|
295
|
+
### Autonomy: goals & runtime
|
|
296
|
+
|
|
297
|
+
- `task/goals/board.py` — `Goal` + `GoalBoard`: a durable cross-session backlog (`data/goals.db`,
|
|
298
|
+
WAL + jitter) with atomic CAS `claim` (safe under `workers>1`), a circuit breaker, and tenant
|
|
299
|
+
scoping. `task/goals/dispatcher.py` — `GoalDispatcher` / `GoalTicker` run claimed goals via
|
|
300
|
+
`create_session` + `run_session`.
|
|
301
|
+
- `task/runtime/run_as_session.py` — `run_task_as_session()`, the shared entrypoint used by the
|
|
302
|
+
cron and goal executors to run a one-off task as a full session.
|
|
303
|
+
|
|
304
|
+
These tickers are wired by the shared autonomy runtime (`core/autonomy_runtime.py`), not directly by
|
|
305
|
+
this package; see ../AGENTS.md "Shared autonomy runtime".
|
|
306
|
+
|
|
307
|
+
## Personality System (`personality/`)
|
|
308
|
+
|
|
309
|
+
### Character Model (`character.py`)
|
|
310
|
+
|
|
311
|
+
Rich character/personality definition. It is a `BaseComponent` subclass (**not** a `@dataclass`):
|
|
312
|
+
|
|
313
|
+
```python
|
|
314
|
+
class Character(BaseComponent):
|
|
315
|
+
def __init__(self, name: str, config: BotConfig, container=None): ...
|
|
316
|
+
# attributes initialized in _initialize_attributes():
|
|
317
|
+
# name, modelProvider ("anthropic"), settings, bio, lore,
|
|
318
|
+
# knowledge, topics, adjectives, style
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
Loaded from `personality/characters/*.character.json`; the attributes drive the personality/style
|
|
322
|
+
injected into the agent's system prompt.
|
|
323
|
+
|
|
324
|
+
### CharacterManager (`character_manager.py`)
|
|
325
|
+
|
|
326
|
+
Central orchestrator for character lifecycle (load from file, role/default resolution, hot-reload).
|
|
327
|
+
|
|
328
|
+
### Character Configuration Example
|
|
329
|
+
|
|
330
|
+
```json
|
|
331
|
+
{
|
|
332
|
+
"name": "POLYROB",
|
|
333
|
+
"bio": "An advanced AI assistant with expertise in automation and problem-solving.",
|
|
334
|
+
"modelProvider": "anthropic",
|
|
335
|
+
"settings": { "temperature": 0.7, "maxTokens": 4096 },
|
|
336
|
+
"adjectives": ["helpful", "knowledgeable", "patient", "efficient"],
|
|
337
|
+
"style": { "speaking": ["clear", "concise", "professional"], "tone": "friendly yet focused" },
|
|
338
|
+
"topics": ["automation", "productivity", "technology", "problem-solving"],
|
|
339
|
+
"knowledge": [
|
|
340
|
+
"Web automation and browser control",
|
|
341
|
+
"Document processing and analysis",
|
|
342
|
+
"API integration and data handling"
|
|
343
|
+
]
|
|
344
|
+
}
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
## Prompt Engineering System (`prompt/`)
|
|
348
|
+
|
|
349
|
+
### SystemPromptManager (`prompt/system.py`)
|
|
350
|
+
|
|
351
|
+
Orchestrates system-prompt generation with character integration. (Note: the *Task* agent builds its
|
|
352
|
+
own session system prompt via `task/agent/prompts.py`; the `prompt/` package provides the shared
|
|
353
|
+
prompt-manager components registered as services.)
|
|
354
|
+
|
|
355
|
+
### BasePromptManager (`prompt/base_prompt.py`)
|
|
356
|
+
|
|
357
|
+
Base class for prompt management with file-based prompt storage.
|
|
358
|
+
|
|
359
|
+
## Agent Registry
|
|
360
|
+
|
|
361
|
+
Exports in `agents/__init__.py` are **lazy** (PEP 562 `__getattr__`) so importing the package is
|
|
362
|
+
cheap; `TaskAgent` is only imported when actually resolved.
|
|
363
|
+
|
|
364
|
+
```python
|
|
365
|
+
# AGENT_METADATA (built lazily)
|
|
366
|
+
{
|
|
367
|
+
'task_agent': {
|
|
368
|
+
'class': TaskAgent,
|
|
369
|
+
'description': 'Task agent',
|
|
370
|
+
'is_core': False,
|
|
371
|
+
'optional': True,
|
|
372
|
+
'required_services': ['llm'],
|
|
373
|
+
'optional_services': [
|
|
374
|
+
'filesystem', 'perplexity', 'websearch',
|
|
375
|
+
'twitter', 'email', 'cache_manager',
|
|
376
|
+
],
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
# AGENT_COMPONENTS (built lazily): [('task_agent', TaskAgent, 'Task agent', True, {...})]
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
## Initialization
|
|
384
|
+
|
|
385
|
+
```python
|
|
386
|
+
async def initialize_shared_components(container: DependencyContainer):
|
|
387
|
+
"""Initialize shared components used by agents (system prompt + character managers)."""
|
|
388
|
+
# registers 'system_prompt_manager' and 'character_manager' if absent,
|
|
389
|
+
# then marks the 'shared_components' group initialized
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
## Usage Examples
|
|
393
|
+
|
|
394
|
+
### Conversational chat
|
|
395
|
+
```python
|
|
396
|
+
task_agent = container.get_service('task_agent')
|
|
397
|
+
response = await task_agent.chat_once(text="Help me with productivity", user_id="user123")
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
### Task agent session
|
|
401
|
+
```python
|
|
402
|
+
session = await task_agent.create_session(SessionRequest(
|
|
403
|
+
task="Research AI trends and create a summary report",
|
|
404
|
+
tools=["browser", "filesystem"],
|
|
405
|
+
max_steps=30,
|
|
406
|
+
))
|
|
407
|
+
result = await task_agent.run_session(session.session_id)
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
### Character loading
|
|
411
|
+
```python
|
|
412
|
+
character = await character_manager.load_character("researcher")
|
|
413
|
+
# Characters drive the personality/style injected into the agent's system prompt
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
## Best Practices
|
|
417
|
+
|
|
418
|
+
### Agent / core development
|
|
419
|
+
1. **Add a mixin, don't grow a god-file**: new `Agent` / `SessionOrchestrator` / `MessageManager` /
|
|
420
|
+
`Controller` behavior gets its own mixin module (see ../AGENTS.md "Decomposition note").
|
|
421
|
+
2. **Preserve LLM content**: extract brain state from preserved content; never synthesize it.
|
|
422
|
+
3. **Single source of truth**: tool-call IDs go through `ToolCallTracker`, sessions through
|
|
423
|
+
`SessionRegistry`.
|
|
424
|
+
4. **Registry-closure landmine**: action-registration modules deliberately do **not** use
|
|
425
|
+
`from __future__ import annotations` (it stringizes closure param annotations the Registry
|
|
426
|
+
introspects).
|
|
427
|
+
5. **Fail fast with clear errors** — don't paper over problems with cascades of fallbacks.
|
|
428
|
+
|
|
429
|
+
### Task automation
|
|
430
|
+
1. **Step limits**: set an appropriate `max_steps`.
|
|
431
|
+
2. **Tool selection**: only enable necessary tools (MCP/browser/coding are opt-in, not defaults).
|
|
432
|
+
3. **Session cleanup**: clean up completed/failed sessions.
|
|
433
|
+
4. **Human-in-the-loop**: support HITL for critical actions.
|
|
434
|
+
|
|
435
|
+
### Character design
|
|
436
|
+
1. **Consistent personality** across interactions; **domain expertise** aligned with use cases.
|
|
437
|
+
2. **Clear style guidelines** and testing across scenarios.
|
|
438
|
+
|
|
439
|
+
## Exports
|
|
440
|
+
|
|
441
|
+
```python
|
|
442
|
+
__all__ = [
|
|
443
|
+
'BaseAgent',
|
|
444
|
+
'TaskAgent',
|
|
445
|
+
'SystemPromptManager',
|
|
446
|
+
'BasePromptManager',
|
|
447
|
+
'CharacterManager',
|
|
448
|
+
'initialize_shared_components',
|
|
449
|
+
'AGENT_COMPONENTS',
|
|
450
|
+
'AGENT_METADATA',
|
|
451
|
+
'TASK_PACKAGE_AVAILABLE',
|
|
452
|
+
]
|
|
453
|
+
```
|
agents/__init__.py
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"""Agents package for bot components.
|
|
2
|
+
|
|
3
|
+
Lazy package (PEP 562): importing `agents` (or any `agents.*` submodule) must NOT eager-load
|
|
4
|
+
the agent/LLM/Telegram stack. Heavy re-exports (BaseAgent, the prompt managers, CharacterManager,
|
|
5
|
+
TaskAgent) and the agent-metadata tables load on first attribute access. This keeps leaf imports
|
|
6
|
+
like `agents.task.constants` import-light for the CLI and server worker boot.
|
|
7
|
+
See docs/plans/2026-06-26-runtime-architecture-finalization-FUSION.md (P0b).
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import logging
|
|
11
|
+
from typing import TYPE_CHECKING, Optional, Dict, Any
|
|
12
|
+
|
|
13
|
+
from core.container import DependencyContainer
|
|
14
|
+
from core.exceptions import ComponentInitializationError
|
|
15
|
+
|
|
16
|
+
logger = logging.getLogger(__name__)
|
|
17
|
+
|
|
18
|
+
# name -> (relative module, attribute) resolved lazily by __getattr__
|
|
19
|
+
_LAZY_ATTRS = {
|
|
20
|
+
"BaseAgent": (".base_agent", "BaseAgent"),
|
|
21
|
+
"SystemPromptManager": (".prompt", "SystemPromptManager"),
|
|
22
|
+
"BasePromptManager": (".prompt", "BasePromptManager"),
|
|
23
|
+
"CharacterManager": (".personality.character_manager", "CharacterManager"),
|
|
24
|
+
"TaskAgent": (".task_agent_lite", "TaskAgent"),
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if TYPE_CHECKING: # static analysis / IDEs only — no runtime import
|
|
28
|
+
from .base_agent import BaseAgent
|
|
29
|
+
from .prompt import SystemPromptManager, BasePromptManager
|
|
30
|
+
from .personality.character_manager import CharacterManager
|
|
31
|
+
from .task_agent_lite import TaskAgent
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _task_package_available() -> bool:
|
|
35
|
+
"""True if the task agent subpackage is importable. Pays the import only when called."""
|
|
36
|
+
try:
|
|
37
|
+
from .task.agent.orchestrator import SessionOrchestrator # noqa: F401
|
|
38
|
+
return True
|
|
39
|
+
except ImportError:
|
|
40
|
+
return False
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
_AGENT_OPTIONAL_SERVICES = [
|
|
44
|
+
'filesystem', 'perplexity', 'websearch', 'twitter', 'email', 'cache_manager',
|
|
45
|
+
]
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def _build_agent_components():
|
|
49
|
+
"""Agent init order with deps. Lazily imports TaskAgent (captures the class object)."""
|
|
50
|
+
from .task_agent_lite import TaskAgent
|
|
51
|
+
return [
|
|
52
|
+
('task_agent', TaskAgent, 'Task agent', True, {
|
|
53
|
+
'required_services': ['llm'],
|
|
54
|
+
'optional_services': list(_AGENT_OPTIONAL_SERVICES),
|
|
55
|
+
})
|
|
56
|
+
]
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _build_agent_metadata():
|
|
60
|
+
"""Agent metadata for consistent naming. Lazily imports TaskAgent."""
|
|
61
|
+
from .task_agent_lite import TaskAgent
|
|
62
|
+
return {
|
|
63
|
+
'task_agent': {
|
|
64
|
+
'class': TaskAgent,
|
|
65
|
+
'description': 'Task agent',
|
|
66
|
+
'is_core': False,
|
|
67
|
+
'optional': True,
|
|
68
|
+
'required_services': ['llm'],
|
|
69
|
+
'optional_services': list(_AGENT_OPTIONAL_SERVICES),
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
async def initialize_shared_components(container: DependencyContainer) -> None:
|
|
75
|
+
"""Initialize shared components used by agents."""
|
|
76
|
+
from .prompt import SystemPromptManager
|
|
77
|
+
from .personality.character_manager import CharacterManager
|
|
78
|
+
try:
|
|
79
|
+
# Initialize required shared components first
|
|
80
|
+
if not container.has_service('system_prompt_manager'):
|
|
81
|
+
logger.debug("Creating system prompt manager")
|
|
82
|
+
system_prompt_manager = SystemPromptManager(
|
|
83
|
+
name='system_prompt_manager',
|
|
84
|
+
config=container.config,
|
|
85
|
+
container=container
|
|
86
|
+
)
|
|
87
|
+
await system_prompt_manager.initialize()
|
|
88
|
+
container.register_service('system_prompt_manager', system_prompt_manager)
|
|
89
|
+
logger.info("✓ System prompt manager initialized")
|
|
90
|
+
|
|
91
|
+
# Initialize character manager
|
|
92
|
+
if not container.has_service('character_manager'):
|
|
93
|
+
logger.debug("Creating character manager")
|
|
94
|
+
character_manager = CharacterManager(
|
|
95
|
+
name='character_manager',
|
|
96
|
+
config=container.config,
|
|
97
|
+
container=container
|
|
98
|
+
)
|
|
99
|
+
await character_manager.initialize()
|
|
100
|
+
container.register_service('character_manager', character_manager)
|
|
101
|
+
logger.info("✓ Character manager initialized")
|
|
102
|
+
|
|
103
|
+
# Mark shared components as initialized
|
|
104
|
+
container.mark_component_group_initialized('shared_components')
|
|
105
|
+
|
|
106
|
+
except Exception as e:
|
|
107
|
+
logger.error(f"Shared component initialization failed: {e}")
|
|
108
|
+
raise
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
# Names computed lazily (cached into globals() on first access).
|
|
112
|
+
_LAZY_COMPUTED = {
|
|
113
|
+
"TASK_PACKAGE_AVAILABLE": _task_package_available,
|
|
114
|
+
"AGENT_COMPONENTS": _build_agent_components,
|
|
115
|
+
"AGENT_METADATA": _build_agent_metadata,
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def __getattr__(name: str):
|
|
120
|
+
"""PEP 562 lazy attribute resolution; caches into globals() so it fires once per name."""
|
|
121
|
+
if name in _LAZY_ATTRS:
|
|
122
|
+
import importlib
|
|
123
|
+
module_path, attr = _LAZY_ATTRS[name]
|
|
124
|
+
value = getattr(importlib.import_module(module_path, __name__), attr)
|
|
125
|
+
globals()[name] = value
|
|
126
|
+
return value
|
|
127
|
+
if name in _LAZY_COMPUTED:
|
|
128
|
+
value = _LAZY_COMPUTED[name]()
|
|
129
|
+
globals()[name] = value
|
|
130
|
+
return value
|
|
131
|
+
if name == "__package_info__":
|
|
132
|
+
return {"task_package_available": _task_package_available()}
|
|
133
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def __dir__():
|
|
137
|
+
return sorted(set(globals()) | set(_LAZY_ATTRS) | set(_LAZY_COMPUTED) | {"__package_info__"})
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
__all__ = [
|
|
141
|
+
# Base components
|
|
142
|
+
'BaseAgent',
|
|
143
|
+
|
|
144
|
+
# Main agents
|
|
145
|
+
'TaskAgent',
|
|
146
|
+
|
|
147
|
+
# Prompt system
|
|
148
|
+
'SystemPromptManager',
|
|
149
|
+
'BasePromptManager',
|
|
150
|
+
|
|
151
|
+
# Character system
|
|
152
|
+
'CharacterManager',
|
|
153
|
+
|
|
154
|
+
# Utility functions
|
|
155
|
+
'initialize_shared_components',
|
|
156
|
+
|
|
157
|
+
# Metadata
|
|
158
|
+
'AGENT_COMPONENTS',
|
|
159
|
+
'AGENT_METADATA',
|
|
160
|
+
'TASK_PACKAGE_AVAILABLE',
|
|
161
|
+
]
|
|
162
|
+
|
|
163
|
+
# Package metadata
|
|
164
|
+
from core.version import __version__ # noqa: F401 (project version SSOT)
|