@agentikos/omega-os 0.2.0 → 0.19.5

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 (367) 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/marketplaces/design-discipline.yaml +86 -0
  340. package/omega/Agentik_SSOT/skills/a11yaudit/SKILL.md +161 -0
  341. package/omega/Agentik_SSOT/skills/apiaudit/SKILL.md +157 -0
  342. package/omega/Agentik_SSOT/skills/automationaudit/SKILL.md +161 -0
  343. package/omega/Agentik_SSOT/skills/cadence/SKILL.md +76 -0
  344. package/omega/Agentik_SSOT/skills/codeaudit/SKILL.md +153 -0
  345. package/omega/Agentik_SSOT/skills/copyaudit/SKILL.md +161 -0
  346. package/omega/Agentik_SSOT/skills/dataaudit/SKILL.md +157 -0
  347. package/omega/Agentik_SSOT/skills/debugaudit/SKILL.md +161 -0
  348. package/omega/Agentik_SSOT/skills/dispatch/SKILL.md +79 -0
  349. package/omega/Agentik_SSOT/skills/dxaudit/SKILL.md +161 -0
  350. package/omega/Agentik_SSOT/skills/featureaudit/SKILL.md +161 -0
  351. package/omega/Agentik_SSOT/skills/flowaudit/SKILL.md +165 -0
  352. package/omega/Agentik_SSOT/skills/genesis/SKILL.md +116 -0
  353. package/omega/Agentik_SSOT/skills/handoff/SKILL.md +117 -0
  354. package/omega/Agentik_SSOT/skills/logicaudit/SKILL.md +165 -0
  355. package/omega/Agentik_SSOT/skills/motionaudit/SKILL.md +165 -0
  356. package/omega/Agentik_SSOT/skills/perfaudit/SKILL.md +161 -0
  357. package/omega/Agentik_SSOT/skills/plan/SKILL.md +127 -0
  358. package/omega/Agentik_SSOT/skills/pursue/SKILL.md +68 -0
  359. package/omega/Agentik_SSOT/skills/rag-route.md +9 -0
  360. package/omega/Agentik_SSOT/skills/refontaudit/SKILL.md +165 -0
  361. package/omega/Agentik_SSOT/skills/retentionaudit/SKILL.md +165 -0
  362. package/omega/Agentik_SSOT/skills/secaudit/SKILL.md +157 -0
  363. package/omega/Agentik_SSOT/skills/seoaudit/SKILL.md +161 -0
  364. package/omega/Agentik_SSOT/skills/skill-auditor/SKILL.md +83 -0
  365. package/omega/Agentik_SSOT/skills/skill-finder/SKILL.md +116 -0
  366. package/omega/Agentik_SSOT/skills/uiuxaudit/SKILL.md +165 -0
  367. package/package.json +2 -2
@@ -0,0 +1,129 @@
1
+ """Validated skill installer — audit before write.
2
+
3
+ Two paths a skill can come from:
4
+
5
+ 1. The Claude Code plugin marketplace (``claude plugin install
6
+ <name>@<marketplace>``). Step 45 of the OmegaOS installer handles
7
+ this for the curated list. We don't duplicate that path here.
8
+
9
+ 2. Direct from a GitHub repo — `omega skill install <name>
10
+ --from github:<org>/<repo>[/<path>]`. We clone, locate the
11
+ ``SKILL.md``, run the auditor, and only on a clean verdict copy
12
+ it into ``Agentik_SSOT/skills/<name>/``. ``omega sync`` then
13
+ projects it to ``~/.claude/skills/``.
14
+
15
+ We refuse to install if the auditor returns ``verified=False`` unless
16
+ the operator explicitly passes ``allow_blocked=True``.
17
+ """
18
+ from __future__ import annotations
19
+
20
+ import shutil
21
+ import subprocess
22
+ import tempfile
23
+ from dataclasses import dataclass
24
+ from pathlib import Path
25
+
26
+ from omega_engine.skill_discovery.auditor import (
27
+ SkillAuditVerdict,
28
+ audit_skill_file,
29
+ )
30
+
31
+
32
+ @dataclass
33
+ class SkillInstallResult:
34
+ skill_name: str
35
+ installed: bool
36
+ skill_path: Path | None
37
+ audit: SkillAuditVerdict | None = None
38
+ reason: str = ""
39
+
40
+
41
+ def _clone(repo: str, dest: Path) -> bool:
42
+ """Shallow-clone a GitHub repo into ``dest``. Returns True on success."""
43
+ proc = subprocess.run(
44
+ ["git", "clone", "--depth", "1",
45
+ f"https://github.com/{repo}.git", str(dest)],
46
+ check=False, capture_output=True, text=True, timeout=120,
47
+ )
48
+ return proc.returncode == 0
49
+
50
+
51
+ def install_skill_from_github(
52
+ omega_home: str | Path,
53
+ skill_name: str,
54
+ *,
55
+ repo: str,
56
+ sub_path: str = "",
57
+ allow_blocked: bool = False,
58
+ ) -> SkillInstallResult:
59
+ """Install one skill from a GitHub repo.
60
+
61
+ Args:
62
+ omega_home: ``$OMEGA_HOME`` — destination is
63
+ ``$OMEGA_HOME/Agentik_SSOT/skills/<skill_name>/``.
64
+ skill_name: the directory name the skill will live under.
65
+ repo: ``org/repo`` (no ``github:`` prefix; no URL).
66
+ sub_path: optional path inside the repo where the SKILL.md
67
+ lives (e.g. ``skills/find-skills``). If empty, we try
68
+ ``skills/<skill_name>/`` then the repo root.
69
+ allow_blocked: install even if the auditor returns
70
+ ``verified=False``. Hard-fail by default.
71
+
72
+ Returns: ``SkillInstallResult``.
73
+ """
74
+ home = Path(omega_home)
75
+ target = home / "Agentik_SSOT" / "skills" / skill_name
76
+
77
+ with tempfile.TemporaryDirectory() as tmp:
78
+ tmp_path = Path(tmp)
79
+ clone_dir = tmp_path / "src"
80
+ if not _clone(repo, clone_dir):
81
+ return SkillInstallResult(
82
+ skill_name=skill_name, installed=False, skill_path=None,
83
+ reason=f"git clone github:{repo} failed",
84
+ )
85
+
86
+ # Find the SKILL.md.
87
+ candidates = []
88
+ if sub_path:
89
+ candidates.append(clone_dir / sub_path / "SKILL.md")
90
+ candidates += [
91
+ clone_dir / "skills" / skill_name / "SKILL.md",
92
+ clone_dir / skill_name / "SKILL.md",
93
+ clone_dir / "SKILL.md",
94
+ ]
95
+ skill_md = next((p for p in candidates if p.exists()), None)
96
+ if skill_md is None:
97
+ return SkillInstallResult(
98
+ skill_name=skill_name, installed=False, skill_path=None,
99
+ reason=f"no SKILL.md found in {repo} "
100
+ f"(looked at {[str(c.relative_to(clone_dir)) for c in candidates]})",
101
+ )
102
+
103
+ # Audit.
104
+ verdict = audit_skill_file(skill_md)
105
+ if not verdict.verified and not allow_blocked:
106
+ return SkillInstallResult(
107
+ skill_name=skill_name, installed=False, skill_path=None,
108
+ audit=verdict,
109
+ reason=(
110
+ f"audit blocked install: {verdict.block_count} block + "
111
+ f"{verdict.warn_count} warn issue(s)"
112
+ ),
113
+ )
114
+
115
+ # Copy the skill directory (SKILL.md + any siblings — scripts/, examples/).
116
+ skill_dir = skill_md.parent
117
+ target.mkdir(parents=True, exist_ok=True)
118
+ for item in skill_dir.iterdir():
119
+ dest = target / item.name
120
+ if item.is_dir():
121
+ if dest.exists():
122
+ shutil.rmtree(dest)
123
+ shutil.copytree(item, dest)
124
+ else:
125
+ shutil.copy(item, dest)
126
+ return SkillInstallResult(
127
+ skill_name=skill_name, installed=True, skill_path=target,
128
+ audit=verdict,
129
+ )
@@ -0,0 +1,80 @@
1
+ """Marketplace catalog — every trusted source of Claude Code skills.
2
+
3
+ The catalog itself lives in YAML at
4
+ ``Agentik_SSOT/claude-plugins/claude-plugins.yaml`` (extended in this
5
+ PR with ``trust`` and a few non-builtin marketplaces). This module
6
+ loads + filters it.
7
+
8
+ Trust levels:
9
+
10
+ * ``high`` — Anthropic, Vercel Labs, other vetted vendors. Auditor
11
+ still runs but warnings rarely block.
12
+ * ``medium`` — community marketplaces (davila7, thedotmack, etc.).
13
+ Auditor warnings get surfaced to the operator.
14
+ * ``low`` — random GitHub repos. Auditor hard-fails on anything
15
+ suspicious.
16
+ """
17
+ from __future__ import annotations
18
+
19
+ from dataclasses import dataclass
20
+ from pathlib import Path
21
+ from typing import Any
22
+
23
+ import yaml
24
+
25
+
26
+ @dataclass
27
+ class Marketplace:
28
+ id: str
29
+ source: str
30
+ description: str
31
+ trust: str = "medium" # "high" | "medium" | "low"
32
+ builtin: bool = False
33
+
34
+ @property
35
+ def is_github(self) -> bool:
36
+ return self.source.startswith("github:")
37
+
38
+ @property
39
+ def github_repo(self) -> str | None:
40
+ if not self.is_github:
41
+ return None
42
+ return self.source.split(":", 1)[1]
43
+
44
+ @property
45
+ def github_url(self) -> str | None:
46
+ repo = self.github_repo
47
+ return f"https://github.com/{repo}" if repo else None
48
+
49
+
50
+ def load_marketplaces(omega_home: str | Path) -> list[Marketplace]:
51
+ """Read the marketplace list from the SSOT catalog."""
52
+ path = (Path(omega_home) / "Agentik_SSOT" / "claude-plugins"
53
+ / "claude-plugins.yaml")
54
+ if not path.exists():
55
+ return []
56
+ data = yaml.safe_load(path.read_text()) or {}
57
+ out: list[Marketplace] = []
58
+ for m in data.get("marketplaces") or []:
59
+ out.append(Marketplace(
60
+ id=m["id"],
61
+ source=m.get("source", ""),
62
+ description=m.get("description", ""),
63
+ trust=m.get("trust", "medium"),
64
+ builtin=bool(m.get("builtin", False)),
65
+ ))
66
+ return out
67
+
68
+
69
+ def get_marketplace(
70
+ omega_home: str | Path, marketplace_id: str,
71
+ ) -> Marketplace | None:
72
+ for m in load_marketplaces(omega_home):
73
+ if m.id == marketplace_id:
74
+ return m
75
+ return None
76
+
77
+
78
+ def trust_floor(trust: str) -> int:
79
+ """Numeric trust floor — higher = more trust."""
80
+ return {"high": 3, "medium": 2, "low": 1}.get(trust.lower(), 0)
@@ -0,0 +1,388 @@
1
+ """Role → skills routing.
2
+
3
+ Why this module exists
4
+ ----------------------
5
+
6
+ OmegaOS ships 24 first-party skills (17 audits + dispatch + pursue + cadence
7
+ + skill-finder/auditor + rag-route). Anthropic's catalog grows weekly. A
8
+ worker spawned with EVERY skill available has its context bloated with
9
+ descriptions it'll never use — and Claude gets confused about which to
10
+ reach for.
11
+
12
+ The right shape: each role declares the skills it should reach for, and the
13
+ ``WorkerBrief.skills`` field becomes the authoritative tool palette. The
14
+ worker's system prompt enumerates those skills + a "use them when
15
+ applicable" instruction so Claude actually engages them.
16
+
17
+ Topology overrides this per-mission (e.g. a "frontend-fix" mission gives
18
+ the worker only `pursue` + `uiuxaudit` + `a11yaudit`, while a "data-migration"
19
+ mission gives it `pursue` + `dataaudit` + `apiaudit`).
20
+
21
+ Resolution order (highest wins)
22
+ -------------------------------
23
+
24
+ 1. Explicit ``brief.skills`` (operator passed --skills)
25
+ 2. Topology declares ``mission_skills`` for the role
26
+ 3. ``_ROLE_SKILLS`` map below (sensible defaults per role)
27
+ 4. Empty list → Claude uses whatever's globally installed
28
+
29
+ Public API
30
+ ----------
31
+
32
+ ``skills_for(role, ...)`` returns the resolved list.
33
+ ``recommend(role)`` returns the role-default for `omega skill recommend`.
34
+ ``catalog_for_home(home)`` returns every skill id present in the SSOT.
35
+ ``format_skill_block(skills, home)`` builds the system_prompt snippet
36
+ embedded by ``spawn_worker``.
37
+ """
38
+ from __future__ import annotations
39
+
40
+ from pathlib import Path
41
+
42
+
43
+ # ---------------------------------------------------------------------------
44
+ # Role → default skills
45
+ # ---------------------------------------------------------------------------
46
+ #
47
+ # Curated. Not "every skill" — only the ones that role actually benefits from.
48
+ # Each entry is a comment + a list because future maintainers should be able
49
+ # to see the WHY of every line.
50
+
51
+ _ROLE_SKILLS: dict[str, list[str]] = {
52
+ # ---------------------------------------------------------------------
53
+ # Dispatchers — they plan + delegate. They orchestrate but never code.
54
+ # ``dispatch`` lets them spawn sub-missions; ``pursue`` lets them run
55
+ # a goal-driven loop directly when planning isn't worth it. ``cadence``
56
+ # lets them schedule recurring beats. They have the FULL audit catalog
57
+ # in scope so they can RECOMMEND audits when assigning work.
58
+ # ---------------------------------------------------------------------
59
+ "oracle": [
60
+ "dispatch", "pursue", "cadence",
61
+ "codeaudit", "debugaudit", "uiuxaudit", "secaudit",
62
+ "perfaudit", "a11yaudit", "flowaudit", "featureaudit",
63
+ ],
64
+ "manager": [
65
+ "dispatch", "pursue",
66
+ "codeaudit", "debugaudit", "secaudit", "perfaudit",
67
+ ],
68
+ "aisb": [
69
+ "dispatch", "pursue", "cadence",
70
+ "codeaudit", "debugaudit", "uiuxaudit", "secaudit",
71
+ ],
72
+ "architect": [
73
+ "dispatch", "pursue",
74
+ "codeaudit", "logicaudit", "apiaudit", "dataaudit",
75
+ "secaudit", "perfaudit",
76
+ ],
77
+
78
+ # ---------------------------------------------------------------------
79
+ # Executors — they DO the work. They get the full audit palette so
80
+ # they can self-verify BEFORE claiming done (a worker that runs
81
+ # /codeaudit on its own changes catches its own mistakes — verified
82
+ # completion shifts left). ``pursue`` is the goal-driven loop.
83
+ # ---------------------------------------------------------------------
84
+ "worker": [
85
+ "pursue",
86
+ # Core code / runtime
87
+ "codeaudit", "debugaudit", "logicaudit",
88
+ # UI / UX (most common worker domain)
89
+ "uiuxaudit", "a11yaudit", "flowaudit", "motionaudit", "copyaudit",
90
+ # Cross-cutting checks
91
+ "perfaudit", "secaudit", "seoaudit",
92
+ ],
93
+ "construct": [
94
+ "pursue",
95
+ # Build / data / API specialist
96
+ "codeaudit", "apiaudit", "dataaudit", "logicaudit",
97
+ "perfaudit", "secaudit", "dxaudit",
98
+ ],
99
+ "link": [
100
+ "pursue",
101
+ # Integration / external systems
102
+ "apiaudit", "secaudit", "automationaudit",
103
+ ],
104
+
105
+ # ---------------------------------------------------------------------
106
+ # Verifiers — read-only; they audit. The bigger the palette, the
107
+ # harder it is for a worker to hide a regression. Seraph is the
108
+ # senior verifier — it gets EVERY audit.
109
+ # ---------------------------------------------------------------------
110
+ "audit": [
111
+ "codeaudit", "debugaudit", "secaudit",
112
+ "perfaudit", "a11yaudit",
113
+ ],
114
+ "verifier": [
115
+ "codeaudit", "debugaudit", "logicaudit",
116
+ ],
117
+ "seraph": [
118
+ "codeaudit", "debugaudit", "uiuxaudit", "secaudit",
119
+ "perfaudit", "a11yaudit", "seoaudit", "apiaudit", "dataaudit",
120
+ "flowaudit", "featureaudit", "logicaudit",
121
+ ],
122
+
123
+ # ---------------------------------------------------------------------
124
+ # Triage / classifier — minimal tool surface. Haiku model, fast pass.
125
+ # ---------------------------------------------------------------------
126
+ "classifier": [],
127
+ "triage": [],
128
+
129
+ # ---------------------------------------------------------------------
130
+ # Special meta-roles
131
+ # ---------------------------------------------------------------------
132
+ "skill_curator": ["skill-finder", "skill-auditor"],
133
+ "smith": [ # Reflection / learning — reads audits
134
+ "codeaudit", "debugaudit", "retentionaudit",
135
+ ],
136
+
137
+ # ---------------------------------------------------------------------
138
+ # Domain-specialist worker roles. Operators dispatch to these when a
139
+ # mission has an obvious primary domain. Each gets pursue + the
140
+ # domain audit + the 2-3 most relevant cross-cutters.
141
+ # ---------------------------------------------------------------------
142
+ "worker_ui": [
143
+ "pursue",
144
+ # Audits — UI domain
145
+ "uiuxaudit", "a11yaudit", "motionaudit", "copyaudit", "refontaudit",
146
+ # Design-discipline skills (Genesis writes these into feature briefs;
147
+ # workers MUST invoke them, not paraphrase them)
148
+ "shadcn-ui", "emil-design-eng", "impeccable", "taste-skill",
149
+ "frontend-design", "design-taste-frontend",
150
+ ],
151
+ "worker_perf": ["pursue", "perfaudit", "codeaudit", "debugaudit", "logicaudit"],
152
+ "worker_sec": ["pursue", "secaudit", "codeaudit", "apiaudit", "dataaudit"],
153
+ "worker_api": ["pursue", "apiaudit", "codeaudit", "dataaudit", "secaudit"],
154
+ "worker_data": ["pursue", "dataaudit", "codeaudit", "apiaudit", "secaudit"],
155
+ "worker_seo": ["pursue", "seoaudit", "perfaudit", "a11yaudit", "copyaudit"],
156
+ "worker_ops": ["pursue", "automationaudit", "dxaudit", "secaudit"],
157
+ "worker_growth": ["pursue", "retentionaudit", "featureaudit", "copyaudit"],
158
+ }
159
+
160
+
161
+ # Skills the engine treats as "power tools" — operators should know they
162
+ # exist. Surfaced by `omega skill recommend` and the post-install card.
163
+ POWER_SKILLS: list[str] = [
164
+ "dispatch", # multi-agent orchestration
165
+ "pursue", # goal-driven loop
166
+ "cadence", # scheduled / recurring beats
167
+ "codeaudit", # is the code SOLID
168
+ "debugaudit", # what's broken right now
169
+ "uiuxaudit", # is the UI beautiful
170
+ "secaudit", # is it secure
171
+ "perfaudit", # is it fast
172
+ "a11yaudit", # is it accessible
173
+ "seoaudit", # is it discoverable
174
+ ]
175
+
176
+
177
+ # ---------------------------------------------------------------------------
178
+ # Canonical skill-chain workflows.
179
+ #
180
+ # Each entry is a multi-line string describing how skills compose into a
181
+ # complete workflow. ``omega skill workflows`` surfaces these so operators
182
+ # can SEE how /dispatch → /pursue → /codeaudit → fix-workers → re-audit
183
+ # actually chains together at runtime.
184
+ #
185
+ # The content is informative — Claude reads these via the skill block when
186
+ # the role's palette includes the relevant primitives. They are NOT executed
187
+ # as code; they're the canonical playbook.
188
+ # ---------------------------------------------------------------------------
189
+
190
+ WORKFLOWS: dict[str, str] = {
191
+ "ship-feature": """\
192
+ Build + verify a feature, end-to-end, with no API-key burn.
193
+
194
+ 1. Operator runs: /dispatch "implement OAuth login with verify against tests/auth.test.ts"
195
+ 2. /dispatch → Oracle plans 3 worker subtasks:
196
+ a. add the auth endpoint (worker, with /codeaudit + /apiaudit + /secaudit)
197
+ b. update the client form (worker, with /uiuxaudit + /a11yaudit + /flowaudit)
198
+ c. add the playwright test (worker, with /codeaudit + /flowaudit)
199
+ 3. Each worker runs /pursue <verify_cmd> until exit 0.
200
+ 4. Seraph runs /codeaudit + /debugaudit + /secaudit on each .done.json.
201
+ 5. Mission completes only when EVERY child is VERIFIED (not just CLAIMED_DONE).
202
+ 6. Smith reflection (autonomous, daily) reads the audit history and writes Insight
203
+ proposals to Agentik_Extra/staging/promotion/ if anything was weak.
204
+
205
+ Skills in chain: /dispatch → /pursue → /codeaudit → fix workers → /codeaudit (re-audit)
206
+ """,
207
+
208
+ "self-audit-loop": """\
209
+ A worker AUDITS ITS OWN CHANGES before claiming done — verified completion
210
+ shifts left, catching mistakes one layer earlier.
211
+
212
+ 1. Worker reads brief, makes the change.
213
+ 2. BEFORE writing .done.json, worker runs /codeaudit --files=<changed>
214
+ - If score >= 85 → write done_clean
215
+ - If score < 85 → fix the findings (loop), then re-audit
216
+ - Hard cap: 3 iterations, then write `pending` with the unresolved findings
217
+ 3. Seraph (verifier) re-runs the audit independently.
218
+ - If Seraph also passes → VERIFIED
219
+ - If Seraph fails what the worker thought it passed → REJECTED + retry budget
220
+ 4. Verified completion is now SOLID — two independent passes had to agree.
221
+
222
+ Skills in chain: /pursue → /codeaudit (self) → /codeaudit (verifier)
223
+ """,
224
+
225
+ "ux-redesign": """\
226
+ Multi-domain UX redesign with parallel specialised workers.
227
+
228
+ 1. Operator: /refontaudit --url=https://app/dashboard
229
+ → produces a redesign plan with /100 score per pillar
230
+ 2. /dispatch "execute the refontaudit plan; preserve existing functionality"
231
+ → Oracle spawns 4 worker_ui's in parallel, file ownership disjoint:
232
+ a. layout shell (worker_ui + /uiuxaudit)
233
+ b. component primitives (worker_ui + /a11yaudit)
234
+ c. motion + transitions (worker_ui + /motionaudit)
235
+ d. copy + microcopy (worker_ui + /copyaudit)
236
+ 3. Each worker /pursue <playwright-screenshot-diff> until 0 visual regressions.
237
+ 4. Seraph runs FULL audit pass (12 audits) on the final state.
238
+ 5. Mission verified only if every audit >= threshold.
239
+
240
+ Skills in chain: /refontaudit → /dispatch → 4× /pursue + /uiuxaudit/a11yaudit/motionaudit/copyaudit
241
+ """,
242
+
243
+ "linear-fix-batch": """\
244
+ Fix N Linear tickets in parallel-safe batches (the v0.10 pattern).
245
+
246
+ 1. Operator: /dispatch "fix all 36 Linear feedback tickets in this project"
247
+ 2. Oracle calls linear-conflict-analyzer.py → annotates each ticket with
248
+ files_touched + conflict_class (narrow | broad | terminal).
249
+ 3. Oracle greedy-packs up to 4 NARROW tickets with disjoint file footprints
250
+ into one batch; BROAD tickets run alone.
251
+ 4. Per ticket, worker runs:
252
+ - Playwright BEFORE capture (visual + console baseline)
253
+ - implement fix
254
+ - Playwright AFTER capture
255
+ - /codeaudit --files=<changed> (self-audit)
256
+ - write .done.json with Before/After paths
257
+ 5. Seraph runs /debugaudit on each ticket → VERIFIED or REJECTED.
258
+ 6. After each batch, `npm run build` once.
259
+ 7. Next batch dispatches; repeat until queue empty.
260
+
261
+ Skills in chain: /dispatch → /pursue per ticket → /codeaudit → /debugaudit
262
+ """,
263
+
264
+ "scheduled-quality": """\
265
+ Continuously running quality watch via cron + /cadence.
266
+
267
+ 1. Operator: /cadence schedule cron "0 3 * * *" \\
268
+ "run the full forensic audit suite on $project, write the report,
269
+ create Linear tickets for findings >= high severity"
270
+ 2. Every night at 03:00, autonomous-supervisor fires the charter.
271
+ 3. Engine dispatches a verifier with the full audit palette (12 audits).
272
+ 4. Failing audits → Insight files in Agentik_Extra/staging/promotion/.
273
+ 5. Smith reflection (also daily) reads the trend → proposes which audits
274
+ to dispatch fix-workers for first.
275
+
276
+ Skills in chain: /cadence → daily cron → /dispatch verifier → 12 audits → Smith insight
277
+ """,
278
+ }
279
+
280
+
281
+ def recommend(role: str) -> list[str]:
282
+ """Default skill list for a role. Empty list if the role is unknown."""
283
+ return list(_ROLE_SKILLS.get(role, []))
284
+
285
+
286
+ def skills_for(
287
+ role: str,
288
+ *,
289
+ explicit: list[str] | None = None,
290
+ topology_skills: list[str] | None = None,
291
+ ) -> list[str]:
292
+ """Resolve the final skill list for a worker (precedence order documented above)."""
293
+ if explicit:
294
+ return list(explicit)
295
+ if topology_skills:
296
+ return list(topology_skills)
297
+ return recommend(role)
298
+
299
+
300
+ def catalog_for_home(home: str | Path) -> list[str]:
301
+ """Every skill id present under ``$OMEGA_HOME/Agentik_SSOT/skills/``."""
302
+ root = Path(home) / "Agentik_SSOT" / "skills"
303
+ if not root.is_dir():
304
+ return []
305
+ out: list[str] = []
306
+ for child in sorted(root.iterdir()):
307
+ if child.is_dir() and (child / "SKILL.md").exists():
308
+ out.append(child.name)
309
+ elif child.is_file() and child.suffix == ".md":
310
+ out.append(child.stem)
311
+ return out
312
+
313
+
314
+ def format_skill_block(
315
+ skills: list[str], home: str | Path | None = None,
316
+ ) -> str:
317
+ """Build the system_prompt snippet that tells the worker which skills it
318
+ should reach for. Empty list → empty string (worker uses ambient skills).
319
+
320
+ Output shape:
321
+
322
+ ## Skills available
323
+
324
+ You have these OmegaOS skills available — invoke them as slash
325
+ commands when applicable:
326
+
327
+ /pursue <verify-cmd> <intent> — goal-driven loop
328
+ /codeaudit --files=... — forensic code audit
329
+ ...
330
+
331
+ Prefer these over ad-hoc Bash whenever they fit. Do not paraphrase
332
+ an audit protocol into raw prompts.
333
+ """
334
+ if not skills:
335
+ return ""
336
+
337
+ # Build short descriptions from the SSOT SKILL.md if available; otherwise
338
+ # we just list the names.
339
+ descs: dict[str, str] = {}
340
+ if home is not None:
341
+ root = Path(home) / "Agentik_SSOT" / "skills"
342
+ for s in skills:
343
+ md = root / s / "SKILL.md"
344
+ if not md.is_file():
345
+ md = root / f"{s}.md"
346
+ if md.is_file():
347
+ d = _extract_description(md)
348
+ if d:
349
+ descs[s] = d
350
+
351
+ lines = ["", "## Skills available", ""]
352
+ lines.append(
353
+ "You have these OmegaOS skills available — invoke them as slash"
354
+ )
355
+ lines.append("commands when applicable:")
356
+ lines.append("")
357
+ for s in skills:
358
+ desc = descs.get(s, "")
359
+ if desc:
360
+ # Truncate to one line for compactness.
361
+ desc_line = desc.replace("\n", " ").strip()
362
+ if len(desc_line) > 110:
363
+ desc_line = desc_line[:107] + "..."
364
+ lines.append(f" /{s} — {desc_line}")
365
+ else:
366
+ lines.append(f" /{s}")
367
+ lines.append("")
368
+ lines.append(
369
+ "Prefer these over ad-hoc Bash whenever they fit. Do not paraphrase"
370
+ )
371
+ lines.append("an audit protocol into raw prompts — invoke the slash command.")
372
+ return "\n".join(lines)
373
+
374
+
375
+ def _extract_description(skill_md: Path) -> str:
376
+ """Pull the `description:` field from a SKILL.md frontmatter."""
377
+ try:
378
+ text = skill_md.read_text()
379
+ except OSError:
380
+ return ""
381
+ if not text.startswith("---"):
382
+ return ""
383
+ # Manual minimal YAML — avoid the PyYAML dep on this hot path.
384
+ body = text.split("---", 2)[1] if text.count("---") >= 2 else ""
385
+ for line in body.splitlines():
386
+ if line.startswith("description:"):
387
+ return line.split(":", 1)[1].strip().strip('"').strip("'")
388
+ return ""
@@ -0,0 +1,81 @@
1
+ """`omega smoke` — 30-second post-install end-to-end check.
2
+
3
+ Runs a synthetic mission against the live engine using the deterministic
4
+ MockProvider. The mission is intentionally tiny: one Oracle, one Worker,
5
+ one Verifier. Pass = events flow + .done.json written + audit gate
6
+ returned VERIFIED. Fail = something in the orchestration stack is
7
+ broken and the operator's first real mission would too.
8
+
9
+ Exit code 0 on smoke pass, 1 on fail. Designed for CI / cron / install
10
+ post-step.
11
+ """
12
+ from __future__ import annotations
13
+
14
+ import os
15
+ import time
16
+ from dataclasses import dataclass, field
17
+ from pathlib import Path
18
+ from typing import Any
19
+
20
+
21
+ @dataclass
22
+ class SmokeResult:
23
+ passed: bool
24
+ elapsed_ms: int
25
+ mission_id: str = ""
26
+ final_state: str = ""
27
+ events_recorded: int = 0
28
+ done_files_written: int = 0
29
+ detail: str = ""
30
+
31
+
32
+ def run_smoke(*, omega_home: str | Path | None = None) -> SmokeResult:
33
+ """One synthetic mission. Always uses MockProvider — no API keys needed.
34
+
35
+ The goal is "the orchestration stack itself works", not "your API
36
+ keys are valid" (that's ``omega validate providers``).
37
+ """
38
+ home = Path(omega_home or os.environ.get("OMEGA_HOME")
39
+ or Path.home() / "Omega")
40
+ start = time.time()
41
+ try:
42
+ from omega_engine.audit import AuditGate
43
+ from omega_engine.bus import EventBus
44
+ from omega_engine.executor import Executor
45
+ from omega_engine.provider import MockProvider
46
+ from omega_engine.router import ModelRouter
47
+ from omega_engine.store import SQLiteStore
48
+
49
+ store_path = home / "Agentik_Runtime" / "eventlog" / "omega.db"
50
+ store_path.parent.mkdir(parents=True, exist_ok=True)
51
+ store = SQLiteStore(store_path)
52
+ bus = EventBus(store)
53
+ router = ModelRouter.single(MockProvider())
54
+ executor = Executor(store, bus, router, AuditGate(),
55
+ partial_policy="accept_partial")
56
+ outcome = executor.run_mission(
57
+ "OmegaOS smoke test — synthetic mission, no real work expected",
58
+ root_role="oracle",
59
+ )
60
+ events = store.events_for(outcome.root.id)
61
+ # how many .done.json files landed in the per-task session dirs
62
+ sess = home / "Agentik_Runtime" / "sessions"
63
+ done = sum(1 for p in sess.rglob(".done.json")) if sess.is_dir() else 0
64
+ store.close()
65
+
66
+ return SmokeResult(
67
+ passed=outcome.verified,
68
+ elapsed_ms=int((time.time() - start) * 1000),
69
+ mission_id=outcome.mission_id,
70
+ final_state=outcome.final_state.value,
71
+ events_recorded=len(events),
72
+ done_files_written=done,
73
+ detail=("orchestration stack healthy" if outcome.verified
74
+ else f"mission ended {outcome.final_state.value}"),
75
+ )
76
+ except Exception as exc: # noqa: BLE001
77
+ return SmokeResult(
78
+ passed=False,
79
+ elapsed_ms=int((time.time() - start) * 1000),
80
+ detail=f"smoke crashed: {exc}"[:300],
81
+ )