@trac3er/oh-my-god 2.0.7 → 2.0.9

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 (400) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.claude-plugin/scripts/uninstall.sh +1 -1
  4. package/.gemini/settings.json +11 -0
  5. package/.kimi/mcp.json +11 -0
  6. package/CHANGELOG.md +17 -0
  7. package/OMG-setup.sh +1 -1
  8. package/OMG_COMPAT_CONTRACT.md +14 -1
  9. package/README.md +2 -1
  10. package/artifacts/release/.agents/skills/omg/AGENTS.fragment.md +7 -1
  11. package/artifacts/release/.agents/skills/omg/claim-judge/SKILL.md +11 -0
  12. package/artifacts/release/.agents/skills/omg/claim-judge/openai.yaml +13 -0
  13. package/artifacts/release/.agents/skills/omg/codex-rules.md +4 -0
  14. package/artifacts/release/.agents/skills/omg/plan-council/SKILL.md +11 -0
  15. package/artifacts/release/.agents/skills/omg/plan-council/openai.yaml +12 -0
  16. package/artifacts/release/.agents/skills/omg/proof-gate/SKILL.md +11 -0
  17. package/artifacts/release/.agents/skills/omg/proof-gate/openai.yaml +13 -0
  18. package/artifacts/release/.agents/skills/omg/test-intent-lock/SKILL.md +11 -0
  19. package/artifacts/release/.agents/skills/omg/test-intent-lock/openai.yaml +13 -0
  20. package/artifacts/release/.claude-plugin/marketplace.json +3 -3
  21. package/artifacts/release/.claude-plugin/plugin.json +1 -1
  22. package/artifacts/release/.mcp.json +0 -22
  23. package/artifacts/release/OMG_COMPAT_CONTRACT.md +8 -1
  24. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/AGENTS.fragment.md +7 -1
  25. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/claim-judge/SKILL.md +11 -0
  26. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/claim-judge/openai.yaml +13 -0
  27. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/codex-rules.md +4 -0
  28. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/plan-council/SKILL.md +11 -0
  29. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/plan-council/openai.yaml +12 -0
  30. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/proof-gate/SKILL.md +11 -0
  31. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/proof-gate/openai.yaml +13 -0
  32. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/test-intent-lock/SKILL.md +11 -0
  33. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/test-intent-lock/openai.yaml +13 -0
  34. package/artifacts/release/dist/enterprise/bundle/.claude-plugin/marketplace.json +36 -0
  35. package/artifacts/release/dist/enterprise/bundle/.claude-plugin/plugin.json +23 -0
  36. package/artifacts/release/dist/enterprise/bundle/.mcp.json +18 -0
  37. package/artifacts/release/dist/enterprise/bundle/OMG_COMPAT_CONTRACT.md +8 -1
  38. package/artifacts/release/dist/enterprise/bundle/plugins/advanced/commands/OMG:code-review.md +114 -0
  39. package/artifacts/release/dist/enterprise/bundle/plugins/advanced/commands/OMG:deep-plan.md +266 -0
  40. package/artifacts/release/dist/enterprise/bundle/plugins/advanced/commands/OMG:handoff.md +115 -0
  41. package/artifacts/release/dist/enterprise/bundle/plugins/advanced/commands/OMG:learn.md +110 -0
  42. package/artifacts/release/dist/enterprise/bundle/plugins/advanced/commands/OMG:maintainer.md +31 -0
  43. package/artifacts/release/dist/enterprise/bundle/plugins/advanced/commands/OMG:ralph-start.md +43 -0
  44. package/artifacts/release/dist/enterprise/bundle/plugins/advanced/commands/OMG:ralph-stop.md +23 -0
  45. package/artifacts/release/dist/enterprise/bundle/plugins/advanced/commands/OMG:security-review.md +16 -0
  46. package/artifacts/release/dist/enterprise/bundle/plugins/advanced/commands/OMG:sequential-thinking.md +20 -0
  47. package/artifacts/release/dist/enterprise/bundle/plugins/advanced/commands/OMG:ship.md +46 -0
  48. package/artifacts/release/dist/enterprise/bundle/plugins/advanced/plugin.json +87 -0
  49. package/artifacts/release/dist/enterprise/bundle/registry/bundles/algorithms.yaml +1 -1
  50. package/artifacts/release/dist/enterprise/bundle/registry/bundles/api-twin.yaml +1 -1
  51. package/artifacts/release/dist/enterprise/bundle/registry/bundles/claim-judge.yaml +49 -0
  52. package/artifacts/release/dist/enterprise/bundle/registry/bundles/control-plane.yaml +1 -1
  53. package/artifacts/release/dist/enterprise/bundle/registry/bundles/data-lineage.yaml +1 -1
  54. package/artifacts/release/dist/enterprise/bundle/registry/bundles/delta-classifier.yaml +1 -1
  55. package/artifacts/release/dist/enterprise/bundle/registry/bundles/eval-gate.yaml +1 -1
  56. package/artifacts/release/dist/enterprise/bundle/registry/bundles/health.yaml +1 -1
  57. package/artifacts/release/dist/enterprise/bundle/registry/bundles/hook-governor.yaml +1 -1
  58. package/artifacts/release/dist/enterprise/bundle/registry/bundles/incident-replay.yaml +1 -1
  59. package/artifacts/release/dist/enterprise/bundle/registry/bundles/lsp-pack.yaml +1 -1
  60. package/artifacts/release/dist/enterprise/bundle/registry/bundles/mcp-fabric.yaml +1 -1
  61. package/artifacts/release/dist/enterprise/bundle/registry/bundles/plan-council.yaml +51 -0
  62. package/artifacts/release/dist/enterprise/bundle/registry/bundles/preflight.yaml +1 -1
  63. package/artifacts/release/dist/enterprise/bundle/registry/bundles/proof-gate.yaml +49 -0
  64. package/artifacts/release/dist/enterprise/bundle/registry/bundles/remote-supervisor.yaml +1 -1
  65. package/artifacts/release/dist/enterprise/bundle/registry/bundles/robotics.yaml +1 -1
  66. package/artifacts/release/dist/enterprise/bundle/registry/bundles/secure-worktree-pipeline.yaml +1 -1
  67. package/artifacts/release/dist/enterprise/bundle/registry/bundles/security-check.yaml +1 -1
  68. package/artifacts/release/dist/enterprise/bundle/registry/bundles/test-intent-lock.yaml +49 -0
  69. package/artifacts/release/dist/enterprise/bundle/registry/bundles/tracebank.yaml +1 -1
  70. package/artifacts/release/dist/enterprise/bundle/registry/bundles/vision.yaml +1 -1
  71. package/artifacts/release/dist/enterprise/bundle/registry/omg-capability.schema.json +1 -1
  72. package/artifacts/release/dist/enterprise/bundle/settings.json +598 -0
  73. package/artifacts/release/dist/enterprise/manifest.json +131 -23
  74. package/artifacts/release/dist/public/bundle/.agents/skills/omg/AGENTS.fragment.md +55 -4
  75. package/artifacts/release/dist/public/bundle/.agents/skills/omg/claim-judge/SKILL.md +11 -0
  76. package/artifacts/release/dist/public/bundle/.agents/skills/omg/claim-judge/openai.yaml +13 -0
  77. package/artifacts/release/dist/public/bundle/.agents/skills/omg/codex-rules.md +33 -0
  78. package/artifacts/release/dist/public/bundle/.agents/skills/omg/plan-council/SKILL.md +11 -0
  79. package/artifacts/release/dist/public/bundle/.agents/skills/omg/plan-council/openai.yaml +12 -0
  80. package/artifacts/release/dist/public/bundle/.agents/skills/omg/proof-gate/SKILL.md +11 -0
  81. package/artifacts/release/dist/public/bundle/.agents/skills/omg/proof-gate/openai.yaml +13 -0
  82. package/artifacts/release/dist/public/bundle/.agents/skills/omg/test-intent-lock/SKILL.md +11 -0
  83. package/artifacts/release/dist/public/bundle/.agents/skills/omg/test-intent-lock/openai.yaml +13 -0
  84. package/artifacts/release/dist/public/bundle/.claude-plugin/marketplace.json +3 -3
  85. package/artifacts/release/dist/public/bundle/.claude-plugin/plugin.json +1 -1
  86. package/artifacts/release/dist/public/bundle/.mcp.json +0 -22
  87. package/artifacts/release/dist/public/bundle/OMG_COMPAT_CONTRACT.md +8 -1
  88. package/artifacts/release/dist/public/bundle/plugins/advanced/commands/OMG:code-review.md +114 -0
  89. package/artifacts/release/dist/public/bundle/plugins/advanced/commands/OMG:deep-plan.md +266 -0
  90. package/artifacts/release/dist/public/bundle/plugins/advanced/commands/OMG:handoff.md +115 -0
  91. package/artifacts/release/dist/public/bundle/plugins/advanced/commands/OMG:learn.md +110 -0
  92. package/artifacts/release/dist/public/bundle/plugins/advanced/commands/OMG:maintainer.md +31 -0
  93. package/artifacts/release/dist/public/bundle/plugins/advanced/commands/OMG:ralph-start.md +43 -0
  94. package/artifacts/release/dist/public/bundle/plugins/advanced/commands/OMG:ralph-stop.md +23 -0
  95. package/artifacts/release/dist/public/bundle/plugins/advanced/commands/OMG:security-review.md +16 -0
  96. package/artifacts/release/dist/public/bundle/plugins/advanced/commands/OMG:sequential-thinking.md +20 -0
  97. package/artifacts/release/dist/public/bundle/plugins/advanced/commands/OMG:ship.md +46 -0
  98. package/artifacts/release/dist/public/bundle/plugins/advanced/plugin.json +87 -0
  99. package/artifacts/release/dist/public/bundle/registry/bundles/algorithms.yaml +1 -1
  100. package/artifacts/release/dist/public/bundle/registry/bundles/api-twin.yaml +1 -1
  101. package/artifacts/release/dist/public/bundle/registry/bundles/claim-judge.yaml +49 -0
  102. package/artifacts/release/dist/public/bundle/registry/bundles/control-plane.yaml +1 -1
  103. package/artifacts/release/dist/public/bundle/registry/bundles/data-lineage.yaml +1 -1
  104. package/artifacts/release/dist/public/bundle/registry/bundles/delta-classifier.yaml +1 -1
  105. package/artifacts/release/dist/public/bundle/registry/bundles/eval-gate.yaml +1 -1
  106. package/artifacts/release/dist/public/bundle/registry/bundles/health.yaml +1 -1
  107. package/artifacts/release/dist/public/bundle/registry/bundles/hook-governor.yaml +1 -1
  108. package/artifacts/release/dist/public/bundle/registry/bundles/incident-replay.yaml +1 -1
  109. package/artifacts/release/dist/public/bundle/registry/bundles/lsp-pack.yaml +1 -1
  110. package/artifacts/release/dist/public/bundle/registry/bundles/mcp-fabric.yaml +1 -1
  111. package/artifacts/release/dist/public/bundle/registry/bundles/plan-council.yaml +51 -0
  112. package/artifacts/release/dist/public/bundle/registry/bundles/preflight.yaml +1 -1
  113. package/artifacts/release/dist/public/bundle/registry/bundles/proof-gate.yaml +49 -0
  114. package/artifacts/release/dist/public/bundle/registry/bundles/remote-supervisor.yaml +1 -1
  115. package/artifacts/release/dist/public/bundle/registry/bundles/robotics.yaml +1 -1
  116. package/artifacts/release/dist/public/bundle/registry/bundles/secure-worktree-pipeline.yaml +1 -1
  117. package/artifacts/release/dist/public/bundle/registry/bundles/security-check.yaml +1 -1
  118. package/artifacts/release/dist/public/bundle/registry/bundles/test-intent-lock.yaml +49 -0
  119. package/artifacts/release/dist/public/bundle/registry/bundles/tracebank.yaml +1 -1
  120. package/artifacts/release/dist/public/bundle/registry/bundles/vision.yaml +1 -1
  121. package/artifacts/release/dist/public/bundle/registry/omg-capability.schema.json +1 -1
  122. package/artifacts/release/dist/public/bundle/settings.json +76 -4
  123. package/artifacts/release/dist/public/manifest.json +122 -26
  124. package/artifacts/release/plugins/advanced/commands/OMG:code-review.md +114 -0
  125. package/artifacts/release/plugins/advanced/commands/OMG:deep-plan.md +266 -0
  126. package/artifacts/release/plugins/advanced/commands/OMG:handoff.md +115 -0
  127. package/artifacts/release/plugins/advanced/commands/OMG:learn.md +110 -0
  128. package/artifacts/release/plugins/advanced/commands/OMG:maintainer.md +31 -0
  129. package/artifacts/release/plugins/advanced/commands/OMG:ralph-start.md +43 -0
  130. package/artifacts/release/plugins/advanced/commands/OMG:ralph-stop.md +23 -0
  131. package/artifacts/release/plugins/advanced/commands/OMG:security-review.md +16 -0
  132. package/artifacts/release/plugins/advanced/commands/OMG:sequential-thinking.md +20 -0
  133. package/artifacts/release/plugins/advanced/commands/OMG:ship.md +46 -0
  134. package/artifacts/release/plugins/advanced/plugin.json +87 -0
  135. package/artifacts/release/registry/bundles/algorithms.yaml +1 -1
  136. package/artifacts/release/registry/bundles/api-twin.yaml +1 -1
  137. package/artifacts/release/registry/bundles/claim-judge.yaml +49 -0
  138. package/artifacts/release/registry/bundles/control-plane.yaml +1 -1
  139. package/artifacts/release/registry/bundles/data-lineage.yaml +1 -1
  140. package/artifacts/release/registry/bundles/delta-classifier.yaml +1 -1
  141. package/artifacts/release/registry/bundles/eval-gate.yaml +1 -1
  142. package/artifacts/release/registry/bundles/health.yaml +1 -1
  143. package/artifacts/release/registry/bundles/hook-governor.yaml +1 -1
  144. package/artifacts/release/registry/bundles/incident-replay.yaml +1 -1
  145. package/artifacts/release/registry/bundles/lsp-pack.yaml +1 -1
  146. package/artifacts/release/registry/bundles/mcp-fabric.yaml +1 -1
  147. package/artifacts/release/registry/bundles/plan-council.yaml +51 -0
  148. package/artifacts/release/registry/bundles/preflight.yaml +1 -1
  149. package/artifacts/release/registry/bundles/proof-gate.yaml +49 -0
  150. package/artifacts/release/registry/bundles/remote-supervisor.yaml +1 -1
  151. package/artifacts/release/registry/bundles/robotics.yaml +1 -1
  152. package/artifacts/release/registry/bundles/secure-worktree-pipeline.yaml +1 -1
  153. package/artifacts/release/registry/bundles/security-check.yaml +1 -1
  154. package/artifacts/release/registry/bundles/test-intent-lock.yaml +49 -0
  155. package/artifacts/release/registry/bundles/tracebank.yaml +1 -1
  156. package/artifacts/release/registry/bundles/vision.yaml +1 -1
  157. package/artifacts/release/registry/omg-capability.schema.json +1 -1
  158. package/artifacts/release/settings.json +7 -3
  159. package/build/lib/commands/OMG:forge.md +92 -0
  160. package/build/lib/commands/OMG:mode.md +13 -13
  161. package/build/lib/commands/OMG:session-branch.md +17 -1
  162. package/build/lib/commands/OMG:session-fork.md +5 -1
  163. package/build/lib/commands/OMG:session-merge.md +5 -1
  164. package/build/lib/control_plane/openapi.yaml +1 -1
  165. package/build/lib/control_plane/server.py +4 -0
  166. package/build/lib/control_plane/service.py +55 -0
  167. package/build/lib/hooks/setup_wizard.py +21 -1
  168. package/build/lib/hooks/shadow_manager.py +25 -2
  169. package/build/lib/hooks/state_migration.py +3 -0
  170. package/build/lib/plugins/README.md +1 -1
  171. package/build/lib/plugins/advanced/commands/OMG:deep-plan.md +2 -1
  172. package/build/lib/plugins/advanced/plugin.json +1 -1
  173. package/build/lib/plugins/core/plugin.json +1 -1
  174. package/build/lib/plugins/dephealth/cve_scanner.py +91 -0
  175. package/build/lib/plugins/dephealth/vuln_analyzer.py +7 -0
  176. package/build/lib/registry/bundles/algorithms.yaml +1 -1
  177. package/build/lib/registry/bundles/api-twin.yaml +1 -1
  178. package/build/lib/registry/bundles/claim-judge.yaml +1 -1
  179. package/build/lib/registry/bundles/control-plane.yaml +1 -1
  180. package/build/lib/registry/bundles/data-lineage.yaml +1 -1
  181. package/build/lib/registry/bundles/delta-classifier.yaml +1 -1
  182. package/build/lib/registry/bundles/eval-gate.yaml +1 -1
  183. package/build/lib/registry/bundles/health.yaml +1 -1
  184. package/build/lib/registry/bundles/hook-governor.yaml +1 -1
  185. package/build/lib/registry/bundles/incident-replay.yaml +1 -1
  186. package/build/lib/registry/bundles/lsp-pack.yaml +1 -1
  187. package/build/lib/registry/bundles/mcp-fabric.yaml +1 -1
  188. package/build/lib/registry/bundles/plan-council.yaml +2 -2
  189. package/build/lib/registry/bundles/preflight.yaml +1 -1
  190. package/build/lib/registry/bundles/proof-gate.yaml +1 -1
  191. package/build/lib/registry/bundles/remote-supervisor.yaml +1 -1
  192. package/build/lib/registry/bundles/robotics.yaml +1 -1
  193. package/build/lib/registry/bundles/secure-worktree-pipeline.yaml +1 -1
  194. package/build/lib/registry/bundles/security-check.yaml +1 -1
  195. package/build/lib/registry/bundles/test-intent-lock.yaml +1 -1
  196. package/build/lib/registry/bundles/tracebank.yaml +1 -1
  197. package/build/lib/registry/bundles/vision.yaml +1 -1
  198. package/build/lib/registry/omg-capability.schema.json +84 -2
  199. package/build/lib/runtime/adoption.py +13 -5
  200. package/build/lib/runtime/api_twin.py +4 -4
  201. package/build/lib/runtime/artifact_parsers.py +161 -0
  202. package/build/lib/runtime/background_verification.py +48 -0
  203. package/build/lib/runtime/claim_judge.py +184 -7
  204. package/build/lib/runtime/contract_compiler.py +189 -9
  205. package/build/lib/runtime/ecosystem.py +1 -1
  206. package/build/lib/runtime/evidence_query.py +203 -0
  207. package/build/lib/runtime/mcp_memory_server.py +1 -1
  208. package/build/lib/runtime/omg_compat_contract_snapshot.json +2 -2
  209. package/build/lib/runtime/omg_contract_snapshot.json +2 -2
  210. package/build/lib/runtime/omg_mcp_server.py +19 -0
  211. package/build/lib/runtime/playwright_adapter.py +39 -0
  212. package/build/lib/runtime/proof_chain.py +136 -8
  213. package/build/lib/runtime/proof_gate.py +102 -0
  214. package/build/lib/runtime/providers/gemini_provider.py +7 -0
  215. package/build/lib/runtime/providers/kimi_provider.py +7 -0
  216. package/build/lib/runtime/repro_pack.py +292 -0
  217. package/build/lib/runtime/runtime_profile.py +87 -15
  218. package/build/lib/runtime/security_check.py +86 -3
  219. package/build/lib/runtime/test_intent_lock.py +47 -0
  220. package/build/lib/runtime/tracebank.py +33 -3
  221. package/build/lib/runtime/verification_loop.py +73 -0
  222. package/commands/OMG:forge.md +92 -0
  223. package/commands/OMG:mode.md +13 -13
  224. package/commands/OMG:session-branch.md +17 -1
  225. package/commands/OMG:session-fork.md +5 -1
  226. package/commands/OMG:session-merge.md +5 -1
  227. package/control_plane/openapi.yaml +1 -1
  228. package/control_plane/server.py +4 -0
  229. package/control_plane/service.py +55 -0
  230. package/dist/enterprise/bundle/.agents/skills/omg/AGENTS.fragment.md +7 -1
  231. package/dist/enterprise/bundle/.agents/skills/omg/claim-judge/SKILL.md +11 -0
  232. package/dist/enterprise/bundle/.agents/skills/omg/claim-judge/openai.yaml +13 -0
  233. package/dist/enterprise/bundle/.agents/skills/omg/codex-rules.md +4 -0
  234. package/dist/enterprise/bundle/.agents/skills/omg/plan-council/SKILL.md +11 -0
  235. package/dist/enterprise/bundle/.agents/skills/omg/plan-council/openai.yaml +12 -0
  236. package/dist/enterprise/bundle/.agents/skills/omg/proof-gate/SKILL.md +11 -0
  237. package/dist/enterprise/bundle/.agents/skills/omg/proof-gate/openai.yaml +13 -0
  238. package/dist/enterprise/bundle/.agents/skills/omg/test-intent-lock/SKILL.md +11 -0
  239. package/dist/enterprise/bundle/.agents/skills/omg/test-intent-lock/openai.yaml +13 -0
  240. package/dist/enterprise/bundle/.claude-plugin/marketplace.json +3 -3
  241. package/dist/enterprise/bundle/.claude-plugin/plugin.json +1 -1
  242. package/dist/enterprise/bundle/.gemini/settings.json +11 -0
  243. package/dist/enterprise/bundle/.kimi/mcp.json +11 -0
  244. package/dist/enterprise/bundle/.mcp.json +0 -22
  245. package/dist/enterprise/bundle/OMG_COMPAT_CONTRACT.md +14 -1
  246. package/dist/enterprise/bundle/plugins/advanced/commands/OMG:deep-plan.md +51 -6
  247. package/dist/enterprise/bundle/plugins/advanced/commands/OMG:ship.md +1 -1
  248. package/dist/enterprise/bundle/plugins/advanced/plugin.json +1 -1
  249. package/dist/enterprise/bundle/registry/bundles/algorithms.yaml +1 -1
  250. package/dist/enterprise/bundle/registry/bundles/api-twin.yaml +1 -1
  251. package/dist/enterprise/bundle/registry/bundles/claim-judge.yaml +49 -0
  252. package/dist/enterprise/bundle/registry/bundles/control-plane.yaml +1 -1
  253. package/dist/enterprise/bundle/registry/bundles/data-lineage.yaml +1 -1
  254. package/dist/enterprise/bundle/registry/bundles/delta-classifier.yaml +1 -1
  255. package/dist/enterprise/bundle/registry/bundles/eval-gate.yaml +1 -1
  256. package/dist/enterprise/bundle/registry/bundles/health.yaml +1 -1
  257. package/dist/enterprise/bundle/registry/bundles/hook-governor.yaml +1 -1
  258. package/dist/enterprise/bundle/registry/bundles/incident-replay.yaml +1 -1
  259. package/dist/enterprise/bundle/registry/bundles/lsp-pack.yaml +1 -1
  260. package/dist/enterprise/bundle/registry/bundles/mcp-fabric.yaml +1 -1
  261. package/dist/enterprise/bundle/registry/bundles/plan-council.yaml +51 -0
  262. package/dist/enterprise/bundle/registry/bundles/preflight.yaml +1 -1
  263. package/dist/enterprise/bundle/registry/bundles/proof-gate.yaml +49 -0
  264. package/dist/enterprise/bundle/registry/bundles/remote-supervisor.yaml +1 -1
  265. package/dist/enterprise/bundle/registry/bundles/robotics.yaml +1 -1
  266. package/dist/enterprise/bundle/registry/bundles/secure-worktree-pipeline.yaml +1 -1
  267. package/dist/enterprise/bundle/registry/bundles/security-check.yaml +1 -1
  268. package/dist/enterprise/bundle/registry/bundles/test-intent-lock.yaml +49 -0
  269. package/dist/enterprise/bundle/registry/bundles/tracebank.yaml +1 -1
  270. package/dist/enterprise/bundle/registry/bundles/vision.yaml +1 -1
  271. package/dist/enterprise/bundle/registry/omg-capability.schema.json +84 -2
  272. package/dist/enterprise/bundle/settings.json +8 -3
  273. package/dist/enterprise/manifest.json +92 -30
  274. package/dist/public/bundle/.agents/skills/omg/AGENTS.fragment.md +7 -1
  275. package/dist/public/bundle/.agents/skills/omg/claim-judge/SKILL.md +11 -0
  276. package/dist/public/bundle/.agents/skills/omg/claim-judge/openai.yaml +13 -0
  277. package/dist/public/bundle/.agents/skills/omg/codex-rules.md +4 -0
  278. package/dist/public/bundle/.agents/skills/omg/incident-replay/SKILL.md +1 -1
  279. package/dist/public/bundle/.agents/skills/omg/incident-replay/openai.yaml +1 -1
  280. package/dist/public/bundle/.agents/skills/omg/lsp-pack/SKILL.md +1 -1
  281. package/dist/public/bundle/.agents/skills/omg/lsp-pack/openai.yaml +1 -1
  282. package/dist/public/bundle/.agents/skills/omg/mcp-fabric/SKILL.md +1 -1
  283. package/dist/public/bundle/.agents/skills/omg/mcp-fabric/openai.yaml +1 -1
  284. package/dist/public/bundle/.agents/skills/omg/plan-council/SKILL.md +11 -0
  285. package/dist/public/bundle/.agents/skills/omg/plan-council/openai.yaml +12 -0
  286. package/dist/public/bundle/.agents/skills/omg/preflight/SKILL.md +1 -1
  287. package/dist/public/bundle/.agents/skills/omg/preflight/openai.yaml +1 -1
  288. package/dist/public/bundle/.agents/skills/omg/proof-gate/SKILL.md +11 -0
  289. package/dist/public/bundle/.agents/skills/omg/proof-gate/openai.yaml +13 -0
  290. package/dist/public/bundle/.agents/skills/omg/remote-supervisor/SKILL.md +1 -1
  291. package/dist/public/bundle/.agents/skills/omg/remote-supervisor/openai.yaml +1 -1
  292. package/dist/public/bundle/.agents/skills/omg/robotics/SKILL.md +1 -1
  293. package/dist/public/bundle/.agents/skills/omg/robotics/openai.yaml +1 -1
  294. package/dist/public/bundle/.agents/skills/omg/secure-worktree-pipeline/SKILL.md +1 -1
  295. package/dist/public/bundle/.agents/skills/omg/secure-worktree-pipeline/openai.yaml +1 -1
  296. package/dist/public/bundle/.agents/skills/omg/security-check/SKILL.md +1 -1
  297. package/dist/public/bundle/.agents/skills/omg/security-check/openai.yaml +1 -1
  298. package/dist/public/bundle/.agents/skills/omg/test-intent-lock/SKILL.md +11 -0
  299. package/dist/public/bundle/.agents/skills/omg/test-intent-lock/openai.yaml +13 -0
  300. package/dist/public/bundle/.agents/skills/omg/tracebank/SKILL.md +1 -1
  301. package/dist/public/bundle/.agents/skills/omg/tracebank/openai.yaml +1 -1
  302. package/dist/public/bundle/.agents/skills/omg/vision/SKILL.md +1 -1
  303. package/dist/public/bundle/.agents/skills/omg/vision/openai.yaml +1 -1
  304. package/dist/public/bundle/.claude-plugin/marketplace.json +3 -3
  305. package/dist/public/bundle/.claude-plugin/plugin.json +1 -1
  306. package/dist/public/bundle/.gemini/settings.json +11 -0
  307. package/dist/public/bundle/.kimi/mcp.json +11 -0
  308. package/dist/public/bundle/.mcp.json +0 -22
  309. package/dist/public/bundle/OMG_COMPAT_CONTRACT.md +14 -1
  310. package/dist/public/bundle/plugins/advanced/commands/OMG:deep-plan.md +51 -6
  311. package/dist/public/bundle/plugins/advanced/commands/OMG:ship.md +1 -1
  312. package/dist/public/bundle/plugins/advanced/plugin.json +1 -1
  313. package/dist/public/bundle/registry/bundles/algorithms.yaml +1 -1
  314. package/dist/public/bundle/registry/bundles/api-twin.yaml +1 -1
  315. package/dist/public/bundle/registry/bundles/claim-judge.yaml +49 -0
  316. package/dist/public/bundle/registry/bundles/control-plane.yaml +1 -1
  317. package/dist/public/bundle/registry/bundles/data-lineage.yaml +1 -1
  318. package/dist/public/bundle/registry/bundles/delta-classifier.yaml +1 -1
  319. package/dist/public/bundle/registry/bundles/eval-gate.yaml +1 -1
  320. package/dist/public/bundle/registry/bundles/health.yaml +1 -1
  321. package/dist/public/bundle/registry/bundles/hook-governor.yaml +1 -1
  322. package/dist/public/bundle/registry/bundles/incident-replay.yaml +1 -1
  323. package/dist/public/bundle/registry/bundles/lsp-pack.yaml +1 -1
  324. package/dist/public/bundle/registry/bundles/mcp-fabric.yaml +1 -1
  325. package/dist/public/bundle/registry/bundles/plan-council.yaml +51 -0
  326. package/dist/public/bundle/registry/bundles/preflight.yaml +1 -1
  327. package/dist/public/bundle/registry/bundles/proof-gate.yaml +49 -0
  328. package/dist/public/bundle/registry/bundles/remote-supervisor.yaml +1 -1
  329. package/dist/public/bundle/registry/bundles/robotics.yaml +1 -1
  330. package/dist/public/bundle/registry/bundles/secure-worktree-pipeline.yaml +1 -1
  331. package/dist/public/bundle/registry/bundles/security-check.yaml +1 -1
  332. package/dist/public/bundle/registry/bundles/test-intent-lock.yaml +49 -0
  333. package/dist/public/bundle/registry/bundles/tracebank.yaml +1 -1
  334. package/dist/public/bundle/registry/bundles/vision.yaml +1 -1
  335. package/dist/public/bundle/registry/omg-capability.schema.json +84 -2
  336. package/dist/public/bundle/settings.json +9 -4
  337. package/dist/public/manifest.json +112 -50
  338. package/docs/proof.md +7 -6
  339. package/hooks/setup_wizard.py +21 -1
  340. package/hooks/shadow_manager.py +25 -2
  341. package/hooks/state_migration.py +3 -0
  342. package/hud/omg-hud.mjs +66 -3
  343. package/package.json +1 -1
  344. package/plugins/README.md +1 -1
  345. package/plugins/advanced/commands/OMG:deep-plan.md +2 -1
  346. package/plugins/advanced/plugin.json +1 -1
  347. package/plugins/core/plugin.json +1 -1
  348. package/plugins/dephealth/cve_scanner.py +91 -0
  349. package/plugins/dephealth/vuln_analyzer.py +7 -0
  350. package/pyproject.toml +5 -1
  351. package/registry/bundles/algorithms.yaml +1 -1
  352. package/registry/bundles/api-twin.yaml +1 -1
  353. package/registry/bundles/claim-judge.yaml +1 -1
  354. package/registry/bundles/control-plane.yaml +1 -1
  355. package/registry/bundles/data-lineage.yaml +1 -1
  356. package/registry/bundles/delta-classifier.yaml +1 -1
  357. package/registry/bundles/eval-gate.yaml +1 -1
  358. package/registry/bundles/health.yaml +1 -1
  359. package/registry/bundles/hook-governor.yaml +1 -1
  360. package/registry/bundles/incident-replay.yaml +1 -1
  361. package/registry/bundles/lsp-pack.yaml +1 -1
  362. package/registry/bundles/mcp-fabric.yaml +1 -1
  363. package/registry/bundles/plan-council.yaml +2 -2
  364. package/registry/bundles/preflight.yaml +1 -1
  365. package/registry/bundles/proof-gate.yaml +1 -1
  366. package/registry/bundles/remote-supervisor.yaml +1 -1
  367. package/registry/bundles/robotics.yaml +1 -1
  368. package/registry/bundles/secure-worktree-pipeline.yaml +1 -1
  369. package/registry/bundles/security-check.yaml +1 -1
  370. package/registry/bundles/test-intent-lock.yaml +1 -1
  371. package/registry/bundles/tracebank.yaml +1 -1
  372. package/registry/bundles/vision.yaml +1 -1
  373. package/registry/omg-capability.schema.json +84 -2
  374. package/runtime/adoption.py +13 -5
  375. package/runtime/api_twin.py +4 -4
  376. package/runtime/artifact_parsers.py +161 -0
  377. package/runtime/background_verification.py +48 -0
  378. package/runtime/claim_judge.py +184 -7
  379. package/runtime/contract_compiler.py +189 -9
  380. package/runtime/ecosystem.py +1 -1
  381. package/runtime/evidence_query.py +203 -0
  382. package/runtime/mcp_memory_server.py +1 -1
  383. package/runtime/omg_compat_contract_snapshot.json +2 -2
  384. package/runtime/omg_contract_snapshot.json +2 -2
  385. package/runtime/omg_mcp_server.py +19 -0
  386. package/runtime/playwright_adapter.py +39 -0
  387. package/runtime/proof_chain.py +136 -8
  388. package/runtime/proof_gate.py +102 -0
  389. package/runtime/providers/gemini_provider.py +7 -0
  390. package/runtime/providers/kimi_provider.py +7 -0
  391. package/runtime/repro_pack.py +292 -0
  392. package/runtime/runtime_profile.py +87 -15
  393. package/runtime/security_check.py +86 -3
  394. package/runtime/test_intent_lock.py +47 -0
  395. package/runtime/tracebank.py +33 -3
  396. package/runtime/verification_loop.py +73 -0
  397. package/scripts/omg.py +31 -4
  398. package/settings.json +8 -3
  399. package/tools/python_sandbox.py +9 -6
  400. package/tools/session_snapshot.py +146 -40
@@ -19,6 +19,7 @@ import zipfile
19
19
  import yaml
20
20
 
21
21
  from runtime.asset_loader import resolve_asset, resolve_assets
22
+ from runtime.proof_chain import _normalize_evidence_pack
22
23
  from runtime.adoption import (
23
24
  CANONICAL_MARKETPLACE_ID,
24
25
  CANONICAL_PACKAGE_NAME,
@@ -31,7 +32,7 @@ from runtime.adoption import (
31
32
  CONTRACT_DOC_PATH = Path("OMG_COMPAT_CONTRACT.md")
32
33
  SCHEMA_PATH = Path("registry") / "omg-capability.schema.json"
33
34
  BUNDLES_DIR = Path("registry") / "bundles"
34
- SUPPORTED_HOSTS = ("claude", "codex")
35
+ SUPPORTED_HOSTS = ("claude", "codex", "gemini", "kimi")
35
36
  SUPPORTED_CHANNELS = ("public", "enterprise")
36
37
  DEFAULT_REQUIRED_BUNDLES = (
37
38
  "control-plane",
@@ -57,6 +58,12 @@ DEFAULT_REQUIRED_BUNDLES = (
57
58
  "data-lineage",
58
59
  "remote-supervisor",
59
60
  )
61
+ TRUTH_COUNCIL_BUNDLES = (
62
+ "plan-council",
63
+ "claim-judge",
64
+ "test-intent-lock",
65
+ "proof-gate",
66
+ )
60
67
  REQUIRED_ADVANCED_PLUGIN_ARTIFACTS = (
61
68
  "bundle/plugins/advanced/plugin.json",
62
69
  "bundle/plugins/advanced/commands/OMG:deep-plan.md",
@@ -114,6 +121,25 @@ REQUIRED_CODEX_OUTPUTS = (
114
121
  "codex-rules.md",
115
122
  "codex-mcp.toml",
116
123
  )
124
+ HOST_COMPILED_ARTIFACTS = {
125
+ "claude": (
126
+ ".claude-plugin/plugin.json",
127
+ ".claude-plugin/marketplace.json",
128
+ ".mcp.json",
129
+ "settings.json",
130
+ ),
131
+ "codex": (
132
+ ".agents/skills/omg/AGENTS.fragment.md",
133
+ ".agents/skills/omg/codex-rules.md",
134
+ ".agents/skills/omg/codex-mcp.toml",
135
+ ),
136
+ "gemini": (
137
+ ".gemini/settings.json",
138
+ ),
139
+ "kimi": (
140
+ ".kimi/mcp.json",
141
+ ),
142
+ }
117
143
 
118
144
 
119
145
  def _ensure_list(
@@ -164,7 +190,12 @@ def _validate_host_rule(
164
190
  )
165
191
 
166
192
 
167
- def _validate_policy_model(bundle_id: str, policy_model: Any) -> list[str]:
193
+ def _validate_policy_model(
194
+ bundle_id: str,
195
+ policy_model: Any,
196
+ *,
197
+ bundle_hosts: Iterable[str] = (),
198
+ ) -> list[str]:
168
199
  errors: list[str] = []
169
200
  payload = _ensure_dict(bundle_id=bundle_id, path="policy_model", value=policy_model, errors=errors)
170
201
  if not payload:
@@ -283,6 +314,8 @@ def _validate_policy_model(bundle_id: str, policy_model: Any) -> list[str]:
283
314
  value=payload.get("host_rules", {}),
284
315
  errors=errors,
285
316
  )
317
+ declared_hosts = {str(host).strip() for host in bundle_hosts if str(host).strip()}
318
+
286
319
  _validate_host_rule(
287
320
  bundle_id=bundle_id,
288
321
  host_name="claude",
@@ -297,6 +330,15 @@ def _validate_policy_model(bundle_id: str, policy_model: Any) -> list[str]:
297
330
  required_fields=("compilation_targets", "skills", "agents_fragments", "rules", "automations"),
298
331
  errors=errors,
299
332
  )
333
+ for host_name in ("gemini", "kimi"):
334
+ if host_name in host_rules or host_name in declared_hosts:
335
+ _validate_host_rule(
336
+ bundle_id=bundle_id,
337
+ host_name=host_name,
338
+ host_rule=host_rules.get(host_name),
339
+ required_fields=("compilation_targets", "mcp", "skills", "automations"),
340
+ errors=errors,
341
+ )
300
342
  return errors
301
343
 
302
344
 
@@ -455,7 +497,7 @@ def validate_contract_registry(root_dir: str | Path | None = None) -> dict[str,
455
497
  if bad_hosts:
456
498
  errors.append(f"{bundle_id}: unsupported hosts {bad_hosts}")
457
499
  if "policy_model" in bundle:
458
- errors.extend(_validate_policy_model(bundle_id, bundle.get("policy_model")))
500
+ errors.extend(_validate_policy_model(bundle_id, bundle.get("policy_model"), bundle_hosts=hosts))
459
501
 
460
502
  missing_bundles = [bundle_id for bundle_id in DEFAULT_REQUIRED_BUNDLES if bundle_id not in bundle_ids]
461
503
  for bundle_id in missing_bundles:
@@ -1139,6 +1181,34 @@ def _compile_codex_outputs(
1139
1181
  return artifacts
1140
1182
 
1141
1183
 
1184
+ def _compile_gemini_outputs(output_root: Path, channel: str) -> dict[str, Any]:
1185
+ del channel
1186
+ from runtime.mcp_config_writers import write_gemini_mcp_stdio_config
1187
+
1188
+ config_path = output_root / ".gemini" / "settings.json"
1189
+ write_gemini_mcp_stdio_config(
1190
+ command="python3",
1191
+ args=["-m", "runtime.omg_mcp_server"],
1192
+ server_name="omg-control",
1193
+ config_path=config_path,
1194
+ )
1195
+ return {"host": "gemini", "artifacts": [config_path]}
1196
+
1197
+
1198
+ def _compile_kimi_outputs(output_root: Path, channel: str) -> dict[str, Any]:
1199
+ del channel
1200
+ from runtime.mcp_config_writers import write_kimi_mcp_stdio_config
1201
+
1202
+ config_path = output_root / ".kimi" / "mcp.json"
1203
+ write_kimi_mcp_stdio_config(
1204
+ command="python3",
1205
+ args=["-m", "runtime.omg_mcp_server"],
1206
+ server_name="omg-control",
1207
+ config_path=config_path,
1208
+ )
1209
+ return {"host": "kimi", "artifacts": [config_path]}
1210
+
1211
+
1142
1212
  def _copy_release_bundle(
1143
1213
  *,
1144
1214
  output_root: Path,
@@ -1158,11 +1228,12 @@ def _copy_release_bundle(
1158
1228
  return copied
1159
1229
 
1160
1230
 
1161
- def _build_dist_manifest(output_root: Path, *, channel: str, artifacts: list[Path]) -> Path:
1231
+ def _build_dist_manifest(output_root: Path, *, channel: str, hosts: list[str], artifacts: list[Path]) -> Path:
1162
1232
  dist_root = output_root / "dist" / channel
1163
1233
  payload = {
1164
1234
  "schema": "OmgCompiledArtifactManifest",
1165
1235
  "channel": channel,
1236
+ "hosts": list(hosts),
1166
1237
  "contract_version": CANONICAL_VERSION,
1167
1238
  "artifacts": [
1168
1239
  {
@@ -1263,8 +1334,14 @@ def compile_contract_outputs(
1263
1334
  "artifacts": [],
1264
1335
  }
1265
1336
 
1337
+ if "gemini" in selected_hosts:
1338
+ artifacts.extend(_compile_gemini_outputs(output, channel)["artifacts"])
1339
+
1340
+ if "kimi" in selected_hosts:
1341
+ artifacts.extend(_compile_kimi_outputs(output, channel)["artifacts"])
1342
+
1266
1343
  bundled_artifacts = _copy_release_bundle(output_root=output, channel=channel, artifacts=artifacts)
1267
- manifest_path = _build_dist_manifest(output, channel=channel, artifacts=bundled_artifacts)
1344
+ manifest_path = _build_dist_manifest(output, channel=channel, hosts=selected_hosts, artifacts=bundled_artifacts)
1268
1345
  artifacts.append(manifest_path)
1269
1346
 
1270
1347
  return {
@@ -1285,7 +1362,7 @@ def _provider_statuses() -> dict[str, dict[str, Any]]:
1285
1362
  }
1286
1363
  statuses: dict[str, dict[str, Any]] = {}
1287
1364
 
1288
- for provider_name in ("claude", "codex"):
1365
+ for provider_name in SUPPORTED_HOSTS:
1289
1366
  if provider_name in ready_override:
1290
1367
  statuses[provider_name] = {"ready": True, "source": "env"}
1291
1368
  continue
@@ -1301,10 +1378,15 @@ def _provider_statuses() -> dict[str, dict[str, Any]]:
1301
1378
  }
1302
1379
  continue
1303
1380
 
1304
- import runtime.providers.codex_provider # noqa: F401
1381
+ if provider_name == "gemini":
1382
+ import runtime.providers.gemini_provider # noqa: F401
1383
+ elif provider_name == "kimi":
1384
+ import runtime.providers.kimi_provider # noqa: F401
1385
+ else:
1386
+ import runtime.providers.codex_provider # noqa: F401
1305
1387
  from runtime.cli_provider import get_provider
1306
1388
 
1307
- provider = get_provider("codex")
1389
+ provider = get_provider(provider_name)
1308
1390
  ready = bool(provider and provider.detect())
1309
1391
  statuses[provider_name] = {"ready": ready, "source": "provider"}
1310
1392
 
@@ -1551,6 +1633,12 @@ def _check_provider_host_parity(output_root: Path, providers: dict[str, dict[str
1551
1633
  output_root / ".agents" / "skills" / "omg" / "AGENTS.fragment.md",
1552
1634
  output_root / ".agents" / "skills" / "omg" / "codex-mcp.toml",
1553
1635
  ),
1636
+ "gemini": (
1637
+ output_root / ".gemini" / "settings.json",
1638
+ ),
1639
+ "kimi": (
1640
+ output_root / ".kimi" / "mcp.json",
1641
+ ),
1554
1642
  }
1555
1643
  for provider, status in providers.items():
1556
1644
  if not status.get("ready"):
@@ -1622,6 +1710,7 @@ def build_release_readiness(
1622
1710
  output = _resolve_output_root(root, output_root)
1623
1711
  blockers: list[str] = []
1624
1712
  checks: dict[str, Any] = {}
1713
+ required_provider_hosts: set[str] = set()
1625
1714
 
1626
1715
  validation = validate_contract_registry(root)
1627
1716
  checks["contract_validation"] = validation
@@ -1649,6 +1738,17 @@ def build_release_readiness(
1649
1738
  if _sha256_file(artifact_path) != expected_sha:
1650
1739
  manifest_errors.append(f"{required_channel}: sha mismatch for {rel_path}")
1651
1740
  manifest_paths = {str(a.get("path", "")) for a in manifest.get("artifacts", []) if isinstance(a, dict)}
1741
+ declared_hosts = [str(host) for host in manifest.get("hosts", []) if str(host).strip()]
1742
+ if not declared_hosts:
1743
+ declared_hosts = ["claude", "codex"]
1744
+ required_provider_hosts.update(declared_hosts)
1745
+ for host_name in declared_hosts:
1746
+ for host_path in HOST_COMPILED_ARTIFACTS.get(host_name, ()):
1747
+ bundled_host_path = f"bundle/{host_path}"
1748
+ if bundled_host_path not in manifest_paths:
1749
+ manifest_errors.append(
1750
+ f"{required_channel}: host_parity_missing {host_name} {bundled_host_path}"
1751
+ )
1652
1752
  for req_path in REQUIRED_ADVANCED_PLUGIN_ARTIFACTS:
1653
1753
  if req_path not in manifest_paths:
1654
1754
  manifest_errors.append(f"{required_channel}: advanced_plugin_missing {req_path}")
@@ -1725,13 +1825,25 @@ def build_release_readiness(
1725
1825
  checks["version_identity_drift"] = version_drift_check
1726
1826
  blockers.extend(version_drift_check.get("blockers", []))
1727
1827
 
1828
+ if channel == "dual":
1829
+ bundle_promotion_parity = _check_bundle_promotion_parity(root, output)
1830
+ checks["bundle_promotion_parity"] = bundle_promotion_parity
1831
+ blockers.extend(bundle_promotion_parity.get("blockers", []))
1832
+
1728
1833
  providers = _provider_statuses()
1729
1834
  checks["providers"] = providers
1730
1835
  for provider_name, status in providers.items():
1836
+ if provider_name not in required_provider_hosts:
1837
+ continue
1731
1838
  if not status.get("ready"):
1732
1839
  blockers.append(f"provider not ready: {provider_name}")
1733
1840
 
1734
- provider_parity = _check_provider_host_parity(output, providers)
1841
+ required_providers = {
1842
+ provider_name: status
1843
+ for provider_name, status in providers.items()
1844
+ if provider_name in required_provider_hosts
1845
+ }
1846
+ provider_parity = _check_provider_host_parity(output, required_providers)
1735
1847
  checks["provider_host_parity"] = provider_parity
1736
1848
  blockers.extend(provider_parity.get("blockers", []))
1737
1849
 
@@ -1770,6 +1882,14 @@ def _check_recent_evidence(output_root: Path) -> dict[str, Any]:
1770
1882
  except Exception:
1771
1883
  continue
1772
1884
  if payload.get("schema") == "EvidencePack":
1885
+ try:
1886
+ payload = _normalize_evidence_pack(payload)
1887
+ except ValueError as exc:
1888
+ return {
1889
+ "status": "error",
1890
+ "evidence_file": str(path.relative_to(output_root)),
1891
+ "blockers": [f"invalid evidence pack: {exc}"],
1892
+ }
1773
1893
  evidence_payloads.append((path, payload))
1774
1894
 
1775
1895
  if not evidence_payloads:
@@ -1882,6 +2002,62 @@ def _check_proof_chain(output_root: Path) -> dict[str, Any]:
1882
2002
  }
1883
2003
 
1884
2004
 
2005
+ def _check_bundle_promotion_parity(root: Path, output_root: Path) -> dict[str, Any]:
2006
+ missing_settings_required_bundles: list[str] = []
2007
+ missing_dist_public: list[str] = []
2008
+ missing_dist_enterprise: list[str] = []
2009
+ missing_pyproject_data_files: list[str] = []
2010
+
2011
+ settings_path = output_root / "settings.json"
2012
+ if settings_path.exists():
2013
+ settings = _load_json(settings_path)
2014
+ required_bundles = settings.get("_omg", {}).get("generated", {}).get("required_bundles", [])
2015
+ if not isinstance(required_bundles, list):
2016
+ required_bundles = []
2017
+ required_bundle_set = {str(item) for item in required_bundles}
2018
+ missing_settings_required_bundles = [
2019
+ bundle_id for bundle_id in TRUTH_COUNCIL_BUNDLES if bundle_id not in required_bundle_set
2020
+ ]
2021
+ else:
2022
+ missing_settings_required_bundles = list(TRUTH_COUNCIL_BUNDLES)
2023
+
2024
+ for bundle_id in TRUTH_COUNCIL_BUNDLES:
2025
+ public_skill = output_root / "dist" / "public" / "bundle" / ".agents" / "skills" / "omg" / bundle_id / "SKILL.md"
2026
+ if not public_skill.exists():
2027
+ missing_dist_public.append(str(public_skill.relative_to(output_root)))
2028
+
2029
+ enterprise_skill = output_root / "dist" / "enterprise" / "bundle" / ".agents" / "skills" / "omg" / bundle_id / "SKILL.md"
2030
+ if not enterprise_skill.exists():
2031
+ missing_dist_enterprise.append(str(enterprise_skill.relative_to(output_root)))
2032
+
2033
+ pyproject_path = root / "pyproject.toml"
2034
+ if pyproject_path.exists():
2035
+ pyproject_content = pyproject_path.read_text(encoding="utf-8")
2036
+ for bundle_id in TRUTH_COUNCIL_BUNDLES:
2037
+ data_file_key = f'".agents/skills/omg/{bundle_id}" = '
2038
+ if data_file_key not in pyproject_content:
2039
+ missing_pyproject_data_files.append(bundle_id)
2040
+ else:
2041
+ missing_pyproject_data_files = list(TRUTH_COUNCIL_BUNDLES)
2042
+
2043
+ failed = any(
2044
+ (
2045
+ missing_settings_required_bundles,
2046
+ missing_dist_public,
2047
+ missing_dist_enterprise,
2048
+ missing_pyproject_data_files,
2049
+ )
2050
+ )
2051
+ return {
2052
+ "status": "ok" if not failed else "error",
2053
+ "blockers": ["bundle_promotion_parity"] if failed else [],
2054
+ "missing_settings_required_bundles": missing_settings_required_bundles,
2055
+ "missing_dist_public": missing_dist_public,
2056
+ "missing_dist_enterprise": missing_dist_enterprise,
2057
+ "missing_pyproject_data_files": missing_pyproject_data_files,
2058
+ }
2059
+
2060
+
1885
2061
  def _check_packaged_install_smoke(root: Path) -> dict[str, Any]:
1886
2062
  blockers: list[str] = []
1887
2063
  with tempfile.TemporaryDirectory(prefix="omg-wheel-") as tmp_dir:
@@ -1911,6 +2087,10 @@ def _check_packaged_install_smoke(root: Path) -> dict[str, Any]:
1911
2087
  "plugins/dephealth/cve_scanner.py",
1912
2088
  "OMG_COMPAT_CONTRACT.md",
1913
2089
  ".agents/skills/omg/security-check/SKILL.md",
2090
+ ".agents/skills/omg/plan-council/SKILL.md",
2091
+ ".agents/skills/omg/claim-judge/SKILL.md",
2092
+ ".agents/skills/omg/test-intent-lock/SKILL.md",
2093
+ ".agents/skills/omg/proof-gate/SKILL.md",
1914
2094
  )
1915
2095
  for suffix in required_suffixes:
1916
2096
  if not any(name.endswith(suffix) for name in names):
@@ -8,7 +8,7 @@ import subprocess
8
8
  from typing import Any
9
9
 
10
10
  ECOSYSTEM_SCHEMA = "OmgEcosystemCatalog"
11
- ECOSYSTEM_CATALOG_VERSION = "2.0.7"
11
+ ECOSYSTEM_CATALOG_VERSION = "2.0.8"
12
12
  ECOSYSTEM_LOCK_SCHEMA = "OmgEcosystemLock"
13
13
  DEFAULT_ECOSYSTEM_REPO_DIR = ".omg/ecosystem/repos"
14
14
  DEFAULT_ECOSYSTEM_LOCK_PATH = ".omg/state/ecosystem-lock.json"
@@ -0,0 +1,203 @@
1
+ from __future__ import annotations
2
+
3
+ import json
4
+ from pathlib import Path
5
+ from typing import cast
6
+
7
+ JsonPrimitive = str | int | float | bool | None
8
+ JsonValue = JsonPrimitive | dict[str, "JsonValue"] | list["JsonValue"]
9
+ JsonObject = dict[str, JsonValue]
10
+
11
+
12
+ _EVIDENCE_DIRS = (
13
+ Path(".omg") / "evidence",
14
+ Path(".omg") / "tracebank",
15
+ Path(".omg") / "evals",
16
+ Path(".omg") / "lineage",
17
+ Path(".omg") / "state",
18
+ )
19
+
20
+
21
+ def _iter_json_files(root: Path, rel_dir: Path) -> list[Path]:
22
+ directory = root / rel_dir
23
+ if not directory.exists():
24
+ return []
25
+ return sorted(path for path in directory.glob("*.json") if path.is_file())
26
+
27
+
28
+ def _load_json(path: Path) -> JsonObject | None:
29
+ try:
30
+ payload: object = json.loads(path.read_text(encoding="utf-8")) # pyright: ignore[reportAny]
31
+ except (OSError, json.JSONDecodeError):
32
+ return None
33
+ if not isinstance(payload, dict):
34
+ return None
35
+ return cast(JsonObject, payload)
36
+
37
+
38
+ def _read_jsonl(path: Path) -> list[JsonObject]:
39
+ if not path.exists():
40
+ return []
41
+ rows: list[JsonObject] = []
42
+ try:
43
+ for line in path.read_text(encoding="utf-8").splitlines():
44
+ line = line.strip()
45
+ if not line:
46
+ continue
47
+ try:
48
+ item: object = json.loads(line) # pyright: ignore[reportAny]
49
+ except json.JSONDecodeError:
50
+ continue
51
+ if isinstance(item, dict):
52
+ rows.append(cast(JsonObject, item))
53
+ except OSError:
54
+ return []
55
+ return rows
56
+
57
+
58
+ def _record_string(record: JsonObject, key: str) -> str:
59
+ value = record.get(key)
60
+ return value if isinstance(value, str) else ""
61
+
62
+
63
+ def _record_string_list(record: JsonObject, key: str) -> list[str]:
64
+ value = record.get(key)
65
+ if not isinstance(value, list):
66
+ return []
67
+ return [item for item in value if isinstance(item, str)]
68
+
69
+
70
+ def _record_matches(
71
+ record: JsonObject,
72
+ *,
73
+ run_id: str | None,
74
+ trace_id: str | None,
75
+ schema: str | None,
76
+ kind: str | None,
77
+ ) -> bool:
78
+ if run_id is not None and _record_string(record, "run_id") != run_id:
79
+ return False
80
+ if trace_id is not None:
81
+ direct_trace_id = _record_string(record, "trace_id")
82
+ trace_ids = _record_string_list(record, "trace_ids")
83
+ if direct_trace_id != trace_id and trace_id not in trace_ids:
84
+ return False
85
+ if schema is not None and _record_string(record, "schema") != schema:
86
+ return False
87
+ if kind is not None:
88
+ direct_kind = _record_string(record, "kind")
89
+ artifacts = record.get("artifacts")
90
+ artifact_kinds: list[str] = []
91
+ if isinstance(artifacts, list):
92
+ for item in artifacts:
93
+ if isinstance(item, dict):
94
+ item_kind = item.get("kind")
95
+ if isinstance(item_kind, str):
96
+ artifact_kinds.append(item_kind)
97
+ if direct_kind != kind and kind not in artifact_kinds:
98
+ return False
99
+ return True
100
+
101
+
102
+ def get_evidence_pack(project_dir: str, run_id: str) -> JsonObject | None:
103
+ root = Path(project_dir)
104
+ evidence_files = _iter_json_files(root, Path(".omg") / "evidence")
105
+ for path in evidence_files:
106
+ payload = _load_json(path)
107
+ if payload is None:
108
+ continue
109
+ if payload.get("schema") != "EvidencePack":
110
+ continue
111
+ if _record_string(payload, "run_id") == run_id:
112
+ return payload
113
+ return None
114
+
115
+
116
+ def query_evidence(
117
+ project_dir: str,
118
+ *,
119
+ run_id: str | None = None,
120
+ trace_id: str | None = None,
121
+ schema: str | None = None,
122
+ kind: str | None = None,
123
+ ) -> list[JsonObject]:
124
+ root = Path(project_dir)
125
+ records: list[JsonObject] = []
126
+
127
+ for rel_dir in _EVIDENCE_DIRS:
128
+ for path in _iter_json_files(root, rel_dir):
129
+ payload = _load_json(path)
130
+ if payload is None:
131
+ continue
132
+ if _record_matches(
133
+ payload,
134
+ run_id=run_id,
135
+ trace_id=trace_id,
136
+ schema=schema,
137
+ kind=kind,
138
+ ):
139
+ records.append(payload)
140
+
141
+ for row in _read_jsonl(root / rel_dir / "events.jsonl"):
142
+ if _record_matches(
143
+ row,
144
+ run_id=run_id,
145
+ trace_id=trace_id,
146
+ schema=schema,
147
+ kind=kind,
148
+ ):
149
+ records.append(row)
150
+
151
+ return records
152
+
153
+
154
+ def list_evidence_packs(project_dir: str) -> list[JsonObject]:
155
+ root = Path(project_dir)
156
+ evidence_files = _iter_json_files(root, Path(".omg") / "evidence")
157
+ payloads: list[tuple[float, JsonObject]] = []
158
+
159
+ for path in evidence_files:
160
+ payload = _load_json(path)
161
+ if payload is None or payload.get("schema") != "EvidencePack":
162
+ continue
163
+ try:
164
+ mtime = path.stat().st_mtime
165
+ except OSError:
166
+ mtime = 0.0
167
+ payloads.append((mtime, payload))
168
+
169
+ payloads.sort(key=lambda item: item[0], reverse=True)
170
+ return [payload for _, payload in payloads]
171
+
172
+
173
+ def get_trace(project_dir: str, trace_id: str) -> JsonObject | None:
174
+ trace_rows = _read_jsonl(Path(project_dir) / ".omg" / "tracebank" / "events.jsonl")
175
+ for row in trace_rows:
176
+ if _record_string(row, "trace_id") == trace_id:
177
+ return row
178
+ return None
179
+
180
+
181
+ def get_eval(project_dir: str) -> JsonObject | None:
182
+ return _load_json(Path(project_dir) / ".omg" / "evals" / "latest.json")
183
+
184
+
185
+ def get_lineage(project_dir: str, lineage_id: str) -> JsonObject | None:
186
+ root = Path(project_dir)
187
+ lineage_files = _iter_json_files(root, Path(".omg") / "lineage")
188
+ for path in lineage_files:
189
+ payload = _load_json(path)
190
+ if payload is None:
191
+ continue
192
+ if _record_string(payload, "lineage_id") == lineage_id:
193
+ return payload
194
+ return None
195
+
196
+
197
+ def get_verification_state(project_dir: str) -> JsonObject | None:
198
+ payload = _load_json(Path(project_dir) / ".omg" / "state" / "background-verification.json")
199
+ if payload is None:
200
+ return None
201
+ if payload.get("schema") != "BackgroundVerificationState":
202
+ return None
203
+ return payload
@@ -66,7 +66,7 @@ mcp = FastMCP("OMG Memory Server", lifespan=lifespan)
66
66
 
67
67
  @mcp.custom_route("/health", methods=["GET"])
68
68
  async def health(_: Request) -> JSONResponse:
69
- return JSONResponse({"status": "ok", "version": "2.0.7"})
69
+ return JSONResponse({"status": "ok", "version": "2.0.8"})
70
70
 
71
71
 
72
72
  @mcp.tool()
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema": "OmgCompatContractSnapshot",
3
- "contract_version": "2.0.7",
3
+ "contract_version": "2.0.8",
4
4
  "count": 47,
5
5
  "contracts": [
6
6
  {
@@ -912,5 +912,5 @@
912
912
  "notes": "Writes long-form memory artifact for writing workflows."
913
913
  }
914
914
  ],
915
- "generated_at": "2026-03-07T04:51:08.940394+00:00"
915
+ "generated_at": "2026-03-08T03:01:11.098666+00:00"
916
916
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema": "OmgCompatContractSnapshot",
3
- "contract_version": "2.0.7",
3
+ "contract_version": "2.0.8",
4
4
  "count": 47,
5
5
  "contracts": [
6
6
  {
@@ -912,5 +912,5 @@
912
912
  "notes": "Writes long-form memory artifact for writing workflows."
913
913
  }
914
914
  ],
915
- "generated_at": "2026-03-07T04:51:08.940453+00:00"
915
+ "generated_at": "2026-03-08T03:01:11.439504+00:00"
916
916
  }
@@ -174,6 +174,25 @@ def omg_security_check(scope: str = ".", include_live_enrichment: bool = False,
174
174
  return payload
175
175
 
176
176
 
177
+ @mcp.tool()
178
+ def omg_claim_judge(claims: list[dict[str, Any]]) -> dict[str, Any]:
179
+ _status, payload = _service().claim_judge({"claims": claims})
180
+ return payload
181
+
182
+
183
+ @mcp.tool()
184
+ def omg_test_intent_lock(
185
+ action: str,
186
+ intent: dict[str, Any] | None = None,
187
+ lock_id: str | None = None,
188
+ results: dict[str, Any] | None = None,
189
+ ) -> dict[str, Any]:
190
+ _status, payload = _service().test_intent_lock(
191
+ {"action": action, "intent": intent, "lock_id": lock_id, "results": results}
192
+ )
193
+ return payload
194
+
195
+
177
196
  @mcp.tool()
178
197
  def omg_guide_assert(candidate: str, rules: dict[str, Any]) -> dict[str, Any]:
179
198
  _status, payload = _service().guide_assert({"candidate": candidate, "rules": rules})
@@ -0,0 +1,39 @@
1
+ """Optional adapter for summarizing Playwright artifacts into proof-chain-friendly payloads."""
2
+ from __future__ import annotations
3
+
4
+ from pathlib import Path
5
+ from typing import Any
6
+
7
+
8
+ def summarize_playwright_artifacts(
9
+ trace_path: str | None = None,
10
+ junit_path: str | None = None,
11
+ screenshots: list[str] | None = None,
12
+ metadata: dict[str, Any] | None = None,
13
+ ) -> dict[str, Any]:
14
+ """Summarize browser artifacts into a proof-chain-friendly dict.
15
+
16
+ Returns a dict consumable by proof-gate / claim-judge:
17
+ status — "ok" or "error"
18
+ artifacts — {trace, junit, screenshots} (only provided paths)
19
+ metadata — provided metadata or {}
20
+ """
21
+ if not trace_path and not junit_path and not screenshots:
22
+ return {"status": "error", "reason": "no_artifacts_provided"}
23
+
24
+ artifacts: dict[str, Any] = {}
25
+
26
+ if trace_path:
27
+ artifacts["trace"] = str(Path(trace_path))
28
+
29
+ if junit_path:
30
+ artifacts["junit"] = str(Path(junit_path))
31
+
32
+ if screenshots:
33
+ artifacts["screenshots"] = [str(Path(s)) for s in screenshots]
34
+
35
+ return {
36
+ "status": "ok",
37
+ "artifacts": artifacts,
38
+ "metadata": metadata or {},
39
+ }