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,920 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ThoughtProcessor: Core orchestration logic for H3ERE pipeline.
|
|
3
|
+
Main coordinator that executes the 7 phases of ethical reasoning.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import logging
|
|
7
|
+
from typing import Any, Callable, Dict, List, Optional, Tuple
|
|
8
|
+
|
|
9
|
+
from ciris_engine.logic import persistence
|
|
10
|
+
from ciris_engine.logic.config import ConfigAccessor
|
|
11
|
+
from ciris_engine.logic.dma.exceptions import DMAFailure
|
|
12
|
+
from ciris_engine.logic.handlers.control.ponder_handler import PonderHandler
|
|
13
|
+
from ciris_engine.logic.infrastructure.handlers.base_handler import ActionHandlerDependencies
|
|
14
|
+
from ciris_engine.logic.processors.support.processing_queue import ProcessingQueueItem
|
|
15
|
+
from ciris_engine.logic.registries.circuit_breaker import CircuitBreakerError
|
|
16
|
+
from ciris_engine.logic.utils.channel_utils import create_channel_context
|
|
17
|
+
from ciris_engine.logic.utils.jsondict_helpers import get_bool, get_dict
|
|
18
|
+
from ciris_engine.protocols.services.graph.telemetry import TelemetryServiceProtocol
|
|
19
|
+
from ciris_engine.protocols.services.lifecycle.time import TimeServiceProtocol
|
|
20
|
+
from ciris_engine.schemas.actions.parameters import DeferParams, PonderParams
|
|
21
|
+
from ciris_engine.schemas.conscience.context import ConscienceCheckContext
|
|
22
|
+
from ciris_engine.schemas.conscience.core import EpistemicData
|
|
23
|
+
from ciris_engine.schemas.dma.results import ActionSelectionDMAResult
|
|
24
|
+
from ciris_engine.schemas.processors.core import (
|
|
25
|
+
ConscienceApplicationResult,
|
|
26
|
+
ConscienceCheckInternalResult,
|
|
27
|
+
SingleConscienceCheckResult,
|
|
28
|
+
)
|
|
29
|
+
from ciris_engine.schemas.runtime.enums import HandlerActionType
|
|
30
|
+
from ciris_engine.schemas.runtime.models import Thought
|
|
31
|
+
from ciris_engine.schemas.telemetry.core import (
|
|
32
|
+
CorrelationType,
|
|
33
|
+
ServiceCorrelation,
|
|
34
|
+
ServiceCorrelationStatus,
|
|
35
|
+
TraceContext,
|
|
36
|
+
)
|
|
37
|
+
from ciris_engine.schemas.types import JSONDict
|
|
38
|
+
|
|
39
|
+
from .action_execution import ActionExecutionPhase
|
|
40
|
+
from .conscience_execution import ConscienceExecutionPhase
|
|
41
|
+
from .finalize_action import ActionFinalizationPhase
|
|
42
|
+
from .gather_context import ContextGatheringPhase
|
|
43
|
+
from .perform_aspdma import ActionSelectionPhase
|
|
44
|
+
from .perform_dmas import DMAExecutionPhase
|
|
45
|
+
from .recursive_processing import RecursiveProcessingPhase
|
|
46
|
+
from .round_complete import RoundCompletePhase
|
|
47
|
+
|
|
48
|
+
# Import phase mixins
|
|
49
|
+
from .start_round import RoundInitializationPhase
|
|
50
|
+
|
|
51
|
+
logger = logging.getLogger(__name__)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class ThoughtProcessor(
|
|
55
|
+
RoundInitializationPhase,
|
|
56
|
+
ContextGatheringPhase,
|
|
57
|
+
DMAExecutionPhase,
|
|
58
|
+
ActionSelectionPhase,
|
|
59
|
+
ConscienceExecutionPhase,
|
|
60
|
+
RecursiveProcessingPhase,
|
|
61
|
+
ActionFinalizationPhase,
|
|
62
|
+
ActionExecutionPhase,
|
|
63
|
+
RoundCompletePhase,
|
|
64
|
+
):
|
|
65
|
+
"""
|
|
66
|
+
Main orchestrator for the H3ERE (Hyper3 Ethical Recursive Engine) pipeline.
|
|
67
|
+
|
|
68
|
+
Inherits phase-specific methods from mixin classes and coordinates
|
|
69
|
+
the 7-step ethical reasoning process:
|
|
70
|
+
1. GATHER_CONTEXT - Build processing context
|
|
71
|
+
2. PERFORM_DMAS - Multi-perspective analysis
|
|
72
|
+
3. PERFORM_ASPDMA - Action selection
|
|
73
|
+
4. CONSCIENCE_EXECUTION - Ethical validation
|
|
74
|
+
5. RECURSIVE_* - Retry logic (optional)
|
|
75
|
+
6. FINALIZE_ACTION - Final action determination
|
|
76
|
+
7. ACTION_* - Action dispatch and completion
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
def __init__(
|
|
80
|
+
self,
|
|
81
|
+
dma_orchestrator: Any,
|
|
82
|
+
context_builder: Any,
|
|
83
|
+
conscience_registry: Any,
|
|
84
|
+
app_config: ConfigAccessor,
|
|
85
|
+
dependencies: ActionHandlerDependencies,
|
|
86
|
+
time_service: TimeServiceProtocol,
|
|
87
|
+
telemetry_service: Optional[TelemetryServiceProtocol] = None,
|
|
88
|
+
auth_service: Optional[Any] = None,
|
|
89
|
+
) -> None:
|
|
90
|
+
self.dma_orchestrator = dma_orchestrator
|
|
91
|
+
self.context_builder = context_builder
|
|
92
|
+
self.conscience_registry = conscience_registry
|
|
93
|
+
self.app_config = app_config
|
|
94
|
+
self.dependencies = dependencies
|
|
95
|
+
self._time_service = time_service
|
|
96
|
+
self.telemetry_service = telemetry_service
|
|
97
|
+
self.auth_service = auth_service
|
|
98
|
+
self._pipeline_controller = None # Will be deprecated
|
|
99
|
+
|
|
100
|
+
async def process_thought(
|
|
101
|
+
self, thought_item: ProcessingQueueItem, context: Optional[JSONDict] = None
|
|
102
|
+
) -> Optional[ActionSelectionDMAResult]:
|
|
103
|
+
"""
|
|
104
|
+
Main H3ERE pipeline orchestration.
|
|
105
|
+
|
|
106
|
+
Executes all 7 phases using decorated step methods that handle
|
|
107
|
+
streaming and single-step pause/resume automatically.
|
|
108
|
+
"""
|
|
109
|
+
logger.info(
|
|
110
|
+
f"ThoughtProcessor.process_thought: ENTRY - thought_id={thought_item.thought_id}, context={'present' if context else 'None'}"
|
|
111
|
+
)
|
|
112
|
+
start_time = self._time_service.now()
|
|
113
|
+
|
|
114
|
+
# Initialize correlation for tracking
|
|
115
|
+
correlation = self._initialize_correlation(thought_item, start_time)
|
|
116
|
+
|
|
117
|
+
# Fetch and validate thought
|
|
118
|
+
thought = await self._fetch_and_validate_thought(thought_item)
|
|
119
|
+
if not thought:
|
|
120
|
+
return None
|
|
121
|
+
|
|
122
|
+
# Execute pipeline phases
|
|
123
|
+
pipeline_result = await self._execute_pipeline_phases(thought_item, thought, context, correlation, start_time)
|
|
124
|
+
|
|
125
|
+
# Record completion and finalize
|
|
126
|
+
await self._record_processing_completion(thought, pipeline_result)
|
|
127
|
+
await self._finalize_correlation(correlation, pipeline_result, start_time)
|
|
128
|
+
|
|
129
|
+
# Complete the round
|
|
130
|
+
final_result = await self._round_complete_step(thought_item, pipeline_result)
|
|
131
|
+
# _round_complete_step returns the same type as pipeline_result (ConscienceApplicationResult or ActionSelectionDMAResult)
|
|
132
|
+
return final_result # type: ignore[no-any-return]
|
|
133
|
+
|
|
134
|
+
def _initialize_correlation(self, thought_item: ProcessingQueueItem, start_time: Any) -> ServiceCorrelation:
|
|
135
|
+
"""Initialize correlation tracking for the thought processing."""
|
|
136
|
+
correlation = ServiceCorrelation(
|
|
137
|
+
correlation_id=f"thought_processing_{thought_item.thought_id}_{start_time.timestamp()}",
|
|
138
|
+
correlation_type=CorrelationType.SERVICE_INTERACTION,
|
|
139
|
+
service_type="ThoughtProcessor",
|
|
140
|
+
handler_name="process_thought",
|
|
141
|
+
action_type="PROCESS_THOUGHT",
|
|
142
|
+
created_at=start_time,
|
|
143
|
+
updated_at=start_time,
|
|
144
|
+
timestamp=start_time,
|
|
145
|
+
)
|
|
146
|
+
persistence.add_correlation(correlation, self._time_service)
|
|
147
|
+
return correlation
|
|
148
|
+
|
|
149
|
+
async def _fetch_and_validate_thought(self, thought_item: ProcessingQueueItem) -> Optional[Thought]:
|
|
150
|
+
"""Fetch and validate thought exists."""
|
|
151
|
+
logger.info(f"ThoughtProcessor.process_thought: About to fetch thought_id={thought_item.thought_id}")
|
|
152
|
+
thought = await self._fetch_thought(thought_item.thought_id, thought_item.agent_occurrence_id)
|
|
153
|
+
logger.info(
|
|
154
|
+
f"ThoughtProcessor.process_thought: Fetch completed for thought_id={thought_item.thought_id}, result={'present' if thought else 'None'}"
|
|
155
|
+
)
|
|
156
|
+
if not thought:
|
|
157
|
+
logger.warning(f"ThoughtProcessor: Could not fetch thought {thought_item.thought_id}")
|
|
158
|
+
return thought
|
|
159
|
+
|
|
160
|
+
async def _execute_pipeline_phases(
|
|
161
|
+
self,
|
|
162
|
+
thought_item: ProcessingQueueItem,
|
|
163
|
+
thought: Thought,
|
|
164
|
+
context: Optional[JSONDict],
|
|
165
|
+
correlation: ServiceCorrelation,
|
|
166
|
+
start_time: Any,
|
|
167
|
+
) -> ConscienceApplicationResult:
|
|
168
|
+
"""Execute the main H3ERE pipeline phases."""
|
|
169
|
+
# Phase 0: Initialize processing round
|
|
170
|
+
await self._start_round_step(thought_item, context)
|
|
171
|
+
|
|
172
|
+
# Phase 1: Gather context
|
|
173
|
+
thought_context = await self._gather_context_step(thought_item, context)
|
|
174
|
+
|
|
175
|
+
# Phase 2: DMA analysis
|
|
176
|
+
dma_results = await self._perform_dmas_step(thought_item, thought_context)
|
|
177
|
+
|
|
178
|
+
# Check for early DMA result return
|
|
179
|
+
if isinstance(dma_results, ActionSelectionDMAResult):
|
|
180
|
+
logger.info(
|
|
181
|
+
f"DMA step returned ActionSelectionDMAResult for thought {thought_item.thought_id}: {dma_results.selected_action}"
|
|
182
|
+
)
|
|
183
|
+
# Wrap in ConscienceApplicationResult before returning
|
|
184
|
+
return ConscienceApplicationResult(
|
|
185
|
+
original_action=dma_results,
|
|
186
|
+
final_action=dma_results,
|
|
187
|
+
overridden=False,
|
|
188
|
+
override_reason=None,
|
|
189
|
+
epistemic_data=EpistemicData(
|
|
190
|
+
entropy_level=0.0, # Exempt action - no uncertainty
|
|
191
|
+
coherence_level=1.0, # Fully coherent
|
|
192
|
+
uncertainty_acknowledged=True, # System knows this is exempt
|
|
193
|
+
reasoning_transparency=1.0, # Fully transparent (DEFER/REJECT)
|
|
194
|
+
),
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
# Check for critical failures
|
|
198
|
+
if self._has_critical_failure(dma_results):
|
|
199
|
+
await self._handle_critical_failure(correlation, start_time)
|
|
200
|
+
deferral_result = self._create_deferral_result(dma_results, thought)
|
|
201
|
+
# Wrap in ConscienceApplicationResult before returning
|
|
202
|
+
return ConscienceApplicationResult(
|
|
203
|
+
original_action=deferral_result,
|
|
204
|
+
final_action=deferral_result,
|
|
205
|
+
overridden=False,
|
|
206
|
+
override_reason=None,
|
|
207
|
+
epistemic_data=EpistemicData(
|
|
208
|
+
entropy_level=1.0, # Maximum uncertainty due to failure
|
|
209
|
+
coherence_level=0.0, # No coherence - system failed
|
|
210
|
+
uncertainty_acknowledged=True, # System knows failure occurred
|
|
211
|
+
reasoning_transparency=1.0, # Transparent about failure
|
|
212
|
+
),
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
# Phase 3: Action selection
|
|
216
|
+
action_result_dict = await self._perform_action_selection_phase(
|
|
217
|
+
thought_item, thought, thought_context, dma_results
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
# Phase 4: Finalize action
|
|
221
|
+
# conscience_result is already a ConscienceApplicationResult object, not a dict
|
|
222
|
+
conscience_result_raw = action_result_dict.get("conscience_result")
|
|
223
|
+
# Type assertion: we know this is ConscienceApplicationResult from _perform_action_selection_phase
|
|
224
|
+
conscience_result: Optional[ConscienceApplicationResult] = (
|
|
225
|
+
conscience_result_raw if isinstance(conscience_result_raw, ConscienceApplicationResult) else None
|
|
226
|
+
)
|
|
227
|
+
action_from_conscience = self._handle_special_cases(conscience_result)
|
|
228
|
+
final_result = await self._finalize_action_step(thought_item, action_from_conscience)
|
|
229
|
+
|
|
230
|
+
# _finalize_action_step returns ConscienceApplicationResult based on conscience_result input
|
|
231
|
+
return final_result # type: ignore[no-any-return]
|
|
232
|
+
|
|
233
|
+
async def _perform_action_selection_phase(
|
|
234
|
+
self, thought_item: ProcessingQueueItem, thought: Thought, thought_context: Any, dma_results: Any
|
|
235
|
+
) -> JSONDict:
|
|
236
|
+
"""Execute action selection and conscience validation phases."""
|
|
237
|
+
# Phase 4: PERFORM_ASPDMA - LLM-powered action selection
|
|
238
|
+
action_result = await self._perform_aspdma_step(thought_item, thought_context, dma_results)
|
|
239
|
+
profile_name = self._get_profile_name(thought)
|
|
240
|
+
|
|
241
|
+
self._log_action_selection_result(action_result, thought)
|
|
242
|
+
|
|
243
|
+
# Phase 5: CONSCIENCE_EXECUTION - Apply ethical safety validation
|
|
244
|
+
conscience_result = await self._conscience_execution_step(
|
|
245
|
+
thought_item, action_result, thought, dma_results, thought_context
|
|
246
|
+
)
|
|
247
|
+
|
|
248
|
+
# Phase 6: Handle conscience overrides (retry logic)
|
|
249
|
+
if self._should_retry_with_conscience_guidance(conscience_result):
|
|
250
|
+
action_result, conscience_result = await self._handle_conscience_retry(
|
|
251
|
+
thought_item, thought, thought_context, dma_results, conscience_result, profile_name
|
|
252
|
+
)
|
|
253
|
+
|
|
254
|
+
self._log_final_action_results(action_result, conscience_result, thought)
|
|
255
|
+
|
|
256
|
+
return {"action_result": action_result, "conscience_result": conscience_result}
|
|
257
|
+
|
|
258
|
+
def _log_action_selection_result(self, action_result: Any, thought: Thought) -> None:
|
|
259
|
+
"""Log action selection results."""
|
|
260
|
+
if action_result:
|
|
261
|
+
selected_action = getattr(action_result, "selected_action", "UNKNOWN")
|
|
262
|
+
logger.info(f"ThoughtProcessor: Action selection result for {thought.thought_id}: {selected_action}")
|
|
263
|
+
|
|
264
|
+
if selected_action == HandlerActionType.OBSERVE:
|
|
265
|
+
logger.warning(
|
|
266
|
+
f"OBSERVE ACTION DEBUG: ThoughtProcessor received OBSERVE action for thought {thought.thought_id}"
|
|
267
|
+
)
|
|
268
|
+
else:
|
|
269
|
+
logger.error(f"ThoughtProcessor: No action result for thought {thought.thought_id}")
|
|
270
|
+
|
|
271
|
+
def _should_retry_with_conscience_guidance(self, conscience_result: Optional[ConscienceApplicationResult]) -> bool:
|
|
272
|
+
"""Check if we should retry action selection with conscience guidance."""
|
|
273
|
+
return (
|
|
274
|
+
conscience_result is not None
|
|
275
|
+
and conscience_result.overridden
|
|
276
|
+
and conscience_result.final_action.selected_action == HandlerActionType.PONDER
|
|
277
|
+
)
|
|
278
|
+
|
|
279
|
+
async def _handle_conscience_retry(
|
|
280
|
+
self,
|
|
281
|
+
thought_item: ProcessingQueueItem,
|
|
282
|
+
thought: Thought,
|
|
283
|
+
thought_context: Any,
|
|
284
|
+
dma_results: Any,
|
|
285
|
+
conscience_result: ConscienceApplicationResult,
|
|
286
|
+
profile_name: str,
|
|
287
|
+
) -> Tuple[Any, ConscienceApplicationResult]:
|
|
288
|
+
"""Handle conscience retry logic when PONDER override occurs."""
|
|
289
|
+
logger.info(
|
|
290
|
+
f"ThoughtProcessor: conscience override to PONDER for {thought.thought_id}. Attempting re-run with guidance."
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
# Prepare retry context
|
|
294
|
+
retry_context = self._prepare_conscience_retry_context(thought_item, thought_context, conscience_result)
|
|
295
|
+
|
|
296
|
+
try:
|
|
297
|
+
# Attempt retry
|
|
298
|
+
retry_result = await self.dma_orchestrator.run_action_selection(
|
|
299
|
+
thought_item=thought_item,
|
|
300
|
+
actual_thought=thought,
|
|
301
|
+
processing_context=retry_context,
|
|
302
|
+
dma_results=dma_results,
|
|
303
|
+
profile_name=profile_name,
|
|
304
|
+
)
|
|
305
|
+
|
|
306
|
+
if retry_result:
|
|
307
|
+
return await self._process_conscience_retry_result(
|
|
308
|
+
thought_item, thought, dma_results, retry_context, retry_result, conscience_result
|
|
309
|
+
)
|
|
310
|
+
else:
|
|
311
|
+
logger.info("ThoughtProcessor: Retry failed to produce a result, proceeding with PONDER")
|
|
312
|
+
|
|
313
|
+
except Exception as e:
|
|
314
|
+
logger.error(f"Error during action selection retry: {e}", exc_info=True)
|
|
315
|
+
|
|
316
|
+
return conscience_result.original_action, conscience_result
|
|
317
|
+
|
|
318
|
+
def _prepare_conscience_retry_context(
|
|
319
|
+
self, thought_item: ProcessingQueueItem, thought_context: Any, conscience_result: ConscienceApplicationResult
|
|
320
|
+
) -> Any:
|
|
321
|
+
"""Prepare context for conscience retry."""
|
|
322
|
+
override_reason = conscience_result.override_reason or "Action failed conscience checks"
|
|
323
|
+
attempted_action = self._describe_action(conscience_result.original_action)
|
|
324
|
+
|
|
325
|
+
# Log what we received from conscience
|
|
326
|
+
logger.info(f"[CONSCIENCE_RETRY] Preparing retry context for thought {thought_item.thought_id}")
|
|
327
|
+
logger.info(f"[CONSCIENCE_RETRY] Override reason: {override_reason[:200]}...")
|
|
328
|
+
logger.info(f"[CONSCIENCE_RETRY] Original action was: {attempted_action}")
|
|
329
|
+
|
|
330
|
+
# Check if this is an updated status override (new observation arrived)
|
|
331
|
+
# The conscience result may have CIRIS_OBSERVATION_UPDATED_STATUS with the new message
|
|
332
|
+
updated_observation = None
|
|
333
|
+
if hasattr(conscience_result, "epistemic_data") and conscience_result.epistemic_data:
|
|
334
|
+
# Check epistemic_data for updated status
|
|
335
|
+
ep_data = conscience_result.epistemic_data
|
|
336
|
+
if hasattr(ep_data, "CIRIS_OBSERVATION_UPDATED_STATUS"):
|
|
337
|
+
updated_observation = ep_data.CIRIS_OBSERVATION_UPDATED_STATUS
|
|
338
|
+
if updated_observation:
|
|
339
|
+
logger.info(
|
|
340
|
+
f"[CONSCIENCE_RETRY] Found CIRIS_OBSERVATION_UPDATED_STATUS in epistemic_data: {updated_observation[:100]}..."
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
# Also check the final_action's parameters for the new observation
|
|
344
|
+
if conscience_result.final_action and hasattr(conscience_result.final_action, "action_parameters"):
|
|
345
|
+
params = conscience_result.final_action.action_parameters
|
|
346
|
+
if params and hasattr(params, "questions"):
|
|
347
|
+
logger.info(f"[CONSCIENCE_RETRY] PONDER questions from conscience: {params.questions}")
|
|
348
|
+
|
|
349
|
+
# Create enhanced context with conscience feedback
|
|
350
|
+
retry_context = thought_context
|
|
351
|
+
if hasattr(thought_context, "model_copy"):
|
|
352
|
+
retry_context = thought_context.model_copy()
|
|
353
|
+
retry_context.is_conscience_retry = True
|
|
354
|
+
elif isinstance(thought_context, dict):
|
|
355
|
+
retry_context = thought_context.copy()
|
|
356
|
+
retry_context["is_conscience_retry"] = True
|
|
357
|
+
elif hasattr(retry_context, "is_conscience_retry"):
|
|
358
|
+
retry_context.is_conscience_retry = True
|
|
359
|
+
|
|
360
|
+
# Build retry guidance - CRITICAL: Include the new observation if present
|
|
361
|
+
base_guidance = (
|
|
362
|
+
f"Your previous attempt to {attempted_action} was rejected because: {override_reason}. "
|
|
363
|
+
"Please select a DIFFERENT action that better aligns with ethical principles and safety guidelines. "
|
|
364
|
+
)
|
|
365
|
+
|
|
366
|
+
if updated_observation:
|
|
367
|
+
# This is the key fix - include the new observation in the retry guidance
|
|
368
|
+
retry_guidance = (
|
|
369
|
+
f"IMPORTANT: A NEW MESSAGE arrived from the user while you were processing: '{updated_observation}'. "
|
|
370
|
+
f"You must now respond to THIS new message, not complete the old task. "
|
|
371
|
+
f"{base_guidance}"
|
|
372
|
+
"The user is waiting for a response to their new message. Use SPEAK to respond or use a TOOL if needed."
|
|
373
|
+
)
|
|
374
|
+
logger.info(f"[CONSCIENCE_RETRY] Including new observation in retry_guidance")
|
|
375
|
+
else:
|
|
376
|
+
retry_guidance = (
|
|
377
|
+
f"{base_guidance}"
|
|
378
|
+
"Consider: Is there a more cautious approach? Should you gather more information first? "
|
|
379
|
+
"Can this task be marked as complete without further action? "
|
|
380
|
+
"Remember: DEFER only if the task MUST be done AND requires human approval."
|
|
381
|
+
)
|
|
382
|
+
|
|
383
|
+
# Add conscience guidance to the thought item
|
|
384
|
+
conscience_feedback = {
|
|
385
|
+
"failed_action": attempted_action,
|
|
386
|
+
"failure_reason": override_reason,
|
|
387
|
+
"retry_guidance": retry_guidance,
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
# If there's a new observation, add it explicitly to the feedback
|
|
391
|
+
if updated_observation:
|
|
392
|
+
conscience_feedback["new_observation"] = updated_observation
|
|
393
|
+
conscience_feedback["updated_status_detected"] = "true"
|
|
394
|
+
|
|
395
|
+
setattr(thought_item, "conscience_feedback", conscience_feedback)
|
|
396
|
+
|
|
397
|
+
logger.info(f"[CONSCIENCE_RETRY] Set conscience_feedback with keys: {list(conscience_feedback.keys())}")
|
|
398
|
+
logger.info(f"[CONSCIENCE_RETRY] retry_guidance preview: {retry_guidance[:150]}...")
|
|
399
|
+
|
|
400
|
+
return retry_context
|
|
401
|
+
|
|
402
|
+
async def _process_conscience_retry_result(
|
|
403
|
+
self,
|
|
404
|
+
thought_item: ProcessingQueueItem,
|
|
405
|
+
thought: Thought,
|
|
406
|
+
dma_results: Any,
|
|
407
|
+
retry_context: Any,
|
|
408
|
+
retry_result: Any,
|
|
409
|
+
original_conscience_result: ConscienceApplicationResult,
|
|
410
|
+
) -> Tuple[Any, ConscienceApplicationResult]:
|
|
411
|
+
"""Process the result of a conscience retry."""
|
|
412
|
+
logger.info(f"ThoughtProcessor: Re-running consciences on retry action {retry_result.selected_action}")
|
|
413
|
+
|
|
414
|
+
retry_conscience_result = await self._conscience_execution_step(
|
|
415
|
+
thought_item, retry_result, thought, dma_results, retry_context
|
|
416
|
+
)
|
|
417
|
+
|
|
418
|
+
if not retry_conscience_result.overridden:
|
|
419
|
+
logger.info(f"ThoughtProcessor: Retry action {retry_result.selected_action} passed consciences")
|
|
420
|
+
return retry_result, retry_conscience_result
|
|
421
|
+
else:
|
|
422
|
+
self._log_retry_failure(retry_result, original_conscience_result)
|
|
423
|
+
return original_conscience_result.original_action, original_conscience_result
|
|
424
|
+
|
|
425
|
+
def _log_retry_failure(self, retry_result: Any, original_conscience_result: ConscienceApplicationResult) -> None:
|
|
426
|
+
"""Log details when retry also fails consciences."""
|
|
427
|
+
logger.info(f"ThoughtProcessor: Retry action {retry_result.selected_action} also failed consciences")
|
|
428
|
+
if retry_result.selected_action == original_conscience_result.original_action.selected_action:
|
|
429
|
+
logger.info("ThoughtProcessor: Same action type but with different parameters still failed")
|
|
430
|
+
logger.info("ThoughtProcessor: Proceeding with PONDER")
|
|
431
|
+
|
|
432
|
+
def _log_final_action_results(
|
|
433
|
+
self, action_result: Any, conscience_result: Optional[ConscienceApplicationResult], thought: Thought
|
|
434
|
+
) -> None:
|
|
435
|
+
"""Log final action and conscience results."""
|
|
436
|
+
if action_result.selected_action == HandlerActionType.OBSERVE:
|
|
437
|
+
logger.debug("ThoughtProcessor: OBSERVE action after consciences for thought %s", thought.thought_id)
|
|
438
|
+
|
|
439
|
+
if conscience_result:
|
|
440
|
+
if hasattr(conscience_result, "final_action") and conscience_result.final_action:
|
|
441
|
+
final_action = getattr(conscience_result.final_action, "selected_action", "UNKNOWN")
|
|
442
|
+
logger.info(
|
|
443
|
+
f"ThoughtProcessor: conscience result for {thought.thought_id}: final_action={final_action}"
|
|
444
|
+
)
|
|
445
|
+
|
|
446
|
+
async def _handle_critical_failure(self, correlation: ServiceCorrelation, start_time: Any) -> None:
|
|
447
|
+
"""Handle critical DMA failure."""
|
|
448
|
+
end_time = self._time_service.now()
|
|
449
|
+
from ciris_engine.schemas.persistence.core import CorrelationUpdateRequest
|
|
450
|
+
|
|
451
|
+
update_req = CorrelationUpdateRequest(
|
|
452
|
+
correlation_id=correlation.correlation_id,
|
|
453
|
+
response_data={
|
|
454
|
+
"success": "false",
|
|
455
|
+
"error_message": "Critical DMA failure",
|
|
456
|
+
"execution_time_ms": str((end_time - start_time).total_seconds() * 1000),
|
|
457
|
+
"response_timestamp": end_time.isoformat(),
|
|
458
|
+
},
|
|
459
|
+
status=ServiceCorrelationStatus.FAILED,
|
|
460
|
+
metric_value=None,
|
|
461
|
+
tags=None,
|
|
462
|
+
)
|
|
463
|
+
persistence.update_correlation(update_req, self._time_service)
|
|
464
|
+
|
|
465
|
+
async def _record_processing_completion(
|
|
466
|
+
self, thought: Thought, final_result: Optional[ConscienceApplicationResult]
|
|
467
|
+
) -> None:
|
|
468
|
+
"""Record telemetry for successful processing completion."""
|
|
469
|
+
if not self.telemetry_service:
|
|
470
|
+
return
|
|
471
|
+
|
|
472
|
+
await self.telemetry_service.record_metric(
|
|
473
|
+
"thought_processing_completed",
|
|
474
|
+
value=1.0,
|
|
475
|
+
tags={"thought_id": thought.thought_id, "path_type": "hot", "source_module": "thought_processor"},
|
|
476
|
+
)
|
|
477
|
+
|
|
478
|
+
if final_result:
|
|
479
|
+
action_metric = f"action_selected_{final_result.final_action.selected_action.value}"
|
|
480
|
+
await self.telemetry_service.record_metric(
|
|
481
|
+
action_metric,
|
|
482
|
+
value=1.0,
|
|
483
|
+
tags={
|
|
484
|
+
"thought_id": thought.thought_id,
|
|
485
|
+
"action": final_result.final_action.selected_action.value,
|
|
486
|
+
"path_type": "hot",
|
|
487
|
+
"source_module": "thought_processor",
|
|
488
|
+
},
|
|
489
|
+
)
|
|
490
|
+
|
|
491
|
+
async def _finalize_correlation(
|
|
492
|
+
self, correlation: ServiceCorrelation, final_result: Optional[ConscienceApplicationResult], start_time: Any
|
|
493
|
+
) -> None:
|
|
494
|
+
"""Update correlation with final success status."""
|
|
495
|
+
end_time = self._time_service.now()
|
|
496
|
+
from ciris_engine.schemas.persistence.core import CorrelationUpdateRequest
|
|
497
|
+
|
|
498
|
+
update_req = CorrelationUpdateRequest(
|
|
499
|
+
correlation_id=correlation.correlation_id,
|
|
500
|
+
response_data={
|
|
501
|
+
"success": "true",
|
|
502
|
+
"result_summary": f"Successfully processed thought with action: {final_result.final_action.selected_action if final_result else 'none'}",
|
|
503
|
+
"execution_time_ms": str((end_time - start_time).total_seconds() * 1000),
|
|
504
|
+
"response_timestamp": end_time.isoformat(),
|
|
505
|
+
},
|
|
506
|
+
status=ServiceCorrelationStatus.COMPLETED,
|
|
507
|
+
metric_value=None,
|
|
508
|
+
tags=None,
|
|
509
|
+
)
|
|
510
|
+
persistence.update_correlation(update_req, self._time_service)
|
|
511
|
+
|
|
512
|
+
# Helper methods that will remain in main.py
|
|
513
|
+
async def _fetch_thought(self, thought_id: str, occurrence_id: str = "default") -> Optional[Thought]:
|
|
514
|
+
"""Fetch thought from persistence layer."""
|
|
515
|
+
import asyncio
|
|
516
|
+
|
|
517
|
+
from ciris_engine.logic import persistence
|
|
518
|
+
|
|
519
|
+
logger.info(
|
|
520
|
+
f"ThoughtProcessor._fetch_thought: Starting fetch for thought_id={thought_id}, occurrence_id={occurrence_id}"
|
|
521
|
+
)
|
|
522
|
+
|
|
523
|
+
try:
|
|
524
|
+
# Add timeout protection to prevent CI hangs
|
|
525
|
+
thought = await asyncio.wait_for(
|
|
526
|
+
persistence.async_get_thought_by_id(thought_id, occurrence_id), timeout=30.0 # 30 second timeout
|
|
527
|
+
)
|
|
528
|
+
logger.info(
|
|
529
|
+
f"ThoughtProcessor._fetch_thought: Successfully fetched thought_id={thought_id}, occurrence_id={occurrence_id}, thought={'present' if thought else 'None'}"
|
|
530
|
+
)
|
|
531
|
+
return thought
|
|
532
|
+
except asyncio.TimeoutError:
|
|
533
|
+
logger.error(
|
|
534
|
+
f"ThoughtProcessor._fetch_thought: TIMEOUT after 30s fetching thought_id={thought_id}, occurrence_id={occurrence_id}"
|
|
535
|
+
)
|
|
536
|
+
raise
|
|
537
|
+
except Exception as e:
|
|
538
|
+
logger.error(
|
|
539
|
+
f"ThoughtProcessor._fetch_thought: ERROR fetching thought_id={thought_id}: {type(e).__name__}: {e}"
|
|
540
|
+
)
|
|
541
|
+
raise
|
|
542
|
+
|
|
543
|
+
def _has_critical_failure(self, dma_results: Any) -> bool:
|
|
544
|
+
"""Check if DMA results indicate critical failure requiring escalation."""
|
|
545
|
+
if not dma_results:
|
|
546
|
+
return True
|
|
547
|
+
|
|
548
|
+
# Check for specific failure indicators
|
|
549
|
+
if hasattr(dma_results, "critical_failure") and dma_results.critical_failure:
|
|
550
|
+
return True
|
|
551
|
+
|
|
552
|
+
return False
|
|
553
|
+
|
|
554
|
+
def _create_deferral_result(self, dma_results: Any, thought: Thought) -> ActionSelectionDMAResult:
|
|
555
|
+
"""Create a deferral result for failed processing."""
|
|
556
|
+
defer_reason = "Critical DMA failure or conscience override."
|
|
557
|
+
# Convert dma_results to string representation for context
|
|
558
|
+
dma_results_str = str(dma_results) if not isinstance(dma_results, str) else dma_results
|
|
559
|
+
defer_params = DeferParams(
|
|
560
|
+
reason=defer_reason,
|
|
561
|
+
context={
|
|
562
|
+
"original_thought_id": thought.thought_id,
|
|
563
|
+
"dma_results_summary": dma_results_str,
|
|
564
|
+
},
|
|
565
|
+
defer_until=None,
|
|
566
|
+
)
|
|
567
|
+
|
|
568
|
+
return ActionSelectionDMAResult(
|
|
569
|
+
selected_action=HandlerActionType.DEFER,
|
|
570
|
+
action_parameters=defer_params,
|
|
571
|
+
rationale=defer_reason,
|
|
572
|
+
raw_llm_response=None,
|
|
573
|
+
reasoning=None,
|
|
574
|
+
evaluation_time_ms=None,
|
|
575
|
+
resource_usage=None,
|
|
576
|
+
)
|
|
577
|
+
|
|
578
|
+
def _get_profile_name(self, thought: Thought) -> str:
|
|
579
|
+
"""Extract profile name from thought context or use default."""
|
|
580
|
+
profile_name = None
|
|
581
|
+
if thought and hasattr(thought, "context") and thought.context:
|
|
582
|
+
context = thought.context
|
|
583
|
+
if hasattr(context, "agent_profile_name"):
|
|
584
|
+
profile_name = context.agent_profile_name
|
|
585
|
+
if not profile_name and hasattr(self.app_config, "agent_profiles"):
|
|
586
|
+
for name, profile in self.app_config.agent_profiles.items():
|
|
587
|
+
if name != "default" and profile:
|
|
588
|
+
profile_name = name
|
|
589
|
+
break
|
|
590
|
+
if not profile_name and hasattr(self.app_config, "default_profile"):
|
|
591
|
+
profile_name = self.app_config.default_profile
|
|
592
|
+
if not profile_name:
|
|
593
|
+
profile_name = "default"
|
|
594
|
+
# CRITICAL: Defensive logging - thought can be None in some error paths
|
|
595
|
+
thought_id = thought.thought_id if thought else "unknown"
|
|
596
|
+
logger.debug(f"Determined profile name '{profile_name}' for thought {thought_id}")
|
|
597
|
+
return profile_name
|
|
598
|
+
|
|
599
|
+
def _describe_action(self, action_result: Any) -> str:
|
|
600
|
+
"""Generate a human-readable description of an action."""
|
|
601
|
+
if not hasattr(action_result, "selected_action"):
|
|
602
|
+
return "unknown action"
|
|
603
|
+
|
|
604
|
+
action_type = action_result.selected_action
|
|
605
|
+
params = action_result.action_parameters
|
|
606
|
+
|
|
607
|
+
descriptions: Dict[HandlerActionType, Callable[[Any], str]] = {
|
|
608
|
+
HandlerActionType.SPEAK: lambda p: self._format_speak_description(p),
|
|
609
|
+
HandlerActionType.TOOL: lambda p: f"use tool '{p.tool_name}'" if hasattr(p, "tool_name") else "use a tool",
|
|
610
|
+
HandlerActionType.OBSERVE: lambda p: (
|
|
611
|
+
f"observe channel '{p.channel_id}'" if hasattr(p, "channel_id") else "observe"
|
|
612
|
+
),
|
|
613
|
+
HandlerActionType.MEMORIZE: lambda p: "memorize information",
|
|
614
|
+
HandlerActionType.RECALL: lambda p: "recall information",
|
|
615
|
+
HandlerActionType.FORGET: lambda p: "forget information",
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
desc_func: Callable[[Any], str] = descriptions.get(action_type, lambda p: str(action_type.value))
|
|
619
|
+
try:
|
|
620
|
+
result = desc_func(params)
|
|
621
|
+
return str(result)
|
|
622
|
+
except Exception as e:
|
|
623
|
+
logger.warning(
|
|
624
|
+
f"Failed to generate action description for {action_type.value}: {e}. Using default description."
|
|
625
|
+
)
|
|
626
|
+
return str(action_type.value)
|
|
627
|
+
|
|
628
|
+
async def _apply_conscience_simple(
|
|
629
|
+
self,
|
|
630
|
+
action_result: ActionSelectionDMAResult,
|
|
631
|
+
thought: Thought,
|
|
632
|
+
dma_results_dict: JSONDict,
|
|
633
|
+
processing_context: Optional[Any] = None,
|
|
634
|
+
) -> ConscienceApplicationResult:
|
|
635
|
+
"""Simple conscience application without orchestrator."""
|
|
636
|
+
is_conscience_retry = self._check_and_clear_conscience_retry_flag(processing_context)
|
|
637
|
+
|
|
638
|
+
# Create typed context for conscience checks (needed for both bypass and normal)
|
|
639
|
+
context = ConscienceCheckContext(
|
|
640
|
+
thought=thought,
|
|
641
|
+
dma_results=dma_results_dict, # extra="allow" accepts additional fields
|
|
642
|
+
)
|
|
643
|
+
|
|
644
|
+
# CRITICAL: Run bypass consciences FIRST, even for exempt actions
|
|
645
|
+
# This allows UpdatedStatusConscience to detect new messages before TASK_COMPLETE
|
|
646
|
+
bypass_result = await self._run_bypass_conscience_checks(action_result, context)
|
|
647
|
+
if bypass_result.overridden:
|
|
648
|
+
logger.info(
|
|
649
|
+
f"Bypass conscience overrode action {action_result.selected_action} -> "
|
|
650
|
+
f"{bypass_result.final_action.selected_action}: {bypass_result.override_reason}"
|
|
651
|
+
)
|
|
652
|
+
return self._create_conscience_application_result(action_result, bypass_result)
|
|
653
|
+
|
|
654
|
+
# Now check if action is exempt from normal conscience checks
|
|
655
|
+
if self._is_exempt_from_conscience_checks(action_result):
|
|
656
|
+
return ConscienceApplicationResult(
|
|
657
|
+
original_action=action_result,
|
|
658
|
+
final_action=action_result,
|
|
659
|
+
overridden=False,
|
|
660
|
+
override_reason=None,
|
|
661
|
+
epistemic_data=EpistemicData(
|
|
662
|
+
entropy_level=0.0, # Exempt actions have no uncertainty
|
|
663
|
+
coherence_level=1.0, # Fully coherent
|
|
664
|
+
uncertainty_acknowledged=True, # System knows this is exempt
|
|
665
|
+
reasoning_transparency=1.0, # Fully transparent (exempt)
|
|
666
|
+
),
|
|
667
|
+
# Propagate any detection flags from bypass checks
|
|
668
|
+
updated_status_detected=bypass_result.updated_status_detected,
|
|
669
|
+
)
|
|
670
|
+
|
|
671
|
+
# Run normal conscience checks
|
|
672
|
+
conscience_result = await self._run_normal_conscience_checks(action_result, context)
|
|
673
|
+
|
|
674
|
+
if is_conscience_retry and not conscience_result.overridden:
|
|
675
|
+
conscience_result = self._handle_conscience_retry_without_override(conscience_result)
|
|
676
|
+
|
|
677
|
+
return self._create_conscience_application_result(action_result, conscience_result)
|
|
678
|
+
|
|
679
|
+
def _check_and_clear_conscience_retry_flag(self, processing_context: Optional[Any]) -> bool:
|
|
680
|
+
"""Check if this is a conscience retry and clear the flag to prevent loops."""
|
|
681
|
+
is_conscience_retry = (
|
|
682
|
+
processing_context is not None
|
|
683
|
+
and hasattr(processing_context, "is_conscience_retry")
|
|
684
|
+
and processing_context.is_conscience_retry
|
|
685
|
+
)
|
|
686
|
+
|
|
687
|
+
if is_conscience_retry and processing_context is not None:
|
|
688
|
+
processing_context.is_conscience_retry = False
|
|
689
|
+
|
|
690
|
+
return is_conscience_retry
|
|
691
|
+
|
|
692
|
+
def _is_exempt_from_conscience_checks(self, action_result: ActionSelectionDMAResult) -> bool:
|
|
693
|
+
"""Check if action is exempt from conscience override."""
|
|
694
|
+
exempt_actions = {
|
|
695
|
+
HandlerActionType.TASK_COMPLETE.value,
|
|
696
|
+
HandlerActionType.DEFER.value,
|
|
697
|
+
HandlerActionType.REJECT.value,
|
|
698
|
+
}
|
|
699
|
+
return action_result.selected_action in exempt_actions
|
|
700
|
+
|
|
701
|
+
async def _run_bypass_conscience_checks(
|
|
702
|
+
self, action_result: ActionSelectionDMAResult, context: ConscienceCheckContext
|
|
703
|
+
) -> ConscienceCheckInternalResult:
|
|
704
|
+
"""Run bypass conscience checks that run even for exempt actions.
|
|
705
|
+
|
|
706
|
+
These are critical checks like UpdatedStatusConscience that must run
|
|
707
|
+
even for TASK_COMPLETE, DEFER, REJECT actions.
|
|
708
|
+
"""
|
|
709
|
+
return await self._run_conscience_entries(
|
|
710
|
+
self.conscience_registry.get_bypass_consciences(),
|
|
711
|
+
action_result,
|
|
712
|
+
context,
|
|
713
|
+
)
|
|
714
|
+
|
|
715
|
+
async def _run_normal_conscience_checks(
|
|
716
|
+
self, action_result: ActionSelectionDMAResult, context: ConscienceCheckContext
|
|
717
|
+
) -> ConscienceCheckInternalResult:
|
|
718
|
+
"""Run normal conscience checks that respect exemption."""
|
|
719
|
+
return await self._run_conscience_entries(
|
|
720
|
+
self.conscience_registry.get_normal_consciences(),
|
|
721
|
+
action_result,
|
|
722
|
+
context,
|
|
723
|
+
)
|
|
724
|
+
|
|
725
|
+
async def _run_conscience_checks(
|
|
726
|
+
self, action_result: ActionSelectionDMAResult, context: ConscienceCheckContext
|
|
727
|
+
) -> ConscienceCheckInternalResult:
|
|
728
|
+
"""Run all conscience checks and return the results."""
|
|
729
|
+
return await self._run_conscience_entries(
|
|
730
|
+
self.conscience_registry.get_consciences(),
|
|
731
|
+
action_result,
|
|
732
|
+
context,
|
|
733
|
+
)
|
|
734
|
+
|
|
735
|
+
async def _run_conscience_entries(
|
|
736
|
+
self,
|
|
737
|
+
entries: List[Any],
|
|
738
|
+
action_result: ActionSelectionDMAResult,
|
|
739
|
+
context: ConscienceCheckContext,
|
|
740
|
+
) -> ConscienceCheckInternalResult:
|
|
741
|
+
"""Run a list of conscience entries and return aggregated results."""
|
|
742
|
+
final_action = action_result
|
|
743
|
+
overridden = False
|
|
744
|
+
override_reason: Optional[str] = None
|
|
745
|
+
epistemic_data: Optional[EpistemicData] = None
|
|
746
|
+
thought_depth_triggered: Optional[bool] = None
|
|
747
|
+
updated_status_detected: Optional[bool] = None
|
|
748
|
+
|
|
749
|
+
for entry in entries:
|
|
750
|
+
conscience_result = await self._check_single_conscience(entry, final_action, context)
|
|
751
|
+
|
|
752
|
+
if conscience_result.skip:
|
|
753
|
+
continue
|
|
754
|
+
|
|
755
|
+
# Take the first epistemic data we find (consciences run in order)
|
|
756
|
+
if conscience_result.epistemic_data and not epistemic_data:
|
|
757
|
+
epistemic_data = conscience_result.epistemic_data
|
|
758
|
+
|
|
759
|
+
if conscience_result.thought_depth_triggered is not None:
|
|
760
|
+
thought_depth_triggered = conscience_result.thought_depth_triggered
|
|
761
|
+
|
|
762
|
+
if conscience_result.updated_status_detected is not None:
|
|
763
|
+
updated_status_detected = conscience_result.updated_status_detected
|
|
764
|
+
|
|
765
|
+
if not conscience_result.passed:
|
|
766
|
+
overridden = True
|
|
767
|
+
override_reason = conscience_result.reason
|
|
768
|
+
final_action = conscience_result.replacement_action or action_result
|
|
769
|
+
break
|
|
770
|
+
|
|
771
|
+
return ConscienceCheckInternalResult(
|
|
772
|
+
final_action=final_action,
|
|
773
|
+
overridden=overridden,
|
|
774
|
+
override_reason=override_reason,
|
|
775
|
+
epistemic_data=epistemic_data,
|
|
776
|
+
thought_depth_triggered=thought_depth_triggered,
|
|
777
|
+
updated_status_detected=updated_status_detected,
|
|
778
|
+
)
|
|
779
|
+
|
|
780
|
+
async def _check_single_conscience(
|
|
781
|
+
self, entry: Any, action_result: ActionSelectionDMAResult, context: ConscienceCheckContext
|
|
782
|
+
) -> SingleConscienceCheckResult:
|
|
783
|
+
"""Check a single conscience and handle errors."""
|
|
784
|
+
conscience = entry.conscience
|
|
785
|
+
cb = entry.circuit_breaker
|
|
786
|
+
|
|
787
|
+
try:
|
|
788
|
+
if cb:
|
|
789
|
+
cb.check_and_raise()
|
|
790
|
+
result = await conscience.check(action_result, context)
|
|
791
|
+
if cb:
|
|
792
|
+
cb.record_success()
|
|
793
|
+
except CircuitBreakerError as e:
|
|
794
|
+
logger.warning(f"conscience {entry.name} unavailable: {e}")
|
|
795
|
+
return SingleConscienceCheckResult(skip=True)
|
|
796
|
+
except Exception as e: # noqa: BLE001
|
|
797
|
+
logger.error(f"conscience {entry.name} error: {e}", exc_info=True)
|
|
798
|
+
if cb:
|
|
799
|
+
cb.record_failure()
|
|
800
|
+
return SingleConscienceCheckResult(skip=True)
|
|
801
|
+
|
|
802
|
+
replacement_action = self._create_replacement_action(result, action_result, entry.name)
|
|
803
|
+
|
|
804
|
+
return SingleConscienceCheckResult(
|
|
805
|
+
skip=False,
|
|
806
|
+
passed=result.passed,
|
|
807
|
+
reason=result.reason,
|
|
808
|
+
epistemic_data=result.epistemic_data, # Already an EpistemicData instance or None
|
|
809
|
+
replacement_action=replacement_action,
|
|
810
|
+
thought_depth_triggered=result.thought_depth_triggered,
|
|
811
|
+
updated_status_detected=result.updated_status_detected,
|
|
812
|
+
)
|
|
813
|
+
|
|
814
|
+
def _create_replacement_action(
|
|
815
|
+
self, conscience_result: Any, original_action: ActionSelectionDMAResult, conscience_name: str
|
|
816
|
+
) -> ActionSelectionDMAResult:
|
|
817
|
+
"""Create replacement action based on conscience result."""
|
|
818
|
+
if not conscience_result.passed:
|
|
819
|
+
# Check for replacement_action on ConscienceCheckResult (top-level field)
|
|
820
|
+
if conscience_result.replacement_action:
|
|
821
|
+
return ActionSelectionDMAResult.model_validate(conscience_result.replacement_action)
|
|
822
|
+
else:
|
|
823
|
+
return self._create_ponder_replacement(original_action, conscience_result, conscience_name)
|
|
824
|
+
return original_action
|
|
825
|
+
|
|
826
|
+
def _create_ponder_replacement(
|
|
827
|
+
self, action_result: ActionSelectionDMAResult, conscience_result: Any, conscience_name: str
|
|
828
|
+
) -> ActionSelectionDMAResult:
|
|
829
|
+
"""Create PONDER action as replacement."""
|
|
830
|
+
attempted_action_desc = self._describe_action(action_result)
|
|
831
|
+
questions = [
|
|
832
|
+
f"I attempted to {attempted_action_desc}",
|
|
833
|
+
conscience_result.reason or "conscience failed",
|
|
834
|
+
"What alternative approach would better align with my principles?",
|
|
835
|
+
]
|
|
836
|
+
|
|
837
|
+
ponder_params = PonderParams(questions=questions)
|
|
838
|
+
|
|
839
|
+
return ActionSelectionDMAResult(
|
|
840
|
+
selected_action=HandlerActionType.PONDER,
|
|
841
|
+
action_parameters=ponder_params,
|
|
842
|
+
rationale=f"Overridden by {conscience_name}: Need to reconsider {attempted_action_desc}",
|
|
843
|
+
raw_llm_response=None,
|
|
844
|
+
reasoning=None,
|
|
845
|
+
evaluation_time_ms=None,
|
|
846
|
+
resource_usage=None,
|
|
847
|
+
)
|
|
848
|
+
|
|
849
|
+
def _handle_conscience_retry_without_override(
|
|
850
|
+
self, conscience_result: ConscienceCheckInternalResult
|
|
851
|
+
) -> ConscienceCheckInternalResult:
|
|
852
|
+
"""Handle conscience retry when no override occurred."""
|
|
853
|
+
has_depth_guardrail = any(
|
|
854
|
+
"ThoughtDepthGuardrail" in entry.conscience.__class__.__name__
|
|
855
|
+
for entry in self.conscience_registry.get_consciences()
|
|
856
|
+
)
|
|
857
|
+
|
|
858
|
+
if not has_depth_guardrail:
|
|
859
|
+
logger.info("ThoughtProcessor: Conscience retry without override - forcing PONDER")
|
|
860
|
+
final_action = ActionSelectionDMAResult(
|
|
861
|
+
selected_action=HandlerActionType.PONDER,
|
|
862
|
+
action_parameters=PonderParams(questions=["Forced PONDER after conscience retry"]),
|
|
863
|
+
rationale="Forced PONDER after conscience retry to prevent loops",
|
|
864
|
+
raw_llm_response=None,
|
|
865
|
+
reasoning=None,
|
|
866
|
+
evaluation_time_ms=None,
|
|
867
|
+
resource_usage=None,
|
|
868
|
+
)
|
|
869
|
+
return ConscienceCheckInternalResult(
|
|
870
|
+
final_action=final_action,
|
|
871
|
+
overridden=True,
|
|
872
|
+
override_reason="Conscience retry - forcing PONDER to prevent loops",
|
|
873
|
+
epistemic_data=conscience_result.epistemic_data,
|
|
874
|
+
thought_depth_triggered=conscience_result.thought_depth_triggered,
|
|
875
|
+
updated_status_detected=conscience_result.updated_status_detected,
|
|
876
|
+
)
|
|
877
|
+
|
|
878
|
+
return conscience_result
|
|
879
|
+
|
|
880
|
+
def _create_conscience_application_result(
|
|
881
|
+
self, action_result: ActionSelectionDMAResult, conscience_result: ConscienceCheckInternalResult
|
|
882
|
+
) -> ConscienceApplicationResult:
|
|
883
|
+
"""Create the final ConscienceApplicationResult."""
|
|
884
|
+
# epistemic_data is REQUIRED - use safe fallback if not provided
|
|
885
|
+
epistemic_data = conscience_result.epistemic_data or EpistemicData(
|
|
886
|
+
entropy_level=0.5, # Moderate uncertainty when no data
|
|
887
|
+
coherence_level=0.5, # Moderate coherence
|
|
888
|
+
uncertainty_acknowledged=True, # System knows data is missing
|
|
889
|
+
reasoning_transparency=1.0, # Transparent about the issue
|
|
890
|
+
)
|
|
891
|
+
|
|
892
|
+
return ConscienceApplicationResult(
|
|
893
|
+
original_action=action_result,
|
|
894
|
+
final_action=conscience_result.final_action,
|
|
895
|
+
overridden=conscience_result.overridden,
|
|
896
|
+
override_reason=conscience_result.override_reason,
|
|
897
|
+
epistemic_data=epistemic_data,
|
|
898
|
+
thought_depth_triggered=conscience_result.thought_depth_triggered,
|
|
899
|
+
updated_status_detected=conscience_result.updated_status_detected,
|
|
900
|
+
)
|
|
901
|
+
|
|
902
|
+
def _format_speak_description(self, params: Any) -> str:
|
|
903
|
+
"""Format description for SPEAK action parameters."""
|
|
904
|
+
if not hasattr(params, "content"):
|
|
905
|
+
return "speak"
|
|
906
|
+
|
|
907
|
+
content_str = str(params.content)
|
|
908
|
+
# Use 200 chars to provide more context for conscience evaluation
|
|
909
|
+
if len(content_str) > 200:
|
|
910
|
+
return f"speak: '{content_str[:200]}...'"
|
|
911
|
+
else:
|
|
912
|
+
return f"speak: '{content_str}'"
|
|
913
|
+
|
|
914
|
+
def _handle_special_cases(
|
|
915
|
+
self, conscience_result: Optional[ConscienceApplicationResult]
|
|
916
|
+
) -> Optional[ConscienceApplicationResult]:
|
|
917
|
+
"""Handle special processing cases (PONDER, DEFER overrides)."""
|
|
918
|
+
# Return the full ConscienceApplicationResult to preserve all conscience data
|
|
919
|
+
# The full result includes epistemic_data, override_reason, etc.
|
|
920
|
+
return conscience_result
|