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,704 @@
1
+ """
2
+ Graph node type schemas for CIRIS.
3
+
4
+ These define all the specialized node types that can be stored in the graph.
5
+ Everything in the graph is a memory - these are the different types of memories.
6
+ """
7
+
8
+ from datetime import datetime, timezone
9
+ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union, cast
10
+
11
+ from pydantic import BaseModel, Field
12
+
13
+ from ciris_engine.constants import CIRIS_VERSION
14
+ from ciris_engine.schemas.infrastructure.identity_variance import IdentityData
15
+ from ciris_engine.schemas.services.graph.attributes import AnyNodeAttributes
16
+ from ciris_engine.schemas.services.graph_core import GraphNode, GraphScope, NodeType
17
+ from ciris_engine.schemas.services.graph_typed_nodes import TypedGraphNode, register_node_type
18
+ from ciris_engine.schemas.types import JSONDict, JSONValue
19
+
20
+ if TYPE_CHECKING:
21
+ from ciris_engine.schemas.runtime.core import AgentIdentityRoot
22
+
23
+
24
+ class AuditEntryContext(BaseModel):
25
+ """Typed context for audit entries."""
26
+
27
+ service_name: Optional[str] = None
28
+ method_name: Optional[str] = None
29
+ user_id: Optional[str] = None
30
+ correlation_id: Optional[str] = None
31
+ additional_data: Optional[Dict[str, Union[str, int, float, bool]]] = None
32
+
33
+
34
+ @register_node_type("AUDIT_ENTRY")
35
+ class AuditEntry(TypedGraphNode):
36
+ """An audit trail entry stored as a graph memory."""
37
+
38
+ action: str = Field(..., description="The action that was performed")
39
+ actor: str = Field(..., description="Who/what performed the action")
40
+ timestamp: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
41
+ context: AuditEntryContext = Field(..., description="Typed action context")
42
+ signature: Optional[str] = Field(None, description="Cryptographic signature if signed")
43
+ hash_chain: Optional[str] = Field(None, description="Previous hash for chain integrity")
44
+
45
+ # Required TypedGraphNode fields
46
+ created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
47
+ updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
48
+ created_by: str = Field(default="audit_service")
49
+ updated_by: str = Field(default="audit_service")
50
+
51
+ # Graph node type
52
+ type: NodeType = Field(default=NodeType.AUDIT_ENTRY)
53
+
54
+ def to_graph_node(self) -> GraphNode:
55
+ """Convert to GraphNode for storage."""
56
+ # Get all fields
57
+ all_attrs = self.model_dump()
58
+
59
+ # Extract base GraphNode fields
60
+ node_id = all_attrs.get("id", f"audit_{self.timestamp.strftime('%Y%m%d_%H%M%S')}_{self.actor}")
61
+ node_type = self.type
62
+ node_scope = all_attrs.get("scope", GraphScope.LOCAL)
63
+
64
+ # Build attributes dict with only extra fields
65
+ extra_fields = {
66
+ # Required GraphNodeAttributes fields
67
+ "created_at": self.created_at.isoformat(),
68
+ "updated_at": self.updated_at.isoformat(),
69
+ "created_by": self.created_by,
70
+ "tags": [f"actor:{self.actor}", f"action:{self.action}"],
71
+ # AuditEntry specific fields
72
+ "action": self.action,
73
+ "actor": self.actor,
74
+ "timestamp": self.timestamp.isoformat(),
75
+ "context": self.context.model_dump(),
76
+ "signature": self.signature,
77
+ "hash_chain": self.hash_chain,
78
+ "node_class": "AuditEntry",
79
+ }
80
+
81
+ return GraphNode(
82
+ id=node_id,
83
+ type=node_type,
84
+ scope=node_scope,
85
+ attributes=extra_fields,
86
+ version=all_attrs.get("version", 1),
87
+ updated_by=self.updated_by,
88
+ updated_at=self.updated_at,
89
+ )
90
+
91
+ @classmethod
92
+ def from_graph_node(cls, node: GraphNode) -> "AuditEntry":
93
+ """Reconstruct from GraphNode."""
94
+ # Handle both dict and GraphNodeAttributes
95
+ if isinstance(node.attributes, dict):
96
+ attrs = node.attributes
97
+ elif hasattr(node.attributes, "model_dump"):
98
+ attrs = node.attributes.model_dump()
99
+ else:
100
+ raise ValueError(f"Invalid attributes type: {type(node.attributes)}")
101
+
102
+ # Deserialize timestamp
103
+ now = datetime.now(timezone.utc)
104
+ timestamp = cls._deserialize_datetime(attrs.get("timestamp", attrs.get("created_at"))) or now
105
+ created_at = cls._deserialize_datetime(attrs.get("created_at", attrs.get("timestamp"))) or now
106
+ updated_at = cls._deserialize_datetime(attrs.get("updated_at", attrs.get("created_at"))) or now
107
+
108
+ # Deserialize context
109
+ context_data = attrs.get("context", {})
110
+ if isinstance(context_data, dict):
111
+ context = AuditEntryContext(**context_data)
112
+ else:
113
+ context = AuditEntryContext()
114
+
115
+ return cls(
116
+ id=node.id,
117
+ type=node.type,
118
+ scope=node.scope,
119
+ attributes=node.attributes, # Pass through the attributes
120
+ action=attrs.get("action", "unknown"),
121
+ actor=attrs.get("actor", "unknown"),
122
+ timestamp=timestamp,
123
+ context=context,
124
+ signature=attrs.get("signature"),
125
+ hash_chain=attrs.get("hash_chain"),
126
+ created_at=created_at,
127
+ updated_at=updated_at,
128
+ created_by=attrs.get("created_by", "audit_service"),
129
+ updated_by=attrs.get("updated_by", "audit_service"),
130
+ version=node.version,
131
+ )
132
+
133
+
134
+ class ConfigValue(BaseModel):
135
+ """Typed configuration value wrapper."""
136
+
137
+ string_value: Optional[str] = None
138
+ int_value: Optional[int] = None
139
+ float_value: Optional[float] = None
140
+ bool_value: Optional[bool] = None
141
+ list_value: Optional[List[Union[str, int, float, bool]]] = None
142
+ dict_value: Optional[Dict[str, JSONValue]] = None # Allow None values in dict
143
+
144
+ @property
145
+ def value(
146
+ self,
147
+ ) -> Optional[Union[str, int, float, bool, List[Union[str, int, float, bool]], Dict[str, JSONValue]]]:
148
+ """Get the actual value."""
149
+ # Check each field in order
150
+ if self.string_value is not None:
151
+ return self.string_value
152
+ elif self.int_value is not None:
153
+ return self.int_value
154
+ elif self.float_value is not None:
155
+ return self.float_value
156
+ elif self.bool_value is not None:
157
+ return self.bool_value
158
+ elif self.list_value is not None:
159
+ return self.list_value
160
+ elif self.dict_value is not None:
161
+ return self.dict_value
162
+ return None
163
+
164
+
165
+ @register_node_type("config")
166
+ class ConfigNode(TypedGraphNode):
167
+ """A configuration value stored as a graph memory with versioning."""
168
+
169
+ key: str = Field(..., description="Configuration key")
170
+ value: ConfigValue = Field(..., description="Typed configuration value")
171
+ version: int = Field(default=1, description="Version number")
172
+ updated_by: str = Field(..., description="Who updated this config")
173
+ updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
174
+ previous_version: Optional[str] = Field(None, description="Node ID of previous version")
175
+
176
+ # Graph node type - use the enum value
177
+ type: NodeType = Field(default=NodeType.CONFIG)
178
+
179
+ def to_graph_node(self) -> GraphNode:
180
+ """Convert to GraphNode for storage."""
181
+ # Include both GraphNodeAttributes required fields AND ConfigNode extra fields
182
+ extra_fields = {
183
+ # Required GraphNodeAttributes fields
184
+ "created_at": self.updated_at.isoformat(), # Use updated_at as created_at
185
+ "updated_at": self.updated_at.isoformat(),
186
+ "created_by": self.updated_by,
187
+ "tags": [f"config:{self.key.split('.')[0]}"],
188
+ # ConfigNode specific fields
189
+ "key": self.key,
190
+ "value": self.value.model_dump(),
191
+ # Don't duplicate version in attributes - it's already in GraphNode.version
192
+ "previous_version": self.previous_version,
193
+ "node_class": "ConfigNode",
194
+ }
195
+
196
+ return GraphNode(
197
+ id=f"config:{self.key}",
198
+ type=self.type,
199
+ scope=GraphScope.LOCAL, # Config default to LOCAL scope
200
+ attributes=extra_fields,
201
+ version=self.version,
202
+ updated_by=self.updated_by,
203
+ updated_at=self.updated_at,
204
+ )
205
+
206
+ @classmethod
207
+ def from_graph_node(cls, node: GraphNode) -> "ConfigNode":
208
+ """Reconstruct from GraphNode."""
209
+ # Handle both dict and GraphNodeAttributes
210
+ if isinstance(node.attributes, dict):
211
+ attrs = node.attributes
212
+ elif hasattr(node.attributes, "model_dump"):
213
+ attrs = node.attributes.model_dump()
214
+ else:
215
+ raise ValueError(f"Invalid attributes type: {type(node.attributes)}")
216
+
217
+ # Parse dates with multiple fallbacks
218
+ updated_at = cls._deserialize_datetime(attrs.get("updated_at"))
219
+ if not updated_at:
220
+ # Try created_at as fallback
221
+ updated_at = cls._deserialize_datetime(attrs.get("created_at"))
222
+
223
+ # Get updated_by with fallback
224
+ updated_by = attrs.get("updated_by") or attrs.get("created_by", "system")
225
+
226
+ # Get value dict safely
227
+ value_data = attrs.get("value", {})
228
+ if not isinstance(value_data, dict):
229
+ value_data = {}
230
+
231
+ return cls(
232
+ id=node.id,
233
+ type=node.type,
234
+ scope=node.scope,
235
+ attributes=node.attributes, # Must pass this for GraphNode base class
236
+ version=node.version, # Use GraphNode's version, not from attributes
237
+ updated_by=updated_by,
238
+ updated_at=updated_at or datetime.now(timezone.utc), # Final fallback
239
+ # Extra fields from attributes
240
+ key=attrs["key"],
241
+ value=ConfigValue(**value_data),
242
+ previous_version=attrs.get("previous_version"),
243
+ )
244
+
245
+
246
+ @register_node_type("IDENTITY_SNAPSHOT")
247
+ class IdentitySnapshot(TypedGraphNode):
248
+ """Snapshot of identity state for variance monitoring."""
249
+
250
+ snapshot_id: str = Field(..., description="Unique snapshot ID")
251
+ timestamp: datetime = Field(..., description="When snapshot was taken")
252
+ agent_id: str = Field(..., description="Agent ID")
253
+ identity_hash: str = Field(..., description="Identity hash at time of snapshot")
254
+ core_purpose: str = Field(..., description="Core purpose")
255
+ role: str = Field(..., description="Role description")
256
+ permitted_actions: List[str] = Field(default_factory=list, description="Permitted actions")
257
+ restricted_capabilities: List[str] = Field(default_factory=list, description="Restricted capabilities")
258
+ ethical_boundaries: List[str] = Field(default_factory=list, description="Ethical boundaries")
259
+ trust_parameters: Dict[str, str] = Field(default_factory=dict, description="Trust parameters")
260
+ personality_traits: List[str] = Field(default_factory=list, description="Personality traits")
261
+ communication_style: str = Field(..., description="Communication style")
262
+ learning_enabled: bool = Field(..., description="Whether learning is enabled")
263
+ adaptation_rate: float = Field(..., description="Rate of adaptation")
264
+ is_baseline: bool = Field(default=False, description="Whether this is a baseline snapshot")
265
+
266
+ # Additional fields from other versions
267
+ behavioral_patterns: Dict[str, float] = Field(default_factory=dict, description="Behavioral pattern scores")
268
+ config_preferences: Dict[str, str] = Field(default_factory=dict, description="Configuration preferences")
269
+ # Type must match TypedGraphNode base class which expects AnyNodeAttributes | JSONDict
270
+ attributes: AnyNodeAttributes | JSONDict = Field(default_factory=lambda: {}, description="Additional attributes")
271
+ reason: str = Field(default="", description="Why snapshot was taken")
272
+ system_state: Optional[Dict[str, str]] = Field(None, description="System state at snapshot time")
273
+ active_tasks: List[str] = Field(default_factory=list, description="Active tasks at time")
274
+ expires_at: Optional[datetime] = Field(None, description="When snapshot expires")
275
+ tags: List[str] = Field(default_factory=list, description="Snapshot tags")
276
+ identity_root: Optional[IdentityData] = Field(None, description="Complete identity data at time")
277
+
278
+ # Required TypedGraphNode fields
279
+ created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
280
+ updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
281
+ created_by: str = Field(default="identity_variance_monitor")
282
+ updated_by: str = Field(default="identity_variance_monitor")
283
+
284
+ # Graph node type
285
+ type: NodeType = Field(default=NodeType.IDENTITY_SNAPSHOT)
286
+
287
+ def to_graph_node(self) -> GraphNode:
288
+ """Convert to GraphNode for storage."""
289
+ extra_fields = {
290
+ # Required GraphNodeAttributes fields
291
+ "created_at": self.created_at.isoformat(),
292
+ "updated_at": self.updated_at.isoformat(),
293
+ "created_by": self.created_by,
294
+ "tags": ["identity_snapshot", f"agent:{self.agent_id}"],
295
+ # IdentitySnapshot specific fields
296
+ "snapshot_id": self.snapshot_id,
297
+ "timestamp": self.timestamp.isoformat(),
298
+ "agent_id": self.agent_id,
299
+ "identity_hash": self.identity_hash,
300
+ "core_purpose": self.core_purpose,
301
+ "role": self.role,
302
+ "permitted_actions": self.permitted_actions,
303
+ "restricted_capabilities": self.restricted_capabilities,
304
+ "ethical_boundaries": self.ethical_boundaries,
305
+ "trust_parameters": self.trust_parameters,
306
+ "personality_traits": self.personality_traits,
307
+ "communication_style": self.communication_style,
308
+ "learning_enabled": self.learning_enabled,
309
+ "adaptation_rate": self.adaptation_rate,
310
+ "is_baseline": self.is_baseline,
311
+ # Additional fields
312
+ "behavioral_patterns": self.behavioral_patterns,
313
+ "config_preferences": self.config_preferences,
314
+ "attributes": self.attributes,
315
+ "reason": self.reason,
316
+ "system_state": self.system_state,
317
+ "active_tasks": self.active_tasks,
318
+ "expires_at": self.expires_at.isoformat() if self.expires_at else None,
319
+ "tags": self.tags or [],
320
+ "identity_root": self.identity_root,
321
+ "node_class": "IdentitySnapshot",
322
+ }
323
+
324
+ return GraphNode(
325
+ id=f"identity_snapshot:{self.snapshot_id}",
326
+ type=self.type,
327
+ scope=GraphScope.IDENTITY, # Identity snapshots are IDENTITY scope
328
+ attributes=extra_fields,
329
+ version=1,
330
+ updated_by=self.updated_by,
331
+ updated_at=self.updated_at,
332
+ )
333
+
334
+ @classmethod
335
+ def from_graph_node(cls, node: GraphNode) -> "IdentitySnapshot":
336
+ """Reconstruct from GraphNode."""
337
+ attrs = node.attributes if isinstance(node.attributes, dict) else node.attributes.model_dump()
338
+
339
+ return cls(
340
+ # Base fields from GraphNode
341
+ id=node.id,
342
+ type=node.type,
343
+ scope=node.scope,
344
+ attributes=attrs, # Use the dict version we already extracted
345
+ version=node.version,
346
+ updated_by=node.updated_by or "identity_variance_monitor",
347
+ updated_at=node.updated_at or datetime.now(timezone.utc),
348
+ # Extra fields from attributes
349
+ snapshot_id=attrs["snapshot_id"],
350
+ timestamp=cls._deserialize_datetime(attrs["timestamp"]) or datetime.now(timezone.utc),
351
+ agent_id=attrs["agent_id"],
352
+ identity_hash=attrs["identity_hash"],
353
+ core_purpose=attrs["core_purpose"],
354
+ role=attrs["role"],
355
+ permitted_actions=attrs.get("permitted_actions", []),
356
+ restricted_capabilities=attrs.get("restricted_capabilities", []),
357
+ ethical_boundaries=attrs.get("ethical_boundaries", []),
358
+ trust_parameters=attrs.get("trust_parameters", {}),
359
+ personality_traits=attrs.get("personality_traits", []),
360
+ communication_style=attrs["communication_style"],
361
+ learning_enabled=attrs["learning_enabled"],
362
+ adaptation_rate=attrs["adaptation_rate"],
363
+ is_baseline=attrs.get("is_baseline", False),
364
+ # Additional fields
365
+ behavioral_patterns=attrs.get("behavioral_patterns", {}),
366
+ config_preferences=attrs.get("config_preferences", {}),
367
+ reason=attrs.get("reason", ""),
368
+ system_state=attrs.get("system_state"),
369
+ active_tasks=attrs.get("active_tasks", []),
370
+ expires_at=cls._deserialize_datetime(attrs.get("expires_at")) if attrs.get("expires_at") else None,
371
+ tags=attrs.get("tags", []),
372
+ identity_root=attrs.get("identity_root"),
373
+ created_at=cls._deserialize_datetime(attrs.get("created_at")) or datetime.now(timezone.utc),
374
+ created_by=attrs.get("created_by", "identity_variance_monitor"),
375
+ )
376
+
377
+
378
+ @register_node_type("TSDB_SUMMARY")
379
+ class TSDBSummary(TypedGraphNode):
380
+ """Consolidated time-series telemetry summary stored as a graph memory."""
381
+
382
+ # Period information
383
+ period_start: datetime = Field(..., description="Start of the consolidation period")
384
+ period_end: datetime = Field(..., description="End of the consolidation period")
385
+ period_label: str = Field(..., description="Human-readable period label")
386
+
387
+ # Aggregated metrics by category
388
+ metrics: Dict[str, Dict[str, float]] = Field(default_factory=dict, description="Aggregated metrics by category")
389
+
390
+ # Resource totals
391
+ total_tokens: int = Field(0, description="Total tokens used in period")
392
+ total_cost_cents: float = Field(0.0, description="Total cost in cents")
393
+ total_carbon_grams: float = Field(0.0, description="Total carbon emissions in grams")
394
+ total_energy_kwh: float = Field(0.0, description="Total energy used in kWh")
395
+
396
+ # Action summary
397
+ action_counts: Dict[str, int] = Field(default_factory=dict, description="Count of each action type")
398
+ error_count: int = Field(0, description="Total errors in period")
399
+ success_rate: float = Field(1.0, description="Success rate (0-1)")
400
+
401
+ # Metadata
402
+ source_node_count: int = Field(..., description="Number of source nodes consolidated")
403
+ consolidation_timestamp: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
404
+ raw_data_expired: bool = Field(False, description="Whether raw data has been deleted")
405
+
406
+ # Required TypedGraphNode fields
407
+ created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
408
+ updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
409
+ created_by: str = Field(default="TSDBConsolidationService")
410
+ updated_by: str = Field(default="TSDBConsolidationService")
411
+
412
+ # Graph node type
413
+ type: NodeType = Field(default=NodeType.TSDB_SUMMARY)
414
+
415
+ def to_graph_node(self) -> GraphNode:
416
+ """Convert to GraphNode for storage."""
417
+ extra_fields = {
418
+ # Required GraphNodeAttributes fields
419
+ "created_at": self.created_at.isoformat(),
420
+ "updated_at": self.updated_at.isoformat(),
421
+ "created_by": self.created_by,
422
+ "tags": [f"period:{self.period_label}", "tsdb_summary"],
423
+ # TSDBSummary specific fields
424
+ "period_start": self.period_start.isoformat(),
425
+ "period_end": self.period_end.isoformat(),
426
+ "period_label": self.period_label,
427
+ "metrics": self.metrics,
428
+ "total_tokens": self.total_tokens,
429
+ "total_cost_cents": self.total_cost_cents,
430
+ "total_carbon_grams": self.total_carbon_grams,
431
+ "total_energy_kwh": self.total_energy_kwh,
432
+ "action_counts": self.action_counts,
433
+ "error_count": self.error_count,
434
+ "success_rate": self.success_rate,
435
+ "source_node_count": self.source_node_count,
436
+ "consolidation_timestamp": self.consolidation_timestamp.isoformat(),
437
+ "raw_data_expired": self.raw_data_expired,
438
+ "node_class": "TSDBSummary",
439
+ }
440
+
441
+ return GraphNode(
442
+ id=self.id,
443
+ type=self.type,
444
+ scope=self.scope,
445
+ attributes=extra_fields,
446
+ version=self.version,
447
+ updated_by=self.updated_by or "TSDBConsolidationService",
448
+ updated_at=self.updated_at or self.consolidation_timestamp,
449
+ )
450
+
451
+ @classmethod
452
+ def from_graph_node(cls, node: GraphNode) -> "TSDBSummary":
453
+ """Reconstruct from GraphNode."""
454
+ attrs = node.attributes if isinstance(node.attributes, dict) else {}
455
+
456
+ return cls(
457
+ # Base fields from GraphNode
458
+ id=node.id,
459
+ type=node.type,
460
+ scope=node.scope,
461
+ attributes=node.attributes, # Must pass this for GraphNode base class
462
+ version=node.version,
463
+ updated_by=node.updated_by or "tsdb_consolidation",
464
+ updated_at=node.updated_at or datetime.now(timezone.utc),
465
+ # Extra fields from attributes
466
+ period_start=cls._deserialize_datetime(attrs["period_start"]) or datetime.now(timezone.utc),
467
+ period_end=cls._deserialize_datetime(attrs["period_end"]) or datetime.now(timezone.utc),
468
+ period_label=attrs["period_label"],
469
+ metrics=attrs.get("metrics", {}),
470
+ total_tokens=attrs.get("total_tokens", 0),
471
+ total_cost_cents=attrs.get("total_cost_cents", 0.0),
472
+ total_carbon_grams=attrs.get("total_carbon_grams", 0.0),
473
+ total_energy_kwh=attrs.get("total_energy_kwh", 0.0),
474
+ action_counts=attrs.get("action_counts", {}),
475
+ error_count=attrs.get("error_count", 0),
476
+ success_rate=attrs.get("success_rate", 1.0),
477
+ source_node_count=attrs["source_node_count"],
478
+ consolidation_timestamp=cls._deserialize_datetime(attrs.get("consolidation_timestamp"))
479
+ or datetime.now(timezone.utc),
480
+ raw_data_expired=attrs.get("raw_data_expired", False),
481
+ )
482
+
483
+
484
+ @register_node_type("IDENTITY")
485
+ class IdentityNode(TypedGraphNode):
486
+ """Agent identity stored as a graph memory - the core of the system."""
487
+
488
+ # Identity fields from AgentIdentityRoot
489
+ agent_id: str = Field(..., description="Unique agent identifier")
490
+ identity_hash: str = Field(..., description="Hash of identity for integrity")
491
+
492
+ # Core profile fields from CoreProfile
493
+ description: str = Field(..., description="Agent's self-description")
494
+ role_description: str = Field(..., description="Agent's role and purpose")
495
+ domain_specific_knowledge: Dict[str, str] = Field(default_factory=dict, description="Domain expertise mappings")
496
+ areas_of_expertise: List[str] = Field(default_factory=list, description="Areas where agent has expertise")
497
+ startup_instructions: Optional[str] = Field(None, description="Instructions for startup")
498
+
499
+ # Capabilities and permissions from AgentIdentityRoot
500
+ permitted_actions: List[str] = Field(default_factory=list, description="Actions this agent can perform")
501
+ restricted_capabilities: List[str] = Field(default_factory=list, description="Explicitly restricted capabilities")
502
+
503
+ # Trust and authorization from AgentIdentityRoot
504
+ trust_level: float = Field(0.5, ge=0.0, le=1.0, description="Agent trust level")
505
+ authorization_scope: str = Field("standard", description="Authorization scope")
506
+ parent_agent_id: Optional[str] = Field(None, description="Parent agent if spawned")
507
+
508
+ # Identity metadata
509
+ identity_created_at: datetime = Field(..., description="When identity was created")
510
+ identity_modified_at: datetime = Field(..., description="When identity was last modified")
511
+ modification_count: int = Field(default=0, description="Number of modifications")
512
+ creator_agent_id: str = Field(..., description="Who created this identity")
513
+ lineage_trace: List[str] = Field(default_factory=list, description="Lineage of creators")
514
+ approval_required: bool = Field(default=True, description="Whether changes need approval")
515
+ approved_by: Optional[str] = Field(None, description="Who approved this identity")
516
+ approval_timestamp: Optional[datetime] = Field(None, description="When approved")
517
+
518
+ # Required TypedGraphNode fields
519
+ created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
520
+ updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
521
+ created_by: str = Field(default="system")
522
+ updated_by: str = Field(default="system")
523
+
524
+ # Graph node type
525
+ type: NodeType = Field(default=NodeType.AGENT)
526
+ scope: GraphScope = Field(default=GraphScope.IDENTITY)
527
+
528
+ # Base GraphNode fields (required by TypedGraphNode)
529
+ id: str = Field(default="agent/identity", description="Node ID")
530
+ # Type must match TypedGraphNode base class which expects AnyNodeAttributes | JSONDict
531
+ attributes: AnyNodeAttributes | JSONDict = Field(default_factory=lambda: {}, description="Raw attributes")
532
+ version: int = Field(default=1, description="Version number")
533
+
534
+ def to_graph_node(self) -> GraphNode:
535
+ """Convert to GraphNode for storage."""
536
+ # Pack all identity data into attributes
537
+ extra_fields = {
538
+ # Required GraphNodeAttributes fields
539
+ "created_at": self.created_at.isoformat(),
540
+ "updated_at": self.updated_at.isoformat(),
541
+ "created_by": self.created_by,
542
+ "tags": ["identity:root", f"agent:{self.agent_id}"],
543
+ # Identity fields
544
+ "agent_id": self.agent_id,
545
+ "identity_hash": self.identity_hash,
546
+ "trust_level": self.trust_level,
547
+ "authorization_scope": self.authorization_scope,
548
+ "parent_agent_id": self.parent_agent_id,
549
+ # Core profile fields
550
+ "description": self.description,
551
+ "role_description": self.role_description,
552
+ "domain_specific_knowledge": self.domain_specific_knowledge,
553
+ "areas_of_expertise": self.areas_of_expertise,
554
+ "startup_instructions": self.startup_instructions,
555
+ # Capabilities and permissions
556
+ "permitted_actions": self.permitted_actions,
557
+ "restricted_capabilities": self.restricted_capabilities,
558
+ # Identity metadata
559
+ "identity_created_at": self.identity_created_at.isoformat(),
560
+ "identity_modified_at": self.identity_modified_at.isoformat(),
561
+ "modification_count": self.modification_count,
562
+ "creator_agent_id": self.creator_agent_id,
563
+ "lineage_trace": self.lineage_trace,
564
+ "approval_required": self.approval_required,
565
+ "approved_by": self.approved_by,
566
+ "approval_timestamp": self.approval_timestamp.isoformat() if self.approval_timestamp else None,
567
+ "node_class": "IdentityNode",
568
+ }
569
+
570
+ return GraphNode(
571
+ id="agent/identity", # Always the same ID - there's only one identity
572
+ type=self.type,
573
+ scope=self.scope,
574
+ attributes=extra_fields,
575
+ version=self.modification_count + 1, # Version tracks modifications
576
+ updated_by=self.updated_by,
577
+ updated_at=self.updated_at,
578
+ )
579
+
580
+ @classmethod
581
+ def from_graph_node(cls, node: GraphNode) -> "IdentityNode":
582
+ """Reconstruct from GraphNode."""
583
+ # Handle both dict and GraphNodeAttributes
584
+ if isinstance(node.attributes, dict):
585
+ attrs = node.attributes
586
+ elif hasattr(node.attributes, "model_dump"):
587
+ attrs = node.attributes.model_dump()
588
+ else:
589
+ raise ValueError(f"Invalid attributes type: {type(node.attributes)}")
590
+
591
+ return cls(
592
+ # Base fields from GraphNode
593
+ id=node.id,
594
+ type=node.type,
595
+ scope=node.scope,
596
+ attributes=node.attributes,
597
+ version=node.version,
598
+ updated_by=node.updated_by or attrs.get("updated_by", "system"),
599
+ updated_at=cls._deserialize_datetime(node.updated_at or attrs.get("updated_at"))
600
+ or datetime.now(timezone.utc),
601
+ # Required fields
602
+ created_at=cls._deserialize_datetime(attrs.get("created_at")) or datetime.now(timezone.utc),
603
+ created_by=attrs.get("created_by", "system"),
604
+ # Identity fields
605
+ agent_id=attrs["agent_id"],
606
+ identity_hash=attrs["identity_hash"],
607
+ trust_level=attrs.get("trust_level", 0.5),
608
+ authorization_scope=attrs.get("authorization_scope", "standard"),
609
+ parent_agent_id=attrs.get("parent_agent_id"),
610
+ # Core profile fields
611
+ description=attrs["description"],
612
+ role_description=attrs["role_description"],
613
+ domain_specific_knowledge=attrs.get("domain_specific_knowledge", {}),
614
+ areas_of_expertise=attrs.get("areas_of_expertise", []),
615
+ startup_instructions=attrs.get("startup_instructions"),
616
+ # Capabilities and permissions
617
+ permitted_actions=attrs.get("permitted_actions", []),
618
+ restricted_capabilities=attrs.get("restricted_capabilities", []),
619
+ # Identity metadata
620
+ identity_created_at=cls._deserialize_datetime(attrs["identity_created_at"]) or datetime.now(timezone.utc),
621
+ identity_modified_at=cls._deserialize_datetime(attrs["identity_modified_at"]) or datetime.now(timezone.utc),
622
+ modification_count=attrs.get("modification_count", 0),
623
+ creator_agent_id=attrs["creator_agent_id"],
624
+ lineage_trace=attrs.get("lineage_trace", []),
625
+ approval_required=attrs.get("approval_required", True),
626
+ approved_by=attrs.get("approved_by"),
627
+ approval_timestamp=(
628
+ cls._deserialize_datetime(attrs.get("approval_timestamp")) if attrs.get("approval_timestamp") else None
629
+ ),
630
+ )
631
+
632
+ @classmethod
633
+ def from_agent_identity_root(cls, identity: "AgentIdentityRoot", time_service: Any) -> "IdentityNode":
634
+ """Create from AgentIdentityRoot object."""
635
+
636
+ now = time_service.now()
637
+ return cls(
638
+ agent_id=identity.agent_id,
639
+ identity_hash=identity.identity_hash,
640
+ trust_level=identity.trust_level,
641
+ authorization_scope=identity.authorization_scope,
642
+ parent_agent_id=identity.parent_agent_id,
643
+ # Core profile
644
+ description=identity.core_profile.description,
645
+ role_description=identity.core_profile.role_description,
646
+ domain_specific_knowledge=identity.core_profile.domain_specific_knowledge,
647
+ areas_of_expertise=identity.core_profile.areas_of_expertise,
648
+ startup_instructions=identity.core_profile.startup_instructions,
649
+ # Capabilities and permissions
650
+ permitted_actions=identity.permitted_actions,
651
+ restricted_capabilities=identity.restricted_capabilities,
652
+ # Metadata
653
+ identity_created_at=identity.identity_metadata.created_at if identity.identity_metadata else now,
654
+ identity_modified_at=identity.identity_metadata.last_modified if identity.identity_metadata else now,
655
+ modification_count=identity.identity_metadata.modification_count if identity.identity_metadata else 0,
656
+ creator_agent_id=identity.identity_metadata.creator_agent_id if identity.identity_metadata else "system",
657
+ lineage_trace=identity.identity_metadata.lineage_trace if identity.identity_metadata else ["system"],
658
+ approval_required=identity.identity_metadata.approval_required if identity.identity_metadata else True,
659
+ approved_by=identity.identity_metadata.approved_by if identity.identity_metadata else None,
660
+ approval_timestamp=identity.identity_metadata.approval_timestamp if identity.identity_metadata else None,
661
+ created_at=now,
662
+ updated_at=now,
663
+ created_by="system",
664
+ updated_by="system",
665
+ )
666
+
667
+ def to_agent_identity_root(self) -> "AgentIdentityRoot":
668
+ """Convert back to AgentIdentityRoot."""
669
+ from ciris_engine.schemas.runtime.core import AgentIdentityRoot, CoreProfile, IdentityMetadata
670
+
671
+ return AgentIdentityRoot(
672
+ agent_id=self.agent_id,
673
+ identity_hash=self.identity_hash,
674
+ core_profile=CoreProfile(
675
+ description=self.description,
676
+ role_description=self.role_description,
677
+ domain_specific_knowledge=self.domain_specific_knowledge,
678
+ areas_of_expertise=self.areas_of_expertise,
679
+ startup_instructions=self.startup_instructions,
680
+ dsdma_prompt_template=None,
681
+ csdma_overrides={},
682
+ action_selection_pdma_overrides={},
683
+ last_shutdown_memory=None,
684
+ ),
685
+ identity_metadata=IdentityMetadata(
686
+ created_at=self.identity_created_at,
687
+ last_modified=self.identity_modified_at,
688
+ modification_count=self.modification_count,
689
+ creator_agent_id=self.creator_agent_id,
690
+ lineage_trace=self.lineage_trace,
691
+ approval_required=self.approval_required,
692
+ approved_by=self.approved_by,
693
+ approval_timestamp=self.approval_timestamp,
694
+ version=CIRIS_VERSION,
695
+ previous_versions=[],
696
+ ),
697
+ permitted_actions=self.permitted_actions,
698
+ restricted_capabilities=self.restricted_capabilities,
699
+ capability_definitions={},
700
+ trust_level=self.trust_level,
701
+ authorization_scope=self.authorization_scope,
702
+ parent_agent_id=self.parent_agent_id,
703
+ child_agent_ids=[],
704
+ )