@agentikos/omega-os 0.2.0 → 0.19.6

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 (376) hide show
  1. package/README.md +33 -3
  2. package/bootstrap/lib/__pycache__/claude-code-settings.cpython-313.pyc +0 -0
  3. package/bootstrap/lib/__pycache__/llm-clis.cpython-313.pyc +0 -0
  4. package/bootstrap/lib/__pycache__/manifest-helpers.cpython-313.pyc +0 -0
  5. package/bootstrap/lib/claude-code-settings.py +176 -0
  6. package/bootstrap/lib/common.sh +457 -1
  7. package/bootstrap/lib/llm-clis.py +341 -0
  8. package/bootstrap/lib/manifest-helpers.py +384 -0
  9. package/bootstrap/lib/steps.sh +790 -21
  10. package/bootstrap/manifest.example.yaml +87 -1
  11. package/bootstrap/templates/aisb/CLAUDE.md +305 -0
  12. package/bootstrap/templates/aisb/architect.md +204 -0
  13. package/bootstrap/templates/aisb/checkers/CLAUDE.md +9 -0
  14. package/bootstrap/templates/aisb/checkers/checker-architect.md +151 -0
  15. package/bootstrap/templates/aisb/checkers/checker-common.md +171 -0
  16. package/bootstrap/templates/aisb/checkers/checker-construct.md +129 -0
  17. package/bootstrap/templates/aisb/checkers/checker-keymaker.md +204 -0
  18. package/bootstrap/templates/aisb/checkers/checker-link.md +205 -0
  19. package/bootstrap/templates/aisb/checkers/checker-merovingian.md +219 -0
  20. package/bootstrap/templates/aisb/checkers/checker-morpheus.md +211 -0
  21. package/bootstrap/templates/aisb/checkers/checker-neo.md +177 -0
  22. package/bootstrap/templates/aisb/checkers/checker-niobe.md +156 -0
  23. package/bootstrap/templates/aisb/checkers/checker-oracle.md +164 -0
  24. package/bootstrap/templates/aisb/checkers/checker-seraph.md +187 -0
  25. package/bootstrap/templates/aisb/checkers/checker-smith.md +195 -0
  26. package/bootstrap/templates/aisb/checkers/checker-zion.md +113 -0
  27. package/bootstrap/templates/aisb/construct.md +135 -0
  28. package/bootstrap/templates/aisb/keymaker.md +227 -0
  29. package/bootstrap/templates/aisb/link.md +170 -0
  30. package/bootstrap/templates/aisb/lmc-protocol.md +57 -0
  31. package/bootstrap/templates/aisb/merovingian.md +159 -0
  32. package/bootstrap/templates/aisb/morpheus.md +243 -0
  33. package/bootstrap/templates/aisb/neo.md +147 -0
  34. package/bootstrap/templates/aisb/niobe.md +197 -0
  35. package/bootstrap/templates/aisb/oracle.md +244 -0
  36. package/bootstrap/templates/aisb/protocols/handoff-templates.md +204 -0
  37. package/bootstrap/templates/aisb/protocols/shared-protocol.md +248 -0
  38. package/bootstrap/templates/aisb/pythia.md +153 -0
  39. package/bootstrap/templates/aisb/seraph.md +315 -0
  40. package/bootstrap/templates/aisb/smith.md +202 -0
  41. package/bootstrap/templates/aisb/zion.md +172 -0
  42. package/bootstrap/templates/autonomous/audit-patrol.yaml +41 -0
  43. package/bootstrap/templates/autonomous/smith-reflect.yaml +43 -0
  44. package/bootstrap/templates/autonomous/ssh-key-rotate.yaml +46 -0
  45. package/bootstrap/templates/autonomous/support-agent.yaml +38 -0
  46. package/docs/AUDITS.md +85 -0
  47. package/docs/GAP-ANALYSIS.md +214 -0
  48. package/docs/INSTALL.md +47 -9
  49. package/docs/MCP-AND-PLUGINS.md +31 -4
  50. package/docs/SIMULATION.md +171 -0
  51. package/docs/simulate.sh +211 -0
  52. package/install.sh +164 -17
  53. package/omega/Agentik_Engine/README.md +4 -2
  54. package/omega/Agentik_Engine/omega_engine/__init__.py +147 -1
  55. package/omega/Agentik_Engine/omega_engine/__pycache__/__init__.cpython-313.pyc +0 -0
  56. package/omega/Agentik_Engine/omega_engine/__pycache__/account.cpython-313.pyc +0 -0
  57. package/omega/Agentik_Engine/omega_engine/__pycache__/agent_messages.cpython-313.pyc +0 -0
  58. package/omega/Agentik_Engine/omega_engine/__pycache__/aisb_chat.cpython-313.pyc +0 -0
  59. package/omega/Agentik_Engine/omega_engine/__pycache__/audit.cpython-313.pyc +0 -0
  60. package/omega/Agentik_Engine/omega_engine/__pycache__/audit_arsenal.cpython-313.pyc +0 -0
  61. package/omega/Agentik_Engine/omega_engine/__pycache__/audit_diff.cpython-313.pyc +0 -0
  62. package/omega/Agentik_Engine/omega_engine/__pycache__/audit_gate.cpython-313.pyc +0 -0
  63. package/omega/Agentik_Engine/omega_engine/__pycache__/auto_update.cpython-313.pyc +0 -0
  64. package/omega/Agentik_Engine/omega_engine/__pycache__/autonomous.cpython-313.pyc +0 -0
  65. package/omega/Agentik_Engine/omega_engine/__pycache__/backup.cpython-313.pyc +0 -0
  66. package/omega/Agentik_Engine/omega_engine/__pycache__/barrier.cpython-313.pyc +0 -0
  67. package/omega/Agentik_Engine/omega_engine/__pycache__/bus.cpython-313.pyc +0 -0
  68. package/omega/Agentik_Engine/omega_engine/__pycache__/cadence.cpython-313.pyc +0 -0
  69. package/omega/Agentik_Engine/omega_engine/__pycache__/classifier.cpython-313.pyc +0 -0
  70. package/omega/Agentik_Engine/omega_engine/__pycache__/cleanup.cpython-313.pyc +0 -0
  71. package/omega/Agentik_Engine/omega_engine/__pycache__/cli.cpython-313.pyc +0 -0
  72. package/omega/Agentik_Engine/omega_engine/__pycache__/completions.cpython-313.pyc +0 -0
  73. package/omega/Agentik_Engine/omega_engine/__pycache__/costs.cpython-313.pyc +0 -0
  74. package/omega/Agentik_Engine/omega_engine/__pycache__/done_signal.cpython-313.pyc +0 -0
  75. package/omega/Agentik_Engine/omega_engine/__pycache__/envelope.cpython-313.pyc +0 -0
  76. package/omega/Agentik_Engine/omega_engine/__pycache__/events.cpython-313.pyc +0 -0
  77. package/omega/Agentik_Engine/omega_engine/__pycache__/executor.cpython-313.pyc +0 -0
  78. package/omega/Agentik_Engine/omega_engine/__pycache__/handoff.cpython-313.pyc +0 -0
  79. package/omega/Agentik_Engine/omega_engine/__pycache__/hermes.cpython-313.pyc +0 -0
  80. package/omega/Agentik_Engine/omega_engine/__pycache__/hermes_bootstrap.cpython-313.pyc +0 -0
  81. package/omega/Agentik_Engine/omega_engine/__pycache__/hermes_desktop.cpython-313.pyc +0 -0
  82. package/omega/Agentik_Engine/omega_engine/__pycache__/learning.cpython-313.pyc +0 -0
  83. package/omega/Agentik_Engine/omega_engine/__pycache__/managed_agent.cpython-313.pyc +0 -0
  84. package/omega/Agentik_Engine/omega_engine/__pycache__/memory.cpython-313.pyc +0 -0
  85. package/omega/Agentik_Engine/omega_engine/__pycache__/menu.cpython-313.pyc +0 -0
  86. package/omega/Agentik_Engine/omega_engine/__pycache__/mission.cpython-313.pyc +0 -0
  87. package/omega/Agentik_Engine/omega_engine/__pycache__/plan.cpython-313.pyc +0 -0
  88. package/omega/Agentik_Engine/omega_engine/__pycache__/progress.cpython-313.pyc +0 -0
  89. package/omega/Agentik_Engine/omega_engine/__pycache__/project.cpython-313.pyc +0 -0
  90. package/omega/Agentik_Engine/omega_engine/__pycache__/prompts.cpython-313.pyc +0 -0
  91. package/omega/Agentik_Engine/omega_engine/__pycache__/provider.cpython-313.pyc +0 -0
  92. package/omega/Agentik_Engine/omega_engine/__pycache__/prune.cpython-313.pyc +0 -0
  93. package/omega/Agentik_Engine/omega_engine/__pycache__/pursue.cpython-313.pyc +0 -0
  94. package/omega/Agentik_Engine/omega_engine/__pycache__/reducer.cpython-313.pyc +0 -0
  95. package/omega/Agentik_Engine/omega_engine/__pycache__/report.cpython-313.pyc +0 -0
  96. package/omega/Agentik_Engine/omega_engine/__pycache__/router.cpython-313.pyc +0 -0
  97. package/omega/Agentik_Engine/omega_engine/__pycache__/skill_routing.cpython-313.pyc +0 -0
  98. package/omega/Agentik_Engine/omega_engine/__pycache__/smoke.cpython-313.pyc +0 -0
  99. package/omega/Agentik_Engine/omega_engine/__pycache__/store.cpython-313.pyc +0 -0
  100. package/omega/Agentik_Engine/omega_engine/__pycache__/supervisor.cpython-313.pyc +0 -0
  101. package/omega/Agentik_Engine/omega_engine/__pycache__/sync.cpython-313.pyc +0 -0
  102. package/omega/Agentik_Engine/omega_engine/__pycache__/task.cpython-313.pyc +0 -0
  103. package/omega/Agentik_Engine/omega_engine/__pycache__/telegram.cpython-313.pyc +0 -0
  104. package/omega/Agentik_Engine/omega_engine/__pycache__/telegram_history.cpython-313.pyc +0 -0
  105. package/omega/Agentik_Engine/omega_engine/__pycache__/tmux.cpython-313.pyc +0 -0
  106. package/omega/Agentik_Engine/omega_engine/__pycache__/tools.cpython-313.pyc +0 -0
  107. package/omega/Agentik_Engine/omega_engine/__pycache__/understand_anything.cpython-313.pyc +0 -0
  108. package/omega/Agentik_Engine/omega_engine/__pycache__/updater.cpython-313.pyc +0 -0
  109. package/omega/Agentik_Engine/omega_engine/__pycache__/validate.cpython-313.pyc +0 -0
  110. package/omega/Agentik_Engine/omega_engine/__pycache__/vault.cpython-313.pyc +0 -0
  111. package/omega/Agentik_Engine/omega_engine/__pycache__/webhooks.cpython-313.pyc +0 -0
  112. package/omega/Agentik_Engine/omega_engine/__pycache__/worker.cpython-313.pyc +0 -0
  113. package/omega/Agentik_Engine/omega_engine/account.py +28 -31
  114. package/omega/Agentik_Engine/omega_engine/agent_messages.py +167 -0
  115. package/omega/Agentik_Engine/omega_engine/aisb_chat.py +128 -0
  116. package/omega/Agentik_Engine/omega_engine/audit_diff.py +99 -0
  117. package/omega/Agentik_Engine/omega_engine/audit_gate.py +149 -0
  118. package/omega/Agentik_Engine/omega_engine/audits/__init__.py +60 -0
  119. package/omega/Agentik_Engine/omega_engine/audits/__pycache__/__init__.cpython-313.pyc +0 -0
  120. package/omega/Agentik_Engine/omega_engine/audits/__pycache__/batcher.cpython-313.pyc +0 -0
  121. package/omega/Agentik_Engine/omega_engine/audits/__pycache__/dispatcher.cpython-313.pyc +0 -0
  122. package/omega/Agentik_Engine/omega_engine/audits/__pycache__/generator.cpython-313.pyc +0 -0
  123. package/omega/Agentik_Engine/omega_engine/audits/__pycache__/history.cpython-313.pyc +0 -0
  124. package/omega/Agentik_Engine/omega_engine/audits/__pycache__/pipeline.cpython-313.pyc +0 -0
  125. package/omega/Agentik_Engine/omega_engine/audits/batcher.py +218 -0
  126. package/omega/Agentik_Engine/omega_engine/audits/dispatcher.py +92 -0
  127. package/omega/Agentik_Engine/omega_engine/audits/generator.py +234 -0
  128. package/omega/Agentik_Engine/omega_engine/audits/history.py +168 -0
  129. package/omega/Agentik_Engine/omega_engine/audits/pipeline.py +198 -0
  130. package/omega/Agentik_Engine/omega_engine/auto_update.py +339 -0
  131. package/omega/Agentik_Engine/omega_engine/backup.py +215 -0
  132. package/omega/Agentik_Engine/omega_engine/cadence.py +158 -0
  133. package/omega/Agentik_Engine/omega_engine/classifier.py +215 -0
  134. package/omega/Agentik_Engine/omega_engine/cleanup.py +673 -0
  135. package/omega/Agentik_Engine/omega_engine/cli.py +4156 -86
  136. package/omega/Agentik_Engine/omega_engine/completions.py +260 -0
  137. package/omega/Agentik_Engine/omega_engine/costs.py +100 -0
  138. package/omega/Agentik_Engine/omega_engine/daemons/__pycache__/__init__.cpython-313.pyc +0 -0
  139. package/omega/Agentik_Engine/omega_engine/daemons/__pycache__/autonomous.cpython-313.pyc +0 -0
  140. package/omega/Agentik_Engine/omega_engine/daemons/__pycache__/engine.cpython-313.pyc +0 -0
  141. package/omega/Agentik_Engine/omega_engine/daemons/__pycache__/telegram.cpython-313.pyc +0 -0
  142. package/omega/Agentik_Engine/omega_engine/daemons/engine.py +53 -4
  143. package/omega/Agentik_Engine/omega_engine/daemons/telegram.py +101 -17
  144. package/omega/Agentik_Engine/omega_engine/done_signal.py +154 -0
  145. package/omega/Agentik_Engine/omega_engine/educators/__pycache__/__init__.cpython-313.pyc +0 -0
  146. package/omega/Agentik_Engine/omega_engine/educators/__pycache__/artifact.cpython-313.pyc +0 -0
  147. package/omega/Agentik_Engine/omega_engine/educators/__pycache__/automation.cpython-313.pyc +0 -0
  148. package/omega/Agentik_Engine/omega_engine/educators/__pycache__/base.cpython-313.pyc +0 -0
  149. package/omega/Agentik_Engine/omega_engine/educators/__pycache__/claudecode.cpython-313.pyc +0 -0
  150. package/omega/Agentik_Engine/omega_engine/educators/__pycache__/connection.cpython-313.pyc +0 -0
  151. package/omega/Agentik_Engine/omega_engine/educators/__pycache__/coworker.cpython-313.pyc +0 -0
  152. package/omega/Agentik_Engine/omega_engine/educators/__pycache__/loop.cpython-313.pyc +0 -0
  153. package/omega/Agentik_Engine/omega_engine/educators/__pycache__/prompt.cpython-313.pyc +0 -0
  154. package/omega/Agentik_Engine/omega_engine/educators/__pycache__/skill.cpython-313.pyc +0 -0
  155. package/omega/Agentik_Engine/omega_engine/envelope.py +219 -0
  156. package/omega/Agentik_Engine/omega_engine/executor.py +149 -10
  157. package/omega/Agentik_Engine/omega_engine/genesis/__init__.py +134 -0
  158. package/omega/Agentik_Engine/omega_engine/genesis/__pycache__/__init__.cpython-313.pyc +0 -0
  159. package/omega/Agentik_Engine/omega_engine/genesis/__pycache__/orchestrator.cpython-313.pyc +0 -0
  160. package/omega/Agentik_Engine/omega_engine/genesis/__pycache__/phases.cpython-313.pyc +0 -0
  161. package/omega/Agentik_Engine/omega_engine/genesis/__pycache__/stack.cpython-313.pyc +0 -0
  162. package/omega/Agentik_Engine/omega_engine/genesis/__pycache__/state.cpython-313.pyc +0 -0
  163. package/omega/Agentik_Engine/omega_engine/genesis/orchestrator.py +262 -0
  164. package/omega/Agentik_Engine/omega_engine/genesis/phases.py +950 -0
  165. package/omega/Agentik_Engine/omega_engine/genesis/stack.py +324 -0
  166. package/omega/Agentik_Engine/omega_engine/genesis/state.py +353 -0
  167. package/omega/Agentik_Engine/omega_engine/handoff.py +459 -0
  168. package/omega/Agentik_Engine/omega_engine/hermes.py +426 -0
  169. package/omega/Agentik_Engine/omega_engine/hermes_bootstrap.py +382 -0
  170. package/omega/Agentik_Engine/omega_engine/hermes_desktop.py +469 -0
  171. package/omega/Agentik_Engine/omega_engine/integrations/__init__.py +30 -0
  172. package/omega/Agentik_Engine/omega_engine/integrations/__pycache__/__init__.cpython-313.pyc +0 -0
  173. package/omega/Agentik_Engine/omega_engine/integrations/__pycache__/graphify.cpython-313.pyc +0 -0
  174. package/omega/Agentik_Engine/omega_engine/integrations/graphify.py +234 -0
  175. package/omega/Agentik_Engine/omega_engine/learning.py +268 -0
  176. package/omega/Agentik_Engine/omega_engine/managed_agent.py +467 -0
  177. package/omega/Agentik_Engine/omega_engine/memory.py +271 -0
  178. package/omega/Agentik_Engine/omega_engine/menu.py +1065 -0
  179. package/omega/Agentik_Engine/omega_engine/migrations/__init__.py +144 -0
  180. package/omega/Agentik_Engine/omega_engine/migrations/__pycache__/__init__.cpython-313.pyc +0 -0
  181. package/omega/Agentik_Engine/omega_engine/migrations/__pycache__/v0_14_0.cpython-313.pyc +0 -0
  182. package/omega/Agentik_Engine/omega_engine/migrations/v0_14_0.py +29 -0
  183. package/omega/Agentik_Engine/omega_engine/mission.py +16 -13
  184. package/omega/Agentik_Engine/omega_engine/plan.py +846 -0
  185. package/omega/Agentik_Engine/omega_engine/prompts.py +158 -0
  186. package/omega/Agentik_Engine/omega_engine/provider.py +161 -12
  187. package/omega/Agentik_Engine/omega_engine/prune.py +151 -0
  188. package/omega/Agentik_Engine/omega_engine/pursue.py +205 -0
  189. package/omega/Agentik_Engine/omega_engine/rag/__pycache__/__init__.cpython-313.pyc +0 -0
  190. package/omega/Agentik_Engine/omega_engine/rag/__pycache__/agentic.cpython-313.pyc +0 -0
  191. package/omega/Agentik_Engine/omega_engine/rag/__pycache__/base.cpython-313.pyc +0 -0
  192. package/omega/Agentik_Engine/omega_engine/rag/__pycache__/corrective.cpython-313.pyc +0 -0
  193. package/omega/Agentik_Engine/omega_engine/rag/__pycache__/graph.cpython-313.pyc +0 -0
  194. package/omega/Agentik_Engine/omega_engine/rag/__pycache__/hybrid.cpython-313.pyc +0 -0
  195. package/omega/Agentik_Engine/omega_engine/rag/__pycache__/multimodal.cpython-313.pyc +0 -0
  196. package/omega/Agentik_Engine/omega_engine/rag/__pycache__/router.cpython-313.pyc +0 -0
  197. package/omega/Agentik_Engine/omega_engine/router.py +28 -0
  198. package/omega/Agentik_Engine/omega_engine/skill_discovery/__init__.py +48 -0
  199. package/omega/Agentik_Engine/omega_engine/skill_discovery/__pycache__/__init__.cpython-313.pyc +0 -0
  200. package/omega/Agentik_Engine/omega_engine/skill_discovery/__pycache__/auditor.cpython-313.pyc +0 -0
  201. package/omega/Agentik_Engine/omega_engine/skill_discovery/__pycache__/finder.cpython-313.pyc +0 -0
  202. package/omega/Agentik_Engine/omega_engine/skill_discovery/__pycache__/installer.cpython-313.pyc +0 -0
  203. package/omega/Agentik_Engine/omega_engine/skill_discovery/__pycache__/marketplaces.cpython-313.pyc +0 -0
  204. package/omega/Agentik_Engine/omega_engine/skill_discovery/auditor.py +232 -0
  205. package/omega/Agentik_Engine/omega_engine/skill_discovery/finder.py +94 -0
  206. package/omega/Agentik_Engine/omega_engine/skill_discovery/installer.py +129 -0
  207. package/omega/Agentik_Engine/omega_engine/skill_discovery/marketplaces.py +80 -0
  208. package/omega/Agentik_Engine/omega_engine/skill_routing.py +388 -0
  209. package/omega/Agentik_Engine/omega_engine/smoke.py +81 -0
  210. package/omega/Agentik_Engine/omega_engine/store.py +88 -41
  211. package/omega/Agentik_Engine/omega_engine/sync.py +142 -1
  212. package/omega/Agentik_Engine/omega_engine/telegram_history.py +260 -0
  213. package/omega/Agentik_Engine/omega_engine/tmux.py +526 -0
  214. package/omega/Agentik_Engine/omega_engine/understand_anything.py +275 -0
  215. package/omega/Agentik_Engine/omega_engine/updater.py +70 -0
  216. package/omega/Agentik_Engine/omega_engine/validate.py +186 -0
  217. package/omega/Agentik_Engine/omega_engine/vault.py +342 -0
  218. package/omega/Agentik_Engine/omega_engine/webhooks.py +262 -0
  219. package/omega/Agentik_Engine/omega_engine/worker.py +526 -0
  220. package/omega/Agentik_Engine/pyproject.toml +1 -1
  221. package/omega/Agentik_Engine/tests/__pycache__/test_account.cpython-313-pytest-8.4.2.pyc +0 -0
  222. package/omega/Agentik_Engine/tests/__pycache__/test_account.cpython-313.pyc +0 -0
  223. package/omega/Agentik_Engine/tests/__pycache__/test_adversarial.cpython-313-pytest-8.4.2.pyc +0 -0
  224. package/omega/Agentik_Engine/tests/__pycache__/test_adversarial.cpython-313.pyc +0 -0
  225. package/omega/Agentik_Engine/tests/__pycache__/test_agents_envelope.cpython-313-pytest-8.4.2.pyc +0 -0
  226. package/omega/Agentik_Engine/tests/__pycache__/test_agents_envelope.cpython-313.pyc +0 -0
  227. package/omega/Agentik_Engine/tests/__pycache__/test_audit_arsenal.cpython-313-pytest-8.4.2.pyc +0 -0
  228. package/omega/Agentik_Engine/tests/__pycache__/test_audit_arsenal.cpython-313.pyc +0 -0
  229. package/omega/Agentik_Engine/tests/__pycache__/test_audits_pipeline.cpython-313-pytest-8.4.2.pyc +0 -0
  230. package/omega/Agentik_Engine/tests/__pycache__/test_audits_pipeline.cpython-313.pyc +0 -0
  231. package/omega/Agentik_Engine/tests/__pycache__/test_auto_update_and_migrations.cpython-313-pytest-8.4.2.pyc +0 -0
  232. package/omega/Agentik_Engine/tests/__pycache__/test_auto_update_and_migrations.cpython-313.pyc +0 -0
  233. package/omega/Agentik_Engine/tests/__pycache__/test_autonomous.cpython-313-pytest-8.4.2.pyc +0 -0
  234. package/omega/Agentik_Engine/tests/__pycache__/test_autonomous.cpython-313.pyc +0 -0
  235. package/omega/Agentik_Engine/tests/__pycache__/test_educators.cpython-313-pytest-8.4.2.pyc +0 -0
  236. package/omega/Agentik_Engine/tests/__pycache__/test_educators.cpython-313.pyc +0 -0
  237. package/omega/Agentik_Engine/tests/__pycache__/test_executor.cpython-313-pytest-8.4.2.pyc +0 -0
  238. package/omega/Agentik_Engine/tests/__pycache__/test_executor.cpython-313.pyc +0 -0
  239. package/omega/Agentik_Engine/tests/__pycache__/test_genesis_and_plan.cpython-313-pytest-8.4.2.pyc +0 -0
  240. package/omega/Agentik_Engine/tests/__pycache__/test_genesis_and_plan.cpython-313.pyc +0 -0
  241. package/omega/Agentik_Engine/tests/__pycache__/test_graphify.cpython-313-pytest-8.4.2.pyc +0 -0
  242. package/omega/Agentik_Engine/tests/__pycache__/test_graphify.cpython-313.pyc +0 -0
  243. package/omega/Agentik_Engine/tests/__pycache__/test_handoff.cpython-313-pytest-8.4.2.pyc +0 -0
  244. package/omega/Agentik_Engine/tests/__pycache__/test_handoff.cpython-313.pyc +0 -0
  245. package/omega/Agentik_Engine/tests/__pycache__/test_hermes_and_ua.cpython-313-pytest-8.4.2.pyc +0 -0
  246. package/omega/Agentik_Engine/tests/__pycache__/test_hermes_and_ua.cpython-313.pyc +0 -0
  247. package/omega/Agentik_Engine/tests/__pycache__/test_hermes_bootstrap_and_desktop.cpython-313-pytest-8.4.2.pyc +0 -0
  248. package/omega/Agentik_Engine/tests/__pycache__/test_hermes_bootstrap_and_desktop.cpython-313.pyc +0 -0
  249. package/omega/Agentik_Engine/tests/__pycache__/test_install_steps.cpython-313-pytest-8.4.2.pyc +0 -0
  250. package/omega/Agentik_Engine/tests/__pycache__/test_install_steps.cpython-313.pyc +0 -0
  251. package/omega/Agentik_Engine/tests/__pycache__/test_install_ux.cpython-313-pytest-8.4.2.pyc +0 -0
  252. package/omega/Agentik_Engine/tests/__pycache__/test_install_ux.cpython-313.pyc +0 -0
  253. package/omega/Agentik_Engine/tests/__pycache__/test_installer_wiring.cpython-313-pytest-8.4.2.pyc +0 -0
  254. package/omega/Agentik_Engine/tests/__pycache__/test_installer_wiring.cpython-313.pyc +0 -0
  255. package/omega/Agentik_Engine/tests/__pycache__/test_intelligence.cpython-313-pytest-8.4.2.pyc +0 -0
  256. package/omega/Agentik_Engine/tests/__pycache__/test_intelligence.cpython-313.pyc +0 -0
  257. package/omega/Agentik_Engine/tests/__pycache__/test_llm_clis_and_uninstall.cpython-313-pytest-8.4.2.pyc +0 -0
  258. package/omega/Agentik_Engine/tests/__pycache__/test_llm_clis_and_uninstall.cpython-313.pyc +0 -0
  259. package/omega/Agentik_Engine/tests/__pycache__/test_managed_agent.cpython-313-pytest-8.4.2.pyc +0 -0
  260. package/omega/Agentik_Engine/tests/__pycache__/test_managed_agent.cpython-313.pyc +0 -0
  261. package/omega/Agentik_Engine/tests/__pycache__/test_max_provider_and_menu.cpython-313-pytest-8.4.2.pyc +0 -0
  262. package/omega/Agentik_Engine/tests/__pycache__/test_max_provider_and_menu.cpython-313.pyc +0 -0
  263. package/omega/Agentik_Engine/tests/__pycache__/test_menu_coverage.cpython-313-pytest-8.4.2.pyc +0 -0
  264. package/omega/Agentik_Engine/tests/__pycache__/test_menu_coverage.cpython-313.pyc +0 -0
  265. package/omega/Agentik_Engine/tests/__pycache__/test_mission.cpython-313-pytest-8.4.2.pyc +0 -0
  266. package/omega/Agentik_Engine/tests/__pycache__/test_mission.cpython-313.pyc +0 -0
  267. package/omega/Agentik_Engine/tests/__pycache__/test_progress.cpython-313-pytest-8.4.2.pyc +0 -0
  268. package/omega/Agentik_Engine/tests/__pycache__/test_progress.cpython-313.pyc +0 -0
  269. package/omega/Agentik_Engine/tests/__pycache__/test_project.cpython-313-pytest-8.4.2.pyc +0 -0
  270. package/omega/Agentik_Engine/tests/__pycache__/test_project.cpython-313.pyc +0 -0
  271. package/omega/Agentik_Engine/tests/__pycache__/test_pursue_cadence.cpython-313-pytest-8.4.2.pyc +0 -0
  272. package/omega/Agentik_Engine/tests/__pycache__/test_pursue_cadence.cpython-313.pyc +0 -0
  273. package/omega/Agentik_Engine/tests/__pycache__/test_rag.cpython-313-pytest-8.4.2.pyc +0 -0
  274. package/omega/Agentik_Engine/tests/__pycache__/test_rag.cpython-313.pyc +0 -0
  275. package/omega/Agentik_Engine/tests/__pycache__/test_reducer.cpython-313-pytest-8.4.2.pyc +0 -0
  276. package/omega/Agentik_Engine/tests/__pycache__/test_reducer.cpython-313.pyc +0 -0
  277. package/omega/Agentik_Engine/tests/__pycache__/test_report.cpython-313-pytest-8.4.2.pyc +0 -0
  278. package/omega/Agentik_Engine/tests/__pycache__/test_report.cpython-313.pyc +0 -0
  279. package/omega/Agentik_Engine/tests/__pycache__/test_role_aliases_and_ssot.cpython-313-pytest-8.4.2.pyc +0 -0
  280. package/omega/Agentik_Engine/tests/__pycache__/test_role_aliases_and_ssot.cpython-313.pyc +0 -0
  281. package/omega/Agentik_Engine/tests/__pycache__/test_skill_discovery_and_gate.cpython-313-pytest-8.4.2.pyc +0 -0
  282. package/omega/Agentik_Engine/tests/__pycache__/test_skill_discovery_and_gate.cpython-313.pyc +0 -0
  283. package/omega/Agentik_Engine/tests/__pycache__/test_skill_power.cpython-313-pytest-8.4.2.pyc +0 -0
  284. package/omega/Agentik_Engine/tests/__pycache__/test_skill_power.cpython-313.pyc +0 -0
  285. package/omega/Agentik_Engine/tests/__pycache__/test_skill_routing.cpython-313-pytest-8.4.2.pyc +0 -0
  286. package/omega/Agentik_Engine/tests/__pycache__/test_skill_routing.cpython-313.pyc +0 -0
  287. package/omega/Agentik_Engine/tests/__pycache__/test_snapshot_partial.cpython-313-pytest-8.4.2.pyc +0 -0
  288. package/omega/Agentik_Engine/tests/__pycache__/test_snapshot_partial.cpython-313.pyc +0 -0
  289. package/omega/Agentik_Engine/tests/__pycache__/test_telegram_history.cpython-313-pytest-8.4.2.pyc +0 -0
  290. package/omega/Agentik_Engine/tests/__pycache__/test_telegram_history.cpython-313.pyc +0 -0
  291. package/omega/Agentik_Engine/tests/__pycache__/test_tmux_and_aisb_chat.cpython-313-pytest-8.4.2.pyc +0 -0
  292. package/omega/Agentik_Engine/tests/__pycache__/test_tmux_and_aisb_chat.cpython-313.pyc +0 -0
  293. package/omega/Agentik_Engine/tests/__pycache__/test_tools_and_sync.cpython-313-pytest-8.4.2.pyc +0 -0
  294. package/omega/Agentik_Engine/tests/__pycache__/test_tools_and_sync.cpython-313.pyc +0 -0
  295. package/omega/Agentik_Engine/tests/__pycache__/test_v06_features.cpython-313-pytest-8.4.2.pyc +0 -0
  296. package/omega/Agentik_Engine/tests/__pycache__/test_v06_features.cpython-313.pyc +0 -0
  297. package/omega/Agentik_Engine/tests/__pycache__/test_vault.cpython-313-pytest-8.4.2.pyc +0 -0
  298. package/omega/Agentik_Engine/tests/__pycache__/test_vault.cpython-313.pyc +0 -0
  299. package/omega/Agentik_Engine/tests/__pycache__/test_webhooks_and_readiness.cpython-313-pytest-8.4.2.pyc +0 -0
  300. package/omega/Agentik_Engine/tests/__pycache__/test_webhooks_and_readiness.cpython-313.pyc +0 -0
  301. package/omega/Agentik_Engine/tests/__pycache__/test_worker_and_cleanup.cpython-313-pytest-8.4.2.pyc +0 -0
  302. package/omega/Agentik_Engine/tests/__pycache__/test_worker_and_cleanup.cpython-313.pyc +0 -0
  303. package/omega/Agentik_Engine/tests/test_account.py +8 -3
  304. package/omega/Agentik_Engine/tests/test_adversarial.py +351 -0
  305. package/omega/Agentik_Engine/tests/test_agents_envelope.py +274 -0
  306. package/omega/Agentik_Engine/tests/test_audits_pipeline.py +348 -0
  307. package/omega/Agentik_Engine/tests/test_auto_update_and_migrations.py +394 -0
  308. package/omega/Agentik_Engine/tests/test_genesis_and_plan.py +573 -0
  309. package/omega/Agentik_Engine/tests/test_graphify.py +190 -0
  310. package/omega/Agentik_Engine/tests/test_handoff.py +311 -0
  311. package/omega/Agentik_Engine/tests/test_hermes_and_ua.py +387 -0
  312. package/omega/Agentik_Engine/tests/test_hermes_bootstrap_and_desktop.py +358 -0
  313. package/omega/Agentik_Engine/tests/test_install_steps.py +359 -0
  314. package/omega/Agentik_Engine/tests/test_install_ux.py +151 -0
  315. package/omega/Agentik_Engine/tests/test_installer_wiring.py +496 -0
  316. package/omega/Agentik_Engine/tests/test_intelligence.py +285 -0
  317. package/omega/Agentik_Engine/tests/test_llm_clis_and_uninstall.py +228 -0
  318. package/omega/Agentik_Engine/tests/test_managed_agent.py +363 -0
  319. package/omega/Agentik_Engine/tests/test_max_provider_and_menu.py +231 -0
  320. package/omega/Agentik_Engine/tests/test_menu_coverage.py +72 -0
  321. package/omega/Agentik_Engine/tests/test_pursue_cadence.py +217 -0
  322. package/omega/Agentik_Engine/tests/test_role_aliases_and_ssot.py +207 -0
  323. package/omega/Agentik_Engine/tests/test_skill_discovery_and_gate.py +337 -0
  324. package/omega/Agentik_Engine/tests/test_skill_power.py +259 -0
  325. package/omega/Agentik_Engine/tests/test_skill_routing.py +189 -0
  326. package/omega/Agentik_Engine/tests/test_telegram_history.py +209 -0
  327. package/omega/Agentik_Engine/tests/test_tmux_and_aisb_chat.py +223 -0
  328. package/omega/Agentik_Engine/tests/test_v06_features.py +370 -0
  329. package/omega/Agentik_Engine/tests/test_vault.py +173 -0
  330. package/omega/Agentik_Engine/tests/test_webhooks_and_readiness.py +277 -0
  331. package/omega/Agentik_Engine/tests/test_worker_and_cleanup.py +541 -0
  332. package/omega/Agentik_Extra/etc/secrets/.vault-key +3 -0
  333. package/omega/Agentik_Extra/etc/secrets/.vault-pub +1 -0
  334. package/omega/Agentik_Runtime/audits.db +0 -0
  335. package/omega/Agentik_SSOT/VERSION +1 -1
  336. package/omega/Agentik_SSOT/claude-plugins/claude-plugins.yaml +100 -0
  337. package/omega/Agentik_SSOT/docs/LAYERS.md +90 -0
  338. package/omega/Agentik_SSOT/docs/USER-JOURNEY.md +283 -0
  339. package/omega/Agentik_SSOT/docs/quality-arsenal/ARSENAL-INTERCONNECTIONS.md +283 -0
  340. package/omega/Agentik_SSOT/docs/quality-arsenal/ARSENAL-ORCHESTRATION-PLAYBOOK.md +364 -0
  341. package/omega/Agentik_SSOT/docs/quality-arsenal/AUDIT-VERIFICATION-CONTRACT.md +272 -0
  342. package/omega/Agentik_SSOT/docs/quality-arsenal/QUALITY-ARSENAL-PREAMBLE.md +462 -0
  343. package/omega/Agentik_SSOT/marketplaces/design-discipline.yaml +86 -0
  344. package/omega/Agentik_SSOT/skills/a11yaudit/SKILL.md +161 -0
  345. package/omega/Agentik_SSOT/skills/apiaudit/SKILL.md +157 -0
  346. package/omega/Agentik_SSOT/skills/audit-orchestrator.md +212 -0
  347. package/omega/Agentik_SSOT/skills/audit-pilot.md +466 -0
  348. package/omega/Agentik_SSOT/skills/audit-tracker.md +147 -0
  349. package/omega/Agentik_SSOT/skills/automationaudit/SKILL.md +161 -0
  350. package/omega/Agentik_SSOT/skills/cadence/SKILL.md +76 -0
  351. package/omega/Agentik_SSOT/skills/codeaudit/SKILL.md +153 -0
  352. package/omega/Agentik_SSOT/skills/copyaudit/SKILL.md +161 -0
  353. package/omega/Agentik_SSOT/skills/dataaudit/SKILL.md +157 -0
  354. package/omega/Agentik_SSOT/skills/debugaudit/SKILL.md +161 -0
  355. package/omega/Agentik_SSOT/skills/dispatch/SKILL.md +79 -0
  356. package/omega/Agentik_SSOT/skills/dxaudit/SKILL.md +161 -0
  357. package/omega/Agentik_SSOT/skills/featureaudit/SKILL.md +161 -0
  358. package/omega/Agentik_SSOT/skills/flowaudit/SKILL.md +165 -0
  359. package/omega/Agentik_SSOT/skills/genesis/SKILL.md +116 -0
  360. package/omega/Agentik_SSOT/skills/handoff/SKILL.md +117 -0
  361. package/omega/Agentik_SSOT/skills/logicaudit/SKILL.md +165 -0
  362. package/omega/Agentik_SSOT/skills/motionaudit/SKILL.md +165 -0
  363. package/omega/Agentik_SSOT/skills/newcmd.md +300 -0
  364. package/omega/Agentik_SSOT/skills/perfaudit/SKILL.md +161 -0
  365. package/omega/Agentik_SSOT/skills/plan/SKILL.md +127 -0
  366. package/omega/Agentik_SSOT/skills/pursue/SKILL.md +68 -0
  367. package/omega/Agentik_SSOT/skills/quality-arsenal.md +180 -0
  368. package/omega/Agentik_SSOT/skills/rag-route.md +9 -0
  369. package/omega/Agentik_SSOT/skills/refontaudit/SKILL.md +165 -0
  370. package/omega/Agentik_SSOT/skills/retentionaudit/SKILL.md +165 -0
  371. package/omega/Agentik_SSOT/skills/secaudit/SKILL.md +157 -0
  372. package/omega/Agentik_SSOT/skills/seoaudit/SKILL.md +161 -0
  373. package/omega/Agentik_SSOT/skills/skill-auditor/SKILL.md +83 -0
  374. package/omega/Agentik_SSOT/skills/skill-finder/SKILL.md +116 -0
  375. package/omega/Agentik_SSOT/skills/uiuxaudit/SKILL.md +165 -0
  376. package/package.json +2 -2
@@ -0,0 +1,234 @@
1
+ """Graphify integration — `safishamsi/graphify` as a Claude Code skill.
2
+
3
+ What graphify actually is (verified against the upstream CLI at runtime):
4
+
5
+ * `graphifyy` (PyPI) installs a CLI named `graphify`.
6
+ * `graphify install` registers a Claude Code **skill** at
7
+ `~/.claude/skills/graphify/`. From inside Claude Code, typing
8
+ `/graphify .` triggers the skill — Claude reads the files and writes
9
+ the graph to `<project>/graphify-out/`.
10
+ * The CLI itself does NOT extract graphs. It manages the skill
11
+ (`install`, `uninstall`) and queries an existing graph (`path`,
12
+ `explain`, `diagnose`, `global list`).
13
+
14
+ So this wrapper is intentionally lean. It:
15
+
16
+ 1. detects whether the CLI is installed (`is_graphify_installed`)
17
+ 2. registers the skill via `graphify install` (`graphify_install_skill`)
18
+ 3. reads an existing `graphify-out/graph.json` and parses it
19
+ (`graphify_load_graph` → `GraphifyReport`)
20
+ 4. merges the parsed graph into the engine's `GraphRetriever` so
21
+ multi-RAG can answer relational queries (`graphify_into_rag`)
22
+
23
+ The graph is BUILT by Claude inside Claude Code (`/graphify .`). The engine
24
+ CONSUMES the resulting `graph.json` — never the other way around.
25
+ """
26
+ from __future__ import annotations
27
+
28
+ import json
29
+ import shutil
30
+ import subprocess
31
+ from dataclasses import dataclass, field
32
+ from pathlib import Path
33
+ from typing import Any
34
+
35
+
36
+ _CLI = "graphify"
37
+ _DEFAULT_OUT = "graphify-out"
38
+ _DEFAULT_JSON = "graph.json"
39
+
40
+
41
+ class GraphifyError(RuntimeError):
42
+ """Base class for graphify integration errors."""
43
+
44
+
45
+ class GraphifyNotInstalled(GraphifyError):
46
+ """The `graphify` CLI is not on PATH."""
47
+
48
+ def __init__(self) -> None:
49
+ super().__init__(
50
+ "graphify CLI not found. Install with: `pip install graphifyy && "
51
+ "graphify install`"
52
+ )
53
+
54
+
55
+ class GraphifyGraphMissing(GraphifyError):
56
+ """A `graphify-out/graph.json` was expected but not found."""
57
+
58
+
59
+ @dataclass
60
+ class GraphifyReport:
61
+ """Parsed result of a graphify run.
62
+
63
+ `nodes`/`edges` are the parsed structure. `summary` is whatever
64
+ top-level metadata graphify wrote alongside (mode, repo path, version,
65
+ statistics). `json_path` is the actual file we read — usually
66
+ `output_dir/graph.json` but callers can point at any path.
67
+ """
68
+
69
+ output_dir: Path
70
+ nodes: list[dict[str, Any]] = field(default_factory=list)
71
+ edges: list[dict[str, Any]] = field(default_factory=list)
72
+ summary: dict[str, Any] = field(default_factory=dict)
73
+ json_path: Path | None = None
74
+
75
+ @property
76
+ def html_path(self) -> Path:
77
+ return self.output_dir / "graph.html"
78
+
79
+ @property
80
+ def report_path(self) -> Path:
81
+ return self.output_dir / "GRAPH_REPORT.md"
82
+
83
+
84
+ def is_graphify_installed() -> bool:
85
+ """True iff the `graphify` CLI is on PATH."""
86
+ return shutil.which(_CLI) is not None
87
+
88
+
89
+ def graphify_version() -> str | None:
90
+ """Return the CLI's reported version, or None if missing/unreadable."""
91
+ if not is_graphify_installed():
92
+ return None
93
+ try:
94
+ out = subprocess.run(
95
+ [_CLI, "--version"],
96
+ check=False, capture_output=True, text=True, timeout=30,
97
+ )
98
+ except (OSError, subprocess.SubprocessError):
99
+ return None
100
+ text = (out.stdout or out.stderr or "").strip()
101
+ return text or None
102
+
103
+
104
+ def graphify_install_skill(*, platform: str = "claude") -> dict[str, Any]:
105
+ """Register the graphify skill into a Claude-Code-compatible platform.
106
+
107
+ By default writes `~/.claude/skills/graphify/SKILL.md` (the Claude Code
108
+ skill that powers the `/graphify` slash command). Other supported
109
+ platforms include `cursor`, `gemini`, `codex` — see `graphify --help`.
110
+
111
+ Idempotent: re-running over an installed skill is safe (graphify itself
112
+ handles the overwrite).
113
+ """
114
+ if not is_graphify_installed():
115
+ raise GraphifyNotInstalled()
116
+ try:
117
+ proc = subprocess.run(
118
+ [_CLI, "install", "--platform", platform],
119
+ check=False, capture_output=True, text=True, timeout=120,
120
+ )
121
+ except subprocess.TimeoutExpired as exc:
122
+ raise GraphifyError("graphify install timed out") from exc
123
+ if proc.returncode != 0:
124
+ raise GraphifyError(
125
+ f"graphify install (platform={platform}) exited "
126
+ f"{proc.returncode}: "
127
+ f"{(proc.stderr or proc.stdout or '').strip()[:500]}"
128
+ )
129
+ return {
130
+ "platform": platform,
131
+ "stdout": (proc.stdout or "").strip(),
132
+ }
133
+
134
+
135
+ def graphify_load_graph(
136
+ target: str | Path,
137
+ *,
138
+ json_path: str | Path | None = None,
139
+ ) -> GraphifyReport:
140
+ """Load an existing `graphify-out/graph.json` and parse it.
141
+
142
+ The graph is produced by typing `/graphify .` inside Claude Code at
143
+ `target/`. This function never invokes Claude — it only consumes the
144
+ artefact Claude produced.
145
+
146
+ Args:
147
+ target: the project root. We look for `target/graphify-out/graph.json`.
148
+ json_path: override the JSON path explicitly (skips the default lookup).
149
+
150
+ Raises:
151
+ GraphifyGraphMissing: no graph.json found at the resolved location.
152
+ GraphifyError: the file exists but isn't parseable.
153
+ """
154
+ if json_path is not None:
155
+ jp = Path(json_path).resolve()
156
+ else:
157
+ jp = (Path(target) / _DEFAULT_OUT / _DEFAULT_JSON).resolve()
158
+
159
+ if not jp.exists():
160
+ raise GraphifyGraphMissing(
161
+ f"no graph.json at {jp}. "
162
+ f"Build one with `/graphify .` inside Claude Code at {target!s}."
163
+ )
164
+
165
+ try:
166
+ data = json.loads(jp.read_text())
167
+ except (json.JSONDecodeError, OSError) as exc:
168
+ raise GraphifyError(f"unparsable JSON at {jp}: {exc}") from exc
169
+
170
+ nodes = list(data.get("nodes") or [])
171
+ edges = list(data.get("edges") or data.get("links") or [])
172
+ summary = {
173
+ k: v for k, v in data.items() if k not in {"nodes", "edges", "links"}
174
+ }
175
+ return GraphifyReport(
176
+ output_dir=jp.parent, nodes=nodes, edges=edges, summary=summary,
177
+ json_path=jp,
178
+ )
179
+
180
+
181
+ def graphify_into_rag(report: GraphifyReport, graph_retriever: Any) -> dict[str, int]:
182
+ """Feed a `GraphifyReport` into the engine's `GraphRetriever`.
183
+
184
+ Each graphify node becomes a graph node (its `id` or `name` becomes the
185
+ key, the path/file/kind/symbol becomes metadata). Each edge becomes a
186
+ typed undirected edge — `edge_type` from `kind`/`type`/`relation`.
187
+
188
+ Returns counts so callers can log "added 1,234 nodes and 4,567 edges".
189
+ The retriever isn't imported eagerly so the engine works on machines
190
+ without graphify installed.
191
+ """
192
+ n_nodes = n_edges = 0
193
+ for node in report.nodes:
194
+ node_id = str(node.get("id") or node.get("name") or "").strip()
195
+ if not node_id:
196
+ continue
197
+ text = str(
198
+ node.get("text")
199
+ or node.get("description")
200
+ or node.get("name")
201
+ or node_id
202
+ )
203
+ meta = {
204
+ k: v for k, v in node.items()
205
+ if k not in {"id", "name", "text", "description"}
206
+ }
207
+ graph_retriever.add_node(node_id, text=text, metadata=meta)
208
+ n_nodes += 1
209
+
210
+ for edge in report.edges:
211
+ a = str(
212
+ edge.get("source")
213
+ or edge.get("from")
214
+ or edge.get("a")
215
+ or ""
216
+ ).strip()
217
+ b = str(
218
+ edge.get("target")
219
+ or edge.get("to")
220
+ or edge.get("b")
221
+ or ""
222
+ ).strip()
223
+ if not a or not b:
224
+ continue
225
+ etype = str(
226
+ edge.get("kind")
227
+ or edge.get("type")
228
+ or edge.get("relation")
229
+ or "rel"
230
+ )
231
+ graph_retriever.add_edge(a, b, edge_type=etype)
232
+ n_edges += 1
233
+
234
+ return {"nodes": n_nodes, "edges": n_edges}
@@ -0,0 +1,268 @@
1
+ """Smith — the reflection loop that turns past failures into systemic upgrades.
2
+
3
+ The audit history table records every score across time, but no one's
4
+ reading it. This module does the reading + finds patterns + writes
5
+ structured insights to ``Agentik_Extra/staging/promotion/`` where the
6
+ educator pipeline can promote the best ones into the SSOT.
7
+
8
+ What we look at:
9
+
10
+ * **Audit history** — which audits drop below threshold the most? On
11
+ which projects? On which kinds of files?
12
+ * **Worker outcomes** — which task descriptions correlate with
13
+ audit rejection? Where do workers go pending most often?
14
+ * **Mission durations** — which roles eat the most tokens?
15
+ * **Cost per mission** — when did Sonnet vs. Opus pay off?
16
+
17
+ What we propose:
18
+
19
+ * **Audit threshold tweaks** — if codeaudit always fails at 78 on
20
+ project X but the operator never fixes the same finding kind,
21
+ suggest a per-project threshold override.
22
+ * **Skill recommendations** — patterns of repeated work suggest a
23
+ new skill the operator should create.
24
+ * **Model upgrades** — when a worker fails twice on Haiku, propose
25
+ bumping that intent class to Sonnet via the classifier.
26
+
27
+ This is *proposal only*. The educator staging pipeline (which already
28
+ exists) gates any actual change. Smith never edits the live tree
29
+ directly.
30
+ """
31
+ from __future__ import annotations
32
+
33
+ import json
34
+ import os
35
+ import sqlite3
36
+ import time
37
+ from collections import Counter, defaultdict
38
+ from dataclasses import dataclass, field
39
+ from pathlib import Path
40
+ from typing import Any
41
+
42
+
43
+ @dataclass
44
+ class Insight:
45
+ """One actionable observation Smith found."""
46
+ kind: str # "weak_audit" | "pending_pattern" | "cost_outlier" | "skill_suggestion"
47
+ title: str
48
+ detail: str
49
+ evidence: list[str] = field(default_factory=list)
50
+ severity: str = "info" # "info" | "warn" | "high"
51
+ proposed_action: str = ""
52
+
53
+
54
+ @dataclass
55
+ class ReflectionReport:
56
+ generated_at: int
57
+ omega_home: str
58
+ insights: list[Insight] = field(default_factory=list)
59
+ counts: dict[str, int] = field(default_factory=dict)
60
+
61
+ def to_dict(self) -> dict:
62
+ return {
63
+ "generated_at": self.generated_at,
64
+ "omega_home": self.omega_home,
65
+ "insights": [
66
+ {"kind": i.kind, "title": i.title, "detail": i.detail,
67
+ "evidence": i.evidence, "severity": i.severity,
68
+ "proposed_action": i.proposed_action}
69
+ for i in self.insights
70
+ ],
71
+ "counts": self.counts,
72
+ }
73
+
74
+
75
+ def _audit_db(home: Path) -> Path:
76
+ return home / "Agentik_Runtime" / "audits.db"
77
+
78
+
79
+ def _event_db(home: Path) -> Path:
80
+ return home / "Agentik_Runtime" / "eventlog" / "omega.db"
81
+
82
+
83
+ def _staging_dir(home: Path) -> Path:
84
+ d = home / "Agentik_Extra" / "staging" / "promotion"
85
+ d.mkdir(parents=True, exist_ok=True)
86
+ return d
87
+
88
+
89
+ def _analyse_audit_history(home: Path) -> list[Insight]:
90
+ """Find audits that consistently fail or trend down."""
91
+ db = _audit_db(home)
92
+ if not db.exists():
93
+ return []
94
+ insights: list[Insight] = []
95
+ conn = sqlite3.connect(str(db))
96
+ try:
97
+ # Average score per audit_id over the last 30 days
98
+ cutoff = int(time.time()) - 30 * 86400
99
+ rows = conn.execute(
100
+ "SELECT audit_id, AVG(score) AS avg_score, COUNT(*) AS n, "
101
+ " SUM(CASE WHEN verified = 1 THEN 1 ELSE 0 END) AS verified "
102
+ "FROM audit_runs WHERE timestamp > ? "
103
+ "GROUP BY audit_id HAVING n >= 3",
104
+ (cutoff,),
105
+ ).fetchall()
106
+ for audit_id, avg_score, n, verified in rows:
107
+ avg = float(avg_score or 0)
108
+ if avg < 75.0:
109
+ insights.append(Insight(
110
+ kind="weak_audit",
111
+ title=f"{audit_id} averages {avg:.1f}/100 over {n} runs",
112
+ detail=(
113
+ f"{audit_id} is failing consistently. "
114
+ f"{verified}/{n} runs reached the threshold."
115
+ ),
116
+ evidence=[f"30d_avg={avg:.1f}", f"runs={n}",
117
+ f"verified={verified}"],
118
+ severity="warn" if avg >= 60 else "high",
119
+ proposed_action=(
120
+ f"Run `omega audit run {audit_id} --fix` to see if "
121
+ "the smart batcher can clear it. If the same "
122
+ "findings recur, lower the threshold OR write a "
123
+ "checker skill that prevents that class of failure."
124
+ ),
125
+ ))
126
+ # Trend: compare last 7d vs prior 23d for each audit
127
+ for audit_id in {r[0] for r in rows}:
128
+ r_recent = conn.execute(
129
+ "SELECT AVG(score) FROM audit_runs "
130
+ "WHERE audit_id = ? AND timestamp > ?",
131
+ (audit_id, int(time.time()) - 7 * 86400),
132
+ ).fetchone()
133
+ r_old = conn.execute(
134
+ "SELECT AVG(score) FROM audit_runs "
135
+ "WHERE audit_id = ? AND timestamp BETWEEN ? AND ?",
136
+ (audit_id, cutoff, int(time.time()) - 7 * 86400),
137
+ ).fetchone()
138
+ recent = float(r_recent[0] or 0)
139
+ old = float(r_old[0] or 0)
140
+ if recent > 0 and old > 0 and (old - recent) > 10:
141
+ insights.append(Insight(
142
+ kind="weak_audit",
143
+ title=f"{audit_id} dropped from {old:.0f} → {recent:.0f}",
144
+ detail=(
145
+ f"Regression of {old - recent:.0f} points in the "
146
+ "last 7 days. Something landed that's hurting "
147
+ "this dimension."
148
+ ),
149
+ evidence=[f"recent_avg={recent:.1f}",
150
+ f"prior_avg={old:.1f}"],
151
+ severity="high",
152
+ proposed_action=(
153
+ f"Bisect with `omega audit diff <last_good_run> "
154
+ f"<recent_run>` to see which findings are new."
155
+ ),
156
+ ))
157
+ finally:
158
+ conn.close()
159
+ return insights
160
+
161
+
162
+ def _analyse_done_jsons(home: Path) -> list[Insight]:
163
+ """Find patterns in worker .done.json statuses."""
164
+ sess = home / "Agentik_Runtime" / "sessions"
165
+ if not sess.is_dir():
166
+ return []
167
+ status_counter: Counter = Counter()
168
+ pending_actions: Counter = Counter()
169
+ for done in sess.glob("*/.done.json"):
170
+ try:
171
+ data = json.loads(done.read_text())
172
+ except (json.JSONDecodeError, OSError):
173
+ continue
174
+ status_counter[data.get("status", "unknown")] += 1
175
+ for action in (data.get("pending_actions") or []):
176
+ pending_actions[action[:60]] += 1
177
+
178
+ insights: list[Insight] = []
179
+ total = sum(status_counter.values())
180
+ if total >= 10:
181
+ failed_pct = status_counter.get("failed", 0) / total
182
+ pending_pct = status_counter.get("pending", 0) / total
183
+ if failed_pct > 0.2:
184
+ insights.append(Insight(
185
+ kind="pending_pattern",
186
+ title=f"{failed_pct:.0%} of workers ended status=failed",
187
+ detail=(
188
+ f"Out of {total} recent worker outcomes, "
189
+ f"{status_counter['failed']} failed. The audit "
190
+ "gate is catching real issues — good. But the "
191
+ "rate is high, look at common errors."
192
+ ),
193
+ evidence=[f"total={total}",
194
+ f"failed={status_counter.get('failed', 0)}",
195
+ f"pending={status_counter.get('pending', 0)}"],
196
+ severity="warn",
197
+ proposed_action=(
198
+ "Run `omega memory search 'errors'` to spot "
199
+ "common failure modes; consider escalating those "
200
+ "intent classes to a stronger model."
201
+ ),
202
+ ))
203
+ if pending_pct > 0.3:
204
+ insights.append(Insight(
205
+ kind="pending_pattern",
206
+ title=f"{pending_pct:.0%} workers end pending with un-actioned items",
207
+ detail="A lot of work is being deferred. Either tasks are too big or context is missing.",
208
+ evidence=[f"pending={status_counter.get('pending', 0)}",
209
+ f"total={total}"],
210
+ severity="warn",
211
+ proposed_action=(
212
+ "Break missions into smaller intents OR seed the "
213
+ "envelope with more parent context (envelope.py)."
214
+ ),
215
+ ))
216
+
217
+ # Repeated pending actions = a skill begging to be created
218
+ repeat = [(text, n) for text, n in pending_actions.most_common(5)
219
+ if n >= 3]
220
+ for text, n in repeat:
221
+ insights.append(Insight(
222
+ kind="skill_suggestion",
223
+ title=f"Repeated pending action ({n}x): {text}",
224
+ detail=(
225
+ f"This pending_action appeared {n} times in recent "
226
+ "worker reports. It's a candidate for its own skill or "
227
+ "a reusable helper."
228
+ ),
229
+ evidence=[f"frequency={n}"],
230
+ severity="info",
231
+ proposed_action=(
232
+ f"Create a SKILL.md in Agentik_SSOT/skills/ that "
233
+ f"automates: {text[:80]}"
234
+ ),
235
+ ))
236
+ return insights
237
+
238
+
239
+ def reflect(
240
+ omega_home: str | Path, *, write_proposals: bool = True,
241
+ ) -> ReflectionReport:
242
+ """Run a full Smith reflection. Returns the structured report.
243
+
244
+ With ``write_proposals=True`` (default), insights are also written
245
+ as JSON files in ``Agentik_Extra/staging/promotion/smith-<ts>-N.json``
246
+ where the existing educator pipeline picks them up.
247
+ """
248
+ home = Path(omega_home or os.environ.get("OMEGA_HOME")
249
+ or Path.home() / "Omega")
250
+ insights = _analyse_audit_history(home) + _analyse_done_jsons(home)
251
+ report = ReflectionReport(
252
+ generated_at=int(time.time()),
253
+ omega_home=str(home),
254
+ insights=insights,
255
+ counts={"insights": len(insights)},
256
+ )
257
+ if write_proposals and insights:
258
+ out = _staging_dir(home)
259
+ for i, ins in enumerate(insights, start=1):
260
+ (out / f"smith-{report.generated_at}-{i}.json").write_text(
261
+ json.dumps({
262
+ "kind": ins.kind, "title": ins.title,
263
+ "detail": ins.detail, "evidence": ins.evidence,
264
+ "severity": ins.severity,
265
+ "proposed_action": ins.proposed_action,
266
+ }, indent=2),
267
+ )
268
+ return report