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.
Files changed (630) hide show
  1. xyberos/__init__.py +74 -0
  2. xyberos/agents/__init__.py +33 -0
  3. xyberos/agents/agent.py +187 -0
  4. xyberos/agents/builtins.py +203 -0
  5. xyberos/agents/collaboration.py +293 -0
  6. xyberos/agents/context.py +23 -0
  7. xyberos/agents/discovery.py +50 -0
  8. xyberos/agents/lifecycle.py +20 -0
  9. xyberos/agents/manager.py +139 -0
  10. xyberos/agents/manifest.py +3 -0
  11. xyberos/agents/message_bus.py +140 -0
  12. xyberos/agents/plugin.py +93 -0
  13. xyberos/agents/registry.py +13 -0
  14. xyberos/agents/shared_memory.py +224 -0
  15. xyberos/agents/task.py +119 -0
  16. xyberos/api/__init__.py +30 -0
  17. xyberos/api/action.py +13 -0
  18. xyberos/api/chat.py +25 -0
  19. xyberos/api/memory.py +26 -0
  20. xyberos/api/plan.py +10 -0
  21. xyberos/api/reason.py +10 -0
  22. xyberos/assistant.py +259 -0
  23. xyberos/brain/__init__.py +568 -0
  24. xyberos/brain/action/__init__.py +42 -0
  25. xyberos/brain/action/exceptions.py +23 -0
  26. xyberos/brain/action/executor.py +161 -0
  27. xyberos/brain/action/interfaces.py +61 -0
  28. xyberos/brain/action/models.py +83 -0
  29. xyberos/brain/action/registry.py +16 -0
  30. xyberos/brain/attention/__init__.py +17 -0
  31. xyberos/brain/attention/attention.py +63 -0
  32. xyberos/brain/attention/interfaces.py +36 -0
  33. xyberos/brain/attention/models.py +35 -0
  34. xyberos/brain/attention/scorer.py +51 -0
  35. xyberos/brain/attention/selector.py +34 -0
  36. xyberos/brain/brain.py +216 -0
  37. xyberos/brain/cognition.py +17 -0
  38. xyberos/brain/context.py +60 -0
  39. xyberos/brain/core/__init__.py +0 -0
  40. xyberos/brain/core/constants.py +5 -0
  41. xyberos/brain/core/context.py +40 -0
  42. xyberos/brain/core/exceptions.py +32 -0
  43. xyberos/brain/core/interfaces.py +28 -0
  44. xyberos/brain/core/manager.py +41 -0
  45. xyberos/brain/core/metadata.py +32 -0
  46. xyberos/brain/core/pipeline.py +52 -0
  47. xyberos/brain/core/provider_registry.py +16 -0
  48. xyberos/brain/core/registry.py +78 -0
  49. xyberos/brain/core/stage.py +15 -0
  50. xyberos/brain/core/strategy_registry.py +13 -0
  51. xyberos/brain/decision/__init__.py +55 -0
  52. xyberos/brain/decision/engine.py +36 -0
  53. xyberos/brain/decision/evaluator.py +16 -0
  54. xyberos/brain/decision/exceptions.py +78 -0
  55. xyberos/brain/decision/interfaces.py +57 -0
  56. xyberos/brain/decision/metadata.py +10 -0
  57. xyberos/brain/decision/models.py +28 -0
  58. xyberos/brain/decision/policy_registry.py +9 -0
  59. xyberos/brain/decision/registry.py +9 -0
  60. xyberos/brain/language/__init__.py +65 -0
  61. xyberos/brain/language/exceptions.py +28 -0
  62. xyberos/brain/language/formatter.py +17 -0
  63. xyberos/brain/language/interfaces.py +31 -0
  64. xyberos/brain/language/metadata.py +10 -0
  65. xyberos/brain/language/models.py +24 -0
  66. xyberos/brain/language/parser.py +16 -0
  67. xyberos/brain/language/parsers/__init__.py +9 -0
  68. xyberos/brain/language/parsers/json.py +24 -0
  69. xyberos/brain/language/parsers/markdown.py +19 -0
  70. xyberos/brain/language/parsers/text.py +16 -0
  71. xyberos/brain/language/prompt.py +37 -0
  72. xyberos/brain/language/registry.py +36 -0
  73. xyberos/brain/language/template.py +34 -0
  74. xyberos/brain/language/templates/__init__.py +13 -0
  75. xyberos/brain/language/templates/decision.py +24 -0
  76. xyberos/brain/language/templates/planning.py +24 -0
  77. xyberos/brain/language/templates/reasoning.py +24 -0
  78. xyberos/brain/language/templates/reflection.py +24 -0
  79. xyberos/brain/language/templates/summary.py +21 -0
  80. xyberos/brain/learning/__init__.py +68 -0
  81. xyberos/brain/learning/adaptation.py +59 -0
  82. xyberos/brain/learning/confidence.py +59 -0
  83. xyberos/brain/learning/consolidation.py +58 -0
  84. xyberos/brain/learning/curriculum.py +28 -0
  85. xyberos/brain/learning/evaluator.py +70 -0
  86. xyberos/brain/learning/experience.py +36 -0
  87. xyberos/brain/learning/feedback.py +35 -0
  88. xyberos/brain/learning/learner.py +133 -0
  89. xyberos/brain/learning/policy.py +56 -0
  90. xyberos/brain/learning/reinforcement.py +91 -0
  91. xyberos/brain/learning/reward.py +38 -0
  92. xyberos/brain/loop/cognitive_loop.py +681 -0
  93. xyberos/brain/observability/__init__.py +19 -0
  94. xyberos/brain/observability/cognitive_monitor.py +175 -0
  95. xyberos/brain/observability/events.py +58 -0
  96. xyberos/brain/observability/metrics.py +98 -0
  97. xyberos/brain/perception/__init__.py +53 -0
  98. xyberos/brain/perception/exceptions.py +16 -0
  99. xyberos/brain/perception/extractor.py +34 -0
  100. xyberos/brain/perception/interfaces.py +82 -0
  101. xyberos/brain/perception/models.py +155 -0
  102. xyberos/brain/perception/normalizer.py +30 -0
  103. xyberos/brain/perception/parser.py +23 -0
  104. xyberos/brain/perception/perceiver.py +225 -0
  105. xyberos/brain/perception/pipeline.py +19 -0
  106. xyberos/brain/planning/__init__.py +67 -0
  107. xyberos/brain/planning/exceptions.py +83 -0
  108. xyberos/brain/planning/executor.py +174 -0
  109. xyberos/brain/planning/goal_manager.py +27 -0
  110. xyberos/brain/planning/graph/__init__.py +0 -0
  111. xyberos/brain/planning/graph/edge.py +0 -0
  112. xyberos/brain/planning/graph/graph.py +0 -0
  113. xyberos/brain/planning/graph/node.py +0 -0
  114. xyberos/brain/planning/interfaces.py +36 -0
  115. xyberos/brain/planning/metadata.py +37 -0
  116. xyberos/brain/planning/models.py +76 -0
  117. xyberos/brain/planning/plan_manager.py +28 -0
  118. xyberos/brain/planning/planner.py +112 -0
  119. xyberos/brain/planning/registry.py +9 -0
  120. xyberos/brain/planning/strategy_registry.py +12 -0
  121. xyberos/brain/planning/task_manager.py +27 -0
  122. xyberos/brain/planning/validators/__init__.py +0 -0
  123. xyberos/brain/planning/validators/cycle.py +0 -0
  124. xyberos/brain/planning/validators/dependency.py +0 -0
  125. xyberos/brain/planning/validators/feasibility.py +0 -0
  126. xyberos/brain/reasoning/__init__.py +51 -0
  127. xyberos/brain/reasoning/engine.py +229 -0
  128. xyberos/brain/reasoning/exceptions.py +33 -0
  129. xyberos/brain/reasoning/interfaces.py +104 -0
  130. xyberos/brain/reasoning/knowledge_base.py +114 -0
  131. xyberos/brain/reasoning/metadata.py +60 -0
  132. xyberos/brain/reasoning/models.py +44 -0
  133. xyberos/brain/reasoning/orchestrator.py +316 -0
  134. xyberos/brain/reasoning/pipeline.py +169 -0
  135. xyberos/brain/reasoning/provider_registry.py +11 -0
  136. xyberos/brain/reasoning/registry.py +45 -0
  137. xyberos/brain/reasoning/strategy_registry.py +11 -0
  138. xyberos/brain/reasoning/trace.py +13 -0
  139. xyberos/brain/reasoning/verifier.py +12 -0
  140. xyberos/brain/reflection/__init__.py +79 -0
  141. xyberos/brain/reflection/critic.py +61 -0
  142. xyberos/brain/reflection/critics/__init__.py +13 -0
  143. xyberos/brain/reflection/critics/consistency.py +21 -0
  144. xyberos/brain/reflection/critics/ethical.py +20 -0
  145. xyberos/brain/reflection/critics/factual.py +20 -0
  146. xyberos/brain/reflection/critics/logical.py +20 -0
  147. xyberos/brain/reflection/critics/performance.py +20 -0
  148. xyberos/brain/reflection/evaluator.py +58 -0
  149. xyberos/brain/reflection/exceptions.py +52 -0
  150. xyberos/brain/reflection/improvement.py +47 -0
  151. xyberos/brain/reflection/improvers/__init__.py +13 -0
  152. xyberos/brain/reflection/improvers/opitimize.py +18 -0
  153. xyberos/brain/reflection/improvers/retry.py +23 -0
  154. xyberos/brain/reflection/improvers/rewrite.py +21 -0
  155. xyberos/brain/reflection/improvers/simplify.py +20 -0
  156. xyberos/brain/reflection/interfaces.py +42 -0
  157. xyberos/brain/reflection/metadata.py +10 -0
  158. xyberos/brain/reflection/models.py +17 -0
  159. xyberos/brain/reflection/reflector.py +52 -0
  160. xyberos/brain/reflection/registry.py +38 -0
  161. xyberos/brain/runtime/adapter.py +34 -0
  162. xyberos/brain/runtime/bridge.py +84 -0
  163. xyberos/brain/runtime/context.py +19 -0
  164. xyberos/brain/workflow/__init__.py +54 -0
  165. xyberos/brain/workflow/definition.py +43 -0
  166. xyberos/brain/workflow/exceptions.py +64 -0
  167. xyberos/brain/workflow/executor.py +326 -0
  168. xyberos/brain/workflow/graph.py +50 -0
  169. xyberos/brain/workflow/interfaces.py +34 -0
  170. xyberos/brain/workflow/metadata.py +10 -0
  171. xyberos/brain/workflow/models.py +58 -0
  172. xyberos/brain/workflow/registry.py +9 -0
  173. xyberos/brain/workflow/schedulers/__init__.py +9 -0
  174. xyberos/brain/workflow/schedulers/parallel.py +23 -0
  175. xyberos/brain/workflow/schedulers/priority.py +27 -0
  176. xyberos/brain/workflow/schedulers/sequential.py +16 -0
  177. xyberos/brain/workflow/validators/__init__.py +9 -0
  178. xyberos/brain/workflow/validators/cycle.py +39 -0
  179. xyberos/brain/workflow/validators/dependency.py +30 -0
  180. xyberos/brain/workflow/validators/state.py +21 -0
  181. xyberos/common/__init__.py +76 -0
  182. xyberos/common/capabilities.py +128 -0
  183. xyberos/common/errors.py +61 -0
  184. xyberos/common/guards.py +103 -0
  185. xyberos/common/pipeline.py +202 -0
  186. xyberos/common/provider.py +77 -0
  187. xyberos/common/registry.py +473 -0
  188. xyberos/common/service.py +186 -0
  189. xyberos/common/types.py +61 -0
  190. xyberos/config/__init__.py +24 -0
  191. xyberos/config/config.py +183 -0
  192. xyberos/config/loaders/__init__.py +1 -0
  193. xyberos/config/loaders/env.py +74 -0
  194. xyberos/config/loaders/yaml.py +105 -0
  195. xyberos/database/__init__.py +134 -0
  196. xyberos/database/events.py +109 -0
  197. xyberos/database/exceptions.py +37 -0
  198. xyberos/database/interfaces.py +205 -0
  199. xyberos/database/manager.py +564 -0
  200. xyberos/database/models.py +210 -0
  201. xyberos/database/pool.py +288 -0
  202. xyberos/database/providers/__init__.py +11 -0
  203. xyberos/database/providers/memory.py +219 -0
  204. xyberos/database/providers/sqlite.py +351 -0
  205. xyberos/database/registry.py +19 -0
  206. xyberos/database/service.py +38 -0
  207. xyberos/embeddings/__init__.py +17 -0
  208. xyberos/embeddings/embedding.py +13 -0
  209. xyberos/embeddings/embedding_registry.py +53 -0
  210. xyberos/embeddings/sentence_transformer.py +95 -0
  211. xyberos/kernel/__init__.py +9 -0
  212. xyberos/kernel/bootstrap/__init__.py +13 -0
  213. xyberos/kernel/bootstrap/bootstrap.py +39 -0
  214. xyberos/kernel/bootstrap/shutdown.py +42 -0
  215. xyberos/kernel/bootstrap/startup.py +51 -0
  216. xyberos/kernel/common/__init__.py +19 -0
  217. xyberos/kernel/common/kernel_service.py +126 -0
  218. xyberos/kernel/common/lifecycle_mixin.py +56 -0
  219. xyberos/kernel/common/provider_registry.py +9 -0
  220. xyberos/kernel/common/provider_service.py +9 -0
  221. xyberos/kernel/common/service_context.py +248 -0
  222. xyberos/kernel/container/__init__.py +15 -0
  223. xyberos/kernel/container/container.py +37 -0
  224. xyberos/kernel/container/dependency.py +11 -0
  225. xyberos/kernel/container/injector.py +18 -0
  226. xyberos/kernel/container/provider.py +21 -0
  227. xyberos/kernel/core/__init__.py +0 -0
  228. xyberos/kernel/core/component.py +42 -0
  229. xyberos/kernel/core/constants.py +35 -0
  230. xyberos/kernel/core/metadata.py +31 -0
  231. xyberos/kernel/core/service.py +43 -0
  232. xyberos/kernel/core/status.py +30 -0
  233. xyberos/kernel/events/__init__.py +27 -0
  234. xyberos/kernel/events/kernel_events.py +11 -0
  235. xyberos/kernel/events/lifecycle_events.py +11 -0
  236. xyberos/kernel/kernel.py +131 -0
  237. xyberos/kernel/lifecycle/__init__.py +13 -0
  238. xyberos/kernel/lifecycle/hooks.py +9 -0
  239. xyberos/kernel/lifecycle/lifecycle.py +27 -0
  240. xyberos/kernel/lifecycle/manager.py +36 -0
  241. xyberos/kernel/observability/__init__.py +28 -0
  242. xyberos/kernel/observability/diagnostics.py +10 -0
  243. xyberos/kernel/observability/health.py +28 -0
  244. xyberos/kernel/observability/interface.py +55 -0
  245. xyberos/kernel/observability/metrics.py +72 -0
  246. xyberos/kernel/observability/models.py +61 -0
  247. xyberos/kernel/observability/null.py +31 -0
  248. xyberos/kernel/observability/profiler.py +17 -0
  249. xyberos/kernel/observability/tracing.py +22 -0
  250. xyberos/kernel/registry/__init__.py +15 -0
  251. xyberos/kernel/registry/loader_registry.py +32 -0
  252. xyberos/kernel/registry/module_registry.py +5 -0
  253. xyberos/kernel/registry/registry.py +32 -0
  254. xyberos/kernel/registry/service_registry.py +5 -0
  255. xyberos/kernel/services/__init__.py +3 -0
  256. xyberos/kernel/services/config/__init__.py +7 -0
  257. xyberos/kernel/services/config/interface.py +67 -0
  258. xyberos/kernel/services/config/loader.py +116 -0
  259. xyberos/kernel/services/config/loaders/__init__.py +13 -0
  260. xyberos/kernel/services/config/loaders/base.py +17 -0
  261. xyberos/kernel/services/config/loaders/env_loader.py +17 -0
  262. xyberos/kernel/services/config/loaders/json_loader.py +24 -0
  263. xyberos/kernel/services/config/loaders/toml_loader.py +24 -0
  264. xyberos/kernel/services/config/loaders/yaml_loader.py +28 -0
  265. xyberos/kernel/services/config/model.py +17 -0
  266. xyberos/kernel/services/config/service.py +80 -0
  267. xyberos/kernel/services/discovery/__init__.py +23 -0
  268. xyberos/kernel/services/discovery/exceptions.py +6 -0
  269. xyberos/kernel/services/discovery/interface.py +60 -0
  270. xyberos/kernel/services/discovery/models.py +48 -0
  271. xyberos/kernel/services/discovery/providers/__init__.py +7 -0
  272. xyberos/kernel/services/discovery/providers/base.py +44 -0
  273. xyberos/kernel/services/discovery/providers/filesystem.py +77 -0
  274. xyberos/kernel/services/discovery/service.py +132 -0
  275. xyberos/kernel/services/eventbus/__init__.py +15 -0
  276. xyberos/kernel/services/eventbus/event.py +28 -0
  277. xyberos/kernel/services/eventbus/events.py +12 -0
  278. xyberos/kernel/services/eventbus/exceptions.py +10 -0
  279. xyberos/kernel/services/eventbus/interface.py +50 -0
  280. xyberos/kernel/services/eventbus/service.py +84 -0
  281. xyberos/kernel/services/eventbus/subscription.py +24 -0
  282. xyberos/kernel/services/filesystem/__init__.py +16 -0
  283. xyberos/kernel/services/filesystem/drivers/__init__.py +7 -0
  284. xyberos/kernel/services/filesystem/drivers/base.py +117 -0
  285. xyberos/kernel/services/filesystem/drivers/local.py +178 -0
  286. xyberos/kernel/services/filesystem/errors.py +14 -0
  287. xyberos/kernel/services/filesystem/interface.py +114 -0
  288. xyberos/kernel/services/filesystem/models.py +14 -0
  289. xyberos/kernel/services/filesystem/providers/__init__.py +0 -0
  290. xyberos/kernel/services/filesystem/providers/base.py +22 -0
  291. xyberos/kernel/services/filesystem/providers/local.py +123 -0
  292. xyberos/kernel/services/filesystem/service.py +124 -0
  293. xyberos/kernel/services/logger/__init__.py +0 -0
  294. xyberos/kernel/services/logger/handlers/base.py +16 -0
  295. xyberos/kernel/services/logger/handlers/console.py +42 -0
  296. xyberos/kernel/services/logger/handlers/file.py +0 -0
  297. xyberos/kernel/services/logger/handlers/null.py +0 -0
  298. xyberos/kernel/services/logger/interface.py +55 -0
  299. xyberos/kernel/services/logger/service.py +60 -0
  300. xyberos/kernel/services/monitoring/__init__.py +19 -0
  301. xyberos/kernel/services/monitoring/exceptions.py +2 -0
  302. xyberos/kernel/services/monitoring/interface.py +42 -0
  303. xyberos/kernel/services/monitoring/models.py +16 -0
  304. xyberos/kernel/services/monitoring/providers/__init__.py +7 -0
  305. xyberos/kernel/services/monitoring/providers/base.py +42 -0
  306. xyberos/kernel/services/monitoring/providers/local.py +52 -0
  307. xyberos/kernel/services/monitoring/recorder.py +64 -0
  308. xyberos/kernel/services/monitoring/service.py +75 -0
  309. xyberos/kernel/services/rpc/__init__.py +27 -0
  310. xyberos/kernel/services/rpc/exceptions.py +14 -0
  311. xyberos/kernel/services/rpc/interface.py +48 -0
  312. xyberos/kernel/services/rpc/models.py +53 -0
  313. xyberos/kernel/services/rpc/providers/__init__.py +7 -0
  314. xyberos/kernel/services/rpc/providers/base.py +51 -0
  315. xyberos/kernel/services/rpc/providers/local.py +81 -0
  316. xyberos/kernel/services/rpc/service.py +91 -0
  317. xyberos/kernel/services/scheduler/interface.py +37 -0
  318. xyberos/kernel/services/scheduler/registry/base.py +10 -0
  319. xyberos/kernel/services/scheduler/registry/thread.py +0 -0
  320. xyberos/kernel/services/scheduler/service.py +50 -0
  321. xyberos/kernel/services/scheduler/task.py +45 -0
  322. xyberos/kernel/services/scheduler/task_registry.py +0 -0
  323. xyberos/kernel/services/security/__init__.py +46 -0
  324. xyberos/kernel/services/security/evaluator.py +5 -0
  325. xyberos/kernel/services/security/exceptions.py +5 -0
  326. xyberos/kernel/services/security/interface.py +57 -0
  327. xyberos/kernel/services/security/models.py +5 -0
  328. xyberos/kernel/services/security/provider.py +5 -0
  329. xyberos/kernel/services/security/providers/__init__.py +5 -0
  330. xyberos/kernel/services/security/providers/base.py +5 -0
  331. xyberos/kernel/services/security/providers/default.py +5 -0
  332. xyberos/kernel/services/security/service.py +190 -0
  333. xyberos/kernel/services/session/__init__.py +19 -0
  334. xyberos/kernel/services/session/exceptions.py +10 -0
  335. xyberos/kernel/services/session/interface.py +36 -0
  336. xyberos/kernel/services/session/models.py +52 -0
  337. xyberos/kernel/services/session/providers/__init__.py +7 -0
  338. xyberos/kernel/services/session/providers/base.py +39 -0
  339. xyberos/kernel/services/session/providers/default.py +39 -0
  340. xyberos/kernel/services/session/service.py +85 -0
  341. xyberos/kernel/services/state/interface.py +47 -0
  342. xyberos/kernel/services/state/service.py +56 -0
  343. xyberos/kernel/services/state/state.py +16 -0
  344. xyberos/kernel/services/state/store.py +69 -0
  345. xyberos/kernel/services/storage/interface.py +10 -0
  346. xyberos/kernel/services/storage/providers/__init__.py +14 -0
  347. xyberos/kernel/services/storage/providers/base.py +10 -0
  348. xyberos/kernel/services/storage/providers/filesystem.py +9 -0
  349. xyberos/kernel/services/storage/providers/memory.py +10 -0
  350. xyberos/kernel/services/storage/service.py +153 -0
  351. xyberos/knowledge/__init__.py +60 -0
  352. xyberos/knowledge/cache.py +21 -0
  353. xyberos/knowledge/chunks.py +11 -0
  354. xyberos/knowledge/citation.py +13 -0
  355. xyberos/knowledge/embedding.py +13 -0
  356. xyberos/knowledge/embedding_registry.py +39 -0
  357. xyberos/knowledge/exceptions.py +19 -0
  358. xyberos/knowledge/fusion.py +38 -0
  359. xyberos/knowledge/grounding.py +36 -0
  360. xyberos/knowledge/indexing.py +15 -0
  361. xyberos/knowledge/manager.py +176 -0
  362. xyberos/knowledge/metadata.py +18 -0
  363. xyberos/knowledge/provider_registry.py +50 -0
  364. xyberos/knowledge/providers/__init__.py +32 -0
  365. xyberos/knowledge/providers/api.py +14 -0
  366. xyberos/knowledge/providers/base.py +41 -0
  367. xyberos/knowledge/providers/filesystem.py +102 -0
  368. xyberos/knowledge/providers/graph.py +20 -0
  369. xyberos/knowledge/providers/memory.py +79 -0
  370. xyberos/knowledge/providers/memory_retrieval.py +94 -0
  371. xyberos/knowledge/providers/sentence_transformer.py +94 -0
  372. xyberos/knowledge/providers/sql.py +20 -0
  373. xyberos/knowledge/providers/vector.py +20 -0
  374. xyberos/knowledge/providers/web.py +99 -0
  375. xyberos/knowledge/ranking.py +16 -0
  376. xyberos/knowledge/reranker.py +16 -0
  377. xyberos/knowledge/retrieval.py +21 -0
  378. xyberos/memory/__init__.py +62 -0
  379. xyberos/memory/episodic/__init__.py +105 -0
  380. xyberos/memory/exceptions.py +25 -0
  381. xyberos/memory/interfaces.py +77 -0
  382. xyberos/memory/knowledge/__init__.py +113 -0
  383. xyberos/memory/manager.py +277 -0
  384. xyberos/memory/models.py +100 -0
  385. xyberos/memory/procedural/__init__.py +87 -0
  386. xyberos/memory/registry.py +19 -0
  387. xyberos/memory/retrieval/__init__.py +87 -0
  388. xyberos/memory/semantic/__init__.py +117 -0
  389. xyberos/memory/vector/__init__.py +120 -0
  390. xyberos/memory/working/__init__.py +102 -0
  391. xyberos/ml/__init__.py +43 -0
  392. xyberos/ml/evaluator.py +209 -0
  393. xyberos/ml/optimizer.py +31 -0
  394. xyberos/ml/pipeline.py +151 -0
  395. xyberos/ml/service.py +207 -0
  396. xyberos/ml/trainer.py +28 -0
  397. xyberos/models/__init__.py +21 -0
  398. xyberos/models/action.py +17 -0
  399. xyberos/models/decision.py +19 -0
  400. xyberos/models/embedding.py +25 -0
  401. xyberos/models/goal.py +26 -0
  402. xyberos/models/observation.py +213 -0
  403. xyberos/models/plan.py +17 -0
  404. xyberos/models/sentiment.py +97 -0
  405. xyberos/models/thought.py +19 -0
  406. xyberos/plugins/__init__.py +45 -0
  407. xyberos/plugins/component.py +37 -0
  408. xyberos/plugins/loader.py +118 -0
  409. xyberos/plugins/manager.py +253 -0
  410. xyberos/plugins/manifest.py +3 -0
  411. xyberos/plugins/plugin.py +120 -0
  412. xyberos/plugins/registry.py +82 -0
  413. xyberos/processors/__init__.py +183 -0
  414. xyberos/processors/context.py +54 -0
  415. xyberos/processors/entities.py +44 -0
  416. xyberos/processors/intent.py +62 -0
  417. xyberos/processors/keywords.py +53 -0
  418. xyberos/processors/language.py +62 -0
  419. xyberos/processors/metadata.py +53 -0
  420. xyberos/processors/safety.py +53 -0
  421. xyberos/processors/semantics.py +59 -0
  422. xyberos/processors/sentiment.py +37 -0
  423. xyberos/processors/syntax.py +62 -0
  424. xyberos/processors/tokenizer.py +58 -0
  425. xyberos/providers/__init__.py +48 -0
  426. xyberos/providers/base.py +31 -0
  427. xyberos/providers/composite.py +89 -0
  428. xyberos/providers/context/__init__.py +27 -0
  429. xyberos/providers/context/config.py +21 -0
  430. xyberos/providers/context/default.py +53 -0
  431. xyberos/providers/context/exceptions.py +10 -0
  432. xyberos/providers/context/interface.py +25 -0
  433. xyberos/providers/context/manager.py +27 -0
  434. xyberos/providers/context/registry.py +15 -0
  435. xyberos/providers/context/result.py +21 -0
  436. xyberos/providers/embedding/__init__.py +29 -0
  437. xyberos/providers/embedding/config.py +23 -0
  438. xyberos/providers/embedding/exceptions.py +10 -0
  439. xyberos/providers/embedding/interface.py +28 -0
  440. xyberos/providers/embedding/manager.py +40 -0
  441. xyberos/providers/embedding/provider.py +30 -0
  442. xyberos/providers/embedding/registry.py +13 -0
  443. xyberos/providers/embedding/result.py +31 -0
  444. xyberos/providers/embedding/service.py +28 -0
  445. xyberos/providers/entities/interface.py +22 -0
  446. xyberos/providers/entities/manager.py +39 -0
  447. xyberos/providers/entities/regex.py +86 -0
  448. xyberos/providers/entities/registry.py +13 -0
  449. xyberos/providers/filesystem.py +96 -0
  450. xyberos/providers/http.py +100 -0
  451. xyberos/providers/hybrid.py +26 -0
  452. xyberos/providers/intent/__init__.py +27 -0
  453. xyberos/providers/intent/config.py +21 -0
  454. xyberos/providers/intent/default.py +55 -0
  455. xyberos/providers/intent/exceptions.py +10 -0
  456. xyberos/providers/intent/interface.py +24 -0
  457. xyberos/providers/intent/manager.py +50 -0
  458. xyberos/providers/intent/registry.py +15 -0
  459. xyberos/providers/intent/result.py +23 -0
  460. xyberos/providers/keywords/frequency.py +66 -0
  461. xyberos/providers/keywords/interface.py +23 -0
  462. xyberos/providers/keywords/manager.py +25 -0
  463. xyberos/providers/keywords/registry.py +15 -0
  464. xyberos/providers/language/interface.py +24 -0
  465. xyberos/providers/language/lingua.py +57 -0
  466. xyberos/providers/language/manager.py +25 -0
  467. xyberos/providers/language/registry.py +15 -0
  468. xyberos/providers/llm.py +266 -0
  469. xyberos/providers/llm_backends.py +306 -0
  470. xyberos/providers/metadata/default.py +56 -0
  471. xyberos/providers/metadata/interface.py +23 -0
  472. xyberos/providers/metadata/manager.py +27 -0
  473. xyberos/providers/metadata/registry.py +15 -0
  474. xyberos/providers/python.py +65 -0
  475. xyberos/providers/rule_engine.py +26 -0
  476. xyberos/providers/safety/config.py +91 -0
  477. xyberos/providers/safety/default.py +62 -0
  478. xyberos/providers/safety/interface.py +23 -0
  479. xyberos/providers/safety/manager.py +49 -0
  480. xyberos/providers/safety/registry.py +15 -0
  481. xyberos/providers/semantics/__init__.py +27 -0
  482. xyberos/providers/semantics/config.py +21 -0
  483. xyberos/providers/semantics/default.py +72 -0
  484. xyberos/providers/semantics/exceptions.py +10 -0
  485. xyberos/providers/semantics/interface.py +26 -0
  486. xyberos/providers/semantics/manager.py +28 -0
  487. xyberos/providers/semantics/registry.py +15 -0
  488. xyberos/providers/semantics/result.py +21 -0
  489. xyberos/providers/sentiment/__init__.py +29 -0
  490. xyberos/providers/sentiment/config.py +21 -0
  491. xyberos/providers/sentiment/exceptions.py +10 -0
  492. xyberos/providers/sentiment/interface.py +20 -0
  493. xyberos/providers/sentiment/manager.py +22 -0
  494. xyberos/providers/sentiment/provider.py +11 -0
  495. xyberos/providers/sentiment/registry.py +13 -0
  496. xyberos/providers/sentiment/result.py +23 -0
  497. xyberos/providers/sentiment/service.py +23 -0
  498. xyberos/providers/shell.py +76 -0
  499. xyberos/providers/symbolic.py +26 -0
  500. xyberos/providers/syntax/__init__.py +27 -0
  501. xyberos/providers/syntax/config.py +21 -0
  502. xyberos/providers/syntax/default.py +121 -0
  503. xyberos/providers/syntax/exceptions.py +10 -0
  504. xyberos/providers/syntax/interface.py +26 -0
  505. xyberos/providers/syntax/manager.py +27 -0
  506. xyberos/providers/syntax/registry.py +15 -0
  507. xyberos/providers/syntax/result.py +23 -0
  508. xyberos/providers/tokenizer/interface.py +24 -0
  509. xyberos/providers/tokenizer/manager.py +24 -0
  510. xyberos/providers/tokenizer/registry.py +15 -0
  511. xyberos/providers/tokenizer/simple.py +34 -0
  512. xyberos/runtime/__init__.py +11 -0
  513. xyberos/runtime/context/__init__.py +11 -0
  514. xyberos/runtime/context/execution_context.py +32 -0
  515. xyberos/runtime/context/runtime_context.py +31 -0
  516. xyberos/runtime/context/session_context.py +32 -0
  517. xyberos/runtime/core/__init__.py +15 -0
  518. xyberos/runtime/core/executable.py +137 -0
  519. xyberos/runtime/core/lifecycle.py +29 -0
  520. xyberos/runtime/core/manager.py +51 -0
  521. xyberos/runtime/core/metadata.py +18 -0
  522. xyberos/runtime/core/registry.py +41 -0
  523. xyberos/runtime/execution/__init__.py +13 -0
  524. xyberos/runtime/execution/executor.py +29 -0
  525. xyberos/runtime/execution/invocation.py +21 -0
  526. xyberos/runtime/execution/pipeline.py +36 -0
  527. xyberos/runtime/execution/result.py +40 -0
  528. xyberos/runtime/manifests/__init__.py +15 -0
  529. xyberos/runtime/manifests/agent_manifest.py +14 -0
  530. xyberos/runtime/manifests/base_manifest.py +30 -0
  531. xyberos/runtime/manifests/module_manifest.py +16 -0
  532. xyberos/runtime/manifests/plugin_manifest.py +14 -0
  533. xyberos/runtime/manifests/skill_manifest.py +12 -0
  534. xyberos/runtime/modules/__init__.py +15 -0
  535. xyberos/runtime/modules/loader.py +29 -0
  536. xyberos/runtime/modules/manager.py +15 -0
  537. xyberos/runtime/modules/manifest.py +3 -0
  538. xyberos/runtime/modules/module.py +31 -0
  539. xyberos/runtime/modules/registry.py +11 -0
  540. xyberos/runtime/runtime.py +40 -0
  541. xyberos/runtime/sandbox/__init__.py +3 -0
  542. xyberos/runtime/services/__init__.py +3 -0
  543. xyberos/security/__init__.py +82 -0
  544. xyberos/security/approval/__init__.py +124 -0
  545. xyberos/security/approval/engine.py +12 -0
  546. xyberos/security/audit/__init__.py +160 -0
  547. xyberos/security/audit/service.py +12 -0
  548. xyberos/security/capability/__init__.py +88 -0
  549. xyberos/security/capability/manager.py +12 -0
  550. xyberos/security/evaluator.py +100 -0
  551. xyberos/security/exceptions.py +41 -0
  552. xyberos/security/governor/__init__.py +175 -0
  553. xyberos/security/governor/governor.py +13 -0
  554. xyberos/security/guardian/__init__.py +99 -0
  555. xyberos/security/guardian/engine.py +12 -0
  556. xyberos/security/interface.py +55 -0
  557. xyberos/security/kill_switch/__init__.py +293 -0
  558. xyberos/security/kill_switch/engine.py +21 -0
  559. xyberos/security/models.py +77 -0
  560. xyberos/security/plugin.py +71 -0
  561. xyberos/security/policy/__init__.py +184 -0
  562. xyberos/security/policy/engine.py +15 -0
  563. xyberos/security/providers/__init__.py +7 -0
  564. xyberos/security/providers/base.py +59 -0
  565. xyberos/security/providers/default.py +78 -0
  566. xyberos/security/risk/__init__.py +163 -0
  567. xyberos/security/risk/engine.py +13 -0
  568. xyberos/security/service.py +226 -0
  569. xyberos/server/__init__.py +22 -0
  570. xyberos/server/app.py +119 -0
  571. xyberos/server/models.py +128 -0
  572. xyberos/server/routes/__init__.py +1 -0
  573. xyberos/server/routes/action.py +31 -0
  574. xyberos/server/routes/chat.py +103 -0
  575. xyberos/server/routes/memory.py +79 -0
  576. xyberos/server/routes/plan.py +31 -0
  577. xyberos/server/routes/reason.py +40 -0
  578. xyberos/server/routes/tools.py +40 -0
  579. xyberos/skills/__init__.py +15 -0
  580. xyberos/skills/base.py +60 -0
  581. xyberos/skills/builtins.py +111 -0
  582. xyberos/skills/discovery.py +105 -0
  583. xyberos/skills/loader.py +29 -0
  584. xyberos/skills/manager.py +65 -0
  585. xyberos/skills/manifest.py +3 -0
  586. xyberos/skills/registry.py +11 -0
  587. xyberos/storage/__init__.py +45 -0
  588. xyberos/storage/exceptions.py +29 -0
  589. xyberos/storage/interfaces.py +59 -0
  590. xyberos/storage/local/__init__.py +174 -0
  591. xyberos/storage/manager.py +292 -0
  592. xyberos/storage/memory/__init__.py +127 -0
  593. xyberos/storage/models.py +92 -0
  594. xyberos/storage/registry.py +19 -0
  595. xyberos/strategies/__init__.py +53 -0
  596. xyberos/strategies/abductive.py +41 -0
  597. xyberos/strategies/adaptive.py +0 -0
  598. xyberos/strategies/analogical.py +42 -0
  599. xyberos/strategies/confidence.py +30 -0
  600. xyberos/strategies/deductive.py +136 -0
  601. xyberos/strategies/fusion.py +87 -0
  602. xyberos/strategies/graph.py +0 -0
  603. xyberos/strategies/greedy.py +36 -0
  604. xyberos/strategies/hierarchical.py +0 -0
  605. xyberos/strategies/highest_score.py +36 -0
  606. xyberos/strategies/hybrid.py +41 -0
  607. xyberos/strategies/inductive.py +134 -0
  608. xyberos/strategies/llm.py +37 -0
  609. xyberos/strategies/probabilistic.py +43 -0
  610. xyberos/strategies/reactive.py +0 -0
  611. xyberos/strategies/risk_aware.py +38 -0
  612. xyberos/strategies/rule_based.py +39 -0
  613. xyberos/strategies/sequential.py +0 -0
  614. xyberos/strategies/symbolic.py +32 -0
  615. xyberos/strategies/utility.py +34 -0
  616. xyberos/strategies/verification.py +128 -0
  617. xyberos/tools/__init__.py +65 -0
  618. xyberos/tools/base.py +96 -0
  619. xyberos/tools/builtins.py +341 -0
  620. xyberos/tools/exceptions.py +27 -0
  621. xyberos/tools/manager.py +224 -0
  622. xyberos/tools/models.py +111 -0
  623. xyberos/tools/registry.py +22 -0
  624. xyberos/utils/__init__.py +0 -0
  625. xyberos-0.4.2.dist-info/METADATA +109 -0
  626. xyberos-0.4.2.dist-info/RECORD +630 -0
  627. xyberos-0.4.2.dist-info/WHEEL +5 -0
  628. xyberos-0.4.2.dist-info/entry_points.txt +83 -0
  629. xyberos-0.4.2.dist-info/licenses/LICENSE +201 -0
  630. 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
+ ]
@@ -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")