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.
Files changed (986) hide show
  1. ciris_adapters/README.md +113 -0
  2. ciris_adapters/__init__.py +30 -0
  3. ciris_adapters/ciris_covenant_metrics/README.md +144 -0
  4. ciris_adapters/ciris_covenant_metrics/__init__.py +36 -0
  5. ciris_adapters/ciris_covenant_metrics/adapter.py +249 -0
  6. ciris_adapters/ciris_covenant_metrics/manifest.json +152 -0
  7. ciris_adapters/ciris_covenant_metrics/services.py +403 -0
  8. ciris_adapters/ciris_hosted_tools/__init__.py +24 -0
  9. ciris_adapters/ciris_hosted_tools/adapter.py +169 -0
  10. ciris_adapters/ciris_hosted_tools/manifest.json +94 -0
  11. ciris_adapters/ciris_hosted_tools/services.py +744 -0
  12. ciris_adapters/external_data_sql/README.md +559 -0
  13. ciris_adapters/external_data_sql/__init__.py +43 -0
  14. ciris_adapters/external_data_sql/adapter.py +144 -0
  15. ciris_adapters/external_data_sql/configurable.py +315 -0
  16. ciris_adapters/external_data_sql/dialects/__init__.py +37 -0
  17. ciris_adapters/external_data_sql/dialects/base.py +133 -0
  18. ciris_adapters/external_data_sql/dialects/mysql.py +63 -0
  19. ciris_adapters/external_data_sql/dialects/postgresql.py +59 -0
  20. ciris_adapters/external_data_sql/dialects/sqlite.py +62 -0
  21. ciris_adapters/external_data_sql/example_config.json +88 -0
  22. ciris_adapters/external_data_sql/example_privacy_schema.yaml +127 -0
  23. ciris_adapters/external_data_sql/manifest.json +195 -0
  24. ciris_adapters/external_data_sql/privacy_schema_loader.py +189 -0
  25. ciris_adapters/external_data_sql/protocol.py +101 -0
  26. ciris_adapters/external_data_sql/schemas.py +146 -0
  27. ciris_adapters/external_data_sql/service.py +1547 -0
  28. ciris_adapters/external_data_sql/service_old.py +492 -0
  29. ciris_adapters/home_assistant/__init__.py +63 -0
  30. ciris_adapters/home_assistant/adapter.py +201 -0
  31. ciris_adapters/home_assistant/communication_service.py +347 -0
  32. ciris_adapters/home_assistant/configurable.py +667 -0
  33. ciris_adapters/home_assistant/manifest.json +203 -0
  34. ciris_adapters/home_assistant/schemas.py +129 -0
  35. ciris_adapters/home_assistant/service.py +751 -0
  36. ciris_adapters/home_assistant/tool_service.py +441 -0
  37. ciris_adapters/mcp_client/__init__.py +82 -0
  38. ciris_adapters/mcp_client/adapter.py +847 -0
  39. ciris_adapters/mcp_client/config.py +280 -0
  40. ciris_adapters/mcp_client/configurable.py +422 -0
  41. ciris_adapters/mcp_client/manifest.json +185 -0
  42. ciris_adapters/mcp_client/mcp_communication_service.py +393 -0
  43. ciris_adapters/mcp_client/mcp_tool_service.py +463 -0
  44. ciris_adapters/mcp_client/mcp_wise_service.py +394 -0
  45. ciris_adapters/mcp_client/schemas.py +149 -0
  46. ciris_adapters/mcp_client/security.py +592 -0
  47. ciris_adapters/mcp_common/__init__.py +44 -0
  48. ciris_adapters/mcp_common/manifest.json +25 -0
  49. ciris_adapters/mcp_common/protocol.py +315 -0
  50. ciris_adapters/mcp_common/schemas.py +225 -0
  51. ciris_adapters/mcp_server/__init__.py +47 -0
  52. ciris_adapters/mcp_server/adapter.py +581 -0
  53. ciris_adapters/mcp_server/config.py +260 -0
  54. ciris_adapters/mcp_server/configurable.py +393 -0
  55. ciris_adapters/mcp_server/handlers.py +663 -0
  56. ciris_adapters/mcp_server/manifest.json +211 -0
  57. ciris_adapters/mcp_server/security.py +500 -0
  58. ciris_adapters/mock_llm/README.md +117 -0
  59. ciris_adapters/mock_llm/__init__.py +21 -0
  60. ciris_adapters/mock_llm/adapter.py +131 -0
  61. ciris_adapters/mock_llm/configurable.py +237 -0
  62. ciris_adapters/mock_llm/manifest.json +106 -0
  63. ciris_adapters/mock_llm/protocol.py +37 -0
  64. ciris_adapters/mock_llm/responses.py +520 -0
  65. ciris_adapters/mock_llm/responses_action_selection.py +1041 -0
  66. ciris_adapters/mock_llm/responses_epistemic.py +17 -0
  67. ciris_adapters/mock_llm/responses_feedback.py +27 -0
  68. ciris_adapters/mock_llm/schemas.py +35 -0
  69. ciris_adapters/mock_llm/service.py +294 -0
  70. ciris_adapters/navigation/__init__.py +21 -0
  71. ciris_adapters/navigation/adapter.py +129 -0
  72. ciris_adapters/navigation/configurable.py +239 -0
  73. ciris_adapters/navigation/manifest.json +104 -0
  74. ciris_adapters/navigation/service.py +487 -0
  75. ciris_adapters/reddit/README.md +132 -0
  76. ciris_adapters/reddit/REDDIT_ADAPTER_ANALYSIS.md +715 -0
  77. ciris_adapters/reddit/REDDIT_ADAPTER_SUMMARY.txt +278 -0
  78. ciris_adapters/reddit/REDDIT_ANALYSIS_INDEX.md +307 -0
  79. ciris_adapters/reddit/REDDIT_PRODUCTION_READINESS_PLAN.md +518 -0
  80. ciris_adapters/reddit/__init__.py +15 -0
  81. ciris_adapters/reddit/adapter.py +189 -0
  82. ciris_adapters/reddit/configurable.py +274 -0
  83. ciris_adapters/reddit/error_handler.py +307 -0
  84. ciris_adapters/reddit/manifest.json +218 -0
  85. ciris_adapters/reddit/observer.py +532 -0
  86. ciris_adapters/reddit/protocol.py +34 -0
  87. ciris_adapters/reddit/schemas.py +433 -0
  88. ciris_adapters/reddit/service.py +1471 -0
  89. ciris_adapters/sample_adapter/README.md +474 -0
  90. ciris_adapters/sample_adapter/__init__.py +45 -0
  91. ciris_adapters/sample_adapter/adapter.py +208 -0
  92. ciris_adapters/sample_adapter/configurable.py +469 -0
  93. ciris_adapters/sample_adapter/manifest.json +247 -0
  94. ciris_adapters/sample_adapter/services.py +486 -0
  95. ciris_adapters/weather/__init__.py +16 -0
  96. ciris_adapters/weather/adapter.py +130 -0
  97. ciris_adapters/weather/configurable.py +240 -0
  98. ciris_adapters/weather/manifest.json +156 -0
  99. ciris_adapters/weather/service.py +600 -0
  100. ciris_agent-1.7.7.dist-info/METADATA +284 -0
  101. ciris_agent-1.7.7.dist-info/RECORD +986 -0
  102. ciris_agent-1.7.7.dist-info/WHEEL +5 -0
  103. ciris_agent-1.7.7.dist-info/entry_points.txt +15 -0
  104. ciris_agent-1.7.7.dist-info/licenses/LICENSE +205 -0
  105. ciris_agent-1.7.7.dist-info/licenses/NOTICE +82 -0
  106. ciris_agent-1.7.7.dist-info/top_level.txt +4 -0
  107. ciris_engine/__init__.py +15 -0
  108. ciris_engine/ciris_templates/ally.yaml +632 -0
  109. ciris_engine/ciris_templates/default.yaml +411 -0
  110. ciris_engine/ciris_templates/echo-core.yaml +629 -0
  111. ciris_engine/ciris_templates/echo-speculative.yaml +764 -0
  112. ciris_engine/ciris_templates/echo.yaml +647 -0
  113. ciris_engine/ciris_templates/sage.yaml +332 -0
  114. ciris_engine/ciris_templates/scout.yaml +338 -0
  115. ciris_engine/ciris_templates/test.yaml +168 -0
  116. ciris_engine/cli.py +42 -0
  117. ciris_engine/config/CIRIS_SERVICES.json +19 -0
  118. ciris_engine/config/MODEL_CAPABILITIES.json +419 -0
  119. ciris_engine/config/PRICING_DATA.json +179 -0
  120. ciris_engine/config/__init__.py +50 -0
  121. ciris_engine/config/ciris_services.py +113 -0
  122. ciris_engine/config/model_capabilities.py +388 -0
  123. ciris_engine/config/pricing_models.py +276 -0
  124. ciris_engine/constants.py +35 -0
  125. ciris_engine/data/__init__.py +1 -0
  126. ciris_engine/data/covenant_1.0b.txt +978 -0
  127. ciris_engine/gui_static/11steps.svg +107 -0
  128. ciris_engine/gui_static/2x-schematics.png +0 -0
  129. ciris_engine/gui_static/404/index.html +1 -0
  130. ciris_engine/gui_static/404.html +1 -0
  131. ciris_engine/gui_static/_next/static/0edhkwDxd5UccTsCmtaBi/_buildManifest.js +1 -0
  132. ciris_engine/gui_static/_next/static/0edhkwDxd5UccTsCmtaBi/_ssgManifest.js +1 -0
  133. ciris_engine/gui_static/_next/static/U-3xTQao7hc2wnAi-Uekm/_buildManifest.js +1 -0
  134. ciris_engine/gui_static/_next/static/U-3xTQao7hc2wnAi-Uekm/_ssgManifest.js +1 -0
  135. ciris_engine/gui_static/_next/static/chunks/3297-60e86ba0f8a7b040.js +1 -0
  136. ciris_engine/gui_static/_next/static/chunks/3835-2aad4b7f5f8e4643.js +1 -0
  137. ciris_engine/gui_static/_next/static/chunks/4499-99a0bc47de0b8975.js +1 -0
  138. ciris_engine/gui_static/_next/static/chunks/4534-af88cd4ba6e99bff.js +1 -0
  139. ciris_engine/gui_static/_next/static/chunks/4541-84b455f9e0dc4cfe.js +1 -0
  140. ciris_engine/gui_static/_next/static/chunks/4789-61412711484754bb.js +1 -0
  141. ciris_engine/gui_static/_next/static/chunks/6539-c6398bc9d7018430.js +1 -0
  142. ciris_engine/gui_static/_next/static/chunks/704-8e827b26cc8c2d32.js +1 -0
  143. ciris_engine/gui_static/_next/static/chunks/704-fb45d630f3192c6f.js +1 -0
  144. ciris_engine/gui_static/_next/static/chunks/8072-de4952a2e6d2b33f.js +1 -0
  145. ciris_engine/gui_static/_next/static/chunks/8315-b91d03a3949db0af.js +1 -0
  146. ciris_engine/gui_static/_next/static/chunks/8386-f93a83ccbd789bd9.js +1 -0
  147. ciris_engine/gui_static/_next/static/chunks/87c73c54-781a7f35148d5433.js +1 -0
  148. ciris_engine/gui_static/_next/static/chunks/8903-fefea3339a02d41b.js +1 -0
  149. ciris_engine/gui_static/_next/static/chunks/9090-e66485adf8d9d990.js +1 -0
  150. ciris_engine/gui_static/_next/static/chunks/app/_not-found/page-a67d9808462c23b1.js +1 -0
  151. ciris_engine/gui_static/_next/static/chunks/app/account/api-keys/page-2d7ee1583bbbd02e.js +1 -0
  152. ciris_engine/gui_static/_next/static/chunks/app/account/api-keys/page-6a3c2bae6fe92b7b.js +1 -0
  153. ciris_engine/gui_static/_next/static/chunks/app/account/consent/page-2ed3a035136bc4e8.js +1 -0
  154. ciris_engine/gui_static/_next/static/chunks/app/account/consent/page-b2f5c91844a32422.js +1 -0
  155. ciris_engine/gui_static/_next/static/chunks/app/account/page-25b90f89af3ea58c.js +1 -0
  156. ciris_engine/gui_static/_next/static/chunks/app/account/page-b65d16c94ecaf69c.js +1 -0
  157. ciris_engine/gui_static/_next/static/chunks/app/account/privacy/page-675b6d05c8f9184f.js +1 -0
  158. ciris_engine/gui_static/_next/static/chunks/app/account/privacy/page-cbee2e1c8ab52145.js +1 -0
  159. ciris_engine/gui_static/_next/static/chunks/app/account/settings/page-0f44da06697cf9f0.js +1 -0
  160. ciris_engine/gui_static/_next/static/chunks/app/account/settings/page-563420253577edbf.js +1 -0
  161. ciris_engine/gui_static/_next/static/chunks/app/adapters/page-1854631018bc32be.js +1 -0
  162. ciris_engine/gui_static/_next/static/chunks/app/agents/page-8353752c176a7c70.js +1 -0
  163. ciris_engine/gui_static/_next/static/chunks/app/agents/page-f61a529f110a6040.js +1 -0
  164. ciris_engine/gui_static/_next/static/chunks/app/api-demo/page-7f19b9d20d39be28.js +1 -0
  165. ciris_engine/gui_static/_next/static/chunks/app/api-demo/page-d1063938f249b8bd.js +1 -0
  166. ciris_engine/gui_static/_next/static/chunks/app/audit/page-321b6728b8fff0bb.js +1 -0
  167. ciris_engine/gui_static/_next/static/chunks/app/audit/page-ebac35ca961a1277.js +1 -0
  168. ciris_engine/gui_static/_next/static/chunks/app/billing/page-6f3dc3bd02924f8e.js +1 -0
  169. ciris_engine/gui_static/_next/static/chunks/app/billing/page-fa4a469f814c821a.js +1 -0
  170. ciris_engine/gui_static/_next/static/chunks/app/comms/page-0d4f734269addd8f.js +1 -0
  171. ciris_engine/gui_static/_next/static/chunks/app/comms/page-79227d426050089c.js +1 -0
  172. ciris_engine/gui_static/_next/static/chunks/app/config/page-018d21d683b6e5bc.js +1 -0
  173. ciris_engine/gui_static/_next/static/chunks/app/config/page-2aa5a5363ca2a371.js +1 -0
  174. ciris_engine/gui_static/_next/static/chunks/app/consent/page-198373205fd316e2.js +1 -0
  175. ciris_engine/gui_static/_next/static/chunks/app/consent/page-f2ca39e7713b13f8.js +1 -0
  176. ciris_engine/gui_static/_next/static/chunks/app/dashboard/page-1dd5a196f643c60d.js +1 -0
  177. ciris_engine/gui_static/_next/static/chunks/app/dashboard/page-530a04d3abbb8cda.js +1 -0
  178. ciris_engine/gui_static/_next/static/chunks/app/docs/page-3193b06d094ab654.js +1 -0
  179. ciris_engine/gui_static/_next/static/chunks/app/docs/page-330e996dedb87aba.js +1 -0
  180. ciris_engine/gui_static/_next/static/chunks/app/layout-0a70f5fc460298b1.js +1 -0
  181. ciris_engine/gui_static/_next/static/chunks/app/layout-21f2f99dd5b336e9.js +1 -0
  182. ciris_engine/gui_static/_next/static/chunks/app/login/page-33240e6c6034a49d.js +1 -0
  183. ciris_engine/gui_static/_next/static/chunks/app/login/page-68ffab6d54a7fdcd.js +1 -0
  184. ciris_engine/gui_static/_next/static/chunks/app/logs/page-8a6167aecc4a475c.js +1 -0
  185. ciris_engine/gui_static/_next/static/chunks/app/memory/page-9ca8c5d0056de3ff.js +1 -0
  186. ciris_engine/gui_static/_next/static/chunks/app/memory/page-e961226941c18f81.js +1 -0
  187. ciris_engine/gui_static/_next/static/chunks/app/page-6fdb065a787a4974.js +1 -0
  188. ciris_engine/gui_static/_next/static/chunks/app/page-89f87d431be6064a.js +1 -0
  189. ciris_engine/gui_static/_next/static/chunks/app/runtime/page-2e728b9c43aa164d.js +1 -0
  190. ciris_engine/gui_static/_next/static/chunks/app/runtime/page-c7dd033dc40a72f0.js +1 -0
  191. ciris_engine/gui_static/_next/static/chunks/app/services/page-ae9f0bdf11d01a95.js +1 -0
  192. ciris_engine/gui_static/_next/static/chunks/app/services/page-b10feb79ca5d75e5.js +1 -0
  193. ciris_engine/gui_static/_next/static/chunks/app/sessions/page-13ebe7ef1c16ae11.js +1 -0
  194. ciris_engine/gui_static/_next/static/chunks/app/sessions/page-e6c82b16d617f785.js +1 -0
  195. ciris_engine/gui_static/_next/static/chunks/app/setup/page-0beb5f5b5a5c20fc.js +1 -0
  196. ciris_engine/gui_static/_next/static/chunks/app/setup/page-2595e729eae30c0e.js +1 -0
  197. ciris_engine/gui_static/_next/static/chunks/app/status-dashboard/page-1037c987aecc3653.js +1 -0
  198. ciris_engine/gui_static/_next/static/chunks/app/status-dashboard/page-2ffd147f6d3162ff.js +1 -0
  199. ciris_engine/gui_static/_next/static/chunks/app/system/page-2c5798d58cafcd91.js +1 -0
  200. ciris_engine/gui_static/_next/static/chunks/app/system/page-505b1ba4eceb01c3.js +1 -0
  201. ciris_engine/gui_static/_next/static/chunks/app/test-auth/page-b0cad31d5cb1b2fa.js +1 -0
  202. ciris_engine/gui_static/_next/static/chunks/app/test-auth/page-f3ecd7a8012df230.js +1 -0
  203. ciris_engine/gui_static/_next/static/chunks/app/test-login/page-f35117fdc4105801.js +1 -0
  204. ciris_engine/gui_static/_next/static/chunks/app/test-login/page-fb583a7924114906.js +1 -0
  205. ciris_engine/gui_static/_next/static/chunks/app/test-sdk/page-50f116fd76935563.js +1 -0
  206. ciris_engine/gui_static/_next/static/chunks/app/test-sdk/page-c37d8aa5ba623a44.js +1 -0
  207. ciris_engine/gui_static/_next/static/chunks/app/tools/page-429aec7a707777ef.js +1 -0
  208. ciris_engine/gui_static/_next/static/chunks/app/tools/page-5f705aad60e0c04e.js +1 -0
  209. ciris_engine/gui_static/_next/static/chunks/app/users/page-13476b8b0f3808cc.js +1 -0
  210. ciris_engine/gui_static/_next/static/chunks/app/users/page-7e500d154ed5bba4.js +1 -0
  211. ciris_engine/gui_static/_next/static/chunks/app/wa/page-cc4a9d8a5cb44d08.js +1 -0
  212. ciris_engine/gui_static/_next/static/chunks/app/wa/page-ec3e429efbc79230.js +1 -0
  213. ciris_engine/gui_static/_next/static/chunks/framework-9d29490f5ba089ba.js +1 -0
  214. ciris_engine/gui_static/_next/static/chunks/main-1f554952e47a82c4.js +1 -0
  215. ciris_engine/gui_static/_next/static/chunks/main-app-26fa8aed029082e5.js +1 -0
  216. ciris_engine/gui_static/_next/static/chunks/main-app-97b0486ef6bcef25.js +1 -0
  217. ciris_engine/gui_static/_next/static/chunks/pages/_app-6ce685456e616eb2.js +1 -0
  218. ciris_engine/gui_static/_next/static/chunks/pages/_error-d4bce98d93fe21e7.js +1 -0
  219. ciris_engine/gui_static/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  220. ciris_engine/gui_static/_next/static/chunks/webpack-fcebd240b7f8477d.js +1 -0
  221. ciris_engine/gui_static/_next/static/css/16b94b1fe0cc6e37.css +3 -0
  222. ciris_engine/gui_static/_next/static/css/77a24ceaae86deff.css +3 -0
  223. ciris_engine/gui_static/_next/static/media/4cf2300e9c8272f7-s.p.woff2 +0 -0
  224. ciris_engine/gui_static/_next/static/media/747892c23ea88013-s.woff2 +0 -0
  225. ciris_engine/gui_static/_next/static/media/8d697b304b401681-s.woff2 +0 -0
  226. ciris_engine/gui_static/_next/static/media/93f479601ee12b01-s.p.woff2 +0 -0
  227. ciris_engine/gui_static/_next/static/media/9610d9e46709d722-s.woff2 +0 -0
  228. ciris_engine/gui_static/_next/static/media/ba015fad6dcf6784-s.woff2 +0 -0
  229. ciris_engine/gui_static/_next/static/media/d8298875641ec7d4-s.p.woff2 +0 -0
  230. ciris_engine/gui_static/account/api-keys/index.html +1 -0
  231. ciris_engine/gui_static/account/api-keys/index.txt +27 -0
  232. ciris_engine/gui_static/account/consent/index.html +1 -0
  233. ciris_engine/gui_static/account/consent/index.txt +27 -0
  234. ciris_engine/gui_static/account/index.html +1 -0
  235. ciris_engine/gui_static/account/index.txt +27 -0
  236. ciris_engine/gui_static/account/privacy/index.html +1 -0
  237. ciris_engine/gui_static/account/privacy/index.txt +27 -0
  238. ciris_engine/gui_static/account/settings/index.html +1 -0
  239. ciris_engine/gui_static/account/settings/index.txt +27 -0
  240. ciris_engine/gui_static/adapters/index.html +1 -0
  241. ciris_engine/gui_static/adapters/index.txt +27 -0
  242. ciris_engine/gui_static/agents/index.html +1 -0
  243. ciris_engine/gui_static/agents/index.txt +27 -0
  244. ciris_engine/gui_static/andrew-roberts-euBRXcx57T4-unsplash.jpg +0 -0
  245. ciris_engine/gui_static/api-demo/index.html +1 -0
  246. ciris_engine/gui_static/api-demo/index.txt +27 -0
  247. ciris_engine/gui_static/audit/index.html +1 -0
  248. ciris_engine/gui_static/audit/index.txt +27 -0
  249. ciris_engine/gui_static/billing/index.html +1 -0
  250. ciris_engine/gui_static/billing/index.txt +27 -0
  251. ciris_engine/gui_static/blurryinfo.png +0 -0
  252. ciris_engine/gui_static/chip-vincent-PkQDwfl9Flc-unsplash.jpg +0 -0
  253. ciris_engine/gui_static/ciris-architecture.svg +338 -0
  254. ciris_engine/gui_static/comms/index.html +1 -0
  255. ciris_engine/gui_static/comms/index.txt +27 -0
  256. ciris_engine/gui_static/config/index.html +1 -0
  257. ciris_engine/gui_static/config/index.txt +27 -0
  258. ciris_engine/gui_static/consent/index.html +1 -0
  259. ciris_engine/gui_static/consent/index.txt +27 -0
  260. ciris_engine/gui_static/dashboard/index.html +1 -0
  261. ciris_engine/gui_static/dashboard/index.txt +27 -0
  262. ciris_engine/gui_static/docs/index.html +1 -0
  263. ciris_engine/gui_static/docs/index.txt +27 -0
  264. ciris_engine/gui_static/eric.png +0 -0
  265. ciris_engine/gui_static/file.svg +1 -0
  266. ciris_engine/gui_static/globe.svg +1 -0
  267. ciris_engine/gui_static/index.html +1 -0
  268. ciris_engine/gui_static/index.txt +27 -0
  269. ciris_engine/gui_static/infogfx-1@2x.png +0 -0
  270. ciris_engine/gui_static/infogfx-2.png +0 -0
  271. ciris_engine/gui_static/infogfx-dark-1.png +0 -0
  272. ciris_engine/gui_static/kelly-vohs-soSTXmIxTDU-unsplash.jpg +0 -0
  273. ciris_engine/gui_static/login/index.html +1 -0
  274. ciris_engine/gui_static/login/index.txt +27 -0
  275. ciris_engine/gui_static/logs/index.html +1 -0
  276. ciris_engine/gui_static/logs/index.txt +27 -0
  277. ciris_engine/gui_static/memory/index.html +1 -0
  278. ciris_engine/gui_static/memory/index.txt +27 -0
  279. ciris_engine/gui_static/nathan-farrish-ArcTfEoBgzs-unsplash.jpg +0 -0
  280. ciris_engine/gui_static/next.svg +1 -0
  281. ciris_engine/gui_static/overview.svg +512 -0
  282. ciris_engine/gui_static/overview1.svg +407 -0
  283. ciris_engine/gui_static/overview2.svg +370 -0
  284. ciris_engine/gui_static/pipeline-visualization.svg +278 -0
  285. ciris_engine/gui_static/privacy-policy.html +160 -0
  286. ciris_engine/gui_static/runtime/index.html +8 -0
  287. ciris_engine/gui_static/runtime/index.txt +27 -0
  288. ciris_engine/gui_static/services/index.html +1 -0
  289. ciris_engine/gui_static/services/index.txt +27 -0
  290. ciris_engine/gui_static/sessions/index.html +1 -0
  291. ciris_engine/gui_static/sessions/index.txt +27 -0
  292. ciris_engine/gui_static/setup/index.html +1 -0
  293. ciris_engine/gui_static/setup/index.txt +27 -0
  294. ciris_engine/gui_static/status-dashboard/index.html +1 -0
  295. ciris_engine/gui_static/status-dashboard/index.txt +27 -0
  296. ciris_engine/gui_static/system/index.html +1 -0
  297. ciris_engine/gui_static/system/index.txt +27 -0
  298. ciris_engine/gui_static/terms-of-service.html +174 -0
  299. ciris_engine/gui_static/test-auth/index.html +1 -0
  300. ciris_engine/gui_static/test-auth/index.txt +27 -0
  301. ciris_engine/gui_static/test-login/index.html +1 -0
  302. ciris_engine/gui_static/test-login/index.txt +27 -0
  303. ciris_engine/gui_static/test-sdk/index.html +1 -0
  304. ciris_engine/gui_static/test-sdk/index.txt +27 -0
  305. ciris_engine/gui_static/tools/index.html +1 -0
  306. ciris_engine/gui_static/tools/index.txt +27 -0
  307. ciris_engine/gui_static/users/index.html +1 -0
  308. ciris_engine/gui_static/users/index.txt +27 -0
  309. ciris_engine/gui_static/vercel.svg +1 -0
  310. ciris_engine/gui_static/videos/video1.mp4 +0 -0
  311. ciris_engine/gui_static/videos/video3.mp4 +0 -0
  312. ciris_engine/gui_static/wa/index.html +1 -0
  313. ciris_engine/gui_static/wa/index.txt +27 -0
  314. ciris_engine/gui_static/window.svg +1 -0
  315. ciris_engine/logic/__init__.py +8 -0
  316. ciris_engine/logic/adapters/__init__.py +74 -0
  317. ciris_engine/logic/adapters/api/__init__.py +5 -0
  318. ciris_engine/logic/adapters/api/adapter.py +1037 -0
  319. ciris_engine/logic/adapters/api/api_communication.py +370 -0
  320. ciris_engine/logic/adapters/api/api_document.py +330 -0
  321. ciris_engine/logic/adapters/api/api_observer.py +24 -0
  322. ciris_engine/logic/adapters/api/api_runtime_control.py +388 -0
  323. ciris_engine/logic/adapters/api/api_tools.py +299 -0
  324. ciris_engine/logic/adapters/api/api_vision.py +215 -0
  325. ciris_engine/logic/adapters/api/app.py +272 -0
  326. ciris_engine/logic/adapters/api/auth.py +159 -0
  327. ciris_engine/logic/adapters/api/config.py +101 -0
  328. ciris_engine/logic/adapters/api/constants.py +55 -0
  329. ciris_engine/logic/adapters/api/dependencies/__init__.py +1 -0
  330. ciris_engine/logic/adapters/api/dependencies/auth.py +260 -0
  331. ciris_engine/logic/adapters/api/endpoints/__init__.py +1 -0
  332. ciris_engine/logic/adapters/api/endpoints/emergency.py +86 -0
  333. ciris_engine/logic/adapters/api/middleware/__init__.py +1 -0
  334. ciris_engine/logic/adapters/api/middleware/rate_limiter.py +302 -0
  335. ciris_engine/logic/adapters/api/models.py +29 -0
  336. ciris_engine/logic/adapters/api/routes/__init__.py +52 -0
  337. ciris_engine/logic/adapters/api/routes/agent.py +1762 -0
  338. ciris_engine/logic/adapters/api/routes/audit.py +707 -0
  339. ciris_engine/logic/adapters/api/routes/auth.py +1745 -0
  340. ciris_engine/logic/adapters/api/routes/billing.py +895 -0
  341. ciris_engine/logic/adapters/api/routes/config.py +329 -0
  342. ciris_engine/logic/adapters/api/routes/connectors.py +534 -0
  343. ciris_engine/logic/adapters/api/routes/consent.py +637 -0
  344. ciris_engine/logic/adapters/api/routes/dsar.py +637 -0
  345. ciris_engine/logic/adapters/api/routes/dsar_multi_source.py +484 -0
  346. ciris_engine/logic/adapters/api/routes/emergency.py +302 -0
  347. ciris_engine/logic/adapters/api/routes/memory.py +733 -0
  348. ciris_engine/logic/adapters/api/routes/memory_filters.py +230 -0
  349. ciris_engine/logic/adapters/api/routes/memory_models.py +112 -0
  350. ciris_engine/logic/adapters/api/routes/memory_queries.py +236 -0
  351. ciris_engine/logic/adapters/api/routes/memory_query_helpers.py +394 -0
  352. ciris_engine/logic/adapters/api/routes/memory_visualization.py +359 -0
  353. ciris_engine/logic/adapters/api/routes/memory_visualization_helpers.py +110 -0
  354. ciris_engine/logic/adapters/api/routes/partnership.py +541 -0
  355. ciris_engine/logic/adapters/api/routes/setup.py +1374 -0
  356. ciris_engine/logic/adapters/api/routes/system.py +3049 -0
  357. ciris_engine/logic/adapters/api/routes/system_extensions.py +952 -0
  358. ciris_engine/logic/adapters/api/routes/telemetry.py +1987 -0
  359. ciris_engine/logic/adapters/api/routes/telemetry_converters.py +141 -0
  360. ciris_engine/logic/adapters/api/routes/telemetry_helpers.py +111 -0
  361. ciris_engine/logic/adapters/api/routes/telemetry_logs_reader.py +280 -0
  362. ciris_engine/logic/adapters/api/routes/telemetry_metrics.py +131 -0
  363. ciris_engine/logic/adapters/api/routes/telemetry_models.py +190 -0
  364. ciris_engine/logic/adapters/api/routes/telemetry_otlp.py +878 -0
  365. ciris_engine/logic/adapters/api/routes/telemetry_resource_helpers.py +191 -0
  366. ciris_engine/logic/adapters/api/routes/tickets.py +541 -0
  367. ciris_engine/logic/adapters/api/routes/tools.py +556 -0
  368. ciris_engine/logic/adapters/api/routes/transparency.py +281 -0
  369. ciris_engine/logic/adapters/api/routes/users.py +981 -0
  370. ciris_engine/logic/adapters/api/routes/verification.py +373 -0
  371. ciris_engine/logic/adapters/api/routes/wa.py +369 -0
  372. ciris_engine/logic/adapters/api/service_configuration.py +177 -0
  373. ciris_engine/logic/adapters/api/services/__init__.py +1 -0
  374. ciris_engine/logic/adapters/api/services/auth_service.py +1417 -0
  375. ciris_engine/logic/adapters/api/services/oauth_security.py +68 -0
  376. ciris_engine/logic/adapters/base.py +141 -0
  377. ciris_engine/logic/adapters/base_adapter.py +73 -0
  378. ciris_engine/logic/adapters/base_observer.py +1141 -0
  379. ciris_engine/logic/adapters/base_vision.py +312 -0
  380. ciris_engine/logic/adapters/cirisnode_client.py +307 -0
  381. ciris_engine/logic/adapters/cli/__init__.py +3 -0
  382. ciris_engine/logic/adapters/cli/adapter.py +207 -0
  383. ciris_engine/logic/adapters/cli/cli_adapter.py +902 -0
  384. ciris_engine/logic/adapters/cli/cli_observer.py +268 -0
  385. ciris_engine/logic/adapters/cli/cli_tools.py +427 -0
  386. ciris_engine/logic/adapters/cli/cli_wa_service.py +134 -0
  387. ciris_engine/logic/adapters/cli/config.py +73 -0
  388. ciris_engine/logic/adapters/discord/__init__.py +3 -0
  389. ciris_engine/logic/adapters/discord/adapter.py +783 -0
  390. ciris_engine/logic/adapters/discord/ciris_discord_client.py +159 -0
  391. ciris_engine/logic/adapters/discord/config.py +177 -0
  392. ciris_engine/logic/adapters/discord/constants.py +185 -0
  393. ciris_engine/logic/adapters/discord/discord-stubs.pyi +50 -0
  394. ciris_engine/logic/adapters/discord/discord_adapter.py +1584 -0
  395. ciris_engine/logic/adapters/discord/discord_audit.py +150 -0
  396. ciris_engine/logic/adapters/discord/discord_channel_manager.py +351 -0
  397. ciris_engine/logic/adapters/discord/discord_connection_manager.py +313 -0
  398. ciris_engine/logic/adapters/discord/discord_embed_formatter.py +369 -0
  399. ciris_engine/logic/adapters/discord/discord_error_classifier.py +302 -0
  400. ciris_engine/logic/adapters/discord/discord_error_handler.py +316 -0
  401. ciris_engine/logic/adapters/discord/discord_guidance_handler.py +460 -0
  402. ciris_engine/logic/adapters/discord/discord_message_handler.py +207 -0
  403. ciris_engine/logic/adapters/discord/discord_observer.py +670 -0
  404. ciris_engine/logic/adapters/discord/discord_rate_limiter.py +249 -0
  405. ciris_engine/logic/adapters/discord/discord_reaction_handler.py +278 -0
  406. ciris_engine/logic/adapters/discord/discord_tool_handler.py +465 -0
  407. ciris_engine/logic/adapters/discord/discord_tool_service.py +790 -0
  408. ciris_engine/logic/adapters/discord/discord_tools.py +90 -0
  409. ciris_engine/logic/adapters/discord/discord_vision_helper.py +148 -0
  410. ciris_engine/logic/adapters/discord/py.typed +0 -0
  411. ciris_engine/logic/adapters/document_parser.py +320 -0
  412. ciris_engine/logic/audit/__init__.py +10 -0
  413. ciris_engine/logic/audit/hash_chain.py +313 -0
  414. ciris_engine/logic/audit/signature_manager.py +352 -0
  415. ciris_engine/logic/audit/verifier.py +408 -0
  416. ciris_engine/logic/buses/__init__.py +21 -0
  417. ciris_engine/logic/buses/base_bus.py +178 -0
  418. ciris_engine/logic/buses/bus_manager.py +121 -0
  419. ciris_engine/logic/buses/communication_bus.py +387 -0
  420. ciris_engine/logic/buses/llm_bus.py +722 -0
  421. ciris_engine/logic/buses/memory_bus.py +577 -0
  422. ciris_engine/logic/buses/prohibitions.py +502 -0
  423. ciris_engine/logic/buses/runtime_control_bus.py +539 -0
  424. ciris_engine/logic/buses/tool_bus.py +482 -0
  425. ciris_engine/logic/buses/wise_bus.py +684 -0
  426. ciris_engine/logic/config/__init__.py +25 -0
  427. ciris_engine/logic/config/bootstrap.py +255 -0
  428. ciris_engine/logic/config/config_accessor.py +202 -0
  429. ciris_engine/logic/config/db_paths.py +194 -0
  430. ciris_engine/logic/config/env_utils.py +39 -0
  431. ciris_engine/logic/conscience/__init__.py +16 -0
  432. ciris_engine/logic/conscience/build_deferral_package.py +0 -0
  433. ciris_engine/logic/conscience/core.py +688 -0
  434. ciris_engine/logic/conscience/interface.py +33 -0
  435. ciris_engine/logic/conscience/registry.py +76 -0
  436. ciris_engine/logic/conscience/thought_depth_guardrail.py +231 -0
  437. ciris_engine/logic/conscience/updated_status_conscience.py +156 -0
  438. ciris_engine/logic/context/__init__.py +10 -0
  439. ciris_engine/logic/context/batch_context.py +550 -0
  440. ciris_engine/logic/context/builder.py +149 -0
  441. ciris_engine/logic/context/channel_resolution.py +136 -0
  442. ciris_engine/logic/context/secrets_snapshot.py +52 -0
  443. ciris_engine/logic/context/system_snapshot.py +116 -0
  444. ciris_engine/logic/context/system_snapshot_helpers.py +1651 -0
  445. ciris_engine/logic/covenant/__init__.py +33 -0
  446. ciris_engine/logic/covenant/executor.py +303 -0
  447. ciris_engine/logic/covenant/extractor.py +382 -0
  448. ciris_engine/logic/covenant/handler.py +241 -0
  449. ciris_engine/logic/covenant/verifier.py +383 -0
  450. ciris_engine/logic/dma/__init__.py +15 -0
  451. ciris_engine/logic/dma/action_selection/__init__.py +11 -0
  452. ciris_engine/logic/dma/action_selection/action_instruction_generator.py +444 -0
  453. ciris_engine/logic/dma/action_selection/context_builder.py +508 -0
  454. ciris_engine/logic/dma/action_selection/faculty_integration.py +193 -0
  455. ciris_engine/logic/dma/action_selection/special_cases.py +132 -0
  456. ciris_engine/logic/dma/action_selection_pdma.py +365 -0
  457. ciris_engine/logic/dma/base_dma.py +335 -0
  458. ciris_engine/logic/dma/csdma.py +239 -0
  459. ciris_engine/logic/dma/dma_executor.py +575 -0
  460. ciris_engine/logic/dma/dsdma_base.py +410 -0
  461. ciris_engine/logic/dma/exceptions.py +4 -0
  462. ciris_engine/logic/dma/factory.py +150 -0
  463. ciris_engine/logic/dma/pdma.py +120 -0
  464. ciris_engine/logic/dma/prompt_loader.py +189 -0
  465. ciris_engine/logic/dma/prompts/action_selection_pdma.yml +58 -0
  466. ciris_engine/logic/dma/prompts/csdma_common_sense.yml +28 -0
  467. ciris_engine/logic/dma/prompts/dsdma_base.yml +17 -0
  468. ciris_engine/logic/dma/prompts/pdma_ethical.yml +42 -0
  469. ciris_engine/logic/formatters/__init__.py +26 -0
  470. ciris_engine/logic/formatters/crisis_resources.py +80 -0
  471. ciris_engine/logic/formatters/escalation.py +21 -0
  472. ciris_engine/logic/formatters/identity.py +224 -0
  473. ciris_engine/logic/formatters/prompt_blocks.py +64 -0
  474. ciris_engine/logic/formatters/system_snapshot.py +193 -0
  475. ciris_engine/logic/formatters/user_profiles.py +108 -0
  476. ciris_engine/logic/handlers/__init__.py +1 -0
  477. ciris_engine/logic/handlers/control/__init__.py +1 -0
  478. ciris_engine/logic/handlers/control/defer_handler.py +195 -0
  479. ciris_engine/logic/handlers/control/ponder_handler.py +154 -0
  480. ciris_engine/logic/handlers/control/reject_handler.py +81 -0
  481. ciris_engine/logic/handlers/external/__init__.py +1 -0
  482. ciris_engine/logic/handlers/external/observe_handler.py +154 -0
  483. ciris_engine/logic/handlers/external/speak_handler.py +250 -0
  484. ciris_engine/logic/handlers/external/tool_handler.py +148 -0
  485. ciris_engine/logic/handlers/memory/__init__.py +1 -0
  486. ciris_engine/logic/handlers/memory/forget_handler.py +107 -0
  487. ciris_engine/logic/handlers/memory/memorize_handler.py +391 -0
  488. ciris_engine/logic/handlers/memory/recall_handler.py +213 -0
  489. ciris_engine/logic/handlers/terminal/__init__.py +1 -0
  490. ciris_engine/logic/handlers/terminal/task_complete_handler.py +299 -0
  491. ciris_engine/logic/infrastructure/__init__.py +1 -0
  492. ciris_engine/logic/infrastructure/handlers/__init__.py +8 -0
  493. ciris_engine/logic/infrastructure/handlers/action_dispatcher.py +382 -0
  494. ciris_engine/logic/infrastructure/handlers/base_handler.py +450 -0
  495. ciris_engine/logic/infrastructure/handlers/exceptions.py +2 -0
  496. ciris_engine/logic/infrastructure/handlers/handler_registry.py +59 -0
  497. ciris_engine/logic/infrastructure/handlers/helpers.py +55 -0
  498. ciris_engine/logic/infrastructure/step_streaming.py +149 -0
  499. ciris_engine/logic/infrastructure/sub_services/__init__.py +1 -0
  500. ciris_engine/logic/infrastructure/sub_services/identity_variance_monitor.py +1035 -0
  501. ciris_engine/logic/infrastructure/sub_services/pattern_analysis_loop.py +758 -0
  502. ciris_engine/logic/infrastructure/sub_services/wa_cli_bootstrap.py +229 -0
  503. ciris_engine/logic/infrastructure/sub_services/wa_cli_display.py +176 -0
  504. ciris_engine/logic/infrastructure/sub_services/wa_cli_oauth.py +404 -0
  505. ciris_engine/logic/infrastructure/sub_services/wa_cli_wizard.py +181 -0
  506. ciris_engine/logic/persistence/__init__.py +130 -0
  507. ciris_engine/logic/persistence/analytics.py +97 -0
  508. ciris_engine/logic/persistence/db/__init__.py +28 -0
  509. ciris_engine/logic/persistence/db/core.py +520 -0
  510. ciris_engine/logic/persistence/db/dialect.py +380 -0
  511. ciris_engine/logic/persistence/db/execution_helpers.py +216 -0
  512. ciris_engine/logic/persistence/db/migration_runner.py +191 -0
  513. ciris_engine/logic/persistence/db/operations.py +313 -0
  514. ciris_engine/logic/persistence/db/query_builder.py +232 -0
  515. ciris_engine/logic/persistence/db/retry.py +154 -0
  516. ciris_engine/logic/persistence/db/setup.py +18 -0
  517. ciris_engine/logic/persistence/migrations/postgres/001_initial_schema.sql +4 -0
  518. ciris_engine/logic/persistence/migrations/postgres/002_add_retry_status.sql +3 -0
  519. ciris_engine/logic/persistence/migrations/postgres/003_add_task_update_tracking.sql +8 -0
  520. ciris_engine/logic/persistence/migrations/postgres/004_add_occurrence_id.sql +54 -0
  521. ciris_engine/logic/persistence/migrations/postgres/005_add_consolidation_locks.sql +22 -0
  522. ciris_engine/logic/persistence/migrations/postgres/006_add_correlation_id_unique_index.sql +16 -0
  523. ciris_engine/logic/persistence/migrations/postgres/007_add_dsar_tickets.sql +39 -0
  524. ciris_engine/logic/persistence/migrations/postgres/008_rename_to_tickets_add_sop.sql +123 -0
  525. ciris_engine/logic/persistence/migrations/postgres/009_add_ticket_status_columns.sql +39 -0
  526. ciris_engine/logic/persistence/migrations/postgres/010_add_images_to_tasks.sql +5 -0
  527. ciris_engine/logic/persistence/migrations/sqlite/001_initial_schema.sql +357 -0
  528. ciris_engine/logic/persistence/migrations/sqlite/002_add_retry_status.sql +3 -0
  529. ciris_engine/logic/persistence/migrations/sqlite/003_add_task_update_tracking.sql +8 -0
  530. ciris_engine/logic/persistence/migrations/sqlite/004_add_occurrence_id.sql +45 -0
  531. ciris_engine/logic/persistence/migrations/sqlite/005_add_consolidation_locks.sql +22 -0
  532. ciris_engine/logic/persistence/migrations/sqlite/006_add_correlation_id_unique_index.sql +16 -0
  533. ciris_engine/logic/persistence/migrations/sqlite/007_add_dsar_tickets.sql +39 -0
  534. ciris_engine/logic/persistence/migrations/sqlite/008_rename_to_tickets_add_sop.sql +120 -0
  535. ciris_engine/logic/persistence/migrations/sqlite/009_add_ticket_status_columns.sql +129 -0
  536. ciris_engine/logic/persistence/migrations/sqlite/010_add_images_to_tasks.sql +17 -0
  537. ciris_engine/logic/persistence/models/__init__.py +141 -0
  538. ciris_engine/logic/persistence/models/correlations.py +881 -0
  539. ciris_engine/logic/persistence/models/deferral.py +68 -0
  540. ciris_engine/logic/persistence/models/dsar.py +286 -0
  541. ciris_engine/logic/persistence/models/graph.py +362 -0
  542. ciris_engine/logic/persistence/models/identity.py +264 -0
  543. ciris_engine/logic/persistence/models/queue_status.py +139 -0
  544. ciris_engine/logic/persistence/models/tasks.py +1043 -0
  545. ciris_engine/logic/persistence/models/thoughts.py +400 -0
  546. ciris_engine/logic/persistence/models/tickets.py +518 -0
  547. ciris_engine/logic/persistence/stores/__init__.py +13 -0
  548. ciris_engine/logic/persistence/stores/auth_helpers.py +117 -0
  549. ciris_engine/logic/persistence/stores/authentication_store.py +414 -0
  550. ciris_engine/logic/persistence/utils.py +212 -0
  551. ciris_engine/logic/processors/__init__.py +30 -0
  552. ciris_engine/logic/processors/core/__init__.py +1 -0
  553. ciris_engine/logic/processors/core/base_processor.py +280 -0
  554. ciris_engine/logic/processors/core/main_processor.py +1777 -0
  555. ciris_engine/logic/processors/core/step_decorators.py +1583 -0
  556. ciris_engine/logic/processors/core/thought_processor/__init__.py +20 -0
  557. ciris_engine/logic/processors/core/thought_processor/action_execution.py +49 -0
  558. ciris_engine/logic/processors/core/thought_processor/conscience_execution.py +382 -0
  559. ciris_engine/logic/processors/core/thought_processor/finalize_action.py +66 -0
  560. ciris_engine/logic/processors/core/thought_processor/gather_context.py +120 -0
  561. ciris_engine/logic/processors/core/thought_processor/main.py +920 -0
  562. ciris_engine/logic/processors/core/thought_processor/perform_aspdma.py +86 -0
  563. ciris_engine/logic/processors/core/thought_processor/perform_dmas.py +106 -0
  564. ciris_engine/logic/processors/core/thought_processor/recursive_processing.py +237 -0
  565. ciris_engine/logic/processors/core/thought_processor/round_complete.py +52 -0
  566. ciris_engine/logic/processors/core/thought_processor/start_round.py +64 -0
  567. ciris_engine/logic/processors/exceptions.py +59 -0
  568. ciris_engine/logic/processors/states/__init__.py +1 -0
  569. ciris_engine/logic/processors/states/dream_processor.py +1381 -0
  570. ciris_engine/logic/processors/states/play_processor.py +141 -0
  571. ciris_engine/logic/processors/states/shutdown_processor.py +623 -0
  572. ciris_engine/logic/processors/states/solitude_processor.py +305 -0
  573. ciris_engine/logic/processors/states/wakeup_processor.py +802 -0
  574. ciris_engine/logic/processors/states/work_processor.py +742 -0
  575. ciris_engine/logic/processors/support/__init__.py +1 -0
  576. ciris_engine/logic/processors/support/dma_orchestrator.py +336 -0
  577. ciris_engine/logic/processors/support/processing_queue.py +133 -0
  578. ciris_engine/logic/processors/support/shutdown_condition_evaluator.py +294 -0
  579. ciris_engine/logic/processors/support/state_manager.py +358 -0
  580. ciris_engine/logic/processors/support/task_manager.py +303 -0
  581. ciris_engine/logic/processors/support/thought_escalation.py +116 -0
  582. ciris_engine/logic/processors/support/thought_manager.py +328 -0
  583. ciris_engine/logic/processors/support/thought_manager_enhanced.py +105 -0
  584. ciris_engine/logic/registries/__init__.py +34 -0
  585. ciris_engine/logic/registries/base.py +653 -0
  586. ciris_engine/logic/registries/circuit_breaker.py +275 -0
  587. ciris_engine/logic/registries/typed_registries.py +184 -0
  588. ciris_engine/logic/runtime/__init__.py +7 -0
  589. ciris_engine/logic/runtime/adapter_loader.py +261 -0
  590. ciris_engine/logic/runtime/adapter_manager.py +1053 -0
  591. ciris_engine/logic/runtime/ciris_runtime.py +2342 -0
  592. ciris_engine/logic/runtime/ciris_runtime_helpers.py +923 -0
  593. ciris_engine/logic/runtime/component_builder.py +361 -0
  594. ciris_engine/logic/runtime/identity_manager.py +219 -0
  595. ciris_engine/logic/runtime/module_loader.py +207 -0
  596. ciris_engine/logic/runtime/prevent_sideeffects.py +30 -0
  597. ciris_engine/logic/runtime/runtime_interface.py +23 -0
  598. ciris_engine/logic/runtime/service_initializer.py +1623 -0
  599. ciris_engine/logic/secrets/__init__.py +30 -0
  600. ciris_engine/logic/secrets/encryption.py +175 -0
  601. ciris_engine/logic/secrets/filter.py +295 -0
  602. ciris_engine/logic/secrets/service.py +652 -0
  603. ciris_engine/logic/secrets/store.py +669 -0
  604. ciris_engine/logic/services/__init__.py +1 -0
  605. ciris_engine/logic/services/adaptation/__init__.py +3 -0
  606. ciris_engine/logic/services/base_graph_service.py +142 -0
  607. ciris_engine/logic/services/base_infrastructure_service.py +69 -0
  608. ciris_engine/logic/services/base_scheduled_service.py +136 -0
  609. ciris_engine/logic/services/base_service.py +247 -0
  610. ciris_engine/logic/services/governance/__init__.py +3 -0
  611. ciris_engine/logic/services/governance/adaptive_filter/__init__.py +14 -0
  612. ciris_engine/logic/services/governance/adaptive_filter/service.py +818 -0
  613. ciris_engine/logic/services/governance/consent/__init__.py +53 -0
  614. ciris_engine/logic/services/governance/consent/air.py +403 -0
  615. ciris_engine/logic/services/governance/consent/decay.py +324 -0
  616. ciris_engine/logic/services/governance/consent/dsar_automation.py +589 -0
  617. ciris_engine/logic/services/governance/consent/exceptions.py +106 -0
  618. ciris_engine/logic/services/governance/consent/metrics.py +270 -0
  619. ciris_engine/logic/services/governance/consent/partnership.py +533 -0
  620. ciris_engine/logic/services/governance/consent/service.py +1256 -0
  621. ciris_engine/logic/services/governance/dsar/__init__.py +29 -0
  622. ciris_engine/logic/services/governance/dsar/orchestrator.py +977 -0
  623. ciris_engine/logic/services/governance/dsar/schemas.py +141 -0
  624. ciris_engine/logic/services/governance/dsar/signature_service.py +283 -0
  625. ciris_engine/logic/services/governance/self_observation/__init__.py +20 -0
  626. ciris_engine/logic/services/governance/self_observation/service.py +1153 -0
  627. ciris_engine/logic/services/governance/visibility/__init__.py +17 -0
  628. ciris_engine/logic/services/governance/visibility/service.py +512 -0
  629. ciris_engine/logic/services/governance/wise_authority/__init__.py +15 -0
  630. ciris_engine/logic/services/governance/wise_authority/service.py +827 -0
  631. ciris_engine/logic/services/graph/__init__.py +5 -0
  632. ciris_engine/logic/services/graph/audit_service/__init__.py +5 -0
  633. ciris_engine/logic/services/graph/audit_service/service.py +1675 -0
  634. ciris_engine/logic/services/graph/base.py +208 -0
  635. ciris_engine/logic/services/graph/config_service/__init__.py +5 -0
  636. ciris_engine/logic/services/graph/config_service/service.py +372 -0
  637. ciris_engine/logic/services/graph/incident_service/__init__.py +5 -0
  638. ciris_engine/logic/services/graph/incident_service/service.py +803 -0
  639. ciris_engine/logic/services/graph/memory_service.py +1120 -0
  640. ciris_engine/logic/services/graph/telemetry_service/__init__.py +5 -0
  641. ciris_engine/logic/services/graph/telemetry_service/exceptions.py +104 -0
  642. ciris_engine/logic/services/graph/telemetry_service/helpers.py +1337 -0
  643. ciris_engine/logic/services/graph/telemetry_service/service.py +2429 -0
  644. ciris_engine/logic/services/graph/tsdb_consolidation/__init__.py +17 -0
  645. ciris_engine/logic/services/graph/tsdb_consolidation/aggregation_helpers.py +355 -0
  646. ciris_engine/logic/services/graph/tsdb_consolidation/cleanup_helpers.py +438 -0
  647. ciris_engine/logic/services/graph/tsdb_consolidation/compressor.py +260 -0
  648. ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/__init__.py +27 -0
  649. ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/audit.py +326 -0
  650. ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/conversation.py +291 -0
  651. ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/memory.py +197 -0
  652. ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/metrics.py +251 -0
  653. ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/task.py +257 -0
  654. ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/trace.py +363 -0
  655. ciris_engine/logic/services/graph/tsdb_consolidation/data_converter.py +545 -0
  656. ciris_engine/logic/services/graph/tsdb_consolidation/date_calculation_helpers.py +193 -0
  657. ciris_engine/logic/services/graph/tsdb_consolidation/db_query_helpers.py +296 -0
  658. ciris_engine/logic/services/graph/tsdb_consolidation/edge_helpers.py +92 -0
  659. ciris_engine/logic/services/graph/tsdb_consolidation/edge_manager.py +896 -0
  660. ciris_engine/logic/services/graph/tsdb_consolidation/extensive_helpers.py +322 -0
  661. ciris_engine/logic/services/graph/tsdb_consolidation/period_manager.py +152 -0
  662. ciris_engine/logic/services/graph/tsdb_consolidation/profound_helpers.py +277 -0
  663. ciris_engine/logic/services/graph/tsdb_consolidation/query_manager.py +812 -0
  664. ciris_engine/logic/services/graph/tsdb_consolidation/service.py +1692 -0
  665. ciris_engine/logic/services/graph/tsdb_consolidation/sql_builders.py +363 -0
  666. ciris_engine/logic/services/infrastructure/__init__.py +1 -0
  667. ciris_engine/logic/services/infrastructure/authentication/__init__.py +5 -0
  668. ciris_engine/logic/services/infrastructure/authentication/service.py +1634 -0
  669. ciris_engine/logic/services/infrastructure/database_maintenance/__init__.py +15 -0
  670. ciris_engine/logic/services/infrastructure/database_maintenance/service.py +764 -0
  671. ciris_engine/logic/services/infrastructure/resource_monitor/__init__.py +7 -0
  672. ciris_engine/logic/services/infrastructure/resource_monitor/ciris_billing_provider.py +755 -0
  673. ciris_engine/logic/services/infrastructure/resource_monitor/service.py +409 -0
  674. ciris_engine/logic/services/infrastructure/resource_monitor/simple_credit_provider.py +129 -0
  675. ciris_engine/logic/services/lifecycle/__init__.py +3 -0
  676. ciris_engine/logic/services/lifecycle/initialization/__init__.py +10 -0
  677. ciris_engine/logic/services/lifecycle/initialization/service.py +312 -0
  678. ciris_engine/logic/services/lifecycle/scheduler/__init__.py +5 -0
  679. ciris_engine/logic/services/lifecycle/scheduler/service.py +607 -0
  680. ciris_engine/logic/services/lifecycle/shutdown/__init__.py +9 -0
  681. ciris_engine/logic/services/lifecycle/shutdown/service.py +378 -0
  682. ciris_engine/logic/services/lifecycle/time/__init__.py +15 -0
  683. ciris_engine/logic/services/lifecycle/time/service.py +259 -0
  684. ciris_engine/logic/services/memory_service/__init__.py +8 -0
  685. ciris_engine/logic/services/mixins/__init__.py +13 -0
  686. ciris_engine/logic/services/mixins/example_usage.py +200 -0
  687. ciris_engine/logic/services/mixins/request_metrics.py +179 -0
  688. ciris_engine/logic/services/runtime/__init__.py +3 -0
  689. ciris_engine/logic/services/runtime/adapter_configuration/__init__.py +16 -0
  690. ciris_engine/logic/services/runtime/adapter_configuration/service.py +674 -0
  691. ciris_engine/logic/services/runtime/adapter_configuration/session.py +67 -0
  692. ciris_engine/logic/services/runtime/control_service/__init__.py +5 -0
  693. ciris_engine/logic/services/runtime/control_service/service.py +2269 -0
  694. ciris_engine/logic/services/runtime/llm_service/__init__.py +14 -0
  695. ciris_engine/logic/services/runtime/llm_service/pricing_calculator.py +279 -0
  696. ciris_engine/logic/services/runtime/llm_service/service.py +930 -0
  697. ciris_engine/logic/services/tools/__init__.py +5 -0
  698. ciris_engine/logic/services/tools/core_tool_service/__init__.py +8 -0
  699. ciris_engine/logic/services/tools/core_tool_service/service.py +852 -0
  700. ciris_engine/logic/setup/__init__.py +1 -0
  701. ciris_engine/logic/setup/first_run.py +250 -0
  702. ciris_engine/logic/setup/wizard.py +327 -0
  703. ciris_engine/logic/telemetry/__init__.py +46 -0
  704. ciris_engine/logic/telemetry/core.py +239 -0
  705. ciris_engine/logic/telemetry/hot_cold_config.py +133 -0
  706. ciris_engine/logic/telemetry/log_collector.py +190 -0
  707. ciris_engine/logic/telemetry/resource_monitor.py +7 -0
  708. ciris_engine/logic/telemetry/security.py +79 -0
  709. ciris_engine/logic/utils/__init__.py +18 -0
  710. ciris_engine/logic/utils/channel_utils.py +75 -0
  711. ciris_engine/logic/utils/consent/__init__.py +1 -0
  712. ciris_engine/logic/utils/consent/partnership_utils.py +172 -0
  713. ciris_engine/logic/utils/constants.py +92 -0
  714. ciris_engine/logic/utils/context_utils.py +145 -0
  715. ciris_engine/logic/utils/directory_setup.py +533 -0
  716. ciris_engine/logic/utils/graphql_context_provider.py +152 -0
  717. ciris_engine/logic/utils/identity_resolution.py +843 -0
  718. ciris_engine/logic/utils/incident_capture_handler.py +303 -0
  719. ciris_engine/logic/utils/initialization_manager.py +74 -0
  720. ciris_engine/logic/utils/jsondict_helpers.py +290 -0
  721. ciris_engine/logic/utils/log_sanitizer.py +97 -0
  722. ciris_engine/logic/utils/logging_config.py +151 -0
  723. ciris_engine/logic/utils/observability_decorators.py +544 -0
  724. ciris_engine/logic/utils/occurrence_utils.py +155 -0
  725. ciris_engine/logic/utils/path_resolution.py +281 -0
  726. ciris_engine/logic/utils/platform_detection.py +286 -0
  727. ciris_engine/logic/utils/privacy.py +266 -0
  728. ciris_engine/logic/utils/profile_loader.py +124 -0
  729. ciris_engine/logic/utils/profile_manager.py +16 -0
  730. ciris_engine/logic/utils/runtime_utils.py +69 -0
  731. ciris_engine/logic/utils/shutdown_manager.py +107 -0
  732. ciris_engine/logic/utils/task_formatters.py +60 -0
  733. ciris_engine/logic/utils/task_thought_factory.py +404 -0
  734. ciris_engine/logic/utils/thought_utils.py +54 -0
  735. ciris_engine/logic/utils/user_utils.py +70 -0
  736. ciris_engine/protocols/__init__.py +0 -0
  737. ciris_engine/protocols/adapters/__init__.py +35 -0
  738. ciris_engine/protocols/adapters/base.py +149 -0
  739. ciris_engine/protocols/adapters/configurable.py +265 -0
  740. ciris_engine/protocols/adapters/message.py +90 -0
  741. ciris_engine/protocols/audit/__init__.py +1 -0
  742. ciris_engine/protocols/buses/__init__.py +1 -0
  743. ciris_engine/protocols/config/__init__.py +1 -0
  744. ciris_engine/protocols/conscience/__init__.py +1 -0
  745. ciris_engine/protocols/consent.py +88 -0
  746. ciris_engine/protocols/context/__init__.py +1 -0
  747. ciris_engine/protocols/data/__init__.py +1 -0
  748. ciris_engine/protocols/dma/__init__.py +1 -0
  749. ciris_engine/protocols/dma/base.py +107 -0
  750. ciris_engine/protocols/faculties.py +34 -0
  751. ciris_engine/protocols/formatters/__init__.py +1 -0
  752. ciris_engine/protocols/handlers/__init__.py +1 -0
  753. ciris_engine/protocols/infrastructure/__init__.py +25 -0
  754. ciris_engine/protocols/infrastructure/base.py +377 -0
  755. ciris_engine/protocols/persistence/__init__.py +1 -0
  756. ciris_engine/protocols/pipeline_control.py +609 -0
  757. ciris_engine/protocols/processors/__init__.py +19 -0
  758. ciris_engine/protocols/processors/agent.py +299 -0
  759. ciris_engine/protocols/processors/base.py +130 -0
  760. ciris_engine/protocols/processors/orchestration.py +62 -0
  761. ciris_engine/protocols/registries/__init__.py +1 -0
  762. ciris_engine/protocols/runtime/__init__.py +1 -0
  763. ciris_engine/protocols/runtime/base.py +163 -0
  764. ciris_engine/protocols/secrets/__init__.py +1 -0
  765. ciris_engine/protocols/services/__init__.py +80 -0
  766. ciris_engine/protocols/services/adaptation/__init__.py +7 -0
  767. ciris_engine/protocols/services/adaptation/self_observation.py +265 -0
  768. ciris_engine/protocols/services/governance/__init__.py +20 -0
  769. ciris_engine/protocols/services/governance/communication.py +58 -0
  770. ciris_engine/protocols/services/governance/filter.py +56 -0
  771. ciris_engine/protocols/services/governance/visibility.py +32 -0
  772. ciris_engine/protocols/services/governance/wa_auth.py +192 -0
  773. ciris_engine/protocols/services/governance/wise_authority.py +75 -0
  774. ciris_engine/protocols/services/graph/__init__.py +19 -0
  775. ciris_engine/protocols/services/graph/audit.py +92 -0
  776. ciris_engine/protocols/services/graph/config.py +54 -0
  777. ciris_engine/protocols/services/graph/incident_management.py +103 -0
  778. ciris_engine/protocols/services/graph/memory.py +110 -0
  779. ciris_engine/protocols/services/graph/telemetry.py +51 -0
  780. ciris_engine/protocols/services/graph/tsdb_consolidation.py +87 -0
  781. ciris_engine/protocols/services/infrastructure/__init__.py +11 -0
  782. ciris_engine/protocols/services/infrastructure/authentication.py +159 -0
  783. ciris_engine/protocols/services/infrastructure/credit_gate.py +46 -0
  784. ciris_engine/protocols/services/infrastructure/database_maintenance.py +25 -0
  785. ciris_engine/protocols/services/infrastructure/resource_monitor.py +83 -0
  786. ciris_engine/protocols/services/lifecycle/__init__.py +13 -0
  787. ciris_engine/protocols/services/lifecycle/initialization.py +41 -0
  788. ciris_engine/protocols/services/lifecycle/scheduler.py +42 -0
  789. ciris_engine/protocols/services/lifecycle/shutdown.py +50 -0
  790. ciris_engine/protocols/services/lifecycle/time.py +31 -0
  791. ciris_engine/protocols/services/runtime/__init__.py +13 -0
  792. ciris_engine/protocols/services/runtime/llm.py +50 -0
  793. ciris_engine/protocols/services/runtime/runtime_control.py +193 -0
  794. ciris_engine/protocols/services/runtime/secrets.py +100 -0
  795. ciris_engine/protocols/services/runtime/tool.py +123 -0
  796. ciris_engine/protocols/telemetry/__init__.py +1 -0
  797. ciris_engine/protocols/utils/__init__.py +1 -0
  798. ciris_engine/schemas/__init__.py +112 -0
  799. ciris_engine/schemas/actions/__init__.py +37 -0
  800. ciris_engine/schemas/actions/parameters.py +137 -0
  801. ciris_engine/schemas/adapters/__init__.py +13 -0
  802. ciris_engine/schemas/adapters/cirisnode.py +135 -0
  803. ciris_engine/schemas/adapters/cli.py +97 -0
  804. ciris_engine/schemas/adapters/cli_tools.py +98 -0
  805. ciris_engine/schemas/adapters/discord.py +125 -0
  806. ciris_engine/schemas/adapters/graphql_core.py +144 -0
  807. ciris_engine/schemas/adapters/registration.py +47 -0
  808. ciris_engine/schemas/adapters/runtime_context.py +48 -0
  809. ciris_engine/schemas/adapters/tool_execution.py +45 -0
  810. ciris_engine/schemas/adapters/tools.py +96 -0
  811. ciris_engine/schemas/api/__init__.py +1 -0
  812. ciris_engine/schemas/api/agent.py +50 -0
  813. ciris_engine/schemas/api/audit.py +38 -0
  814. ciris_engine/schemas/api/auth.py +351 -0
  815. ciris_engine/schemas/api/config_security.py +242 -0
  816. ciris_engine/schemas/api/emergency.py +111 -0
  817. ciris_engine/schemas/api/responses.py +72 -0
  818. ciris_engine/schemas/api/runtime.py +26 -0
  819. ciris_engine/schemas/api/telemetry.py +109 -0
  820. ciris_engine/schemas/api/wa.py +90 -0
  821. ciris_engine/schemas/audit/__init__.py +13 -0
  822. ciris_engine/schemas/audit/core.py +139 -0
  823. ciris_engine/schemas/audit/hash_chain.py +58 -0
  824. ciris_engine/schemas/audit/verification.py +131 -0
  825. ciris_engine/schemas/buses/__init__.py +1 -0
  826. ciris_engine/schemas/config/__init__.py +41 -0
  827. ciris_engine/schemas/config/agent.py +279 -0
  828. ciris_engine/schemas/config/cognitive_state_behaviors.py +194 -0
  829. ciris_engine/schemas/config/default_dsar_sops.py +178 -0
  830. ciris_engine/schemas/config/essential.py +195 -0
  831. ciris_engine/schemas/config/tickets.py +86 -0
  832. ciris_engine/schemas/conscience/__init__.py +25 -0
  833. ciris_engine/schemas/conscience/context.py +34 -0
  834. ciris_engine/schemas/conscience/core.py +145 -0
  835. ciris_engine/schemas/conscience/results.py +24 -0
  836. ciris_engine/schemas/consent/__init__.py +5 -0
  837. ciris_engine/schemas/consent/core.py +404 -0
  838. ciris_engine/schemas/context/__init__.py +1 -0
  839. ciris_engine/schemas/covenant.py +382 -0
  840. ciris_engine/schemas/data/__init__.py +1 -0
  841. ciris_engine/schemas/dma/__init__.py +16 -0
  842. ciris_engine/schemas/dma/core.py +199 -0
  843. ciris_engine/schemas/dma/faculty.py +192 -0
  844. ciris_engine/schemas/dma/prompts.py +172 -0
  845. ciris_engine/schemas/dma/results.py +103 -0
  846. ciris_engine/schemas/formatters/__init__.py +1 -0
  847. ciris_engine/schemas/handlers/__init__.py +10 -0
  848. ciris_engine/schemas/handlers/context.py +119 -0
  849. ciris_engine/schemas/handlers/contexts.py +100 -0
  850. ciris_engine/schemas/handlers/core.py +167 -0
  851. ciris_engine/schemas/handlers/memory_schemas.py +67 -0
  852. ciris_engine/schemas/handlers/schemas.py +95 -0
  853. ciris_engine/schemas/identity.py +149 -0
  854. ciris_engine/schemas/infrastructure/__init__.py +1 -0
  855. ciris_engine/schemas/infrastructure/base.py +256 -0
  856. ciris_engine/schemas/infrastructure/behavioral_patterns.py +129 -0
  857. ciris_engine/schemas/infrastructure/feedback_loop.py +57 -0
  858. ciris_engine/schemas/infrastructure/identity_variance.py +141 -0
  859. ciris_engine/schemas/infrastructure/oauth.py +175 -0
  860. ciris_engine/schemas/infrastructure/wa_cli_wizard.py +54 -0
  861. ciris_engine/schemas/persistence/__init__.py +34 -0
  862. ciris_engine/schemas/persistence/core.py +140 -0
  863. ciris_engine/schemas/persistence/correlations.py +73 -0
  864. ciris_engine/schemas/persistence/postgres/__init__.py +1 -0
  865. ciris_engine/schemas/persistence/postgres/tables.py +280 -0
  866. ciris_engine/schemas/persistence/sqlite/__init__.py +1 -0
  867. ciris_engine/schemas/persistence/sqlite/tables.py +281 -0
  868. ciris_engine/schemas/platform.py +149 -0
  869. ciris_engine/schemas/processors/__init__.py +26 -0
  870. ciris_engine/schemas/processors/base.py +130 -0
  871. ciris_engine/schemas/processors/cognitive.py +77 -0
  872. ciris_engine/schemas/processors/context.py +35 -0
  873. ciris_engine/schemas/processors/core.py +152 -0
  874. ciris_engine/schemas/processors/dma.py +105 -0
  875. ciris_engine/schemas/processors/error.py +122 -0
  876. ciris_engine/schemas/processors/main.py +109 -0
  877. ciris_engine/schemas/processors/phase_results.py +21 -0
  878. ciris_engine/schemas/processors/results.py +99 -0
  879. ciris_engine/schemas/processors/solitude.py +79 -0
  880. ciris_engine/schemas/processors/state.py +202 -0
  881. ciris_engine/schemas/processors/state_example.py +177 -0
  882. ciris_engine/schemas/processors/states.py +21 -0
  883. ciris_engine/schemas/processors/status.py +34 -0
  884. ciris_engine/schemas/registries/__init__.py +1 -0
  885. ciris_engine/schemas/registries/base.py +66 -0
  886. ciris_engine/schemas/resources/__init__.py +15 -0
  887. ciris_engine/schemas/resources/crisis.py +315 -0
  888. ciris_engine/schemas/runtime/__init__.py +42 -0
  889. ciris_engine/schemas/runtime/adapter_management.py +186 -0
  890. ciris_engine/schemas/runtime/api.py +58 -0
  891. ciris_engine/schemas/runtime/audit.py +50 -0
  892. ciris_engine/schemas/runtime/bootstrap.py +33 -0
  893. ciris_engine/schemas/runtime/contexts.py +61 -0
  894. ciris_engine/schemas/runtime/core.py +161 -0
  895. ciris_engine/schemas/runtime/enums.py +167 -0
  896. ciris_engine/schemas/runtime/extended.py +232 -0
  897. ciris_engine/schemas/runtime/manifest.py +311 -0
  898. ciris_engine/schemas/runtime/memory.py +60 -0
  899. ciris_engine/schemas/runtime/messages.py +108 -0
  900. ciris_engine/schemas/runtime/models.py +156 -0
  901. ciris_engine/schemas/runtime/processing_context.py +43 -0
  902. ciris_engine/schemas/runtime/protocols_core.py +96 -0
  903. ciris_engine/schemas/runtime/resources.py +33 -0
  904. ciris_engine/schemas/runtime/system_context.py +417 -0
  905. ciris_engine/schemas/secrets/__init__.py +1 -0
  906. ciris_engine/schemas/secrets/core.py +267 -0
  907. ciris_engine/schemas/secrets/service.py +95 -0
  908. ciris_engine/schemas/services/__init__.py +33 -0
  909. ciris_engine/schemas/services/audit_summary_node.py +172 -0
  910. ciris_engine/schemas/services/authority/__init__.py +39 -0
  911. ciris_engine/schemas/services/authority/jwt.py +158 -0
  912. ciris_engine/schemas/services/authority/wa_updates.py +138 -0
  913. ciris_engine/schemas/services/authority/wise_authority.py +163 -0
  914. ciris_engine/schemas/services/authority_core.py +370 -0
  915. ciris_engine/schemas/services/capabilities.py +72 -0
  916. ciris_engine/schemas/services/community_core.py +95 -0
  917. ciris_engine/schemas/services/context.py +111 -0
  918. ciris_engine/schemas/services/conversation_summary_node.py +189 -0
  919. ciris_engine/schemas/services/core/__init__.py +153 -0
  920. ciris_engine/schemas/services/core/runtime.py +262 -0
  921. ciris_engine/schemas/services/core/runtime_config.py +117 -0
  922. ciris_engine/schemas/services/core/secrets.py +65 -0
  923. ciris_engine/schemas/services/correlation_node.py +179 -0
  924. ciris_engine/schemas/services/credit_gate.py +92 -0
  925. ciris_engine/schemas/services/discord_nodes.py +299 -0
  926. ciris_engine/schemas/services/feedback_core.py +131 -0
  927. ciris_engine/schemas/services/filters_core.py +270 -0
  928. ciris_engine/schemas/services/governance.py +26 -0
  929. ciris_engine/schemas/services/graph/__init__.py +26 -0
  930. ciris_engine/schemas/services/graph/attributes.py +254 -0
  931. ciris_engine/schemas/services/graph/audit.py +98 -0
  932. ciris_engine/schemas/services/graph/consolidation.py +338 -0
  933. ciris_engine/schemas/services/graph/edge_types.py +43 -0
  934. ciris_engine/schemas/services/graph/edges.py +88 -0
  935. ciris_engine/schemas/services/graph/incident.py +312 -0
  936. ciris_engine/schemas/services/graph/memory.py +84 -0
  937. ciris_engine/schemas/services/graph/node_data.py +174 -0
  938. ciris_engine/schemas/services/graph/query_results.py +82 -0
  939. ciris_engine/schemas/services/graph/telemetry.py +250 -0
  940. ciris_engine/schemas/services/graph/tsdb_consolidation.py +27 -0
  941. ciris_engine/schemas/services/graph/tsdb_models.py +107 -0
  942. ciris_engine/schemas/services/graph_core.py +196 -0
  943. ciris_engine/schemas/services/graph_typed_nodes.py +194 -0
  944. ciris_engine/schemas/services/infrastructure/__init__.py +1 -0
  945. ciris_engine/schemas/services/infrastructure/resource_monitor.py +20 -0
  946. ciris_engine/schemas/services/lifecycle/__init__.py +9 -0
  947. ciris_engine/schemas/services/lifecycle/initialization.py +33 -0
  948. ciris_engine/schemas/services/lifecycle/time.py +50 -0
  949. ciris_engine/schemas/services/llm.py +187 -0
  950. ciris_engine/schemas/services/metadata.py +43 -0
  951. ciris_engine/schemas/services/nodes.py +704 -0
  952. ciris_engine/schemas/services/operations.py +126 -0
  953. ciris_engine/schemas/services/requests.py +128 -0
  954. ciris_engine/schemas/services/resources_core.py +182 -0
  955. ciris_engine/schemas/services/runtime_control.py +1010 -0
  956. ciris_engine/schemas/services/shutdown.py +88 -0
  957. ciris_engine/schemas/services/special/__init__.py +0 -0
  958. ciris_engine/schemas/services/special/self_observation.py +396 -0
  959. ciris_engine/schemas/services/trace_summary_node.py +199 -0
  960. ciris_engine/schemas/services/visibility.py +98 -0
  961. ciris_engine/schemas/streaming/__init__.py +10 -0
  962. ciris_engine/schemas/streaming/reasoning_stream.py +95 -0
  963. ciris_engine/schemas/telemetry/__init__.py +0 -0
  964. ciris_engine/schemas/telemetry/collector.py +67 -0
  965. ciris_engine/schemas/telemetry/core.py +252 -0
  966. ciris_engine/schemas/telemetry/unified.py +59 -0
  967. ciris_engine/schemas/tools.py +72 -0
  968. ciris_engine/schemas/types.py +47 -0
  969. ciris_engine/schemas/utils/__init__.py +1 -0
  970. ciris_engine/schemas/utils/config_validator.py +54 -0
  971. ciris_engine/utils/__init__.py +1 -0
  972. ciris_engine/utils/serialization.py +35 -0
  973. ciris_sdk/__init__.py +124 -0
  974. ciris_sdk/auth_store.py +261 -0
  975. ciris_sdk/client.py +261 -0
  976. ciris_sdk/exceptions.py +73 -0
  977. ciris_sdk/model_types.py +258 -0
  978. ciris_sdk/models.py +354 -0
  979. ciris_sdk/pagination.py +214 -0
  980. ciris_sdk/rate_limiter.py +188 -0
  981. ciris_sdk/setup.py +17 -0
  982. ciris_sdk/telemetry_models.py +257 -0
  983. ciris_sdk/telemetry_responses.py +199 -0
  984. ciris_sdk/transport.py +177 -0
  985. ciris_sdk/websocket.py +400 -0
  986. main.py +766 -0
@@ -0,0 +1,920 @@
1
+ """
2
+ ThoughtProcessor: Core orchestration logic for H3ERE pipeline.
3
+ Main coordinator that executes the 7 phases of ethical reasoning.
4
+ """
5
+
6
+ import logging
7
+ from typing import Any, Callable, Dict, List, Optional, Tuple
8
+
9
+ from ciris_engine.logic import persistence
10
+ from ciris_engine.logic.config import ConfigAccessor
11
+ from ciris_engine.logic.dma.exceptions import DMAFailure
12
+ from ciris_engine.logic.handlers.control.ponder_handler import PonderHandler
13
+ from ciris_engine.logic.infrastructure.handlers.base_handler import ActionHandlerDependencies
14
+ from ciris_engine.logic.processors.support.processing_queue import ProcessingQueueItem
15
+ from ciris_engine.logic.registries.circuit_breaker import CircuitBreakerError
16
+ from ciris_engine.logic.utils.channel_utils import create_channel_context
17
+ from ciris_engine.logic.utils.jsondict_helpers import get_bool, get_dict
18
+ from ciris_engine.protocols.services.graph.telemetry import TelemetryServiceProtocol
19
+ from ciris_engine.protocols.services.lifecycle.time import TimeServiceProtocol
20
+ from ciris_engine.schemas.actions.parameters import DeferParams, PonderParams
21
+ from ciris_engine.schemas.conscience.context import ConscienceCheckContext
22
+ from ciris_engine.schemas.conscience.core import EpistemicData
23
+ from ciris_engine.schemas.dma.results import ActionSelectionDMAResult
24
+ from ciris_engine.schemas.processors.core import (
25
+ ConscienceApplicationResult,
26
+ ConscienceCheckInternalResult,
27
+ SingleConscienceCheckResult,
28
+ )
29
+ from ciris_engine.schemas.runtime.enums import HandlerActionType
30
+ from ciris_engine.schemas.runtime.models import Thought
31
+ from ciris_engine.schemas.telemetry.core import (
32
+ CorrelationType,
33
+ ServiceCorrelation,
34
+ ServiceCorrelationStatus,
35
+ TraceContext,
36
+ )
37
+ from ciris_engine.schemas.types import JSONDict
38
+
39
+ from .action_execution import ActionExecutionPhase
40
+ from .conscience_execution import ConscienceExecutionPhase
41
+ from .finalize_action import ActionFinalizationPhase
42
+ from .gather_context import ContextGatheringPhase
43
+ from .perform_aspdma import ActionSelectionPhase
44
+ from .perform_dmas import DMAExecutionPhase
45
+ from .recursive_processing import RecursiveProcessingPhase
46
+ from .round_complete import RoundCompletePhase
47
+
48
+ # Import phase mixins
49
+ from .start_round import RoundInitializationPhase
50
+
51
+ logger = logging.getLogger(__name__)
52
+
53
+
54
+ class ThoughtProcessor(
55
+ RoundInitializationPhase,
56
+ ContextGatheringPhase,
57
+ DMAExecutionPhase,
58
+ ActionSelectionPhase,
59
+ ConscienceExecutionPhase,
60
+ RecursiveProcessingPhase,
61
+ ActionFinalizationPhase,
62
+ ActionExecutionPhase,
63
+ RoundCompletePhase,
64
+ ):
65
+ """
66
+ Main orchestrator for the H3ERE (Hyper3 Ethical Recursive Engine) pipeline.
67
+
68
+ Inherits phase-specific methods from mixin classes and coordinates
69
+ the 7-step ethical reasoning process:
70
+ 1. GATHER_CONTEXT - Build processing context
71
+ 2. PERFORM_DMAS - Multi-perspective analysis
72
+ 3. PERFORM_ASPDMA - Action selection
73
+ 4. CONSCIENCE_EXECUTION - Ethical validation
74
+ 5. RECURSIVE_* - Retry logic (optional)
75
+ 6. FINALIZE_ACTION - Final action determination
76
+ 7. ACTION_* - Action dispatch and completion
77
+ """
78
+
79
+ def __init__(
80
+ self,
81
+ dma_orchestrator: Any,
82
+ context_builder: Any,
83
+ conscience_registry: Any,
84
+ app_config: ConfigAccessor,
85
+ dependencies: ActionHandlerDependencies,
86
+ time_service: TimeServiceProtocol,
87
+ telemetry_service: Optional[TelemetryServiceProtocol] = None,
88
+ auth_service: Optional[Any] = None,
89
+ ) -> None:
90
+ self.dma_orchestrator = dma_orchestrator
91
+ self.context_builder = context_builder
92
+ self.conscience_registry = conscience_registry
93
+ self.app_config = app_config
94
+ self.dependencies = dependencies
95
+ self._time_service = time_service
96
+ self.telemetry_service = telemetry_service
97
+ self.auth_service = auth_service
98
+ self._pipeline_controller = None # Will be deprecated
99
+
100
+ async def process_thought(
101
+ self, thought_item: ProcessingQueueItem, context: Optional[JSONDict] = None
102
+ ) -> Optional[ActionSelectionDMAResult]:
103
+ """
104
+ Main H3ERE pipeline orchestration.
105
+
106
+ Executes all 7 phases using decorated step methods that handle
107
+ streaming and single-step pause/resume automatically.
108
+ """
109
+ logger.info(
110
+ f"ThoughtProcessor.process_thought: ENTRY - thought_id={thought_item.thought_id}, context={'present' if context else 'None'}"
111
+ )
112
+ start_time = self._time_service.now()
113
+
114
+ # Initialize correlation for tracking
115
+ correlation = self._initialize_correlation(thought_item, start_time)
116
+
117
+ # Fetch and validate thought
118
+ thought = await self._fetch_and_validate_thought(thought_item)
119
+ if not thought:
120
+ return None
121
+
122
+ # Execute pipeline phases
123
+ pipeline_result = await self._execute_pipeline_phases(thought_item, thought, context, correlation, start_time)
124
+
125
+ # Record completion and finalize
126
+ await self._record_processing_completion(thought, pipeline_result)
127
+ await self._finalize_correlation(correlation, pipeline_result, start_time)
128
+
129
+ # Complete the round
130
+ final_result = await self._round_complete_step(thought_item, pipeline_result)
131
+ # _round_complete_step returns the same type as pipeline_result (ConscienceApplicationResult or ActionSelectionDMAResult)
132
+ return final_result # type: ignore[no-any-return]
133
+
134
+ def _initialize_correlation(self, thought_item: ProcessingQueueItem, start_time: Any) -> ServiceCorrelation:
135
+ """Initialize correlation tracking for the thought processing."""
136
+ correlation = ServiceCorrelation(
137
+ correlation_id=f"thought_processing_{thought_item.thought_id}_{start_time.timestamp()}",
138
+ correlation_type=CorrelationType.SERVICE_INTERACTION,
139
+ service_type="ThoughtProcessor",
140
+ handler_name="process_thought",
141
+ action_type="PROCESS_THOUGHT",
142
+ created_at=start_time,
143
+ updated_at=start_time,
144
+ timestamp=start_time,
145
+ )
146
+ persistence.add_correlation(correlation, self._time_service)
147
+ return correlation
148
+
149
+ async def _fetch_and_validate_thought(self, thought_item: ProcessingQueueItem) -> Optional[Thought]:
150
+ """Fetch and validate thought exists."""
151
+ logger.info(f"ThoughtProcessor.process_thought: About to fetch thought_id={thought_item.thought_id}")
152
+ thought = await self._fetch_thought(thought_item.thought_id, thought_item.agent_occurrence_id)
153
+ logger.info(
154
+ f"ThoughtProcessor.process_thought: Fetch completed for thought_id={thought_item.thought_id}, result={'present' if thought else 'None'}"
155
+ )
156
+ if not thought:
157
+ logger.warning(f"ThoughtProcessor: Could not fetch thought {thought_item.thought_id}")
158
+ return thought
159
+
160
+ async def _execute_pipeline_phases(
161
+ self,
162
+ thought_item: ProcessingQueueItem,
163
+ thought: Thought,
164
+ context: Optional[JSONDict],
165
+ correlation: ServiceCorrelation,
166
+ start_time: Any,
167
+ ) -> ConscienceApplicationResult:
168
+ """Execute the main H3ERE pipeline phases."""
169
+ # Phase 0: Initialize processing round
170
+ await self._start_round_step(thought_item, context)
171
+
172
+ # Phase 1: Gather context
173
+ thought_context = await self._gather_context_step(thought_item, context)
174
+
175
+ # Phase 2: DMA analysis
176
+ dma_results = await self._perform_dmas_step(thought_item, thought_context)
177
+
178
+ # Check for early DMA result return
179
+ if isinstance(dma_results, ActionSelectionDMAResult):
180
+ logger.info(
181
+ f"DMA step returned ActionSelectionDMAResult for thought {thought_item.thought_id}: {dma_results.selected_action}"
182
+ )
183
+ # Wrap in ConscienceApplicationResult before returning
184
+ return ConscienceApplicationResult(
185
+ original_action=dma_results,
186
+ final_action=dma_results,
187
+ overridden=False,
188
+ override_reason=None,
189
+ epistemic_data=EpistemicData(
190
+ entropy_level=0.0, # Exempt action - no uncertainty
191
+ coherence_level=1.0, # Fully coherent
192
+ uncertainty_acknowledged=True, # System knows this is exempt
193
+ reasoning_transparency=1.0, # Fully transparent (DEFER/REJECT)
194
+ ),
195
+ )
196
+
197
+ # Check for critical failures
198
+ if self._has_critical_failure(dma_results):
199
+ await self._handle_critical_failure(correlation, start_time)
200
+ deferral_result = self._create_deferral_result(dma_results, thought)
201
+ # Wrap in ConscienceApplicationResult before returning
202
+ return ConscienceApplicationResult(
203
+ original_action=deferral_result,
204
+ final_action=deferral_result,
205
+ overridden=False,
206
+ override_reason=None,
207
+ epistemic_data=EpistemicData(
208
+ entropy_level=1.0, # Maximum uncertainty due to failure
209
+ coherence_level=0.0, # No coherence - system failed
210
+ uncertainty_acknowledged=True, # System knows failure occurred
211
+ reasoning_transparency=1.0, # Transparent about failure
212
+ ),
213
+ )
214
+
215
+ # Phase 3: Action selection
216
+ action_result_dict = await self._perform_action_selection_phase(
217
+ thought_item, thought, thought_context, dma_results
218
+ )
219
+
220
+ # Phase 4: Finalize action
221
+ # conscience_result is already a ConscienceApplicationResult object, not a dict
222
+ conscience_result_raw = action_result_dict.get("conscience_result")
223
+ # Type assertion: we know this is ConscienceApplicationResult from _perform_action_selection_phase
224
+ conscience_result: Optional[ConscienceApplicationResult] = (
225
+ conscience_result_raw if isinstance(conscience_result_raw, ConscienceApplicationResult) else None
226
+ )
227
+ action_from_conscience = self._handle_special_cases(conscience_result)
228
+ final_result = await self._finalize_action_step(thought_item, action_from_conscience)
229
+
230
+ # _finalize_action_step returns ConscienceApplicationResult based on conscience_result input
231
+ return final_result # type: ignore[no-any-return]
232
+
233
+ async def _perform_action_selection_phase(
234
+ self, thought_item: ProcessingQueueItem, thought: Thought, thought_context: Any, dma_results: Any
235
+ ) -> JSONDict:
236
+ """Execute action selection and conscience validation phases."""
237
+ # Phase 4: PERFORM_ASPDMA - LLM-powered action selection
238
+ action_result = await self._perform_aspdma_step(thought_item, thought_context, dma_results)
239
+ profile_name = self._get_profile_name(thought)
240
+
241
+ self._log_action_selection_result(action_result, thought)
242
+
243
+ # Phase 5: CONSCIENCE_EXECUTION - Apply ethical safety validation
244
+ conscience_result = await self._conscience_execution_step(
245
+ thought_item, action_result, thought, dma_results, thought_context
246
+ )
247
+
248
+ # Phase 6: Handle conscience overrides (retry logic)
249
+ if self._should_retry_with_conscience_guidance(conscience_result):
250
+ action_result, conscience_result = await self._handle_conscience_retry(
251
+ thought_item, thought, thought_context, dma_results, conscience_result, profile_name
252
+ )
253
+
254
+ self._log_final_action_results(action_result, conscience_result, thought)
255
+
256
+ return {"action_result": action_result, "conscience_result": conscience_result}
257
+
258
+ def _log_action_selection_result(self, action_result: Any, thought: Thought) -> None:
259
+ """Log action selection results."""
260
+ if action_result:
261
+ selected_action = getattr(action_result, "selected_action", "UNKNOWN")
262
+ logger.info(f"ThoughtProcessor: Action selection result for {thought.thought_id}: {selected_action}")
263
+
264
+ if selected_action == HandlerActionType.OBSERVE:
265
+ logger.warning(
266
+ f"OBSERVE ACTION DEBUG: ThoughtProcessor received OBSERVE action for thought {thought.thought_id}"
267
+ )
268
+ else:
269
+ logger.error(f"ThoughtProcessor: No action result for thought {thought.thought_id}")
270
+
271
+ def _should_retry_with_conscience_guidance(self, conscience_result: Optional[ConscienceApplicationResult]) -> bool:
272
+ """Check if we should retry action selection with conscience guidance."""
273
+ return (
274
+ conscience_result is not None
275
+ and conscience_result.overridden
276
+ and conscience_result.final_action.selected_action == HandlerActionType.PONDER
277
+ )
278
+
279
+ async def _handle_conscience_retry(
280
+ self,
281
+ thought_item: ProcessingQueueItem,
282
+ thought: Thought,
283
+ thought_context: Any,
284
+ dma_results: Any,
285
+ conscience_result: ConscienceApplicationResult,
286
+ profile_name: str,
287
+ ) -> Tuple[Any, ConscienceApplicationResult]:
288
+ """Handle conscience retry logic when PONDER override occurs."""
289
+ logger.info(
290
+ f"ThoughtProcessor: conscience override to PONDER for {thought.thought_id}. Attempting re-run with guidance."
291
+ )
292
+
293
+ # Prepare retry context
294
+ retry_context = self._prepare_conscience_retry_context(thought_item, thought_context, conscience_result)
295
+
296
+ try:
297
+ # Attempt retry
298
+ retry_result = await self.dma_orchestrator.run_action_selection(
299
+ thought_item=thought_item,
300
+ actual_thought=thought,
301
+ processing_context=retry_context,
302
+ dma_results=dma_results,
303
+ profile_name=profile_name,
304
+ )
305
+
306
+ if retry_result:
307
+ return await self._process_conscience_retry_result(
308
+ thought_item, thought, dma_results, retry_context, retry_result, conscience_result
309
+ )
310
+ else:
311
+ logger.info("ThoughtProcessor: Retry failed to produce a result, proceeding with PONDER")
312
+
313
+ except Exception as e:
314
+ logger.error(f"Error during action selection retry: {e}", exc_info=True)
315
+
316
+ return conscience_result.original_action, conscience_result
317
+
318
+ def _prepare_conscience_retry_context(
319
+ self, thought_item: ProcessingQueueItem, thought_context: Any, conscience_result: ConscienceApplicationResult
320
+ ) -> Any:
321
+ """Prepare context for conscience retry."""
322
+ override_reason = conscience_result.override_reason or "Action failed conscience checks"
323
+ attempted_action = self._describe_action(conscience_result.original_action)
324
+
325
+ # Log what we received from conscience
326
+ logger.info(f"[CONSCIENCE_RETRY] Preparing retry context for thought {thought_item.thought_id}")
327
+ logger.info(f"[CONSCIENCE_RETRY] Override reason: {override_reason[:200]}...")
328
+ logger.info(f"[CONSCIENCE_RETRY] Original action was: {attempted_action}")
329
+
330
+ # Check if this is an updated status override (new observation arrived)
331
+ # The conscience result may have CIRIS_OBSERVATION_UPDATED_STATUS with the new message
332
+ updated_observation = None
333
+ if hasattr(conscience_result, "epistemic_data") and conscience_result.epistemic_data:
334
+ # Check epistemic_data for updated status
335
+ ep_data = conscience_result.epistemic_data
336
+ if hasattr(ep_data, "CIRIS_OBSERVATION_UPDATED_STATUS"):
337
+ updated_observation = ep_data.CIRIS_OBSERVATION_UPDATED_STATUS
338
+ if updated_observation:
339
+ logger.info(
340
+ f"[CONSCIENCE_RETRY] Found CIRIS_OBSERVATION_UPDATED_STATUS in epistemic_data: {updated_observation[:100]}..."
341
+ )
342
+
343
+ # Also check the final_action's parameters for the new observation
344
+ if conscience_result.final_action and hasattr(conscience_result.final_action, "action_parameters"):
345
+ params = conscience_result.final_action.action_parameters
346
+ if params and hasattr(params, "questions"):
347
+ logger.info(f"[CONSCIENCE_RETRY] PONDER questions from conscience: {params.questions}")
348
+
349
+ # Create enhanced context with conscience feedback
350
+ retry_context = thought_context
351
+ if hasattr(thought_context, "model_copy"):
352
+ retry_context = thought_context.model_copy()
353
+ retry_context.is_conscience_retry = True
354
+ elif isinstance(thought_context, dict):
355
+ retry_context = thought_context.copy()
356
+ retry_context["is_conscience_retry"] = True
357
+ elif hasattr(retry_context, "is_conscience_retry"):
358
+ retry_context.is_conscience_retry = True
359
+
360
+ # Build retry guidance - CRITICAL: Include the new observation if present
361
+ base_guidance = (
362
+ f"Your previous attempt to {attempted_action} was rejected because: {override_reason}. "
363
+ "Please select a DIFFERENT action that better aligns with ethical principles and safety guidelines. "
364
+ )
365
+
366
+ if updated_observation:
367
+ # This is the key fix - include the new observation in the retry guidance
368
+ retry_guidance = (
369
+ f"IMPORTANT: A NEW MESSAGE arrived from the user while you were processing: '{updated_observation}'. "
370
+ f"You must now respond to THIS new message, not complete the old task. "
371
+ f"{base_guidance}"
372
+ "The user is waiting for a response to their new message. Use SPEAK to respond or use a TOOL if needed."
373
+ )
374
+ logger.info(f"[CONSCIENCE_RETRY] Including new observation in retry_guidance")
375
+ else:
376
+ retry_guidance = (
377
+ f"{base_guidance}"
378
+ "Consider: Is there a more cautious approach? Should you gather more information first? "
379
+ "Can this task be marked as complete without further action? "
380
+ "Remember: DEFER only if the task MUST be done AND requires human approval."
381
+ )
382
+
383
+ # Add conscience guidance to the thought item
384
+ conscience_feedback = {
385
+ "failed_action": attempted_action,
386
+ "failure_reason": override_reason,
387
+ "retry_guidance": retry_guidance,
388
+ }
389
+
390
+ # If there's a new observation, add it explicitly to the feedback
391
+ if updated_observation:
392
+ conscience_feedback["new_observation"] = updated_observation
393
+ conscience_feedback["updated_status_detected"] = "true"
394
+
395
+ setattr(thought_item, "conscience_feedback", conscience_feedback)
396
+
397
+ logger.info(f"[CONSCIENCE_RETRY] Set conscience_feedback with keys: {list(conscience_feedback.keys())}")
398
+ logger.info(f"[CONSCIENCE_RETRY] retry_guidance preview: {retry_guidance[:150]}...")
399
+
400
+ return retry_context
401
+
402
+ async def _process_conscience_retry_result(
403
+ self,
404
+ thought_item: ProcessingQueueItem,
405
+ thought: Thought,
406
+ dma_results: Any,
407
+ retry_context: Any,
408
+ retry_result: Any,
409
+ original_conscience_result: ConscienceApplicationResult,
410
+ ) -> Tuple[Any, ConscienceApplicationResult]:
411
+ """Process the result of a conscience retry."""
412
+ logger.info(f"ThoughtProcessor: Re-running consciences on retry action {retry_result.selected_action}")
413
+
414
+ retry_conscience_result = await self._conscience_execution_step(
415
+ thought_item, retry_result, thought, dma_results, retry_context
416
+ )
417
+
418
+ if not retry_conscience_result.overridden:
419
+ logger.info(f"ThoughtProcessor: Retry action {retry_result.selected_action} passed consciences")
420
+ return retry_result, retry_conscience_result
421
+ else:
422
+ self._log_retry_failure(retry_result, original_conscience_result)
423
+ return original_conscience_result.original_action, original_conscience_result
424
+
425
+ def _log_retry_failure(self, retry_result: Any, original_conscience_result: ConscienceApplicationResult) -> None:
426
+ """Log details when retry also fails consciences."""
427
+ logger.info(f"ThoughtProcessor: Retry action {retry_result.selected_action} also failed consciences")
428
+ if retry_result.selected_action == original_conscience_result.original_action.selected_action:
429
+ logger.info("ThoughtProcessor: Same action type but with different parameters still failed")
430
+ logger.info("ThoughtProcessor: Proceeding with PONDER")
431
+
432
+ def _log_final_action_results(
433
+ self, action_result: Any, conscience_result: Optional[ConscienceApplicationResult], thought: Thought
434
+ ) -> None:
435
+ """Log final action and conscience results."""
436
+ if action_result.selected_action == HandlerActionType.OBSERVE:
437
+ logger.debug("ThoughtProcessor: OBSERVE action after consciences for thought %s", thought.thought_id)
438
+
439
+ if conscience_result:
440
+ if hasattr(conscience_result, "final_action") and conscience_result.final_action:
441
+ final_action = getattr(conscience_result.final_action, "selected_action", "UNKNOWN")
442
+ logger.info(
443
+ f"ThoughtProcessor: conscience result for {thought.thought_id}: final_action={final_action}"
444
+ )
445
+
446
+ async def _handle_critical_failure(self, correlation: ServiceCorrelation, start_time: Any) -> None:
447
+ """Handle critical DMA failure."""
448
+ end_time = self._time_service.now()
449
+ from ciris_engine.schemas.persistence.core import CorrelationUpdateRequest
450
+
451
+ update_req = CorrelationUpdateRequest(
452
+ correlation_id=correlation.correlation_id,
453
+ response_data={
454
+ "success": "false",
455
+ "error_message": "Critical DMA failure",
456
+ "execution_time_ms": str((end_time - start_time).total_seconds() * 1000),
457
+ "response_timestamp": end_time.isoformat(),
458
+ },
459
+ status=ServiceCorrelationStatus.FAILED,
460
+ metric_value=None,
461
+ tags=None,
462
+ )
463
+ persistence.update_correlation(update_req, self._time_service)
464
+
465
+ async def _record_processing_completion(
466
+ self, thought: Thought, final_result: Optional[ConscienceApplicationResult]
467
+ ) -> None:
468
+ """Record telemetry for successful processing completion."""
469
+ if not self.telemetry_service:
470
+ return
471
+
472
+ await self.telemetry_service.record_metric(
473
+ "thought_processing_completed",
474
+ value=1.0,
475
+ tags={"thought_id": thought.thought_id, "path_type": "hot", "source_module": "thought_processor"},
476
+ )
477
+
478
+ if final_result:
479
+ action_metric = f"action_selected_{final_result.final_action.selected_action.value}"
480
+ await self.telemetry_service.record_metric(
481
+ action_metric,
482
+ value=1.0,
483
+ tags={
484
+ "thought_id": thought.thought_id,
485
+ "action": final_result.final_action.selected_action.value,
486
+ "path_type": "hot",
487
+ "source_module": "thought_processor",
488
+ },
489
+ )
490
+
491
+ async def _finalize_correlation(
492
+ self, correlation: ServiceCorrelation, final_result: Optional[ConscienceApplicationResult], start_time: Any
493
+ ) -> None:
494
+ """Update correlation with final success status."""
495
+ end_time = self._time_service.now()
496
+ from ciris_engine.schemas.persistence.core import CorrelationUpdateRequest
497
+
498
+ update_req = CorrelationUpdateRequest(
499
+ correlation_id=correlation.correlation_id,
500
+ response_data={
501
+ "success": "true",
502
+ "result_summary": f"Successfully processed thought with action: {final_result.final_action.selected_action if final_result else 'none'}",
503
+ "execution_time_ms": str((end_time - start_time).total_seconds() * 1000),
504
+ "response_timestamp": end_time.isoformat(),
505
+ },
506
+ status=ServiceCorrelationStatus.COMPLETED,
507
+ metric_value=None,
508
+ tags=None,
509
+ )
510
+ persistence.update_correlation(update_req, self._time_service)
511
+
512
+ # Helper methods that will remain in main.py
513
+ async def _fetch_thought(self, thought_id: str, occurrence_id: str = "default") -> Optional[Thought]:
514
+ """Fetch thought from persistence layer."""
515
+ import asyncio
516
+
517
+ from ciris_engine.logic import persistence
518
+
519
+ logger.info(
520
+ f"ThoughtProcessor._fetch_thought: Starting fetch for thought_id={thought_id}, occurrence_id={occurrence_id}"
521
+ )
522
+
523
+ try:
524
+ # Add timeout protection to prevent CI hangs
525
+ thought = await asyncio.wait_for(
526
+ persistence.async_get_thought_by_id(thought_id, occurrence_id), timeout=30.0 # 30 second timeout
527
+ )
528
+ logger.info(
529
+ f"ThoughtProcessor._fetch_thought: Successfully fetched thought_id={thought_id}, occurrence_id={occurrence_id}, thought={'present' if thought else 'None'}"
530
+ )
531
+ return thought
532
+ except asyncio.TimeoutError:
533
+ logger.error(
534
+ f"ThoughtProcessor._fetch_thought: TIMEOUT after 30s fetching thought_id={thought_id}, occurrence_id={occurrence_id}"
535
+ )
536
+ raise
537
+ except Exception as e:
538
+ logger.error(
539
+ f"ThoughtProcessor._fetch_thought: ERROR fetching thought_id={thought_id}: {type(e).__name__}: {e}"
540
+ )
541
+ raise
542
+
543
+ def _has_critical_failure(self, dma_results: Any) -> bool:
544
+ """Check if DMA results indicate critical failure requiring escalation."""
545
+ if not dma_results:
546
+ return True
547
+
548
+ # Check for specific failure indicators
549
+ if hasattr(dma_results, "critical_failure") and dma_results.critical_failure:
550
+ return True
551
+
552
+ return False
553
+
554
+ def _create_deferral_result(self, dma_results: Any, thought: Thought) -> ActionSelectionDMAResult:
555
+ """Create a deferral result for failed processing."""
556
+ defer_reason = "Critical DMA failure or conscience override."
557
+ # Convert dma_results to string representation for context
558
+ dma_results_str = str(dma_results) if not isinstance(dma_results, str) else dma_results
559
+ defer_params = DeferParams(
560
+ reason=defer_reason,
561
+ context={
562
+ "original_thought_id": thought.thought_id,
563
+ "dma_results_summary": dma_results_str,
564
+ },
565
+ defer_until=None,
566
+ )
567
+
568
+ return ActionSelectionDMAResult(
569
+ selected_action=HandlerActionType.DEFER,
570
+ action_parameters=defer_params,
571
+ rationale=defer_reason,
572
+ raw_llm_response=None,
573
+ reasoning=None,
574
+ evaluation_time_ms=None,
575
+ resource_usage=None,
576
+ )
577
+
578
+ def _get_profile_name(self, thought: Thought) -> str:
579
+ """Extract profile name from thought context or use default."""
580
+ profile_name = None
581
+ if thought and hasattr(thought, "context") and thought.context:
582
+ context = thought.context
583
+ if hasattr(context, "agent_profile_name"):
584
+ profile_name = context.agent_profile_name
585
+ if not profile_name and hasattr(self.app_config, "agent_profiles"):
586
+ for name, profile in self.app_config.agent_profiles.items():
587
+ if name != "default" and profile:
588
+ profile_name = name
589
+ break
590
+ if not profile_name and hasattr(self.app_config, "default_profile"):
591
+ profile_name = self.app_config.default_profile
592
+ if not profile_name:
593
+ profile_name = "default"
594
+ # CRITICAL: Defensive logging - thought can be None in some error paths
595
+ thought_id = thought.thought_id if thought else "unknown"
596
+ logger.debug(f"Determined profile name '{profile_name}' for thought {thought_id}")
597
+ return profile_name
598
+
599
+ def _describe_action(self, action_result: Any) -> str:
600
+ """Generate a human-readable description of an action."""
601
+ if not hasattr(action_result, "selected_action"):
602
+ return "unknown action"
603
+
604
+ action_type = action_result.selected_action
605
+ params = action_result.action_parameters
606
+
607
+ descriptions: Dict[HandlerActionType, Callable[[Any], str]] = {
608
+ HandlerActionType.SPEAK: lambda p: self._format_speak_description(p),
609
+ HandlerActionType.TOOL: lambda p: f"use tool '{p.tool_name}'" if hasattr(p, "tool_name") else "use a tool",
610
+ HandlerActionType.OBSERVE: lambda p: (
611
+ f"observe channel '{p.channel_id}'" if hasattr(p, "channel_id") else "observe"
612
+ ),
613
+ HandlerActionType.MEMORIZE: lambda p: "memorize information",
614
+ HandlerActionType.RECALL: lambda p: "recall information",
615
+ HandlerActionType.FORGET: lambda p: "forget information",
616
+ }
617
+
618
+ desc_func: Callable[[Any], str] = descriptions.get(action_type, lambda p: str(action_type.value))
619
+ try:
620
+ result = desc_func(params)
621
+ return str(result)
622
+ except Exception as e:
623
+ logger.warning(
624
+ f"Failed to generate action description for {action_type.value}: {e}. Using default description."
625
+ )
626
+ return str(action_type.value)
627
+
628
+ async def _apply_conscience_simple(
629
+ self,
630
+ action_result: ActionSelectionDMAResult,
631
+ thought: Thought,
632
+ dma_results_dict: JSONDict,
633
+ processing_context: Optional[Any] = None,
634
+ ) -> ConscienceApplicationResult:
635
+ """Simple conscience application without orchestrator."""
636
+ is_conscience_retry = self._check_and_clear_conscience_retry_flag(processing_context)
637
+
638
+ # Create typed context for conscience checks (needed for both bypass and normal)
639
+ context = ConscienceCheckContext(
640
+ thought=thought,
641
+ dma_results=dma_results_dict, # extra="allow" accepts additional fields
642
+ )
643
+
644
+ # CRITICAL: Run bypass consciences FIRST, even for exempt actions
645
+ # This allows UpdatedStatusConscience to detect new messages before TASK_COMPLETE
646
+ bypass_result = await self._run_bypass_conscience_checks(action_result, context)
647
+ if bypass_result.overridden:
648
+ logger.info(
649
+ f"Bypass conscience overrode action {action_result.selected_action} -> "
650
+ f"{bypass_result.final_action.selected_action}: {bypass_result.override_reason}"
651
+ )
652
+ return self._create_conscience_application_result(action_result, bypass_result)
653
+
654
+ # Now check if action is exempt from normal conscience checks
655
+ if self._is_exempt_from_conscience_checks(action_result):
656
+ return ConscienceApplicationResult(
657
+ original_action=action_result,
658
+ final_action=action_result,
659
+ overridden=False,
660
+ override_reason=None,
661
+ epistemic_data=EpistemicData(
662
+ entropy_level=0.0, # Exempt actions have no uncertainty
663
+ coherence_level=1.0, # Fully coherent
664
+ uncertainty_acknowledged=True, # System knows this is exempt
665
+ reasoning_transparency=1.0, # Fully transparent (exempt)
666
+ ),
667
+ # Propagate any detection flags from bypass checks
668
+ updated_status_detected=bypass_result.updated_status_detected,
669
+ )
670
+
671
+ # Run normal conscience checks
672
+ conscience_result = await self._run_normal_conscience_checks(action_result, context)
673
+
674
+ if is_conscience_retry and not conscience_result.overridden:
675
+ conscience_result = self._handle_conscience_retry_without_override(conscience_result)
676
+
677
+ return self._create_conscience_application_result(action_result, conscience_result)
678
+
679
+ def _check_and_clear_conscience_retry_flag(self, processing_context: Optional[Any]) -> bool:
680
+ """Check if this is a conscience retry and clear the flag to prevent loops."""
681
+ is_conscience_retry = (
682
+ processing_context is not None
683
+ and hasattr(processing_context, "is_conscience_retry")
684
+ and processing_context.is_conscience_retry
685
+ )
686
+
687
+ if is_conscience_retry and processing_context is not None:
688
+ processing_context.is_conscience_retry = False
689
+
690
+ return is_conscience_retry
691
+
692
+ def _is_exempt_from_conscience_checks(self, action_result: ActionSelectionDMAResult) -> bool:
693
+ """Check if action is exempt from conscience override."""
694
+ exempt_actions = {
695
+ HandlerActionType.TASK_COMPLETE.value,
696
+ HandlerActionType.DEFER.value,
697
+ HandlerActionType.REJECT.value,
698
+ }
699
+ return action_result.selected_action in exempt_actions
700
+
701
+ async def _run_bypass_conscience_checks(
702
+ self, action_result: ActionSelectionDMAResult, context: ConscienceCheckContext
703
+ ) -> ConscienceCheckInternalResult:
704
+ """Run bypass conscience checks that run even for exempt actions.
705
+
706
+ These are critical checks like UpdatedStatusConscience that must run
707
+ even for TASK_COMPLETE, DEFER, REJECT actions.
708
+ """
709
+ return await self._run_conscience_entries(
710
+ self.conscience_registry.get_bypass_consciences(),
711
+ action_result,
712
+ context,
713
+ )
714
+
715
+ async def _run_normal_conscience_checks(
716
+ self, action_result: ActionSelectionDMAResult, context: ConscienceCheckContext
717
+ ) -> ConscienceCheckInternalResult:
718
+ """Run normal conscience checks that respect exemption."""
719
+ return await self._run_conscience_entries(
720
+ self.conscience_registry.get_normal_consciences(),
721
+ action_result,
722
+ context,
723
+ )
724
+
725
+ async def _run_conscience_checks(
726
+ self, action_result: ActionSelectionDMAResult, context: ConscienceCheckContext
727
+ ) -> ConscienceCheckInternalResult:
728
+ """Run all conscience checks and return the results."""
729
+ return await self._run_conscience_entries(
730
+ self.conscience_registry.get_consciences(),
731
+ action_result,
732
+ context,
733
+ )
734
+
735
+ async def _run_conscience_entries(
736
+ self,
737
+ entries: List[Any],
738
+ action_result: ActionSelectionDMAResult,
739
+ context: ConscienceCheckContext,
740
+ ) -> ConscienceCheckInternalResult:
741
+ """Run a list of conscience entries and return aggregated results."""
742
+ final_action = action_result
743
+ overridden = False
744
+ override_reason: Optional[str] = None
745
+ epistemic_data: Optional[EpistemicData] = None
746
+ thought_depth_triggered: Optional[bool] = None
747
+ updated_status_detected: Optional[bool] = None
748
+
749
+ for entry in entries:
750
+ conscience_result = await self._check_single_conscience(entry, final_action, context)
751
+
752
+ if conscience_result.skip:
753
+ continue
754
+
755
+ # Take the first epistemic data we find (consciences run in order)
756
+ if conscience_result.epistemic_data and not epistemic_data:
757
+ epistemic_data = conscience_result.epistemic_data
758
+
759
+ if conscience_result.thought_depth_triggered is not None:
760
+ thought_depth_triggered = conscience_result.thought_depth_triggered
761
+
762
+ if conscience_result.updated_status_detected is not None:
763
+ updated_status_detected = conscience_result.updated_status_detected
764
+
765
+ if not conscience_result.passed:
766
+ overridden = True
767
+ override_reason = conscience_result.reason
768
+ final_action = conscience_result.replacement_action or action_result
769
+ break
770
+
771
+ return ConscienceCheckInternalResult(
772
+ final_action=final_action,
773
+ overridden=overridden,
774
+ override_reason=override_reason,
775
+ epistemic_data=epistemic_data,
776
+ thought_depth_triggered=thought_depth_triggered,
777
+ updated_status_detected=updated_status_detected,
778
+ )
779
+
780
+ async def _check_single_conscience(
781
+ self, entry: Any, action_result: ActionSelectionDMAResult, context: ConscienceCheckContext
782
+ ) -> SingleConscienceCheckResult:
783
+ """Check a single conscience and handle errors."""
784
+ conscience = entry.conscience
785
+ cb = entry.circuit_breaker
786
+
787
+ try:
788
+ if cb:
789
+ cb.check_and_raise()
790
+ result = await conscience.check(action_result, context)
791
+ if cb:
792
+ cb.record_success()
793
+ except CircuitBreakerError as e:
794
+ logger.warning(f"conscience {entry.name} unavailable: {e}")
795
+ return SingleConscienceCheckResult(skip=True)
796
+ except Exception as e: # noqa: BLE001
797
+ logger.error(f"conscience {entry.name} error: {e}", exc_info=True)
798
+ if cb:
799
+ cb.record_failure()
800
+ return SingleConscienceCheckResult(skip=True)
801
+
802
+ replacement_action = self._create_replacement_action(result, action_result, entry.name)
803
+
804
+ return SingleConscienceCheckResult(
805
+ skip=False,
806
+ passed=result.passed,
807
+ reason=result.reason,
808
+ epistemic_data=result.epistemic_data, # Already an EpistemicData instance or None
809
+ replacement_action=replacement_action,
810
+ thought_depth_triggered=result.thought_depth_triggered,
811
+ updated_status_detected=result.updated_status_detected,
812
+ )
813
+
814
+ def _create_replacement_action(
815
+ self, conscience_result: Any, original_action: ActionSelectionDMAResult, conscience_name: str
816
+ ) -> ActionSelectionDMAResult:
817
+ """Create replacement action based on conscience result."""
818
+ if not conscience_result.passed:
819
+ # Check for replacement_action on ConscienceCheckResult (top-level field)
820
+ if conscience_result.replacement_action:
821
+ return ActionSelectionDMAResult.model_validate(conscience_result.replacement_action)
822
+ else:
823
+ return self._create_ponder_replacement(original_action, conscience_result, conscience_name)
824
+ return original_action
825
+
826
+ def _create_ponder_replacement(
827
+ self, action_result: ActionSelectionDMAResult, conscience_result: Any, conscience_name: str
828
+ ) -> ActionSelectionDMAResult:
829
+ """Create PONDER action as replacement."""
830
+ attempted_action_desc = self._describe_action(action_result)
831
+ questions = [
832
+ f"I attempted to {attempted_action_desc}",
833
+ conscience_result.reason or "conscience failed",
834
+ "What alternative approach would better align with my principles?",
835
+ ]
836
+
837
+ ponder_params = PonderParams(questions=questions)
838
+
839
+ return ActionSelectionDMAResult(
840
+ selected_action=HandlerActionType.PONDER,
841
+ action_parameters=ponder_params,
842
+ rationale=f"Overridden by {conscience_name}: Need to reconsider {attempted_action_desc}",
843
+ raw_llm_response=None,
844
+ reasoning=None,
845
+ evaluation_time_ms=None,
846
+ resource_usage=None,
847
+ )
848
+
849
+ def _handle_conscience_retry_without_override(
850
+ self, conscience_result: ConscienceCheckInternalResult
851
+ ) -> ConscienceCheckInternalResult:
852
+ """Handle conscience retry when no override occurred."""
853
+ has_depth_guardrail = any(
854
+ "ThoughtDepthGuardrail" in entry.conscience.__class__.__name__
855
+ for entry in self.conscience_registry.get_consciences()
856
+ )
857
+
858
+ if not has_depth_guardrail:
859
+ logger.info("ThoughtProcessor: Conscience retry without override - forcing PONDER")
860
+ final_action = ActionSelectionDMAResult(
861
+ selected_action=HandlerActionType.PONDER,
862
+ action_parameters=PonderParams(questions=["Forced PONDER after conscience retry"]),
863
+ rationale="Forced PONDER after conscience retry to prevent loops",
864
+ raw_llm_response=None,
865
+ reasoning=None,
866
+ evaluation_time_ms=None,
867
+ resource_usage=None,
868
+ )
869
+ return ConscienceCheckInternalResult(
870
+ final_action=final_action,
871
+ overridden=True,
872
+ override_reason="Conscience retry - forcing PONDER to prevent loops",
873
+ epistemic_data=conscience_result.epistemic_data,
874
+ thought_depth_triggered=conscience_result.thought_depth_triggered,
875
+ updated_status_detected=conscience_result.updated_status_detected,
876
+ )
877
+
878
+ return conscience_result
879
+
880
+ def _create_conscience_application_result(
881
+ self, action_result: ActionSelectionDMAResult, conscience_result: ConscienceCheckInternalResult
882
+ ) -> ConscienceApplicationResult:
883
+ """Create the final ConscienceApplicationResult."""
884
+ # epistemic_data is REQUIRED - use safe fallback if not provided
885
+ epistemic_data = conscience_result.epistemic_data or EpistemicData(
886
+ entropy_level=0.5, # Moderate uncertainty when no data
887
+ coherence_level=0.5, # Moderate coherence
888
+ uncertainty_acknowledged=True, # System knows data is missing
889
+ reasoning_transparency=1.0, # Transparent about the issue
890
+ )
891
+
892
+ return ConscienceApplicationResult(
893
+ original_action=action_result,
894
+ final_action=conscience_result.final_action,
895
+ overridden=conscience_result.overridden,
896
+ override_reason=conscience_result.override_reason,
897
+ epistemic_data=epistemic_data,
898
+ thought_depth_triggered=conscience_result.thought_depth_triggered,
899
+ updated_status_detected=conscience_result.updated_status_detected,
900
+ )
901
+
902
+ def _format_speak_description(self, params: Any) -> str:
903
+ """Format description for SPEAK action parameters."""
904
+ if not hasattr(params, "content"):
905
+ return "speak"
906
+
907
+ content_str = str(params.content)
908
+ # Use 200 chars to provide more context for conscience evaluation
909
+ if len(content_str) > 200:
910
+ return f"speak: '{content_str[:200]}...'"
911
+ else:
912
+ return f"speak: '{content_str}'"
913
+
914
+ def _handle_special_cases(
915
+ self, conscience_result: Optional[ConscienceApplicationResult]
916
+ ) -> Optional[ConscienceApplicationResult]:
917
+ """Handle special processing cases (PONDER, DEFER overrides)."""
918
+ # Return the full ConscienceApplicationResult to preserve all conscience data
919
+ # The full result includes epistemic_data, override_reason, etc.
920
+ return conscience_result