xyberos 0.4.2__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.
- xyberos/__init__.py +74 -0
- xyberos/agents/__init__.py +33 -0
- xyberos/agents/agent.py +187 -0
- xyberos/agents/builtins.py +203 -0
- xyberos/agents/collaboration.py +293 -0
- xyberos/agents/context.py +23 -0
- xyberos/agents/discovery.py +50 -0
- xyberos/agents/lifecycle.py +20 -0
- xyberos/agents/manager.py +139 -0
- xyberos/agents/manifest.py +3 -0
- xyberos/agents/message_bus.py +140 -0
- xyberos/agents/plugin.py +93 -0
- xyberos/agents/registry.py +13 -0
- xyberos/agents/shared_memory.py +224 -0
- xyberos/agents/task.py +119 -0
- xyberos/api/__init__.py +30 -0
- xyberos/api/action.py +13 -0
- xyberos/api/chat.py +25 -0
- xyberos/api/memory.py +26 -0
- xyberos/api/plan.py +10 -0
- xyberos/api/reason.py +10 -0
- xyberos/assistant.py +259 -0
- xyberos/brain/__init__.py +568 -0
- xyberos/brain/action/__init__.py +42 -0
- xyberos/brain/action/exceptions.py +23 -0
- xyberos/brain/action/executor.py +161 -0
- xyberos/brain/action/interfaces.py +61 -0
- xyberos/brain/action/models.py +83 -0
- xyberos/brain/action/registry.py +16 -0
- xyberos/brain/attention/__init__.py +17 -0
- xyberos/brain/attention/attention.py +63 -0
- xyberos/brain/attention/interfaces.py +36 -0
- xyberos/brain/attention/models.py +35 -0
- xyberos/brain/attention/scorer.py +51 -0
- xyberos/brain/attention/selector.py +34 -0
- xyberos/brain/brain.py +216 -0
- xyberos/brain/cognition.py +17 -0
- xyberos/brain/context.py +60 -0
- xyberos/brain/core/__init__.py +0 -0
- xyberos/brain/core/constants.py +5 -0
- xyberos/brain/core/context.py +40 -0
- xyberos/brain/core/exceptions.py +32 -0
- xyberos/brain/core/interfaces.py +28 -0
- xyberos/brain/core/manager.py +41 -0
- xyberos/brain/core/metadata.py +32 -0
- xyberos/brain/core/pipeline.py +52 -0
- xyberos/brain/core/provider_registry.py +16 -0
- xyberos/brain/core/registry.py +78 -0
- xyberos/brain/core/stage.py +15 -0
- xyberos/brain/core/strategy_registry.py +13 -0
- xyberos/brain/decision/__init__.py +55 -0
- xyberos/brain/decision/engine.py +36 -0
- xyberos/brain/decision/evaluator.py +16 -0
- xyberos/brain/decision/exceptions.py +78 -0
- xyberos/brain/decision/interfaces.py +57 -0
- xyberos/brain/decision/metadata.py +10 -0
- xyberos/brain/decision/models.py +28 -0
- xyberos/brain/decision/policy_registry.py +9 -0
- xyberos/brain/decision/registry.py +9 -0
- xyberos/brain/language/__init__.py +65 -0
- xyberos/brain/language/exceptions.py +28 -0
- xyberos/brain/language/formatter.py +17 -0
- xyberos/brain/language/interfaces.py +31 -0
- xyberos/brain/language/metadata.py +10 -0
- xyberos/brain/language/models.py +24 -0
- xyberos/brain/language/parser.py +16 -0
- xyberos/brain/language/parsers/__init__.py +9 -0
- xyberos/brain/language/parsers/json.py +24 -0
- xyberos/brain/language/parsers/markdown.py +19 -0
- xyberos/brain/language/parsers/text.py +16 -0
- xyberos/brain/language/prompt.py +37 -0
- xyberos/brain/language/registry.py +36 -0
- xyberos/brain/language/template.py +34 -0
- xyberos/brain/language/templates/__init__.py +13 -0
- xyberos/brain/language/templates/decision.py +24 -0
- xyberos/brain/language/templates/planning.py +24 -0
- xyberos/brain/language/templates/reasoning.py +24 -0
- xyberos/brain/language/templates/reflection.py +24 -0
- xyberos/brain/language/templates/summary.py +21 -0
- xyberos/brain/learning/__init__.py +68 -0
- xyberos/brain/learning/adaptation.py +59 -0
- xyberos/brain/learning/confidence.py +59 -0
- xyberos/brain/learning/consolidation.py +58 -0
- xyberos/brain/learning/curriculum.py +28 -0
- xyberos/brain/learning/evaluator.py +70 -0
- xyberos/brain/learning/experience.py +36 -0
- xyberos/brain/learning/feedback.py +35 -0
- xyberos/brain/learning/learner.py +133 -0
- xyberos/brain/learning/policy.py +56 -0
- xyberos/brain/learning/reinforcement.py +91 -0
- xyberos/brain/learning/reward.py +38 -0
- xyberos/brain/loop/cognitive_loop.py +681 -0
- xyberos/brain/observability/__init__.py +19 -0
- xyberos/brain/observability/cognitive_monitor.py +175 -0
- xyberos/brain/observability/events.py +58 -0
- xyberos/brain/observability/metrics.py +98 -0
- xyberos/brain/perception/__init__.py +53 -0
- xyberos/brain/perception/exceptions.py +16 -0
- xyberos/brain/perception/extractor.py +34 -0
- xyberos/brain/perception/interfaces.py +82 -0
- xyberos/brain/perception/models.py +155 -0
- xyberos/brain/perception/normalizer.py +30 -0
- xyberos/brain/perception/parser.py +23 -0
- xyberos/brain/perception/perceiver.py +225 -0
- xyberos/brain/perception/pipeline.py +19 -0
- xyberos/brain/planning/__init__.py +67 -0
- xyberos/brain/planning/exceptions.py +83 -0
- xyberos/brain/planning/executor.py +174 -0
- xyberos/brain/planning/goal_manager.py +27 -0
- xyberos/brain/planning/graph/__init__.py +0 -0
- xyberos/brain/planning/graph/edge.py +0 -0
- xyberos/brain/planning/graph/graph.py +0 -0
- xyberos/brain/planning/graph/node.py +0 -0
- xyberos/brain/planning/interfaces.py +36 -0
- xyberos/brain/planning/metadata.py +37 -0
- xyberos/brain/planning/models.py +76 -0
- xyberos/brain/planning/plan_manager.py +28 -0
- xyberos/brain/planning/planner.py +112 -0
- xyberos/brain/planning/registry.py +9 -0
- xyberos/brain/planning/strategy_registry.py +12 -0
- xyberos/brain/planning/task_manager.py +27 -0
- xyberos/brain/planning/validators/__init__.py +0 -0
- xyberos/brain/planning/validators/cycle.py +0 -0
- xyberos/brain/planning/validators/dependency.py +0 -0
- xyberos/brain/planning/validators/feasibility.py +0 -0
- xyberos/brain/reasoning/__init__.py +51 -0
- xyberos/brain/reasoning/engine.py +229 -0
- xyberos/brain/reasoning/exceptions.py +33 -0
- xyberos/brain/reasoning/interfaces.py +104 -0
- xyberos/brain/reasoning/knowledge_base.py +114 -0
- xyberos/brain/reasoning/metadata.py +60 -0
- xyberos/brain/reasoning/models.py +44 -0
- xyberos/brain/reasoning/orchestrator.py +316 -0
- xyberos/brain/reasoning/pipeline.py +169 -0
- xyberos/brain/reasoning/provider_registry.py +11 -0
- xyberos/brain/reasoning/registry.py +45 -0
- xyberos/brain/reasoning/strategy_registry.py +11 -0
- xyberos/brain/reasoning/trace.py +13 -0
- xyberos/brain/reasoning/verifier.py +12 -0
- xyberos/brain/reflection/__init__.py +79 -0
- xyberos/brain/reflection/critic.py +61 -0
- xyberos/brain/reflection/critics/__init__.py +13 -0
- xyberos/brain/reflection/critics/consistency.py +21 -0
- xyberos/brain/reflection/critics/ethical.py +20 -0
- xyberos/brain/reflection/critics/factual.py +20 -0
- xyberos/brain/reflection/critics/logical.py +20 -0
- xyberos/brain/reflection/critics/performance.py +20 -0
- xyberos/brain/reflection/evaluator.py +58 -0
- xyberos/brain/reflection/exceptions.py +52 -0
- xyberos/brain/reflection/improvement.py +47 -0
- xyberos/brain/reflection/improvers/__init__.py +13 -0
- xyberos/brain/reflection/improvers/opitimize.py +18 -0
- xyberos/brain/reflection/improvers/retry.py +23 -0
- xyberos/brain/reflection/improvers/rewrite.py +21 -0
- xyberos/brain/reflection/improvers/simplify.py +20 -0
- xyberos/brain/reflection/interfaces.py +42 -0
- xyberos/brain/reflection/metadata.py +10 -0
- xyberos/brain/reflection/models.py +17 -0
- xyberos/brain/reflection/reflector.py +52 -0
- xyberos/brain/reflection/registry.py +38 -0
- xyberos/brain/runtime/adapter.py +34 -0
- xyberos/brain/runtime/bridge.py +84 -0
- xyberos/brain/runtime/context.py +19 -0
- xyberos/brain/workflow/__init__.py +54 -0
- xyberos/brain/workflow/definition.py +43 -0
- xyberos/brain/workflow/exceptions.py +64 -0
- xyberos/brain/workflow/executor.py +326 -0
- xyberos/brain/workflow/graph.py +50 -0
- xyberos/brain/workflow/interfaces.py +34 -0
- xyberos/brain/workflow/metadata.py +10 -0
- xyberos/brain/workflow/models.py +58 -0
- xyberos/brain/workflow/registry.py +9 -0
- xyberos/brain/workflow/schedulers/__init__.py +9 -0
- xyberos/brain/workflow/schedulers/parallel.py +23 -0
- xyberos/brain/workflow/schedulers/priority.py +27 -0
- xyberos/brain/workflow/schedulers/sequential.py +16 -0
- xyberos/brain/workflow/validators/__init__.py +9 -0
- xyberos/brain/workflow/validators/cycle.py +39 -0
- xyberos/brain/workflow/validators/dependency.py +30 -0
- xyberos/brain/workflow/validators/state.py +21 -0
- xyberos/common/__init__.py +76 -0
- xyberos/common/capabilities.py +128 -0
- xyberos/common/errors.py +61 -0
- xyberos/common/guards.py +103 -0
- xyberos/common/pipeline.py +202 -0
- xyberos/common/provider.py +77 -0
- xyberos/common/registry.py +473 -0
- xyberos/common/service.py +186 -0
- xyberos/common/types.py +61 -0
- xyberos/config/__init__.py +24 -0
- xyberos/config/config.py +183 -0
- xyberos/config/loaders/__init__.py +1 -0
- xyberos/config/loaders/env.py +74 -0
- xyberos/config/loaders/yaml.py +105 -0
- xyberos/database/__init__.py +134 -0
- xyberos/database/events.py +109 -0
- xyberos/database/exceptions.py +37 -0
- xyberos/database/interfaces.py +205 -0
- xyberos/database/manager.py +564 -0
- xyberos/database/models.py +210 -0
- xyberos/database/pool.py +288 -0
- xyberos/database/providers/__init__.py +11 -0
- xyberos/database/providers/memory.py +219 -0
- xyberos/database/providers/sqlite.py +351 -0
- xyberos/database/registry.py +19 -0
- xyberos/database/service.py +38 -0
- xyberos/embeddings/__init__.py +17 -0
- xyberos/embeddings/embedding.py +13 -0
- xyberos/embeddings/embedding_registry.py +53 -0
- xyberos/embeddings/sentence_transformer.py +95 -0
- xyberos/kernel/__init__.py +9 -0
- xyberos/kernel/bootstrap/__init__.py +13 -0
- xyberos/kernel/bootstrap/bootstrap.py +39 -0
- xyberos/kernel/bootstrap/shutdown.py +42 -0
- xyberos/kernel/bootstrap/startup.py +51 -0
- xyberos/kernel/common/__init__.py +19 -0
- xyberos/kernel/common/kernel_service.py +126 -0
- xyberos/kernel/common/lifecycle_mixin.py +56 -0
- xyberos/kernel/common/provider_registry.py +9 -0
- xyberos/kernel/common/provider_service.py +9 -0
- xyberos/kernel/common/service_context.py +248 -0
- xyberos/kernel/container/__init__.py +15 -0
- xyberos/kernel/container/container.py +37 -0
- xyberos/kernel/container/dependency.py +11 -0
- xyberos/kernel/container/injector.py +18 -0
- xyberos/kernel/container/provider.py +21 -0
- xyberos/kernel/core/__init__.py +0 -0
- xyberos/kernel/core/component.py +42 -0
- xyberos/kernel/core/constants.py +35 -0
- xyberos/kernel/core/metadata.py +31 -0
- xyberos/kernel/core/service.py +43 -0
- xyberos/kernel/core/status.py +30 -0
- xyberos/kernel/events/__init__.py +27 -0
- xyberos/kernel/events/kernel_events.py +11 -0
- xyberos/kernel/events/lifecycle_events.py +11 -0
- xyberos/kernel/kernel.py +131 -0
- xyberos/kernel/lifecycle/__init__.py +13 -0
- xyberos/kernel/lifecycle/hooks.py +9 -0
- xyberos/kernel/lifecycle/lifecycle.py +27 -0
- xyberos/kernel/lifecycle/manager.py +36 -0
- xyberos/kernel/observability/__init__.py +28 -0
- xyberos/kernel/observability/diagnostics.py +10 -0
- xyberos/kernel/observability/health.py +28 -0
- xyberos/kernel/observability/interface.py +55 -0
- xyberos/kernel/observability/metrics.py +72 -0
- xyberos/kernel/observability/models.py +61 -0
- xyberos/kernel/observability/null.py +31 -0
- xyberos/kernel/observability/profiler.py +17 -0
- xyberos/kernel/observability/tracing.py +22 -0
- xyberos/kernel/registry/__init__.py +15 -0
- xyberos/kernel/registry/loader_registry.py +32 -0
- xyberos/kernel/registry/module_registry.py +5 -0
- xyberos/kernel/registry/registry.py +32 -0
- xyberos/kernel/registry/service_registry.py +5 -0
- xyberos/kernel/services/__init__.py +3 -0
- xyberos/kernel/services/config/__init__.py +7 -0
- xyberos/kernel/services/config/interface.py +67 -0
- xyberos/kernel/services/config/loader.py +116 -0
- xyberos/kernel/services/config/loaders/__init__.py +13 -0
- xyberos/kernel/services/config/loaders/base.py +17 -0
- xyberos/kernel/services/config/loaders/env_loader.py +17 -0
- xyberos/kernel/services/config/loaders/json_loader.py +24 -0
- xyberos/kernel/services/config/loaders/toml_loader.py +24 -0
- xyberos/kernel/services/config/loaders/yaml_loader.py +28 -0
- xyberos/kernel/services/config/model.py +17 -0
- xyberos/kernel/services/config/service.py +80 -0
- xyberos/kernel/services/discovery/__init__.py +23 -0
- xyberos/kernel/services/discovery/exceptions.py +6 -0
- xyberos/kernel/services/discovery/interface.py +60 -0
- xyberos/kernel/services/discovery/models.py +48 -0
- xyberos/kernel/services/discovery/providers/__init__.py +7 -0
- xyberos/kernel/services/discovery/providers/base.py +44 -0
- xyberos/kernel/services/discovery/providers/filesystem.py +77 -0
- xyberos/kernel/services/discovery/service.py +132 -0
- xyberos/kernel/services/eventbus/__init__.py +15 -0
- xyberos/kernel/services/eventbus/event.py +28 -0
- xyberos/kernel/services/eventbus/events.py +12 -0
- xyberos/kernel/services/eventbus/exceptions.py +10 -0
- xyberos/kernel/services/eventbus/interface.py +50 -0
- xyberos/kernel/services/eventbus/service.py +84 -0
- xyberos/kernel/services/eventbus/subscription.py +24 -0
- xyberos/kernel/services/filesystem/__init__.py +16 -0
- xyberos/kernel/services/filesystem/drivers/__init__.py +7 -0
- xyberos/kernel/services/filesystem/drivers/base.py +117 -0
- xyberos/kernel/services/filesystem/drivers/local.py +178 -0
- xyberos/kernel/services/filesystem/errors.py +14 -0
- xyberos/kernel/services/filesystem/interface.py +114 -0
- xyberos/kernel/services/filesystem/models.py +14 -0
- xyberos/kernel/services/filesystem/providers/__init__.py +0 -0
- xyberos/kernel/services/filesystem/providers/base.py +22 -0
- xyberos/kernel/services/filesystem/providers/local.py +123 -0
- xyberos/kernel/services/filesystem/service.py +124 -0
- xyberos/kernel/services/logger/__init__.py +0 -0
- xyberos/kernel/services/logger/handlers/base.py +16 -0
- xyberos/kernel/services/logger/handlers/console.py +42 -0
- xyberos/kernel/services/logger/handlers/file.py +0 -0
- xyberos/kernel/services/logger/handlers/null.py +0 -0
- xyberos/kernel/services/logger/interface.py +55 -0
- xyberos/kernel/services/logger/service.py +60 -0
- xyberos/kernel/services/monitoring/__init__.py +19 -0
- xyberos/kernel/services/monitoring/exceptions.py +2 -0
- xyberos/kernel/services/monitoring/interface.py +42 -0
- xyberos/kernel/services/monitoring/models.py +16 -0
- xyberos/kernel/services/monitoring/providers/__init__.py +7 -0
- xyberos/kernel/services/monitoring/providers/base.py +42 -0
- xyberos/kernel/services/monitoring/providers/local.py +52 -0
- xyberos/kernel/services/monitoring/recorder.py +64 -0
- xyberos/kernel/services/monitoring/service.py +75 -0
- xyberos/kernel/services/rpc/__init__.py +27 -0
- xyberos/kernel/services/rpc/exceptions.py +14 -0
- xyberos/kernel/services/rpc/interface.py +48 -0
- xyberos/kernel/services/rpc/models.py +53 -0
- xyberos/kernel/services/rpc/providers/__init__.py +7 -0
- xyberos/kernel/services/rpc/providers/base.py +51 -0
- xyberos/kernel/services/rpc/providers/local.py +81 -0
- xyberos/kernel/services/rpc/service.py +91 -0
- xyberos/kernel/services/scheduler/interface.py +37 -0
- xyberos/kernel/services/scheduler/registry/base.py +10 -0
- xyberos/kernel/services/scheduler/registry/thread.py +0 -0
- xyberos/kernel/services/scheduler/service.py +50 -0
- xyberos/kernel/services/scheduler/task.py +45 -0
- xyberos/kernel/services/scheduler/task_registry.py +0 -0
- xyberos/kernel/services/security/__init__.py +46 -0
- xyberos/kernel/services/security/evaluator.py +5 -0
- xyberos/kernel/services/security/exceptions.py +5 -0
- xyberos/kernel/services/security/interface.py +57 -0
- xyberos/kernel/services/security/models.py +5 -0
- xyberos/kernel/services/security/provider.py +5 -0
- xyberos/kernel/services/security/providers/__init__.py +5 -0
- xyberos/kernel/services/security/providers/base.py +5 -0
- xyberos/kernel/services/security/providers/default.py +5 -0
- xyberos/kernel/services/security/service.py +190 -0
- xyberos/kernel/services/session/__init__.py +19 -0
- xyberos/kernel/services/session/exceptions.py +10 -0
- xyberos/kernel/services/session/interface.py +36 -0
- xyberos/kernel/services/session/models.py +52 -0
- xyberos/kernel/services/session/providers/__init__.py +7 -0
- xyberos/kernel/services/session/providers/base.py +39 -0
- xyberos/kernel/services/session/providers/default.py +39 -0
- xyberos/kernel/services/session/service.py +85 -0
- xyberos/kernel/services/state/interface.py +47 -0
- xyberos/kernel/services/state/service.py +56 -0
- xyberos/kernel/services/state/state.py +16 -0
- xyberos/kernel/services/state/store.py +69 -0
- xyberos/kernel/services/storage/interface.py +10 -0
- xyberos/kernel/services/storage/providers/__init__.py +14 -0
- xyberos/kernel/services/storage/providers/base.py +10 -0
- xyberos/kernel/services/storage/providers/filesystem.py +9 -0
- xyberos/kernel/services/storage/providers/memory.py +10 -0
- xyberos/kernel/services/storage/service.py +153 -0
- xyberos/knowledge/__init__.py +60 -0
- xyberos/knowledge/cache.py +21 -0
- xyberos/knowledge/chunks.py +11 -0
- xyberos/knowledge/citation.py +13 -0
- xyberos/knowledge/embedding.py +13 -0
- xyberos/knowledge/embedding_registry.py +39 -0
- xyberos/knowledge/exceptions.py +19 -0
- xyberos/knowledge/fusion.py +38 -0
- xyberos/knowledge/grounding.py +36 -0
- xyberos/knowledge/indexing.py +15 -0
- xyberos/knowledge/manager.py +176 -0
- xyberos/knowledge/metadata.py +18 -0
- xyberos/knowledge/provider_registry.py +50 -0
- xyberos/knowledge/providers/__init__.py +32 -0
- xyberos/knowledge/providers/api.py +14 -0
- xyberos/knowledge/providers/base.py +41 -0
- xyberos/knowledge/providers/filesystem.py +102 -0
- xyberos/knowledge/providers/graph.py +20 -0
- xyberos/knowledge/providers/memory.py +79 -0
- xyberos/knowledge/providers/memory_retrieval.py +94 -0
- xyberos/knowledge/providers/sentence_transformer.py +94 -0
- xyberos/knowledge/providers/sql.py +20 -0
- xyberos/knowledge/providers/vector.py +20 -0
- xyberos/knowledge/providers/web.py +99 -0
- xyberos/knowledge/ranking.py +16 -0
- xyberos/knowledge/reranker.py +16 -0
- xyberos/knowledge/retrieval.py +21 -0
- xyberos/memory/__init__.py +62 -0
- xyberos/memory/episodic/__init__.py +105 -0
- xyberos/memory/exceptions.py +25 -0
- xyberos/memory/interfaces.py +77 -0
- xyberos/memory/knowledge/__init__.py +113 -0
- xyberos/memory/manager.py +277 -0
- xyberos/memory/models.py +100 -0
- xyberos/memory/procedural/__init__.py +87 -0
- xyberos/memory/registry.py +19 -0
- xyberos/memory/retrieval/__init__.py +87 -0
- xyberos/memory/semantic/__init__.py +117 -0
- xyberos/memory/vector/__init__.py +120 -0
- xyberos/memory/working/__init__.py +102 -0
- xyberos/ml/__init__.py +43 -0
- xyberos/ml/evaluator.py +209 -0
- xyberos/ml/optimizer.py +31 -0
- xyberos/ml/pipeline.py +151 -0
- xyberos/ml/service.py +207 -0
- xyberos/ml/trainer.py +28 -0
- xyberos/models/__init__.py +21 -0
- xyberos/models/action.py +17 -0
- xyberos/models/decision.py +19 -0
- xyberos/models/embedding.py +25 -0
- xyberos/models/goal.py +26 -0
- xyberos/models/observation.py +213 -0
- xyberos/models/plan.py +17 -0
- xyberos/models/sentiment.py +97 -0
- xyberos/models/thought.py +19 -0
- xyberos/plugins/__init__.py +45 -0
- xyberos/plugins/component.py +37 -0
- xyberos/plugins/loader.py +118 -0
- xyberos/plugins/manager.py +253 -0
- xyberos/plugins/manifest.py +3 -0
- xyberos/plugins/plugin.py +120 -0
- xyberos/plugins/registry.py +82 -0
- xyberos/processors/__init__.py +183 -0
- xyberos/processors/context.py +54 -0
- xyberos/processors/entities.py +44 -0
- xyberos/processors/intent.py +62 -0
- xyberos/processors/keywords.py +53 -0
- xyberos/processors/language.py +62 -0
- xyberos/processors/metadata.py +53 -0
- xyberos/processors/safety.py +53 -0
- xyberos/processors/semantics.py +59 -0
- xyberos/processors/sentiment.py +37 -0
- xyberos/processors/syntax.py +62 -0
- xyberos/processors/tokenizer.py +58 -0
- xyberos/providers/__init__.py +48 -0
- xyberos/providers/base.py +31 -0
- xyberos/providers/composite.py +89 -0
- xyberos/providers/context/__init__.py +27 -0
- xyberos/providers/context/config.py +21 -0
- xyberos/providers/context/default.py +53 -0
- xyberos/providers/context/exceptions.py +10 -0
- xyberos/providers/context/interface.py +25 -0
- xyberos/providers/context/manager.py +27 -0
- xyberos/providers/context/registry.py +15 -0
- xyberos/providers/context/result.py +21 -0
- xyberos/providers/embedding/__init__.py +29 -0
- xyberos/providers/embedding/config.py +23 -0
- xyberos/providers/embedding/exceptions.py +10 -0
- xyberos/providers/embedding/interface.py +28 -0
- xyberos/providers/embedding/manager.py +40 -0
- xyberos/providers/embedding/provider.py +30 -0
- xyberos/providers/embedding/registry.py +13 -0
- xyberos/providers/embedding/result.py +31 -0
- xyberos/providers/embedding/service.py +28 -0
- xyberos/providers/entities/interface.py +22 -0
- xyberos/providers/entities/manager.py +39 -0
- xyberos/providers/entities/regex.py +86 -0
- xyberos/providers/entities/registry.py +13 -0
- xyberos/providers/filesystem.py +96 -0
- xyberos/providers/http.py +100 -0
- xyberos/providers/hybrid.py +26 -0
- xyberos/providers/intent/__init__.py +27 -0
- xyberos/providers/intent/config.py +21 -0
- xyberos/providers/intent/default.py +55 -0
- xyberos/providers/intent/exceptions.py +10 -0
- xyberos/providers/intent/interface.py +24 -0
- xyberos/providers/intent/manager.py +50 -0
- xyberos/providers/intent/registry.py +15 -0
- xyberos/providers/intent/result.py +23 -0
- xyberos/providers/keywords/frequency.py +66 -0
- xyberos/providers/keywords/interface.py +23 -0
- xyberos/providers/keywords/manager.py +25 -0
- xyberos/providers/keywords/registry.py +15 -0
- xyberos/providers/language/interface.py +24 -0
- xyberos/providers/language/lingua.py +57 -0
- xyberos/providers/language/manager.py +25 -0
- xyberos/providers/language/registry.py +15 -0
- xyberos/providers/llm.py +266 -0
- xyberos/providers/llm_backends.py +306 -0
- xyberos/providers/metadata/default.py +56 -0
- xyberos/providers/metadata/interface.py +23 -0
- xyberos/providers/metadata/manager.py +27 -0
- xyberos/providers/metadata/registry.py +15 -0
- xyberos/providers/python.py +65 -0
- xyberos/providers/rule_engine.py +26 -0
- xyberos/providers/safety/config.py +91 -0
- xyberos/providers/safety/default.py +62 -0
- xyberos/providers/safety/interface.py +23 -0
- xyberos/providers/safety/manager.py +49 -0
- xyberos/providers/safety/registry.py +15 -0
- xyberos/providers/semantics/__init__.py +27 -0
- xyberos/providers/semantics/config.py +21 -0
- xyberos/providers/semantics/default.py +72 -0
- xyberos/providers/semantics/exceptions.py +10 -0
- xyberos/providers/semantics/interface.py +26 -0
- xyberos/providers/semantics/manager.py +28 -0
- xyberos/providers/semantics/registry.py +15 -0
- xyberos/providers/semantics/result.py +21 -0
- xyberos/providers/sentiment/__init__.py +29 -0
- xyberos/providers/sentiment/config.py +21 -0
- xyberos/providers/sentiment/exceptions.py +10 -0
- xyberos/providers/sentiment/interface.py +20 -0
- xyberos/providers/sentiment/manager.py +22 -0
- xyberos/providers/sentiment/provider.py +11 -0
- xyberos/providers/sentiment/registry.py +13 -0
- xyberos/providers/sentiment/result.py +23 -0
- xyberos/providers/sentiment/service.py +23 -0
- xyberos/providers/shell.py +76 -0
- xyberos/providers/symbolic.py +26 -0
- xyberos/providers/syntax/__init__.py +27 -0
- xyberos/providers/syntax/config.py +21 -0
- xyberos/providers/syntax/default.py +121 -0
- xyberos/providers/syntax/exceptions.py +10 -0
- xyberos/providers/syntax/interface.py +26 -0
- xyberos/providers/syntax/manager.py +27 -0
- xyberos/providers/syntax/registry.py +15 -0
- xyberos/providers/syntax/result.py +23 -0
- xyberos/providers/tokenizer/interface.py +24 -0
- xyberos/providers/tokenizer/manager.py +24 -0
- xyberos/providers/tokenizer/registry.py +15 -0
- xyberos/providers/tokenizer/simple.py +34 -0
- xyberos/runtime/__init__.py +11 -0
- xyberos/runtime/context/__init__.py +11 -0
- xyberos/runtime/context/execution_context.py +32 -0
- xyberos/runtime/context/runtime_context.py +31 -0
- xyberos/runtime/context/session_context.py +32 -0
- xyberos/runtime/core/__init__.py +15 -0
- xyberos/runtime/core/executable.py +137 -0
- xyberos/runtime/core/lifecycle.py +29 -0
- xyberos/runtime/core/manager.py +51 -0
- xyberos/runtime/core/metadata.py +18 -0
- xyberos/runtime/core/registry.py +41 -0
- xyberos/runtime/execution/__init__.py +13 -0
- xyberos/runtime/execution/executor.py +29 -0
- xyberos/runtime/execution/invocation.py +21 -0
- xyberos/runtime/execution/pipeline.py +36 -0
- xyberos/runtime/execution/result.py +40 -0
- xyberos/runtime/manifests/__init__.py +15 -0
- xyberos/runtime/manifests/agent_manifest.py +14 -0
- xyberos/runtime/manifests/base_manifest.py +30 -0
- xyberos/runtime/manifests/module_manifest.py +16 -0
- xyberos/runtime/manifests/plugin_manifest.py +14 -0
- xyberos/runtime/manifests/skill_manifest.py +12 -0
- xyberos/runtime/modules/__init__.py +15 -0
- xyberos/runtime/modules/loader.py +29 -0
- xyberos/runtime/modules/manager.py +15 -0
- xyberos/runtime/modules/manifest.py +3 -0
- xyberos/runtime/modules/module.py +31 -0
- xyberos/runtime/modules/registry.py +11 -0
- xyberos/runtime/runtime.py +40 -0
- xyberos/runtime/sandbox/__init__.py +3 -0
- xyberos/runtime/services/__init__.py +3 -0
- xyberos/security/__init__.py +82 -0
- xyberos/security/approval/__init__.py +124 -0
- xyberos/security/approval/engine.py +12 -0
- xyberos/security/audit/__init__.py +160 -0
- xyberos/security/audit/service.py +12 -0
- xyberos/security/capability/__init__.py +88 -0
- xyberos/security/capability/manager.py +12 -0
- xyberos/security/evaluator.py +100 -0
- xyberos/security/exceptions.py +41 -0
- xyberos/security/governor/__init__.py +175 -0
- xyberos/security/governor/governor.py +13 -0
- xyberos/security/guardian/__init__.py +99 -0
- xyberos/security/guardian/engine.py +12 -0
- xyberos/security/interface.py +55 -0
- xyberos/security/kill_switch/__init__.py +293 -0
- xyberos/security/kill_switch/engine.py +21 -0
- xyberos/security/models.py +77 -0
- xyberos/security/plugin.py +71 -0
- xyberos/security/policy/__init__.py +184 -0
- xyberos/security/policy/engine.py +15 -0
- xyberos/security/providers/__init__.py +7 -0
- xyberos/security/providers/base.py +59 -0
- xyberos/security/providers/default.py +78 -0
- xyberos/security/risk/__init__.py +163 -0
- xyberos/security/risk/engine.py +13 -0
- xyberos/security/service.py +226 -0
- xyberos/server/__init__.py +22 -0
- xyberos/server/app.py +119 -0
- xyberos/server/models.py +128 -0
- xyberos/server/routes/__init__.py +1 -0
- xyberos/server/routes/action.py +31 -0
- xyberos/server/routes/chat.py +103 -0
- xyberos/server/routes/memory.py +79 -0
- xyberos/server/routes/plan.py +31 -0
- xyberos/server/routes/reason.py +40 -0
- xyberos/server/routes/tools.py +40 -0
- xyberos/skills/__init__.py +15 -0
- xyberos/skills/base.py +60 -0
- xyberos/skills/builtins.py +111 -0
- xyberos/skills/discovery.py +105 -0
- xyberos/skills/loader.py +29 -0
- xyberos/skills/manager.py +65 -0
- xyberos/skills/manifest.py +3 -0
- xyberos/skills/registry.py +11 -0
- xyberos/storage/__init__.py +45 -0
- xyberos/storage/exceptions.py +29 -0
- xyberos/storage/interfaces.py +59 -0
- xyberos/storage/local/__init__.py +174 -0
- xyberos/storage/manager.py +292 -0
- xyberos/storage/memory/__init__.py +127 -0
- xyberos/storage/models.py +92 -0
- xyberos/storage/registry.py +19 -0
- xyberos/strategies/__init__.py +53 -0
- xyberos/strategies/abductive.py +41 -0
- xyberos/strategies/adaptive.py +0 -0
- xyberos/strategies/analogical.py +42 -0
- xyberos/strategies/confidence.py +30 -0
- xyberos/strategies/deductive.py +136 -0
- xyberos/strategies/fusion.py +87 -0
- xyberos/strategies/graph.py +0 -0
- xyberos/strategies/greedy.py +36 -0
- xyberos/strategies/hierarchical.py +0 -0
- xyberos/strategies/highest_score.py +36 -0
- xyberos/strategies/hybrid.py +41 -0
- xyberos/strategies/inductive.py +134 -0
- xyberos/strategies/llm.py +37 -0
- xyberos/strategies/probabilistic.py +43 -0
- xyberos/strategies/reactive.py +0 -0
- xyberos/strategies/risk_aware.py +38 -0
- xyberos/strategies/rule_based.py +39 -0
- xyberos/strategies/sequential.py +0 -0
- xyberos/strategies/symbolic.py +32 -0
- xyberos/strategies/utility.py +34 -0
- xyberos/strategies/verification.py +128 -0
- xyberos/tools/__init__.py +65 -0
- xyberos/tools/base.py +96 -0
- xyberos/tools/builtins.py +341 -0
- xyberos/tools/exceptions.py +27 -0
- xyberos/tools/manager.py +224 -0
- xyberos/tools/models.py +111 -0
- xyberos/tools/registry.py +22 -0
- xyberos/utils/__init__.py +0 -0
- xyberos-0.4.2.dist-info/METADATA +109 -0
- xyberos-0.4.2.dist-info/RECORD +630 -0
- xyberos-0.4.2.dist-info/WHEEL +5 -0
- xyberos-0.4.2.dist-info/entry_points.txt +83 -0
- xyberos-0.4.2.dist-info/licenses/LICENSE +201 -0
- xyberos-0.4.2.dist-info/top_level.txt +1 -0
xyberos/__init__.py
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"""
|
|
2
|
+
XYBEROS Platform - Cognitive Operating System.
|
|
3
|
+
|
|
4
|
+
The public API surface. Anything not re-exported from ``xyberos`` or a
|
|
5
|
+
direct child package (``xyberos.tools``, ``xyberos.agents``, etc.) is
|
|
6
|
+
considered internal.
|
|
7
|
+
|
|
8
|
+
Usage::
|
|
9
|
+
|
|
10
|
+
from xyberos import xyberos
|
|
11
|
+
|
|
12
|
+
ctx = xyberos.chat("Hello world")
|
|
13
|
+
result = xyberos.reason("If A > B, what follows?")
|
|
14
|
+
steps = xyberos.plan("Build a house")
|
|
15
|
+
memories = xyberos.remember("past conversations")
|
|
16
|
+
|
|
17
|
+
# Or use the functional API directly:
|
|
18
|
+
from xyberos.api import chat, reason, plan, remember
|
|
19
|
+
|
|
20
|
+
ctx = chat("Hello world")
|
|
21
|
+
|
|
22
|
+
Configuration::
|
|
23
|
+
|
|
24
|
+
from xyberos import xyberos, XyberosConfig
|
|
25
|
+
|
|
26
|
+
config = XyberosConfig(llm_backend="ollama", llm_model="llama3")
|
|
27
|
+
platform = xyberos.__class__(config=config)
|
|
28
|
+
ctx = platform.chat("Hello")
|
|
29
|
+
|
|
30
|
+
# Or configure the global instance:
|
|
31
|
+
xyberos.configure(config)
|
|
32
|
+
|
|
33
|
+
Tools::
|
|
34
|
+
|
|
35
|
+
from xyberos.tools import ToolManager, WebSearchTool
|
|
36
|
+
from xyberos.agents import Agent, AgentManager
|
|
37
|
+
from xyberos.skills import Skill, SkillManager
|
|
38
|
+
from xyberos.memory import MemoryManager
|
|
39
|
+
from xyberos.knowledge import KnowledgeManager
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
from __future__ import annotations
|
|
43
|
+
|
|
44
|
+
# ── High-level facade ──────────────────────────────────────────
|
|
45
|
+
from xyberos.assistant import XYBEROS
|
|
46
|
+
|
|
47
|
+
# ── API functions ──────────────────────────────────────────────
|
|
48
|
+
from xyberos.api import chat, reason, plan, remember, forget, store, execute
|
|
49
|
+
|
|
50
|
+
# ── Config ─────────────────────────────────────────────────────
|
|
51
|
+
from xyberos.config import XyberosConfig
|
|
52
|
+
|
|
53
|
+
# ── Global singleton instance ──────────────────────────────────
|
|
54
|
+
xyberos: XYBEROS = XYBEROS()
|
|
55
|
+
|
|
56
|
+
# ── Backward compatibility alias ───────────────────────────────
|
|
57
|
+
Assistant = XYBEROS
|
|
58
|
+
|
|
59
|
+
__all__ = [
|
|
60
|
+
# High-level
|
|
61
|
+
"XYBEROS",
|
|
62
|
+
"xyberos",
|
|
63
|
+
"Assistant",
|
|
64
|
+
"XyberosConfig",
|
|
65
|
+
# API functions
|
|
66
|
+
"chat",
|
|
67
|
+
"reason",
|
|
68
|
+
"plan",
|
|
69
|
+
"remember",
|
|
70
|
+
"forget",
|
|
71
|
+
"store",
|
|
72
|
+
"execute",
|
|
73
|
+
]
|
|
74
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Multi-Agent Runtime — agents with communication, shared memory, and collaboration."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from .agent import Agent
|
|
6
|
+
from .collaboration import CollaborationEngine, Vote, VoteResult
|
|
7
|
+
from .context import AgentContext
|
|
8
|
+
from .lifecycle import AgentState
|
|
9
|
+
from .manager import AgentManager
|
|
10
|
+
from .message_bus import Message, MessageBus
|
|
11
|
+
from .plugin import AgentPlugin
|
|
12
|
+
from .registry import AgentRegistry
|
|
13
|
+
from .shared_memory import SharedMemory, SharedEntry
|
|
14
|
+
from .task import Task, TaskManager, TaskStatus
|
|
15
|
+
|
|
16
|
+
__all__ = [
|
|
17
|
+
"Agent",
|
|
18
|
+
"AgentContext",
|
|
19
|
+
"AgentManager",
|
|
20
|
+
"AgentPlugin",
|
|
21
|
+
"AgentRegistry",
|
|
22
|
+
"AgentState",
|
|
23
|
+
"CollaborationEngine",
|
|
24
|
+
"Message",
|
|
25
|
+
"MessageBus",
|
|
26
|
+
"SharedEntry",
|
|
27
|
+
"SharedMemory",
|
|
28
|
+
"Task",
|
|
29
|
+
"TaskManager",
|
|
30
|
+
"TaskStatus",
|
|
31
|
+
"Vote",
|
|
32
|
+
"VoteResult",
|
|
33
|
+
]
|
xyberos/agents/agent.py
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"""Base Agent class with communication, shared memory, and collaboration."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
import logging
|
|
7
|
+
from dataclasses import dataclass, field
|
|
8
|
+
from typing import TYPE_CHECKING, Any
|
|
9
|
+
|
|
10
|
+
from .message_bus import Message, MessageBus
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from .shared_memory import SharedMemory
|
|
14
|
+
from .collaboration import CollaborationEngine
|
|
15
|
+
|
|
16
|
+
logger = logging.getLogger(__name__)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@dataclass(slots=True)
|
|
20
|
+
class Agent:
|
|
21
|
+
"""
|
|
22
|
+
Base runtime agent with inter-agent communication, shared memory,
|
|
23
|
+
and collaborative intelligence.
|
|
24
|
+
|
|
25
|
+
Agents can:
|
|
26
|
+
- Send/receive messages via the shared :class:`MessageBus`
|
|
27
|
+
- Read/write to shared memory via :attr:`shared_memory`
|
|
28
|
+
- Collaborate via :attr:`collaboration`
|
|
29
|
+
(voting, knowledge sharing, collective problem solving)
|
|
30
|
+
|
|
31
|
+
Specialized agents extend this class and override :meth:`handle_message`.
|
|
32
|
+
|
|
33
|
+
Usage::
|
|
34
|
+
|
|
35
|
+
class ResearcherAgent(Agent):
|
|
36
|
+
async def handle_message(self, msg):
|
|
37
|
+
# Access shared memory
|
|
38
|
+
await self.shared_memory.store("finding:x", value, agent_id=self.id)
|
|
39
|
+
# Collaborate with other agents
|
|
40
|
+
result = await self.collaboration.conduct_vote(...)
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
id: str
|
|
44
|
+
name: str
|
|
45
|
+
description: str = ""
|
|
46
|
+
metadata: dict[str, Any] = field(default_factory=lambda: {})
|
|
47
|
+
|
|
48
|
+
# Communication (set by AgentManager on registration)
|
|
49
|
+
_bus: MessageBus | None = None
|
|
50
|
+
_queue: asyncio.Queue[Message] | None = None
|
|
51
|
+
_running: bool = False
|
|
52
|
+
_shared_memory: Any = None # SharedMemory
|
|
53
|
+
_collaboration: Any = None # CollaborationEngine
|
|
54
|
+
|
|
55
|
+
# ── Shared Memory ──────────────────────────────────────────
|
|
56
|
+
|
|
57
|
+
@property
|
|
58
|
+
def shared_memory(self) -> SharedMemory:
|
|
59
|
+
"""Access the shared memory space shared by all agents."""
|
|
60
|
+
if self._shared_memory is None:
|
|
61
|
+
raise RuntimeError(
|
|
62
|
+
f"Agent '{self.id}' is not connected to shared memory. "
|
|
63
|
+
"Ensure it is registered via AgentManager."
|
|
64
|
+
)
|
|
65
|
+
return self._shared_memory
|
|
66
|
+
|
|
67
|
+
@property
|
|
68
|
+
def collaboration(self) -> CollaborationEngine:
|
|
69
|
+
"""Access the collaboration engine for voting and collective problem solving."""
|
|
70
|
+
if self._collaboration is None:
|
|
71
|
+
raise RuntimeError(
|
|
72
|
+
f"Agent '{self.id}' is not connected to collaboration engine. "
|
|
73
|
+
"Ensure it is registered via AgentManager."
|
|
74
|
+
)
|
|
75
|
+
return self._collaboration
|
|
76
|
+
|
|
77
|
+
# ── Lifecycle ──────────────────────────────────────────────
|
|
78
|
+
|
|
79
|
+
async def start(self) -> None:
|
|
80
|
+
"""Called when the agent starts. Subscribes to the message bus."""
|
|
81
|
+
self._running = True
|
|
82
|
+
if self._bus:
|
|
83
|
+
self._queue = await self._bus.subscribe(self.id)
|
|
84
|
+
asyncio.create_task(self._message_loop())
|
|
85
|
+
logger.info("Agent '%s' (%s) started", self.name, self.id)
|
|
86
|
+
|
|
87
|
+
async def stop(self) -> None:
|
|
88
|
+
"""Called when the agent stops."""
|
|
89
|
+
self._running = False
|
|
90
|
+
if self._bus:
|
|
91
|
+
await self._bus.unsubscribe(self.id)
|
|
92
|
+
logger.info("Agent '%s' (%s) stopped", self.name, self.id)
|
|
93
|
+
|
|
94
|
+
# ── Communication ──────────────────────────────────────────
|
|
95
|
+
|
|
96
|
+
async def send_message(
|
|
97
|
+
self,
|
|
98
|
+
receiver: str,
|
|
99
|
+
content: Any,
|
|
100
|
+
*,
|
|
101
|
+
msg_type: str = "message",
|
|
102
|
+
correlation_id: str = "",
|
|
103
|
+
) -> None:
|
|
104
|
+
"""Send a message to another agent."""
|
|
105
|
+
if not self._bus:
|
|
106
|
+
logger.warning("Agent '%s': not connected to message bus", self.id)
|
|
107
|
+
return
|
|
108
|
+
msg = Message(
|
|
109
|
+
sender=self.id,
|
|
110
|
+
receiver=receiver,
|
|
111
|
+
content=content,
|
|
112
|
+
msg_type=msg_type,
|
|
113
|
+
correlation_id=correlation_id,
|
|
114
|
+
)
|
|
115
|
+
await self._bus.send(msg)
|
|
116
|
+
|
|
117
|
+
async def broadcast(self, content: Any, *, msg_type: str = "broadcast") -> None:
|
|
118
|
+
"""Broadcast a message to all agents."""
|
|
119
|
+
await self.send_message("*", content, msg_type=msg_type)
|
|
120
|
+
|
|
121
|
+
async def request(
|
|
122
|
+
self,
|
|
123
|
+
receiver: str,
|
|
124
|
+
content: Any,
|
|
125
|
+
*,
|
|
126
|
+
timeout: float = 10.0,
|
|
127
|
+
) -> Message | None:
|
|
128
|
+
"""Send a request and wait for a reply."""
|
|
129
|
+
if not self._bus:
|
|
130
|
+
return None
|
|
131
|
+
return await self._bus.request(self.id, receiver, content, timeout=timeout)
|
|
132
|
+
|
|
133
|
+
async def reply_to(self, original: Message, content: Any) -> None:
|
|
134
|
+
"""Reply to an incoming request message."""
|
|
135
|
+
if self._bus:
|
|
136
|
+
await self._bus.reply(original, content)
|
|
137
|
+
|
|
138
|
+
# ── Collaborative Intelligence ─────────────────────────────
|
|
139
|
+
|
|
140
|
+
async def share_knowledge(
|
|
141
|
+
self,
|
|
142
|
+
topic: str,
|
|
143
|
+
content: Any,
|
|
144
|
+
*,
|
|
145
|
+
tags: list[str] | None = None,
|
|
146
|
+
) -> None:
|
|
147
|
+
"""Share knowledge on a *topic* with all agents via shared memory."""
|
|
148
|
+
if self._collaboration:
|
|
149
|
+
await self._collaboration.share_knowledge(self, topic, content, tags=tags)
|
|
150
|
+
|
|
151
|
+
async def query_knowledge(self, topic: str, *, limit: int = 10) -> list[Any]:
|
|
152
|
+
"""Query shared knowledge on a *topic* from all agents."""
|
|
153
|
+
if self._collaboration:
|
|
154
|
+
return await self._collaboration.query_knowledge(topic, limit=limit)
|
|
155
|
+
return []
|
|
156
|
+
|
|
157
|
+
async def vote_on(
|
|
158
|
+
self,
|
|
159
|
+
question: str,
|
|
160
|
+
agents: list[Agent],
|
|
161
|
+
options: list[str],
|
|
162
|
+
) -> Any:
|
|
163
|
+
"""Conduct a vote among *agents* on a *question*."""
|
|
164
|
+
if self._collaboration:
|
|
165
|
+
return await self._collaboration.conduct_vote(question, agents, options)
|
|
166
|
+
return None
|
|
167
|
+
|
|
168
|
+
# ── Message Handling ───────────────────────────────────────
|
|
169
|
+
|
|
170
|
+
async def handle_message(self, message: Message) -> None:
|
|
171
|
+
"""
|
|
172
|
+
Handle an incoming message. Override in subclasses.
|
|
173
|
+
|
|
174
|
+
Default behavior: log the message.
|
|
175
|
+
"""
|
|
176
|
+
logger.info("Agent '%s' received: %s", self.id, str(message.content)[:100])
|
|
177
|
+
|
|
178
|
+
async def _message_loop(self) -> None:
|
|
179
|
+
"""Continuously process incoming messages."""
|
|
180
|
+
while self._running and self._queue is not None:
|
|
181
|
+
try:
|
|
182
|
+
message = await asyncio.wait_for(self._queue.get(), timeout=1.0)
|
|
183
|
+
await self.handle_message(message)
|
|
184
|
+
except asyncio.TimeoutError:
|
|
185
|
+
continue
|
|
186
|
+
except Exception as exc:
|
|
187
|
+
logger.error("Agent '%s' message handler error: %s", self.id, exc)
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"""Built-in specialized agents for the multi-agent runtime."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
from typing import Any, cast
|
|
7
|
+
|
|
8
|
+
from .agent import Agent
|
|
9
|
+
from .message_bus import Message
|
|
10
|
+
from .task import Task, TaskManager, TaskStatus
|
|
11
|
+
|
|
12
|
+
logger = logging.getLogger(__name__)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class PlannerAgent(Agent):
|
|
16
|
+
"""
|
|
17
|
+
Receives goals, breaks them into sub-tasks, and delegates to agents.
|
|
18
|
+
|
|
19
|
+
The planner analyzes a goal description, creates a list of tasks
|
|
20
|
+
with dependencies, assigns them to appropriate agents, and tracks
|
|
21
|
+
completion.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
def __init__(self) -> None:
|
|
25
|
+
super().__init__(
|
|
26
|
+
id="planner",
|
|
27
|
+
name="Planner",
|
|
28
|
+
description="Breaks goals into sub-tasks and delegates to agents",
|
|
29
|
+
)
|
|
30
|
+
self._task_manager = TaskManager()
|
|
31
|
+
|
|
32
|
+
@property
|
|
33
|
+
def task_manager(self) -> TaskManager:
|
|
34
|
+
return self._task_manager
|
|
35
|
+
|
|
36
|
+
async def handle_message(self, message: Message) -> None:
|
|
37
|
+
if message.msg_type == "plan_goal":
|
|
38
|
+
await self._plan_goal(message)
|
|
39
|
+
elif message.msg_type == "task_completed":
|
|
40
|
+
await self._on_task_completed(message)
|
|
41
|
+
elif message.msg_type == "task_failed":
|
|
42
|
+
await self._on_task_failed(message)
|
|
43
|
+
|
|
44
|
+
async def _plan_goal(self, message: Message) -> None:
|
|
45
|
+
"""Receive a goal, create tasks, delegate."""
|
|
46
|
+
goal = str(message.content)
|
|
47
|
+
# Create sub-tasks from the goal
|
|
48
|
+
tasks = [
|
|
49
|
+
Task(id="research", description=f"Research: {goal}", priority=1),
|
|
50
|
+
Task(id="execute", description=f"Execute: {goal}", depends_on=["research"], priority=2),
|
|
51
|
+
Task(id="review", description=f"Review results for: {goal}", depends_on=["execute"], priority=3),
|
|
52
|
+
]
|
|
53
|
+
for t in tasks:
|
|
54
|
+
self._task_manager.add(t)
|
|
55
|
+
|
|
56
|
+
# Assign ready tasks to agents
|
|
57
|
+
for task in self._task_manager.ready():
|
|
58
|
+
agent_id = self._select_agent(task)
|
|
59
|
+
if agent_id:
|
|
60
|
+
self._task_manager.assign(task.id, agent_id)
|
|
61
|
+
await self.send_message(agent_id, {
|
|
62
|
+
"task_id": task.id,
|
|
63
|
+
"description": task.description,
|
|
64
|
+
"goal": goal,
|
|
65
|
+
}, msg_type="execute_task")
|
|
66
|
+
|
|
67
|
+
await self.reply_to(message, {
|
|
68
|
+
"status": "planned",
|
|
69
|
+
"tasks": len(tasks),
|
|
70
|
+
"ready": len(self._task_manager.ready()),
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
async def _on_task_completed(self, message: Message) -> None:
|
|
74
|
+
"""Handle a task completion notification."""
|
|
75
|
+
raw = message.content
|
|
76
|
+
data: dict[str, Any] = cast(dict[str, Any], raw) if isinstance(raw, dict) else {}
|
|
77
|
+
task_id = data.get("task_id", "")
|
|
78
|
+
self._task_manager.update_status(task_id, TaskStatus.COMPLETED)
|
|
79
|
+
|
|
80
|
+
# Check for newly ready tasks
|
|
81
|
+
for task in self._task_manager.ready():
|
|
82
|
+
agent_id = self._select_agent(task)
|
|
83
|
+
if agent_id:
|
|
84
|
+
self._task_manager.assign(task.id, agent_id)
|
|
85
|
+
await self.send_message(agent_id, {
|
|
86
|
+
"task_id": task.id,
|
|
87
|
+
"description": task.description,
|
|
88
|
+
}, msg_type="execute_task")
|
|
89
|
+
|
|
90
|
+
async def _on_task_failed(self, message: Message) -> None:
|
|
91
|
+
"""Handle a task failure."""
|
|
92
|
+
raw = message.content
|
|
93
|
+
data: dict[str, Any] = cast(dict[str, Any], raw) if isinstance(raw, dict) else {}
|
|
94
|
+
task_id = data.get("task_id", "")
|
|
95
|
+
self._task_manager.update_status(task_id, TaskStatus.FAILED)
|
|
96
|
+
|
|
97
|
+
def _select_agent(self, task: Task) -> str | None:
|
|
98
|
+
"""Select an agent to handle a task based on task description."""
|
|
99
|
+
desc_lower = task.description.lower()
|
|
100
|
+
if "research" in desc_lower or "search" in desc_lower:
|
|
101
|
+
return "researcher"
|
|
102
|
+
if "review" in desc_lower or "verify" in desc_lower:
|
|
103
|
+
return "reviewer"
|
|
104
|
+
if "execute" in desc_lower or "run" in desc_lower:
|
|
105
|
+
return "executor"
|
|
106
|
+
return "executor"
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class ResearcherAgent(Agent):
|
|
110
|
+
"""
|
|
111
|
+
Queries knowledge, memory, and web for information.
|
|
112
|
+
|
|
113
|
+
Responds to "research" or "search" tasks by querying available
|
|
114
|
+
knowledge sources via the KnowledgeManager.
|
|
115
|
+
"""
|
|
116
|
+
|
|
117
|
+
def __init__(self) -> None:
|
|
118
|
+
super().__init__(
|
|
119
|
+
id="researcher",
|
|
120
|
+
name="Researcher",
|
|
121
|
+
description="Queries knowledge, memory, and web for information",
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
async def handle_message(self, message: Message) -> None:
|
|
125
|
+
if message.msg_type == "execute_task":
|
|
126
|
+
raw = message.content
|
|
127
|
+
data: dict[str, Any] = cast(dict[str, Any], raw) if isinstance(raw, dict) else {}
|
|
128
|
+
task_id = data.get("task_id", "")
|
|
129
|
+
description = data.get("description", "")
|
|
130
|
+
|
|
131
|
+
# Simulate research
|
|
132
|
+
result = f"Research results for: {description[:100]}"
|
|
133
|
+
|
|
134
|
+
await self.send_message("planner", {
|
|
135
|
+
"task_id": task_id,
|
|
136
|
+
"result": result,
|
|
137
|
+
}, msg_type="task_completed")
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
class ReviewerAgent(Agent):
|
|
141
|
+
"""
|
|
142
|
+
Reviews plans and results for quality, safety, and consistency.
|
|
143
|
+
|
|
144
|
+
Responds to "review" tasks by evaluating the provided content
|
|
145
|
+
against quality criteria.
|
|
146
|
+
"""
|
|
147
|
+
|
|
148
|
+
def __init__(self) -> None:
|
|
149
|
+
super().__init__(
|
|
150
|
+
id="reviewer",
|
|
151
|
+
name="Reviewer",
|
|
152
|
+
description="Reviews plans and results for quality and safety",
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
async def handle_message(self, message: Message) -> None:
|
|
156
|
+
if message.msg_type == "execute_task":
|
|
157
|
+
raw = message.content
|
|
158
|
+
data: dict[str, Any] = cast(dict[str, Any], raw) if isinstance(raw, dict) else {}
|
|
159
|
+
task_id = data.get("task_id", "")
|
|
160
|
+
description = data.get("description", "")
|
|
161
|
+
|
|
162
|
+
# Simulate review
|
|
163
|
+
result = f"Review approved for: {description[:100]}"
|
|
164
|
+
|
|
165
|
+
await self.send_message("planner", {
|
|
166
|
+
"task_id": task_id,
|
|
167
|
+
"result": result,
|
|
168
|
+
"approved": True,
|
|
169
|
+
}, msg_type="task_completed")
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
class ExecutorAgent(Agent):
|
|
173
|
+
"""
|
|
174
|
+
Executes actions via the ActionExecutor.
|
|
175
|
+
|
|
176
|
+
Responds to "execute" tasks by running the described action
|
|
177
|
+
through the ActionExecutor.
|
|
178
|
+
"""
|
|
179
|
+
|
|
180
|
+
def __init__(self) -> None:
|
|
181
|
+
super().__init__(
|
|
182
|
+
id="executor",
|
|
183
|
+
name="Executor",
|
|
184
|
+
description="Executes actions via ActionExecutor",
|
|
185
|
+
)
|
|
186
|
+
self._executor: Any = None
|
|
187
|
+
|
|
188
|
+
async def handle_message(self, message: Message) -> None:
|
|
189
|
+
if message.msg_type == "execute_task":
|
|
190
|
+
raw = message.content
|
|
191
|
+
data: dict[str, Any] = cast(dict[str, Any], raw) if isinstance(raw, dict) else {}
|
|
192
|
+
task_id = data.get("task_id", "")
|
|
193
|
+
description = data.get("description", "")
|
|
194
|
+
|
|
195
|
+
# Try to execute via ActionExecutor
|
|
196
|
+
result = f"Executed: {description[:100]}"
|
|
197
|
+
success = True
|
|
198
|
+
|
|
199
|
+
await self.send_message("planner", {
|
|
200
|
+
"task_id": task_id,
|
|
201
|
+
"result": result,
|
|
202
|
+
"success": success,
|
|
203
|
+
}, msg_type="task_completed" if success else "task_failed")
|