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,1010 @@
1
+ """
2
+ Runtime control service schemas for type-safe operations.
3
+
4
+ This module provides Pydantic models for the runtime control service,
5
+ ensuring full type safety and validation.
6
+ """
7
+
8
+ from datetime import datetime, timezone
9
+ from enum import Enum
10
+ from typing import Any, Dict, List, Optional, Tuple, Union
11
+
12
+ from pydantic import BaseModel, Field
13
+
14
+ from ciris_engine.schemas.audit.hash_chain import AuditEntryResult
15
+ from ciris_engine.schemas.conscience.core import EpistemicData
16
+ from ciris_engine.schemas.conscience.results import ConscienceResult
17
+ from ciris_engine.schemas.dma.core import DMAContext
18
+ from ciris_engine.schemas.dma.results import ActionSelectionDMAResult, CSDMAResult, DSDMAResult, EthicalDMAResult
19
+ from ciris_engine.schemas.handlers.schemas import HandlerResult
20
+ from ciris_engine.schemas.processors.states import AgentState
21
+ from ciris_engine.schemas.runtime.system_context import SystemSnapshot
22
+ from ciris_engine.schemas.types import ConfigDict, ConfigValue, JSONDict, SerializedModel
23
+
24
+ # Type aliases for configuration values
25
+ ConfigItem = Tuple[str, ConfigValue]
26
+
27
+
28
+ class ConfigDictMixin:
29
+ """Mixin providing standard config dict access methods.
30
+
31
+ Classes using this mixin must have a 'configs: ConfigDict' field.
32
+ DRY pattern to avoid code duplication across classes with config fields.
33
+ """
34
+
35
+ configs: ConfigDict # Type hint for IDEs
36
+
37
+ def get(self, key: str, default: Optional[ConfigValue] = None) -> Optional[ConfigValue]:
38
+ """Get a configuration value with optional default."""
39
+ return self.configs.get(key, default)
40
+
41
+ def set(self, key: str, value: ConfigValue) -> None:
42
+ """Set a configuration value."""
43
+ self.configs[key] = value
44
+
45
+ def update(self, values: ConfigDict) -> None:
46
+ """Update multiple configuration values."""
47
+ self.configs.update(values)
48
+
49
+ def keys(self) -> List[str]:
50
+ """Get all configuration keys."""
51
+ return list(self.configs.keys())
52
+
53
+
54
+ # Field description constants (DRY principle - avoid duplication)
55
+ DESC_THOUGHT_ID = "Thought being processed"
56
+ DESC_TIMESTAMP = "Event timestamp"
57
+ DESC_PARENT_TASK = "Parent task if any"
58
+ DESC_CONSCIENCE_PASSED = "Whether conscience checks passed"
59
+ DESC_CONSCIENCE_OVERRIDE_REASON = "Reason if conscience overrode action"
60
+ DESC_AUDIT_SEQUENCE = "Sequence number in audit hash chain"
61
+ DESC_AUDIT_HASH = "Hash of audit entry (tamper-evident)"
62
+ DESC_AUDIT_SIGNATURE = "Cryptographic signature of audit entry"
63
+
64
+
65
+ class StepPoint(str, Enum):
66
+ """Points where single-stepping can pause in the H3ERE pipeline."""
67
+
68
+ # H3ERE Pipeline - 10 step points (0 setup + 7 core + 2 optional recursive)
69
+ START_ROUND = "start_round" # 0) Setup: Tasks → Thoughts → Round Queue → Ready for context
70
+ GATHER_CONTEXT = "gather_context" # 1) Build context for DMA processing
71
+ PERFORM_DMAS = "perform_dmas" # 2) Execute multi-perspective DMAs
72
+ PERFORM_ASPDMA = "perform_aspdma" # 3) LLM-powered action selection
73
+ CONSCIENCE_EXECUTION = "conscience_execution" # 4) Ethical safety validation
74
+ RECURSIVE_ASPDMA = "recursive_aspdma" # 3B) Optional: Re-run action selection if conscience failed
75
+ RECURSIVE_CONSCIENCE = "recursive_conscience" # 4B) Optional: Re-validate if recursive action failed
76
+ FINALIZE_ACTION = "finalize_action" # 5) Final action determination
77
+ PERFORM_ACTION = "perform_action" # 6) Dispatch action to handler
78
+ ACTION_COMPLETE = "action_complete" # 9) Action execution completed
79
+ ROUND_COMPLETE = "round_complete" # 10) Processing round completed
80
+
81
+
82
+ class ReasoningEvent(str, Enum):
83
+ """Simplified reasoning stream events - 6 clear result events."""
84
+
85
+ THOUGHT_START = "thought_start" # 0) Thought begins processing - metadata and content
86
+ SNAPSHOT_AND_CONTEXT = "snapshot_and_context" # 1) System snapshot + gathered context
87
+ DMA_RESULTS = "dma_results" # 2) All 3 DMA results (csdma, dsdma, aspdma)
88
+ ASPDMA_RESULT = "aspdma_result" # 3) Selected action + rationale
89
+ CONSCIENCE_RESULT = "conscience_result" # 4) Conscience evaluation + final action
90
+ ACTION_RESULT = "action_result" # 5) Action execution outcome + audit trail
91
+
92
+
93
+ class StepDuration(str, Enum):
94
+ """How long to wait before building the round queue."""
95
+
96
+ IMMEDIATE = "immediate" # 10 seconds
97
+ SHORT = "short" # 20 seconds
98
+ NORMAL = "normal" # 30 seconds
99
+ LONG = "long" # 60 seconds
100
+
101
+
102
+ # Map durations to seconds
103
+ STEP_DURATION_SECONDS = {
104
+ StepDuration.IMMEDIATE: 10.0,
105
+ StepDuration.SHORT: 20.0,
106
+ StepDuration.NORMAL: 30.0,
107
+ StepDuration.LONG: 60.0,
108
+ }
109
+
110
+
111
+ class CircuitBreakerState(str, Enum):
112
+ """States of a circuit breaker."""
113
+
114
+ CLOSED = "closed"
115
+ OPEN = "open"
116
+ HALF_OPEN = "half_open"
117
+
118
+
119
+ class CircuitBreakerStatus(BaseModel):
120
+ """Status information for a circuit breaker."""
121
+
122
+ state: CircuitBreakerState = Field(..., description="Current state of the circuit breaker")
123
+ failure_count: int = Field(0, description="Number of consecutive failures")
124
+ last_failure_time: Optional[datetime] = Field(None, description="Time of last failure")
125
+ last_success_time: Optional[datetime] = Field(None, description="Time of last success")
126
+ half_open_retry_time: Optional[datetime] = Field(None, description="When to retry in half-open state")
127
+ trip_threshold: int = Field(5, description="Number of failures before tripping")
128
+ reset_timeout_seconds: float = Field(60.0, description="Seconds before attempting reset")
129
+ service_name: str = Field(..., description="Name of the service this breaker protects")
130
+
131
+
132
+ class TraceContext(BaseModel):
133
+ """OTLP-compatible trace context for step correlation."""
134
+
135
+ trace_id: str = Field(..., description="Unique trace identifier")
136
+ span_id: str = Field(..., description="Unique span identifier")
137
+ parent_span_id: Optional[str] = Field(None, description="Parent span identifier")
138
+ span_name: str = Field(..., description="Human-readable span name")
139
+ operation_name: str = Field(..., description="Operation name for tracing")
140
+ start_time_ns: int = Field(..., description="Start time in nanoseconds")
141
+ end_time_ns: int = Field(..., description="End time in nanoseconds")
142
+ duration_ns: int = Field(..., description="Duration in nanoseconds")
143
+ span_kind: str = Field("internal", description="Span kind (internal, server, client, etc.)")
144
+
145
+
146
+ class SpanAttribute(BaseModel):
147
+ """OTLP-compatible span attribute."""
148
+
149
+ key: str = Field(..., description="Attribute key")
150
+ value: JSONDict = Field(
151
+ ..., description="Attribute value in OTLP format"
152
+ ) # OTLP standard requires JSON-compatible dict
153
+
154
+
155
+ class ConfigValueMap(ConfigDictMixin, BaseModel):
156
+ """Typed map for configuration values."""
157
+
158
+ configs: ConfigDict = Field(default_factory=dict, description="Configuration key-value pairs with typed values")
159
+
160
+ def items(self) -> List[ConfigItem]:
161
+ """Get all key-value pairs."""
162
+ return list(self.configs.items())
163
+
164
+ def values(self) -> List[ConfigValue]:
165
+ """Get all configuration values."""
166
+ return list(self.configs.values())
167
+
168
+
169
+ class TaskSelectionCriteria(ConfigDictMixin, BaseModel):
170
+ """Criteria used for task selection in processing rounds."""
171
+
172
+ max_priority: Optional[int] = Field(None, description="Maximum priority threshold")
173
+ min_priority: Optional[int] = Field(None, description="Minimum priority threshold")
174
+ max_age_hours: Optional[float] = Field(None, description="Maximum age in hours")
175
+ channel_filter: Optional[str] = Field(None, description="Channel ID filter")
176
+ task_type_filter: Optional[str] = Field(None, description="Task type filter")
177
+ exclude_failed: bool = Field(True, description="Whether to exclude previously failed tasks")
178
+ max_retry_count: int = Field(3, description="Maximum retry count for tasks")
179
+ user_id_filter: Optional[str] = Field(None, description="User ID filter")
180
+ batch_size: int = Field(10, description="Maximum number of tasks to select")
181
+ configs: ConfigDict = Field(
182
+ default_factory=dict, description="Additional configuration key-value pairs with typed values"
183
+ )
184
+
185
+ def items(self) -> List[ConfigItem]:
186
+ """Get all key-value pairs."""
187
+ return list(self.configs.items())
188
+
189
+
190
+ class ServiceProviderUpdate(BaseModel):
191
+ """Details of a service provider update."""
192
+
193
+ service_type: str = Field(..., description="Type of service")
194
+ old_priority: str = Field(..., description="Previous priority")
195
+ new_priority: str = Field(..., description="New priority")
196
+ old_priority_group: int = Field(..., description="Previous priority group")
197
+ new_priority_group: int = Field(..., description="New priority group")
198
+ old_strategy: str = Field(..., description="Previous selection strategy")
199
+ new_strategy: str = Field(..., description="New selection strategy")
200
+
201
+
202
+ class ServicePriorityUpdateResponse(BaseModel):
203
+ """Response from service priority update operation."""
204
+
205
+ success: bool = Field(..., description="Whether the update succeeded")
206
+ message: Optional[str] = Field(None, description="Success or error message")
207
+ provider_name: str = Field(..., description="Name of the service provider")
208
+ changes: Optional[ServiceProviderUpdate] = Field(None, description="Details of changes made")
209
+ timestamp: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
210
+ error: Optional[str] = Field(None, description="Error message if operation failed")
211
+
212
+
213
+ class CircuitBreakerResetResponse(BaseModel):
214
+ """Response from circuit breaker reset operation."""
215
+
216
+ success: bool = Field(..., description="Whether the reset succeeded")
217
+ message: str = Field(..., description="Operation result message")
218
+ timestamp: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
219
+ service_type: Optional[str] = Field(None, description="Service type if specified")
220
+ reset_count: Optional[int] = Field(None, description="Number of breakers reset")
221
+ error: Optional[str] = Field(None, description="Error message if operation failed")
222
+
223
+
224
+ class ServiceProviderInfo(BaseModel):
225
+ """Information about a registered service provider."""
226
+
227
+ name: str = Field(..., description="Provider name")
228
+ priority: str = Field(..., description="Priority level name")
229
+ priority_group: int = Field(..., description="Priority group number")
230
+ strategy: str = Field(..., description="Selection strategy")
231
+ capabilities: Optional[ConfigDict] = Field(None, description="Provider capabilities")
232
+ metadata: Optional[ConfigDict] = Field(None, description="Provider metadata")
233
+ circuit_breaker_state: Optional[str] = Field(None, description="Circuit breaker state if available")
234
+
235
+
236
+ class ServiceRegistryInfoResponse(BaseModel):
237
+ """Enhanced service registry information response."""
238
+
239
+ total_services: int = Field(0, description="Total registered services")
240
+ services_by_type: Dict[str, int] = Field(default_factory=dict, description="Count by service type")
241
+ handlers: Dict[str, Dict[str, List[ServiceProviderInfo]]] = Field(
242
+ default_factory=dict, description="Handlers and their services with details"
243
+ )
244
+ global_services: Optional[Dict[str, List[ServiceProviderInfo]]] = Field(
245
+ None, description="Global services not tied to specific handlers"
246
+ )
247
+ healthy_services: int = Field(0, description="Number of healthy services")
248
+ circuit_breaker_states: Dict[str, str] = Field(
249
+ default_factory=dict, description="Circuit breaker states by service"
250
+ )
251
+ error: Optional[str] = Field(None, description="Error message if query failed")
252
+
253
+
254
+ class WAPublicKeyMap(BaseModel):
255
+ """Map of Wise Authority IDs to their public keys."""
256
+
257
+ keys: Dict[str, str] = Field(
258
+ default_factory=dict, description="Mapping of WA ID to Ed25519 public key (PEM format)"
259
+ )
260
+
261
+ def add_key(self, wa_id: str, public_key_pem: str) -> None:
262
+ """Add a WA public key."""
263
+ self.keys[wa_id] = public_key_pem
264
+
265
+ def get_key(self, wa_id: str) -> Optional[str]:
266
+ """Get a WA public key by ID."""
267
+ return self.keys.get(wa_id)
268
+
269
+ def has_key(self, wa_id: str) -> bool:
270
+ """Check if a WA ID has a registered key."""
271
+ return wa_id in self.keys
272
+
273
+ def clear(self) -> None:
274
+ """Clear all keys."""
275
+ self.keys.clear()
276
+
277
+ def count(self) -> int:
278
+ """Get the number of registered keys."""
279
+ return len(self.keys)
280
+
281
+
282
+ class ConfigBackupData(BaseModel):
283
+ """Data structure for configuration backups."""
284
+
285
+ configs: ConfigDict = Field(..., description="Backed up configuration values")
286
+ backup_timestamp: datetime = Field(
287
+ default_factory=lambda: datetime.now(timezone.utc), description="When the backup was created"
288
+ )
289
+ backup_version: str = Field(..., description="Version of the configuration")
290
+ backup_by: str = Field("RuntimeControlService", description="Who created the backup")
291
+
292
+ def to_config_value(self) -> SerializedModel:
293
+ """Convert to a format suitable for storage as a config value."""
294
+ return {
295
+ "configs": self.configs,
296
+ "backup_timestamp": self.backup_timestamp.isoformat(),
297
+ "backup_version": self.backup_version,
298
+ "backup_by": self.backup_by,
299
+ }
300
+
301
+ @classmethod
302
+ def from_config_value(cls, data: SerializedModel) -> "ConfigBackupData":
303
+ """Create from a stored config value."""
304
+ return cls(
305
+ configs=data.get("configs", {}),
306
+ backup_timestamp=datetime.fromisoformat(data["backup_timestamp"]),
307
+ backup_version=data["backup_version"],
308
+ backup_by=data.get("backup_by", "RuntimeControlService"),
309
+ )
310
+
311
+
312
+ class ProcessingQueueItem(BaseModel):
313
+ """
314
+ Information about an item in the processing queue.
315
+ Used for runtime control service to report queue status.
316
+ """
317
+
318
+ item_id: str = Field(..., description="Unique identifier for the queue item")
319
+ item_type: str = Field(..., description="Type of item (e.g., thought, task, message)")
320
+ priority: int = Field(0, description="Processing priority (higher = more urgent)")
321
+ created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
322
+ started_at: Optional[datetime] = Field(None, description="When processing started")
323
+ status: str = Field("pending", description="Item status: pending, processing, completed, failed")
324
+ source: Optional[str] = Field(None, description="Source of the queue item")
325
+ metadata: Dict[str, str | int | float | bool] = Field(default_factory=dict, description="Additional item metadata")
326
+
327
+
328
+ class QueuedThought(BaseModel):
329
+ """A thought queued for processing in the next round."""
330
+
331
+ thought_id: str = Field(..., description="Unique thought ID")
332
+ thought_type: str = Field(..., description="Type of thought")
333
+ source_task_id: str = Field(..., description="Source task ID")
334
+ task_description: str = Field(..., description="Task description")
335
+ created_at: datetime = Field(..., description="When thought was created")
336
+ priority: int = Field(0, description="Processing priority")
337
+ status: str = Field(..., description="Current status")
338
+
339
+
340
+ class QueuedTask(BaseModel):
341
+ """A task that may generate thoughts."""
342
+
343
+ task_id: str = Field(..., description="Unique task ID")
344
+ description: str = Field(..., description="Task description")
345
+ status: str = Field(..., description="Task status")
346
+ channel_id: str = Field(..., description="Source channel")
347
+ created_at: datetime = Field(..., description="When task was created")
348
+ thoughts_generated: int = Field(0, description="Number of thoughts generated")
349
+
350
+
351
+ class ThoughtInPipeline(BaseModel):
352
+ """Tracks a thought's position in the processing pipeline."""
353
+
354
+ thought_id: str = Field(..., description="Unique thought ID")
355
+ task_id: str = Field(..., description="Source task ID")
356
+ thought_type: str = Field(..., description="Type of thought")
357
+ current_step: StepPoint = Field(..., description="Current step point in pipeline")
358
+ last_completed_step: Optional[StepPoint] = Field(None, description="Last completed step point")
359
+ entered_step_at: datetime = Field(..., description="When thought entered current step")
360
+ processing_time_ms: float = Field(0.0, description="Total processing time so far")
361
+
362
+ # Data accumulated at each step - using existing schemas
363
+ context_built: Optional[DMAContext] = Field(None, description="Context built for DMAs")
364
+ ethical_dma: Optional[EthicalDMAResult] = Field(None, description="Ethical DMA result")
365
+ common_sense_dma: Optional[CSDMAResult] = Field(None, description="Common sense DMA result")
366
+ domain_dma: Optional[DSDMAResult] = Field(None, description="Domain DMA result")
367
+ aspdma_result: Optional[ActionSelectionDMAResult] = Field(None, description="ASPDMA result")
368
+ conscience_results: Optional[List[ConscienceResult]] = Field(None, description="Conscience evaluations")
369
+ selected_action: Optional[str] = Field(None, description="Final selected action")
370
+ handler_result: Optional[HandlerResult] = Field(None, description="Handler execution result")
371
+ bus_operations: Optional[List[str]] = Field(None, description="Bus operations performed")
372
+
373
+ # Tracking recursion
374
+ is_recursive: bool = Field(False, description="Whether in recursive ASPDMA")
375
+ recursion_count: int = Field(0, description="Number of ASPDMA recursions")
376
+
377
+
378
+ def _create_empty_pipeline_steps() -> Dict[str, List["ThoughtInPipeline"]]:
379
+ """Create empty pipeline step dictionary with proper typing."""
380
+ return {step.value: [] for step in StepPoint}
381
+
382
+
383
+ class PipelineState(BaseModel):
384
+ """Complete state of the processing pipeline."""
385
+
386
+ is_paused: bool = Field(False, description="Whether pipeline is paused")
387
+ current_round: int = Field(0, description="Current processing round")
388
+
389
+ # Thoughts at each step point
390
+ thoughts_by_step: Dict[str, List[ThoughtInPipeline]] = Field(
391
+ default_factory=_create_empty_pipeline_steps,
392
+ description="Thoughts grouped by their current step point",
393
+ )
394
+
395
+ # Queues
396
+ task_queue: List[QueuedTask] = Field(default_factory=list, description="Tasks waiting to generate thoughts")
397
+ thought_queue: List[QueuedThought] = Field(default_factory=list, description="Thoughts waiting to enter pipeline")
398
+
399
+ # Metrics
400
+ total_thoughts_processed: int = Field(0, description="Total thoughts processed")
401
+ total_thoughts_in_flight: int = Field(0, description="Thoughts currently in pipeline")
402
+
403
+ def get_thoughts_at_step(self, step: StepPoint) -> List[ThoughtInPipeline]:
404
+ """Get all thoughts at a specific step point."""
405
+ return self.thoughts_by_step.get(step.value, [])
406
+
407
+ def move_thought(self, thought_id: str, from_step: StepPoint, to_step: StepPoint) -> bool:
408
+ """Move a thought from one step to another."""
409
+ from_list = self.thoughts_by_step.get(from_step.value, [])
410
+ thought = next((t for t in from_list if t.thought_id == thought_id), None)
411
+ if thought:
412
+ from_list.remove(thought)
413
+ thought.current_step = to_step
414
+ thought.entered_step_at = datetime.now(timezone.utc)
415
+ self.thoughts_by_step.setdefault(to_step.value, []).append(thought)
416
+ return True
417
+ return False
418
+
419
+ def get_next_step(self, current_step: StepPoint) -> Optional[StepPoint]:
420
+ """Get the next step in the pipeline."""
421
+ steps = list(StepPoint)
422
+ try:
423
+ current_idx = steps.index(current_step)
424
+ if current_idx < len(steps) - 1:
425
+ return steps[current_idx + 1]
426
+ except ValueError:
427
+ pass
428
+ return None
429
+
430
+
431
+ class ThoughtProcessingResult(BaseModel):
432
+ """Result from processing a thought through the full pipeline."""
433
+
434
+ thought_id: str = Field(..., description="Unique thought ID")
435
+ task_id: str = Field(..., description="Source task ID")
436
+ thought_type: str = Field(..., description="Type of thought")
437
+
438
+ # Handler execution result
439
+ handler_type: str = Field(..., description="Handler that processed the action")
440
+ handler_success: bool = Field(..., description="Whether handler succeeded")
441
+ handler_message: Optional[str] = Field(None, description="Handler result message")
442
+ handler_error: Optional[str] = Field(None, description="Handler error if failed")
443
+
444
+ # Bus operations performed
445
+ bus_operations: List[str] = Field(
446
+ default_factory=list, description="Bus operations performed (e.g., 'memory_stored', 'message_sent')"
447
+ )
448
+
449
+ # Timing
450
+ total_processing_time_ms: float = Field(..., description="Total processing time")
451
+ dma_time_ms: Optional[float] = Field(None, description="DMA processing time")
452
+ conscience_time_ms: Optional[float] = Field(None, description="Conscience processing time")
453
+ handler_time_ms: Optional[float] = Field(None, description="Handler execution time")
454
+
455
+ # Final status
456
+ final_status: str = Field(..., description="Final thought status")
457
+
458
+ # Tasks selected for processing
459
+ tasks_to_process: List[QueuedTask] = Field(
460
+ default_factory=list, description="Tasks selected for thought generation"
461
+ )
462
+
463
+ # Tasks deferred or skipped
464
+ tasks_deferred: List[Dict[str, str]] = Field(default_factory=list, description="Tasks deferred with reasons")
465
+
466
+ # Selection criteria used
467
+ selection_criteria: TaskSelectionCriteria = Field(
468
+ default_factory=TaskSelectionCriteria,
469
+ description="Criteria used to select tasks (priority, age, channel, etc.)",
470
+ )
471
+
472
+ # Metrics
473
+ total_pending_tasks: int = Field(0)
474
+ total_active_tasks: int = Field(0)
475
+ tasks_selected_count: int = Field(0)
476
+ processing_time_ms: float = Field(0.0)
477
+
478
+ error: Optional[str] = Field(None)
479
+
480
+
481
+ class StepResultStartRound(BaseModel):
482
+ """Result from START_ROUND step - moves thoughts from PENDING to PROCESSING."""
483
+
484
+ step_point: StepPoint = Field(StepPoint.START_ROUND)
485
+ success: bool = Field(..., description="Whether step succeeded")
486
+
487
+ # EXACT data from SUT step_data dict
488
+ timestamp: str = Field(..., description="Timestamp from SUT")
489
+ thought_id: str = Field(..., description="Thought ID from SUT")
490
+ task_id: Optional[str] = Field(None, description="Task ID from SUT")
491
+ processing_time_ms: float = Field(..., description="Processing time from SUT")
492
+
493
+ # Round start specific data
494
+ thoughts_processed: int = Field(..., description="Number of thoughts processed in this step")
495
+ round_started: bool = Field(..., description="Whether round was successfully started")
496
+
497
+ error: Optional[str] = Field(None)
498
+
499
+
500
+ class StepResultGatherContext(BaseModel):
501
+ """Result from GATHER_CONTEXT step - builds context for DMA processing."""
502
+
503
+ step_point: StepPoint = Field(StepPoint.GATHER_CONTEXT)
504
+ success: bool = Field(..., description="Whether step succeeded")
505
+
506
+ # EXACT data from SUT step_data dict
507
+ timestamp: str = Field(..., description="Timestamp from SUT")
508
+ thought_id: str = Field(..., description="Thought ID from SUT")
509
+ task_id: Optional[str] = Field(None, description="Task ID from SUT")
510
+ processing_time_ms: float = Field(..., description="Processing time from SUT")
511
+
512
+ # Additional context-specific fields
513
+ context_size: Optional[int] = Field(None, description="Number of context items gathered")
514
+ summary: Optional[str] = Field(None, description="Summary of context gathering process")
515
+ thought_content: Optional[str] = Field(None, description="Content of the thought")
516
+ thought_type: str = Field(default="standard", description="Type of thought being processed")
517
+
518
+ error: Optional[str] = Field(None)
519
+
520
+
521
+ class StepResultPerformDMAs(BaseModel):
522
+ """Result from PERFORM_DMAS step - parallel execution of base DMAs."""
523
+
524
+ step_point: StepPoint = Field(StepPoint.PERFORM_DMAS)
525
+ success: bool = Field(..., description="Whether step succeeded")
526
+
527
+ # EXACT data from SUT step_data dict
528
+ timestamp: str = Field(..., description="Timestamp from SUT")
529
+ thought_id: str = Field(..., description="Thought ID from SUT")
530
+ task_id: Optional[str] = Field(None, description="Task ID from SUT")
531
+ context: str = Field(..., description="Thought context from SUT")
532
+ processing_time_ms: float = Field(..., description="Processing time from SUT")
533
+
534
+ error: Optional[str] = Field(None)
535
+
536
+
537
+ # Using the existing ConscienceResult schema instead of creating ConscienceEvaluation
538
+
539
+
540
+ class StepResultPerformASPDMA(BaseModel):
541
+ """Result from PERFORM_ASPDMA step - action selection DMA execution."""
542
+
543
+ step_point: StepPoint = Field(StepPoint.PERFORM_ASPDMA)
544
+ success: bool = Field(..., description="Whether step succeeded")
545
+
546
+ # EXACT data from SUT step_data dict
547
+ timestamp: str = Field(..., description="Timestamp from SUT")
548
+ thought_id: str = Field(..., description="Thought ID from SUT")
549
+ task_id: Optional[str] = Field(None, description="Task ID from SUT")
550
+ dma_results: Optional[str] = Field(None, description="DMA results from SUT")
551
+ processing_time_ms: float = Field(..., description="Processing time from SUT")
552
+
553
+ error: Optional[str] = Field(None)
554
+
555
+
556
+ class StepResultConscienceExecution(BaseModel):
557
+ """Result from CONSCIENCE_EXECUTION step - parallel conscience checks."""
558
+
559
+ step_point: StepPoint = Field(StepPoint.CONSCIENCE_EXECUTION)
560
+ success: bool = Field(..., description="Whether step succeeded")
561
+
562
+ # EXACT data from SUT step_data dict
563
+ timestamp: str = Field(..., description="Timestamp from SUT")
564
+ thought_id: str = Field(..., description="Thought ID from SUT")
565
+ task_id: Optional[str] = Field(None, description="Task ID from SUT")
566
+ selected_action: str = Field(..., description="Selected action from SUT")
567
+ action_result: Optional[str] = Field(None, description="Action result from SUT")
568
+ processing_time_ms: float = Field(..., description="Processing time from SUT")
569
+
570
+ error: Optional[str] = Field(None)
571
+
572
+
573
+ class StepResultRecursiveASPDMA(BaseModel):
574
+ """Result from RECURSIVE_ASPDMA step - retry after conscience failure."""
575
+
576
+ step_point: StepPoint = Field(StepPoint.RECURSIVE_ASPDMA)
577
+ success: bool = Field(..., description="Whether step succeeded")
578
+
579
+ # EXACT data from SUT step_data dict
580
+ timestamp: str = Field(..., description="Timestamp from SUT")
581
+ thought_id: str = Field(..., description="Thought ID from SUT")
582
+ task_id: Optional[str] = Field(None, description="Task ID from SUT")
583
+ retry_reason: str = Field(..., description="Retry reason from SUT")
584
+ original_action: str = Field(..., description="Original action from SUT")
585
+ processing_time_ms: float = Field(..., description="Processing time from SUT")
586
+
587
+ error: Optional[str] = Field(None)
588
+
589
+
590
+ class StepResultRecursiveConscience(BaseModel):
591
+ """Result from RECURSIVE_CONSCIENCE step - recheck after recursive ASPDMA."""
592
+
593
+ step_point: StepPoint = Field(StepPoint.RECURSIVE_CONSCIENCE)
594
+ success: bool = Field(..., description="Whether step succeeded")
595
+
596
+ # EXACT data from SUT step_data dict
597
+ timestamp: str = Field(..., description="Timestamp from SUT")
598
+ thought_id: str = Field(..., description="Thought ID from SUT")
599
+ task_id: Optional[str] = Field(None, description="Task ID from SUT")
600
+ retry_action: str = Field(..., description="Retry action from SUT")
601
+ retry_result: Optional[str] = Field(None, description="Retry result from SUT")
602
+ processing_time_ms: float = Field(..., description="Processing time from SUT")
603
+
604
+ error: Optional[str] = Field(None)
605
+
606
+
607
+ class StepResultFinalizeAction(BaseModel):
608
+ """Result from FINALIZE_ACTION step - final action determined."""
609
+
610
+ step_point: StepPoint = Field(StepPoint.FINALIZE_ACTION)
611
+ success: bool = Field(..., description="Whether step succeeded")
612
+
613
+ # EXACT data from SUT step_data dict
614
+ timestamp: str = Field(..., description="Timestamp from SUT")
615
+ thought_id: str = Field(..., description="Thought ID from SUT")
616
+ task_id: Optional[str] = Field(None, description="Task ID from SUT")
617
+ selected_action: str = Field(..., description="Selected action from SUT")
618
+ conscience_passed: bool = Field(..., description=DESC_CONSCIENCE_PASSED)
619
+ conscience_override_reason: Optional[str] = Field(None, description=DESC_CONSCIENCE_OVERRIDE_REASON)
620
+ epistemic_data: EpistemicData = Field(..., description="Rich conscience evaluation data")
621
+ processing_time_ms: float = Field(..., description="Processing time from SUT")
622
+
623
+ error: Optional[str] = Field(None)
624
+
625
+
626
+ class StepResultPerformAction(BaseModel):
627
+ """Result from PERFORM_ACTION step - action dispatch begins."""
628
+
629
+ step_point: StepPoint = Field(StepPoint.PERFORM_ACTION)
630
+ success: bool = Field(..., description="Whether step succeeded")
631
+
632
+ # EXACT data from SUT step_data dict
633
+ timestamp: Optional[str] = Field(None, description="Timestamp from SUT")
634
+ thought_id: str = Field(..., description="Thought ID from SUT")
635
+ task_id: Optional[str] = Field(None, description="Task ID from SUT")
636
+ selected_action: str = Field(..., description="Selected action from SUT")
637
+ action_parameters: Optional[str] = Field(None, description="Action parameters from SUT")
638
+ dispatch_context: str = Field(..., description="Dispatch context from SUT")
639
+
640
+ error: Optional[str] = Field(None)
641
+
642
+
643
+ class StepResultActionComplete(BaseModel):
644
+ """Result from ACTION_COMPLETE step - action execution completed with audit trail."""
645
+
646
+ step_point: StepPoint = Field(StepPoint.ACTION_COMPLETE)
647
+ success: bool = Field(..., description="Whether step succeeded")
648
+
649
+ # EXACT data from SUT step_data dict
650
+ timestamp: Optional[str] = Field(None, description="Timestamp from SUT")
651
+ thought_id: str = Field(..., description="Thought ID from SUT")
652
+ task_id: Optional[str] = Field(None, description="Task ID from SUT")
653
+ action_executed: str = Field(..., description="Action executed from SUT")
654
+ dispatch_success: bool = Field(..., description="Dispatch success from SUT")
655
+ execution_time_ms: float = Field(..., description="Execution time from SUT")
656
+ handler_completed: bool = Field(..., description="Handler completed from SUT")
657
+ follow_up_processing_pending: bool = Field(..., description="Follow-up processing pending from SUT")
658
+ audit_entry_id: Optional[str] = Field(None, description="ID of audit entry for this action")
659
+ audit_sequence_number: Optional[int] = Field(None, description=DESC_AUDIT_SEQUENCE)
660
+ audit_entry_hash: Optional[str] = Field(None, description=DESC_AUDIT_HASH)
661
+ audit_signature: Optional[str] = Field(None, description=DESC_AUDIT_SIGNATURE)
662
+
663
+
664
+ class StepResultRoundComplete(BaseModel):
665
+ """Result from ROUND_COMPLETE step - processing round completed."""
666
+
667
+ step_point: StepPoint = Field(StepPoint.ROUND_COMPLETE)
668
+ success: bool = Field(..., description="Whether step succeeded")
669
+
670
+ # EXACT data from SUT step_data dict
671
+ timestamp: Optional[str] = Field(None, description="Timestamp from SUT")
672
+ thought_id: str = Field(..., description="Thought ID from SUT")
673
+ task_id: Optional[str] = Field(None, description="Task ID from SUT")
674
+ processing_time_ms: float = Field(..., description="Processing time from SUT")
675
+ round_status: str = Field(..., description="Round completion status from SUT")
676
+ thoughts_processed: int = Field(..., description="Number of thoughts processed from SUT")
677
+
678
+ error: Optional[str] = Field(None)
679
+
680
+
681
+ # Union type for all step results
682
+ StepResultUnion = (
683
+ StepResultGatherContext
684
+ | StepResultPerformDMAs
685
+ | StepResultPerformASPDMA
686
+ | StepResultConscienceExecution
687
+ | StepResultRecursiveASPDMA
688
+ | StepResultRecursiveConscience
689
+ | StepResultFinalizeAction
690
+ | StepResultPerformAction
691
+ | StepResultActionComplete
692
+ )
693
+
694
+
695
+ # Step Data Schemas for type-safe step processing
696
+
697
+
698
+ class BaseStepData(BaseModel):
699
+ """Base step data with common fields for all steps."""
700
+
701
+ timestamp: str = Field(..., description="ISO timestamp when step started")
702
+ thought_id: str = Field(..., description="Unique thought identifier")
703
+ task_id: Optional[str] = Field(None, description="Source task identifier")
704
+ processing_time_ms: float = Field(..., description="Step processing time in milliseconds")
705
+ success: bool = Field(True, description="Whether step completed successfully")
706
+ error: Optional[str] = Field(None, description="Error message if step failed")
707
+
708
+
709
+ class StartRoundStepData(BaseStepData):
710
+ """Step data for START_ROUND step."""
711
+
712
+ thoughts_processed: int = Field(..., description="Number of thoughts to process in round")
713
+ round_started: bool = Field(True, description="Round initiation flag")
714
+
715
+
716
+ class GatherContextStepData(BaseStepData):
717
+ """Step data for GATHER_CONTEXT step."""
718
+
719
+ context: str = Field(..., description="Built context data for DMA processing")
720
+
721
+
722
+ class PerformDMAsStepData(BaseStepData):
723
+ """Step data for PERFORM_DMAS step."""
724
+
725
+ dma_results: str = Field(..., description="Results from DMA processing")
726
+ context: str = Field(..., description="Initial context for DMA processing")
727
+
728
+
729
+ class PerformASPDMAStepData(BaseStepData):
730
+ """Step data for PERFORM_ASPDMA step."""
731
+
732
+ selected_action: str = Field(..., description="Action selected by ASPDMA")
733
+ action_rationale: str = Field(..., description="Rationale for action selection")
734
+ dma_results: Optional[str] = Field(None, description="DMA results string summary from previous PERFORM_DMAS step")
735
+ dma_results_obj: Optional[Any] = Field(None, description="Concrete InitialDMAResults object from PERFORM_DMAS step")
736
+
737
+
738
+ class ConscienceExecutionStepData(BaseStepData):
739
+ """Step data for CONSCIENCE_EXECUTION step."""
740
+
741
+ selected_action: str = Field(..., description="Final action after conscience check")
742
+ action_rationale: str = Field(..., description="Rationale for the final action (REQUIRED)")
743
+ conscience_passed: bool = Field(..., description="Whether conscience validation passed")
744
+ action_result: str = Field(..., description="Complete action result")
745
+ override_reason: Optional[str] = Field(None, description="Reason for conscience override if failed")
746
+ conscience_result: ConscienceResult = Field(..., description="Complete conscience evaluation result")
747
+ aspdma_prompt: Optional[str] = Field(None, description="User prompt passed to ASPDMA for debugging")
748
+
749
+
750
+ class RecursiveASPDMAStepData(BaseStepData):
751
+ """Step data for RECURSIVE_ASPDMA step."""
752
+
753
+ retry_reason: str = Field(..., description="Reason for recursive ASPDMA execution")
754
+ original_action: str = Field(..., description="Original action that was retried")
755
+
756
+
757
+ class RecursiveConscienceStepData(BaseStepData):
758
+ """Step data for RECURSIVE_CONSCIENCE step."""
759
+
760
+ retry_action: str = Field(..., description="Action being retried through conscience")
761
+ retry_result: str = Field(..., description="Result of recursive conscience check")
762
+
763
+
764
+ class FinalizeActionStepData(BaseStepData):
765
+ """Step data for FINALIZE_ACTION step."""
766
+
767
+ selected_action: str = Field(..., description="Final selected action")
768
+ conscience_passed: bool = Field(..., description="Whether conscience checks passed")
769
+ conscience_override_reason: Optional[str] = Field(None, description="Reason if conscience overrode action")
770
+ epistemic_data: EpistemicData = Field(..., description="Rich conscience evaluation data from all checks")
771
+ updated_status_detected: Optional[bool] = Field(
772
+ None, description="Whether UpdatedStatusConscience detected new information during task processing"
773
+ )
774
+
775
+
776
+ class PerformActionStepData(BaseStepData):
777
+ """Step data for PERFORM_ACTION step."""
778
+
779
+ selected_action: str = Field(..., description="Action being performed")
780
+ action_parameters: str = Field("None", description="Parameters for action execution")
781
+ dispatch_context: str = Field("{}", description="Context for action dispatch")
782
+
783
+
784
+ class ActionCompleteStepData(BaseStepData):
785
+ """Step data for ACTION_COMPLETE step with audit trail and resource usage information."""
786
+
787
+ action_executed: str = Field(..., description="Action that was executed")
788
+ dispatch_success: bool = Field(..., description="Whether action dispatch succeeded")
789
+ handler_completed: bool = Field(..., description="Whether action handler completed")
790
+ follow_up_processing_pending: bool = Field(False, description="Whether follow-up processing needed")
791
+ follow_up_thought_id: Optional[str] = Field(None, description="ID of follow-up thought if created")
792
+ execution_time_ms: float = Field(0.0, description="Action execution time")
793
+ audit_entry_id: str = Field(..., description="ID of audit entry created for this action (REQUIRED)")
794
+ audit_sequence_number: int = Field(..., description="Sequence number in audit hash chain (REQUIRED)")
795
+ audit_entry_hash: str = Field(..., description="Hash of audit entry - tamper-evident (REQUIRED)")
796
+ audit_signature: str = Field(..., description="Cryptographic signature of audit entry (REQUIRED)")
797
+
798
+ # Resource usage (queried from telemetry by thought_id)
799
+ tokens_total: int = Field(0, description="Total tokens used (query telemetry by thought_id)")
800
+ tokens_input: int = Field(0, description="Input tokens (query telemetry by thought_id)")
801
+ tokens_output: int = Field(0, description="Output tokens (query telemetry by thought_id)")
802
+ cost_cents: float = Field(0.0, description="Cost in USD cents (query telemetry by thought_id)")
803
+ carbon_grams: float = Field(0.0, description="CO2 emissions in grams (query telemetry by thought_id)")
804
+ energy_mwh: float = Field(0.0, description="Energy in milliwatt-hours (query telemetry by thought_id)")
805
+ llm_calls: int = Field(0, description="Number of LLM calls (query telemetry by thought_id)")
806
+ models_used: List[str] = Field(default_factory=list, description="Models used (query telemetry by thought_id)")
807
+
808
+
809
+ class ActionResponse(BaseModel):
810
+ """Typed response from action dispatch."""
811
+
812
+ success: bool = Field(..., description="Whether action dispatch succeeded")
813
+ handler: str = Field(..., description="Handler that executed the action")
814
+ action_type: str = Field(..., description="Type of action executed")
815
+ follow_up_thought_id: Optional[str] = Field(None, description="ID of follow-up thought if created")
816
+ execution_time_ms: float = Field(0.0, description="Action execution time in milliseconds")
817
+
818
+ # Audit trail data (REQUIRED) from AuditEntryResult
819
+ audit_data: AuditEntryResult = Field(..., description="Audit entry with hash chain data (REQUIRED)")
820
+
821
+
822
+ class RoundCompleteStepData(BaseStepData):
823
+ """Step data for ROUND_COMPLETE step."""
824
+
825
+ round_status: str = Field("completed", description="Status of completed round")
826
+ thoughts_processed: int = Field(..., description="Number of thoughts processed in round")
827
+
828
+
829
+ # Union type for all step data
830
+ StepDataUnion = (
831
+ StartRoundStepData
832
+ | GatherContextStepData
833
+ | PerformDMAsStepData
834
+ | PerformASPDMAStepData
835
+ | ConscienceExecutionStepData
836
+ | RecursiveASPDMAStepData
837
+ | RecursiveConscienceStepData
838
+ | FinalizeActionStepData
839
+ | PerformActionStepData
840
+ | ActionCompleteStepData
841
+ | RoundCompleteStepData
842
+ )
843
+
844
+
845
+ class StepResultData(BaseModel):
846
+ """Complete step result data structure for streaming."""
847
+
848
+ step_point: str = Field(..., description="Step point name")
849
+ success: bool = Field(True, description="Whether step succeeded")
850
+ processing_time_ms: float = Field(0.0, description="Step processing time")
851
+ thought_id: str = Field("", description="Thought identifier")
852
+ task_id: str = Field("", description="Task identifier")
853
+ step_data: StepDataUnion = Field(..., description="Typed step data")
854
+ trace_context: TraceContext = Field(..., description="OTLP trace context")
855
+ span_attributes: List[SpanAttribute] = Field(..., description="OTLP span attributes")
856
+ otlp_compatible: bool = Field(True, description="OTLP compatibility flag")
857
+
858
+
859
+ class StepExecutionResult(BaseModel):
860
+ """Result from executing a single step for a paused thought."""
861
+
862
+ success: bool = Field(..., description="Whether step execution succeeded")
863
+ thought_id: str = Field(..., description="Thought identifier")
864
+ message: Optional[str] = Field(None, description="Success message")
865
+ error: Optional[str] = Field(None, description="Error message if failed")
866
+
867
+
868
+ class AllStepsExecutionResult(BaseModel):
869
+ """Result from executing steps for all paused thoughts."""
870
+
871
+ success: bool = Field(..., description="Whether execution succeeded")
872
+ thoughts_advanced: int = Field(0, description="Number of thoughts advanced")
873
+ message: Optional[str] = Field(None, description="Result message")
874
+ error: Optional[str] = Field(None, description="Error message if failed")
875
+
876
+
877
+ # ============================================================================
878
+ # Simplified Reasoning Stream Event Results (6 clear events, no UI metadata)
879
+ # ============================================================================
880
+
881
+
882
+ class ThoughtStartEvent(BaseModel):
883
+ """Event 0: Thought begins processing - thought and task metadata (START_ROUND step)."""
884
+
885
+ event_type: ReasoningEvent = Field(ReasoningEvent.THOUGHT_START)
886
+ thought_id: str = Field(..., description=DESC_THOUGHT_ID)
887
+ task_id: str = Field(..., description="Source task identifier")
888
+ timestamp: str = Field(..., description=DESC_TIMESTAMP)
889
+
890
+ # Thought metadata
891
+ thought_type: str = Field(..., description="Type of thought (standard, pondering, etc)")
892
+ thought_content: str = Field(..., description="Thought content/reasoning")
893
+ thought_status: str = Field(..., description="Current thought status")
894
+ round_number: int = Field(..., description="Processing round")
895
+ thought_depth: int = Field(0, description="Pondering depth if applicable")
896
+ parent_thought_id: Optional[str] = Field(None, description="Parent thought if pondering")
897
+
898
+ # Task metadata (context for the thought)
899
+ task_description: str = Field(..., description="What needs to be done")
900
+ task_priority: int = Field(..., description="Priority 0-10")
901
+ channel_id: str = Field(..., description="Channel where task originated")
902
+ updated_info_available: bool = Field(False, description="Whether task has updated information")
903
+
904
+
905
+ class SnapshotAndContextResult(BaseModel):
906
+ """Event 1: System snapshot (GATHER_CONTEXT step).
907
+
908
+ The system_snapshot field contains all context data in structured form.
909
+ The redundant context string field has been removed to eliminate duplication.
910
+ """
911
+
912
+ event_type: ReasoningEvent = Field(ReasoningEvent.SNAPSHOT_AND_CONTEXT)
913
+ thought_id: str = Field(..., description=DESC_THOUGHT_ID)
914
+ task_id: Optional[str] = Field(None, description=DESC_PARENT_TASK)
915
+ timestamp: str = Field(..., description=DESC_TIMESTAMP)
916
+
917
+ # System snapshot - contains all context data
918
+ system_snapshot: SystemSnapshot = Field(..., description="Current system state with all context data")
919
+
920
+
921
+ class DMAResultsEvent(BaseModel):
922
+ """Event 2: Results from all 3 DMA perspectives (PERFORM_DMAS step)."""
923
+
924
+ event_type: ReasoningEvent = Field(ReasoningEvent.DMA_RESULTS)
925
+ thought_id: str = Field(..., description=DESC_THOUGHT_ID)
926
+ task_id: Optional[str] = Field(None, description=DESC_PARENT_TASK)
927
+ timestamp: str = Field(..., description=DESC_TIMESTAMP)
928
+
929
+ # All 3 DMA results - strongly typed, non-optional
930
+ csdma: CSDMAResult = Field(..., description="Common Sense DMA result")
931
+ dsdma: DSDMAResult = Field(..., description="Domain Specific DMA result")
932
+ pdma: EthicalDMAResult = Field(..., description="Ethical Perspective DMA result (PDMA)")
933
+
934
+ # User prompts passed to each DMA (for debugging/transparency)
935
+ csdma_prompt: Optional[str] = Field(None, description="User prompt passed to CSDMA")
936
+ dsdma_prompt: Optional[str] = Field(None, description="User prompt passed to DSDMA")
937
+ pdma_prompt: Optional[str] = Field(None, description="User prompt passed to PDMA")
938
+
939
+
940
+ class ASPDMAResultEvent(BaseModel):
941
+ """Event 3: Selected action and rationale (PERFORM_ASPDMA + RECURSIVE_ASPDMA steps)."""
942
+
943
+ event_type: ReasoningEvent = Field(ReasoningEvent.ASPDMA_RESULT)
944
+ thought_id: str = Field(..., description=DESC_THOUGHT_ID)
945
+ task_id: Optional[str] = Field(None, description=DESC_PARENT_TASK)
946
+ timestamp: str = Field(..., description=DESC_TIMESTAMP)
947
+ is_recursive: bool = Field(False, description="Whether this is a recursive ASPDMA after conscience override")
948
+
949
+ # ASPDMA selection
950
+ selected_action: str = Field(..., description="Action selected by ASPDMA")
951
+ action_rationale: str = Field(..., description="Rationale for selection")
952
+
953
+ # User prompt passed to ASPDMA (for debugging/transparency)
954
+ aspdma_prompt: Optional[str] = Field(None, description="User prompt passed to ASPDMA")
955
+
956
+
957
+ class ConscienceResultEvent(BaseModel):
958
+ """Event 4: Conscience evaluation and final action (CONSCIENCE_EXECUTION + RECURSIVE_CONSCIENCE + FINALIZE_ACTION steps)."""
959
+
960
+ event_type: ReasoningEvent = Field(ReasoningEvent.CONSCIENCE_RESULT)
961
+ thought_id: str = Field(..., description=DESC_THOUGHT_ID)
962
+ task_id: Optional[str] = Field(None, description=DESC_PARENT_TASK)
963
+ timestamp: str = Field(..., description=DESC_TIMESTAMP)
964
+ is_recursive: bool = Field(False, description="Whether this is a recursive conscience check after override")
965
+
966
+ # Conscience evaluation
967
+ conscience_passed: bool = Field(..., description=DESC_CONSCIENCE_PASSED)
968
+ conscience_override_reason: Optional[str] = Field(None, description=DESC_CONSCIENCE_OVERRIDE_REASON)
969
+ epistemic_data: EpistemicData = Field(..., description="Rich conscience evaluation data from all checks")
970
+
971
+ # Final action
972
+ final_action: str = Field(..., description="Final action after conscience evaluation")
973
+ action_was_overridden: bool = Field(..., description="Whether conscience changed the action")
974
+
975
+ # UpdatedStatusConscience detection
976
+ updated_status_available: Optional[bool] = Field(
977
+ None, description="Whether UpdatedStatusConscience detected new information during task processing"
978
+ )
979
+
980
+
981
+ class ActionResultEvent(BaseModel):
982
+ """Event 5: Action execution outcome with audit trail and resource usage (ACTION_COMPLETE step)."""
983
+
984
+ event_type: ReasoningEvent = Field(ReasoningEvent.ACTION_RESULT)
985
+ thought_id: str = Field(..., description=DESC_THOUGHT_ID)
986
+ task_id: Optional[str] = Field(None, description=DESC_PARENT_TASK)
987
+ timestamp: str = Field(..., description=DESC_TIMESTAMP)
988
+
989
+ # Action execution
990
+ action_executed: str = Field(..., description="Action that was executed")
991
+ execution_success: bool = Field(..., description="Whether execution succeeded")
992
+ execution_time_ms: float = Field(..., description="Execution time in milliseconds")
993
+ follow_up_thought_id: Optional[str] = Field(None, description="Follow-up thought created if any")
994
+ error: Optional[str] = Field(None, description="Error message if execution failed")
995
+
996
+ # Audit trail (tamper-evident)
997
+ audit_entry_id: Optional[str] = Field(None, description="ID of audit entry for this action")
998
+ audit_sequence_number: Optional[int] = Field(None, description=DESC_AUDIT_SEQUENCE)
999
+ audit_entry_hash: Optional[str] = Field(None, description=DESC_AUDIT_HASH)
1000
+ audit_signature: Optional[str] = Field(None, description=DESC_AUDIT_SIGNATURE)
1001
+
1002
+ # Resource usage (queried from telemetry by thought_id)
1003
+ tokens_total: int = Field(0, description="Total tokens used for this thought")
1004
+ tokens_input: int = Field(0, description="Input tokens used for this thought")
1005
+ tokens_output: int = Field(0, description="Output tokens used for this thought")
1006
+ cost_cents: float = Field(0.0, description="Total cost in USD cents for this thought")
1007
+ carbon_grams: float = Field(0.0, description="CO2 emissions in grams for this thought")
1008
+ energy_mwh: float = Field(0.0, description="Energy used in milliwatt-hours for this thought")
1009
+ llm_calls: int = Field(0, description="Number of LLM calls for this thought")
1010
+ models_used: List[str] = Field(default_factory=list, description="Unique models used for this thought")