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,195 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from datetime import datetime
|
|
3
|
+
from typing import Any, Optional
|
|
4
|
+
|
|
5
|
+
from ciris_engine.logic import persistence
|
|
6
|
+
from ciris_engine.logic.infrastructure.handlers.base_handler import BaseActionHandler
|
|
7
|
+
from ciris_engine.schemas.actions import DeferParams
|
|
8
|
+
from ciris_engine.schemas.dma.results import ActionSelectionDMAResult
|
|
9
|
+
from ciris_engine.schemas.runtime.contexts import DispatchContext
|
|
10
|
+
from ciris_engine.schemas.runtime.enums import HandlerActionType, TaskStatus, ThoughtStatus
|
|
11
|
+
from ciris_engine.schemas.runtime.models import Thought
|
|
12
|
+
from ciris_engine.schemas.services.context import DeferralContext
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class DeferHandler(BaseActionHandler):
|
|
18
|
+
def _is_api_channel(self, channel_id: Optional[str]) -> bool:
|
|
19
|
+
"""Check if channel is an API channel (not Discord)."""
|
|
20
|
+
if not channel_id:
|
|
21
|
+
return False
|
|
22
|
+
return channel_id.startswith("api_") or channel_id.startswith("ws:")
|
|
23
|
+
|
|
24
|
+
async def _get_task_scheduler_service(self) -> Optional[Any]:
|
|
25
|
+
"""Get task scheduler service from registry."""
|
|
26
|
+
try:
|
|
27
|
+
if hasattr(self, "_service_registry") and self._service_registry:
|
|
28
|
+
# Try to get from service registry
|
|
29
|
+
return await self._service_registry.get_service(handler="task_scheduler", service_type="scheduler")
|
|
30
|
+
else:
|
|
31
|
+
logger.debug("No _service_registry available for task scheduler lookup")
|
|
32
|
+
except Exception as e:
|
|
33
|
+
logger.warning(f"Could not get task scheduler service: {e}")
|
|
34
|
+
return None
|
|
35
|
+
|
|
36
|
+
async def handle(
|
|
37
|
+
self,
|
|
38
|
+
result: ActionSelectionDMAResult, # Updated to v1 result schema
|
|
39
|
+
thought: Thought,
|
|
40
|
+
dispatch_context: DispatchContext,
|
|
41
|
+
) -> Optional[str]:
|
|
42
|
+
raw_params = result.action_parameters
|
|
43
|
+
thought_id = thought.thought_id
|
|
44
|
+
# NOTE: Audit logging removed - action_dispatcher handles centralized audit logging
|
|
45
|
+
|
|
46
|
+
final_thought_status = ThoughtStatus.DEFERRED
|
|
47
|
+
action_performed_successfully = False
|
|
48
|
+
follow_up_content_key_info = f"DEFER action for thought {thought_id}"
|
|
49
|
+
|
|
50
|
+
defer_params_obj: Optional[DeferParams] = None
|
|
51
|
+
try:
|
|
52
|
+
# Check if params are already DeferParams
|
|
53
|
+
if isinstance(raw_params, DeferParams):
|
|
54
|
+
defer_params_obj = raw_params
|
|
55
|
+
elif hasattr(raw_params, "model_dump"):
|
|
56
|
+
# Try to convert from another Pydantic model
|
|
57
|
+
defer_params_obj = DeferParams(**raw_params.model_dump())
|
|
58
|
+
else:
|
|
59
|
+
# Should not happen if DMA is working correctly
|
|
60
|
+
raise ValueError(f"Expected DeferParams but got {type(raw_params)}")
|
|
61
|
+
|
|
62
|
+
follow_up_content_key_info = f"Deferred thought {thought_id}. Reason: {defer_params_obj.reason}"
|
|
63
|
+
|
|
64
|
+
# Check if this is a time-based deferral
|
|
65
|
+
if defer_params_obj.defer_until:
|
|
66
|
+
# Schedule the task for future reactivation
|
|
67
|
+
scheduler_service = await self._get_task_scheduler_service()
|
|
68
|
+
if scheduler_service:
|
|
69
|
+
try:
|
|
70
|
+
# Parse the defer_until timestamp - handle both 'Z' and '+00:00' formats
|
|
71
|
+
defer_str = defer_params_obj.defer_until
|
|
72
|
+
if defer_str.endswith("Z"):
|
|
73
|
+
defer_str = defer_str[:-1] + "+00:00"
|
|
74
|
+
defer_time = datetime.fromisoformat(defer_str)
|
|
75
|
+
|
|
76
|
+
# Create scheduled task
|
|
77
|
+
scheduled_task = await scheduler_service.schedule_deferred_task(
|
|
78
|
+
thought_id=thought_id,
|
|
79
|
+
task_id=thought.source_task_id,
|
|
80
|
+
defer_until=defer_params_obj.defer_until,
|
|
81
|
+
reason=defer_params_obj.reason,
|
|
82
|
+
context=defer_params_obj.context,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
logger.info(
|
|
86
|
+
f"Created scheduled task {scheduled_task.task_id} to reactivate at {defer_params_obj.defer_until}"
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
# Add scheduled info to follow-up content
|
|
90
|
+
time_diff = defer_time - self.time_service.now()
|
|
91
|
+
hours = int(time_diff.total_seconds() / 3600)
|
|
92
|
+
minutes = int((time_diff.total_seconds() % 3600) / 60)
|
|
93
|
+
|
|
94
|
+
follow_up_content_key_info = (
|
|
95
|
+
f"Deferred thought {thought_id} until {defer_params_obj.defer_until} "
|
|
96
|
+
f"({hours}h {minutes}m from now). Reason: {defer_params_obj.reason}"
|
|
97
|
+
)
|
|
98
|
+
except Exception as e:
|
|
99
|
+
logger.error(f"Failed to schedule deferred task: {e}")
|
|
100
|
+
# Fall back to standard deferral
|
|
101
|
+
|
|
102
|
+
# Use the wise authority bus for deferrals
|
|
103
|
+
try:
|
|
104
|
+
# Build metadata dict for additional context
|
|
105
|
+
metadata = {
|
|
106
|
+
"attempted_action": getattr(dispatch_context, "attempted_action", "unknown"),
|
|
107
|
+
"max_rounds_reached": str(getattr(dispatch_context, "max_rounds_reached", False)),
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if thought.source_task_id:
|
|
111
|
+
task = persistence.get_task_by_id(thought.source_task_id)
|
|
112
|
+
if task and hasattr(task, "description"):
|
|
113
|
+
metadata["task_description"] = task.description
|
|
114
|
+
|
|
115
|
+
# Convert defer_until from ISO string to datetime if present
|
|
116
|
+
defer_until_dt = None
|
|
117
|
+
if defer_params_obj.defer_until:
|
|
118
|
+
defer_until_dt = datetime.fromisoformat(defer_params_obj.defer_until.replace("Z", "+00:00"))
|
|
119
|
+
|
|
120
|
+
deferral_context = DeferralContext(
|
|
121
|
+
thought_id=thought_id,
|
|
122
|
+
task_id=thought.source_task_id,
|
|
123
|
+
reason=defer_params_obj.reason,
|
|
124
|
+
defer_until=defer_until_dt,
|
|
125
|
+
priority=getattr(defer_params_obj, "priority", "medium"),
|
|
126
|
+
metadata=metadata,
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
wa_sent = await self.bus_manager.wise.send_deferral(
|
|
130
|
+
context=deferral_context, handler_name=self.__class__.__name__
|
|
131
|
+
)
|
|
132
|
+
if not wa_sent:
|
|
133
|
+
logger.info(
|
|
134
|
+
f"Marked thought {thought_id} and task {thought.source_task_id} as deferred, but no WA service is available to deliver the deferral package"
|
|
135
|
+
)
|
|
136
|
+
else:
|
|
137
|
+
logger.info(f"Successfully sent deferral to WA service for thought {thought_id}")
|
|
138
|
+
action_performed_successfully = True
|
|
139
|
+
except Exception as e:
|
|
140
|
+
self.logger.error(f"WiseAuthorityService deferral failed for thought {thought_id}: {e}")
|
|
141
|
+
# Deferral still considered processed even if WA fails
|
|
142
|
+
|
|
143
|
+
except Exception as param_parse_error:
|
|
144
|
+
self.logger.error(
|
|
145
|
+
f"DEFER action params parsing error or unexpected structure. Type: {type(raw_params)}, Error: {param_parse_error}. Thought ID: {thought_id}"
|
|
146
|
+
)
|
|
147
|
+
follow_up_content_key_info = f"DEFER action failed: Invalid parameters ({type(raw_params)}) for thought {thought_id}. Error: {param_parse_error}"
|
|
148
|
+
# Try to send deferral despite parameter error
|
|
149
|
+
try:
|
|
150
|
+
error_context = DeferralContext(
|
|
151
|
+
thought_id=thought_id,
|
|
152
|
+
task_id=thought.source_task_id,
|
|
153
|
+
reason="parameter_error",
|
|
154
|
+
defer_until=None,
|
|
155
|
+
priority=None,
|
|
156
|
+
metadata={
|
|
157
|
+
"error_type": "parameter_parsing_error",
|
|
158
|
+
"attempted_action": getattr(dispatch_context, "attempted_action", "defer"),
|
|
159
|
+
},
|
|
160
|
+
)
|
|
161
|
+
wa_sent = await self.bus_manager.wise.send_deferral(
|
|
162
|
+
context=error_context, handler_name=self.__class__.__name__
|
|
163
|
+
)
|
|
164
|
+
if not wa_sent:
|
|
165
|
+
logger.info(
|
|
166
|
+
f"Marked thought {thought_id} as deferred (parameter error), but no WA service is available to deliver the deferral package"
|
|
167
|
+
)
|
|
168
|
+
except Exception as e_sink_fallback:
|
|
169
|
+
self.logger.error(f"Fallback deferral submission failed for thought {thought_id}: {e_sink_fallback}")
|
|
170
|
+
_action_performed_successfully = True
|
|
171
|
+
|
|
172
|
+
persistence.update_thought_status(
|
|
173
|
+
thought_id=thought_id,
|
|
174
|
+
status=final_thought_status, # Should be DEFERRED
|
|
175
|
+
final_action=result, # Pass the ActionSelectionDMAResult object directly
|
|
176
|
+
)
|
|
177
|
+
self.logger.info(
|
|
178
|
+
f"Updated original thought {thought_id} to status {final_thought_status.value} for DEFER action. Info: {follow_up_content_key_info}"
|
|
179
|
+
)
|
|
180
|
+
# NOTE: Audit logging removed - action_dispatcher handles centralized audit logging
|
|
181
|
+
|
|
182
|
+
parent_task_id = thought.source_task_id
|
|
183
|
+
# Update task status to deferred - "no kings" principle
|
|
184
|
+
persistence.update_task_status(parent_task_id, TaskStatus.DEFERRED, "default", self.time_service)
|
|
185
|
+
self.logger.info(f"Marked parent task {parent_task_id} as DEFERRED due to child thought deferral.")
|
|
186
|
+
|
|
187
|
+
# Send deferral notification to API channels
|
|
188
|
+
task = persistence.get_task_by_id(parent_task_id)
|
|
189
|
+
if task and task.channel_id and self._is_api_channel(task.channel_id):
|
|
190
|
+
self.logger.info(f"Sending deferral notification to API channel {task.channel_id}")
|
|
191
|
+
await self._send_notification(
|
|
192
|
+
task.channel_id, "The agent chose to defer, check the wise authority panel if you are the setup user"
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
return None
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from typing import List, Optional
|
|
3
|
+
|
|
4
|
+
from ciris_engine.logic import persistence
|
|
5
|
+
from ciris_engine.logic.infrastructure.handlers.base_handler import ActionHandlerDependencies, BaseActionHandler
|
|
6
|
+
from ciris_engine.schemas.actions import PonderParams
|
|
7
|
+
from ciris_engine.schemas.dma.results import ActionSelectionDMAResult
|
|
8
|
+
from ciris_engine.schemas.runtime.contexts import DispatchContext
|
|
9
|
+
from ciris_engine.schemas.runtime.enums import HandlerActionType, ThoughtStatus
|
|
10
|
+
from ciris_engine.schemas.runtime.models import Thought
|
|
11
|
+
|
|
12
|
+
# Configuration handled through ActionHandlerDependencies
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class PonderHandler(BaseActionHandler):
|
|
18
|
+
"""Handler for PONDER actions with configurable thought depth limits.
|
|
19
|
+
|
|
20
|
+
The max_rounds parameter controls the maximum thought depth before
|
|
21
|
+
the thought depth conscience intervenes. Default is 7 rounds.
|
|
22
|
+
|
|
23
|
+
Note: max_rounds can be passed via constructor for testing/customization.
|
|
24
|
+
Future enhancement: Load from EssentialConfig.default_max_thought_depth.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
def __init__(self, dependencies: ActionHandlerDependencies, max_rounds: Optional[int] = None) -> None:
|
|
28
|
+
super().__init__(dependencies)
|
|
29
|
+
# Default to 7 rounds if not explicitly set
|
|
30
|
+
# Can be overridden via constructor parameter for testing
|
|
31
|
+
self.max_rounds = max_rounds if max_rounds is not None else 7
|
|
32
|
+
|
|
33
|
+
async def handle(
|
|
34
|
+
self,
|
|
35
|
+
result: ActionSelectionDMAResult, # Updated to v1 result schema
|
|
36
|
+
thought: Thought,
|
|
37
|
+
dispatch_context: DispatchContext,
|
|
38
|
+
) -> Optional[str]:
|
|
39
|
+
"""Process ponder action and update thought."""
|
|
40
|
+
params = result.action_parameters
|
|
41
|
+
# Handle the union type properly
|
|
42
|
+
if isinstance(params, PonderParams):
|
|
43
|
+
ponder_params = params
|
|
44
|
+
elif hasattr(params, "model_dump"):
|
|
45
|
+
# Try to convert from another Pydantic model
|
|
46
|
+
try:
|
|
47
|
+
ponder_params = PonderParams(**params.model_dump())
|
|
48
|
+
except Exception as e:
|
|
49
|
+
logger.warning(f"Failed to convert {type(params)} to PonderParams: {e}")
|
|
50
|
+
ponder_params = PonderParams(questions=[])
|
|
51
|
+
else:
|
|
52
|
+
# Should not happen if DMA is working correctly
|
|
53
|
+
logger.warning(f"Expected PonderParams but got {type(params)}")
|
|
54
|
+
ponder_params = PonderParams(questions=[])
|
|
55
|
+
|
|
56
|
+
questions_list = ponder_params.questions if hasattr(ponder_params, "questions") else []
|
|
57
|
+
|
|
58
|
+
# Note: epistemic_data handling removed - not part of typed DispatchContext
|
|
59
|
+
# If epistemic data is needed, it should be passed through proper typed fields
|
|
60
|
+
|
|
61
|
+
current_thought_depth = thought.thought_depth
|
|
62
|
+
# Calculate actual follow-up depth (capped at 7 by create_follow_up_thought)
|
|
63
|
+
new_thought_depth = min(current_thought_depth + 1, 7)
|
|
64
|
+
|
|
65
|
+
logger.info(
|
|
66
|
+
f"Thought ID {thought.thought_id} pondering (current_depth={current_thought_depth}, "
|
|
67
|
+
f"follow_up_depth={new_thought_depth}). Questions: {questions_list}"
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
# The thought depth conscience will handle max depth enforcement
|
|
71
|
+
# We just need to process the ponder normally
|
|
72
|
+
next_status = ThoughtStatus.COMPLETED
|
|
73
|
+
|
|
74
|
+
# Get task context for follow-up
|
|
75
|
+
original_task = persistence.get_task_by_id(thought.source_task_id)
|
|
76
|
+
task_context = f"Task ID: {thought.source_task_id}"
|
|
77
|
+
if original_task:
|
|
78
|
+
task_context = original_task.description
|
|
79
|
+
|
|
80
|
+
follow_up_content = self._generate_ponder_follow_up_content(
|
|
81
|
+
task_context, questions_list, new_thought_depth, thought
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
# Use centralized method to complete thought and create follow-up
|
|
85
|
+
follow_up_id = self.complete_thought_and_create_followup(
|
|
86
|
+
thought=thought, follow_up_content=follow_up_content, action_result=result
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
# NOTE: Audit logging removed - action_dispatcher handles centralized audit logging
|
|
90
|
+
|
|
91
|
+
return follow_up_id
|
|
92
|
+
|
|
93
|
+
def _generate_ponder_follow_up_content(
|
|
94
|
+
self, task_context: str, questions_list: List[str], thought_depth: int, thought: Thought
|
|
95
|
+
) -> str:
|
|
96
|
+
"""Generate dynamic follow-up content based on ponder count and previous failures.
|
|
97
|
+
|
|
98
|
+
IMPORTANT: This method accumulates context across ponder iterations.
|
|
99
|
+
Each follow-up should include:
|
|
100
|
+
1. The parent thought's content (accumulated history)
|
|
101
|
+
2. The current ponder questions/conscience feedback
|
|
102
|
+
3. Depth-specific guidance
|
|
103
|
+
"""
|
|
104
|
+
# Start with accumulated history from parent thought
|
|
105
|
+
accumulated_history = ""
|
|
106
|
+
if thought.content:
|
|
107
|
+
# Include parent thought content to preserve history
|
|
108
|
+
accumulated_history = f"=== PREVIOUS CONTEXT ===\n{thought.content}\n\n"
|
|
109
|
+
|
|
110
|
+
# Format current ponder round
|
|
111
|
+
current_round = f"=== PONDER ROUND {thought_depth} ===\n"
|
|
112
|
+
if questions_list:
|
|
113
|
+
current_round += "Conscience feedback:\n"
|
|
114
|
+
for i, q in enumerate(questions_list, 1):
|
|
115
|
+
current_round += f" {i}. {q}\n"
|
|
116
|
+
|
|
117
|
+
# Add thought-depth specific guidance
|
|
118
|
+
if thought_depth <= 3:
|
|
119
|
+
guidance = f'Task: "{task_context}"\n' "Continue making progress. Consider the conscience feedback above."
|
|
120
|
+
elif thought_depth <= 5:
|
|
121
|
+
guidance = (
|
|
122
|
+
f'Task: "{task_context}"\n'
|
|
123
|
+
"You're deep into this task. Consider:\n"
|
|
124
|
+
"1) Is the task nearly complete?\n"
|
|
125
|
+
"2) Can you address the conscience concerns with a modified approach?\n"
|
|
126
|
+
f"3) You have {7 - thought_depth + 1} actions remaining."
|
|
127
|
+
)
|
|
128
|
+
elif thought_depth == 6:
|
|
129
|
+
guidance = (
|
|
130
|
+
f'Task: "{task_context}"\n'
|
|
131
|
+
"Approaching action limit. Consider:\n"
|
|
132
|
+
"1) Can you complete with one more action?\n"
|
|
133
|
+
"2) Is TASK_COMPLETE appropriate?\n"
|
|
134
|
+
"3) If you need more actions, someone can ask you to continue."
|
|
135
|
+
)
|
|
136
|
+
else: # thought_depth >= 7
|
|
137
|
+
guidance = (
|
|
138
|
+
f'Task: "{task_context}"\n'
|
|
139
|
+
"FINAL ACTION. You should either:\n"
|
|
140
|
+
"1) TASK_COMPLETE - If work is substantially complete\n"
|
|
141
|
+
"2) DEFER - Only if you truly need human help\n"
|
|
142
|
+
"Note: Someone can ask you to continue for 7 more actions."
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
# Combine all parts
|
|
146
|
+
follow_up_content = accumulated_history + current_round + "\n" + guidance
|
|
147
|
+
|
|
148
|
+
# Also include ponder_notes for backwards compatibility
|
|
149
|
+
if thought.ponder_notes:
|
|
150
|
+
follow_up_content += "\n\n=== PONDER NOTES ===\n"
|
|
151
|
+
for note in thought.ponder_notes[-5:]: # Last 5 entries for more context
|
|
152
|
+
follow_up_content += f"- {note}\n"
|
|
153
|
+
|
|
154
|
+
return follow_up_content
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from typing import Optional
|
|
3
|
+
|
|
4
|
+
from ciris_engine.logic import persistence
|
|
5
|
+
from ciris_engine.logic.infrastructure.handlers.base_handler import BaseActionHandler
|
|
6
|
+
from ciris_engine.logic.utils.channel_utils import extract_channel_id
|
|
7
|
+
from ciris_engine.schemas.actions import RejectParams
|
|
8
|
+
from ciris_engine.schemas.dma.results import ActionSelectionDMAResult
|
|
9
|
+
from ciris_engine.schemas.runtime.contexts import DispatchContext
|
|
10
|
+
from ciris_engine.schemas.runtime.enums import HandlerActionType, TaskStatus, ThoughtStatus
|
|
11
|
+
from ciris_engine.schemas.runtime.models import Thought
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class RejectHandler(BaseActionHandler):
|
|
17
|
+
async def handle(
|
|
18
|
+
self, result: ActionSelectionDMAResult, thought: Thought, dispatch_context: DispatchContext
|
|
19
|
+
) -> Optional[str]:
|
|
20
|
+
raw_params = result.action_parameters
|
|
21
|
+
thought_id = thought.thought_id
|
|
22
|
+
parent_task_id = thought.source_task_id
|
|
23
|
+
# NOTE: Audit logging removed - action_dispatcher handles centralized audit logging
|
|
24
|
+
original_event_channel_id = extract_channel_id(dispatch_context.channel_context)
|
|
25
|
+
|
|
26
|
+
final_thought_status = ThoughtStatus.FAILED
|
|
27
|
+
_action_performed_successfully = False
|
|
28
|
+
follow_up_content_key_info = f"REJECT action for thought {thought_id}"
|
|
29
|
+
|
|
30
|
+
try:
|
|
31
|
+
params: RejectParams = self._validate_and_convert_params(raw_params, RejectParams)
|
|
32
|
+
except Exception as e:
|
|
33
|
+
await self._handle_error(HandlerActionType.REJECT, dispatch_context, thought_id, e)
|
|
34
|
+
# NOTE: Audit logging removed - action_dispatcher handles centralized audit logging
|
|
35
|
+
persistence.update_thought_status(
|
|
36
|
+
thought_id=thought_id,
|
|
37
|
+
status=final_thought_status,
|
|
38
|
+
final_action=result,
|
|
39
|
+
)
|
|
40
|
+
return None
|
|
41
|
+
|
|
42
|
+
follow_up_content_key_info = f"Rejected thought {thought_id}. Reason: {params.reason}"
|
|
43
|
+
|
|
44
|
+
# Send rejection notification to API channels
|
|
45
|
+
if original_event_channel_id and self._is_api_channel(original_event_channel_id):
|
|
46
|
+
self.logger.info(f"Sending rejection notification to API channel {original_event_channel_id}")
|
|
47
|
+
await self._send_notification(original_event_channel_id, "Agent rejected the message")
|
|
48
|
+
|
|
49
|
+
persistence.update_thought_status(
|
|
50
|
+
thought_id=thought_id,
|
|
51
|
+
status=final_thought_status,
|
|
52
|
+
final_action=result,
|
|
53
|
+
)
|
|
54
|
+
if parent_task_id:
|
|
55
|
+
persistence.update_task_status(parent_task_id, TaskStatus.REJECTED, "default", self.time_service)
|
|
56
|
+
self.logger.info(
|
|
57
|
+
f"Updated original thought {thought_id} to status {final_thought_status.value} for REJECT action. Info: {follow_up_content_key_info}"
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
# Handle adaptive filtering if requested
|
|
61
|
+
if isinstance(params, RejectParams) and params.create_filter:
|
|
62
|
+
await self._create_adaptive_filter(params, thought, dispatch_context)
|
|
63
|
+
|
|
64
|
+
# REJECT is a terminal action - no follow-up thoughts should be created
|
|
65
|
+
self.logger.info(f"REJECT action completed for thought {thought_id}. This is a terminal action.")
|
|
66
|
+
# NOTE: Audit logging removed - action_dispatcher handles centralized audit logging
|
|
67
|
+
|
|
68
|
+
return None
|
|
69
|
+
|
|
70
|
+
def _is_api_channel(self, channel_id: Optional[str]) -> bool:
|
|
71
|
+
"""Check if channel is an API channel (not Discord)."""
|
|
72
|
+
if not channel_id:
|
|
73
|
+
return False
|
|
74
|
+
return channel_id.startswith("api_") or channel_id.startswith("ws:")
|
|
75
|
+
|
|
76
|
+
async def _create_adaptive_filter(
|
|
77
|
+
self, params: RejectParams, thought: Thought, dispatch_context: DispatchContext
|
|
78
|
+
) -> None:
|
|
79
|
+
"""Create an adaptive filter based on the rejected content."""
|
|
80
|
+
# TODO: Implement filter bus when needed
|
|
81
|
+
self.logger.info("Adaptive filter creation not implemented in new bus architecture")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""External handlers module."""
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from typing import List, Optional
|
|
3
|
+
|
|
4
|
+
from ciris_engine.logic.infrastructure.handlers.base_handler import BaseActionHandler
|
|
5
|
+
from ciris_engine.logic.infrastructure.handlers.exceptions import FollowUpCreationError
|
|
6
|
+
from ciris_engine.logic.utils.channel_utils import extract_channel_id
|
|
7
|
+
from ciris_engine.schemas.actions import ObserveParams
|
|
8
|
+
from ciris_engine.schemas.dma.results import ActionSelectionDMAResult
|
|
9
|
+
from ciris_engine.schemas.runtime.contexts import DispatchContext
|
|
10
|
+
from ciris_engine.schemas.runtime.enums import HandlerActionType, ThoughtStatus
|
|
11
|
+
from ciris_engine.schemas.runtime.messages import FetchedMessage
|
|
12
|
+
from ciris_engine.schemas.runtime.models import Thought
|
|
13
|
+
from ciris_engine.schemas.runtime.system_context import ChannelContext
|
|
14
|
+
from ciris_engine.schemas.services.graph_core import GraphScope, NodeType
|
|
15
|
+
|
|
16
|
+
PASSIVE_OBSERVE_LIMIT = 10
|
|
17
|
+
ACTIVE_OBSERVE_LIMIT = 50
|
|
18
|
+
|
|
19
|
+
logger = logging.getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ObserveHandler(BaseActionHandler):
|
|
23
|
+
|
|
24
|
+
async def _recall_from_messages(
|
|
25
|
+
self,
|
|
26
|
+
channel_id: Optional[str],
|
|
27
|
+
messages: List[FetchedMessage],
|
|
28
|
+
) -> None:
|
|
29
|
+
recall_ids = set()
|
|
30
|
+
if channel_id:
|
|
31
|
+
recall_ids.add(f"channel/{channel_id}")
|
|
32
|
+
for msg in messages or []:
|
|
33
|
+
aid = msg.author_id if hasattr(msg, "author_id") else getattr(msg, "author_id", None)
|
|
34
|
+
if aid:
|
|
35
|
+
recall_ids.add(f"user/{aid}")
|
|
36
|
+
for rid in recall_ids:
|
|
37
|
+
for scope in (
|
|
38
|
+
GraphScope.IDENTITY,
|
|
39
|
+
GraphScope.ENVIRONMENT,
|
|
40
|
+
GraphScope.LOCAL,
|
|
41
|
+
):
|
|
42
|
+
try:
|
|
43
|
+
if rid.startswith("channel/"):
|
|
44
|
+
node_type = NodeType.CHANNEL
|
|
45
|
+
elif rid.startswith("user/"):
|
|
46
|
+
node_type = NodeType.USER
|
|
47
|
+
else:
|
|
48
|
+
node_type = NodeType.CONCEPT
|
|
49
|
+
|
|
50
|
+
from ciris_engine.schemas.services.operations import MemoryQuery
|
|
51
|
+
|
|
52
|
+
query = MemoryQuery(node_id=rid, scope=scope, type=node_type, include_edges=False, depth=1)
|
|
53
|
+
await self.bus_manager.memory.recall(recall_query=query, handler_name=self.__class__.__name__)
|
|
54
|
+
except Exception:
|
|
55
|
+
continue
|
|
56
|
+
|
|
57
|
+
async def handle(
|
|
58
|
+
self,
|
|
59
|
+
result: ActionSelectionDMAResult,
|
|
60
|
+
thought: Thought,
|
|
61
|
+
dispatch_context: DispatchContext,
|
|
62
|
+
) -> Optional[str]:
|
|
63
|
+
raw_params = result.action_parameters
|
|
64
|
+
thought_id = thought.thought_id
|
|
65
|
+
|
|
66
|
+
logger.info(f"ObserveHandler: Starting handle for thought {thought_id}")
|
|
67
|
+
logger.debug(f"ObserveHandler: Parameters: {raw_params}")
|
|
68
|
+
logger.debug(f"ObserveHandler: Dispatch context fields: {list(dispatch_context.__class__.model_fields.keys())}")
|
|
69
|
+
|
|
70
|
+
# NOTE: Audit logging removed - action_dispatcher handles centralized audit logging
|
|
71
|
+
|
|
72
|
+
final_status = ThoughtStatus.COMPLETED
|
|
73
|
+
action_performed = False
|
|
74
|
+
follow_up_info = f"OBSERVE action for thought {thought_id}"
|
|
75
|
+
|
|
76
|
+
try:
|
|
77
|
+
params: ObserveParams = self._validate_and_convert_params(raw_params, ObserveParams)
|
|
78
|
+
assert isinstance(params, ObserveParams) # Type assertion after validation
|
|
79
|
+
except Exception as e:
|
|
80
|
+
await self._handle_error(HandlerActionType.OBSERVE, dispatch_context, thought_id, e)
|
|
81
|
+
# Mark thought as failed and create error follow-up
|
|
82
|
+
return self.complete_thought_and_create_followup(
|
|
83
|
+
thought=thought, follow_up_content=f"OBSERVE action failed: {e}", action_result=result
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
# Always do active observation - agent should always create follow-up thoughts
|
|
87
|
+
# Force active=True regardless of input
|
|
88
|
+
params.active = True
|
|
89
|
+
|
|
90
|
+
# Get channel ID from params first (if LLM provided it)
|
|
91
|
+
channel_id = params.channel_id
|
|
92
|
+
|
|
93
|
+
# If no channel_id in params, try to get from channel_context
|
|
94
|
+
if not channel_id:
|
|
95
|
+
# Get channel context from params or dispatch
|
|
96
|
+
channel_context: Optional[ChannelContext] = params.channel_context or dispatch_context.channel_context
|
|
97
|
+
|
|
98
|
+
# Fallback to thought context if needed
|
|
99
|
+
if not channel_context and thought.context and hasattr(thought.context, "system_snapshot"):
|
|
100
|
+
channel_context = thought.context.system_snapshot.channel_context
|
|
101
|
+
|
|
102
|
+
# Update params with the resolved channel context
|
|
103
|
+
if channel_context:
|
|
104
|
+
params.channel_context = channel_context
|
|
105
|
+
|
|
106
|
+
# Extract channel ID for legacy API usage
|
|
107
|
+
channel_id = extract_channel_id(channel_context)
|
|
108
|
+
if channel_id and isinstance(channel_id, str) and channel_id.startswith("@"):
|
|
109
|
+
channel_id = None
|
|
110
|
+
|
|
111
|
+
# Use bus manager instead of getting services directly
|
|
112
|
+
logger.debug("ObserveHandler: Using bus manager for communication and memory operations")
|
|
113
|
+
|
|
114
|
+
try:
|
|
115
|
+
logger.info(f"ObserveHandler: Performing active observation for channel {channel_id}")
|
|
116
|
+
if not channel_id:
|
|
117
|
+
raise RuntimeError(f"No channel_id ({channel_id})")
|
|
118
|
+
messages = await self.bus_manager.communication.fetch_messages(
|
|
119
|
+
channel_id=str(channel_id).lstrip("#"), limit=ACTIVE_OBSERVE_LIMIT, handler_name=self.__class__.__name__
|
|
120
|
+
)
|
|
121
|
+
if messages is None:
|
|
122
|
+
raise RuntimeError("Failed to fetch messages via multi-service sink")
|
|
123
|
+
await self._recall_from_messages(channel_id, messages)
|
|
124
|
+
action_performed = True
|
|
125
|
+
follow_up_info = f"Fetched {len(messages)} messages from {channel_id}"
|
|
126
|
+
logger.info(f"ObserveHandler: Active observation complete - {follow_up_info}")
|
|
127
|
+
except Exception as e:
|
|
128
|
+
logger.exception(f"ObserveHandler error for {thought_id}: {e}")
|
|
129
|
+
final_status = ThoughtStatus.FAILED
|
|
130
|
+
follow_up_info = str(e)
|
|
131
|
+
|
|
132
|
+
# Create error follow-up and return immediately to avoid duplicate
|
|
133
|
+
error_follow_up = f"CIRIS_FOLLOW_UP_THOUGHT: OBSERVE action failed: {follow_up_info}"
|
|
134
|
+
return self.complete_thought_and_create_followup(
|
|
135
|
+
thought=thought, follow_up_content=error_follow_up, action_result=result, status=ThoughtStatus.FAILED
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
follow_up_text = (
|
|
139
|
+
f"CIRIS_FOLLOW_UP_THOUGHT: OBSERVE action completed. Info: {follow_up_info}"
|
|
140
|
+
if action_performed
|
|
141
|
+
else f"CIRIS_FOLLOW_UP_THOUGHT: OBSERVE action failed: {follow_up_info}"
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
# Use centralized method to complete thought and create follow-up
|
|
145
|
+
follow_up_id = self.complete_thought_and_create_followup(
|
|
146
|
+
thought=thought, follow_up_content=follow_up_text, action_result=result
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
if not follow_up_id:
|
|
150
|
+
logger.critical(f"Failed to create follow-up for {thought_id}")
|
|
151
|
+
# NOTE: Audit logging removed - action_dispatcher handles centralized audit logging
|
|
152
|
+
raise FollowUpCreationError("Failed to create follow-up thought")
|
|
153
|
+
|
|
154
|
+
return follow_up_id
|