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
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Task Path Management System
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The Task path management system provides a centralized way to handle file paths across the entire codebase. This ensures consistency, prevents path-related bugs, and simplifies multiuser support.
|
|
6
|
+
|
|
7
|
+
## Key Components
|
|
8
|
+
|
|
9
|
+
- **PathManager**: The central class for all path operations, accessed via the `pm()` singleton.
|
|
10
|
+
- **Session Directories**: Structured directories for each session with standardized subdirectories.
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
Always use the centralized path manager, which is accessed through the `pm()` function:
|
|
15
|
+
|
|
16
|
+
```python
|
|
17
|
+
from agents.task.path import pm
|
|
18
|
+
|
|
19
|
+
# Clean a session ID to remove any unsafe characters
|
|
20
|
+
clean_id = pm().clean_session_id(session_id)
|
|
21
|
+
|
|
22
|
+
# Get the base directory for a session
|
|
23
|
+
session_dir = pm().get_session_root(session_id)
|
|
24
|
+
|
|
25
|
+
# Get subdirectories
|
|
26
|
+
workspace_dir = pm().get_workspace_dir(session_id)
|
|
27
|
+
screenshots_dir = pm().get_screenshots_dir(session_id)
|
|
28
|
+
logs_dir = pm().get_logs_dir(session_id)
|
|
29
|
+
data_dir = pm().get_data_dir(session_id)
|
|
30
|
+
telemetry_dir = pm().get_telemetry_dir(session_id)
|
|
31
|
+
history_dir = pm().get_history_dir(session_id)
|
|
32
|
+
|
|
33
|
+
# Create a file path within a session subdirectory
|
|
34
|
+
file_path = pm().create_file_path(session_id, "results", "output.json")
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Directory Structure
|
|
38
|
+
|
|
39
|
+
Each session gets its own directory with subdirectories:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
data/task/
|
|
43
|
+
└── {user_id}/
|
|
44
|
+
└── {session_id}/
|
|
45
|
+
├── workspace/ # For files created by the agent (user-facing)
|
|
46
|
+
├── feed/ # For message feed (real-time events)
|
|
47
|
+
├── screenshots/ # For saved screenshots
|
|
48
|
+
├── logs/ # For log files
|
|
49
|
+
├── artifacts/ # For build outputs, downloads
|
|
50
|
+
├── memory/ # For conversation history
|
|
51
|
+
└── data/ # For structured data (internal, not user-facing)
|
|
52
|
+
├── telemetry/ # For telemetry events
|
|
53
|
+
├── history/ # For agent execution history
|
|
54
|
+
└── llm_usage/ # For LLM usage tracking
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Note:** The structure no longer includes a `sessions/` subdirectory. Sessions are stored directly under the user directory.
|
|
58
|
+
|
|
59
|
+
**Key Distinction:**
|
|
60
|
+
- `workspace/` = Files FOR the user (user-facing output)
|
|
61
|
+
- `data/` = Internal agent tracking (not user-facing)
|
|
62
|
+
|
|
63
|
+
## Best Practices
|
|
64
|
+
|
|
65
|
+
1. **Always use the path manager**: Never construct paths manually using string concatenation or `os.path.join()`.
|
|
66
|
+
2. **Clean session IDs**: Always use `pm().clean_session_id()` when handling user-provided session IDs.
|
|
67
|
+
3. **Use standard subdirectories**: Stick to the standard subdirectories (`workspace`, `feed`, `screenshots`, `logs`, `data`).
|
|
68
|
+
4. **Avoid hardcoded paths**: Don't hardcode paths like `data/task/` - the base directory could change. Always use PathManager methods.
|
|
69
|
+
|
|
70
|
+
## For Advanced Use Cases
|
|
71
|
+
|
|
72
|
+
The PathManager singleton is configured automatically. For testing, you can create temporary directories within the standard structure.
|
|
73
|
+
|
|
74
|
+
## Path Manager API Reference
|
|
75
|
+
|
|
76
|
+
| Method | Description |
|
|
77
|
+
|--------|-------------|
|
|
78
|
+
| `pm().clean_session_id(session_id)` | Sanitizes session ID |
|
|
79
|
+
| `pm().get_session_root(session_id)` | Gets the session's root directory |
|
|
80
|
+
| `pm().get_workspace_dir(session_id)` | Gets the session's workspace directory |
|
|
81
|
+
| `pm().get_screenshots_dir(session_id)` | Gets the session's screenshots directory |
|
|
82
|
+
| `pm().get_logs_dir(session_id)` | Gets the session's logs directory |
|
|
83
|
+
| `pm().get_data_dir(session_id)` | Gets the session's data directory |
|
|
84
|
+
| `pm().get_telemetry_dir(session_id)` | Gets the telemetry subdirectory |
|
|
85
|
+
| `pm().get_history_dir(session_id)` | Gets the browser history subdirectory |
|
|
86
|
+
| `pm().create_file_path(session_id, subdir, filename)` | Creates a file path in a subdirectory |
|
|
87
|
+
|
|
88
|
+
## Migration Guide
|
|
89
|
+
|
|
90
|
+
### Using the Centralized PathManager
|
|
91
|
+
|
|
92
|
+
Always use the PathManager singleton through `pm()`:
|
|
93
|
+
|
|
94
|
+
```python
|
|
95
|
+
from agents.task.path import pm
|
|
96
|
+
|
|
97
|
+
# Clean session IDs
|
|
98
|
+
clean_id = pm().clean_session_id(session_id)
|
|
99
|
+
|
|
100
|
+
# Get directories
|
|
101
|
+
workspace = pm().get_workspace_dir(clean_id)
|
|
102
|
+
telemetry = pm().get_telemetry_dir(clean_id)
|
|
103
|
+
|
|
104
|
+
# Create file paths
|
|
105
|
+
file_path = pm().create_file_path(clean_id, "workspace", "output.txt")
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Avoid Direct Path Construction
|
|
109
|
+
|
|
110
|
+
Never construct paths manually:
|
|
111
|
+
|
|
112
|
+
```python
|
|
113
|
+
# Wrong - hardcoded path
|
|
114
|
+
path = f"data/task/{user_id}/{session_id}/workspace/file.txt"
|
|
115
|
+
|
|
116
|
+
# Right - use PathManager
|
|
117
|
+
path = pm().create_file_path(session_id, "workspace", "file.txt", user_id=user_id)
|
|
118
|
+
|
|
119
|
+
# Even simpler
|
|
120
|
+
workspace_dir = pm().get_workspace_dir(session_id, user_id)
|
|
121
|
+
path = workspace_dir / "file.txt"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Thread Safety and Locking
|
|
125
|
+
|
|
126
|
+
PathManager uses file locks to prevent race conditions during directory creation, making it safe for multi-threaded and multi-process environments.
|
|
127
|
+
|
|
128
|
+
## Testing
|
|
129
|
+
|
|
130
|
+
Run the path management tests:
|
|
131
|
+
```
|
|
132
|
+
pytest agents/task/agent/tests.py::TestPathManagement
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Troubleshooting
|
|
136
|
+
|
|
137
|
+
If you see "Cannot access PathManager to determine proper data paths" errors, ensure:
|
|
138
|
+
|
|
139
|
+
1. You have initialized SessionManager before using path functions
|
|
140
|
+
2. Your code does not have circular imports
|
|
141
|
+
3. You are using path_utils helpers instead of direct string concatenation
|
agents/task/__init__.py
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"""
|
|
2
|
+
AutoV2 Agent Framework
|
|
3
|
+
|
|
4
|
+
This package provides advanced agent capabilities for autonomous tasks.
|
|
5
|
+
|
|
6
|
+
Usage:
|
|
7
|
+
from agents.task import pm, get_session_manager
|
|
8
|
+
|
|
9
|
+
# Clean a session ID
|
|
10
|
+
clean_id = pm().clean_session_id(session_id)
|
|
11
|
+
|
|
12
|
+
# Get session manager
|
|
13
|
+
session_mgr = get_session_manager()
|
|
14
|
+
|
|
15
|
+
# Create a session
|
|
16
|
+
session_id = session_mgr.create_session()
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from core.version import __version__ # noqa: F401 (project version SSOT)
|
|
20
|
+
|
|
21
|
+
from typing import TYPE_CHECKING
|
|
22
|
+
|
|
23
|
+
# Lazy package (PEP 562): importing any `agents.task.*` leaf (e.g. agents.task.constants,
|
|
24
|
+
# the import-light flag/config module) must NOT eager-load the agent session/orchestrator
|
|
25
|
+
# stack (which pulls the LLM SDKs). The helpers below resolve on first attribute access so
|
|
26
|
+
# `from agents.task import pm, get_session_manager` keeps working unchanged.
|
|
27
|
+
# See docs/plans/2026-06-26-runtime-architecture-finalization-FUSION.md (P1b).
|
|
28
|
+
_LAZY_ATTRS = {
|
|
29
|
+
"pm": (".path", "pm"),
|
|
30
|
+
"get_safe_singleton": (".path", "get_safe_singleton"),
|
|
31
|
+
"send_telemetry": (".utils", "send_telemetry"),
|
|
32
|
+
"get_session_manager": (".agent.session", "get_session_manager"),
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if TYPE_CHECKING: # static analysis / IDEs only — no runtime import
|
|
36
|
+
from agents.task.path import pm, get_safe_singleton
|
|
37
|
+
from agents.task.utils import send_telemetry
|
|
38
|
+
from agents.task.agent.session import get_session_manager
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def __getattr__(name: str):
|
|
42
|
+
"""PEP 562 lazy resolution; caches into globals() so it fires once per name."""
|
|
43
|
+
if name in _LAZY_ATTRS:
|
|
44
|
+
import importlib
|
|
45
|
+
module_path, attr = _LAZY_ATTRS[name]
|
|
46
|
+
value = getattr(importlib.import_module(module_path, __name__), attr)
|
|
47
|
+
globals()[name] = value
|
|
48
|
+
return value
|
|
49
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def __dir__():
|
|
53
|
+
return sorted(set(globals()) | set(_LAZY_ATTRS))
|
|
54
|
+
|
|
55
|
+
# Session ID best practices
|
|
56
|
+
"""
|
|
57
|
+
STANDARD PATTERN FOR SESSION ID HANDLING:
|
|
58
|
+
|
|
59
|
+
1. Always clean session IDs at the entry point of public methods:
|
|
60
|
+
```python
|
|
61
|
+
def my_method(self, session_id: str):
|
|
62
|
+
clean_id = pm().clean_session_id(session_id)
|
|
63
|
+
# Use clean_id for all operations
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
2. Always use pm().clean_session_id() as the canonical cleaning method
|
|
67
|
+
|
|
68
|
+
3. When extracting session ID from agent_id:
|
|
69
|
+
```python
|
|
70
|
+
if '_' in agent_id:
|
|
71
|
+
session_id = agent_id.split('_', 1)[1]
|
|
72
|
+
clean_id = pm().clean_session_id(session_id)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
4. Never perform string transformations directly on session IDs
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
from typing import Optional, Dict, Any
|
|
79
|
+
|
|
80
|
+
def capture_llm_request(
|
|
81
|
+
component: str,
|
|
82
|
+
purpose: str,
|
|
83
|
+
model_name: str,
|
|
84
|
+
duration_seconds: float,
|
|
85
|
+
success: bool,
|
|
86
|
+
token_count: Optional[int] = None,
|
|
87
|
+
session_id: Optional[str] = None,
|
|
88
|
+
prompt_tokens: Optional[int] = None,
|
|
89
|
+
completion_tokens: Optional[int] = None,
|
|
90
|
+
cached_tokens: Optional[int] = None,
|
|
91
|
+
agent_id: Optional[str] = None,
|
|
92
|
+
total_tokens: Optional[int] = None,
|
|
93
|
+
temperature: Optional[float] = None,
|
|
94
|
+
max_tokens: Optional[int] = None,
|
|
95
|
+
**kwargs # Accept any additional kwargs for forward compatibility
|
|
96
|
+
) -> str:
|
|
97
|
+
"""
|
|
98
|
+
Capture details about an LLM request for telemetry and monitoring.
|
|
99
|
+
|
|
100
|
+
This is a thin wrapper around ProductTelemetry.capture_llm_usage to support
|
|
101
|
+
existing tests and code that depends on this function.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
component: Component using the LLM (agent, planner, etc.)
|
|
105
|
+
purpose: Purpose of the request (next_action, planning, etc.)
|
|
106
|
+
model_name: Name of the model used
|
|
107
|
+
duration_seconds: Duration of the request in seconds
|
|
108
|
+
success: Whether the request succeeded
|
|
109
|
+
token_count: Total token count (if available)
|
|
110
|
+
session_id: Session ID for tracking
|
|
111
|
+
prompt_tokens: Number of tokens in the prompt (if available)
|
|
112
|
+
completion_tokens: Number of tokens in the completion (if available)
|
|
113
|
+
cached_tokens: Number of cached prompt tokens (for prompt caching cost calculation)
|
|
114
|
+
agent_id: Optional agent ID for explicit tracking
|
|
115
|
+
total_tokens: Total tokens (alternative to token_count)
|
|
116
|
+
temperature: Temperature setting used for the request
|
|
117
|
+
max_tokens: Max tokens setting used for the request
|
|
118
|
+
**kwargs: Additional parameters for forward compatibility
|
|
119
|
+
|
|
120
|
+
Returns:
|
|
121
|
+
str: The request_id used for this telemetry entry
|
|
122
|
+
"""
|
|
123
|
+
try:
|
|
124
|
+
# Import here to avoid circular imports
|
|
125
|
+
from agents.task.telemetry.service import ProductTelemetry
|
|
126
|
+
|
|
127
|
+
# Get telemetry service
|
|
128
|
+
telemetry = ProductTelemetry()
|
|
129
|
+
|
|
130
|
+
# Use total_tokens if provided and token_count is not
|
|
131
|
+
if total_tokens and not token_count:
|
|
132
|
+
token_count = total_tokens
|
|
133
|
+
|
|
134
|
+
# Prepare parameters dict with additional metadata
|
|
135
|
+
parameters = {}
|
|
136
|
+
if temperature is not None:
|
|
137
|
+
parameters['temperature'] = temperature
|
|
138
|
+
if max_tokens is not None:
|
|
139
|
+
parameters['max_tokens'] = max_tokens
|
|
140
|
+
# Add any other kwargs to parameters
|
|
141
|
+
for key, value in kwargs.items():
|
|
142
|
+
if key not in ['total_tokens']: # Skip already handled
|
|
143
|
+
parameters[key] = value
|
|
144
|
+
|
|
145
|
+
# Forward to capture_llm_usage method and return the request_id
|
|
146
|
+
return telemetry.capture_llm_usage(
|
|
147
|
+
component=component,
|
|
148
|
+
purpose=purpose,
|
|
149
|
+
model_name=model_name,
|
|
150
|
+
duration_seconds=duration_seconds,
|
|
151
|
+
success=success,
|
|
152
|
+
token_count=token_count,
|
|
153
|
+
session_id=session_id,
|
|
154
|
+
prompt_tokens=prompt_tokens,
|
|
155
|
+
completion_tokens=completion_tokens,
|
|
156
|
+
cached_tokens=cached_tokens,
|
|
157
|
+
agent_id=agent_id,
|
|
158
|
+
parameters=parameters if parameters else None
|
|
159
|
+
)
|
|
160
|
+
except Exception as e:
|
|
161
|
+
# Silently fail for telemetry functions to avoid breaking main code
|
|
162
|
+
return ""
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Agent module initialization.
|
|
3
|
+
|
|
4
|
+
This module exposes the Agent, SessionManager, and other core components.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
# Import centralized path manager first to avoid circular dependencies
|
|
8
|
+
from agents.task.path import pm
|
|
9
|
+
|
|
10
|
+
# Import core components
|
|
11
|
+
from agents.task.agent.service import Agent
|
|
12
|
+
from agents.task.agent.session import SessionManager
|
|
13
|
+
from agents.task.agent.orchestrator import SessionOrchestrator
|
|
14
|
+
from agents.task.agent.sub_agent_manager import SubAgentManager
|
|
15
|
+
from agents.task.path import get_safe_singleton
|
|
16
|
+
|
|
17
|
+
# Re-export core components
|
|
18
|
+
__all__ = [
|
|
19
|
+
"Agent",
|
|
20
|
+
"SessionManager",
|
|
21
|
+
"SessionOrchestrator",
|
|
22
|
+
"SubAgentManager",
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
# Perform initialization tasks
|
|
26
|
+
def _initialize():
|
|
27
|
+
"""Perform module initialization tasks like session cleanup"""
|
|
28
|
+
try:
|
|
29
|
+
import logging
|
|
30
|
+
logger = logging.getLogger("task.agent_init")
|
|
31
|
+
logger.info("Running agent module initialization")
|
|
32
|
+
|
|
33
|
+
# Import SessionManager here to avoid circular imports
|
|
34
|
+
from agents.task.agent.session import SessionManager
|
|
35
|
+
|
|
36
|
+
try:
|
|
37
|
+
# Get the SessionManager instance
|
|
38
|
+
session_manager = get_safe_singleton(SessionManager)()
|
|
39
|
+
logger.info("SessionManager instance initialized")
|
|
40
|
+
|
|
41
|
+
except Exception as e:
|
|
42
|
+
logger.error(f"SessionManager initialization failed: {e}")
|
|
43
|
+
# We'll continue without a session manager - the application should
|
|
44
|
+
# handle this gracefully by using direct path utilities
|
|
45
|
+
|
|
46
|
+
# Log completion
|
|
47
|
+
logger.info("Agent module initialization complete")
|
|
48
|
+
except Exception as e:
|
|
49
|
+
# Use basic logging if we can't get the logger
|
|
50
|
+
try:
|
|
51
|
+
import logging
|
|
52
|
+
logging.getLogger("task").warning(f"Agent module initialization failed: {e}")
|
|
53
|
+
except:
|
|
54
|
+
# Last resort - we can't do anything else
|
|
55
|
+
print(f"CRITICAL: Agent module initialization failed: {e}")
|
|
56
|
+
|
|
57
|
+
# Run initialization only if AUTO_AGENT_INIT environment variable is set.
|
|
58
|
+
# SA-08: use the core.env SSOT parser (canonical falsey-set semantics) instead of an
|
|
59
|
+
# ad-hoc truthy-set that silently ignored AUTO_AGENT_INIT=on.
|
|
60
|
+
from core.env import bool_env as _bool_env
|
|
61
|
+
if _bool_env('AUTO_AGENT_INIT', False):
|
|
62
|
+
_initialize()
|
|
63
|
+
else:
|
|
64
|
+
# Log that we're skipping initialization
|
|
65
|
+
try:
|
|
66
|
+
import logging
|
|
67
|
+
logger = logging.getLogger("task.agent_init")
|
|
68
|
+
logger.debug("Skipping agent module initialization (AUTO_AGENT_INIT not set)")
|
|
69
|
+
except:
|
|
70
|
+
pass
|