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,414 @@
|
|
|
1
|
+
"""Authentication Store - Database operations for WA certificates.
|
|
2
|
+
|
|
3
|
+
This module provides a database-agnostic persistence layer for Wise Authority (WA)
|
|
4
|
+
certificates, supporting both SQLite and PostgreSQL backends via get_db_connection().
|
|
5
|
+
|
|
6
|
+
Pattern: Follows SecretsService store pattern for separation of concerns.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import json
|
|
10
|
+
import logging
|
|
11
|
+
from typing import Any, Dict, List, Optional
|
|
12
|
+
|
|
13
|
+
from ciris_engine.logic.persistence.db import get_db_connection
|
|
14
|
+
from ciris_engine.schemas.services.authority_core import OAuthIdentityLink, WACertificate
|
|
15
|
+
|
|
16
|
+
logger = logging.getLogger(__name__)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _row_to_wa(row_dict: Dict[str, Any]) -> WACertificate:
|
|
20
|
+
"""Convert a database row dictionary to a WACertificate instance.
|
|
21
|
+
|
|
22
|
+
Args:
|
|
23
|
+
row_dict: Database row as dictionary
|
|
24
|
+
|
|
25
|
+
Returns:
|
|
26
|
+
WACertificate instance
|
|
27
|
+
"""
|
|
28
|
+
from ciris_engine.logic.persistence.stores.auth_helpers import build_wa_certificate_dict
|
|
29
|
+
|
|
30
|
+
wa_dict = build_wa_certificate_dict(row_dict)
|
|
31
|
+
return WACertificate(**wa_dict)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def init_auth_database(db_path: str) -> None:
|
|
35
|
+
"""Initialize authentication database tables if needed.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
db_path: Database connection string (SQLite path or PostgreSQL URL)
|
|
39
|
+
"""
|
|
40
|
+
from ciris_engine.logic.persistence.db.dialect import DialectAdapter
|
|
41
|
+
|
|
42
|
+
# Create adapter from db_path to determine database type
|
|
43
|
+
# This avoids race conditions with global adapter in parallel tests
|
|
44
|
+
adapter = DialectAdapter(db_path)
|
|
45
|
+
is_postgres = adapter.is_postgresql()
|
|
46
|
+
|
|
47
|
+
# Import appropriate table definition based on database type
|
|
48
|
+
if is_postgres:
|
|
49
|
+
from ciris_engine.schemas.persistence.postgres.tables import WA_CERT_TABLE_V1
|
|
50
|
+
else:
|
|
51
|
+
from ciris_engine.schemas.persistence.sqlite.tables import WA_CERT_TABLE_V1
|
|
52
|
+
|
|
53
|
+
with get_db_connection(db_path=db_path) as conn:
|
|
54
|
+
if is_postgres:
|
|
55
|
+
# PostgreSQL: Execute statements individually
|
|
56
|
+
statements = [s.strip() for s in WA_CERT_TABLE_V1.split(";") if s.strip()]
|
|
57
|
+
cursor = conn.cursor()
|
|
58
|
+
for statement in statements:
|
|
59
|
+
cursor.execute(statement)
|
|
60
|
+
cursor.close()
|
|
61
|
+
else:
|
|
62
|
+
# SQLite: Use executescript and PRAGMA
|
|
63
|
+
conn.execute("PRAGMA foreign_keys = ON")
|
|
64
|
+
conn.executescript(WA_CERT_TABLE_V1)
|
|
65
|
+
|
|
66
|
+
# Backfill newer columns when running against existing databases
|
|
67
|
+
# Get table info to check existing columns
|
|
68
|
+
cursor = conn.cursor()
|
|
69
|
+
|
|
70
|
+
if is_postgres:
|
|
71
|
+
# PostgreSQL: Query information_schema
|
|
72
|
+
cursor.execute(
|
|
73
|
+
"""
|
|
74
|
+
SELECT column_name
|
|
75
|
+
FROM information_schema.columns
|
|
76
|
+
WHERE table_name = 'wa_cert'
|
|
77
|
+
"""
|
|
78
|
+
)
|
|
79
|
+
existing_columns = {row[0] if isinstance(row, tuple) else row["column_name"] for row in cursor.fetchall()}
|
|
80
|
+
else:
|
|
81
|
+
# SQLite: Use PRAGMA
|
|
82
|
+
cursor.execute("PRAGMA table_info(wa_cert)")
|
|
83
|
+
existing_columns = {row[1] for row in cursor.fetchall()}
|
|
84
|
+
|
|
85
|
+
# Column migrations for backward compatibility
|
|
86
|
+
column_migrations = {
|
|
87
|
+
"custom_permissions_json": "ALTER TABLE wa_cert ADD COLUMN custom_permissions_json TEXT",
|
|
88
|
+
"adapter_name": "ALTER TABLE wa_cert ADD COLUMN adapter_name TEXT",
|
|
89
|
+
"adapter_metadata_json": "ALTER TABLE wa_cert ADD COLUMN adapter_metadata_json TEXT",
|
|
90
|
+
"oauth_links_json": "ALTER TABLE wa_cert ADD COLUMN oauth_links_json TEXT",
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
for column_name, ddl in column_migrations.items():
|
|
94
|
+
if column_name not in existing_columns:
|
|
95
|
+
cursor.execute(ddl)
|
|
96
|
+
|
|
97
|
+
cursor.close()
|
|
98
|
+
conn.commit()
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def store_wa_certificate(wa: WACertificate, db_path: str) -> None:
|
|
102
|
+
"""Store a WA certificate in the database.
|
|
103
|
+
|
|
104
|
+
Args:
|
|
105
|
+
wa: WACertificate to store
|
|
106
|
+
db_path: Database connection string
|
|
107
|
+
"""
|
|
108
|
+
from datetime import datetime
|
|
109
|
+
|
|
110
|
+
with get_db_connection(db_path=db_path) as conn:
|
|
111
|
+
# Convert WA to dict for insertion
|
|
112
|
+
wa_dict = wa.model_dump()
|
|
113
|
+
|
|
114
|
+
# Map schema fields to database fields
|
|
115
|
+
db_dict = {
|
|
116
|
+
"wa_id": wa_dict["wa_id"],
|
|
117
|
+
"name": wa_dict["name"],
|
|
118
|
+
"role": wa_dict["role"],
|
|
119
|
+
"pubkey": wa_dict["pubkey"],
|
|
120
|
+
"jwt_kid": wa_dict["jwt_kid"],
|
|
121
|
+
"password_hash": wa_dict.get("password_hash"),
|
|
122
|
+
"api_key_hash": wa_dict.get("api_key_hash"),
|
|
123
|
+
"oauth_provider": wa_dict.get("oauth_provider"),
|
|
124
|
+
"oauth_external_id": wa_dict.get("oauth_external_id"),
|
|
125
|
+
"veilid_id": wa_dict.get("veilid_id"),
|
|
126
|
+
"oauth_links_json": (
|
|
127
|
+
json.dumps([link.model_dump(mode="json") for link in wa_dict.get("oauth_links", [])])
|
|
128
|
+
if wa_dict.get("oauth_links")
|
|
129
|
+
else None
|
|
130
|
+
),
|
|
131
|
+
"auto_minted": int(wa_dict.get("auto_minted", False)),
|
|
132
|
+
"parent_wa_id": wa_dict.get("parent_wa_id"),
|
|
133
|
+
"parent_signature": wa_dict.get("parent_signature"),
|
|
134
|
+
"scopes_json": wa_dict["scopes_json"],
|
|
135
|
+
"custom_permissions_json": wa_dict.get("custom_permissions_json"),
|
|
136
|
+
"adapter_id": wa_dict.get("adapter_id"),
|
|
137
|
+
"adapter_name": wa_dict.get("adapter_name"),
|
|
138
|
+
"adapter_metadata_json": wa_dict.get("adapter_metadata_json"),
|
|
139
|
+
"token_type": wa_dict.get("token_type", "standard"),
|
|
140
|
+
"created": (
|
|
141
|
+
wa_dict["created_at"].isoformat()
|
|
142
|
+
if isinstance(wa_dict["created_at"], datetime)
|
|
143
|
+
else wa_dict["created_at"]
|
|
144
|
+
),
|
|
145
|
+
"last_login": (
|
|
146
|
+
wa_dict["last_auth"].isoformat()
|
|
147
|
+
if wa_dict.get("last_auth") and isinstance(wa_dict["last_auth"], datetime)
|
|
148
|
+
else wa_dict.get("last_auth")
|
|
149
|
+
),
|
|
150
|
+
"active": 1, # New WAs are active by default
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
columns = ", ".join(db_dict.keys())
|
|
154
|
+
placeholders = ", ".join(["?" for _ in db_dict])
|
|
155
|
+
|
|
156
|
+
cursor = conn.cursor()
|
|
157
|
+
cursor.execute(f"INSERT INTO wa_cert ({columns}) VALUES ({placeholders})", list(db_dict.values()))
|
|
158
|
+
cursor.close()
|
|
159
|
+
conn.commit()
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def get_wa_by_id(wa_id: str, db_path: str) -> Optional[WACertificate]:
|
|
163
|
+
"""Get WA certificate by ID.
|
|
164
|
+
|
|
165
|
+
Args:
|
|
166
|
+
wa_id: WA certificate ID
|
|
167
|
+
db_path: Database connection string
|
|
168
|
+
|
|
169
|
+
Returns:
|
|
170
|
+
WACertificate if found, None otherwise
|
|
171
|
+
"""
|
|
172
|
+
with get_db_connection(db_path=db_path) as conn:
|
|
173
|
+
cursor = conn.cursor()
|
|
174
|
+
cursor.execute("SELECT * FROM wa_cert WHERE wa_id = ? AND active = 1", (wa_id,))
|
|
175
|
+
row = cursor.fetchone()
|
|
176
|
+
cursor.close()
|
|
177
|
+
|
|
178
|
+
if row:
|
|
179
|
+
# Convert row to dict
|
|
180
|
+
row_dict = (
|
|
181
|
+
dict(row)
|
|
182
|
+
if hasattr(row, "keys")
|
|
183
|
+
else {column[0]: row[i] for i, column in enumerate(cursor.description)}
|
|
184
|
+
)
|
|
185
|
+
return _row_to_wa(row_dict)
|
|
186
|
+
return None
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def get_wa_by_kid(jwt_kid: str, db_path: str) -> Optional[WACertificate]:
|
|
190
|
+
"""Get WA certificate by JWT key ID.
|
|
191
|
+
|
|
192
|
+
Args:
|
|
193
|
+
jwt_kid: JWT key identifier
|
|
194
|
+
db_path: Database connection string
|
|
195
|
+
|
|
196
|
+
Returns:
|
|
197
|
+
WACertificate if found, None otherwise
|
|
198
|
+
"""
|
|
199
|
+
with get_db_connection(db_path=db_path) as conn:
|
|
200
|
+
cursor = conn.cursor()
|
|
201
|
+
cursor.execute("SELECT * FROM wa_cert WHERE jwt_kid = ? AND active = 1", (jwt_kid,))
|
|
202
|
+
row = cursor.fetchone()
|
|
203
|
+
cursor.close()
|
|
204
|
+
|
|
205
|
+
if row:
|
|
206
|
+
row_dict = (
|
|
207
|
+
dict(row)
|
|
208
|
+
if hasattr(row, "keys")
|
|
209
|
+
else {column[0]: row[i] for i, column in enumerate(cursor.description)}
|
|
210
|
+
)
|
|
211
|
+
return _row_to_wa(row_dict)
|
|
212
|
+
return None
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def get_wa_by_oauth(provider: str, external_id: str, db_path: str) -> Optional[WACertificate]:
|
|
216
|
+
"""Get WA certificate by OAuth identity.
|
|
217
|
+
|
|
218
|
+
Args:
|
|
219
|
+
provider: OAuth provider name
|
|
220
|
+
external_id: External OAuth ID
|
|
221
|
+
db_path: Database connection string
|
|
222
|
+
|
|
223
|
+
Returns:
|
|
224
|
+
WACertificate if found, None otherwise
|
|
225
|
+
"""
|
|
226
|
+
with get_db_connection(db_path=db_path) as conn:
|
|
227
|
+
cursor = conn.cursor()
|
|
228
|
+
cursor.execute(
|
|
229
|
+
"SELECT * FROM wa_cert WHERE oauth_provider = ? AND oauth_external_id = ? AND active = 1",
|
|
230
|
+
(provider, external_id),
|
|
231
|
+
)
|
|
232
|
+
row = cursor.fetchone()
|
|
233
|
+
|
|
234
|
+
if row:
|
|
235
|
+
row_dict = (
|
|
236
|
+
dict(row)
|
|
237
|
+
if hasattr(row, "keys")
|
|
238
|
+
else {column[0]: row[i] for i, column in enumerate(cursor.description)}
|
|
239
|
+
)
|
|
240
|
+
cursor.close()
|
|
241
|
+
return _row_to_wa(row_dict)
|
|
242
|
+
|
|
243
|
+
# Fallback: search linked identities stored in JSON
|
|
244
|
+
cursor.execute("SELECT * FROM wa_cert WHERE oauth_links_json IS NOT NULL AND active = 1")
|
|
245
|
+
for link_row in cursor.fetchall():
|
|
246
|
+
link_row_dict = (
|
|
247
|
+
dict(link_row)
|
|
248
|
+
if hasattr(link_row, "keys")
|
|
249
|
+
else {column[0]: link_row[i] for i, column in enumerate(cursor.description)}
|
|
250
|
+
)
|
|
251
|
+
wa = _row_to_wa(link_row_dict)
|
|
252
|
+
for link in wa.oauth_links:
|
|
253
|
+
if link.provider == provider and link.external_id == external_id:
|
|
254
|
+
cursor.close()
|
|
255
|
+
return wa
|
|
256
|
+
|
|
257
|
+
cursor.close()
|
|
258
|
+
return None
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
def get_wa_by_adapter(adapter_id: str, db_path: str) -> Optional[WACertificate]:
|
|
262
|
+
"""Get WA certificate by adapter ID.
|
|
263
|
+
|
|
264
|
+
Args:
|
|
265
|
+
adapter_id: Adapter identifier
|
|
266
|
+
db_path: Database connection string
|
|
267
|
+
|
|
268
|
+
Returns:
|
|
269
|
+
WACertificate if found, None otherwise
|
|
270
|
+
"""
|
|
271
|
+
with get_db_connection(db_path=db_path) as conn:
|
|
272
|
+
cursor = conn.cursor()
|
|
273
|
+
cursor.execute("SELECT * FROM wa_cert WHERE adapter_id = ? AND active = 1", (adapter_id,))
|
|
274
|
+
row = cursor.fetchone()
|
|
275
|
+
cursor.close()
|
|
276
|
+
|
|
277
|
+
if row:
|
|
278
|
+
row_dict = (
|
|
279
|
+
dict(row)
|
|
280
|
+
if hasattr(row, "keys")
|
|
281
|
+
else {column[0]: row[i] for i, column in enumerate(cursor.description)}
|
|
282
|
+
)
|
|
283
|
+
return _row_to_wa(row_dict)
|
|
284
|
+
return None
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def update_wa_certificate(wa_id: str, updates: Dict[str, Any], db_path: str) -> None:
|
|
288
|
+
"""Update WA certificate fields.
|
|
289
|
+
|
|
290
|
+
Args:
|
|
291
|
+
wa_id: WA certificate ID to update
|
|
292
|
+
updates: Dictionary of field names and values to update
|
|
293
|
+
db_path: Database connection string
|
|
294
|
+
"""
|
|
295
|
+
from datetime import datetime
|
|
296
|
+
|
|
297
|
+
if not updates:
|
|
298
|
+
return
|
|
299
|
+
|
|
300
|
+
# Handle datetime fields
|
|
301
|
+
processed_updates = {}
|
|
302
|
+
for key, value in updates.items():
|
|
303
|
+
if isinstance(value, datetime):
|
|
304
|
+
processed_updates[key] = value.isoformat()
|
|
305
|
+
else:
|
|
306
|
+
processed_updates[key] = value
|
|
307
|
+
|
|
308
|
+
set_clause = ", ".join([f"{key} = ?" for key in processed_updates.keys()])
|
|
309
|
+
values = list(processed_updates.values()) + [wa_id]
|
|
310
|
+
|
|
311
|
+
with get_db_connection(db_path=db_path) as conn:
|
|
312
|
+
cursor = conn.cursor()
|
|
313
|
+
cursor.execute(f"UPDATE wa_cert SET {set_clause} WHERE wa_id = ?", values)
|
|
314
|
+
cursor.close()
|
|
315
|
+
conn.commit()
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
def list_wa_certificates(active_only: bool, db_path: str) -> List[WACertificate]:
|
|
319
|
+
"""List all WA certificates.
|
|
320
|
+
|
|
321
|
+
Args:
|
|
322
|
+
active_only: If True, only return active certificates
|
|
323
|
+
db_path: Database connection string
|
|
324
|
+
|
|
325
|
+
Returns:
|
|
326
|
+
List of WACertificate objects
|
|
327
|
+
"""
|
|
328
|
+
with get_db_connection(db_path=db_path) as conn:
|
|
329
|
+
cursor = conn.cursor()
|
|
330
|
+
|
|
331
|
+
if active_only:
|
|
332
|
+
query = "SELECT * FROM wa_cert WHERE active = 1 ORDER BY created DESC"
|
|
333
|
+
else:
|
|
334
|
+
query = "SELECT * FROM wa_cert ORDER BY created DESC"
|
|
335
|
+
|
|
336
|
+
cursor.execute(query)
|
|
337
|
+
rows = cursor.fetchall()
|
|
338
|
+
cursor.close()
|
|
339
|
+
|
|
340
|
+
result = []
|
|
341
|
+
for row in rows:
|
|
342
|
+
row_dict = (
|
|
343
|
+
dict(row)
|
|
344
|
+
if hasattr(row, "keys")
|
|
345
|
+
else {column[0]: row[i] for i, column in enumerate(cursor.description)}
|
|
346
|
+
)
|
|
347
|
+
result.append(_row_to_wa(row_dict))
|
|
348
|
+
|
|
349
|
+
return result
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
def get_certificate_counts(db_path: str) -> Dict[str, int]:
|
|
353
|
+
"""Get counts of certificates by status and role.
|
|
354
|
+
|
|
355
|
+
Args:
|
|
356
|
+
db_path: Database connection string
|
|
357
|
+
|
|
358
|
+
Returns:
|
|
359
|
+
Dictionary with certificate counts
|
|
360
|
+
"""
|
|
361
|
+
from typing import cast
|
|
362
|
+
|
|
363
|
+
from ciris_engine.logic.persistence.db.dialect import DialectAdapter
|
|
364
|
+
|
|
365
|
+
counts: Dict[str, Any] = {"total": 0, "active": 0, "revoked": 0, "by_role": cast(Dict[str, int], {})}
|
|
366
|
+
|
|
367
|
+
try:
|
|
368
|
+
# Create adapter from db_path to avoid race conditions in parallel tests
|
|
369
|
+
adapter = DialectAdapter(db_path)
|
|
370
|
+
with get_db_connection(db_path=db_path) as conn:
|
|
371
|
+
cursor = conn.cursor()
|
|
372
|
+
|
|
373
|
+
# Total certificates
|
|
374
|
+
cursor.execute("SELECT COUNT(*) FROM wa_cert")
|
|
375
|
+
counts["total"] = adapter.extract_scalar(cursor.fetchone()) or 0
|
|
376
|
+
|
|
377
|
+
# Active certificates
|
|
378
|
+
cursor.execute("SELECT COUNT(*) FROM wa_cert WHERE active = 1")
|
|
379
|
+
counts["active"] = adapter.extract_scalar(cursor.fetchone()) or 0
|
|
380
|
+
|
|
381
|
+
# Revoked certificates
|
|
382
|
+
cursor.execute("SELECT COUNT(*) FROM wa_cert WHERE active = 0")
|
|
383
|
+
counts["revoked"] = adapter.extract_scalar(cursor.fetchone()) or 0
|
|
384
|
+
|
|
385
|
+
# Count by role
|
|
386
|
+
cursor.execute("SELECT role, COUNT(*) FROM wa_cert WHERE active = 1 GROUP BY role")
|
|
387
|
+
for role, count in cursor.fetchall():
|
|
388
|
+
counts["by_role"][role] = count
|
|
389
|
+
|
|
390
|
+
cursor.close()
|
|
391
|
+
except Exception as e:
|
|
392
|
+
logger.warning(f"Failed to get certificate counts: {e}")
|
|
393
|
+
|
|
394
|
+
return counts
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
def check_database_health(db_path: str) -> bool:
|
|
398
|
+
"""Check if the authentication database is accessible.
|
|
399
|
+
|
|
400
|
+
Args:
|
|
401
|
+
db_path: Database connection string
|
|
402
|
+
|
|
403
|
+
Returns:
|
|
404
|
+
True if database is healthy, False otherwise
|
|
405
|
+
"""
|
|
406
|
+
try:
|
|
407
|
+
with get_db_connection(db_path=db_path) as conn:
|
|
408
|
+
cursor = conn.cursor()
|
|
409
|
+
cursor.execute("SELECT 1")
|
|
410
|
+
cursor.close()
|
|
411
|
+
return True
|
|
412
|
+
except Exception as e:
|
|
413
|
+
logger.warning(f"Authentication database health check failed: {e}")
|
|
414
|
+
return False
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import logging
|
|
3
|
+
import uuid
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
from ciris_engine.schemas.runtime.enums import TaskStatus, ThoughtStatus
|
|
7
|
+
from ciris_engine.schemas.runtime.models import FinalAction, Task, TaskContext, TaskOutcome, Thought, ThoughtContext
|
|
8
|
+
|
|
9
|
+
logger = logging.getLogger(__name__)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def map_row_to_task(row: Any) -> Task:
|
|
13
|
+
row_dict = dict(row)
|
|
14
|
+
# Get agent_occurrence_id from row (defaults to "default" for backwards compatibility)
|
|
15
|
+
agent_occurrence_id = row_dict.get("agent_occurrence_id", "default")
|
|
16
|
+
|
|
17
|
+
# Handle PostgreSQL JSONB vs SQLite TEXT for JSON columns
|
|
18
|
+
# PostgreSQL JSONB returns parsed Python objects, SQLite TEXT returns JSON strings
|
|
19
|
+
if row_dict.get("context_json"):
|
|
20
|
+
try:
|
|
21
|
+
ctx_json = row_dict["context_json"]
|
|
22
|
+
ctx_data = ctx_json if isinstance(ctx_json, dict) else json.loads(ctx_json)
|
|
23
|
+
if isinstance(ctx_data, dict):
|
|
24
|
+
# Extract only the fields that TaskContext expects
|
|
25
|
+
# This makes us resilient to schema changes
|
|
26
|
+
row_dict["context"] = TaskContext(
|
|
27
|
+
channel_id=ctx_data.get("channel_id"),
|
|
28
|
+
user_id=ctx_data.get("user_id"),
|
|
29
|
+
correlation_id=ctx_data.get("correlation_id", str(uuid.uuid4())),
|
|
30
|
+
parent_task_id=ctx_data.get("parent_task_id"),
|
|
31
|
+
agent_occurrence_id=ctx_data.get("agent_occurrence_id", agent_occurrence_id),
|
|
32
|
+
)
|
|
33
|
+
else:
|
|
34
|
+
# Provide required fields for TaskContext
|
|
35
|
+
row_dict["context"] = TaskContext(
|
|
36
|
+
channel_id=None,
|
|
37
|
+
user_id=None,
|
|
38
|
+
correlation_id=str(uuid.uuid4()),
|
|
39
|
+
parent_task_id=None,
|
|
40
|
+
agent_occurrence_id=agent_occurrence_id,
|
|
41
|
+
)
|
|
42
|
+
except Exception as e:
|
|
43
|
+
logger.warning(f"Failed to decode context_json for task {row_dict.get('task_id')}: {e}")
|
|
44
|
+
row_dict["context"] = TaskContext(
|
|
45
|
+
channel_id=None,
|
|
46
|
+
user_id=None,
|
|
47
|
+
correlation_id=str(uuid.uuid4()),
|
|
48
|
+
parent_task_id=None,
|
|
49
|
+
agent_occurrence_id=agent_occurrence_id,
|
|
50
|
+
)
|
|
51
|
+
else:
|
|
52
|
+
row_dict["context"] = TaskContext(
|
|
53
|
+
channel_id=None,
|
|
54
|
+
user_id=None,
|
|
55
|
+
correlation_id=str(uuid.uuid4()),
|
|
56
|
+
parent_task_id=None,
|
|
57
|
+
agent_occurrence_id=agent_occurrence_id,
|
|
58
|
+
)
|
|
59
|
+
if row_dict.get("outcome_json"):
|
|
60
|
+
try:
|
|
61
|
+
outcome_json = row_dict["outcome_json"]
|
|
62
|
+
outcome_data = outcome_json if isinstance(outcome_json, dict) else json.loads(outcome_json)
|
|
63
|
+
# Only set outcome if it's a non-empty dict with required fields
|
|
64
|
+
if isinstance(outcome_data, dict) and outcome_data:
|
|
65
|
+
row_dict["outcome"] = TaskOutcome.model_validate(outcome_data)
|
|
66
|
+
else:
|
|
67
|
+
row_dict["outcome"] = None
|
|
68
|
+
except Exception:
|
|
69
|
+
logger.warning(f"Failed to decode outcome_json for task {row_dict.get('task_id')}")
|
|
70
|
+
row_dict["outcome"] = None
|
|
71
|
+
else:
|
|
72
|
+
row_dict["outcome"] = None
|
|
73
|
+
|
|
74
|
+
# Handle PostgreSQL TIMESTAMP vs SQLite TEXT for datetime columns
|
|
75
|
+
# PostgreSQL TIMESTAMP returns datetime objects, SQLite TEXT returns ISO strings
|
|
76
|
+
from datetime import datetime, timezone
|
|
77
|
+
|
|
78
|
+
for dt_field in ["created_at", "updated_at", "signed_at"]:
|
|
79
|
+
if dt_field in row_dict and row_dict[dt_field]:
|
|
80
|
+
if isinstance(row_dict[dt_field], datetime):
|
|
81
|
+
# Ensure timezone-aware datetime (assume UTC if naive)
|
|
82
|
+
dt = row_dict[dt_field]
|
|
83
|
+
if dt.tzinfo is None:
|
|
84
|
+
dt = dt.replace(tzinfo=timezone.utc)
|
|
85
|
+
row_dict[dt_field] = dt.isoformat()
|
|
86
|
+
|
|
87
|
+
# Handle images_json for native multimodal vision support
|
|
88
|
+
if row_dict.get("images_json"):
|
|
89
|
+
try:
|
|
90
|
+
from ciris_engine.schemas.runtime.models import ImageContent
|
|
91
|
+
|
|
92
|
+
images_json = row_dict["images_json"]
|
|
93
|
+
images_data = images_json if isinstance(images_json, list) else json.loads(images_json)
|
|
94
|
+
if isinstance(images_data, list) and images_data:
|
|
95
|
+
row_dict["images"] = [ImageContent.model_validate(img) for img in images_data]
|
|
96
|
+
else:
|
|
97
|
+
row_dict["images"] = []
|
|
98
|
+
except Exception as e:
|
|
99
|
+
logger.warning(f"Failed to decode images_json for task {row_dict.get('task_id')}: {e}")
|
|
100
|
+
row_dict["images"] = []
|
|
101
|
+
else:
|
|
102
|
+
row_dict["images"] = []
|
|
103
|
+
|
|
104
|
+
# Remove database-specific columns that aren't in the Task schema
|
|
105
|
+
for k in ["context_json", "outcome_json", "retry_count", "images_json"]:
|
|
106
|
+
if k in row_dict:
|
|
107
|
+
del row_dict[k]
|
|
108
|
+
|
|
109
|
+
try:
|
|
110
|
+
row_dict["status"] = TaskStatus(row_dict["status"])
|
|
111
|
+
except Exception:
|
|
112
|
+
logger.warning(
|
|
113
|
+
f"Invalid status value '{row_dict['status']}' for task {row_dict.get('task_id')}. Defaulting to PENDING."
|
|
114
|
+
)
|
|
115
|
+
row_dict["status"] = TaskStatus.PENDING
|
|
116
|
+
return Task(**row_dict)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def map_row_to_thought(row: Any) -> Thought:
|
|
120
|
+
row_dict = dict(row)
|
|
121
|
+
# Get agent_occurrence_id from row (defaults to "default" for backwards compatibility)
|
|
122
|
+
agent_occurrence_id = row_dict.get("agent_occurrence_id", "default")
|
|
123
|
+
|
|
124
|
+
# Handle PostgreSQL JSONB vs SQLite TEXT for JSON columns
|
|
125
|
+
# PostgreSQL JSONB returns parsed Python objects, SQLite TEXT returns JSON strings
|
|
126
|
+
if row_dict.get("context_json"):
|
|
127
|
+
try:
|
|
128
|
+
ctx_json = row_dict["context_json"]
|
|
129
|
+
ctx_data = ctx_json if isinstance(ctx_json, dict) else json.loads(ctx_json)
|
|
130
|
+
if isinstance(ctx_data, dict) and ctx_data: # Check if dict is not empty
|
|
131
|
+
# Extract only the fields that ThoughtContext expects
|
|
132
|
+
# This makes us resilient to schema changes
|
|
133
|
+
# Note: task_id and correlation_id are required fields
|
|
134
|
+
task_id = ctx_data.get("task_id")
|
|
135
|
+
correlation_id = ctx_data.get("correlation_id")
|
|
136
|
+
|
|
137
|
+
if task_id and correlation_id:
|
|
138
|
+
row_dict["context"] = ThoughtContext(
|
|
139
|
+
task_id=task_id,
|
|
140
|
+
channel_id=ctx_data.get("channel_id"),
|
|
141
|
+
round_number=ctx_data.get("round_number", 0),
|
|
142
|
+
depth=ctx_data.get("depth", 0),
|
|
143
|
+
parent_thought_id=ctx_data.get("parent_thought_id"),
|
|
144
|
+
correlation_id=correlation_id,
|
|
145
|
+
agent_occurrence_id=ctx_data.get("agent_occurrence_id", agent_occurrence_id),
|
|
146
|
+
)
|
|
147
|
+
else:
|
|
148
|
+
# Missing required fields, set to None
|
|
149
|
+
row_dict["context"] = None
|
|
150
|
+
else:
|
|
151
|
+
# For empty or invalid context, set to None instead of trying to create invalid ThoughtContext
|
|
152
|
+
row_dict["context"] = None
|
|
153
|
+
except Exception as e:
|
|
154
|
+
logger.warning(f"Failed to decode context_json for thought {row_dict.get('thought_id')}: {e}")
|
|
155
|
+
# For failed decoding, set to None instead of trying to create invalid ThoughtContext
|
|
156
|
+
row_dict["context"] = None
|
|
157
|
+
else:
|
|
158
|
+
# No context provided, set to None
|
|
159
|
+
row_dict["context"] = None
|
|
160
|
+
if row_dict.get("ponder_notes_json"):
|
|
161
|
+
try:
|
|
162
|
+
ponder_json = row_dict["ponder_notes_json"]
|
|
163
|
+
row_dict["ponder_notes"] = ponder_json if isinstance(ponder_json, list) else json.loads(ponder_json)
|
|
164
|
+
except Exception:
|
|
165
|
+
logger.warning(f"Failed to decode ponder_notes_json for thought {row_dict.get('thought_id')}")
|
|
166
|
+
row_dict["ponder_notes"] = None
|
|
167
|
+
else:
|
|
168
|
+
row_dict["ponder_notes"] = None
|
|
169
|
+
if row_dict.get("final_action_json"):
|
|
170
|
+
try:
|
|
171
|
+
action_json = row_dict["final_action_json"]
|
|
172
|
+
action_data = action_json if isinstance(action_json, dict) else json.loads(action_json)
|
|
173
|
+
# Only set final_action if it's a non-empty dict with required fields
|
|
174
|
+
if isinstance(action_data, dict) and action_data:
|
|
175
|
+
row_dict["final_action"] = FinalAction.model_validate(action_data)
|
|
176
|
+
else:
|
|
177
|
+
row_dict["final_action"] = None
|
|
178
|
+
except Exception:
|
|
179
|
+
logger.warning(f"Failed to decode final_action_json for thought {row_dict.get('thought_id')}")
|
|
180
|
+
row_dict["final_action"] = None
|
|
181
|
+
else:
|
|
182
|
+
row_dict["final_action"] = None
|
|
183
|
+
|
|
184
|
+
# Handle PostgreSQL TIMESTAMP vs SQLite TEXT for datetime columns
|
|
185
|
+
# PostgreSQL TIMESTAMP returns datetime objects, SQLite TEXT returns ISO strings
|
|
186
|
+
from datetime import datetime, timezone
|
|
187
|
+
|
|
188
|
+
for dt_field in ["created_at", "updated_at"]:
|
|
189
|
+
if dt_field in row_dict and row_dict[dt_field]:
|
|
190
|
+
if isinstance(row_dict[dt_field], datetime):
|
|
191
|
+
# Ensure timezone-aware datetime (assume UTC if naive)
|
|
192
|
+
dt = row_dict[dt_field]
|
|
193
|
+
if dt.tzinfo is None:
|
|
194
|
+
dt = dt.replace(tzinfo=timezone.utc)
|
|
195
|
+
row_dict[dt_field] = dt.isoformat()
|
|
196
|
+
|
|
197
|
+
# Note: Images are stored at the TASK level, not THOUGHT level.
|
|
198
|
+
# Thoughts inherit images from their source task when loaded via ProcessingQueueItem.from_thought()
|
|
199
|
+
# which looks up the task and copies its images.
|
|
200
|
+
row_dict["images"] = []
|
|
201
|
+
|
|
202
|
+
for k in ["context_json", "ponder_notes_json", "final_action_json"]:
|
|
203
|
+
if k in row_dict:
|
|
204
|
+
del row_dict[k]
|
|
205
|
+
try:
|
|
206
|
+
row_dict["status"] = ThoughtStatus(row_dict["status"])
|
|
207
|
+
except Exception:
|
|
208
|
+
logger.warning(
|
|
209
|
+
f"Invalid status value '{row_dict['status']}' for thought {row_dict.get('thought_id')}. Defaulting to PENDING."
|
|
210
|
+
)
|
|
211
|
+
row_dict["status"] = ThoughtStatus.PENDING
|
|
212
|
+
return Thought(**row_dict)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""
|
|
2
|
+
CIRISAgent processor module.
|
|
3
|
+
Provides state-aware task and thought processing using v1 schemas.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from ciris_engine.logic.processors.core.base_processor import BaseProcessor
|
|
7
|
+
from ciris_engine.logic.processors.core.main_processor import AgentProcessor
|
|
8
|
+
from ciris_engine.logic.processors.states.dream_processor import DreamProcessor
|
|
9
|
+
from ciris_engine.logic.processors.states.play_processor import PlayProcessor
|
|
10
|
+
from ciris_engine.logic.processors.states.solitude_processor import SolitudeProcessor
|
|
11
|
+
from ciris_engine.logic.processors.states.wakeup_processor import WakeupProcessor
|
|
12
|
+
from ciris_engine.logic.processors.states.work_processor import WorkProcessor
|
|
13
|
+
|
|
14
|
+
from .support.state_manager import StateManager, StateTransition
|
|
15
|
+
from .support.task_manager import TaskManager
|
|
16
|
+
from .support.thought_manager import ThoughtManager
|
|
17
|
+
|
|
18
|
+
__all__ = [
|
|
19
|
+
"AgentProcessor",
|
|
20
|
+
"BaseProcessor",
|
|
21
|
+
"WakeupProcessor",
|
|
22
|
+
"WorkProcessor",
|
|
23
|
+
"PlayProcessor",
|
|
24
|
+
"DreamProcessor",
|
|
25
|
+
"SolitudeProcessor",
|
|
26
|
+
"StateManager",
|
|
27
|
+
"StateTransition",
|
|
28
|
+
"TaskManager",
|
|
29
|
+
"ThoughtManager",
|
|
30
|
+
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Core processors module."""
|