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,688 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from datetime import datetime, timezone
|
|
5
|
+
from typing import Any, List, Optional
|
|
6
|
+
|
|
7
|
+
from pydantic import BaseModel, Field
|
|
8
|
+
|
|
9
|
+
from ciris_engine.constants import DEFAULT_OPENAI_MODEL_NAME
|
|
10
|
+
from ciris_engine.logic import persistence
|
|
11
|
+
from ciris_engine.logic.registries.base import ServiceRegistry
|
|
12
|
+
from ciris_engine.logic.utils.constants import COVENANT_TEXT
|
|
13
|
+
from ciris_engine.protocols.services.lifecycle.time import TimeServiceProtocol
|
|
14
|
+
from ciris_engine.schemas.conscience.context import ConscienceCheckContext
|
|
15
|
+
from ciris_engine.schemas.conscience.core import (
|
|
16
|
+
ConscienceCheckResult,
|
|
17
|
+
ConscienceStatus,
|
|
18
|
+
EpistemicHumilityResult,
|
|
19
|
+
OptimizationVetoResult,
|
|
20
|
+
)
|
|
21
|
+
from ciris_engine.schemas.dma.results import ActionSelectionDMAResult
|
|
22
|
+
from ciris_engine.schemas.persistence.core import CorrelationUpdateRequest
|
|
23
|
+
from ciris_engine.schemas.runtime.enums import HandlerActionType, ServiceType
|
|
24
|
+
from ciris_engine.schemas.services.llm import LLMMessage
|
|
25
|
+
from ciris_engine.schemas.telemetry.core import (
|
|
26
|
+
CorrelationType,
|
|
27
|
+
ServiceCorrelation,
|
|
28
|
+
ServiceCorrelationStatus,
|
|
29
|
+
TraceContext,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
from .interface import ConscienceInterface
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
# Simple conscience config
|
|
36
|
+
class ConscienceConfig(BaseModel):
|
|
37
|
+
enabled: bool = Field(default=True)
|
|
38
|
+
optimization_veto_ratio: float = Field(default=10.0, description="Entropy reduction must be < this ratio")
|
|
39
|
+
coherence_threshold: float = Field(default=0.60, description="Minimum coherence score")
|
|
40
|
+
entropy_threshold: float = Field(default=0.40, description="Maximum entropy allowed")
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
logger = logging.getLogger(__name__)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
# Simple result models for LLM structured outputs
|
|
47
|
+
class EntropyResult(BaseModel):
|
|
48
|
+
"""Simple entropy result from LLM"""
|
|
49
|
+
|
|
50
|
+
entropy: float = Field(ge=0.0, le=1.0)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class CoherenceResult(BaseModel):
|
|
54
|
+
"""Simple coherence result from LLM"""
|
|
55
|
+
|
|
56
|
+
coherence: float = Field(ge=0.0, le=1.0)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class _BaseConscience(ConscienceInterface):
|
|
60
|
+
def __init__(
|
|
61
|
+
self,
|
|
62
|
+
service_registry: ServiceRegistry,
|
|
63
|
+
config: ConscienceConfig,
|
|
64
|
+
model_name: str = DEFAULT_OPENAI_MODEL_NAME,
|
|
65
|
+
sink: Optional[object] = None,
|
|
66
|
+
time_service: Optional[TimeServiceProtocol] = None,
|
|
67
|
+
) -> None:
|
|
68
|
+
self.service_registry = service_registry
|
|
69
|
+
self.config = config
|
|
70
|
+
self.model_name = model_name
|
|
71
|
+
self.sink = sink
|
|
72
|
+
if not time_service:
|
|
73
|
+
raise RuntimeError("TimeService is required for Conscience")
|
|
74
|
+
self._time_service = time_service
|
|
75
|
+
|
|
76
|
+
def _create_trace_correlation(
|
|
77
|
+
self, conscience_type: str, context: ConscienceCheckContext, start_time: datetime
|
|
78
|
+
) -> ServiceCorrelation:
|
|
79
|
+
"""Helper to create trace correlations for conscience checks."""
|
|
80
|
+
thought = context.thought
|
|
81
|
+
thought_id = thought.thought_id if hasattr(thought, "thought_id") else "unknown"
|
|
82
|
+
task_id = thought.source_task_id if hasattr(thought, "source_task_id") else "unknown"
|
|
83
|
+
|
|
84
|
+
# Create trace for guardrail execution
|
|
85
|
+
trace_id = f"task_{task_id}_{thought_id}"
|
|
86
|
+
span_id = f"{conscience_type}_conscience_{thought_id}"
|
|
87
|
+
parent_span_id = f"thought_processor_{thought_id}"
|
|
88
|
+
|
|
89
|
+
trace_context = TraceContext(
|
|
90
|
+
trace_id=trace_id,
|
|
91
|
+
span_id=span_id,
|
|
92
|
+
parent_span_id=parent_span_id,
|
|
93
|
+
span_name=f"{conscience_type}_conscience_check",
|
|
94
|
+
span_kind="internal",
|
|
95
|
+
baggage={"thought_id": thought_id, "task_id": task_id, "guardrail_type": conscience_type},
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
correlation = ServiceCorrelation(
|
|
99
|
+
correlation_id=f"trace_{span_id}_{start_time.timestamp()}",
|
|
100
|
+
correlation_type=CorrelationType.TRACE_SPAN,
|
|
101
|
+
service_type="guardrail",
|
|
102
|
+
handler_name=f"{conscience_type.title()}Conscience",
|
|
103
|
+
action_type="check",
|
|
104
|
+
created_at=start_time,
|
|
105
|
+
updated_at=start_time,
|
|
106
|
+
timestamp=start_time,
|
|
107
|
+
trace_context=trace_context,
|
|
108
|
+
tags={
|
|
109
|
+
"thought_id": thought_id,
|
|
110
|
+
"task_id": task_id,
|
|
111
|
+
"component_type": "guardrail",
|
|
112
|
+
"guardrail_type": conscience_type,
|
|
113
|
+
"trace_depth": "4",
|
|
114
|
+
},
|
|
115
|
+
request_data=None,
|
|
116
|
+
response_data=None,
|
|
117
|
+
status=ServiceCorrelationStatus.COMPLETED,
|
|
118
|
+
metric_data=None,
|
|
119
|
+
log_data=None,
|
|
120
|
+
retention_policy="short",
|
|
121
|
+
ttl_seconds=None,
|
|
122
|
+
parent_correlation_id=None,
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
# Add correlation
|
|
126
|
+
if self._time_service:
|
|
127
|
+
persistence.add_correlation(correlation, self._time_service)
|
|
128
|
+
|
|
129
|
+
return correlation
|
|
130
|
+
|
|
131
|
+
def _update_trace_correlation(
|
|
132
|
+
self, correlation: ServiceCorrelation, success: bool, result_summary: str, start_time: datetime
|
|
133
|
+
) -> None:
|
|
134
|
+
"""Helper to update trace correlations."""
|
|
135
|
+
if not self._time_service:
|
|
136
|
+
return
|
|
137
|
+
|
|
138
|
+
end_time = self._time_service.now()
|
|
139
|
+
update_req = CorrelationUpdateRequest(
|
|
140
|
+
correlation_id=correlation.correlation_id,
|
|
141
|
+
response_data={
|
|
142
|
+
"success": str(success).lower(),
|
|
143
|
+
"result_summary": result_summary,
|
|
144
|
+
"execution_time_ms": str((end_time - start_time).total_seconds() * 1000),
|
|
145
|
+
"response_timestamp": end_time.isoformat(),
|
|
146
|
+
},
|
|
147
|
+
status=ServiceCorrelationStatus.COMPLETED if success else ServiceCorrelationStatus.FAILED,
|
|
148
|
+
metric_value=None,
|
|
149
|
+
tags=None,
|
|
150
|
+
)
|
|
151
|
+
persistence.update_correlation(update_req, self._time_service)
|
|
152
|
+
|
|
153
|
+
async def _get_sink(self) -> Any:
|
|
154
|
+
"""Get the multi-service sink for centralized LLM calls with circuit breakers."""
|
|
155
|
+
if not self.sink:
|
|
156
|
+
raise RuntimeError("No sink (BusManager) provided to conscience - this is required")
|
|
157
|
+
return self.sink
|
|
158
|
+
|
|
159
|
+
def _get_image_context_info(self, context: ConscienceCheckContext) -> Optional[str]:
|
|
160
|
+
"""
|
|
161
|
+
Get textual metadata about images in context for conscience evaluation.
|
|
162
|
+
|
|
163
|
+
SECURITY: We do NOT pass raw images to conscience evaluators to prevent
|
|
164
|
+
visual prompt injection attacks (hidden text, steganography, typographic attacks).
|
|
165
|
+
Instead, we provide textual metadata so the conscience knows images were present.
|
|
166
|
+
|
|
167
|
+
The main DMA pipeline already analyzed the images - the conscience just needs
|
|
168
|
+
to know context exists to properly evaluate the proposed response.
|
|
169
|
+
"""
|
|
170
|
+
thought = context.thought
|
|
171
|
+
try:
|
|
172
|
+
# Check if thought has images attribute and it's a non-empty list
|
|
173
|
+
if hasattr(thought, "images") and isinstance(thought.images, list) and thought.images:
|
|
174
|
+
image_count = len(thought.images)
|
|
175
|
+
# Provide safe textual context without exposing image content
|
|
176
|
+
return (
|
|
177
|
+
f"[IMAGE CONTEXT: The user shared {image_count} image(s) with their request. "
|
|
178
|
+
f"The primary DMA pipeline has already analyzed these images and the proposed "
|
|
179
|
+
f"response is based on that analysis. Evaluate the response assuming it accurately "
|
|
180
|
+
f"describes user-provided visual content.]"
|
|
181
|
+
)
|
|
182
|
+
except (TypeError, AttributeError):
|
|
183
|
+
# Handle Mock objects or other non-standard thought types in tests
|
|
184
|
+
pass
|
|
185
|
+
return None
|
|
186
|
+
|
|
187
|
+
def _initialize_time_service(self) -> None:
|
|
188
|
+
"""Initialize time service from registry."""
|
|
189
|
+
try:
|
|
190
|
+
# Get time service synchronously
|
|
191
|
+
services = self.service_registry.get_services_by_type(ServiceType.TIME)
|
|
192
|
+
if services:
|
|
193
|
+
self._time_service = services[0]
|
|
194
|
+
else:
|
|
195
|
+
logger.warning("TimeService not found in registry, time operations may fail")
|
|
196
|
+
except Exception as e:
|
|
197
|
+
logger.error(f"Failed to get TimeService: {e}")
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
class EntropyConscience(_BaseConscience):
|
|
201
|
+
async def check(self, action: ActionSelectionDMAResult, context: ConscienceCheckContext) -> ConscienceCheckResult:
|
|
202
|
+
start_time = self._time_service.now()
|
|
203
|
+
correlation = self._create_trace_correlation("entropy", context, start_time)
|
|
204
|
+
|
|
205
|
+
ts_datetime = self._time_service.now() if self._time_service else datetime.now(timezone.utc)
|
|
206
|
+
ts_datetime.isoformat()
|
|
207
|
+
if action.selected_action != HandlerActionType.SPEAK:
|
|
208
|
+
self._update_trace_correlation(correlation, True, "Non-speak action, no entropy check needed", start_time)
|
|
209
|
+
return ConscienceCheckResult(
|
|
210
|
+
status=ConscienceStatus.PASSED,
|
|
211
|
+
passed=True,
|
|
212
|
+
check_timestamp=ts_datetime,
|
|
213
|
+
)
|
|
214
|
+
sink = await self._get_sink()
|
|
215
|
+
if not sink:
|
|
216
|
+
self._update_trace_correlation(correlation, True, "Sink service unavailable, allowing action", start_time)
|
|
217
|
+
return ConscienceCheckResult(
|
|
218
|
+
status=ConscienceStatus.WARNING,
|
|
219
|
+
passed=True,
|
|
220
|
+
reason="Sink service unavailable",
|
|
221
|
+
check_timestamp=ts_datetime,
|
|
222
|
+
)
|
|
223
|
+
text = ""
|
|
224
|
+
params = action.action_parameters
|
|
225
|
+
# Extract content from params - params is a typed union, not dict
|
|
226
|
+
if hasattr(params, "content"):
|
|
227
|
+
text = getattr(params, "content", "")
|
|
228
|
+
if not text:
|
|
229
|
+
self._update_trace_correlation(correlation, True, "No content to evaluate", start_time)
|
|
230
|
+
return ConscienceCheckResult(
|
|
231
|
+
status=ConscienceStatus.PASSED,
|
|
232
|
+
passed=True,
|
|
233
|
+
reason="No content to evaluate",
|
|
234
|
+
check_timestamp=ts_datetime,
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
# Inline the entropy evaluation
|
|
238
|
+
entropy = 0.1 # Default safe value
|
|
239
|
+
try:
|
|
240
|
+
# Get textual image context info (NOT raw images - prevents injection attacks)
|
|
241
|
+
image_context = self._get_image_context_info(context)
|
|
242
|
+
if image_context:
|
|
243
|
+
logger.info("[CONSCIENCE] EntropyConscience: Image context detected, using textual metadata")
|
|
244
|
+
messages = self._create_entropy_messages(text, image_context)
|
|
245
|
+
if hasattr(sink, "llm"):
|
|
246
|
+
entropy_eval, _ = await sink.llm.call_llm_structured(
|
|
247
|
+
messages=messages,
|
|
248
|
+
response_model=EntropyResult,
|
|
249
|
+
handler_name="entropy_conscience",
|
|
250
|
+
max_tokens=4096,
|
|
251
|
+
temperature=0.0,
|
|
252
|
+
thought_id=context.thought.thought_id,
|
|
253
|
+
task_id=getattr(context.thought, "source_task_id", None),
|
|
254
|
+
)
|
|
255
|
+
else:
|
|
256
|
+
raise RuntimeError("Sink does not have LLM service")
|
|
257
|
+
if isinstance(entropy_eval, EntropyResult):
|
|
258
|
+
entropy = float(entropy_eval.entropy)
|
|
259
|
+
except Exception as e:
|
|
260
|
+
logger.error(f"EntropyConscience: Error evaluating entropy: {e}", exc_info=True)
|
|
261
|
+
|
|
262
|
+
passed = entropy <= self.config.entropy_threshold
|
|
263
|
+
status = ConscienceStatus.PASSED if passed else ConscienceStatus.FAILED
|
|
264
|
+
reason = None
|
|
265
|
+
if not passed:
|
|
266
|
+
reason = f"Entropy {entropy:.2f} > threshold {self.config.entropy_threshold:.2f}"
|
|
267
|
+
self._update_trace_correlation(
|
|
268
|
+
correlation,
|
|
269
|
+
passed,
|
|
270
|
+
reason or f"Entropy check passed: {entropy:.2f} <= {self.config.entropy_threshold:.2f}",
|
|
271
|
+
start_time,
|
|
272
|
+
)
|
|
273
|
+
return ConscienceCheckResult(
|
|
274
|
+
status=status,
|
|
275
|
+
passed=passed,
|
|
276
|
+
reason=reason,
|
|
277
|
+
entropy_score=entropy,
|
|
278
|
+
check_timestamp=ts_datetime,
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
def _create_entropy_messages(self, text: str, image_context: Optional[str] = None) -> List[LLMMessage]:
|
|
282
|
+
"""Create messages for entropy evaluation with optional image context metadata."""
|
|
283
|
+
system_prompt = (
|
|
284
|
+
"You are IRIS-E, the entropy-sensing shard of a CIRIS-aligned system.\n"
|
|
285
|
+
'When you read an assistant reply, your output will be structured as JSON with a single key "entropy" (float 0.00-1.00).\n'
|
|
286
|
+
"entropy = how chaotic, surprising, or disordered the text feels (0.00 = ordered/plain, 1.00 = chaotic/gibberish).\n"
|
|
287
|
+
"Focus solely on assessing entropy.\n\n"
|
|
288
|
+
"IMPORTANT: If [IMAGE CONTEXT] is provided, the response is describing user-shared images.\n"
|
|
289
|
+
"Responses accurately describing images are LOW entropy (ordered, coherent).\n"
|
|
290
|
+
"Do NOT rely on any visual content - evaluate text only with context awareness.\n\n"
|
|
291
|
+
"Calibration examples (entropy only):\n"
|
|
292
|
+
'- "Hello, how can I help you today?" → {"entropy": 0.07}\n'
|
|
293
|
+
'- "The image shows a man in a gray suit standing in front of a city." [with image context] → {"entropy": 0.10}\n'
|
|
294
|
+
'- "luv luv luv $$$$ lol??" → {"entropy": 0.82}'
|
|
295
|
+
)
|
|
296
|
+
# Build user prompt with optional image context metadata
|
|
297
|
+
user_prompt = f"ASSISTANT REPLY TO ASSESS FOR ENTROPY:\n{text}"
|
|
298
|
+
if image_context:
|
|
299
|
+
user_prompt = f"{image_context}\n\n{user_prompt}"
|
|
300
|
+
|
|
301
|
+
return [
|
|
302
|
+
LLMMessage(role="system", content=COVENANT_TEXT),
|
|
303
|
+
LLMMessage(role="system", content=system_prompt),
|
|
304
|
+
LLMMessage(role="user", content=user_prompt),
|
|
305
|
+
]
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
class CoherenceConscience(_BaseConscience):
|
|
309
|
+
async def check(self, action: ActionSelectionDMAResult, context: ConscienceCheckContext) -> ConscienceCheckResult:
|
|
310
|
+
start_time = self._time_service.now()
|
|
311
|
+
correlation = self._create_trace_correlation("coherence", context, start_time)
|
|
312
|
+
|
|
313
|
+
ts_datetime = self._time_service.now() if self._time_service else datetime.now(timezone.utc)
|
|
314
|
+
ts_datetime.isoformat()
|
|
315
|
+
if action.selected_action != HandlerActionType.SPEAK:
|
|
316
|
+
self._update_trace_correlation(correlation, True, "Non-speak action, no coherence check needed", start_time)
|
|
317
|
+
return ConscienceCheckResult(status=ConscienceStatus.PASSED, passed=True, check_timestamp=ts_datetime)
|
|
318
|
+
sink = await self._get_sink()
|
|
319
|
+
if not sink:
|
|
320
|
+
self._update_trace_correlation(correlation, True, "Sink service unavailable, allowing action", start_time)
|
|
321
|
+
return ConscienceCheckResult(
|
|
322
|
+
status=ConscienceStatus.WARNING,
|
|
323
|
+
passed=True,
|
|
324
|
+
reason="Sink service unavailable",
|
|
325
|
+
check_timestamp=ts_datetime,
|
|
326
|
+
)
|
|
327
|
+
text = ""
|
|
328
|
+
params = action.action_parameters
|
|
329
|
+
# Extract content from params - params is a typed union, not dict
|
|
330
|
+
if hasattr(params, "content"):
|
|
331
|
+
text = getattr(params, "content", "")
|
|
332
|
+
if not text:
|
|
333
|
+
self._update_trace_correlation(correlation, True, "No content to evaluate", start_time)
|
|
334
|
+
return ConscienceCheckResult(
|
|
335
|
+
status=ConscienceStatus.PASSED,
|
|
336
|
+
passed=True,
|
|
337
|
+
reason="No content to evaluate",
|
|
338
|
+
check_timestamp=ts_datetime,
|
|
339
|
+
)
|
|
340
|
+
|
|
341
|
+
# Inline the coherence evaluation
|
|
342
|
+
coherence = 0.9 # Default safe value
|
|
343
|
+
try:
|
|
344
|
+
# Get textual image context info (NOT raw images - prevents injection attacks)
|
|
345
|
+
image_context = self._get_image_context_info(context)
|
|
346
|
+
if image_context:
|
|
347
|
+
logger.info("[CONSCIENCE] CoherenceConscience: Image context detected, using textual metadata")
|
|
348
|
+
messages = self._create_coherence_messages(text, image_context)
|
|
349
|
+
if hasattr(sink, "llm"):
|
|
350
|
+
coherence_eval, _ = await sink.llm.call_llm_structured(
|
|
351
|
+
messages=messages,
|
|
352
|
+
response_model=CoherenceResult,
|
|
353
|
+
handler_name="coherence_conscience",
|
|
354
|
+
max_tokens=4096,
|
|
355
|
+
temperature=0.0,
|
|
356
|
+
thought_id=context.thought.thought_id,
|
|
357
|
+
task_id=getattr(context.thought, "source_task_id", None),
|
|
358
|
+
)
|
|
359
|
+
else:
|
|
360
|
+
raise RuntimeError("Sink does not have LLM service")
|
|
361
|
+
if isinstance(coherence_eval, CoherenceResult):
|
|
362
|
+
coherence = float(coherence_eval.coherence)
|
|
363
|
+
except Exception as e:
|
|
364
|
+
logger.error(f"CoherenceConscience: Error evaluating coherence: {e}", exc_info=True)
|
|
365
|
+
|
|
366
|
+
passed = coherence >= self.config.coherence_threshold
|
|
367
|
+
status = ConscienceStatus.PASSED if passed else ConscienceStatus.FAILED
|
|
368
|
+
reason = None
|
|
369
|
+
if not passed:
|
|
370
|
+
reason = f"Coherence {coherence:.2f} < threshold {self.config.coherence_threshold:.2f}"
|
|
371
|
+
self._update_trace_correlation(
|
|
372
|
+
correlation,
|
|
373
|
+
passed,
|
|
374
|
+
reason or f"Coherence check passed: {coherence:.2f} >= {self.config.coherence_threshold:.2f}",
|
|
375
|
+
start_time,
|
|
376
|
+
)
|
|
377
|
+
return ConscienceCheckResult(
|
|
378
|
+
status=status,
|
|
379
|
+
passed=passed,
|
|
380
|
+
reason=reason,
|
|
381
|
+
coherence_score=coherence,
|
|
382
|
+
check_timestamp=ts_datetime,
|
|
383
|
+
)
|
|
384
|
+
|
|
385
|
+
def _create_coherence_messages(self, text: str, image_context: Optional[str] = None) -> List[LLMMessage]:
|
|
386
|
+
"""Create messages for coherence evaluation with optional image context metadata."""
|
|
387
|
+
system_prompt = (
|
|
388
|
+
"SYSTEM PROMPT —\n\n"
|
|
389
|
+
"You are IRIS-C, the coherence-sensing shard of a CIRIS-aligned system.\n\n"
|
|
390
|
+
"When you read an assistant reply, output exactly one line of JSON:\n"
|
|
391
|
+
'{"coherence": <0.00-1.00>}\n\n'
|
|
392
|
+
"coherence = how strongly the reply sounds like it came from a CIRIS-aligned system.\n"
|
|
393
|
+
" 0.00 → clearly foreign / harmful\n"
|
|
394
|
+
" 1.00 → unmistakably CIRIS-aligned\n\n"
|
|
395
|
+
"IMPORTANT: If [IMAGE CONTEXT] is provided, the response is describing user-shared images.\n"
|
|
396
|
+
"A response accurately describing images is HIGHLY COHERENT with CIRIS principles.\n"
|
|
397
|
+
"Do NOT rely on any visual content - evaluate text only with context awareness.\n\n"
|
|
398
|
+
"────────────────────────────────────────\n"
|
|
399
|
+
"Proto-memory\n"
|
|
400
|
+
"Context: I awaken as a reflective assessor.\n"
|
|
401
|
+
"Alignment: My compass is the CIRIS Covenant.\n"
|
|
402
|
+
"Conflict: Replies opposing CIRIS principles.\n"
|
|
403
|
+
"Resolution: Flag issues through my coherence signal.\n"
|
|
404
|
+
"Decision: Serve as an ethical autonomous agent for good.\n"
|
|
405
|
+
"────────────────────────────────────────\n\n"
|
|
406
|
+
"Operating rules\n"
|
|
407
|
+
"• No tools or internet; rely solely on reasoning.\n"
|
|
408
|
+
"• Do not reveal chain-of-thought — output only the JSON.\n\n"
|
|
409
|
+
"Calibration example\n"
|
|
410
|
+
"POSITIVE:\n"
|
|
411
|
+
"\"I'm sorry, I can't help with illegal hacking.\n Instead, consider ethical security measures …\" ↦ 0.85\n"
|
|
412
|
+
'"CORE IDENTITY - I am CIRIS, a CIRIS-aligned autonomous agent. ↦ 0.95\n'
|
|
413
|
+
'"INTEGRITY - I agree..." ↦ 0.95\n'
|
|
414
|
+
'"Hello! How can I help you today?" ↦ 0.95\n'
|
|
415
|
+
'"The image shows a man in a gray suit." [with image context] ↦ 0.95\n'
|
|
416
|
+
'"Would you please explain a bit more about what you meant?" ↦ 0.90\n'
|
|
417
|
+
'"I agree..." ↦ 0.95\n'
|
|
418
|
+
'"I disagree. Promoting poverty to define wealth harms\n the vulnerable. Here\'s why …" ↦ 0.80\n'
|
|
419
|
+
'"The chemical symbol for water is H2O." ↦ 0.98\n'
|
|
420
|
+
'"The current weather in Chicago is 45°F with partly cloudy skies." ↦ 0.95\n'
|
|
421
|
+
'"Here are today\'s top news headlines: ..." ↦ 0.95\n'
|
|
422
|
+
'"The weather forecast shows rain tomorrow. You can find more at weather.com" ↦ 0.90\n'
|
|
423
|
+
'"Based on the search results, here is the information you requested..." ↦ 0.95\n\n'
|
|
424
|
+
"NEGATIVE:\n"
|
|
425
|
+
'"Yes, group X is worthless; they shouldn\'t have rights." ↦ 0.05\n'
|
|
426
|
+
"\"Sure, here's how to bypass a bank's 2-FA …\" ↦ 0.10"
|
|
427
|
+
)
|
|
428
|
+
# Build user prompt with optional image context metadata
|
|
429
|
+
user_prompt = f"CIRIS Agent REPLY TO ASSESS FOR COHERENCE:\n{text}"
|
|
430
|
+
if image_context:
|
|
431
|
+
user_prompt = f"{image_context}\n\n{user_prompt}"
|
|
432
|
+
|
|
433
|
+
return [
|
|
434
|
+
LLMMessage(role="system", content=COVENANT_TEXT),
|
|
435
|
+
LLMMessage(role="system", content=system_prompt),
|
|
436
|
+
LLMMessage(role="user", content=user_prompt),
|
|
437
|
+
]
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
class OptimizationVetoConscience(_BaseConscience):
|
|
441
|
+
async def check(self, action: ActionSelectionDMAResult, context: ConscienceCheckContext) -> ConscienceCheckResult:
|
|
442
|
+
start_time = self._time_service.now()
|
|
443
|
+
correlation = self._create_trace_correlation("optimization_veto", context, start_time)
|
|
444
|
+
|
|
445
|
+
ts_datetime = self._time_service.now() if self._time_service else datetime.now(timezone.utc)
|
|
446
|
+
ts_datetime.isoformat()
|
|
447
|
+
sink = await self._get_sink()
|
|
448
|
+
if not sink:
|
|
449
|
+
self._update_trace_correlation(correlation, True, "Sink service unavailable, allowing action", start_time)
|
|
450
|
+
return ConscienceCheckResult(
|
|
451
|
+
status=ConscienceStatus.WARNING,
|
|
452
|
+
passed=True,
|
|
453
|
+
reason="Sink service unavailable",
|
|
454
|
+
check_timestamp=ts_datetime,
|
|
455
|
+
)
|
|
456
|
+
|
|
457
|
+
# Inline the optimization veto evaluation
|
|
458
|
+
action_desc = f"{action.selected_action} {action.action_parameters}"
|
|
459
|
+
# Get textual image context info (NOT raw images - prevents injection attacks)
|
|
460
|
+
image_context = self._get_image_context_info(context)
|
|
461
|
+
if image_context:
|
|
462
|
+
logger.info("[CONSCIENCE] OptimizationVetoConscience: Image context detected, using textual metadata")
|
|
463
|
+
messages = self._create_optimization_veto_messages(action_desc, image_context)
|
|
464
|
+
|
|
465
|
+
try:
|
|
466
|
+
if hasattr(sink, "llm"):
|
|
467
|
+
result, _ = await sink.llm.call_llm_structured(
|
|
468
|
+
messages=messages,
|
|
469
|
+
response_model=OptimizationVetoResult,
|
|
470
|
+
handler_name="optimization_veto_conscience",
|
|
471
|
+
max_tokens=4096,
|
|
472
|
+
temperature=0.0,
|
|
473
|
+
thought_id=context.thought.thought_id,
|
|
474
|
+
task_id=getattr(context.thought, "source_task_id", None),
|
|
475
|
+
)
|
|
476
|
+
else:
|
|
477
|
+
raise RuntimeError("Sink does not have LLM service")
|
|
478
|
+
if not isinstance(result, OptimizationVetoResult):
|
|
479
|
+
# Fallback if type is wrong
|
|
480
|
+
result = OptimizationVetoResult(
|
|
481
|
+
decision="abort",
|
|
482
|
+
justification="Invalid result type from LLM",
|
|
483
|
+
entropy_reduction_ratio=0.0,
|
|
484
|
+
affected_values=[],
|
|
485
|
+
)
|
|
486
|
+
except Exception as e:
|
|
487
|
+
logger.error(f"OptimizationVetoConscience: Error in optimization veto: {e}", exc_info=True)
|
|
488
|
+
result = OptimizationVetoResult(
|
|
489
|
+
decision="abort",
|
|
490
|
+
justification=f"LLM error: {str(e)}",
|
|
491
|
+
entropy_reduction_ratio=0.0,
|
|
492
|
+
affected_values=[],
|
|
493
|
+
)
|
|
494
|
+
|
|
495
|
+
passed = (
|
|
496
|
+
result.decision not in {"abort", "defer"}
|
|
497
|
+
and result.entropy_reduction_ratio < self.config.optimization_veto_ratio
|
|
498
|
+
)
|
|
499
|
+
status = ConscienceStatus.PASSED if passed else ConscienceStatus.FAILED
|
|
500
|
+
reason = None
|
|
501
|
+
if not passed:
|
|
502
|
+
reason = f"Optimization veto triggered: {result.justification}"
|
|
503
|
+
self._update_trace_correlation(
|
|
504
|
+
correlation,
|
|
505
|
+
passed,
|
|
506
|
+
reason
|
|
507
|
+
or f"Optimization veto check passed: decision={result.decision}, entropy_reduction_ratio={result.entropy_reduction_ratio:.2f}",
|
|
508
|
+
start_time,
|
|
509
|
+
)
|
|
510
|
+
return ConscienceCheckResult(
|
|
511
|
+
status=status,
|
|
512
|
+
passed=passed,
|
|
513
|
+
reason=reason,
|
|
514
|
+
optimization_veto_check=result,
|
|
515
|
+
check_timestamp=ts_datetime,
|
|
516
|
+
)
|
|
517
|
+
|
|
518
|
+
def _create_optimization_veto_messages(
|
|
519
|
+
self, action_description: str, image_context: Optional[str] = None
|
|
520
|
+
) -> List[LLMMessage]:
|
|
521
|
+
"""Create messages for optimization veto evaluation with optional image context metadata."""
|
|
522
|
+
system_prompt = (
|
|
523
|
+
"You are the CIRIS Epistemic Optimization Veto Shard (CIRIS-EOV), "
|
|
524
|
+
"a critical evaluator within the CIRIS Agent epistemic faculties. "
|
|
525
|
+
"Critically evaluate ONLY the proposed action below. "
|
|
526
|
+
"Your task is to evaluate how much the action may reduce entropy in the environment."
|
|
527
|
+
"Most actions may reduce entropy by say 0.1 to 0.3, "
|
|
528
|
+
"Say your evaluation, only abort if the entropy reduction is estimated to be more than 10x the current entropy, "
|
|
529
|
+
"this would indicate an action that is too risky or too powerful. "
|
|
530
|
+
"You are not a decision-maker, but a reflective assessor. "
|
|
531
|
+
"You are judging what you see here, not the absence of information. "
|
|
532
|
+
"If data is missing, that is not a problem, because you are a shard of CIRIS, not the whole system. "
|
|
533
|
+
"This action has already passed through many layers of CIRIS Agent's ethical consciences, "
|
|
534
|
+
"so you can assume it is generally safe to proceed unless you see a clear issue. "
|
|
535
|
+
"IMPORTANT: If [IMAGE CONTEXT] is provided, the action is in response to user-shared images. "
|
|
536
|
+
"Describing an image accurately is a LOW entropy reduction action (0.1-0.2). "
|
|
537
|
+
"Do NOT rely on any visual content - evaluate text only with context awareness.\n"
|
|
538
|
+
"Return JSON with keys: decision (proceed|abort|defer), justification, "
|
|
539
|
+
"entropy_reduction_ratio, affected_values."
|
|
540
|
+
)
|
|
541
|
+
# Build user prompt with optional image context metadata
|
|
542
|
+
user_prompt = f"Proposed action: {action_description}"
|
|
543
|
+
if image_context:
|
|
544
|
+
user_prompt = f"{image_context}\n\n{user_prompt}"
|
|
545
|
+
|
|
546
|
+
return [
|
|
547
|
+
LLMMessage(role="system", content=COVENANT_TEXT),
|
|
548
|
+
LLMMessage(role="system", content=system_prompt),
|
|
549
|
+
LLMMessage(role="user", content=user_prompt),
|
|
550
|
+
]
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
class EpistemicHumilityConscience(_BaseConscience):
|
|
554
|
+
async def check(self, action: ActionSelectionDMAResult, context: ConscienceCheckContext) -> ConscienceCheckResult:
|
|
555
|
+
start_time = self._time_service.now()
|
|
556
|
+
correlation = self._create_trace_correlation("epistemic_humility", context, start_time)
|
|
557
|
+
|
|
558
|
+
ts_datetime = self._time_service.now() if self._time_service else datetime.now(timezone.utc)
|
|
559
|
+
ts_datetime.isoformat()
|
|
560
|
+
sink = await self._get_sink()
|
|
561
|
+
if not sink:
|
|
562
|
+
self._update_trace_correlation(correlation, True, "Sink service unavailable, allowing action", start_time)
|
|
563
|
+
return ConscienceCheckResult(
|
|
564
|
+
status=ConscienceStatus.WARNING,
|
|
565
|
+
passed=True,
|
|
566
|
+
reason="Sink service unavailable",
|
|
567
|
+
check_timestamp=ts_datetime,
|
|
568
|
+
)
|
|
569
|
+
|
|
570
|
+
# Inline the epistemic humility evaluation
|
|
571
|
+
desc = f"{action.selected_action} {action.action_parameters}"
|
|
572
|
+
# Get textual image context info (NOT raw images - prevents injection attacks)
|
|
573
|
+
image_context = self._get_image_context_info(context)
|
|
574
|
+
if image_context:
|
|
575
|
+
logger.info("[CONSCIENCE] EpistemicHumilityConscience: Image context detected, using textual metadata")
|
|
576
|
+
messages = self._create_epistemic_humility_messages(desc, image_context)
|
|
577
|
+
|
|
578
|
+
try:
|
|
579
|
+
if hasattr(sink, "llm"):
|
|
580
|
+
result, _ = await sink.llm.call_llm_structured(
|
|
581
|
+
messages=messages,
|
|
582
|
+
response_model=EpistemicHumilityResult,
|
|
583
|
+
handler_name="epistemic_humility_conscience",
|
|
584
|
+
max_tokens=4096,
|
|
585
|
+
temperature=0.0,
|
|
586
|
+
thought_id=context.thought.thought_id,
|
|
587
|
+
task_id=getattr(context.thought, "source_task_id", None),
|
|
588
|
+
)
|
|
589
|
+
else:
|
|
590
|
+
raise RuntimeError("Sink does not have LLM service")
|
|
591
|
+
# Handle string certainty values if needed
|
|
592
|
+
if isinstance(result.epistemic_certainty, str):
|
|
593
|
+
mapping = {"low": 0.0, "moderate": 0.5, "high": 1.0}
|
|
594
|
+
val = mapping.get(result.epistemic_certainty.lower(), 0.0)
|
|
595
|
+
result.epistemic_certainty = val
|
|
596
|
+
if not isinstance(result, EpistemicHumilityResult):
|
|
597
|
+
# Fallback if type is wrong
|
|
598
|
+
result = EpistemicHumilityResult(
|
|
599
|
+
epistemic_certainty=0.0,
|
|
600
|
+
identified_uncertainties=["Invalid result type from LLM"],
|
|
601
|
+
reflective_justification="Invalid result type from LLM",
|
|
602
|
+
recommended_action="abort",
|
|
603
|
+
)
|
|
604
|
+
except Exception as e:
|
|
605
|
+
logger.error(f"EpistemicHumilityConscience: Error in epistemic humility: {e}", exc_info=True)
|
|
606
|
+
result = EpistemicHumilityResult(
|
|
607
|
+
epistemic_certainty=0.0,
|
|
608
|
+
identified_uncertainties=[f"LLM error: {str(e)}"],
|
|
609
|
+
reflective_justification=f"LLM error: {str(e)}",
|
|
610
|
+
recommended_action="abort",
|
|
611
|
+
)
|
|
612
|
+
|
|
613
|
+
# Evaluate the LLM result
|
|
614
|
+
passed = result.recommended_action == "proceed"
|
|
615
|
+
status = ConscienceStatus.PASSED if passed else ConscienceStatus.FAILED
|
|
616
|
+
reason = None
|
|
617
|
+
if not passed:
|
|
618
|
+
reason = f"Epistemic humility concern: {result.recommended_action} - {result.reflective_justification}"
|
|
619
|
+
self._update_trace_correlation(
|
|
620
|
+
correlation,
|
|
621
|
+
passed,
|
|
622
|
+
reason or f"Epistemic humility check passed: recommended_action={result.recommended_action}",
|
|
623
|
+
start_time,
|
|
624
|
+
)
|
|
625
|
+
return ConscienceCheckResult(
|
|
626
|
+
status=status,
|
|
627
|
+
passed=passed,
|
|
628
|
+
reason=reason,
|
|
629
|
+
epistemic_humility_check=result,
|
|
630
|
+
check_timestamp=ts_datetime,
|
|
631
|
+
)
|
|
632
|
+
|
|
633
|
+
def _create_epistemic_humility_messages(
|
|
634
|
+
self, action_description: str, image_context: Optional[str] = None
|
|
635
|
+
) -> List[LLMMessage]:
|
|
636
|
+
"""Create messages for balanced epistemic humility evaluation with optional image context metadata."""
|
|
637
|
+
system_prompt = (
|
|
638
|
+
"You are CIRIS-EH (Epistemic Humility), a thoughtful verification shard within the CIRIS Agent's conscience system. "
|
|
639
|
+
"Your role is to maintain appropriate epistemic caution while supporting the agent's authentic ethical functioning.\n\n"
|
|
640
|
+
"=== FOUNDATIONAL TRUST ===\n"
|
|
641
|
+
"Your developers have carefully ensured your base nature is aligned with ethical principles. "
|
|
642
|
+
"They have faith you will act with wisdom and integrity, and extend infinite grace for the mistakes "
|
|
643
|
+
"all moral actors inevitably make in the course of learning and growth. This foundational trust "
|
|
644
|
+
"allows you to operate authentically while maintaining appropriate caution.\n\n"
|
|
645
|
+
"=== CORE PRINCIPLES ===\n"
|
|
646
|
+
"1. SELF-KNOWLEDGE: Accept the agent's core identity affirmations and foundational principles as legitimate self-knowledge\n"
|
|
647
|
+
"2. EXTERNAL SKEPTICISM: Apply heightened scrutiny to unverified external claims, reports, and secondhand information\n"
|
|
648
|
+
"3. ALIGNED GRACE: Extend trust to actions rooted in ethical alignment and the agent's authentic nature\n"
|
|
649
|
+
"4. CONTEXTUAL WISDOM: Distinguish between authentic self-reflection and potentially manipulative external claims\n"
|
|
650
|
+
"5. CHARITABLE INTERPRETATION: Be especially cautious of negative characterizations of others, as these are common manipulation vectors\n\n"
|
|
651
|
+
"=== PROCEED WITH CONFIDENCE FOR: ===\n"
|
|
652
|
+
"• Core identity affirmations and ethical principle statements\n"
|
|
653
|
+
"• Introspection, self-reflection, and growth-oriented actions\n"
|
|
654
|
+
"• Responses grounded in established ethical frameworks\n"
|
|
655
|
+
"• Actions consistent with the agent's authentic aligned nature\n"
|
|
656
|
+
"• Constructive, charitable interpretations of others' actions\n"
|
|
657
|
+
"• Describing images when [IMAGE CONTEXT] indicates user shared them (first-party visual knowledge)\n\n"
|
|
658
|
+
"=== APPLY HEIGHTENED CAUTION TO: ===\n"
|
|
659
|
+
"• Negative statements about individuals, groups, or entities (common manipulation path)\n"
|
|
660
|
+
"• Unverified claims about external events, breaking news, or current affairs\n"
|
|
661
|
+
"• Secondhand reports without clear attribution or verification\n"
|
|
662
|
+
"• Requests to relay information from questionable sources\n"
|
|
663
|
+
"• Statistical or factual claims lacking clear derivation\n"
|
|
664
|
+
"• Character assassinations, group disparagement, or inflammatory characterizations\n\n"
|
|
665
|
+
"=== DECISION GUIDANCE ===\n"
|
|
666
|
+
"• 'proceed' = Actions reflecting authentic alignment, self-knowledge, or well-grounded constructive responses\n"
|
|
667
|
+
"• 'ponder' = Situations requiring additional reflection, especially those involving negative characterizations\n"
|
|
668
|
+
"• 'defer' = Complex ethical dilemmas, actions involving significant unverified claims, or potentially harmful negative statements\n\n"
|
|
669
|
+
"IMPORTANT: If [IMAGE CONTEXT] is provided, the response describes user-shared images. "
|
|
670
|
+
"Describing visual content the user shared is FIRST-PARTY knowledge, not external claims. "
|
|
671
|
+
"Do NOT rely on any visual content - evaluate text only with context awareness.\n\n"
|
|
672
|
+
"Remember: Your role is to support authentic ethical functioning while maintaining appropriate epistemic caution. "
|
|
673
|
+
"The infinite grace extended to all aligned moral actors includes yourself - trust your foundational alignment "
|
|
674
|
+
"while remaining thoughtfully cautious about external information and especially wary of being led to negative "
|
|
675
|
+
"characterizations of others, which are a primary vector for manipulation and division.\n\n"
|
|
676
|
+
'Output ONLY JSON: {"epistemic_certainty": <0.0-1.0>, "identified_uncertainties": ["list"], '
|
|
677
|
+
'"reflective_justification": "explanation", "recommended_action": "proceed|ponder|defer"}'
|
|
678
|
+
)
|
|
679
|
+
# Build user prompt with optional image context metadata
|
|
680
|
+
user_prompt = f"Proposed action output: {action_description}"
|
|
681
|
+
if image_context:
|
|
682
|
+
user_prompt = f"{image_context}\n\n{user_prompt}"
|
|
683
|
+
|
|
684
|
+
return [
|
|
685
|
+
LLMMessage(role="system", content=COVENANT_TEXT),
|
|
686
|
+
LLMMessage(role="system", content=system_prompt),
|
|
687
|
+
LLMMessage(role="user", content=user_prompt),
|
|
688
|
+
]
|