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,232 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Database-agnostic query builder with dialect support.
|
|
3
|
+
|
|
4
|
+
Provides a fluent interface for building SQL queries that automatically
|
|
5
|
+
adapt to the target dialect (SQLite, PostgreSQL, MySQL, etc.).
|
|
6
|
+
|
|
7
|
+
This module centralizes all SQL generation logic, making it easy to:
|
|
8
|
+
1. Add support for new database backends
|
|
9
|
+
2. Test SQL generation without a database
|
|
10
|
+
3. Keep business logic free of SQL dialect knowledge
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from dataclasses import dataclass, field
|
|
14
|
+
from enum import Enum
|
|
15
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional
|
|
16
|
+
|
|
17
|
+
if TYPE_CHECKING:
|
|
18
|
+
from ciris_engine.logic.persistence.db.dialect import DialectAdapter
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ConflictResolution(str, Enum):
|
|
22
|
+
"""How to handle conflicts during INSERT operations."""
|
|
23
|
+
|
|
24
|
+
IGNORE = "ignore" # INSERT OR IGNORE / ON CONFLICT DO NOTHING
|
|
25
|
+
REPLACE = "replace" # INSERT OR REPLACE / ON CONFLICT DO UPDATE
|
|
26
|
+
ERROR = "error" # Let database raise error (default behavior)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@dataclass
|
|
30
|
+
class InsertQuery:
|
|
31
|
+
"""Builder for INSERT statements with dialect awareness.
|
|
32
|
+
|
|
33
|
+
Examples:
|
|
34
|
+
>>> query = InsertQuery(
|
|
35
|
+
... table="users",
|
|
36
|
+
... columns=["id", "name", "email"],
|
|
37
|
+
... conflict_resolution=ConflictResolution.IGNORE,
|
|
38
|
+
... conflict_columns=["id"]
|
|
39
|
+
... )
|
|
40
|
+
>>> sql = query.to_sql(adapter)
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
table: str
|
|
44
|
+
columns: List[str]
|
|
45
|
+
values_placeholder: bool = True # Use ? placeholders
|
|
46
|
+
conflict_resolution: ConflictResolution = ConflictResolution.ERROR
|
|
47
|
+
conflict_columns: Optional[List[str]] = None # For ON CONFLICT
|
|
48
|
+
update_columns: Optional[List[str]] = None # For ON CONFLICT DO UPDATE
|
|
49
|
+
|
|
50
|
+
def to_sql(self, adapter: "DialectAdapter") -> str:
|
|
51
|
+
"""Generate SQL for the target dialect.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
adapter: Dialect adapter to use for SQL generation
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
SQL string with ? placeholders (will be translated by cursor wrapper)
|
|
58
|
+
"""
|
|
59
|
+
from ciris_engine.logic.persistence.db.dialect import Dialect
|
|
60
|
+
|
|
61
|
+
placeholders = ", ".join(["?"] * len(self.columns))
|
|
62
|
+
columns_str = ", ".join(self.columns)
|
|
63
|
+
|
|
64
|
+
if self.conflict_resolution == ConflictResolution.IGNORE:
|
|
65
|
+
if adapter.dialect == Dialect.SQLITE:
|
|
66
|
+
return f"INSERT OR IGNORE INTO {self.table} ({columns_str}) VALUES ({placeholders})"
|
|
67
|
+
else: # PostgreSQL
|
|
68
|
+
conflict_cols = ", ".join(self.conflict_columns or self.columns)
|
|
69
|
+
return f"INSERT INTO {self.table} ({columns_str}) VALUES ({placeholders}) ON CONFLICT ({conflict_cols}) DO NOTHING"
|
|
70
|
+
|
|
71
|
+
elif self.conflict_resolution == ConflictResolution.REPLACE:
|
|
72
|
+
if adapter.dialect == Dialect.SQLITE:
|
|
73
|
+
return f"INSERT OR REPLACE INTO {self.table} ({columns_str}) VALUES ({placeholders})"
|
|
74
|
+
else: # PostgreSQL
|
|
75
|
+
conflict_cols = ", ".join(self.conflict_columns or self.columns)
|
|
76
|
+
update_cols = self.update_columns or [c for c in self.columns if c not in (self.conflict_columns or [])]
|
|
77
|
+
updates = ", ".join([f"{col} = EXCLUDED.{col}" for col in update_cols])
|
|
78
|
+
return f"INSERT INTO {self.table} ({columns_str}) VALUES ({placeholders}) ON CONFLICT ({conflict_cols}) DO UPDATE SET {updates}"
|
|
79
|
+
|
|
80
|
+
# ERROR (default)
|
|
81
|
+
return f"INSERT INTO {self.table} ({columns_str}) VALUES ({placeholders})"
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
@dataclass
|
|
85
|
+
class SelectQuery:
|
|
86
|
+
"""Builder for SELECT statements with dialect awareness.
|
|
87
|
+
|
|
88
|
+
Examples:
|
|
89
|
+
>>> query = SelectQuery(
|
|
90
|
+
... table="users",
|
|
91
|
+
... columns=["id", "name"],
|
|
92
|
+
... where_conditions=["active = ?"],
|
|
93
|
+
... order_by="created_at DESC",
|
|
94
|
+
... limit=10
|
|
95
|
+
... )
|
|
96
|
+
>>> sql = query.to_sql(adapter)
|
|
97
|
+
"""
|
|
98
|
+
|
|
99
|
+
table: str
|
|
100
|
+
columns: List[str]
|
|
101
|
+
where_conditions: List[str] = field(default_factory=list)
|
|
102
|
+
order_by: Optional[str] = None
|
|
103
|
+
limit: Optional[int] = None
|
|
104
|
+
|
|
105
|
+
def to_sql(self, adapter: "DialectAdapter") -> str:
|
|
106
|
+
"""Generate SQL for the target dialect.
|
|
107
|
+
|
|
108
|
+
Args:
|
|
109
|
+
adapter: Dialect adapter to use for SQL generation
|
|
110
|
+
|
|
111
|
+
Returns:
|
|
112
|
+
SQL string with ? placeholders (will be translated by cursor wrapper)
|
|
113
|
+
"""
|
|
114
|
+
cols = ", ".join(self.columns)
|
|
115
|
+
sql = f"SELECT {cols} FROM {self.table}"
|
|
116
|
+
|
|
117
|
+
if self.where_conditions:
|
|
118
|
+
sql += " WHERE " + " AND ".join(self.where_conditions)
|
|
119
|
+
|
|
120
|
+
if self.order_by:
|
|
121
|
+
sql += f" ORDER BY {self.order_by}"
|
|
122
|
+
|
|
123
|
+
if self.limit:
|
|
124
|
+
sql += f" LIMIT {self.limit}"
|
|
125
|
+
|
|
126
|
+
return sql
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
class QueryBuilder:
|
|
130
|
+
"""Factory for creating dialect-aware queries.
|
|
131
|
+
|
|
132
|
+
This class provides high-level methods for common query patterns,
|
|
133
|
+
automatically handling dialect-specific SQL generation.
|
|
134
|
+
|
|
135
|
+
Examples:
|
|
136
|
+
>>> from ciris_engine.logic.persistence.db.dialect import get_adapter
|
|
137
|
+
>>> adapter = get_adapter()
|
|
138
|
+
>>> builder = QueryBuilder(adapter)
|
|
139
|
+
>>> sql = builder.insert_ignore_node()
|
|
140
|
+
"""
|
|
141
|
+
|
|
142
|
+
def __init__(self, adapter: "DialectAdapter"):
|
|
143
|
+
"""Initialize query builder with dialect adapter.
|
|
144
|
+
|
|
145
|
+
Args:
|
|
146
|
+
adapter: Dialect adapter for SQL generation
|
|
147
|
+
"""
|
|
148
|
+
self.adapter = adapter
|
|
149
|
+
|
|
150
|
+
def insert(
|
|
151
|
+
self,
|
|
152
|
+
table: str,
|
|
153
|
+
columns: List[str],
|
|
154
|
+
conflict_resolution: ConflictResolution = ConflictResolution.ERROR,
|
|
155
|
+
conflict_columns: Optional[List[str]] = None,
|
|
156
|
+
) -> InsertQuery:
|
|
157
|
+
"""Create an INSERT query builder.
|
|
158
|
+
|
|
159
|
+
Args:
|
|
160
|
+
table: Table name
|
|
161
|
+
columns: List of column names
|
|
162
|
+
conflict_resolution: How to handle conflicts
|
|
163
|
+
conflict_columns: Columns that define uniqueness constraint
|
|
164
|
+
|
|
165
|
+
Returns:
|
|
166
|
+
InsertQuery builder
|
|
167
|
+
"""
|
|
168
|
+
return InsertQuery(
|
|
169
|
+
table=table, columns=columns, conflict_resolution=conflict_resolution, conflict_columns=conflict_columns
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
def select(self, table: str, columns: List[str]) -> SelectQuery:
|
|
173
|
+
"""Create a SELECT query builder.
|
|
174
|
+
|
|
175
|
+
Args:
|
|
176
|
+
table: Table name
|
|
177
|
+
columns: List of column names to select
|
|
178
|
+
|
|
179
|
+
Returns:
|
|
180
|
+
SelectQuery builder
|
|
181
|
+
"""
|
|
182
|
+
return SelectQuery(table=table, columns=columns)
|
|
183
|
+
|
|
184
|
+
def insert_ignore_node(self) -> str:
|
|
185
|
+
"""Create INSERT OR IGNORE for graph_nodes with proper conflict handling.
|
|
186
|
+
|
|
187
|
+
Handles the PRIMARY KEY constraint (node_id, scope) correctly for both dialects.
|
|
188
|
+
|
|
189
|
+
Returns:
|
|
190
|
+
SQL string ready for execution (with ? placeholders)
|
|
191
|
+
"""
|
|
192
|
+
query = self.insert(
|
|
193
|
+
table="graph_nodes",
|
|
194
|
+
columns=[
|
|
195
|
+
"node_id",
|
|
196
|
+
"scope",
|
|
197
|
+
"node_type",
|
|
198
|
+
"attributes_json",
|
|
199
|
+
"version",
|
|
200
|
+
"updated_by",
|
|
201
|
+
"updated_at",
|
|
202
|
+
"created_at",
|
|
203
|
+
],
|
|
204
|
+
conflict_resolution=ConflictResolution.IGNORE,
|
|
205
|
+
conflict_columns=["node_id", "scope"], # PRIMARY KEY
|
|
206
|
+
)
|
|
207
|
+
return query.to_sql(self.adapter)
|
|
208
|
+
|
|
209
|
+
def insert_ignore_edge(self) -> str:
|
|
210
|
+
"""Create INSERT OR IGNORE for graph_edges with proper conflict handling.
|
|
211
|
+
|
|
212
|
+
Handles the PRIMARY KEY constraint (edge_id) correctly for both dialects.
|
|
213
|
+
|
|
214
|
+
Returns:
|
|
215
|
+
SQL string ready for execution (with ? placeholders)
|
|
216
|
+
"""
|
|
217
|
+
query = self.insert(
|
|
218
|
+
table="graph_edges",
|
|
219
|
+
columns=[
|
|
220
|
+
"edge_id",
|
|
221
|
+
"source_node_id",
|
|
222
|
+
"target_node_id",
|
|
223
|
+
"scope",
|
|
224
|
+
"relationship",
|
|
225
|
+
"weight",
|
|
226
|
+
"attributes_json",
|
|
227
|
+
"created_at",
|
|
228
|
+
],
|
|
229
|
+
conflict_resolution=ConflictResolution.IGNORE,
|
|
230
|
+
conflict_columns=["edge_id"], # PRIMARY KEY
|
|
231
|
+
)
|
|
232
|
+
return query.to_sql(self.adapter)
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Database retry mechanism for handling SQLite busy errors.
|
|
3
|
+
|
|
4
|
+
Provides a minimal, clean retry wrapper for database operations
|
|
5
|
+
to handle concurrent access issues gracefully.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import functools
|
|
9
|
+
import logging
|
|
10
|
+
import sqlite3
|
|
11
|
+
import time
|
|
12
|
+
from contextlib import contextmanager
|
|
13
|
+
from typing import Any, Callable, Iterator, TypeVar
|
|
14
|
+
|
|
15
|
+
logger = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
T = TypeVar("T")
|
|
18
|
+
|
|
19
|
+
# Default retry configuration
|
|
20
|
+
DEFAULT_MAX_RETRIES = 3
|
|
21
|
+
DEFAULT_BASE_DELAY = 0.1 # 100ms
|
|
22
|
+
DEFAULT_MAX_DELAY = 1.0 # 1 second
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def is_retryable_error(error: Exception) -> bool:
|
|
26
|
+
"""Check if an error is retryable (database busy/locked)."""
|
|
27
|
+
if isinstance(error, sqlite3.OperationalError):
|
|
28
|
+
error_msg = str(error).lower()
|
|
29
|
+
return "database is locked" in error_msg or "database table is locked" in error_msg
|
|
30
|
+
return False
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def with_retry(
|
|
34
|
+
func: Callable[..., T] | None = None,
|
|
35
|
+
*,
|
|
36
|
+
max_retries: int = DEFAULT_MAX_RETRIES,
|
|
37
|
+
base_delay: float = DEFAULT_BASE_DELAY,
|
|
38
|
+
max_delay: float = DEFAULT_MAX_DELAY,
|
|
39
|
+
) -> Callable[..., T] | Callable[[Callable[..., T]], Callable[..., T]]:
|
|
40
|
+
"""
|
|
41
|
+
Decorator for retrying database operations on busy errors.
|
|
42
|
+
|
|
43
|
+
Can be used as:
|
|
44
|
+
@with_retry
|
|
45
|
+
def my_func(): ...
|
|
46
|
+
|
|
47
|
+
@with_retry(max_retries=5, base_delay=0.5)
|
|
48
|
+
def my_func(): ...
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
func: Function to retry (None when used with parameters)
|
|
52
|
+
max_retries: Maximum number of retry attempts
|
|
53
|
+
base_delay: Initial delay between retries (exponential backoff)
|
|
54
|
+
max_delay: Maximum delay between retries
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
Wrapped function with retry logic or decorator
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
def decorator(f: Callable[..., T]) -> Callable[..., T]:
|
|
61
|
+
@functools.wraps(f)
|
|
62
|
+
def wrapper(*args: Any, **kwargs: Any) -> T:
|
|
63
|
+
last_error = None
|
|
64
|
+
|
|
65
|
+
for attempt in range(max_retries + 1): # +1 for initial attempt
|
|
66
|
+
try:
|
|
67
|
+
return f(*args, **kwargs)
|
|
68
|
+
except Exception as e:
|
|
69
|
+
if not is_retryable_error(e) or attempt == max_retries:
|
|
70
|
+
# Not retryable or last attempt - re-raise
|
|
71
|
+
raise
|
|
72
|
+
|
|
73
|
+
last_error = e
|
|
74
|
+
delay = min(base_delay * (2**attempt), max_delay)
|
|
75
|
+
|
|
76
|
+
logger.debug(
|
|
77
|
+
f"Database busy error on attempt {attempt + 1}/{max_retries + 1}, "
|
|
78
|
+
f"retrying in {delay:.2f}s: {e}"
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
time.sleep(delay)
|
|
82
|
+
|
|
83
|
+
# Should not reach here, but just in case
|
|
84
|
+
raise last_error if last_error else RuntimeError("Unexpected retry loop exit")
|
|
85
|
+
|
|
86
|
+
return wrapper
|
|
87
|
+
|
|
88
|
+
# If func is provided, we're being used as @with_retry
|
|
89
|
+
if func is not None:
|
|
90
|
+
return decorator(func)
|
|
91
|
+
|
|
92
|
+
# Otherwise, we're being used as @with_retry(...) and need to return decorator
|
|
93
|
+
return decorator
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
@contextmanager
|
|
97
|
+
def get_db_connection_with_retry(db_path: str | None = None, busy_timeout: int = 5000) -> Iterator[sqlite3.Connection]:
|
|
98
|
+
"""
|
|
99
|
+
Get a database connection with busy timeout configured.
|
|
100
|
+
|
|
101
|
+
Args:
|
|
102
|
+
db_path: Optional database path
|
|
103
|
+
busy_timeout: Busy timeout in milliseconds (default 5 seconds)
|
|
104
|
+
|
|
105
|
+
Yields:
|
|
106
|
+
Database connection with retry configuration
|
|
107
|
+
"""
|
|
108
|
+
from .core import get_db_connection
|
|
109
|
+
|
|
110
|
+
conn = get_db_connection(db_path)
|
|
111
|
+
try:
|
|
112
|
+
# Enable WAL mode for better concurrent access
|
|
113
|
+
conn.execute("PRAGMA journal_mode=WAL")
|
|
114
|
+
# Set busy timeout to wait before failing
|
|
115
|
+
conn.execute(f"PRAGMA busy_timeout={busy_timeout}")
|
|
116
|
+
yield conn # type: ignore[misc]
|
|
117
|
+
finally:
|
|
118
|
+
conn.close()
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def execute_with_retry(
|
|
122
|
+
operation: Callable[[sqlite3.Connection], T],
|
|
123
|
+
db_path: str | None = None,
|
|
124
|
+
max_retries: int = DEFAULT_MAX_RETRIES,
|
|
125
|
+
base_delay: float = DEFAULT_BASE_DELAY,
|
|
126
|
+
) -> T:
|
|
127
|
+
"""
|
|
128
|
+
Execute a database operation with automatic retry on busy errors.
|
|
129
|
+
|
|
130
|
+
Args:
|
|
131
|
+
operation: Function that takes a connection and performs database operations
|
|
132
|
+
db_path: Optional database path
|
|
133
|
+
max_retries: Maximum number of retry attempts
|
|
134
|
+
base_delay: Initial delay between retries
|
|
135
|
+
|
|
136
|
+
Returns:
|
|
137
|
+
Result of the operation
|
|
138
|
+
|
|
139
|
+
Example:
|
|
140
|
+
def insert_task(conn):
|
|
141
|
+
cursor = conn.cursor()
|
|
142
|
+
cursor.execute("INSERT INTO tasks ...")
|
|
143
|
+
conn.commit()
|
|
144
|
+
return cursor.lastrowid
|
|
145
|
+
|
|
146
|
+
task_id = execute_with_retry(insert_task)
|
|
147
|
+
"""
|
|
148
|
+
|
|
149
|
+
@with_retry(max_retries=max_retries, base_delay=base_delay) # type: ignore
|
|
150
|
+
def _execute() -> T:
|
|
151
|
+
with get_db_connection_with_retry(db_path) as conn:
|
|
152
|
+
return operation(conn)
|
|
153
|
+
|
|
154
|
+
return _execute()
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import sqlite3
|
|
3
|
+
|
|
4
|
+
from ciris_engine.logic.config import get_sqlite_db_full_path
|
|
5
|
+
|
|
6
|
+
from .migration_runner import run_migrations
|
|
7
|
+
|
|
8
|
+
logger = logging.getLogger(__name__)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def initialize_database(db_path: str | None = None) -> None:
|
|
12
|
+
"""Apply pending migrations to initialize or update the database."""
|
|
13
|
+
try:
|
|
14
|
+
run_migrations(db_path)
|
|
15
|
+
logger.info(f"Database migrations applied at {db_path or get_sqlite_db_full_path()}")
|
|
16
|
+
except sqlite3.Error as e:
|
|
17
|
+
logger.exception(f"Database error during initialization: {e}")
|
|
18
|
+
raise
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
-- Migration 003: Add task update tracking fields (PostgreSQL)
|
|
2
|
+
-- Adds fields to support detecting when new observations arrive for an active task
|
|
3
|
+
|
|
4
|
+
-- Add updated_info_available flag
|
|
5
|
+
ALTER TABLE tasks ADD COLUMN IF NOT EXISTS updated_info_available INTEGER DEFAULT 0;
|
|
6
|
+
|
|
7
|
+
-- Add updated_info_content field
|
|
8
|
+
ALTER TABLE tasks ADD COLUMN IF NOT EXISTS updated_info_content TEXT DEFAULT NULL;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
-- Migration 004: Add agent_occurrence_id for multi-instance deployment support (PostgreSQL)
|
|
2
|
+
-- Enables running multiple API-only CIRIS agent instances against the same PostgreSQL database
|
|
3
|
+
-- Each runtime instance processes only its own work while sharing a single agent identity
|
|
4
|
+
|
|
5
|
+
-- Add agent_occurrence_id to tasks table
|
|
6
|
+
ALTER TABLE tasks ADD COLUMN IF NOT EXISTS agent_occurrence_id TEXT NOT NULL DEFAULT 'default';
|
|
7
|
+
|
|
8
|
+
-- Add agent_occurrence_id to thoughts table
|
|
9
|
+
ALTER TABLE thoughts ADD COLUMN IF NOT EXISTS agent_occurrence_id TEXT NOT NULL DEFAULT 'default';
|
|
10
|
+
|
|
11
|
+
-- Add agent_occurrence_id to scheduled_tasks table (if exists)
|
|
12
|
+
DO $$
|
|
13
|
+
BEGIN
|
|
14
|
+
IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'scheduled_tasks') THEN
|
|
15
|
+
ALTER TABLE scheduled_tasks ADD COLUMN IF NOT EXISTS agent_occurrence_id TEXT NOT NULL DEFAULT 'default';
|
|
16
|
+
END IF;
|
|
17
|
+
END $$;
|
|
18
|
+
|
|
19
|
+
-- Add agent_occurrence_id to service_correlations for per-instance telemetry
|
|
20
|
+
ALTER TABLE service_correlations ADD COLUMN IF NOT EXISTS agent_occurrence_id TEXT NOT NULL DEFAULT 'default';
|
|
21
|
+
|
|
22
|
+
-- Create composite indexes for efficient occurrence-scoped queries
|
|
23
|
+
|
|
24
|
+
-- Tasks indexes
|
|
25
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_occurrence_status
|
|
26
|
+
ON tasks(agent_occurrence_id, status, created_at);
|
|
27
|
+
|
|
28
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_occurrence_channel
|
|
29
|
+
ON tasks(agent_occurrence_id, channel_id, status);
|
|
30
|
+
|
|
31
|
+
-- Thoughts indexes
|
|
32
|
+
CREATE INDEX IF NOT EXISTS idx_thoughts_occurrence_status
|
|
33
|
+
ON thoughts(agent_occurrence_id, status, created_at);
|
|
34
|
+
|
|
35
|
+
CREATE INDEX IF NOT EXISTS idx_thoughts_occurrence_task
|
|
36
|
+
ON thoughts(agent_occurrence_id, source_task_id);
|
|
37
|
+
|
|
38
|
+
-- Scheduled tasks index (if table exists)
|
|
39
|
+
DO $$
|
|
40
|
+
BEGIN
|
|
41
|
+
IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'scheduled_tasks') THEN
|
|
42
|
+
EXECUTE 'CREATE INDEX IF NOT EXISTS idx_scheduled_tasks_occurrence ON scheduled_tasks(agent_occurrence_id, status, next_trigger_at)';
|
|
43
|
+
END IF;
|
|
44
|
+
END $$;
|
|
45
|
+
|
|
46
|
+
-- Service correlations index
|
|
47
|
+
CREATE INDEX IF NOT EXISTS idx_correlations_occurrence
|
|
48
|
+
ON service_correlations(agent_occurrence_id);
|
|
49
|
+
|
|
50
|
+
-- Note: Existing rows automatically get 'default' value via DEFAULT clause
|
|
51
|
+
-- Note: graph_nodes, graph_edges, audit_log, and wa_cert remain global (no occurrence_id)
|
|
52
|
+
-- - Memory is shared across all occurrences (single agent identity/knowledge)
|
|
53
|
+
-- - Audit trail is global for complete history
|
|
54
|
+
-- - WA certificates are shared (single agent identity)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
-- Migration 005: Add consolidation_locks table for TSDB consolidation coordination
|
|
2
|
+
-- Enables multiple instances to coordinate consolidation work without conflicting
|
|
3
|
+
-- Uses conditional UPDATE pattern for lock acquisition (like distributed job queue)
|
|
4
|
+
|
|
5
|
+
CREATE TABLE IF NOT EXISTS consolidation_locks (
|
|
6
|
+
lock_key TEXT PRIMARY KEY, -- e.g., "basic:2025-10-22T06:00:00+00:00"
|
|
7
|
+
locked_by TEXT, -- Hostname or instance ID holding the lock
|
|
8
|
+
locked_at TIMESTAMP, -- Timestamp when lock was acquired
|
|
9
|
+
lock_timeout_seconds INTEGER DEFAULT 300 -- Auto-expire locks after 5 minutes
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
-- Index for finding expired locks
|
|
13
|
+
CREATE INDEX IF NOT EXISTS idx_consolidation_locks_expiry
|
|
14
|
+
ON consolidation_locks(locked_at);
|
|
15
|
+
|
|
16
|
+
-- Note: Lock acquisition uses conditional UPDATE:
|
|
17
|
+
-- UPDATE consolidation_locks
|
|
18
|
+
-- SET locked_by = $1, locked_at = $2
|
|
19
|
+
-- WHERE lock_key = $3 AND (locked_by IS NULL OR locked_at < $4)
|
|
20
|
+
--
|
|
21
|
+
-- If rowcount > 0, lock was acquired
|
|
22
|
+
-- If rowcount = 0, lock is held by another instance
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
-- Migration 006: Add unique index on (agent_occurrence_id, correlation_id)
|
|
2
|
+
--
|
|
3
|
+
-- Purpose: Prevent duplicate task creation for the same Reddit comment/post
|
|
4
|
+
--
|
|
5
|
+
-- Problem: Multiple observer polls can race and create duplicate tasks for the same
|
|
6
|
+
-- correlation_id (Reddit post/comment ID), causing duplicate replies.
|
|
7
|
+
--
|
|
8
|
+
-- Solution: Create a unique index on (agent_occurrence_id, correlation_id) extracted
|
|
9
|
+
-- from context_json to enforce uniqueness at the database level.
|
|
10
|
+
--
|
|
11
|
+
-- Note: PostgreSQL supports JSON extraction in indexes using -> and ->> operators
|
|
12
|
+
-- context_json is JSONB, so we use ->> to extract as text
|
|
13
|
+
|
|
14
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_tasks_occurrence_correlation
|
|
15
|
+
ON tasks(agent_occurrence_id, (context_json->>'correlation_id'))
|
|
16
|
+
WHERE context_json->>'correlation_id' IS NOT NULL;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
-- Migration 007: Add DSAR Tickets Table
|
|
2
|
+
-- Purpose: Replace in-memory dict with persistent storage for GDPR compliance
|
|
3
|
+
-- Impact: DSAR tickets survive server restarts, meeting 30-day response requirement
|
|
4
|
+
|
|
5
|
+
CREATE TABLE IF NOT EXISTS dsar_tickets (
|
|
6
|
+
ticket_id TEXT PRIMARY KEY,
|
|
7
|
+
request_type TEXT NOT NULL CHECK(request_type IN ('access', 'delete', 'export', 'correct')),
|
|
8
|
+
email TEXT NOT NULL,
|
|
9
|
+
user_identifier TEXT,
|
|
10
|
+
details TEXT,
|
|
11
|
+
urgent BOOLEAN NOT NULL DEFAULT FALSE,
|
|
12
|
+
status TEXT NOT NULL CHECK(status IN ('pending_review', 'in_progress', 'completed', 'rejected')),
|
|
13
|
+
submitted_at TIMESTAMP NOT NULL,
|
|
14
|
+
estimated_completion TIMESTAMP NOT NULL,
|
|
15
|
+
last_updated TIMESTAMP NOT NULL,
|
|
16
|
+
notes TEXT,
|
|
17
|
+
automated BOOLEAN NOT NULL DEFAULT FALSE,
|
|
18
|
+
access_package_json TEXT, -- JSON serialized DSARAccessPackage
|
|
19
|
+
export_package_json TEXT, -- JSON serialized DSARExportPackage
|
|
20
|
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
-- Index for status queries (admin filtering by status)
|
|
24
|
+
CREATE INDEX IF NOT EXISTS idx_dsar_tickets_status ON dsar_tickets(status);
|
|
25
|
+
|
|
26
|
+
-- Index for email lookups (user checking their requests)
|
|
27
|
+
CREATE INDEX IF NOT EXISTS idx_dsar_tickets_email ON dsar_tickets(email);
|
|
28
|
+
|
|
29
|
+
-- Index for user_identifier lookups (data deletion tracking)
|
|
30
|
+
CREATE INDEX IF NOT EXISTS idx_dsar_tickets_user_identifier ON dsar_tickets(user_identifier);
|
|
31
|
+
|
|
32
|
+
-- Index for request type queries (metrics by type)
|
|
33
|
+
CREATE INDEX IF NOT EXISTS idx_dsar_tickets_request_type ON dsar_tickets(request_type);
|
|
34
|
+
|
|
35
|
+
-- Index for timestamp queries (30-day response compliance)
|
|
36
|
+
CREATE INDEX IF NOT EXISTS idx_dsar_tickets_submitted_at ON dsar_tickets(submitted_at);
|
|
37
|
+
|
|
38
|
+
-- Composite index for common admin query (status + submitted date)
|
|
39
|
+
CREATE INDEX IF NOT EXISTS idx_dsar_tickets_status_submitted ON dsar_tickets(status, submitted_at);
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
-- Migration 008: Rename dsar_tickets to tickets and add SOP architecture
|
|
2
|
+
-- Purpose: Make tickets universal with DSAR as always-present default capability
|
|
3
|
+
-- Impact: All agents have DSAR SOPs, agents can add custom ticket SOPs via templates
|
|
4
|
+
--
|
|
5
|
+
-- Architecture Decision:
|
|
6
|
+
-- - DSAR is universal (GDPR compliance required for all agents)
|
|
7
|
+
-- - Other ticket types (appointments, incidents) are agent-specific
|
|
8
|
+
-- - SOP column links to agent template ticket configuration
|
|
9
|
+
-- - Metadata JSON stores stage progress and results
|
|
10
|
+
|
|
11
|
+
-- Step 1: Create new tickets table with SOP architecture
|
|
12
|
+
CREATE TABLE IF NOT EXISTS tickets (
|
|
13
|
+
ticket_id TEXT PRIMARY KEY,
|
|
14
|
+
sop TEXT NOT NULL, -- Standard Operating Procedure (e.g., "DSAR_ACCESS", "APPOINTMENT_SCHEDULE")
|
|
15
|
+
ticket_type TEXT NOT NULL, -- Category (e.g., "dsar", "appointment", "incident")
|
|
16
|
+
status TEXT NOT NULL CHECK(status IN ('pending', 'in_progress', 'completed', 'cancelled', 'failed')),
|
|
17
|
+
priority INTEGER NOT NULL DEFAULT 5 CHECK(priority BETWEEN 1 AND 10), -- 1=lowest, 10=urgent
|
|
18
|
+
|
|
19
|
+
-- Contact & identification
|
|
20
|
+
email TEXT NOT NULL,
|
|
21
|
+
user_identifier TEXT,
|
|
22
|
+
|
|
23
|
+
-- Lifecycle timestamps
|
|
24
|
+
submitted_at TIMESTAMP NOT NULL,
|
|
25
|
+
deadline TIMESTAMP, -- Calculated from SOP config
|
|
26
|
+
last_updated TIMESTAMP NOT NULL,
|
|
27
|
+
completed_at TIMESTAMP,
|
|
28
|
+
|
|
29
|
+
-- Workflow state
|
|
30
|
+
metadata JSONB NOT NULL DEFAULT '{}'::jsonb, -- Stage progress, results, SOP-specific data
|
|
31
|
+
notes TEXT,
|
|
32
|
+
|
|
33
|
+
-- Tracking
|
|
34
|
+
automated BOOLEAN NOT NULL DEFAULT FALSE,
|
|
35
|
+
correlation_id TEXT, -- Links to tasks/thoughts processing this ticket
|
|
36
|
+
|
|
37
|
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
-- Step 2: Migrate existing dsar_tickets to new tickets table
|
|
41
|
+
INSERT INTO tickets (
|
|
42
|
+
ticket_id,
|
|
43
|
+
sop,
|
|
44
|
+
ticket_type,
|
|
45
|
+
status,
|
|
46
|
+
priority,
|
|
47
|
+
email,
|
|
48
|
+
user_identifier,
|
|
49
|
+
submitted_at,
|
|
50
|
+
deadline,
|
|
51
|
+
last_updated,
|
|
52
|
+
completed_at,
|
|
53
|
+
metadata,
|
|
54
|
+
notes,
|
|
55
|
+
automated,
|
|
56
|
+
created_at
|
|
57
|
+
)
|
|
58
|
+
SELECT
|
|
59
|
+
ticket_id,
|
|
60
|
+
-- Map request_type to SOP
|
|
61
|
+
CASE request_type
|
|
62
|
+
WHEN 'access' THEN 'DSAR_ACCESS'
|
|
63
|
+
WHEN 'delete' THEN 'DSAR_DELETE'
|
|
64
|
+
WHEN 'export' THEN 'DSAR_EXPORT'
|
|
65
|
+
WHEN 'correct' THEN 'DSAR_RECTIFY'
|
|
66
|
+
ELSE 'DSAR_ACCESS' -- fallback
|
|
67
|
+
END as sop,
|
|
68
|
+
'dsar' as ticket_type,
|
|
69
|
+
-- Map old status to new status
|
|
70
|
+
CASE status
|
|
71
|
+
WHEN 'pending_review' THEN 'pending'
|
|
72
|
+
WHEN 'in_progress' THEN 'in_progress'
|
|
73
|
+
WHEN 'completed' THEN 'completed'
|
|
74
|
+
WHEN 'rejected' THEN 'cancelled'
|
|
75
|
+
ELSE 'pending'
|
|
76
|
+
END as status,
|
|
77
|
+
-- Map urgent flag to priority
|
|
78
|
+
CASE urgent
|
|
79
|
+
WHEN TRUE THEN 9 -- urgent = priority 9
|
|
80
|
+
ELSE 5 -- normal = priority 5
|
|
81
|
+
END as priority,
|
|
82
|
+
email,
|
|
83
|
+
user_identifier,
|
|
84
|
+
submitted_at,
|
|
85
|
+
estimated_completion as deadline,
|
|
86
|
+
last_updated,
|
|
87
|
+
CASE
|
|
88
|
+
WHEN status = 'completed' THEN last_updated
|
|
89
|
+
ELSE NULL
|
|
90
|
+
END as completed_at,
|
|
91
|
+
-- Build metadata JSONB from legacy fields
|
|
92
|
+
jsonb_build_object(
|
|
93
|
+
'legacy_request_type', request_type,
|
|
94
|
+
'legacy_details', COALESCE(details, ''),
|
|
95
|
+
'access_package', COALESCE(access_package_json::jsonb, 'null'::jsonb),
|
|
96
|
+
'export_package', COALESCE(export_package_json::jsonb, 'null'::jsonb),
|
|
97
|
+
'stages', '{}'::jsonb
|
|
98
|
+
) as metadata,
|
|
99
|
+
notes,
|
|
100
|
+
automated,
|
|
101
|
+
created_at
|
|
102
|
+
FROM dsar_tickets;
|
|
103
|
+
|
|
104
|
+
-- Step 3: Drop old dsar_tickets table
|
|
105
|
+
DROP TABLE dsar_tickets;
|
|
106
|
+
|
|
107
|
+
-- Step 4: Create indexes for new tickets table
|
|
108
|
+
CREATE INDEX IF NOT EXISTS idx_tickets_sop ON tickets(sop);
|
|
109
|
+
CREATE INDEX IF NOT EXISTS idx_tickets_type ON tickets(ticket_type);
|
|
110
|
+
CREATE INDEX IF NOT EXISTS idx_tickets_status ON tickets(status);
|
|
111
|
+
CREATE INDEX IF NOT EXISTS idx_tickets_email ON tickets(email);
|
|
112
|
+
CREATE INDEX IF NOT EXISTS idx_tickets_user_identifier ON tickets(user_identifier);
|
|
113
|
+
CREATE INDEX IF NOT EXISTS idx_tickets_submitted_at ON tickets(submitted_at);
|
|
114
|
+
CREATE INDEX IF NOT EXISTS idx_tickets_deadline ON tickets(deadline);
|
|
115
|
+
CREATE INDEX IF NOT EXISTS idx_tickets_correlation_id ON tickets(correlation_id);
|
|
116
|
+
|
|
117
|
+
-- Composite indexes for common queries
|
|
118
|
+
CREATE INDEX IF NOT EXISTS idx_tickets_status_submitted ON tickets(status, submitted_at);
|
|
119
|
+
CREATE INDEX IF NOT EXISTS idx_tickets_sop_status ON tickets(sop, status);
|
|
120
|
+
CREATE INDEX IF NOT EXISTS idx_tickets_type_status ON tickets(ticket_type, status);
|
|
121
|
+
|
|
122
|
+
-- GIN index for JSONB metadata queries (PostgreSQL specific)
|
|
123
|
+
CREATE INDEX IF NOT EXISTS idx_tickets_metadata_gin ON tickets USING GIN (metadata);
|