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
api/README.md
ADDED
|
@@ -0,0 +1,683 @@
|
|
|
1
|
+
# API Package - HTTP API Layer
|
|
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 `api` package provides the HTTP API layer for the POLYROB platform, built on FastAPI. It exposes RESTful endpoints for task automation, chat interactions, authentication, payments, and administrative functions. The API supports JWT authentication, wallet-based auth (SIWE), and integrates with the platform's credit system.
|
|
8
|
+
|
|
9
|
+
## Architecture Philosophy
|
|
10
|
+
|
|
11
|
+
- **RESTful Design**: Standard REST patterns for resource management
|
|
12
|
+
- **Authentication**: Multiple auth methods (JWT, API keys, wallet)
|
|
13
|
+
- **Rate Limiting**: Built-in rate limiting and abuse protection
|
|
14
|
+
- **Modular Routers**: Organized by domain/feature
|
|
15
|
+
- **Async-First**: Full async/await support for performance
|
|
16
|
+
- **Error Handling**: Comprehensive error handling and reporting
|
|
17
|
+
|
|
18
|
+
## Package Structure
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
api/
|
|
22
|
+
├── __init__.py # Package initialization
|
|
23
|
+
├── README.md # This documentation
|
|
24
|
+
│
|
|
25
|
+
├── app.py # FastAPI application factory + router mounting (authoritative router list)
|
|
26
|
+
├── models.py # Pydantic request/response models
|
|
27
|
+
├── interfaces.py # Type interfaces
|
|
28
|
+
│
|
|
29
|
+
├── middleware.py # Authentication and rate limiting middleware
|
|
30
|
+
├── jwt_middleware.py # JWT authentication middleware
|
|
31
|
+
├── auth_constants.py # Authentication constants
|
|
32
|
+
│
|
|
33
|
+
├── auth_endpoints.py # Wallet (SIWE) auth + API-key management
|
|
34
|
+
├── task_http_api.py # Task/AutoV2 API endpoints
|
|
35
|
+
├── payment_endpoints.py # Payment, balance, deposits, transactions
|
|
36
|
+
├── pricing_endpoints.py # Pricing information endpoints
|
|
37
|
+
├── admin_endpoints.py # Administrative endpoints
|
|
38
|
+
├── x402_endpoints.py # x402 payment protocol endpoints
|
|
39
|
+
├── eip8004_endpoints.py # ERC-8004 trustless-agents endpoints
|
|
40
|
+
├── mcp_routes.py # MCP server management endpoints
|
|
41
|
+
│
|
|
42
|
+
├── kb/ # Knowledge-base router (/api/kb, gated KB_API_ENABLED)
|
|
43
|
+
├── openai_compat/ # OpenAI-compatible /v1 surface (gated OPENAI_COMPAT_API_ENABLED)
|
|
44
|
+
├── a2a/ # Agent-to-Agent protocol (agent_card, endpoints, streaming)
|
|
45
|
+
│
|
|
46
|
+
├── conversation_manager.py # API conversation management
|
|
47
|
+
├── payment_verification.py # Payment verification utilities
|
|
48
|
+
│
|
|
49
|
+
└── TASK_API_DOCS.md # Task API documentation
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Application Factory (`app.py`)
|
|
53
|
+
|
|
54
|
+
### Creating the Application
|
|
55
|
+
|
|
56
|
+
```python
|
|
57
|
+
from api.app import create_app
|
|
58
|
+
|
|
59
|
+
app = create_app()
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Lifespan Management
|
|
63
|
+
|
|
64
|
+
The application uses FastAPI's lifespan context for proper startup/shutdown:
|
|
65
|
+
|
|
66
|
+
```python
|
|
67
|
+
@asynccontextmanager
|
|
68
|
+
async def lifespan(app: FastAPI):
|
|
69
|
+
# Startup
|
|
70
|
+
config = BotConfig()
|
|
71
|
+
bot = CoreBot(config=config)
|
|
72
|
+
await bot.initialize()
|
|
73
|
+
|
|
74
|
+
yield # Server runs
|
|
75
|
+
|
|
76
|
+
# Shutdown
|
|
77
|
+
await bot.cleanup()
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Middleware Stack
|
|
81
|
+
|
|
82
|
+
Middleware runs in reverse order (LIFO - last added runs first):
|
|
83
|
+
|
|
84
|
+
1. **CORS Middleware**: Cross-origin resource sharing
|
|
85
|
+
2. **Rate Limiting Middleware**: Request throttling
|
|
86
|
+
3. **Authentication Middleware**: API key validation
|
|
87
|
+
4. **JWT Middleware**: Token-based authentication
|
|
88
|
+
5. **x402 Middleware**: Pay-per-request payment verification (runs first due to LIFO)
|
|
89
|
+
|
|
90
|
+
## Mounted Routers
|
|
91
|
+
|
|
92
|
+
`api/app.py` is the authoritative source for what is mounted (grep `include_router`). As of this
|
|
93
|
+
review the application mounts:
|
|
94
|
+
|
|
95
|
+
| Router | Prefix | Notes |
|
|
96
|
+
| --- | --- | --- |
|
|
97
|
+
| Task / AutoV2 (`task_http_api.py`) | `/api/task` | session lifecycle, messages, workspace, documents, metrics |
|
|
98
|
+
| Auth (`auth_endpoints.py`) | `/api/auth` | SIWE wallet auth (`/nonce`, `/verify`, `/me`) + API-key management (`/api-keys`) |
|
|
99
|
+
| Payments (`payment_endpoints.py`) | `/api/payments` | balance, deposit-address, transactions, deposits, pricing |
|
|
100
|
+
| x402 (`x402_endpoints.py`) | `/api/x402` | pay-per-request info + payment lifecycle |
|
|
101
|
+
| OpenAI-compat (`openai_compat/router.py`) | `/v1` | `POST /v1/chat/completions`, `GET /v1/models` — gated by `OPENAI_COMPAT_API_ENABLED` (default OFF) |
|
|
102
|
+
| KB (`kb/endpoints.py`) | `/api/kb` | knowledge-base ingest/search — gated by `KB_API_ENABLED` (default OFF) |
|
|
103
|
+
| Admin (`admin_endpoints.py`) | `/api` | admin/user management |
|
|
104
|
+
| MCP (`mcp_routes.py`) | `/api/mcp` | MCP server management |
|
|
105
|
+
| Polymarket | `/api/polymarket` | market data |
|
|
106
|
+
| Hyperliquid | `/api/hyperliquid` | market data |
|
|
107
|
+
| Skills (`skill_endpoints.py`) | `/api/skills` | skill management |
|
|
108
|
+
| Pricing (`pricing_endpoints.py`) | `/api/pricing` | model pricing |
|
|
109
|
+
| A2A discovery / endpoints / streaming (`api/a2a/*`) | various | Agent-to-Agent protocol (`/.well-known/agent.json`, `/a2a/agent-card`, `/a2a/extended-card`, `/a2a/*`) |
|
|
110
|
+
| EIP-8004 (`eip8004_endpoints.py`) | `/eip8004` | trustless-agents (registration, reputation, validation, `/eip8004/config`) |
|
|
111
|
+
|
|
112
|
+
Several routers are conditionally mounted based on config/feature flags — `api/app.py` is the
|
|
113
|
+
single source of truth; the endpoint samples below are illustrative, not exhaustive.
|
|
114
|
+
|
|
115
|
+
## API Endpoints
|
|
116
|
+
|
|
117
|
+
### Health Check
|
|
118
|
+
|
|
119
|
+
```http
|
|
120
|
+
GET /health
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Returns system health status and metrics:
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"status": "healthy",
|
|
127
|
+
"service": "rob-platform",
|
|
128
|
+
"metrics": {
|
|
129
|
+
"active_updates": 5,
|
|
130
|
+
"semaphore_available": 45,
|
|
131
|
+
"bot_initialized": true
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Authentication (`/api/auth/*`)
|
|
137
|
+
|
|
138
|
+
#### Request Nonce / SIWE Message
|
|
139
|
+
```http
|
|
140
|
+
POST /api/auth/nonce
|
|
141
|
+
Content-Type: application/json
|
|
142
|
+
|
|
143
|
+
{
|
|
144
|
+
"wallet_address": "0x1234...",
|
|
145
|
+
"chain_id": 1
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Response (`NonceResponse`):
|
|
150
|
+
```json
|
|
151
|
+
{
|
|
152
|
+
"message": "your-polyrob-host.example wants you to sign in...",
|
|
153
|
+
"nonce": "...",
|
|
154
|
+
"issued_at": "2026-06-30T12:00:00Z",
|
|
155
|
+
"expiration": "2026-06-30T12:05:00Z"
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
#### Verify Signature
|
|
160
|
+
```http
|
|
161
|
+
POST /api/auth/verify
|
|
162
|
+
Content-Type: application/json
|
|
163
|
+
|
|
164
|
+
{
|
|
165
|
+
"wallet_address": "0x1234...",
|
|
166
|
+
"message": "...",
|
|
167
|
+
"signature": "0x...",
|
|
168
|
+
"nonce": "...",
|
|
169
|
+
"chain": "ethereum"
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Response is **flat** (also sets an `auth_token` HTTP-only cookie):
|
|
174
|
+
```json
|
|
175
|
+
{
|
|
176
|
+
"token": "eyJ...",
|
|
177
|
+
"user_id": "user_123",
|
|
178
|
+
"wallet_address": "0x1234...",
|
|
179
|
+
"role": "user",
|
|
180
|
+
"tier": "free",
|
|
181
|
+
"is_admin": false,
|
|
182
|
+
"expires_at": "2026-07-07T12:00:00Z"
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
#### Get User Profile
|
|
187
|
+
```http
|
|
188
|
+
GET /api/auth/me
|
|
189
|
+
Authorization: Bearer <token>
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
#### API Key Management
|
|
193
|
+
Self-service API keys for programmatic access (requires a wallet-authenticated JWT).
|
|
194
|
+
The full key is returned only once on creation.
|
|
195
|
+
```http
|
|
196
|
+
POST /api/auth/api-keys # body: {"name": "...", "expires_days": 90}
|
|
197
|
+
GET /api/auth/api-keys # lists key prefixes (never full keys)
|
|
198
|
+
DELETE /api/auth/api-keys/{key_prefix}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Task API (`/api/task/*`)
|
|
202
|
+
|
|
203
|
+
See `TASK_API_DOCS.md` for detailed documentation.
|
|
204
|
+
|
|
205
|
+
#### Create Session
|
|
206
|
+
```http
|
|
207
|
+
POST /api/task/sessions
|
|
208
|
+
Content-Type: application/json
|
|
209
|
+
|
|
210
|
+
{
|
|
211
|
+
"task": "Your task description here",
|
|
212
|
+
"user_id": "user_identifier",
|
|
213
|
+
"model": "gpt-5",
|
|
214
|
+
"provider": "openai",
|
|
215
|
+
"max_steps": 50,
|
|
216
|
+
"tools": ["browser", "filesystem"]
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
Response:
|
|
221
|
+
```json
|
|
222
|
+
{
|
|
223
|
+
"ok": true,
|
|
224
|
+
"session_id": "uuid",
|
|
225
|
+
"task": "Your task...",
|
|
226
|
+
"state": "running",
|
|
227
|
+
"webview_url": "https://your-domain.example/session/uuid"
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
#### Cancel Session
|
|
232
|
+
```http
|
|
233
|
+
POST /api/task/sessions/{session_id}/cancel
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
(There are no pause/resume routes.)
|
|
237
|
+
|
|
238
|
+
#### Send User Message
|
|
239
|
+
```http
|
|
240
|
+
POST /api/task/sessions/{session_id}/messages
|
|
241
|
+
Content-Type: application/json
|
|
242
|
+
|
|
243
|
+
{
|
|
244
|
+
"text": "Your guidance message",
|
|
245
|
+
"kind": "guidance"
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
#### Get Session Info
|
|
250
|
+
```http
|
|
251
|
+
GET /api/task/sessions/{session_id}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
#### Get Session Queue Status
|
|
255
|
+
```http
|
|
256
|
+
GET /api/task/sessions/{session_id}/queue-status
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
#### List User Sessions
|
|
260
|
+
```http
|
|
261
|
+
GET /api/task/users/{user_id}/sessions
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
#### Set User's Active Session
|
|
265
|
+
```http
|
|
266
|
+
POST /api/task/users/{user_id}/active_session
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
#### Server Metrics / Capabilities
|
|
270
|
+
```http
|
|
271
|
+
GET /api/task/metrics
|
|
272
|
+
GET /api/task/capabilities
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
#### Upload to Session Workspace / List Documents
|
|
276
|
+
```http
|
|
277
|
+
POST /api/task/sessions/{session_id}/workspace/upload
|
|
278
|
+
GET /api/task/sessions/{session_id}/documents
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
See `TASK_API_DOCS.md` for the full, authoritative path list (`task_http_api.py` mounts under the
|
|
282
|
+
`/task` prefix, so the app-level paths are `/api/task/...`).
|
|
283
|
+
|
|
284
|
+
### OpenAI-Compatible API (`/v1/*`)
|
|
285
|
+
|
|
286
|
+
Gated by `OPENAI_COMPAT_API_ENABLED`. Provides a non-streaming OpenAI-compatible surface over the
|
|
287
|
+
Task agent's `chat_once`:
|
|
288
|
+
|
|
289
|
+
```http
|
|
290
|
+
POST /v1/chat/completions
|
|
291
|
+
GET /v1/models
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
See `openai_compat/router.py`.
|
|
295
|
+
|
|
296
|
+
### Knowledge Base API (`/api/kb/*`)
|
|
297
|
+
|
|
298
|
+
Gated by `KB_API_ENABLED` (default OFF). `user_id` is always derived from the authenticated
|
|
299
|
+
request (never the body); ingest paths are confined to the tenant's session workspace.
|
|
300
|
+
|
|
301
|
+
```http
|
|
302
|
+
POST /api/kb/ingest # body: {path, session_id, collection, recursive, globs}
|
|
303
|
+
POST /api/kb/ingest/upload # multipart file upload
|
|
304
|
+
POST /api/kb/search # body: {query, collection, limit}
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
See `kb/endpoints.py`.
|
|
308
|
+
|
|
309
|
+
### Payment API (`/api/payments/*`)
|
|
310
|
+
|
|
311
|
+
#### Get Credit Balance
|
|
312
|
+
```http
|
|
313
|
+
GET /api/payments/balance
|
|
314
|
+
Authorization: Bearer <token>
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
Response (`CreditBalanceResponse`):
|
|
318
|
+
```json
|
|
319
|
+
{
|
|
320
|
+
"user_id": "user_123",
|
|
321
|
+
"balance": 1000,
|
|
322
|
+
"lifetime_earned": 1500,
|
|
323
|
+
"lifetime_spent": 500,
|
|
324
|
+
"tier": "free"
|
|
325
|
+
}
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
#### Get Deposit Address
|
|
329
|
+
```http
|
|
330
|
+
GET /api/payments/deposit-address
|
|
331
|
+
Authorization: Bearer <token>
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
Response (`DepositAddressResponse`):
|
|
335
|
+
```json
|
|
336
|
+
{
|
|
337
|
+
"user_id": "user_123",
|
|
338
|
+
"deposit_address": "0xabc...",
|
|
339
|
+
"chains": ["ethereum", "sepolia"],
|
|
340
|
+
"qr_code_url": "https://chart.googleapis.com/...",
|
|
341
|
+
"instructions": "Send USDC, USDT, or ETH..."
|
|
342
|
+
}
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
#### Get Transaction / Deposit History
|
|
346
|
+
```http
|
|
347
|
+
GET /api/payments/transactions?limit=100&offset=0&paginated=false
|
|
348
|
+
GET /api/payments/deposits?limit=100&offset=0
|
|
349
|
+
Authorization: Bearer <token>
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
#### Get Credit Pricing (public)
|
|
353
|
+
```http
|
|
354
|
+
GET /api/payments/pricing
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
### Pricing API (`/api/pricing/*`)
|
|
358
|
+
|
|
359
|
+
#### Get Token Pricing
|
|
360
|
+
```http
|
|
361
|
+
GET /api/pricing/models
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
Response:
|
|
365
|
+
```json
|
|
366
|
+
{
|
|
367
|
+
"models": {
|
|
368
|
+
"gpt-5": {
|
|
369
|
+
"input_cost_per_1k": 0.005,
|
|
370
|
+
"output_cost_per_1k": 0.02
|
|
371
|
+
},
|
|
372
|
+
"claude-sonnet-4-5": {
|
|
373
|
+
"input_cost_per_1k": 0.003,
|
|
374
|
+
"output_cost_per_1k": 0.015
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
### Admin API (`/api/admin/*`)
|
|
381
|
+
|
|
382
|
+
Requires admin authentication.
|
|
383
|
+
|
|
384
|
+
#### Generate API Key
|
|
385
|
+
```http
|
|
386
|
+
POST /api/admin/generate-key
|
|
387
|
+
X-Admin-Token: <admin_token>
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
#### User Management
|
|
391
|
+
```http
|
|
392
|
+
GET /api/admin/users
|
|
393
|
+
GET /api/admin/users/{user_id}
|
|
394
|
+
PUT /api/admin/users/{user_id}/tier
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
#### System Stats
|
|
398
|
+
```http
|
|
399
|
+
GET /api/admin/stats
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### x402 Payment Protocol
|
|
403
|
+
|
|
404
|
+
The x402 protocol enables pay-per-request API access using USDC stablecoins. Uses the [fastapi-x402](https://github.com/jordo1138/fastapi-x402) library with Coinbase facilitator for on-chain verification.
|
|
405
|
+
|
|
406
|
+
See [modules/x402/README.md](../modules/x402/README.md) for detailed documentation.
|
|
407
|
+
|
|
408
|
+
#### Payment Flow
|
|
409
|
+
|
|
410
|
+
1. **Request without auth** → Server returns 402 with payment details
|
|
411
|
+
2. **Client signs payment** with wallet → Sends `X-PAYMENT` header (base64-encoded)
|
|
412
|
+
3. **Server verifies via Coinbase** → On-chain USDC settlement
|
|
413
|
+
4. **Server returns response** with requested data
|
|
414
|
+
|
|
415
|
+
#### x402 Endpoints (`/api/x402/*`)
|
|
416
|
+
|
|
417
|
+
```http
|
|
418
|
+
GET /api/x402/pricing # public pricing/flow info
|
|
419
|
+
GET /api/x402/verify-status/{nonce} # poll a payment's status by nonce
|
|
420
|
+
GET /api/x402/payment-history/{wallet_address} # payment history for a wallet
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
`GET /api/x402/pricing` response:
|
|
424
|
+
```json
|
|
425
|
+
{
|
|
426
|
+
"payment_method": "x402",
|
|
427
|
+
"description": "Pay-per-request with cryptocurrency. No account required.",
|
|
428
|
+
"pricing": {
|
|
429
|
+
"per_request_usd": 0.01,
|
|
430
|
+
"minimum_purchase_usd": 0,
|
|
431
|
+
"supported_assets": ["usdc", "usdt", "eth"],
|
|
432
|
+
"supported_chains": ["base", "ethereum"]
|
|
433
|
+
},
|
|
434
|
+
"payment_address": "0x...",
|
|
435
|
+
"facilitator": "Direct payment"
|
|
436
|
+
}
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
### A2A Protocol (`/a2a/*`, `/.well-known/*`)
|
|
440
|
+
|
|
441
|
+
Google's Agent-to-Agent protocol. See `api/a2a/*` and `../AGENTS.md`.
|
|
442
|
+
|
|
443
|
+
```http
|
|
444
|
+
GET /.well-known/agent.json # Agent Card discovery (RFC 8615)
|
|
445
|
+
GET /a2a/agent-card # Agent Card (alias)
|
|
446
|
+
GET /a2a/extended-card # extended Agent Card
|
|
447
|
+
POST /a2a/rpc # JSON-RPC task operations
|
|
448
|
+
POST /a2a/tasks # REST task create (+ /a2a/tasks/{id}, /send, /cancel, push-config)
|
|
449
|
+
POST /a2a/message/stream # SSE streaming
|
|
450
|
+
GET /a2a/tasks/{task_id}/stream # SSE streaming for a task
|
|
451
|
+
POST /a2a/tasks/resubscribe # resubscribe to a task stream
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
### EIP-8004 Trustless Agents (`/eip8004/*`)
|
|
455
|
+
|
|
456
|
+
```http
|
|
457
|
+
GET /eip8004/config # config/discovery
|
|
458
|
+
GET /eip8004/registration.json # registration descriptor
|
|
459
|
+
POST /eip8004/reputation/* # reputation feedback/query (gated EIP8004_ENABLED)
|
|
460
|
+
POST /eip8004/validation/* # validation request/response (gated EIP8004_ENABLED)
|
|
461
|
+
GET /eip8004/validation/* # validation status/summary/pending/validators
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
## Authentication
|
|
465
|
+
|
|
466
|
+
### JWT Authentication
|
|
467
|
+
|
|
468
|
+
Most endpoints require JWT authentication:
|
|
469
|
+
|
|
470
|
+
```http
|
|
471
|
+
Authorization: Bearer <jwt_token>
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
JWT tokens contain:
|
|
475
|
+
- `sub`: User ID
|
|
476
|
+
- `wallet`: Wallet address (if wallet auth)
|
|
477
|
+
- `tier`: Subscription tier
|
|
478
|
+
- `role`: User role
|
|
479
|
+
- `exp`: Expiration timestamp
|
|
480
|
+
|
|
481
|
+
### API Key Authentication
|
|
482
|
+
|
|
483
|
+
Alternative authentication via API key:
|
|
484
|
+
|
|
485
|
+
```http
|
|
486
|
+
X-API-KEY: <api_key>
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
### Wallet Authentication (SIWE)
|
|
490
|
+
|
|
491
|
+
Sign-In with Ethereum flow:
|
|
492
|
+
1. Request nonce/message from `/api/auth/nonce` (body: `wallet_address`, `chain_id`)
|
|
493
|
+
2. Sign message with wallet
|
|
494
|
+
3. Submit signature to `/api/auth/verify`
|
|
495
|
+
4. Receive JWT token (flat response + `auth_token` cookie)
|
|
496
|
+
|
|
497
|
+
### x402 Payment Authentication
|
|
498
|
+
|
|
499
|
+
Pay-per-request authentication using x402 protocol:
|
|
500
|
+
```http
|
|
501
|
+
X-PAYMENT: <base64-encoded payment payload>
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
The payload contains EIP-712 signed authorization for USDC transfer. See [modules/x402/README.md](../modules/x402/README.md) for details.
|
|
505
|
+
|
|
506
|
+
## Request/Response Models (`models.py`)
|
|
507
|
+
|
|
508
|
+
### MessageRequest
|
|
509
|
+
```python
|
|
510
|
+
class MessageRequest(BaseModel):
|
|
511
|
+
text: str
|
|
512
|
+
user_id: Optional[str] = None
|
|
513
|
+
chat_id: Optional[str] = None
|
|
514
|
+
message_id: Optional[str] = None
|
|
515
|
+
platform: Optional[str] = "api"
|
|
516
|
+
chat_type: Optional[str] = "private"
|
|
517
|
+
metadata: Optional[Dict[str, Any]] = {}
|
|
518
|
+
attachments: Optional[List[Dict[str, Any]]] = []
|
|
519
|
+
reply_to: Optional[str] = None
|
|
520
|
+
session_id: Optional[str] = None
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
### MessageResponse
|
|
524
|
+
```python
|
|
525
|
+
class MessageResponse(BaseModel):
|
|
526
|
+
success: bool = True
|
|
527
|
+
text: Optional[str] = None
|
|
528
|
+
format: Optional[str] = "markdown"
|
|
529
|
+
message: Optional[str] = None
|
|
530
|
+
message_id: Optional[str] = None
|
|
531
|
+
conversation_id: Optional[str] = None
|
|
532
|
+
data: Optional[Dict[str, Any]] = None
|
|
533
|
+
metadata: Optional[Dict[str, Any]] = {}
|
|
534
|
+
suggestions: Optional[List[str]] = []
|
|
535
|
+
attachments: Optional[List[Dict[str, Any]]] = []
|
|
536
|
+
session_id: Optional[str] = None
|
|
537
|
+
agent_id: Optional[str] = None
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
### SessionCreateRequest
|
|
541
|
+
```python
|
|
542
|
+
class SessionCreateRequest(BaseModel):
|
|
543
|
+
user_id: str # required
|
|
544
|
+
task: str # required
|
|
545
|
+
model: Optional[str] = "gpt-5"
|
|
546
|
+
provider: Optional[str] = "openai"
|
|
547
|
+
tools: Optional[List[str]] = [] # default: empty list
|
|
548
|
+
max_steps: Optional[int] = 50
|
|
549
|
+
temperature: Optional[float] = 0.0
|
|
550
|
+
use_vision: Optional[bool] = True
|
|
551
|
+
session_config: Optional[Dict[str, Any]] = None
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
## Middleware
|
|
555
|
+
|
|
556
|
+
### Rate Limiting (`middleware.py`)
|
|
557
|
+
|
|
558
|
+
```python
|
|
559
|
+
class RateLimitMiddleware:
|
|
560
|
+
def __init__(
|
|
561
|
+
self,
|
|
562
|
+
requests_per_minute: int = 60,
|
|
563
|
+
requests_per_hour: int = 1000,
|
|
564
|
+
burst_size: int = 10
|
|
565
|
+
)
|
|
566
|
+
```
|
|
567
|
+
|
|
568
|
+
### JWT Middleware (`jwt_middleware.py`)
|
|
569
|
+
|
|
570
|
+
```python
|
|
571
|
+
class JWTAuthMiddleware:
|
|
572
|
+
def __init__(self, jwt_secret: str):
|
|
573
|
+
self.jwt_secret = jwt_secret
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
Adds to request state:
|
|
577
|
+
- `user_id`: Authenticated user ID
|
|
578
|
+
- `wallet_address`: Wallet address (if applicable)
|
|
579
|
+
- `tier`: User's subscription tier
|
|
580
|
+
- `role`: User's role
|
|
581
|
+
- `is_admin`: Admin flag
|
|
582
|
+
- `authenticated`: Authentication status
|
|
583
|
+
|
|
584
|
+
## Configuration
|
|
585
|
+
|
|
586
|
+
### Environment Variables
|
|
587
|
+
|
|
588
|
+
```bash
|
|
589
|
+
# API Configuration
|
|
590
|
+
API_HOST=0.0.0.0
|
|
591
|
+
API_PORT=9000
|
|
592
|
+
CORS_ALLOW_ORIGINS=http://localhost:3000,https://your-domain.example
|
|
593
|
+
|
|
594
|
+
# Authentication
|
|
595
|
+
JWT_SECRET_KEY=your-secret-key
|
|
596
|
+
API_AUTH_TOKEN=your-api-token
|
|
597
|
+
ADMIN_TOKEN=admin-secret
|
|
598
|
+
|
|
599
|
+
# Rate Limiting
|
|
600
|
+
API_RATE_LIMIT_RPM=60
|
|
601
|
+
API_RATE_LIMIT_RPH=1000
|
|
602
|
+
API_RATE_LIMIT_BURST=10
|
|
603
|
+
|
|
604
|
+
# Concurrency
|
|
605
|
+
MAX_CONCURRENT_UPDATES=50
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
## Error Handling
|
|
609
|
+
|
|
610
|
+
### Standard Error Response
|
|
611
|
+
```json
|
|
612
|
+
{
|
|
613
|
+
"error": "Error message",
|
|
614
|
+
"error_id": "error_123456789",
|
|
615
|
+
"message": "User-friendly message",
|
|
616
|
+
"details": {}
|
|
617
|
+
}
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
### HTTP Status Codes
|
|
621
|
+
- `200`: Success
|
|
622
|
+
- `201`: Created
|
|
623
|
+
- `400`: Bad Request
|
|
624
|
+
- `401`: Unauthorized
|
|
625
|
+
- `402`: Payment Required (x402)
|
|
626
|
+
- `403`: Forbidden
|
|
627
|
+
- `404`: Not Found
|
|
628
|
+
- `422`: Validation Error
|
|
629
|
+
- `429`: Rate Limited
|
|
630
|
+
- `500`: Internal Server Error
|
|
631
|
+
- `503`: Service Unavailable
|
|
632
|
+
|
|
633
|
+
## Running the API
|
|
634
|
+
|
|
635
|
+
### Development
|
|
636
|
+
```bash
|
|
637
|
+
python -m api.app
|
|
638
|
+
# or
|
|
639
|
+
uvicorn api.app:get_app --host 0.0.0.0 --port 9000 --reload --factory
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
### Production
|
|
643
|
+
```bash
|
|
644
|
+
uvicorn api.app:get_app --host 0.0.0.0 --port 9000 --workers 4 --factory
|
|
645
|
+
```
|
|
646
|
+
|
|
647
|
+
## Integration with Core Platform
|
|
648
|
+
|
|
649
|
+
The API integrates with all platform components:
|
|
650
|
+
|
|
651
|
+
```python
|
|
652
|
+
# Access via app_state
|
|
653
|
+
bot = app_state["bot"]
|
|
654
|
+
container = app_state["container"]
|
|
655
|
+
|
|
656
|
+
# Get services
|
|
657
|
+
task_agent = container.get_service("task_agent")
|
|
658
|
+
database = container.get_service("database_manager")
|
|
659
|
+
```
|
|
660
|
+
|
|
661
|
+
## Best Practices
|
|
662
|
+
|
|
663
|
+
### API Development
|
|
664
|
+
1. **Use Pydantic Models**: Always define request/response models
|
|
665
|
+
2. **Authentication**: Check auth on all protected endpoints
|
|
666
|
+
3. **Rate Limiting**: Respect rate limits for external calls
|
|
667
|
+
4. **Error Handling**: Return appropriate status codes and messages
|
|
668
|
+
5. **Logging**: Log all requests and errors
|
|
669
|
+
|
|
670
|
+
### Security
|
|
671
|
+
1. **Validate Input**: Always validate and sanitize input
|
|
672
|
+
2. **Check Permissions**: Verify user permissions for actions
|
|
673
|
+
3. **Secure Secrets**: Never expose secrets in responses
|
|
674
|
+
4. **Rate Limit**: Protect against abuse
|
|
675
|
+
5. **Audit Trail**: Log security-relevant events
|
|
676
|
+
|
|
677
|
+
## OpenAPI Documentation
|
|
678
|
+
|
|
679
|
+
FastAPI auto-generates OpenAPI documentation:
|
|
680
|
+
- Swagger UI: `http://localhost:9000/docs`
|
|
681
|
+
- ReDoc: `http://localhost:9000/redoc`
|
|
682
|
+
- OpenAPI JSON: `http://localhost:9000/openapi.json`
|
|
683
|
+
|