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,25 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Configuration module for CIRIS Engine.
|
|
3
|
+
|
|
4
|
+
Provides graph-based configuration with bootstrap support.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from .bootstrap import ConfigBootstrap
|
|
8
|
+
from .config_accessor import ConfigAccessor
|
|
9
|
+
from .db_paths import (
|
|
10
|
+
get_audit_db_full_path,
|
|
11
|
+
get_graph_memory_full_path,
|
|
12
|
+
get_secrets_db_full_path,
|
|
13
|
+
get_sqlite_db_full_path,
|
|
14
|
+
)
|
|
15
|
+
from .env_utils import get_env_var
|
|
16
|
+
|
|
17
|
+
__all__ = [
|
|
18
|
+
"ConfigBootstrap",
|
|
19
|
+
"ConfigAccessor",
|
|
20
|
+
"get_env_var",
|
|
21
|
+
"get_sqlite_db_full_path",
|
|
22
|
+
"get_secrets_db_full_path",
|
|
23
|
+
"get_audit_db_full_path",
|
|
24
|
+
"get_graph_memory_full_path",
|
|
25
|
+
]
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Configuration Bootstrap for Graph-Based Config System.
|
|
3
|
+
|
|
4
|
+
Loads essential configuration from multiple sources in priority order,
|
|
5
|
+
then migrates to graph-based configuration for runtime management.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import logging
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Any, Dict, Optional
|
|
11
|
+
|
|
12
|
+
import aiofiles
|
|
13
|
+
import yaml
|
|
14
|
+
|
|
15
|
+
from ciris_engine.schemas.config.essential import EssentialConfig
|
|
16
|
+
from ciris_engine.schemas.types import ConfigDict, JSONDict
|
|
17
|
+
|
|
18
|
+
from .env_utils import get_env_var
|
|
19
|
+
|
|
20
|
+
logger = logging.getLogger(__name__)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ConfigBootstrap:
|
|
24
|
+
"""Load essential config from multiple sources in priority order."""
|
|
25
|
+
|
|
26
|
+
@staticmethod
|
|
27
|
+
def _deep_merge(base: ConfigDict, update: ConfigDict) -> ConfigDict:
|
|
28
|
+
"""Recursively merge two configuration dictionaries."""
|
|
29
|
+
for key, value in update.items():
|
|
30
|
+
if key in base and isinstance(base[key], dict) and isinstance(value, dict):
|
|
31
|
+
base[key] = ConfigBootstrap._deep_merge(base[key], value) # type: ignore[arg-type]
|
|
32
|
+
else:
|
|
33
|
+
base[key] = value
|
|
34
|
+
return base
|
|
35
|
+
|
|
36
|
+
@staticmethod
|
|
37
|
+
def _apply_env_overrides(config_data: ConfigDict) -> ConfigDict:
|
|
38
|
+
"""Apply environment variable overrides to config data."""
|
|
39
|
+
from typing import cast
|
|
40
|
+
|
|
41
|
+
# Database URL (overrides main_db path if set)
|
|
42
|
+
db_url = get_env_var("CIRIS_DB_URL")
|
|
43
|
+
if db_url:
|
|
44
|
+
db_section = cast(JSONDict, config_data.setdefault("database", {}))
|
|
45
|
+
db_section["database_url"] = db_url
|
|
46
|
+
|
|
47
|
+
# Database paths
|
|
48
|
+
db_path = get_env_var("CIRIS_DB_PATH")
|
|
49
|
+
if db_path:
|
|
50
|
+
db_section = cast(JSONDict, config_data.setdefault("database", {}))
|
|
51
|
+
db_section["main_db"] = db_path
|
|
52
|
+
|
|
53
|
+
secrets_db = get_env_var("CIRIS_SECRETS_DB_PATH")
|
|
54
|
+
if secrets_db:
|
|
55
|
+
db_section = cast(JSONDict, config_data.setdefault("database", {}))
|
|
56
|
+
db_section["secrets_db"] = secrets_db
|
|
57
|
+
|
|
58
|
+
audit_db = get_env_var("CIRIS_AUDIT_DB_PATH")
|
|
59
|
+
if audit_db:
|
|
60
|
+
db_section = cast(JSONDict, config_data.setdefault("database", {}))
|
|
61
|
+
db_section["audit_db"] = audit_db
|
|
62
|
+
|
|
63
|
+
# Service endpoints
|
|
64
|
+
llm_endpoint = get_env_var("OPENAI_API_BASE") or get_env_var("LLM_ENDPOINT")
|
|
65
|
+
if llm_endpoint:
|
|
66
|
+
services_section = cast(JSONDict, config_data.setdefault("services", {}))
|
|
67
|
+
services_section["llm_endpoint"] = llm_endpoint
|
|
68
|
+
|
|
69
|
+
llm_model = get_env_var("OPENAI_MODEL_NAME") or get_env_var("OPENAI_MODEL") or get_env_var("LLM_MODEL")
|
|
70
|
+
if llm_model:
|
|
71
|
+
services_section = cast(JSONDict, config_data.setdefault("services", {}))
|
|
72
|
+
services_section["llm_model"] = llm_model
|
|
73
|
+
|
|
74
|
+
# Security settings
|
|
75
|
+
retention_days = get_env_var("AUDIT_RETENTION_DAYS")
|
|
76
|
+
if retention_days:
|
|
77
|
+
try:
|
|
78
|
+
security_section = cast(JSONDict, config_data.setdefault("security", {}))
|
|
79
|
+
security_section["audit_retention_days"] = int(retention_days)
|
|
80
|
+
except ValueError:
|
|
81
|
+
logger.warning(f"Invalid AUDIT_RETENTION_DAYS value: {retention_days}")
|
|
82
|
+
|
|
83
|
+
# Operational limits
|
|
84
|
+
max_tasks = get_env_var("MAX_ACTIVE_TASKS")
|
|
85
|
+
if max_tasks:
|
|
86
|
+
try:
|
|
87
|
+
limits_section = cast(JSONDict, config_data.setdefault("limits", {}))
|
|
88
|
+
limits_section["max_active_tasks"] = int(max_tasks)
|
|
89
|
+
except ValueError:
|
|
90
|
+
logger.warning(f"Invalid MAX_ACTIVE_TASKS value: {max_tasks}")
|
|
91
|
+
|
|
92
|
+
max_depth = get_env_var("MAX_THOUGHT_DEPTH")
|
|
93
|
+
if max_depth:
|
|
94
|
+
try:
|
|
95
|
+
security_section = cast(JSONDict, config_data.setdefault("security", {}))
|
|
96
|
+
security_section["max_thought_depth"] = int(max_depth)
|
|
97
|
+
except ValueError:
|
|
98
|
+
logger.warning(f"Invalid MAX_THOUGHT_DEPTH value: {max_depth}")
|
|
99
|
+
|
|
100
|
+
# Runtime settings
|
|
101
|
+
log_level = get_env_var("LOG_LEVEL")
|
|
102
|
+
if log_level:
|
|
103
|
+
config_data["log_level"] = log_level.upper()
|
|
104
|
+
|
|
105
|
+
debug_mode = get_env_var("DEBUG_MODE")
|
|
106
|
+
if debug_mode:
|
|
107
|
+
config_data["debug_mode"] = debug_mode.lower() in ("true", "1", "yes", "on")
|
|
108
|
+
|
|
109
|
+
# Agent template (only used for first-time identity creation)
|
|
110
|
+
template = get_env_var("CIRIS_TEMPLATE")
|
|
111
|
+
if template:
|
|
112
|
+
config_data["default_template"] = template
|
|
113
|
+
|
|
114
|
+
return config_data
|
|
115
|
+
|
|
116
|
+
@staticmethod
|
|
117
|
+
def _resolve_database_paths(config_data: ConfigDict) -> ConfigDict:
|
|
118
|
+
"""Resolve relative database paths to use proper data directory.
|
|
119
|
+
|
|
120
|
+
If database paths are relative (not absolute), resolve them against
|
|
121
|
+
get_data_dir() to ensure they use the correct location based on
|
|
122
|
+
runtime environment (development/installed/managed mode).
|
|
123
|
+
"""
|
|
124
|
+
from typing import cast
|
|
125
|
+
|
|
126
|
+
from ciris_engine.logic.utils.path_resolution import get_data_dir
|
|
127
|
+
|
|
128
|
+
db_section = cast(JSONDict, config_data.get("database", {}))
|
|
129
|
+
data_dir = get_data_dir()
|
|
130
|
+
|
|
131
|
+
# Set or resolve main_db
|
|
132
|
+
if "main_db" not in db_section:
|
|
133
|
+
# Use schema default but resolved to proper data directory
|
|
134
|
+
db_section["main_db"] = str(data_dir / "ciris_engine.db")
|
|
135
|
+
else:
|
|
136
|
+
main_db = Path(str(db_section["main_db"]))
|
|
137
|
+
if not main_db.is_absolute():
|
|
138
|
+
# For relative paths, use just the filename (strip any data/ prefix)
|
|
139
|
+
db_section["main_db"] = str(data_dir / main_db.name)
|
|
140
|
+
|
|
141
|
+
# Set or resolve secrets_db
|
|
142
|
+
if "secrets_db" not in db_section:
|
|
143
|
+
db_section["secrets_db"] = str(data_dir / "secrets.db")
|
|
144
|
+
else:
|
|
145
|
+
secrets_db = Path(str(db_section["secrets_db"]))
|
|
146
|
+
if not secrets_db.is_absolute():
|
|
147
|
+
db_section["secrets_db"] = str(data_dir / secrets_db.name)
|
|
148
|
+
|
|
149
|
+
# Set or resolve audit_db
|
|
150
|
+
if "audit_db" not in db_section:
|
|
151
|
+
db_section["audit_db"] = str(data_dir / "ciris_audit.db")
|
|
152
|
+
else:
|
|
153
|
+
audit_db = Path(str(db_section["audit_db"]))
|
|
154
|
+
if not audit_db.is_absolute():
|
|
155
|
+
db_section["audit_db"] = str(data_dir / audit_db.name)
|
|
156
|
+
|
|
157
|
+
config_data["database"] = db_section
|
|
158
|
+
return config_data
|
|
159
|
+
|
|
160
|
+
@staticmethod
|
|
161
|
+
async def load_essential_config(
|
|
162
|
+
config_path: Optional[Path] = None, cli_overrides: Optional[ConfigDict] = None
|
|
163
|
+
) -> EssentialConfig:
|
|
164
|
+
"""
|
|
165
|
+
Load essential configuration from multiple sources.
|
|
166
|
+
|
|
167
|
+
Priority order (highest to lowest):
|
|
168
|
+
1. CLI arguments (if provided)
|
|
169
|
+
2. Environment variables
|
|
170
|
+
3. Configuration file (YAML)
|
|
171
|
+
4. Schema defaults
|
|
172
|
+
|
|
173
|
+
Args:
|
|
174
|
+
config_path: Optional path to YAML config file
|
|
175
|
+
cli_overrides: Optional CLI argument overrides
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
Validated EssentialConfig instance
|
|
179
|
+
"""
|
|
180
|
+
# Start with empty config data
|
|
181
|
+
config_data: ConfigDict = {}
|
|
182
|
+
|
|
183
|
+
# Load from YAML file if exists
|
|
184
|
+
yaml_path = config_path or Path("config/essential.yaml")
|
|
185
|
+
if yaml_path.exists():
|
|
186
|
+
try:
|
|
187
|
+
async with aiofiles.open(yaml_path, "r") as f:
|
|
188
|
+
yaml_content = await f.read()
|
|
189
|
+
yaml_data = yaml.safe_load(yaml_content) or {}
|
|
190
|
+
config_data = ConfigBootstrap._deep_merge(config_data, yaml_data)
|
|
191
|
+
logger.info(f"Loaded configuration from {yaml_path}")
|
|
192
|
+
except Exception as e:
|
|
193
|
+
logger.warning(f"Failed to load YAML config from {yaml_path}: {e}")
|
|
194
|
+
|
|
195
|
+
# Apply environment variable overrides
|
|
196
|
+
config_data = ConfigBootstrap._apply_env_overrides(config_data)
|
|
197
|
+
|
|
198
|
+
# Apply CLI overrides (highest priority)
|
|
199
|
+
if cli_overrides:
|
|
200
|
+
config_data = ConfigBootstrap._deep_merge(config_data, cli_overrides)
|
|
201
|
+
|
|
202
|
+
# Ensure database section exists with schema defaults if not present
|
|
203
|
+
if "database" not in config_data:
|
|
204
|
+
config_data["database"] = {}
|
|
205
|
+
|
|
206
|
+
# Resolve relative database paths to use proper data directory
|
|
207
|
+
config_data = ConfigBootstrap._resolve_database_paths(config_data)
|
|
208
|
+
|
|
209
|
+
# Create and validate config
|
|
210
|
+
try:
|
|
211
|
+
essential_config = EssentialConfig(**config_data)
|
|
212
|
+
logger.info("Essential configuration loaded and validated")
|
|
213
|
+
return essential_config
|
|
214
|
+
except Exception as e:
|
|
215
|
+
logger.error(f"Configuration validation failed: {e}")
|
|
216
|
+
raise ValueError(f"Invalid configuration: {e}") from e
|
|
217
|
+
|
|
218
|
+
@staticmethod
|
|
219
|
+
def get_config_metadata(config: EssentialConfig, yaml_path: Optional[Path] = None) -> JSONDict:
|
|
220
|
+
"""
|
|
221
|
+
Generate metadata about config sources for migration to graph.
|
|
222
|
+
|
|
223
|
+
Returns dict mapping config keys to their source information
|
|
224
|
+
(source, env_var/file, bootstrap_phase flag).
|
|
225
|
+
"""
|
|
226
|
+
metadata: JSONDict = {}
|
|
227
|
+
|
|
228
|
+
# Check which values came from environment
|
|
229
|
+
env_sources = {
|
|
230
|
+
"database.main_db": "CIRIS_DB_PATH",
|
|
231
|
+
"database.secrets_db": "CIRIS_SECRETS_DB_PATH",
|
|
232
|
+
"database.audit_db": "CIRIS_AUDIT_DB_PATH",
|
|
233
|
+
"services.llm_endpoint": "OPENAI_API_BASE",
|
|
234
|
+
"services.llm_model": "OPENAI_MODEL",
|
|
235
|
+
"security.audit_retention_days": "AUDIT_RETENTION_DAYS",
|
|
236
|
+
"limits.max_active_tasks": "MAX_ACTIVE_TASKS",
|
|
237
|
+
"security.max_thought_depth": "MAX_THOUGHT_DEPTH",
|
|
238
|
+
"log_level": "LOG_LEVEL",
|
|
239
|
+
"debug_mode": "DEBUG_MODE",
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
for key, env_var in env_sources.items():
|
|
243
|
+
if get_env_var(env_var):
|
|
244
|
+
metadata[key] = {"source": "env_var", "env_var": env_var, "bootstrap_phase": True}
|
|
245
|
+
|
|
246
|
+
# Mark file-sourced configs
|
|
247
|
+
if yaml_path and yaml_path.exists():
|
|
248
|
+
# Would need to track which specific values came from file
|
|
249
|
+
# For now, mark all non-env values as file-sourced
|
|
250
|
+
for key in ["database", "services", "security", "limits"]:
|
|
251
|
+
if key not in metadata:
|
|
252
|
+
metadata[key] = {"source": "config_file", "file": str(yaml_path), "bootstrap_phase": True}
|
|
253
|
+
|
|
254
|
+
# Everything else is from defaults
|
|
255
|
+
return metadata
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Unified Configuration Access with Graph + Bootstrap Fallback.
|
|
3
|
+
|
|
4
|
+
Provides a consistent interface for services to access configuration,
|
|
5
|
+
whether from the graph or bootstrap phase.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import logging
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Any, Dict, Optional
|
|
11
|
+
|
|
12
|
+
from ciris_engine.protocols.services.graph.config import GraphConfigServiceProtocol
|
|
13
|
+
from ciris_engine.schemas.config.essential import EssentialConfig
|
|
14
|
+
from ciris_engine.schemas.types import ConfigDict
|
|
15
|
+
|
|
16
|
+
logger = logging.getLogger(__name__)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class ConfigAccessor:
|
|
20
|
+
"""
|
|
21
|
+
Unified config access with graph + fallback.
|
|
22
|
+
|
|
23
|
+
Services use this instead of direct config objects, enabling:
|
|
24
|
+
- Runtime config updates without restart
|
|
25
|
+
- Graceful fallback during bootstrap
|
|
26
|
+
- Type-safe access patterns
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
def __init__(self, graph_config: Optional[GraphConfigServiceProtocol], bootstrap_config: EssentialConfig):
|
|
30
|
+
"""
|
|
31
|
+
Initialize config accessor.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
graph_config: GraphConfigService (may be None during bootstrap)
|
|
35
|
+
bootstrap_config: Essential config loaded at startup
|
|
36
|
+
"""
|
|
37
|
+
self.graph = graph_config
|
|
38
|
+
self.bootstrap = bootstrap_config
|
|
39
|
+
self._graph_available = graph_config is not None
|
|
40
|
+
|
|
41
|
+
def set_graph_service(self, graph_config: GraphConfigServiceProtocol) -> None:
|
|
42
|
+
"""Set graph service after it becomes available."""
|
|
43
|
+
self.graph = graph_config
|
|
44
|
+
self._graph_available = True
|
|
45
|
+
logger.info("GraphConfigService now available for configuration")
|
|
46
|
+
|
|
47
|
+
async def get(self, key: str, default: Any = None) -> Any:
|
|
48
|
+
"""
|
|
49
|
+
Get configuration value.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
key: Dot-separated config key (e.g., "database.main_db")
|
|
53
|
+
default: Default value if not found
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
Configuration value or default
|
|
57
|
+
"""
|
|
58
|
+
# Try graph first if available
|
|
59
|
+
if self._graph_available and self.graph:
|
|
60
|
+
try:
|
|
61
|
+
node = await self.graph.get_config(key)
|
|
62
|
+
if node and node.value:
|
|
63
|
+
# Handle ConfigValue wrapper
|
|
64
|
+
if hasattr(node.value, "string_value"):
|
|
65
|
+
# It's a ConfigValue object
|
|
66
|
+
if node.value.string_value is not None:
|
|
67
|
+
return node.value.string_value
|
|
68
|
+
elif node.value.int_value is not None:
|
|
69
|
+
return node.value.int_value
|
|
70
|
+
elif node.value.float_value is not None:
|
|
71
|
+
return node.value.float_value
|
|
72
|
+
elif node.value.bool_value is not None:
|
|
73
|
+
return node.value.bool_value
|
|
74
|
+
elif node.value.list_value is not None:
|
|
75
|
+
return node.value.list_value
|
|
76
|
+
elif node.value.dict_value is not None:
|
|
77
|
+
return node.value.dict_value
|
|
78
|
+
else:
|
|
79
|
+
# Direct value
|
|
80
|
+
return node.value
|
|
81
|
+
except Exception as e:
|
|
82
|
+
logger.warning(f"Failed to get config '{key}' from graph: {e}")
|
|
83
|
+
|
|
84
|
+
# Fall back to bootstrap config
|
|
85
|
+
return self._get_from_bootstrap(key, default)
|
|
86
|
+
|
|
87
|
+
def _get_from_bootstrap(self, key: str, default: Any = None) -> Any:
|
|
88
|
+
"""Get value from bootstrap config."""
|
|
89
|
+
parts = key.split(".")
|
|
90
|
+
value = self.bootstrap
|
|
91
|
+
|
|
92
|
+
try:
|
|
93
|
+
for part in parts:
|
|
94
|
+
if hasattr(value, part):
|
|
95
|
+
value = getattr(value, part)
|
|
96
|
+
elif hasattr(value, "__getitem__"):
|
|
97
|
+
try:
|
|
98
|
+
value = value[part]
|
|
99
|
+
except (KeyError, TypeError):
|
|
100
|
+
return default
|
|
101
|
+
else:
|
|
102
|
+
return default
|
|
103
|
+
|
|
104
|
+
# Convert Path objects to strings for compatibility
|
|
105
|
+
if isinstance(value, Path):
|
|
106
|
+
return str(value)
|
|
107
|
+
|
|
108
|
+
return value
|
|
109
|
+
except Exception as e:
|
|
110
|
+
logger.debug(f"Failed to get '{key}' from bootstrap: {e}")
|
|
111
|
+
return default
|
|
112
|
+
|
|
113
|
+
async def get_int(self, key: str, default: int = 0) -> int:
|
|
114
|
+
"""Get integer configuration value."""
|
|
115
|
+
value = await self.get(key, default)
|
|
116
|
+
try:
|
|
117
|
+
return int(value)
|
|
118
|
+
except (TypeError, ValueError):
|
|
119
|
+
logger.warning(f"Config value '{key}' is not a valid integer: {value}")
|
|
120
|
+
return default
|
|
121
|
+
|
|
122
|
+
async def get_float(self, key: str, default: float = 0.0) -> float:
|
|
123
|
+
"""Get float configuration value."""
|
|
124
|
+
value = await self.get(key, default)
|
|
125
|
+
try:
|
|
126
|
+
return float(value)
|
|
127
|
+
except (TypeError, ValueError):
|
|
128
|
+
logger.warning(f"Config value '{key}' is not a valid float: {value}")
|
|
129
|
+
return default
|
|
130
|
+
|
|
131
|
+
async def get_bool(self, key: str, default: bool = False) -> bool:
|
|
132
|
+
"""Get boolean configuration value."""
|
|
133
|
+
value = await self.get(key, default)
|
|
134
|
+
if isinstance(value, bool):
|
|
135
|
+
return value
|
|
136
|
+
if isinstance(value, str):
|
|
137
|
+
return value.lower() in ("true", "1", "yes", "on")
|
|
138
|
+
return bool(value)
|
|
139
|
+
|
|
140
|
+
async def get_str(self, key: str, default: str = "") -> str:
|
|
141
|
+
"""Get string configuration value."""
|
|
142
|
+
value = await self.get(key, default)
|
|
143
|
+
return str(value) if value is not None else default
|
|
144
|
+
|
|
145
|
+
async def get_path(self, key: str, default: Optional[Path] = None) -> Path:
|
|
146
|
+
"""Get Path configuration value."""
|
|
147
|
+
value = await self.get(key, default)
|
|
148
|
+
if value is None:
|
|
149
|
+
return default or Path()
|
|
150
|
+
if isinstance(value, Path):
|
|
151
|
+
return value
|
|
152
|
+
return Path(str(value))
|
|
153
|
+
|
|
154
|
+
async def exists(self, key: str) -> bool:
|
|
155
|
+
"""Check if configuration key exists."""
|
|
156
|
+
value = await self.get(key, sentinel := object())
|
|
157
|
+
return value is not sentinel
|
|
158
|
+
|
|
159
|
+
async def get_section(self, prefix: str) -> ConfigDict:
|
|
160
|
+
"""
|
|
161
|
+
Get all config values under a prefix.
|
|
162
|
+
|
|
163
|
+
Args:
|
|
164
|
+
prefix: Key prefix (e.g., "database")
|
|
165
|
+
|
|
166
|
+
Returns:
|
|
167
|
+
Dict of config values under that prefix
|
|
168
|
+
"""
|
|
169
|
+
if self._graph_available and self.graph:
|
|
170
|
+
try:
|
|
171
|
+
configs = await self.graph.list_configs(prefix=prefix)
|
|
172
|
+
return configs
|
|
173
|
+
except Exception as e:
|
|
174
|
+
logger.warning(f"Failed to get config section '{prefix}' from graph: {e}")
|
|
175
|
+
|
|
176
|
+
# Fall back to bootstrap
|
|
177
|
+
return self._get_section_from_bootstrap(prefix)
|
|
178
|
+
|
|
179
|
+
def _get_section_from_bootstrap(self, prefix: str) -> ConfigDict:
|
|
180
|
+
"""Get config section from bootstrap config."""
|
|
181
|
+
parts = prefix.split(".")
|
|
182
|
+
value = self.bootstrap
|
|
183
|
+
|
|
184
|
+
try:
|
|
185
|
+
for part in parts:
|
|
186
|
+
if hasattr(value, part):
|
|
187
|
+
value = getattr(value, part)
|
|
188
|
+
else:
|
|
189
|
+
return {}
|
|
190
|
+
|
|
191
|
+
# Convert to dict if it's a Pydantic model
|
|
192
|
+
if hasattr(value, "model_dump"):
|
|
193
|
+
return value.model_dump()
|
|
194
|
+
elif hasattr(value, "dict"):
|
|
195
|
+
return value.dict()
|
|
196
|
+
elif hasattr(value, "__getitem__") and hasattr(value, "keys"):
|
|
197
|
+
return dict(value)
|
|
198
|
+
else:
|
|
199
|
+
return {}
|
|
200
|
+
except Exception as e:
|
|
201
|
+
logger.debug(f"Failed to get section '{prefix}' from bootstrap: {e}")
|
|
202
|
+
return {}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Database path utilities for the new config system.
|
|
3
|
+
|
|
4
|
+
Provides compatibility functions for getting database paths.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from typing import Optional
|
|
9
|
+
from urllib.parse import urlparse, urlunparse
|
|
10
|
+
|
|
11
|
+
from ciris_engine.schemas.config.essential import EssentialConfig
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _get_config_from_registry() -> Optional[EssentialConfig]:
|
|
15
|
+
"""Get EssentialConfig from the service registry.
|
|
16
|
+
|
|
17
|
+
Returns:
|
|
18
|
+
EssentialConfig instance or None if not available
|
|
19
|
+
"""
|
|
20
|
+
try:
|
|
21
|
+
from ciris_engine.logic.registries.base import ServiceRegistry
|
|
22
|
+
from ciris_engine.schemas.runtime.enums import ServiceType
|
|
23
|
+
|
|
24
|
+
registry = ServiceRegistry()
|
|
25
|
+
config_services = registry.get_services_by_type(ServiceType.CONFIG)
|
|
26
|
+
|
|
27
|
+
if config_services:
|
|
28
|
+
config_service = config_services[0]
|
|
29
|
+
if hasattr(config_service, "essential_config"):
|
|
30
|
+
config: Optional[EssentialConfig] = getattr(config_service, "essential_config", None)
|
|
31
|
+
return config
|
|
32
|
+
elif hasattr(config_service, "_config"):
|
|
33
|
+
config = getattr(config_service, "_config", None)
|
|
34
|
+
return config
|
|
35
|
+
|
|
36
|
+
return None
|
|
37
|
+
except (ImportError, AttributeError):
|
|
38
|
+
return None
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _modify_database_name_in_url(base_url: str, suffix: str) -> str:
|
|
42
|
+
"""Modify the database name in a PostgreSQL URL while preserving query parameters.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
base_url: Original PostgreSQL URL (e.g., postgresql://user:pass@host:port/dbname?sslmode=require)
|
|
46
|
+
suffix: Suffix to append to database name (e.g., "_secrets", "_auth")
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
Modified URL with suffix added to database name, query params preserved
|
|
50
|
+
|
|
51
|
+
Example:
|
|
52
|
+
>>> _modify_database_name_in_url("postgresql://user:pass@host:5432/db?sslmode=require", "_secrets")
|
|
53
|
+
"postgresql://user:pass@host:5432/db_secrets?sslmode=require"
|
|
54
|
+
"""
|
|
55
|
+
parsed = urlparse(base_url)
|
|
56
|
+
|
|
57
|
+
# Extract database name from path (remove leading /)
|
|
58
|
+
db_name = parsed.path.lstrip("/")
|
|
59
|
+
|
|
60
|
+
# Add suffix to database name
|
|
61
|
+
new_db_name = f"{db_name}{suffix}"
|
|
62
|
+
|
|
63
|
+
# Reconstruct path with leading /
|
|
64
|
+
new_path = f"/{new_db_name}"
|
|
65
|
+
|
|
66
|
+
# Reconstruct URL with new path, preserving all other components
|
|
67
|
+
return urlunparse(
|
|
68
|
+
(
|
|
69
|
+
parsed.scheme, # scheme (postgresql)
|
|
70
|
+
parsed.netloc, # netloc (user:pass@host:port)
|
|
71
|
+
new_path, # path (/db_secrets)
|
|
72
|
+
parsed.params, # params (empty for PostgreSQL URLs)
|
|
73
|
+
parsed.query, # query (sslmode=require)
|
|
74
|
+
parsed.fragment, # fragment (empty for PostgreSQL URLs)
|
|
75
|
+
)
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def get_sqlite_db_full_path(config: Optional[EssentialConfig] = None) -> str:
|
|
80
|
+
"""
|
|
81
|
+
Get the full path to the main SQLite database.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
config: Optional EssentialConfig instance. If not provided, will attempt
|
|
85
|
+
to get from the config service via ServiceRegistry.
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
Full path to the SQLite database file
|
|
89
|
+
|
|
90
|
+
Raises:
|
|
91
|
+
RuntimeError: If no config is available from any source
|
|
92
|
+
"""
|
|
93
|
+
if config is None:
|
|
94
|
+
# Try to get config from the service registry
|
|
95
|
+
try:
|
|
96
|
+
from ciris_engine.logic.registries.base import get_global_registry
|
|
97
|
+
from ciris_engine.schemas.runtime.enums import ServiceType
|
|
98
|
+
|
|
99
|
+
# Use the global registry singleton
|
|
100
|
+
registry = get_global_registry()
|
|
101
|
+
config_services = registry.get_services_by_type(ServiceType.CONFIG)
|
|
102
|
+
|
|
103
|
+
if config_services:
|
|
104
|
+
config_service = config_services[0]
|
|
105
|
+
if hasattr(config_service, "essential_config"):
|
|
106
|
+
config = config_service.essential_config
|
|
107
|
+
elif hasattr(config_service, "_config"):
|
|
108
|
+
config = config_service._config
|
|
109
|
+
|
|
110
|
+
if config is None:
|
|
111
|
+
# FAIL FAST AND LOUD - no fallback to defaults
|
|
112
|
+
raise RuntimeError(
|
|
113
|
+
"No configuration available from config service. "
|
|
114
|
+
"The system must be properly initialized with configuration."
|
|
115
|
+
)
|
|
116
|
+
except (ImportError, AttributeError) as e:
|
|
117
|
+
# FAIL FAST AND LOUD - no fallback to defaults
|
|
118
|
+
raise RuntimeError(
|
|
119
|
+
f"Cannot access config service: {e}. " "The system must be properly initialized with configuration."
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
# Prefer database_url if set (supports PostgreSQL), otherwise use main_db path
|
|
123
|
+
if config.database.database_url:
|
|
124
|
+
return config.database.database_url
|
|
125
|
+
|
|
126
|
+
db_path = Path(config.database.main_db)
|
|
127
|
+
db_path.parent.mkdir(parents=True, exist_ok=True)
|
|
128
|
+
return str(db_path.resolve())
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def get_secrets_db_full_path(config: Optional[EssentialConfig] = None) -> str:
|
|
132
|
+
"""
|
|
133
|
+
Get the full path to the secrets database.
|
|
134
|
+
|
|
135
|
+
For PostgreSQL: Modifies the database name in the URL (e.g., ciris_db -> ciris_db_secrets)
|
|
136
|
+
For SQLite: Returns the configured secrets_db path
|
|
137
|
+
|
|
138
|
+
Args:
|
|
139
|
+
config: Optional EssentialConfig instance. If not provided, will attempt
|
|
140
|
+
to get from the config service via ServiceRegistry.
|
|
141
|
+
|
|
142
|
+
Returns:
|
|
143
|
+
Full path to the secrets database file or modified PostgreSQL URL
|
|
144
|
+
"""
|
|
145
|
+
if config is None:
|
|
146
|
+
config = _get_config_from_registry()
|
|
147
|
+
if config is None:
|
|
148
|
+
# For secrets db, we can fall back to defaults as it's less critical
|
|
149
|
+
config = EssentialConfig()
|
|
150
|
+
|
|
151
|
+
# If using PostgreSQL (database_url is set), modify the database name
|
|
152
|
+
if config.database.database_url:
|
|
153
|
+
return _modify_database_name_in_url(config.database.database_url, "_secrets")
|
|
154
|
+
|
|
155
|
+
# SQLite: use configured path
|
|
156
|
+
db_path = Path(config.database.secrets_db)
|
|
157
|
+
db_path.parent.mkdir(parents=True, exist_ok=True)
|
|
158
|
+
return str(db_path.resolve())
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def get_audit_db_full_path(config: Optional[EssentialConfig] = None) -> str:
|
|
162
|
+
"""
|
|
163
|
+
Get the full path to the audit database.
|
|
164
|
+
|
|
165
|
+
For PostgreSQL: Modifies the database name in the URL (e.g., ciris_db -> ciris_db_auth)
|
|
166
|
+
For SQLite: Returns the configured audit_db path
|
|
167
|
+
|
|
168
|
+
Args:
|
|
169
|
+
config: Optional EssentialConfig instance. If not provided, will attempt
|
|
170
|
+
to get from the config service via ServiceRegistry.
|
|
171
|
+
|
|
172
|
+
Returns:
|
|
173
|
+
Full path to the audit database file or modified PostgreSQL URL
|
|
174
|
+
"""
|
|
175
|
+
if config is None:
|
|
176
|
+
config = _get_config_from_registry()
|
|
177
|
+
if config is None:
|
|
178
|
+
# For audit db, we can fall back to defaults as it's less critical
|
|
179
|
+
config = EssentialConfig()
|
|
180
|
+
|
|
181
|
+
# If using PostgreSQL (database_url is set), modify the database name
|
|
182
|
+
if config.database.database_url:
|
|
183
|
+
return _modify_database_name_in_url(config.database.database_url, "_auth")
|
|
184
|
+
|
|
185
|
+
# SQLite: use configured path
|
|
186
|
+
db_path = Path(config.database.audit_db)
|
|
187
|
+
db_path.parent.mkdir(parents=True, exist_ok=True)
|
|
188
|
+
return str(db_path.resolve())
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
# For backward compatibility - uses defaults
|
|
192
|
+
def get_graph_memory_full_path() -> str:
|
|
193
|
+
"""Legacy function - graph memory is now in the main database."""
|
|
194
|
+
return get_sqlite_db_full_path()
|