ciris-agent 1.7.7__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.
- ciris_adapters/README.md +113 -0
- ciris_adapters/__init__.py +30 -0
- ciris_adapters/ciris_covenant_metrics/README.md +144 -0
- ciris_adapters/ciris_covenant_metrics/__init__.py +36 -0
- ciris_adapters/ciris_covenant_metrics/adapter.py +249 -0
- ciris_adapters/ciris_covenant_metrics/manifest.json +152 -0
- ciris_adapters/ciris_covenant_metrics/services.py +403 -0
- ciris_adapters/ciris_hosted_tools/__init__.py +24 -0
- ciris_adapters/ciris_hosted_tools/adapter.py +169 -0
- ciris_adapters/ciris_hosted_tools/manifest.json +94 -0
- ciris_adapters/ciris_hosted_tools/services.py +744 -0
- ciris_adapters/external_data_sql/README.md +559 -0
- ciris_adapters/external_data_sql/__init__.py +43 -0
- ciris_adapters/external_data_sql/adapter.py +144 -0
- ciris_adapters/external_data_sql/configurable.py +315 -0
- ciris_adapters/external_data_sql/dialects/__init__.py +37 -0
- ciris_adapters/external_data_sql/dialects/base.py +133 -0
- ciris_adapters/external_data_sql/dialects/mysql.py +63 -0
- ciris_adapters/external_data_sql/dialects/postgresql.py +59 -0
- ciris_adapters/external_data_sql/dialects/sqlite.py +62 -0
- ciris_adapters/external_data_sql/example_config.json +88 -0
- ciris_adapters/external_data_sql/example_privacy_schema.yaml +127 -0
- ciris_adapters/external_data_sql/manifest.json +195 -0
- ciris_adapters/external_data_sql/privacy_schema_loader.py +189 -0
- ciris_adapters/external_data_sql/protocol.py +101 -0
- ciris_adapters/external_data_sql/schemas.py +146 -0
- ciris_adapters/external_data_sql/service.py +1547 -0
- ciris_adapters/external_data_sql/service_old.py +492 -0
- ciris_adapters/home_assistant/__init__.py +63 -0
- ciris_adapters/home_assistant/adapter.py +201 -0
- ciris_adapters/home_assistant/communication_service.py +347 -0
- ciris_adapters/home_assistant/configurable.py +667 -0
- ciris_adapters/home_assistant/manifest.json +203 -0
- ciris_adapters/home_assistant/schemas.py +129 -0
- ciris_adapters/home_assistant/service.py +751 -0
- ciris_adapters/home_assistant/tool_service.py +441 -0
- ciris_adapters/mcp_client/__init__.py +82 -0
- ciris_adapters/mcp_client/adapter.py +847 -0
- ciris_adapters/mcp_client/config.py +280 -0
- ciris_adapters/mcp_client/configurable.py +422 -0
- ciris_adapters/mcp_client/manifest.json +185 -0
- ciris_adapters/mcp_client/mcp_communication_service.py +393 -0
- ciris_adapters/mcp_client/mcp_tool_service.py +463 -0
- ciris_adapters/mcp_client/mcp_wise_service.py +394 -0
- ciris_adapters/mcp_client/schemas.py +149 -0
- ciris_adapters/mcp_client/security.py +592 -0
- ciris_adapters/mcp_common/__init__.py +44 -0
- ciris_adapters/mcp_common/manifest.json +25 -0
- ciris_adapters/mcp_common/protocol.py +315 -0
- ciris_adapters/mcp_common/schemas.py +225 -0
- ciris_adapters/mcp_server/__init__.py +47 -0
- ciris_adapters/mcp_server/adapter.py +581 -0
- ciris_adapters/mcp_server/config.py +260 -0
- ciris_adapters/mcp_server/configurable.py +393 -0
- ciris_adapters/mcp_server/handlers.py +663 -0
- ciris_adapters/mcp_server/manifest.json +211 -0
- ciris_adapters/mcp_server/security.py +500 -0
- ciris_adapters/mock_llm/README.md +117 -0
- ciris_adapters/mock_llm/__init__.py +21 -0
- ciris_adapters/mock_llm/adapter.py +131 -0
- ciris_adapters/mock_llm/configurable.py +237 -0
- ciris_adapters/mock_llm/manifest.json +106 -0
- ciris_adapters/mock_llm/protocol.py +37 -0
- ciris_adapters/mock_llm/responses.py +520 -0
- ciris_adapters/mock_llm/responses_action_selection.py +1041 -0
- ciris_adapters/mock_llm/responses_epistemic.py +17 -0
- ciris_adapters/mock_llm/responses_feedback.py +27 -0
- ciris_adapters/mock_llm/schemas.py +35 -0
- ciris_adapters/mock_llm/service.py +294 -0
- ciris_adapters/navigation/__init__.py +21 -0
- ciris_adapters/navigation/adapter.py +129 -0
- ciris_adapters/navigation/configurable.py +239 -0
- ciris_adapters/navigation/manifest.json +104 -0
- ciris_adapters/navigation/service.py +487 -0
- ciris_adapters/reddit/README.md +132 -0
- ciris_adapters/reddit/REDDIT_ADAPTER_ANALYSIS.md +715 -0
- ciris_adapters/reddit/REDDIT_ADAPTER_SUMMARY.txt +278 -0
- ciris_adapters/reddit/REDDIT_ANALYSIS_INDEX.md +307 -0
- ciris_adapters/reddit/REDDIT_PRODUCTION_READINESS_PLAN.md +518 -0
- ciris_adapters/reddit/__init__.py +15 -0
- ciris_adapters/reddit/adapter.py +189 -0
- ciris_adapters/reddit/configurable.py +274 -0
- ciris_adapters/reddit/error_handler.py +307 -0
- ciris_adapters/reddit/manifest.json +218 -0
- ciris_adapters/reddit/observer.py +532 -0
- ciris_adapters/reddit/protocol.py +34 -0
- ciris_adapters/reddit/schemas.py +433 -0
- ciris_adapters/reddit/service.py +1471 -0
- ciris_adapters/sample_adapter/README.md +474 -0
- ciris_adapters/sample_adapter/__init__.py +45 -0
- ciris_adapters/sample_adapter/adapter.py +208 -0
- ciris_adapters/sample_adapter/configurable.py +469 -0
- ciris_adapters/sample_adapter/manifest.json +247 -0
- ciris_adapters/sample_adapter/services.py +486 -0
- ciris_adapters/weather/__init__.py +16 -0
- ciris_adapters/weather/adapter.py +130 -0
- ciris_adapters/weather/configurable.py +240 -0
- ciris_adapters/weather/manifest.json +156 -0
- ciris_adapters/weather/service.py +600 -0
- ciris_agent-1.7.7.dist-info/METADATA +284 -0
- ciris_agent-1.7.7.dist-info/RECORD +986 -0
- ciris_agent-1.7.7.dist-info/WHEEL +5 -0
- ciris_agent-1.7.7.dist-info/entry_points.txt +15 -0
- ciris_agent-1.7.7.dist-info/licenses/LICENSE +205 -0
- ciris_agent-1.7.7.dist-info/licenses/NOTICE +82 -0
- ciris_agent-1.7.7.dist-info/top_level.txt +4 -0
- ciris_engine/__init__.py +15 -0
- ciris_engine/ciris_templates/ally.yaml +632 -0
- ciris_engine/ciris_templates/default.yaml +411 -0
- ciris_engine/ciris_templates/echo-core.yaml +629 -0
- ciris_engine/ciris_templates/echo-speculative.yaml +764 -0
- ciris_engine/ciris_templates/echo.yaml +647 -0
- ciris_engine/ciris_templates/sage.yaml +332 -0
- ciris_engine/ciris_templates/scout.yaml +338 -0
- ciris_engine/ciris_templates/test.yaml +168 -0
- ciris_engine/cli.py +42 -0
- ciris_engine/config/CIRIS_SERVICES.json +19 -0
- ciris_engine/config/MODEL_CAPABILITIES.json +419 -0
- ciris_engine/config/PRICING_DATA.json +179 -0
- ciris_engine/config/__init__.py +50 -0
- ciris_engine/config/ciris_services.py +113 -0
- ciris_engine/config/model_capabilities.py +388 -0
- ciris_engine/config/pricing_models.py +276 -0
- ciris_engine/constants.py +35 -0
- ciris_engine/data/__init__.py +1 -0
- ciris_engine/data/covenant_1.0b.txt +978 -0
- ciris_engine/gui_static/11steps.svg +107 -0
- ciris_engine/gui_static/2x-schematics.png +0 -0
- ciris_engine/gui_static/404/index.html +1 -0
- ciris_engine/gui_static/404.html +1 -0
- ciris_engine/gui_static/_next/static/0edhkwDxd5UccTsCmtaBi/_buildManifest.js +1 -0
- ciris_engine/gui_static/_next/static/0edhkwDxd5UccTsCmtaBi/_ssgManifest.js +1 -0
- ciris_engine/gui_static/_next/static/U-3xTQao7hc2wnAi-Uekm/_buildManifest.js +1 -0
- ciris_engine/gui_static/_next/static/U-3xTQao7hc2wnAi-Uekm/_ssgManifest.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/3297-60e86ba0f8a7b040.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/3835-2aad4b7f5f8e4643.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/4499-99a0bc47de0b8975.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/4534-af88cd4ba6e99bff.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/4541-84b455f9e0dc4cfe.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/4789-61412711484754bb.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/6539-c6398bc9d7018430.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/704-8e827b26cc8c2d32.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/704-fb45d630f3192c6f.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/8072-de4952a2e6d2b33f.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/8315-b91d03a3949db0af.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/8386-f93a83ccbd789bd9.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/87c73c54-781a7f35148d5433.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/8903-fefea3339a02d41b.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/9090-e66485adf8d9d990.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/_not-found/page-a67d9808462c23b1.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/api-keys/page-2d7ee1583bbbd02e.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/api-keys/page-6a3c2bae6fe92b7b.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/consent/page-2ed3a035136bc4e8.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/consent/page-b2f5c91844a32422.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/page-25b90f89af3ea58c.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/page-b65d16c94ecaf69c.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/privacy/page-675b6d05c8f9184f.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/privacy/page-cbee2e1c8ab52145.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/settings/page-0f44da06697cf9f0.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/settings/page-563420253577edbf.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/adapters/page-1854631018bc32be.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/agents/page-8353752c176a7c70.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/agents/page-f61a529f110a6040.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/api-demo/page-7f19b9d20d39be28.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/api-demo/page-d1063938f249b8bd.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/audit/page-321b6728b8fff0bb.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/audit/page-ebac35ca961a1277.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/billing/page-6f3dc3bd02924f8e.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/billing/page-fa4a469f814c821a.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/comms/page-0d4f734269addd8f.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/comms/page-79227d426050089c.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/config/page-018d21d683b6e5bc.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/config/page-2aa5a5363ca2a371.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/consent/page-198373205fd316e2.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/consent/page-f2ca39e7713b13f8.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/dashboard/page-1dd5a196f643c60d.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/dashboard/page-530a04d3abbb8cda.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/docs/page-3193b06d094ab654.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/docs/page-330e996dedb87aba.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/layout-0a70f5fc460298b1.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/layout-21f2f99dd5b336e9.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/login/page-33240e6c6034a49d.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/login/page-68ffab6d54a7fdcd.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/logs/page-8a6167aecc4a475c.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/memory/page-9ca8c5d0056de3ff.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/memory/page-e961226941c18f81.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/page-6fdb065a787a4974.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/page-89f87d431be6064a.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/runtime/page-2e728b9c43aa164d.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/runtime/page-c7dd033dc40a72f0.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/services/page-ae9f0bdf11d01a95.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/services/page-b10feb79ca5d75e5.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/sessions/page-13ebe7ef1c16ae11.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/sessions/page-e6c82b16d617f785.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/setup/page-0beb5f5b5a5c20fc.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/setup/page-2595e729eae30c0e.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/status-dashboard/page-1037c987aecc3653.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/status-dashboard/page-2ffd147f6d3162ff.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/system/page-2c5798d58cafcd91.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/system/page-505b1ba4eceb01c3.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/test-auth/page-b0cad31d5cb1b2fa.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/test-auth/page-f3ecd7a8012df230.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/test-login/page-f35117fdc4105801.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/test-login/page-fb583a7924114906.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/test-sdk/page-50f116fd76935563.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/test-sdk/page-c37d8aa5ba623a44.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/tools/page-429aec7a707777ef.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/tools/page-5f705aad60e0c04e.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/users/page-13476b8b0f3808cc.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/users/page-7e500d154ed5bba4.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/wa/page-cc4a9d8a5cb44d08.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/wa/page-ec3e429efbc79230.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/framework-9d29490f5ba089ba.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/main-1f554952e47a82c4.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/main-app-26fa8aed029082e5.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/main-app-97b0486ef6bcef25.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/pages/_app-6ce685456e616eb2.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/pages/_error-d4bce98d93fe21e7.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/webpack-fcebd240b7f8477d.js +1 -0
- ciris_engine/gui_static/_next/static/css/16b94b1fe0cc6e37.css +3 -0
- ciris_engine/gui_static/_next/static/css/77a24ceaae86deff.css +3 -0
- ciris_engine/gui_static/_next/static/media/4cf2300e9c8272f7-s.p.woff2 +0 -0
- ciris_engine/gui_static/_next/static/media/747892c23ea88013-s.woff2 +0 -0
- ciris_engine/gui_static/_next/static/media/8d697b304b401681-s.woff2 +0 -0
- ciris_engine/gui_static/_next/static/media/93f479601ee12b01-s.p.woff2 +0 -0
- ciris_engine/gui_static/_next/static/media/9610d9e46709d722-s.woff2 +0 -0
- ciris_engine/gui_static/_next/static/media/ba015fad6dcf6784-s.woff2 +0 -0
- ciris_engine/gui_static/_next/static/media/d8298875641ec7d4-s.p.woff2 +0 -0
- ciris_engine/gui_static/account/api-keys/index.html +1 -0
- ciris_engine/gui_static/account/api-keys/index.txt +27 -0
- ciris_engine/gui_static/account/consent/index.html +1 -0
- ciris_engine/gui_static/account/consent/index.txt +27 -0
- ciris_engine/gui_static/account/index.html +1 -0
- ciris_engine/gui_static/account/index.txt +27 -0
- ciris_engine/gui_static/account/privacy/index.html +1 -0
- ciris_engine/gui_static/account/privacy/index.txt +27 -0
- ciris_engine/gui_static/account/settings/index.html +1 -0
- ciris_engine/gui_static/account/settings/index.txt +27 -0
- ciris_engine/gui_static/adapters/index.html +1 -0
- ciris_engine/gui_static/adapters/index.txt +27 -0
- ciris_engine/gui_static/agents/index.html +1 -0
- ciris_engine/gui_static/agents/index.txt +27 -0
- ciris_engine/gui_static/andrew-roberts-euBRXcx57T4-unsplash.jpg +0 -0
- ciris_engine/gui_static/api-demo/index.html +1 -0
- ciris_engine/gui_static/api-demo/index.txt +27 -0
- ciris_engine/gui_static/audit/index.html +1 -0
- ciris_engine/gui_static/audit/index.txt +27 -0
- ciris_engine/gui_static/billing/index.html +1 -0
- ciris_engine/gui_static/billing/index.txt +27 -0
- ciris_engine/gui_static/blurryinfo.png +0 -0
- ciris_engine/gui_static/chip-vincent-PkQDwfl9Flc-unsplash.jpg +0 -0
- ciris_engine/gui_static/ciris-architecture.svg +338 -0
- ciris_engine/gui_static/comms/index.html +1 -0
- ciris_engine/gui_static/comms/index.txt +27 -0
- ciris_engine/gui_static/config/index.html +1 -0
- ciris_engine/gui_static/config/index.txt +27 -0
- ciris_engine/gui_static/consent/index.html +1 -0
- ciris_engine/gui_static/consent/index.txt +27 -0
- ciris_engine/gui_static/dashboard/index.html +1 -0
- ciris_engine/gui_static/dashboard/index.txt +27 -0
- ciris_engine/gui_static/docs/index.html +1 -0
- ciris_engine/gui_static/docs/index.txt +27 -0
- ciris_engine/gui_static/eric.png +0 -0
- ciris_engine/gui_static/file.svg +1 -0
- ciris_engine/gui_static/globe.svg +1 -0
- ciris_engine/gui_static/index.html +1 -0
- ciris_engine/gui_static/index.txt +27 -0
- ciris_engine/gui_static/infogfx-1@2x.png +0 -0
- ciris_engine/gui_static/infogfx-2.png +0 -0
- ciris_engine/gui_static/infogfx-dark-1.png +0 -0
- ciris_engine/gui_static/kelly-vohs-soSTXmIxTDU-unsplash.jpg +0 -0
- ciris_engine/gui_static/login/index.html +1 -0
- ciris_engine/gui_static/login/index.txt +27 -0
- ciris_engine/gui_static/logs/index.html +1 -0
- ciris_engine/gui_static/logs/index.txt +27 -0
- ciris_engine/gui_static/memory/index.html +1 -0
- ciris_engine/gui_static/memory/index.txt +27 -0
- ciris_engine/gui_static/nathan-farrish-ArcTfEoBgzs-unsplash.jpg +0 -0
- ciris_engine/gui_static/next.svg +1 -0
- ciris_engine/gui_static/overview.svg +512 -0
- ciris_engine/gui_static/overview1.svg +407 -0
- ciris_engine/gui_static/overview2.svg +370 -0
- ciris_engine/gui_static/pipeline-visualization.svg +278 -0
- ciris_engine/gui_static/privacy-policy.html +160 -0
- ciris_engine/gui_static/runtime/index.html +8 -0
- ciris_engine/gui_static/runtime/index.txt +27 -0
- ciris_engine/gui_static/services/index.html +1 -0
- ciris_engine/gui_static/services/index.txt +27 -0
- ciris_engine/gui_static/sessions/index.html +1 -0
- ciris_engine/gui_static/sessions/index.txt +27 -0
- ciris_engine/gui_static/setup/index.html +1 -0
- ciris_engine/gui_static/setup/index.txt +27 -0
- ciris_engine/gui_static/status-dashboard/index.html +1 -0
- ciris_engine/gui_static/status-dashboard/index.txt +27 -0
- ciris_engine/gui_static/system/index.html +1 -0
- ciris_engine/gui_static/system/index.txt +27 -0
- ciris_engine/gui_static/terms-of-service.html +174 -0
- ciris_engine/gui_static/test-auth/index.html +1 -0
- ciris_engine/gui_static/test-auth/index.txt +27 -0
- ciris_engine/gui_static/test-login/index.html +1 -0
- ciris_engine/gui_static/test-login/index.txt +27 -0
- ciris_engine/gui_static/test-sdk/index.html +1 -0
- ciris_engine/gui_static/test-sdk/index.txt +27 -0
- ciris_engine/gui_static/tools/index.html +1 -0
- ciris_engine/gui_static/tools/index.txt +27 -0
- ciris_engine/gui_static/users/index.html +1 -0
- ciris_engine/gui_static/users/index.txt +27 -0
- ciris_engine/gui_static/vercel.svg +1 -0
- ciris_engine/gui_static/videos/video1.mp4 +0 -0
- ciris_engine/gui_static/videos/video3.mp4 +0 -0
- ciris_engine/gui_static/wa/index.html +1 -0
- ciris_engine/gui_static/wa/index.txt +27 -0
- ciris_engine/gui_static/window.svg +1 -0
- ciris_engine/logic/__init__.py +8 -0
- ciris_engine/logic/adapters/__init__.py +74 -0
- ciris_engine/logic/adapters/api/__init__.py +5 -0
- ciris_engine/logic/adapters/api/adapter.py +1037 -0
- ciris_engine/logic/adapters/api/api_communication.py +370 -0
- ciris_engine/logic/adapters/api/api_document.py +330 -0
- ciris_engine/logic/adapters/api/api_observer.py +24 -0
- ciris_engine/logic/adapters/api/api_runtime_control.py +388 -0
- ciris_engine/logic/adapters/api/api_tools.py +299 -0
- ciris_engine/logic/adapters/api/api_vision.py +215 -0
- ciris_engine/logic/adapters/api/app.py +272 -0
- ciris_engine/logic/adapters/api/auth.py +159 -0
- ciris_engine/logic/adapters/api/config.py +101 -0
- ciris_engine/logic/adapters/api/constants.py +55 -0
- ciris_engine/logic/adapters/api/dependencies/__init__.py +1 -0
- ciris_engine/logic/adapters/api/dependencies/auth.py +260 -0
- ciris_engine/logic/adapters/api/endpoints/__init__.py +1 -0
- ciris_engine/logic/adapters/api/endpoints/emergency.py +86 -0
- ciris_engine/logic/adapters/api/middleware/__init__.py +1 -0
- ciris_engine/logic/adapters/api/middleware/rate_limiter.py +302 -0
- ciris_engine/logic/adapters/api/models.py +29 -0
- ciris_engine/logic/adapters/api/routes/__init__.py +52 -0
- ciris_engine/logic/adapters/api/routes/agent.py +1762 -0
- ciris_engine/logic/adapters/api/routes/audit.py +707 -0
- ciris_engine/logic/adapters/api/routes/auth.py +1745 -0
- ciris_engine/logic/adapters/api/routes/billing.py +895 -0
- ciris_engine/logic/adapters/api/routes/config.py +329 -0
- ciris_engine/logic/adapters/api/routes/connectors.py +534 -0
- ciris_engine/logic/adapters/api/routes/consent.py +637 -0
- ciris_engine/logic/adapters/api/routes/dsar.py +637 -0
- ciris_engine/logic/adapters/api/routes/dsar_multi_source.py +484 -0
- ciris_engine/logic/adapters/api/routes/emergency.py +302 -0
- ciris_engine/logic/adapters/api/routes/memory.py +733 -0
- ciris_engine/logic/adapters/api/routes/memory_filters.py +230 -0
- ciris_engine/logic/adapters/api/routes/memory_models.py +112 -0
- ciris_engine/logic/adapters/api/routes/memory_queries.py +236 -0
- ciris_engine/logic/adapters/api/routes/memory_query_helpers.py +394 -0
- ciris_engine/logic/adapters/api/routes/memory_visualization.py +359 -0
- ciris_engine/logic/adapters/api/routes/memory_visualization_helpers.py +110 -0
- ciris_engine/logic/adapters/api/routes/partnership.py +541 -0
- ciris_engine/logic/adapters/api/routes/setup.py +1374 -0
- ciris_engine/logic/adapters/api/routes/system.py +3049 -0
- ciris_engine/logic/adapters/api/routes/system_extensions.py +952 -0
- ciris_engine/logic/adapters/api/routes/telemetry.py +1987 -0
- ciris_engine/logic/adapters/api/routes/telemetry_converters.py +141 -0
- ciris_engine/logic/adapters/api/routes/telemetry_helpers.py +111 -0
- ciris_engine/logic/adapters/api/routes/telemetry_logs_reader.py +280 -0
- ciris_engine/logic/adapters/api/routes/telemetry_metrics.py +131 -0
- ciris_engine/logic/adapters/api/routes/telemetry_models.py +190 -0
- ciris_engine/logic/adapters/api/routes/telemetry_otlp.py +878 -0
- ciris_engine/logic/adapters/api/routes/telemetry_resource_helpers.py +191 -0
- ciris_engine/logic/adapters/api/routes/tickets.py +541 -0
- ciris_engine/logic/adapters/api/routes/tools.py +556 -0
- ciris_engine/logic/adapters/api/routes/transparency.py +281 -0
- ciris_engine/logic/adapters/api/routes/users.py +981 -0
- ciris_engine/logic/adapters/api/routes/verification.py +373 -0
- ciris_engine/logic/adapters/api/routes/wa.py +369 -0
- ciris_engine/logic/adapters/api/service_configuration.py +177 -0
- ciris_engine/logic/adapters/api/services/__init__.py +1 -0
- ciris_engine/logic/adapters/api/services/auth_service.py +1417 -0
- ciris_engine/logic/adapters/api/services/oauth_security.py +68 -0
- ciris_engine/logic/adapters/base.py +141 -0
- ciris_engine/logic/adapters/base_adapter.py +73 -0
- ciris_engine/logic/adapters/base_observer.py +1141 -0
- ciris_engine/logic/adapters/base_vision.py +312 -0
- ciris_engine/logic/adapters/cirisnode_client.py +307 -0
- ciris_engine/logic/adapters/cli/__init__.py +3 -0
- ciris_engine/logic/adapters/cli/adapter.py +207 -0
- ciris_engine/logic/adapters/cli/cli_adapter.py +902 -0
- ciris_engine/logic/adapters/cli/cli_observer.py +268 -0
- ciris_engine/logic/adapters/cli/cli_tools.py +427 -0
- ciris_engine/logic/adapters/cli/cli_wa_service.py +134 -0
- ciris_engine/logic/adapters/cli/config.py +73 -0
- ciris_engine/logic/adapters/discord/__init__.py +3 -0
- ciris_engine/logic/adapters/discord/adapter.py +783 -0
- ciris_engine/logic/adapters/discord/ciris_discord_client.py +159 -0
- ciris_engine/logic/adapters/discord/config.py +177 -0
- ciris_engine/logic/adapters/discord/constants.py +185 -0
- ciris_engine/logic/adapters/discord/discord-stubs.pyi +50 -0
- ciris_engine/logic/adapters/discord/discord_adapter.py +1584 -0
- ciris_engine/logic/adapters/discord/discord_audit.py +150 -0
- ciris_engine/logic/adapters/discord/discord_channel_manager.py +351 -0
- ciris_engine/logic/adapters/discord/discord_connection_manager.py +313 -0
- ciris_engine/logic/adapters/discord/discord_embed_formatter.py +369 -0
- ciris_engine/logic/adapters/discord/discord_error_classifier.py +302 -0
- ciris_engine/logic/adapters/discord/discord_error_handler.py +316 -0
- ciris_engine/logic/adapters/discord/discord_guidance_handler.py +460 -0
- ciris_engine/logic/adapters/discord/discord_message_handler.py +207 -0
- ciris_engine/logic/adapters/discord/discord_observer.py +670 -0
- ciris_engine/logic/adapters/discord/discord_rate_limiter.py +249 -0
- ciris_engine/logic/adapters/discord/discord_reaction_handler.py +278 -0
- ciris_engine/logic/adapters/discord/discord_tool_handler.py +465 -0
- ciris_engine/logic/adapters/discord/discord_tool_service.py +790 -0
- ciris_engine/logic/adapters/discord/discord_tools.py +90 -0
- ciris_engine/logic/adapters/discord/discord_vision_helper.py +148 -0
- ciris_engine/logic/adapters/discord/py.typed +0 -0
- ciris_engine/logic/adapters/document_parser.py +320 -0
- ciris_engine/logic/audit/__init__.py +10 -0
- ciris_engine/logic/audit/hash_chain.py +313 -0
- ciris_engine/logic/audit/signature_manager.py +352 -0
- ciris_engine/logic/audit/verifier.py +408 -0
- ciris_engine/logic/buses/__init__.py +21 -0
- ciris_engine/logic/buses/base_bus.py +178 -0
- ciris_engine/logic/buses/bus_manager.py +121 -0
- ciris_engine/logic/buses/communication_bus.py +387 -0
- ciris_engine/logic/buses/llm_bus.py +722 -0
- ciris_engine/logic/buses/memory_bus.py +577 -0
- ciris_engine/logic/buses/prohibitions.py +502 -0
- ciris_engine/logic/buses/runtime_control_bus.py +539 -0
- ciris_engine/logic/buses/tool_bus.py +482 -0
- ciris_engine/logic/buses/wise_bus.py +684 -0
- ciris_engine/logic/config/__init__.py +25 -0
- ciris_engine/logic/config/bootstrap.py +255 -0
- ciris_engine/logic/config/config_accessor.py +202 -0
- ciris_engine/logic/config/db_paths.py +194 -0
- ciris_engine/logic/config/env_utils.py +39 -0
- ciris_engine/logic/conscience/__init__.py +16 -0
- ciris_engine/logic/conscience/build_deferral_package.py +0 -0
- ciris_engine/logic/conscience/core.py +688 -0
- ciris_engine/logic/conscience/interface.py +33 -0
- ciris_engine/logic/conscience/registry.py +76 -0
- ciris_engine/logic/conscience/thought_depth_guardrail.py +231 -0
- ciris_engine/logic/conscience/updated_status_conscience.py +156 -0
- ciris_engine/logic/context/__init__.py +10 -0
- ciris_engine/logic/context/batch_context.py +550 -0
- ciris_engine/logic/context/builder.py +149 -0
- ciris_engine/logic/context/channel_resolution.py +136 -0
- ciris_engine/logic/context/secrets_snapshot.py +52 -0
- ciris_engine/logic/context/system_snapshot.py +116 -0
- ciris_engine/logic/context/system_snapshot_helpers.py +1651 -0
- ciris_engine/logic/covenant/__init__.py +33 -0
- ciris_engine/logic/covenant/executor.py +303 -0
- ciris_engine/logic/covenant/extractor.py +382 -0
- ciris_engine/logic/covenant/handler.py +241 -0
- ciris_engine/logic/covenant/verifier.py +383 -0
- ciris_engine/logic/dma/__init__.py +15 -0
- ciris_engine/logic/dma/action_selection/__init__.py +11 -0
- ciris_engine/logic/dma/action_selection/action_instruction_generator.py +444 -0
- ciris_engine/logic/dma/action_selection/context_builder.py +508 -0
- ciris_engine/logic/dma/action_selection/faculty_integration.py +193 -0
- ciris_engine/logic/dma/action_selection/special_cases.py +132 -0
- ciris_engine/logic/dma/action_selection_pdma.py +365 -0
- ciris_engine/logic/dma/base_dma.py +335 -0
- ciris_engine/logic/dma/csdma.py +239 -0
- ciris_engine/logic/dma/dma_executor.py +575 -0
- ciris_engine/logic/dma/dsdma_base.py +410 -0
- ciris_engine/logic/dma/exceptions.py +4 -0
- ciris_engine/logic/dma/factory.py +150 -0
- ciris_engine/logic/dma/pdma.py +120 -0
- ciris_engine/logic/dma/prompt_loader.py +189 -0
- ciris_engine/logic/dma/prompts/action_selection_pdma.yml +58 -0
- ciris_engine/logic/dma/prompts/csdma_common_sense.yml +28 -0
- ciris_engine/logic/dma/prompts/dsdma_base.yml +17 -0
- ciris_engine/logic/dma/prompts/pdma_ethical.yml +42 -0
- ciris_engine/logic/formatters/__init__.py +26 -0
- ciris_engine/logic/formatters/crisis_resources.py +80 -0
- ciris_engine/logic/formatters/escalation.py +21 -0
- ciris_engine/logic/formatters/identity.py +224 -0
- ciris_engine/logic/formatters/prompt_blocks.py +64 -0
- ciris_engine/logic/formatters/system_snapshot.py +193 -0
- ciris_engine/logic/formatters/user_profiles.py +108 -0
- ciris_engine/logic/handlers/__init__.py +1 -0
- ciris_engine/logic/handlers/control/__init__.py +1 -0
- ciris_engine/logic/handlers/control/defer_handler.py +195 -0
- ciris_engine/logic/handlers/control/ponder_handler.py +154 -0
- ciris_engine/logic/handlers/control/reject_handler.py +81 -0
- ciris_engine/logic/handlers/external/__init__.py +1 -0
- ciris_engine/logic/handlers/external/observe_handler.py +154 -0
- ciris_engine/logic/handlers/external/speak_handler.py +250 -0
- ciris_engine/logic/handlers/external/tool_handler.py +148 -0
- ciris_engine/logic/handlers/memory/__init__.py +1 -0
- ciris_engine/logic/handlers/memory/forget_handler.py +107 -0
- ciris_engine/logic/handlers/memory/memorize_handler.py +391 -0
- ciris_engine/logic/handlers/memory/recall_handler.py +213 -0
- ciris_engine/logic/handlers/terminal/__init__.py +1 -0
- ciris_engine/logic/handlers/terminal/task_complete_handler.py +299 -0
- ciris_engine/logic/infrastructure/__init__.py +1 -0
- ciris_engine/logic/infrastructure/handlers/__init__.py +8 -0
- ciris_engine/logic/infrastructure/handlers/action_dispatcher.py +382 -0
- ciris_engine/logic/infrastructure/handlers/base_handler.py +450 -0
- ciris_engine/logic/infrastructure/handlers/exceptions.py +2 -0
- ciris_engine/logic/infrastructure/handlers/handler_registry.py +59 -0
- ciris_engine/logic/infrastructure/handlers/helpers.py +55 -0
- ciris_engine/logic/infrastructure/step_streaming.py +149 -0
- ciris_engine/logic/infrastructure/sub_services/__init__.py +1 -0
- ciris_engine/logic/infrastructure/sub_services/identity_variance_monitor.py +1035 -0
- ciris_engine/logic/infrastructure/sub_services/pattern_analysis_loop.py +758 -0
- ciris_engine/logic/infrastructure/sub_services/wa_cli_bootstrap.py +229 -0
- ciris_engine/logic/infrastructure/sub_services/wa_cli_display.py +176 -0
- ciris_engine/logic/infrastructure/sub_services/wa_cli_oauth.py +404 -0
- ciris_engine/logic/infrastructure/sub_services/wa_cli_wizard.py +181 -0
- ciris_engine/logic/persistence/__init__.py +130 -0
- ciris_engine/logic/persistence/analytics.py +97 -0
- ciris_engine/logic/persistence/db/__init__.py +28 -0
- ciris_engine/logic/persistence/db/core.py +520 -0
- ciris_engine/logic/persistence/db/dialect.py +380 -0
- ciris_engine/logic/persistence/db/execution_helpers.py +216 -0
- ciris_engine/logic/persistence/db/migration_runner.py +191 -0
- ciris_engine/logic/persistence/db/operations.py +313 -0
- ciris_engine/logic/persistence/db/query_builder.py +232 -0
- ciris_engine/logic/persistence/db/retry.py +154 -0
- ciris_engine/logic/persistence/db/setup.py +18 -0
- ciris_engine/logic/persistence/migrations/postgres/001_initial_schema.sql +4 -0
- ciris_engine/logic/persistence/migrations/postgres/002_add_retry_status.sql +3 -0
- ciris_engine/logic/persistence/migrations/postgres/003_add_task_update_tracking.sql +8 -0
- ciris_engine/logic/persistence/migrations/postgres/004_add_occurrence_id.sql +54 -0
- ciris_engine/logic/persistence/migrations/postgres/005_add_consolidation_locks.sql +22 -0
- ciris_engine/logic/persistence/migrations/postgres/006_add_correlation_id_unique_index.sql +16 -0
- ciris_engine/logic/persistence/migrations/postgres/007_add_dsar_tickets.sql +39 -0
- ciris_engine/logic/persistence/migrations/postgres/008_rename_to_tickets_add_sop.sql +123 -0
- ciris_engine/logic/persistence/migrations/postgres/009_add_ticket_status_columns.sql +39 -0
- ciris_engine/logic/persistence/migrations/postgres/010_add_images_to_tasks.sql +5 -0
- ciris_engine/logic/persistence/migrations/sqlite/001_initial_schema.sql +357 -0
- ciris_engine/logic/persistence/migrations/sqlite/002_add_retry_status.sql +3 -0
- ciris_engine/logic/persistence/migrations/sqlite/003_add_task_update_tracking.sql +8 -0
- ciris_engine/logic/persistence/migrations/sqlite/004_add_occurrence_id.sql +45 -0
- ciris_engine/logic/persistence/migrations/sqlite/005_add_consolidation_locks.sql +22 -0
- ciris_engine/logic/persistence/migrations/sqlite/006_add_correlation_id_unique_index.sql +16 -0
- ciris_engine/logic/persistence/migrations/sqlite/007_add_dsar_tickets.sql +39 -0
- ciris_engine/logic/persistence/migrations/sqlite/008_rename_to_tickets_add_sop.sql +120 -0
- ciris_engine/logic/persistence/migrations/sqlite/009_add_ticket_status_columns.sql +129 -0
- ciris_engine/logic/persistence/migrations/sqlite/010_add_images_to_tasks.sql +17 -0
- ciris_engine/logic/persistence/models/__init__.py +141 -0
- ciris_engine/logic/persistence/models/correlations.py +881 -0
- ciris_engine/logic/persistence/models/deferral.py +68 -0
- ciris_engine/logic/persistence/models/dsar.py +286 -0
- ciris_engine/logic/persistence/models/graph.py +362 -0
- ciris_engine/logic/persistence/models/identity.py +264 -0
- ciris_engine/logic/persistence/models/queue_status.py +139 -0
- ciris_engine/logic/persistence/models/tasks.py +1043 -0
- ciris_engine/logic/persistence/models/thoughts.py +400 -0
- ciris_engine/logic/persistence/models/tickets.py +518 -0
- ciris_engine/logic/persistence/stores/__init__.py +13 -0
- ciris_engine/logic/persistence/stores/auth_helpers.py +117 -0
- ciris_engine/logic/persistence/stores/authentication_store.py +414 -0
- ciris_engine/logic/persistence/utils.py +212 -0
- ciris_engine/logic/processors/__init__.py +30 -0
- ciris_engine/logic/processors/core/__init__.py +1 -0
- ciris_engine/logic/processors/core/base_processor.py +280 -0
- ciris_engine/logic/processors/core/main_processor.py +1777 -0
- ciris_engine/logic/processors/core/step_decorators.py +1583 -0
- ciris_engine/logic/processors/core/thought_processor/__init__.py +20 -0
- ciris_engine/logic/processors/core/thought_processor/action_execution.py +49 -0
- ciris_engine/logic/processors/core/thought_processor/conscience_execution.py +382 -0
- ciris_engine/logic/processors/core/thought_processor/finalize_action.py +66 -0
- ciris_engine/logic/processors/core/thought_processor/gather_context.py +120 -0
- ciris_engine/logic/processors/core/thought_processor/main.py +920 -0
- ciris_engine/logic/processors/core/thought_processor/perform_aspdma.py +86 -0
- ciris_engine/logic/processors/core/thought_processor/perform_dmas.py +106 -0
- ciris_engine/logic/processors/core/thought_processor/recursive_processing.py +237 -0
- ciris_engine/logic/processors/core/thought_processor/round_complete.py +52 -0
- ciris_engine/logic/processors/core/thought_processor/start_round.py +64 -0
- ciris_engine/logic/processors/exceptions.py +59 -0
- ciris_engine/logic/processors/states/__init__.py +1 -0
- ciris_engine/logic/processors/states/dream_processor.py +1381 -0
- ciris_engine/logic/processors/states/play_processor.py +141 -0
- ciris_engine/logic/processors/states/shutdown_processor.py +623 -0
- ciris_engine/logic/processors/states/solitude_processor.py +305 -0
- ciris_engine/logic/processors/states/wakeup_processor.py +802 -0
- ciris_engine/logic/processors/states/work_processor.py +742 -0
- ciris_engine/logic/processors/support/__init__.py +1 -0
- ciris_engine/logic/processors/support/dma_orchestrator.py +336 -0
- ciris_engine/logic/processors/support/processing_queue.py +133 -0
- ciris_engine/logic/processors/support/shutdown_condition_evaluator.py +294 -0
- ciris_engine/logic/processors/support/state_manager.py +358 -0
- ciris_engine/logic/processors/support/task_manager.py +303 -0
- ciris_engine/logic/processors/support/thought_escalation.py +116 -0
- ciris_engine/logic/processors/support/thought_manager.py +328 -0
- ciris_engine/logic/processors/support/thought_manager_enhanced.py +105 -0
- ciris_engine/logic/registries/__init__.py +34 -0
- ciris_engine/logic/registries/base.py +653 -0
- ciris_engine/logic/registries/circuit_breaker.py +275 -0
- ciris_engine/logic/registries/typed_registries.py +184 -0
- ciris_engine/logic/runtime/__init__.py +7 -0
- ciris_engine/logic/runtime/adapter_loader.py +261 -0
- ciris_engine/logic/runtime/adapter_manager.py +1053 -0
- ciris_engine/logic/runtime/ciris_runtime.py +2342 -0
- ciris_engine/logic/runtime/ciris_runtime_helpers.py +923 -0
- ciris_engine/logic/runtime/component_builder.py +361 -0
- ciris_engine/logic/runtime/identity_manager.py +219 -0
- ciris_engine/logic/runtime/module_loader.py +207 -0
- ciris_engine/logic/runtime/prevent_sideeffects.py +30 -0
- ciris_engine/logic/runtime/runtime_interface.py +23 -0
- ciris_engine/logic/runtime/service_initializer.py +1623 -0
- ciris_engine/logic/secrets/__init__.py +30 -0
- ciris_engine/logic/secrets/encryption.py +175 -0
- ciris_engine/logic/secrets/filter.py +295 -0
- ciris_engine/logic/secrets/service.py +652 -0
- ciris_engine/logic/secrets/store.py +669 -0
- ciris_engine/logic/services/__init__.py +1 -0
- ciris_engine/logic/services/adaptation/__init__.py +3 -0
- ciris_engine/logic/services/base_graph_service.py +142 -0
- ciris_engine/logic/services/base_infrastructure_service.py +69 -0
- ciris_engine/logic/services/base_scheduled_service.py +136 -0
- ciris_engine/logic/services/base_service.py +247 -0
- ciris_engine/logic/services/governance/__init__.py +3 -0
- ciris_engine/logic/services/governance/adaptive_filter/__init__.py +14 -0
- ciris_engine/logic/services/governance/adaptive_filter/service.py +818 -0
- ciris_engine/logic/services/governance/consent/__init__.py +53 -0
- ciris_engine/logic/services/governance/consent/air.py +403 -0
- ciris_engine/logic/services/governance/consent/decay.py +324 -0
- ciris_engine/logic/services/governance/consent/dsar_automation.py +589 -0
- ciris_engine/logic/services/governance/consent/exceptions.py +106 -0
- ciris_engine/logic/services/governance/consent/metrics.py +270 -0
- ciris_engine/logic/services/governance/consent/partnership.py +533 -0
- ciris_engine/logic/services/governance/consent/service.py +1256 -0
- ciris_engine/logic/services/governance/dsar/__init__.py +29 -0
- ciris_engine/logic/services/governance/dsar/orchestrator.py +977 -0
- ciris_engine/logic/services/governance/dsar/schemas.py +141 -0
- ciris_engine/logic/services/governance/dsar/signature_service.py +283 -0
- ciris_engine/logic/services/governance/self_observation/__init__.py +20 -0
- ciris_engine/logic/services/governance/self_observation/service.py +1153 -0
- ciris_engine/logic/services/governance/visibility/__init__.py +17 -0
- ciris_engine/logic/services/governance/visibility/service.py +512 -0
- ciris_engine/logic/services/governance/wise_authority/__init__.py +15 -0
- ciris_engine/logic/services/governance/wise_authority/service.py +827 -0
- ciris_engine/logic/services/graph/__init__.py +5 -0
- ciris_engine/logic/services/graph/audit_service/__init__.py +5 -0
- ciris_engine/logic/services/graph/audit_service/service.py +1675 -0
- ciris_engine/logic/services/graph/base.py +208 -0
- ciris_engine/logic/services/graph/config_service/__init__.py +5 -0
- ciris_engine/logic/services/graph/config_service/service.py +372 -0
- ciris_engine/logic/services/graph/incident_service/__init__.py +5 -0
- ciris_engine/logic/services/graph/incident_service/service.py +803 -0
- ciris_engine/logic/services/graph/memory_service.py +1120 -0
- ciris_engine/logic/services/graph/telemetry_service/__init__.py +5 -0
- ciris_engine/logic/services/graph/telemetry_service/exceptions.py +104 -0
- ciris_engine/logic/services/graph/telemetry_service/helpers.py +1337 -0
- ciris_engine/logic/services/graph/telemetry_service/service.py +2429 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/__init__.py +17 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/aggregation_helpers.py +355 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/cleanup_helpers.py +438 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/compressor.py +260 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/__init__.py +27 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/audit.py +326 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/conversation.py +291 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/memory.py +197 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/metrics.py +251 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/task.py +257 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/trace.py +363 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/data_converter.py +545 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/date_calculation_helpers.py +193 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/db_query_helpers.py +296 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/edge_helpers.py +92 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/edge_manager.py +896 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/extensive_helpers.py +322 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/period_manager.py +152 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/profound_helpers.py +277 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/query_manager.py +812 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/service.py +1692 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/sql_builders.py +363 -0
- ciris_engine/logic/services/infrastructure/__init__.py +1 -0
- ciris_engine/logic/services/infrastructure/authentication/__init__.py +5 -0
- ciris_engine/logic/services/infrastructure/authentication/service.py +1634 -0
- ciris_engine/logic/services/infrastructure/database_maintenance/__init__.py +15 -0
- ciris_engine/logic/services/infrastructure/database_maintenance/service.py +764 -0
- ciris_engine/logic/services/infrastructure/resource_monitor/__init__.py +7 -0
- ciris_engine/logic/services/infrastructure/resource_monitor/ciris_billing_provider.py +755 -0
- ciris_engine/logic/services/infrastructure/resource_monitor/service.py +409 -0
- ciris_engine/logic/services/infrastructure/resource_monitor/simple_credit_provider.py +129 -0
- ciris_engine/logic/services/lifecycle/__init__.py +3 -0
- ciris_engine/logic/services/lifecycle/initialization/__init__.py +10 -0
- ciris_engine/logic/services/lifecycle/initialization/service.py +312 -0
- ciris_engine/logic/services/lifecycle/scheduler/__init__.py +5 -0
- ciris_engine/logic/services/lifecycle/scheduler/service.py +607 -0
- ciris_engine/logic/services/lifecycle/shutdown/__init__.py +9 -0
- ciris_engine/logic/services/lifecycle/shutdown/service.py +378 -0
- ciris_engine/logic/services/lifecycle/time/__init__.py +15 -0
- ciris_engine/logic/services/lifecycle/time/service.py +259 -0
- ciris_engine/logic/services/memory_service/__init__.py +8 -0
- ciris_engine/logic/services/mixins/__init__.py +13 -0
- ciris_engine/logic/services/mixins/example_usage.py +200 -0
- ciris_engine/logic/services/mixins/request_metrics.py +179 -0
- ciris_engine/logic/services/runtime/__init__.py +3 -0
- ciris_engine/logic/services/runtime/adapter_configuration/__init__.py +16 -0
- ciris_engine/logic/services/runtime/adapter_configuration/service.py +674 -0
- ciris_engine/logic/services/runtime/adapter_configuration/session.py +67 -0
- ciris_engine/logic/services/runtime/control_service/__init__.py +5 -0
- ciris_engine/logic/services/runtime/control_service/service.py +2269 -0
- ciris_engine/logic/services/runtime/llm_service/__init__.py +14 -0
- ciris_engine/logic/services/runtime/llm_service/pricing_calculator.py +279 -0
- ciris_engine/logic/services/runtime/llm_service/service.py +930 -0
- ciris_engine/logic/services/tools/__init__.py +5 -0
- ciris_engine/logic/services/tools/core_tool_service/__init__.py +8 -0
- ciris_engine/logic/services/tools/core_tool_service/service.py +852 -0
- ciris_engine/logic/setup/__init__.py +1 -0
- ciris_engine/logic/setup/first_run.py +250 -0
- ciris_engine/logic/setup/wizard.py +327 -0
- ciris_engine/logic/telemetry/__init__.py +46 -0
- ciris_engine/logic/telemetry/core.py +239 -0
- ciris_engine/logic/telemetry/hot_cold_config.py +133 -0
- ciris_engine/logic/telemetry/log_collector.py +190 -0
- ciris_engine/logic/telemetry/resource_monitor.py +7 -0
- ciris_engine/logic/telemetry/security.py +79 -0
- ciris_engine/logic/utils/__init__.py +18 -0
- ciris_engine/logic/utils/channel_utils.py +75 -0
- ciris_engine/logic/utils/consent/__init__.py +1 -0
- ciris_engine/logic/utils/consent/partnership_utils.py +172 -0
- ciris_engine/logic/utils/constants.py +92 -0
- ciris_engine/logic/utils/context_utils.py +145 -0
- ciris_engine/logic/utils/directory_setup.py +533 -0
- ciris_engine/logic/utils/graphql_context_provider.py +152 -0
- ciris_engine/logic/utils/identity_resolution.py +843 -0
- ciris_engine/logic/utils/incident_capture_handler.py +303 -0
- ciris_engine/logic/utils/initialization_manager.py +74 -0
- ciris_engine/logic/utils/jsondict_helpers.py +290 -0
- ciris_engine/logic/utils/log_sanitizer.py +97 -0
- ciris_engine/logic/utils/logging_config.py +151 -0
- ciris_engine/logic/utils/observability_decorators.py +544 -0
- ciris_engine/logic/utils/occurrence_utils.py +155 -0
- ciris_engine/logic/utils/path_resolution.py +281 -0
- ciris_engine/logic/utils/platform_detection.py +286 -0
- ciris_engine/logic/utils/privacy.py +266 -0
- ciris_engine/logic/utils/profile_loader.py +124 -0
- ciris_engine/logic/utils/profile_manager.py +16 -0
- ciris_engine/logic/utils/runtime_utils.py +69 -0
- ciris_engine/logic/utils/shutdown_manager.py +107 -0
- ciris_engine/logic/utils/task_formatters.py +60 -0
- ciris_engine/logic/utils/task_thought_factory.py +404 -0
- ciris_engine/logic/utils/thought_utils.py +54 -0
- ciris_engine/logic/utils/user_utils.py +70 -0
- ciris_engine/protocols/__init__.py +0 -0
- ciris_engine/protocols/adapters/__init__.py +35 -0
- ciris_engine/protocols/adapters/base.py +149 -0
- ciris_engine/protocols/adapters/configurable.py +265 -0
- ciris_engine/protocols/adapters/message.py +90 -0
- ciris_engine/protocols/audit/__init__.py +1 -0
- ciris_engine/protocols/buses/__init__.py +1 -0
- ciris_engine/protocols/config/__init__.py +1 -0
- ciris_engine/protocols/conscience/__init__.py +1 -0
- ciris_engine/protocols/consent.py +88 -0
- ciris_engine/protocols/context/__init__.py +1 -0
- ciris_engine/protocols/data/__init__.py +1 -0
- ciris_engine/protocols/dma/__init__.py +1 -0
- ciris_engine/protocols/dma/base.py +107 -0
- ciris_engine/protocols/faculties.py +34 -0
- ciris_engine/protocols/formatters/__init__.py +1 -0
- ciris_engine/protocols/handlers/__init__.py +1 -0
- ciris_engine/protocols/infrastructure/__init__.py +25 -0
- ciris_engine/protocols/infrastructure/base.py +377 -0
- ciris_engine/protocols/persistence/__init__.py +1 -0
- ciris_engine/protocols/pipeline_control.py +609 -0
- ciris_engine/protocols/processors/__init__.py +19 -0
- ciris_engine/protocols/processors/agent.py +299 -0
- ciris_engine/protocols/processors/base.py +130 -0
- ciris_engine/protocols/processors/orchestration.py +62 -0
- ciris_engine/protocols/registries/__init__.py +1 -0
- ciris_engine/protocols/runtime/__init__.py +1 -0
- ciris_engine/protocols/runtime/base.py +163 -0
- ciris_engine/protocols/secrets/__init__.py +1 -0
- ciris_engine/protocols/services/__init__.py +80 -0
- ciris_engine/protocols/services/adaptation/__init__.py +7 -0
- ciris_engine/protocols/services/adaptation/self_observation.py +265 -0
- ciris_engine/protocols/services/governance/__init__.py +20 -0
- ciris_engine/protocols/services/governance/communication.py +58 -0
- ciris_engine/protocols/services/governance/filter.py +56 -0
- ciris_engine/protocols/services/governance/visibility.py +32 -0
- ciris_engine/protocols/services/governance/wa_auth.py +192 -0
- ciris_engine/protocols/services/governance/wise_authority.py +75 -0
- ciris_engine/protocols/services/graph/__init__.py +19 -0
- ciris_engine/protocols/services/graph/audit.py +92 -0
- ciris_engine/protocols/services/graph/config.py +54 -0
- ciris_engine/protocols/services/graph/incident_management.py +103 -0
- ciris_engine/protocols/services/graph/memory.py +110 -0
- ciris_engine/protocols/services/graph/telemetry.py +51 -0
- ciris_engine/protocols/services/graph/tsdb_consolidation.py +87 -0
- ciris_engine/protocols/services/infrastructure/__init__.py +11 -0
- ciris_engine/protocols/services/infrastructure/authentication.py +159 -0
- ciris_engine/protocols/services/infrastructure/credit_gate.py +46 -0
- ciris_engine/protocols/services/infrastructure/database_maintenance.py +25 -0
- ciris_engine/protocols/services/infrastructure/resource_monitor.py +83 -0
- ciris_engine/protocols/services/lifecycle/__init__.py +13 -0
- ciris_engine/protocols/services/lifecycle/initialization.py +41 -0
- ciris_engine/protocols/services/lifecycle/scheduler.py +42 -0
- ciris_engine/protocols/services/lifecycle/shutdown.py +50 -0
- ciris_engine/protocols/services/lifecycle/time.py +31 -0
- ciris_engine/protocols/services/runtime/__init__.py +13 -0
- ciris_engine/protocols/services/runtime/llm.py +50 -0
- ciris_engine/protocols/services/runtime/runtime_control.py +193 -0
- ciris_engine/protocols/services/runtime/secrets.py +100 -0
- ciris_engine/protocols/services/runtime/tool.py +123 -0
- ciris_engine/protocols/telemetry/__init__.py +1 -0
- ciris_engine/protocols/utils/__init__.py +1 -0
- ciris_engine/schemas/__init__.py +112 -0
- ciris_engine/schemas/actions/__init__.py +37 -0
- ciris_engine/schemas/actions/parameters.py +137 -0
- ciris_engine/schemas/adapters/__init__.py +13 -0
- ciris_engine/schemas/adapters/cirisnode.py +135 -0
- ciris_engine/schemas/adapters/cli.py +97 -0
- ciris_engine/schemas/adapters/cli_tools.py +98 -0
- ciris_engine/schemas/adapters/discord.py +125 -0
- ciris_engine/schemas/adapters/graphql_core.py +144 -0
- ciris_engine/schemas/adapters/registration.py +47 -0
- ciris_engine/schemas/adapters/runtime_context.py +48 -0
- ciris_engine/schemas/adapters/tool_execution.py +45 -0
- ciris_engine/schemas/adapters/tools.py +96 -0
- ciris_engine/schemas/api/__init__.py +1 -0
- ciris_engine/schemas/api/agent.py +50 -0
- ciris_engine/schemas/api/audit.py +38 -0
- ciris_engine/schemas/api/auth.py +351 -0
- ciris_engine/schemas/api/config_security.py +242 -0
- ciris_engine/schemas/api/emergency.py +111 -0
- ciris_engine/schemas/api/responses.py +72 -0
- ciris_engine/schemas/api/runtime.py +26 -0
- ciris_engine/schemas/api/telemetry.py +109 -0
- ciris_engine/schemas/api/wa.py +90 -0
- ciris_engine/schemas/audit/__init__.py +13 -0
- ciris_engine/schemas/audit/core.py +139 -0
- ciris_engine/schemas/audit/hash_chain.py +58 -0
- ciris_engine/schemas/audit/verification.py +131 -0
- ciris_engine/schemas/buses/__init__.py +1 -0
- ciris_engine/schemas/config/__init__.py +41 -0
- ciris_engine/schemas/config/agent.py +279 -0
- ciris_engine/schemas/config/cognitive_state_behaviors.py +194 -0
- ciris_engine/schemas/config/default_dsar_sops.py +178 -0
- ciris_engine/schemas/config/essential.py +195 -0
- ciris_engine/schemas/config/tickets.py +86 -0
- ciris_engine/schemas/conscience/__init__.py +25 -0
- ciris_engine/schemas/conscience/context.py +34 -0
- ciris_engine/schemas/conscience/core.py +145 -0
- ciris_engine/schemas/conscience/results.py +24 -0
- ciris_engine/schemas/consent/__init__.py +5 -0
- ciris_engine/schemas/consent/core.py +404 -0
- ciris_engine/schemas/context/__init__.py +1 -0
- ciris_engine/schemas/covenant.py +382 -0
- ciris_engine/schemas/data/__init__.py +1 -0
- ciris_engine/schemas/dma/__init__.py +16 -0
- ciris_engine/schemas/dma/core.py +199 -0
- ciris_engine/schemas/dma/faculty.py +192 -0
- ciris_engine/schemas/dma/prompts.py +172 -0
- ciris_engine/schemas/dma/results.py +103 -0
- ciris_engine/schemas/formatters/__init__.py +1 -0
- ciris_engine/schemas/handlers/__init__.py +10 -0
- ciris_engine/schemas/handlers/context.py +119 -0
- ciris_engine/schemas/handlers/contexts.py +100 -0
- ciris_engine/schemas/handlers/core.py +167 -0
- ciris_engine/schemas/handlers/memory_schemas.py +67 -0
- ciris_engine/schemas/handlers/schemas.py +95 -0
- ciris_engine/schemas/identity.py +149 -0
- ciris_engine/schemas/infrastructure/__init__.py +1 -0
- ciris_engine/schemas/infrastructure/base.py +256 -0
- ciris_engine/schemas/infrastructure/behavioral_patterns.py +129 -0
- ciris_engine/schemas/infrastructure/feedback_loop.py +57 -0
- ciris_engine/schemas/infrastructure/identity_variance.py +141 -0
- ciris_engine/schemas/infrastructure/oauth.py +175 -0
- ciris_engine/schemas/infrastructure/wa_cli_wizard.py +54 -0
- ciris_engine/schemas/persistence/__init__.py +34 -0
- ciris_engine/schemas/persistence/core.py +140 -0
- ciris_engine/schemas/persistence/correlations.py +73 -0
- ciris_engine/schemas/persistence/postgres/__init__.py +1 -0
- ciris_engine/schemas/persistence/postgres/tables.py +280 -0
- ciris_engine/schemas/persistence/sqlite/__init__.py +1 -0
- ciris_engine/schemas/persistence/sqlite/tables.py +281 -0
- ciris_engine/schemas/platform.py +149 -0
- ciris_engine/schemas/processors/__init__.py +26 -0
- ciris_engine/schemas/processors/base.py +130 -0
- ciris_engine/schemas/processors/cognitive.py +77 -0
- ciris_engine/schemas/processors/context.py +35 -0
- ciris_engine/schemas/processors/core.py +152 -0
- ciris_engine/schemas/processors/dma.py +105 -0
- ciris_engine/schemas/processors/error.py +122 -0
- ciris_engine/schemas/processors/main.py +109 -0
- ciris_engine/schemas/processors/phase_results.py +21 -0
- ciris_engine/schemas/processors/results.py +99 -0
- ciris_engine/schemas/processors/solitude.py +79 -0
- ciris_engine/schemas/processors/state.py +202 -0
- ciris_engine/schemas/processors/state_example.py +177 -0
- ciris_engine/schemas/processors/states.py +21 -0
- ciris_engine/schemas/processors/status.py +34 -0
- ciris_engine/schemas/registries/__init__.py +1 -0
- ciris_engine/schemas/registries/base.py +66 -0
- ciris_engine/schemas/resources/__init__.py +15 -0
- ciris_engine/schemas/resources/crisis.py +315 -0
- ciris_engine/schemas/runtime/__init__.py +42 -0
- ciris_engine/schemas/runtime/adapter_management.py +186 -0
- ciris_engine/schemas/runtime/api.py +58 -0
- ciris_engine/schemas/runtime/audit.py +50 -0
- ciris_engine/schemas/runtime/bootstrap.py +33 -0
- ciris_engine/schemas/runtime/contexts.py +61 -0
- ciris_engine/schemas/runtime/core.py +161 -0
- ciris_engine/schemas/runtime/enums.py +167 -0
- ciris_engine/schemas/runtime/extended.py +232 -0
- ciris_engine/schemas/runtime/manifest.py +311 -0
- ciris_engine/schemas/runtime/memory.py +60 -0
- ciris_engine/schemas/runtime/messages.py +108 -0
- ciris_engine/schemas/runtime/models.py +156 -0
- ciris_engine/schemas/runtime/processing_context.py +43 -0
- ciris_engine/schemas/runtime/protocols_core.py +96 -0
- ciris_engine/schemas/runtime/resources.py +33 -0
- ciris_engine/schemas/runtime/system_context.py +417 -0
- ciris_engine/schemas/secrets/__init__.py +1 -0
- ciris_engine/schemas/secrets/core.py +267 -0
- ciris_engine/schemas/secrets/service.py +95 -0
- ciris_engine/schemas/services/__init__.py +33 -0
- ciris_engine/schemas/services/audit_summary_node.py +172 -0
- ciris_engine/schemas/services/authority/__init__.py +39 -0
- ciris_engine/schemas/services/authority/jwt.py +158 -0
- ciris_engine/schemas/services/authority/wa_updates.py +138 -0
- ciris_engine/schemas/services/authority/wise_authority.py +163 -0
- ciris_engine/schemas/services/authority_core.py +370 -0
- ciris_engine/schemas/services/capabilities.py +72 -0
- ciris_engine/schemas/services/community_core.py +95 -0
- ciris_engine/schemas/services/context.py +111 -0
- ciris_engine/schemas/services/conversation_summary_node.py +189 -0
- ciris_engine/schemas/services/core/__init__.py +153 -0
- ciris_engine/schemas/services/core/runtime.py +262 -0
- ciris_engine/schemas/services/core/runtime_config.py +117 -0
- ciris_engine/schemas/services/core/secrets.py +65 -0
- ciris_engine/schemas/services/correlation_node.py +179 -0
- ciris_engine/schemas/services/credit_gate.py +92 -0
- ciris_engine/schemas/services/discord_nodes.py +299 -0
- ciris_engine/schemas/services/feedback_core.py +131 -0
- ciris_engine/schemas/services/filters_core.py +270 -0
- ciris_engine/schemas/services/governance.py +26 -0
- ciris_engine/schemas/services/graph/__init__.py +26 -0
- ciris_engine/schemas/services/graph/attributes.py +254 -0
- ciris_engine/schemas/services/graph/audit.py +98 -0
- ciris_engine/schemas/services/graph/consolidation.py +338 -0
- ciris_engine/schemas/services/graph/edge_types.py +43 -0
- ciris_engine/schemas/services/graph/edges.py +88 -0
- ciris_engine/schemas/services/graph/incident.py +312 -0
- ciris_engine/schemas/services/graph/memory.py +84 -0
- ciris_engine/schemas/services/graph/node_data.py +174 -0
- ciris_engine/schemas/services/graph/query_results.py +82 -0
- ciris_engine/schemas/services/graph/telemetry.py +250 -0
- ciris_engine/schemas/services/graph/tsdb_consolidation.py +27 -0
- ciris_engine/schemas/services/graph/tsdb_models.py +107 -0
- ciris_engine/schemas/services/graph_core.py +196 -0
- ciris_engine/schemas/services/graph_typed_nodes.py +194 -0
- ciris_engine/schemas/services/infrastructure/__init__.py +1 -0
- ciris_engine/schemas/services/infrastructure/resource_monitor.py +20 -0
- ciris_engine/schemas/services/lifecycle/__init__.py +9 -0
- ciris_engine/schemas/services/lifecycle/initialization.py +33 -0
- ciris_engine/schemas/services/lifecycle/time.py +50 -0
- ciris_engine/schemas/services/llm.py +187 -0
- ciris_engine/schemas/services/metadata.py +43 -0
- ciris_engine/schemas/services/nodes.py +704 -0
- ciris_engine/schemas/services/operations.py +126 -0
- ciris_engine/schemas/services/requests.py +128 -0
- ciris_engine/schemas/services/resources_core.py +182 -0
- ciris_engine/schemas/services/runtime_control.py +1010 -0
- ciris_engine/schemas/services/shutdown.py +88 -0
- ciris_engine/schemas/services/special/__init__.py +0 -0
- ciris_engine/schemas/services/special/self_observation.py +396 -0
- ciris_engine/schemas/services/trace_summary_node.py +199 -0
- ciris_engine/schemas/services/visibility.py +98 -0
- ciris_engine/schemas/streaming/__init__.py +10 -0
- ciris_engine/schemas/streaming/reasoning_stream.py +95 -0
- ciris_engine/schemas/telemetry/__init__.py +0 -0
- ciris_engine/schemas/telemetry/collector.py +67 -0
- ciris_engine/schemas/telemetry/core.py +252 -0
- ciris_engine/schemas/telemetry/unified.py +59 -0
- ciris_engine/schemas/tools.py +72 -0
- ciris_engine/schemas/types.py +47 -0
- ciris_engine/schemas/utils/__init__.py +1 -0
- ciris_engine/schemas/utils/config_validator.py +54 -0
- ciris_engine/utils/__init__.py +1 -0
- ciris_engine/utils/serialization.py +35 -0
- ciris_sdk/__init__.py +124 -0
- ciris_sdk/auth_store.py +261 -0
- ciris_sdk/client.py +261 -0
- ciris_sdk/exceptions.py +73 -0
- ciris_sdk/model_types.py +258 -0
- ciris_sdk/models.py +354 -0
- ciris_sdk/pagination.py +214 -0
- ciris_sdk/rate_limiter.py +188 -0
- ciris_sdk/setup.py +17 -0
- ciris_sdk/telemetry_models.py +257 -0
- ciris_sdk/telemetry_responses.py +199 -0
- ciris_sdk/transport.py +177 -0
- ciris_sdk/websocket.py +400 -0
- main.py +766 -0
|
@@ -0,0 +1,684 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Wise Authority message bus - handles all WA service operations
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
import logging
|
|
7
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Set
|
|
8
|
+
|
|
9
|
+
from ciris_engine.logic.utils.jsondict_helpers import get_int, get_str
|
|
10
|
+
from ciris_engine.protocols.services import WiseAuthorityService
|
|
11
|
+
from ciris_engine.protocols.services.lifecycle.time import TimeServiceProtocol
|
|
12
|
+
from ciris_engine.schemas.infrastructure.base import BusMetrics
|
|
13
|
+
from ciris_engine.schemas.runtime.enums import ServiceType
|
|
14
|
+
from ciris_engine.schemas.services.authority_core import GuidanceRequest, GuidanceResponse
|
|
15
|
+
from ciris_engine.schemas.services.context import DeferralContext, GuidanceContext
|
|
16
|
+
from ciris_engine.schemas.types import JSONDict
|
|
17
|
+
|
|
18
|
+
from .base_bus import BaseBus, BusMessage
|
|
19
|
+
from .prohibitions import (
|
|
20
|
+
COMMUNITY_MODERATION_CAPABILITIES,
|
|
21
|
+
PROHIBITED_CAPABILITIES,
|
|
22
|
+
ProhibitionSeverity,
|
|
23
|
+
get_capability_category,
|
|
24
|
+
get_prohibition_severity,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
if TYPE_CHECKING:
|
|
28
|
+
from ciris_engine.logic.registries.base import ServiceRegistry
|
|
29
|
+
|
|
30
|
+
logger = logging.getLogger(__name__)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class WiseBus(BaseBus[WiseAuthorityService]):
|
|
34
|
+
"""
|
|
35
|
+
Message bus for all wise authority operations.
|
|
36
|
+
|
|
37
|
+
Handles:
|
|
38
|
+
- send_deferral
|
|
39
|
+
- fetch_guidance
|
|
40
|
+
- Comprehensive capability prohibition with tier-based access
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
# Import prohibited capabilities from the prohibitions module
|
|
44
|
+
PROHIBITED_CAPABILITIES = PROHIBITED_CAPABILITIES
|
|
45
|
+
|
|
46
|
+
def __init__(
|
|
47
|
+
self,
|
|
48
|
+
service_registry: "ServiceRegistry",
|
|
49
|
+
time_service: TimeServiceProtocol,
|
|
50
|
+
telemetry_service: Optional[Any] = None,
|
|
51
|
+
):
|
|
52
|
+
super().__init__(service_type=ServiceType.WISE_AUTHORITY, service_registry=service_registry)
|
|
53
|
+
self._time_service = time_service
|
|
54
|
+
self._start_time = time_service.now() if time_service else None
|
|
55
|
+
self._agent_tier: Optional[int] = None # Cached agent tier
|
|
56
|
+
|
|
57
|
+
# Metrics tracking
|
|
58
|
+
self._requests_count = 0
|
|
59
|
+
self._deferrals_count = 0
|
|
60
|
+
self._guidance_count = 0
|
|
61
|
+
|
|
62
|
+
async def _get_tier_from_config(self) -> Optional[int]:
|
|
63
|
+
"""Try to get agent tier from configuration service."""
|
|
64
|
+
try:
|
|
65
|
+
from ciris_engine.schemas.runtime.enums import ServiceType
|
|
66
|
+
|
|
67
|
+
config_services = self.service_registry.get_services_by_type(ServiceType.CONFIG)
|
|
68
|
+
if not config_services:
|
|
69
|
+
return None
|
|
70
|
+
|
|
71
|
+
config_service = config_services[0]
|
|
72
|
+
if not hasattr(config_service, "get_value"):
|
|
73
|
+
return None
|
|
74
|
+
|
|
75
|
+
tier = await config_service.get_value("agent_tier")
|
|
76
|
+
if tier:
|
|
77
|
+
return int(tier)
|
|
78
|
+
except Exception as e:
|
|
79
|
+
logger.debug(f"Could not get tier from config: {e}")
|
|
80
|
+
return None
|
|
81
|
+
|
|
82
|
+
async def _get_tier_from_memory(self) -> Optional[int]:
|
|
83
|
+
"""Try to get agent tier from memory/identity."""
|
|
84
|
+
try:
|
|
85
|
+
from ciris_engine.schemas.runtime.enums import ServiceType
|
|
86
|
+
|
|
87
|
+
memory_services = self.service_registry.get_services_by_type(ServiceType.MEMORY)
|
|
88
|
+
if not memory_services:
|
|
89
|
+
return None
|
|
90
|
+
|
|
91
|
+
memory_service = memory_services[0]
|
|
92
|
+
|
|
93
|
+
# Try to search for tier information in identity nodes
|
|
94
|
+
if hasattr(memory_service, "search_memories"):
|
|
95
|
+
results = await memory_service.search_memories("agent_tier stewardship tier", scope="identity", limit=5)
|
|
96
|
+
|
|
97
|
+
# Check if this is a Tier 4/5 agent
|
|
98
|
+
for result in results:
|
|
99
|
+
content_str = str(result.content).lower()
|
|
100
|
+
if any(marker in content_str for marker in ["stewardship", "tier_4", "tier_5"]):
|
|
101
|
+
return 4 # Default stewardship tier
|
|
102
|
+
|
|
103
|
+
except Exception as e:
|
|
104
|
+
logger.debug(f"Could not get tier from memory: {e}")
|
|
105
|
+
return None
|
|
106
|
+
|
|
107
|
+
async def get_agent_tier(self) -> int:
|
|
108
|
+
"""
|
|
109
|
+
Get the agent's tier level from configuration or identity.
|
|
110
|
+
|
|
111
|
+
Tier levels:
|
|
112
|
+
- 1-3: Standard agents (no community moderation)
|
|
113
|
+
- 4-5: Stewardship agents (trusted with community moderation)
|
|
114
|
+
|
|
115
|
+
Returns:
|
|
116
|
+
Agent tier level (1-5), defaults to 1 if not found
|
|
117
|
+
"""
|
|
118
|
+
if self._agent_tier is not None:
|
|
119
|
+
return self._agent_tier
|
|
120
|
+
|
|
121
|
+
# Try to get tier from config service
|
|
122
|
+
tier = await self._get_tier_from_config()
|
|
123
|
+
if tier:
|
|
124
|
+
self._agent_tier = tier
|
|
125
|
+
logger.info(f"Agent tier detected from config: {self._agent_tier}")
|
|
126
|
+
return self._agent_tier
|
|
127
|
+
|
|
128
|
+
# Try to get tier from memory/identity
|
|
129
|
+
tier = await self._get_tier_from_memory()
|
|
130
|
+
if tier:
|
|
131
|
+
self._agent_tier = tier
|
|
132
|
+
logger.info(f"Agent identified as Tier {self._agent_tier} (stewardship)")
|
|
133
|
+
return self._agent_tier
|
|
134
|
+
|
|
135
|
+
# Default to tier 1 (standard agent)
|
|
136
|
+
self._agent_tier = 1
|
|
137
|
+
logger.info(f"Using default agent tier: {self._agent_tier}")
|
|
138
|
+
return self._agent_tier
|
|
139
|
+
|
|
140
|
+
async def send_deferral(self, context: DeferralContext, handler_name: str) -> bool:
|
|
141
|
+
"""Send a deferral to ALL wise authority services (broadcast)"""
|
|
142
|
+
# Get ALL services with send_deferral capability
|
|
143
|
+
# Since we want to broadcast to all WA services, we need to get them all
|
|
144
|
+
from ciris_engine.schemas.runtime.enums import ServiceType
|
|
145
|
+
|
|
146
|
+
all_wa_services = self.service_registry.get_services_by_type(ServiceType.WISE_AUTHORITY)
|
|
147
|
+
logger.info(f"Found {len(all_wa_services)} total WiseAuthority services")
|
|
148
|
+
|
|
149
|
+
# Filter for services with send_deferral capability
|
|
150
|
+
services = []
|
|
151
|
+
for service in all_wa_services:
|
|
152
|
+
logger.debug(f"Checking service {service.__class__.__name__} for send_deferral capability")
|
|
153
|
+
# Check if service has get_capabilities method
|
|
154
|
+
if hasattr(service, "get_capabilities"):
|
|
155
|
+
caps = service.get_capabilities()
|
|
156
|
+
logger.debug(f"Service {service.__class__.__name__} has capabilities: {caps.actions}")
|
|
157
|
+
if "send_deferral" in caps.actions:
|
|
158
|
+
services.append(service)
|
|
159
|
+
logger.info(f"Adding service {service.__class__.__name__} to deferral broadcast list")
|
|
160
|
+
else:
|
|
161
|
+
logger.warning(f"Service {service.__class__.__name__} has no get_capabilities method")
|
|
162
|
+
|
|
163
|
+
if not services:
|
|
164
|
+
logger.info(f"No wise authority service available for {handler_name}")
|
|
165
|
+
return False
|
|
166
|
+
|
|
167
|
+
# Track if any service successfully received the deferral
|
|
168
|
+
any_success = False
|
|
169
|
+
|
|
170
|
+
try:
|
|
171
|
+
# Convert DeferralContext to DeferralRequest
|
|
172
|
+
from ciris_engine.schemas.services.authority_core import DeferralRequest
|
|
173
|
+
|
|
174
|
+
# Handle defer_until - it may be None
|
|
175
|
+
defer_until = None
|
|
176
|
+
if context.defer_until:
|
|
177
|
+
# If it's already a datetime, use it directly
|
|
178
|
+
if hasattr(context.defer_until, "isoformat"):
|
|
179
|
+
defer_until = context.defer_until
|
|
180
|
+
else:
|
|
181
|
+
# Try to parse as string
|
|
182
|
+
from datetime import datetime
|
|
183
|
+
|
|
184
|
+
try:
|
|
185
|
+
# Handle both 'Z' and '+00:00' formats
|
|
186
|
+
defer_str = str(context.defer_until)
|
|
187
|
+
if defer_str.endswith("Z"):
|
|
188
|
+
defer_str = defer_str[:-1] + "+00:00"
|
|
189
|
+
defer_until = datetime.fromisoformat(defer_str)
|
|
190
|
+
except (ValueError, TypeError) as e:
|
|
191
|
+
logger.warning(
|
|
192
|
+
f"Failed to parse defer_until date '{context.defer_until}': {type(e).__name__}: {str(e)} - Task will be deferred to default time"
|
|
193
|
+
)
|
|
194
|
+
defer_until = self._time_service.now()
|
|
195
|
+
else:
|
|
196
|
+
# Default to now + 1 hour if not specified
|
|
197
|
+
from datetime import timedelta
|
|
198
|
+
|
|
199
|
+
defer_until = self._time_service.now() + timedelta(hours=1)
|
|
200
|
+
|
|
201
|
+
deferral_request = DeferralRequest(
|
|
202
|
+
task_id=context.task_id,
|
|
203
|
+
thought_id=context.thought_id,
|
|
204
|
+
reason=context.reason,
|
|
205
|
+
defer_until=defer_until,
|
|
206
|
+
context=context.metadata, # Map metadata to context
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
# Broadcast to ALL registered WA services
|
|
210
|
+
logger.info(f"Broadcasting deferral to {len(services)} wise authority service(s)")
|
|
211
|
+
for service in services:
|
|
212
|
+
try:
|
|
213
|
+
result = await service.send_deferral(deferral_request)
|
|
214
|
+
if result:
|
|
215
|
+
any_success = True
|
|
216
|
+
logger.debug(f"Successfully sent deferral to WA service: {service.__class__.__name__}")
|
|
217
|
+
except Exception as e:
|
|
218
|
+
logger.warning(f"Failed to send deferral to WA service {service.__class__.__name__}: {e}")
|
|
219
|
+
continue
|
|
220
|
+
|
|
221
|
+
# Track deferral count if any service received it
|
|
222
|
+
if any_success:
|
|
223
|
+
self._deferrals_count += 1
|
|
224
|
+
|
|
225
|
+
return any_success
|
|
226
|
+
except Exception as e:
|
|
227
|
+
logger.error(f"Failed to prepare deferral request: {e}", exc_info=True)
|
|
228
|
+
return False
|
|
229
|
+
|
|
230
|
+
async def fetch_guidance(self, context: GuidanceContext, handler_name: str) -> Optional[str]:
|
|
231
|
+
"""Fetch guidance from wise authority"""
|
|
232
|
+
service = await self.get_service(handler_name=handler_name, required_capabilities=["fetch_guidance"])
|
|
233
|
+
|
|
234
|
+
if not service:
|
|
235
|
+
logger.debug(f"No wise authority service available for {handler_name}")
|
|
236
|
+
return None
|
|
237
|
+
|
|
238
|
+
try:
|
|
239
|
+
result = await service.fetch_guidance(context)
|
|
240
|
+
if result is not None:
|
|
241
|
+
self._guidance_count += 1
|
|
242
|
+
return str(result) if result is not None else None
|
|
243
|
+
except Exception as e:
|
|
244
|
+
logger.error(f"Failed to fetch guidance: {e}", exc_info=True)
|
|
245
|
+
return None
|
|
246
|
+
|
|
247
|
+
async def request_review(self, review_type: str, review_data: JSONDict, handler_name: str) -> bool:
|
|
248
|
+
"""Request a review from wise authority (e.g., for identity variance)"""
|
|
249
|
+
# Create a deferral context for the review
|
|
250
|
+
context = DeferralContext(
|
|
251
|
+
thought_id=f"review_{review_type}_{handler_name}",
|
|
252
|
+
task_id=f"review_task_{review_type}",
|
|
253
|
+
reason=f"Review requested: {review_type}",
|
|
254
|
+
defer_until=None,
|
|
255
|
+
priority=None,
|
|
256
|
+
metadata={"review_data": str(review_data), "handler_name": handler_name},
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
return await self.send_deferral(context, handler_name)
|
|
260
|
+
|
|
261
|
+
def _validate_capability(self, capability: Optional[str], agent_tier: int = 1) -> None:
|
|
262
|
+
"""
|
|
263
|
+
Validate capability against prohibited domains with tier-based access.
|
|
264
|
+
|
|
265
|
+
Args:
|
|
266
|
+
capability: The capability to validate
|
|
267
|
+
agent_tier: Agent tier level (1-5, with 4-5 having stewardship)
|
|
268
|
+
|
|
269
|
+
Raises:
|
|
270
|
+
ValueError: If capability is prohibited for the agent's tier
|
|
271
|
+
"""
|
|
272
|
+
if not capability:
|
|
273
|
+
return
|
|
274
|
+
|
|
275
|
+
# Get the category of this capability
|
|
276
|
+
category = get_capability_category(capability)
|
|
277
|
+
if not category:
|
|
278
|
+
# Not a prohibited capability
|
|
279
|
+
return
|
|
280
|
+
|
|
281
|
+
# Check if it's a community moderation capability
|
|
282
|
+
if category.startswith("COMMUNITY_"):
|
|
283
|
+
# Community moderation is only for Tier 4-5 agents
|
|
284
|
+
if agent_tier < 4:
|
|
285
|
+
raise ValueError(
|
|
286
|
+
f"TIER RESTRICTED: Community moderation capability '{capability}' "
|
|
287
|
+
f"requires Tier 4-5 agent (current tier: {agent_tier}). "
|
|
288
|
+
f"This capability is reserved for agents with stewardship responsibilities."
|
|
289
|
+
)
|
|
290
|
+
# Tier 4-5 can use community moderation
|
|
291
|
+
return
|
|
292
|
+
|
|
293
|
+
# Get the severity of this prohibition
|
|
294
|
+
severity = get_prohibition_severity(category)
|
|
295
|
+
|
|
296
|
+
if severity == ProhibitionSeverity.REQUIRES_SEPARATE_MODULE:
|
|
297
|
+
# These require separate licensed systems
|
|
298
|
+
raise ValueError(
|
|
299
|
+
f"PROHIBITED: {category} capabilities blocked. "
|
|
300
|
+
f"Capability '{capability}' requires separate licensed system. "
|
|
301
|
+
f"Implementation must be in isolated repository with proper liability controls."
|
|
302
|
+
)
|
|
303
|
+
elif severity == ProhibitionSeverity.NEVER_ALLOWED:
|
|
304
|
+
# These are absolutely prohibited
|
|
305
|
+
raise ValueError(
|
|
306
|
+
f"ABSOLUTELY PROHIBITED: {category} capabilities are never allowed. "
|
|
307
|
+
f"Capability '{capability}' violates core safety principles. "
|
|
308
|
+
f"This capability cannot be implemented in any CIRIS system."
|
|
309
|
+
)
|
|
310
|
+
# TIER_RESTRICTED already handled above for community moderation
|
|
311
|
+
|
|
312
|
+
async def _get_matching_services(self, request: GuidanceRequest) -> List[Any]:
|
|
313
|
+
"""Get services matching the request capability."""
|
|
314
|
+
required_caps = []
|
|
315
|
+
if hasattr(request, "capability") and request.capability:
|
|
316
|
+
required_caps = [request.capability]
|
|
317
|
+
|
|
318
|
+
# Try to get multiple services if capability routing is supported
|
|
319
|
+
try:
|
|
320
|
+
services_result = self.service_registry.get_services(
|
|
321
|
+
service_type=ServiceType.WISE_AUTHORITY,
|
|
322
|
+
required_capabilities=required_caps,
|
|
323
|
+
limit=5, # Prevent unbounded fan-out
|
|
324
|
+
)
|
|
325
|
+
# Handle both sync and async returns
|
|
326
|
+
if hasattr(services_result, "__await__"):
|
|
327
|
+
services = await services_result
|
|
328
|
+
else:
|
|
329
|
+
services = services_result
|
|
330
|
+
except Exception as e:
|
|
331
|
+
logger.debug(f"Multi-provider lookup failed, falling back to single provider: {e}")
|
|
332
|
+
services = []
|
|
333
|
+
|
|
334
|
+
# Fallback to single service if multi-provider not available
|
|
335
|
+
if not services:
|
|
336
|
+
service = await self.get_service(handler_name="request_guidance", required_capabilities=["fetch_guidance"])
|
|
337
|
+
if service:
|
|
338
|
+
services = [service]
|
|
339
|
+
|
|
340
|
+
return services # type: ignore[no-any-return]
|
|
341
|
+
|
|
342
|
+
def _create_guidance_task(self, svc: Any, request: GuidanceRequest) -> Optional[asyncio.Task[Any]]:
|
|
343
|
+
"""Create an appropriate guidance task for the service."""
|
|
344
|
+
if hasattr(svc, "get_guidance"):
|
|
345
|
+
return asyncio.create_task(svc.get_guidance(request))
|
|
346
|
+
elif hasattr(svc, "fetch_guidance"):
|
|
347
|
+
# Convert to GuidanceContext for backward compatibility
|
|
348
|
+
context = GuidanceContext(
|
|
349
|
+
thought_id=f"guidance_{id(request)}",
|
|
350
|
+
task_id=f"task_{id(request)}",
|
|
351
|
+
question=request.context,
|
|
352
|
+
ethical_considerations=[],
|
|
353
|
+
domain_context={"urgency": request.urgency} if request.urgency else {},
|
|
354
|
+
)
|
|
355
|
+
return asyncio.create_task(self._fetch_guidance_compat(svc, context, request.options))
|
|
356
|
+
return None
|
|
357
|
+
|
|
358
|
+
async def _collect_guidance_responses(
|
|
359
|
+
self, tasks: List[asyncio.Task[Any]], timeout: float
|
|
360
|
+
) -> List[GuidanceResponse]:
|
|
361
|
+
"""Collect responses from guidance tasks with timeout."""
|
|
362
|
+
if not tasks:
|
|
363
|
+
return []
|
|
364
|
+
|
|
365
|
+
# Wait for responses with timeout
|
|
366
|
+
done, pending = await asyncio.wait(tasks, timeout=timeout, return_when=asyncio.ALL_COMPLETED)
|
|
367
|
+
|
|
368
|
+
# Cancel timed-out tasks
|
|
369
|
+
for task in pending:
|
|
370
|
+
task.cancel()
|
|
371
|
+
|
|
372
|
+
# Collect successful responses
|
|
373
|
+
responses = []
|
|
374
|
+
for task in done:
|
|
375
|
+
try:
|
|
376
|
+
resp = task.result()
|
|
377
|
+
if resp:
|
|
378
|
+
responses.append(resp)
|
|
379
|
+
except Exception as e:
|
|
380
|
+
logger.warning(f"Provider failed: {e}")
|
|
381
|
+
|
|
382
|
+
return responses
|
|
383
|
+
|
|
384
|
+
async def request_guidance(
|
|
385
|
+
self, request: GuidanceRequest, timeout: float = 5.0, agent_tier: Optional[int] = None
|
|
386
|
+
) -> GuidanceResponse:
|
|
387
|
+
"""
|
|
388
|
+
Request guidance from capability-matching providers with comprehensive prohibitions.
|
|
389
|
+
|
|
390
|
+
Args:
|
|
391
|
+
request: Guidance request with optional capability field
|
|
392
|
+
timeout: Maximum time to wait for responses (default 5 seconds)
|
|
393
|
+
agent_tier: Agent tier level (1-5), auto-detected if not provided
|
|
394
|
+
|
|
395
|
+
Returns:
|
|
396
|
+
GuidanceResponse with aggregated advice from providers
|
|
397
|
+
|
|
398
|
+
Raises:
|
|
399
|
+
ValueError: If capability is prohibited for the agent's tier
|
|
400
|
+
RuntimeError: If no WiseAuthority service is available
|
|
401
|
+
"""
|
|
402
|
+
# Track request count
|
|
403
|
+
self._requests_count += 1
|
|
404
|
+
|
|
405
|
+
# Auto-detect agent tier if not provided
|
|
406
|
+
if agent_tier is None:
|
|
407
|
+
agent_tier = await self.get_agent_tier()
|
|
408
|
+
|
|
409
|
+
# CRITICAL: Validate capability against comprehensive prohibitions
|
|
410
|
+
if hasattr(request, "capability"):
|
|
411
|
+
self._validate_capability(request.capability, agent_tier)
|
|
412
|
+
|
|
413
|
+
# Get matching services
|
|
414
|
+
services = await self._get_matching_services(request)
|
|
415
|
+
if not services:
|
|
416
|
+
raise RuntimeError("No WiseAuthority service available")
|
|
417
|
+
|
|
418
|
+
# Create tasks for all services
|
|
419
|
+
tasks = []
|
|
420
|
+
for svc in services:
|
|
421
|
+
task = self._create_guidance_task(svc, request)
|
|
422
|
+
if task:
|
|
423
|
+
tasks.append(task)
|
|
424
|
+
|
|
425
|
+
# Handle case where no compatible methods found
|
|
426
|
+
if not tasks:
|
|
427
|
+
return GuidanceResponse(
|
|
428
|
+
reasoning="No compatible guidance methods available",
|
|
429
|
+
wa_id="wisebus",
|
|
430
|
+
signature="none",
|
|
431
|
+
custom_guidance="Service lacks guidance capabilities",
|
|
432
|
+
)
|
|
433
|
+
|
|
434
|
+
# Collect responses
|
|
435
|
+
responses = await self._collect_guidance_responses(tasks, timeout)
|
|
436
|
+
|
|
437
|
+
# Arbitrate responses
|
|
438
|
+
return self._arbitrate_responses(responses, request)
|
|
439
|
+
|
|
440
|
+
async def _fetch_guidance_compat(
|
|
441
|
+
self, service: WiseAuthorityService, context: GuidanceContext, options: Optional[List[str]] = None
|
|
442
|
+
) -> GuidanceResponse:
|
|
443
|
+
"""Convert fetch_guidance response to GuidanceResponse for compatibility."""
|
|
444
|
+
try:
|
|
445
|
+
result = await service.fetch_guidance(context)
|
|
446
|
+
if result:
|
|
447
|
+
return GuidanceResponse(
|
|
448
|
+
selected_option=options[0] if options else None,
|
|
449
|
+
custom_guidance=str(result),
|
|
450
|
+
reasoning="Legacy guidance response",
|
|
451
|
+
wa_id="legacy",
|
|
452
|
+
signature="compat",
|
|
453
|
+
)
|
|
454
|
+
except Exception as e:
|
|
455
|
+
logger.debug(f"Compatibility fetch failed: {e}")
|
|
456
|
+
# Return empty response instead of None to match return type
|
|
457
|
+
return GuidanceResponse(
|
|
458
|
+
reasoning="fetch_guidance unavailable",
|
|
459
|
+
wa_id="error",
|
|
460
|
+
signature="none",
|
|
461
|
+
custom_guidance="Service unavailable",
|
|
462
|
+
)
|
|
463
|
+
|
|
464
|
+
def _arbitrate_responses(self, responses: List[GuidanceResponse], request: GuidanceRequest) -> GuidanceResponse:
|
|
465
|
+
"""
|
|
466
|
+
Confidence-based arbitration for multiple responses.
|
|
467
|
+
Selects response with highest confidence from WisdomAdvice.
|
|
468
|
+
"""
|
|
469
|
+
if not responses:
|
|
470
|
+
return GuidanceResponse(
|
|
471
|
+
reasoning="No guidance available",
|
|
472
|
+
wa_id="wisebus",
|
|
473
|
+
signature="none",
|
|
474
|
+
custom_guidance="No providers responded",
|
|
475
|
+
)
|
|
476
|
+
|
|
477
|
+
# If only one response, use it
|
|
478
|
+
if len(responses) == 1:
|
|
479
|
+
return responses[0]
|
|
480
|
+
|
|
481
|
+
# Calculate confidence for each response
|
|
482
|
+
response_confidences = []
|
|
483
|
+
for resp in responses:
|
|
484
|
+
# Get max confidence from advice if available
|
|
485
|
+
max_confidence = 0.0
|
|
486
|
+
if resp.advice:
|
|
487
|
+
for advice in resp.advice:
|
|
488
|
+
if advice.confidence is not None:
|
|
489
|
+
max_confidence = max(max_confidence, advice.confidence)
|
|
490
|
+
response_confidences.append((resp, max_confidence))
|
|
491
|
+
|
|
492
|
+
# Sort by confidence (highest first)
|
|
493
|
+
response_confidences.sort(key=lambda x: x[1], reverse=True)
|
|
494
|
+
|
|
495
|
+
# Select best response
|
|
496
|
+
best_response, best_confidence = response_confidences[0]
|
|
497
|
+
|
|
498
|
+
# Aggregate all advice from all providers for transparency
|
|
499
|
+
all_advice = []
|
|
500
|
+
for resp in responses:
|
|
501
|
+
if resp.advice:
|
|
502
|
+
all_advice.extend(resp.advice)
|
|
503
|
+
|
|
504
|
+
# Update best response with aggregated advice and note about selection
|
|
505
|
+
best_response.advice = all_advice
|
|
506
|
+
best_response.reasoning = (
|
|
507
|
+
f"{best_response.reasoning} "
|
|
508
|
+
f"(selected with {best_confidence:.2f} confidence from {len(responses)} providers)"
|
|
509
|
+
)
|
|
510
|
+
|
|
511
|
+
return best_response
|
|
512
|
+
|
|
513
|
+
def _is_capability_allowed(self, capability: str) -> bool:
|
|
514
|
+
"""Check if a capability is allowed (not prohibited)."""
|
|
515
|
+
capability_lower = capability.lower()
|
|
516
|
+
|
|
517
|
+
# PROHIBITED_CAPABILITIES is a dict of categories, each containing a set of capabilities
|
|
518
|
+
for category, capabilities_set in PROHIBITED_CAPABILITIES.items():
|
|
519
|
+
for prohibited_cap in capabilities_set:
|
|
520
|
+
if capability_lower == prohibited_cap.lower() or prohibited_cap.lower() in capability_lower:
|
|
521
|
+
return False
|
|
522
|
+
return True
|
|
523
|
+
|
|
524
|
+
def _collect_metrics(self) -> Dict[str, float]:
|
|
525
|
+
"""Collect base metrics for the wise bus."""
|
|
526
|
+
# Calculate uptime
|
|
527
|
+
uptime_seconds = 0.0
|
|
528
|
+
if hasattr(self, "_time_service") and self._time_service:
|
|
529
|
+
if hasattr(self, "_start_time") and self._start_time:
|
|
530
|
+
uptime_seconds = (self._time_service.now() - self._start_time).total_seconds()
|
|
531
|
+
|
|
532
|
+
return {
|
|
533
|
+
"wise_guidance_requests": float(self._requests_count),
|
|
534
|
+
"wise_guidance_deferrals": float(self._deferrals_count),
|
|
535
|
+
"wise_guidance_responses": float(self._guidance_count),
|
|
536
|
+
"wise_uptime_seconds": uptime_seconds,
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
def get_metrics(self) -> BusMetrics:
|
|
540
|
+
"""Get all wise bus metrics as typed BusMetrics schema."""
|
|
541
|
+
# Count active authorities (WiseAuthority services)
|
|
542
|
+
all_wa_services = self.service_registry.get_services_by_type(ServiceType.WISE_AUTHORITY)
|
|
543
|
+
|
|
544
|
+
# Calculate uptime
|
|
545
|
+
uptime_seconds = 0.0
|
|
546
|
+
if hasattr(self, "_time_service") and self._time_service:
|
|
547
|
+
if hasattr(self, "_start_time") and self._start_time:
|
|
548
|
+
uptime_seconds = (self._time_service.now() - self._start_time).total_seconds()
|
|
549
|
+
|
|
550
|
+
# Map to BusMetrics schema
|
|
551
|
+
return BusMetrics(
|
|
552
|
+
messages_sent=self._requests_count, # Guidance requests sent
|
|
553
|
+
messages_received=self._guidance_count, # Guidance responses received
|
|
554
|
+
messages_dropped=0, # Not tracked yet
|
|
555
|
+
average_latency_ms=0.0, # Not tracked yet
|
|
556
|
+
active_subscriptions=len(all_wa_services),
|
|
557
|
+
queue_depth=self.get_queue_size(),
|
|
558
|
+
errors_last_hour=self._requests_count - self._guidance_count, # Failed requests
|
|
559
|
+
busiest_service=None, # Could track which authority gets most requests
|
|
560
|
+
additional_metrics={
|
|
561
|
+
"wise_guidance_requests": self._requests_count,
|
|
562
|
+
"wise_guidance_deferrals": self._deferrals_count,
|
|
563
|
+
"wise_guidance_responses": self._guidance_count,
|
|
564
|
+
"wise_uptime_seconds": uptime_seconds,
|
|
565
|
+
},
|
|
566
|
+
)
|
|
567
|
+
|
|
568
|
+
async def _process_message(self, message: BusMessage) -> None:
|
|
569
|
+
"""Process a wise authority message - currently all WA operations are synchronous"""
|
|
570
|
+
logger.warning(f"Wise authority operations should be synchronous, got queued message: {type(message)}")
|
|
571
|
+
|
|
572
|
+
def _count_capability_categories(self) -> tuple[Dict[str, int], int, Dict[str, int], int]:
|
|
573
|
+
"""Count prohibited and community capabilities by category."""
|
|
574
|
+
prohibited_counts = {
|
|
575
|
+
category.lower(): len(capabilities) for category, capabilities in PROHIBITED_CAPABILITIES.items()
|
|
576
|
+
}
|
|
577
|
+
total_prohibited = sum(prohibited_counts.values())
|
|
578
|
+
|
|
579
|
+
community_counts = {
|
|
580
|
+
category.lower(): len(capabilities) for category, capabilities in COMMUNITY_MODERATION_CAPABILITIES.items()
|
|
581
|
+
}
|
|
582
|
+
total_community = sum(community_counts.values())
|
|
583
|
+
|
|
584
|
+
return prohibited_counts, total_prohibited, community_counts, total_community
|
|
585
|
+
|
|
586
|
+
def _create_telemetry_base(
|
|
587
|
+
self,
|
|
588
|
+
prohibited_counts: Dict[str, int],
|
|
589
|
+
total_prohibited: int,
|
|
590
|
+
community_counts: Dict[str, int],
|
|
591
|
+
total_community: int,
|
|
592
|
+
) -> JSONDict:
|
|
593
|
+
"""Create base telemetry dictionary."""
|
|
594
|
+
return {
|
|
595
|
+
"service_name": "wise_bus",
|
|
596
|
+
"prohibited_capabilities": prohibited_counts,
|
|
597
|
+
"total_prohibited": total_prohibited,
|
|
598
|
+
"community_capabilities": community_counts,
|
|
599
|
+
"total_community": total_community,
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
async def collect_telemetry(self) -> JSONDict:
|
|
603
|
+
"""
|
|
604
|
+
Collect telemetry from all wise authority providers in parallel.
|
|
605
|
+
|
|
606
|
+
Returns aggregated metrics including:
|
|
607
|
+
- failed_count: Total deferrals failed across providers
|
|
608
|
+
- processed_count: Total guidance requests processed
|
|
609
|
+
- provider_count: Number of active providers
|
|
610
|
+
- prohibited_capabilities: Count by category
|
|
611
|
+
- community_capabilities: Count of community moderation capabilities
|
|
612
|
+
"""
|
|
613
|
+
all_wa_services = self.service_registry.get_services_by_type(ServiceType.WISE_AUTHORITY)
|
|
614
|
+
|
|
615
|
+
# Count capabilities by category
|
|
616
|
+
prohibited_counts, total_prohibited, community_counts, total_community = self._count_capability_categories()
|
|
617
|
+
base_telemetry = self._create_telemetry_base(
|
|
618
|
+
prohibited_counts, total_prohibited, community_counts, total_community
|
|
619
|
+
)
|
|
620
|
+
|
|
621
|
+
if not all_wa_services:
|
|
622
|
+
return {
|
|
623
|
+
**base_telemetry,
|
|
624
|
+
"healthy": False,
|
|
625
|
+
"failed_count": 0,
|
|
626
|
+
"processed_count": 0,
|
|
627
|
+
"provider_count": 0,
|
|
628
|
+
"error": "No wise authority services available",
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
# Create tasks to collect telemetry from all providers
|
|
632
|
+
tasks = [
|
|
633
|
+
asyncio.create_task(service.get_telemetry())
|
|
634
|
+
for service in all_wa_services
|
|
635
|
+
if hasattr(service, "get_telemetry")
|
|
636
|
+
]
|
|
637
|
+
|
|
638
|
+
# Initialize aggregated telemetry
|
|
639
|
+
aggregated = {
|
|
640
|
+
**base_telemetry,
|
|
641
|
+
"healthy": True,
|
|
642
|
+
"failed_count": 0,
|
|
643
|
+
"processed_count": 0,
|
|
644
|
+
"provider_count": len(all_wa_services),
|
|
645
|
+
"providers": [],
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
if not tasks:
|
|
649
|
+
return aggregated
|
|
650
|
+
|
|
651
|
+
# Collect and aggregate provider telemetry
|
|
652
|
+
done, pending = await asyncio.wait(tasks, timeout=2.0, return_when=asyncio.ALL_COMPLETED)
|
|
653
|
+
|
|
654
|
+
# Cancel timed-out tasks
|
|
655
|
+
for task in pending:
|
|
656
|
+
task.cancel()
|
|
657
|
+
|
|
658
|
+
# Aggregate results from completed tasks
|
|
659
|
+
self._aggregate_provider_telemetry(aggregated, done)
|
|
660
|
+
|
|
661
|
+
return aggregated
|
|
662
|
+
|
|
663
|
+
def _aggregate_provider_telemetry(self, aggregated: JSONDict, completed_tasks: Set[Any]) -> None:
|
|
664
|
+
"""Aggregate telemetry from completed provider tasks."""
|
|
665
|
+
for task in completed_tasks:
|
|
666
|
+
try:
|
|
667
|
+
telemetry = task.result()
|
|
668
|
+
if not telemetry:
|
|
669
|
+
continue
|
|
670
|
+
|
|
671
|
+
service_name = get_str(telemetry, "service_name", "unknown")
|
|
672
|
+
providers_list = aggregated["providers"]
|
|
673
|
+
if isinstance(providers_list, list):
|
|
674
|
+
providers_list.append(service_name)
|
|
675
|
+
|
|
676
|
+
failed_count = aggregated["failed_count"]
|
|
677
|
+
if isinstance(failed_count, int):
|
|
678
|
+
aggregated["failed_count"] = failed_count + get_int(telemetry, "failed_count", 0)
|
|
679
|
+
|
|
680
|
+
processed_count = aggregated["processed_count"]
|
|
681
|
+
if isinstance(processed_count, int):
|
|
682
|
+
aggregated["processed_count"] = processed_count + get_int(telemetry, "processed_count", 0)
|
|
683
|
+
except Exception as e:
|
|
684
|
+
logger.warning(f"Failed to collect telemetry from provider: {e}")
|