@trac3er/oh-my-god 2.1.0 → 2.1.4

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 (371) hide show
  1. package/.agents/skills/omg/AGENTS.fragment.md +2 -2
  2. package/.agents/skills/omg/algorithms/SKILL.md +1 -1
  3. package/.agents/skills/omg/algorithms/openai.yaml +1 -1
  4. package/.agents/skills/omg/api-twin/SKILL.md +1 -1
  5. package/.agents/skills/omg/api-twin/openai.yaml +1 -1
  6. package/.agents/skills/omg/claim-judge/SKILL.md +1 -1
  7. package/.agents/skills/omg/claim-judge/openai.yaml +1 -1
  8. package/.agents/skills/omg/codex-rules.md +1 -1
  9. package/.agents/skills/omg/control-plane/SKILL.md +1 -1
  10. package/.agents/skills/omg/control-plane/openai.yaml +1 -1
  11. package/.agents/skills/omg/data-lineage/SKILL.md +1 -1
  12. package/.agents/skills/omg/data-lineage/openai.yaml +1 -1
  13. package/.agents/skills/omg/delta-classifier/SKILL.md +1 -1
  14. package/.agents/skills/omg/delta-classifier/openai.yaml +1 -1
  15. package/.agents/skills/omg/eval-gate/SKILL.md +1 -1
  16. package/.agents/skills/omg/eval-gate/openai.yaml +1 -1
  17. package/.agents/skills/omg/health/SKILL.md +1 -1
  18. package/.agents/skills/omg/health/openai.yaml +1 -1
  19. package/.agents/skills/omg/hook-governor/SKILL.md +1 -1
  20. package/.agents/skills/omg/hook-governor/openai.yaml +1 -1
  21. package/.agents/skills/omg/incident-replay/SKILL.md +1 -1
  22. package/.agents/skills/omg/incident-replay/openai.yaml +1 -1
  23. package/.agents/skills/omg/lsp-pack/SKILL.md +1 -1
  24. package/.agents/skills/omg/lsp-pack/openai.yaml +1 -1
  25. package/.agents/skills/omg/mcp-fabric/SKILL.md +1 -1
  26. package/.agents/skills/omg/mcp-fabric/openai.yaml +1 -1
  27. package/.agents/skills/omg/plan-council/SKILL.md +1 -1
  28. package/.agents/skills/omg/plan-council/openai.yaml +1 -1
  29. package/.agents/skills/omg/preflight/SKILL.md +1 -1
  30. package/.agents/skills/omg/preflight/openai.yaml +1 -1
  31. package/.agents/skills/omg/proof-gate/SKILL.md +1 -1
  32. package/.agents/skills/omg/proof-gate/openai.yaml +1 -1
  33. package/.agents/skills/omg/remote-supervisor/SKILL.md +1 -1
  34. package/.agents/skills/omg/remote-supervisor/openai.yaml +1 -1
  35. package/.agents/skills/omg/robotics/SKILL.md +1 -1
  36. package/.agents/skills/omg/robotics/openai.yaml +1 -1
  37. package/.agents/skills/omg/secure-worktree-pipeline/SKILL.md +1 -1
  38. package/.agents/skills/omg/secure-worktree-pipeline/openai.yaml +1 -1
  39. package/.agents/skills/omg/security-check/SKILL.md +1 -1
  40. package/.agents/skills/omg/security-check/openai.yaml +1 -1
  41. package/.agents/skills/omg/test-intent-lock/SKILL.md +1 -1
  42. package/.agents/skills/omg/test-intent-lock/openai.yaml +1 -1
  43. package/.agents/skills/omg/tracebank/SKILL.md +1 -1
  44. package/.agents/skills/omg/tracebank/openai.yaml +1 -1
  45. package/.agents/skills/omg/vision/SKILL.md +1 -1
  46. package/.agents/skills/omg/vision/openai.yaml +1 -1
  47. package/.claude-plugin/marketplace.json +3 -3
  48. package/.claude-plugin/plugin.json +1 -1
  49. package/CHANGELOG.md +16 -0
  50. package/CLI-ADAPTER-MAP.md +3 -3
  51. package/OMG-setup.sh +114 -1
  52. package/OMG_COMPAT_CONTRACT.md +1 -1
  53. package/README.md +2 -1
  54. package/artifacts/release/.claude-plugin/marketplace.json +3 -3
  55. package/artifacts/release/.claude-plugin/plugin.json +1 -1
  56. package/artifacts/release/OMG_COMPAT_CONTRACT.md +1 -1
  57. package/artifacts/release/dist/enterprise/bundle/.claude-plugin/marketplace.json +3 -3
  58. package/artifacts/release/dist/enterprise/bundle/.claude-plugin/plugin.json +1 -1
  59. package/artifacts/release/dist/enterprise/bundle/OMG_COMPAT_CONTRACT.md +1 -1
  60. package/artifacts/release/dist/enterprise/bundle/plugins/advanced/plugin.json +26 -9
  61. package/artifacts/release/dist/enterprise/bundle/registry/bundles/algorithms.yaml +1 -1
  62. package/artifacts/release/dist/enterprise/bundle/registry/bundles/api-twin.yaml +1 -1
  63. package/artifacts/release/dist/enterprise/bundle/registry/bundles/claim-judge.yaml +1 -1
  64. package/artifacts/release/dist/enterprise/bundle/registry/bundles/control-plane.yaml +1 -1
  65. package/artifacts/release/dist/enterprise/bundle/registry/bundles/data-lineage.yaml +1 -1
  66. package/artifacts/release/dist/enterprise/bundle/registry/bundles/delta-classifier.yaml +1 -1
  67. package/artifacts/release/dist/enterprise/bundle/registry/bundles/eval-gate.yaml +1 -1
  68. package/artifacts/release/dist/enterprise/bundle/registry/bundles/health.yaml +1 -1
  69. package/artifacts/release/dist/enterprise/bundle/registry/bundles/hook-governor.yaml +1 -1
  70. package/artifacts/release/dist/enterprise/bundle/registry/bundles/incident-replay.yaml +1 -1
  71. package/artifacts/release/dist/enterprise/bundle/registry/bundles/lsp-pack.yaml +1 -1
  72. package/artifacts/release/dist/enterprise/bundle/registry/bundles/mcp-fabric.yaml +1 -1
  73. package/artifacts/release/dist/enterprise/bundle/registry/bundles/plan-council.yaml +1 -1
  74. package/artifacts/release/dist/enterprise/bundle/registry/bundles/preflight.yaml +1 -1
  75. package/artifacts/release/dist/enterprise/bundle/registry/bundles/proof-gate.yaml +1 -1
  76. package/artifacts/release/dist/enterprise/bundle/registry/bundles/remote-supervisor.yaml +1 -1
  77. package/artifacts/release/dist/enterprise/bundle/registry/bundles/robotics.yaml +1 -1
  78. package/artifacts/release/dist/enterprise/bundle/registry/bundles/secure-worktree-pipeline.yaml +1 -1
  79. package/artifacts/release/dist/enterprise/bundle/registry/bundles/security-check.yaml +1 -1
  80. package/artifacts/release/dist/enterprise/bundle/registry/bundles/test-intent-lock.yaml +1 -1
  81. package/artifacts/release/dist/enterprise/bundle/registry/bundles/tracebank.yaml +1 -1
  82. package/artifacts/release/dist/enterprise/bundle/registry/bundles/vision.yaml +1 -1
  83. package/artifacts/release/dist/enterprise/bundle/registry/omg-capability.schema.json +1 -1
  84. package/artifacts/release/dist/enterprise/bundle/settings.json +3 -3
  85. package/artifacts/release/dist/enterprise/manifest.json +30 -40
  86. package/artifacts/release/dist/public/bundle/.claude-plugin/marketplace.json +3 -3
  87. package/artifacts/release/dist/public/bundle/.claude-plugin/plugin.json +1 -1
  88. package/artifacts/release/dist/public/bundle/OMG_COMPAT_CONTRACT.md +1 -1
  89. package/artifacts/release/dist/public/bundle/plugins/advanced/plugin.json +26 -9
  90. package/artifacts/release/dist/public/bundle/registry/bundles/algorithms.yaml +1 -1
  91. package/artifacts/release/dist/public/bundle/registry/bundles/api-twin.yaml +1 -1
  92. package/artifacts/release/dist/public/bundle/registry/bundles/claim-judge.yaml +1 -1
  93. package/artifacts/release/dist/public/bundle/registry/bundles/control-plane.yaml +1 -1
  94. package/artifacts/release/dist/public/bundle/registry/bundles/data-lineage.yaml +1 -1
  95. package/artifacts/release/dist/public/bundle/registry/bundles/delta-classifier.yaml +1 -1
  96. package/artifacts/release/dist/public/bundle/registry/bundles/eval-gate.yaml +1 -1
  97. package/artifacts/release/dist/public/bundle/registry/bundles/health.yaml +1 -1
  98. package/artifacts/release/dist/public/bundle/registry/bundles/hook-governor.yaml +1 -1
  99. package/artifacts/release/dist/public/bundle/registry/bundles/incident-replay.yaml +1 -1
  100. package/artifacts/release/dist/public/bundle/registry/bundles/lsp-pack.yaml +1 -1
  101. package/artifacts/release/dist/public/bundle/registry/bundles/mcp-fabric.yaml +1 -1
  102. package/artifacts/release/dist/public/bundle/registry/bundles/plan-council.yaml +1 -1
  103. package/artifacts/release/dist/public/bundle/registry/bundles/preflight.yaml +1 -1
  104. package/artifacts/release/dist/public/bundle/registry/bundles/proof-gate.yaml +1 -1
  105. package/artifacts/release/dist/public/bundle/registry/bundles/remote-supervisor.yaml +1 -1
  106. package/artifacts/release/dist/public/bundle/registry/bundles/robotics.yaml +1 -1
  107. package/artifacts/release/dist/public/bundle/registry/bundles/secure-worktree-pipeline.yaml +1 -1
  108. package/artifacts/release/dist/public/bundle/registry/bundles/security-check.yaml +1 -1
  109. package/artifacts/release/dist/public/bundle/registry/bundles/test-intent-lock.yaml +1 -1
  110. package/artifacts/release/dist/public/bundle/registry/bundles/tracebank.yaml +1 -1
  111. package/artifacts/release/dist/public/bundle/registry/bundles/vision.yaml +1 -1
  112. package/artifacts/release/dist/public/bundle/registry/omg-capability.schema.json +1 -1
  113. package/artifacts/release/dist/public/bundle/settings.json +3 -3
  114. package/artifacts/release/dist/public/manifest.json +30 -40
  115. package/artifacts/release/plugins/advanced/plugin.json +26 -9
  116. package/artifacts/release/registry/bundles/algorithms.yaml +1 -1
  117. package/artifacts/release/registry/bundles/api-twin.yaml +1 -1
  118. package/artifacts/release/registry/bundles/claim-judge.yaml +1 -1
  119. package/artifacts/release/registry/bundles/control-plane.yaml +1 -1
  120. package/artifacts/release/registry/bundles/data-lineage.yaml +1 -1
  121. package/artifacts/release/registry/bundles/delta-classifier.yaml +1 -1
  122. package/artifacts/release/registry/bundles/eval-gate.yaml +1 -1
  123. package/artifacts/release/registry/bundles/health.yaml +1 -1
  124. package/artifacts/release/registry/bundles/hook-governor.yaml +1 -1
  125. package/artifacts/release/registry/bundles/incident-replay.yaml +1 -1
  126. package/artifacts/release/registry/bundles/lsp-pack.yaml +1 -1
  127. package/artifacts/release/registry/bundles/mcp-fabric.yaml +1 -1
  128. package/artifacts/release/registry/bundles/plan-council.yaml +1 -1
  129. package/artifacts/release/registry/bundles/preflight.yaml +1 -1
  130. package/artifacts/release/registry/bundles/proof-gate.yaml +1 -1
  131. package/artifacts/release/registry/bundles/remote-supervisor.yaml +1 -1
  132. package/artifacts/release/registry/bundles/robotics.yaml +1 -1
  133. package/artifacts/release/registry/bundles/secure-worktree-pipeline.yaml +1 -1
  134. package/artifacts/release/registry/bundles/security-check.yaml +1 -1
  135. package/artifacts/release/registry/bundles/test-intent-lock.yaml +1 -1
  136. package/artifacts/release/registry/bundles/tracebank.yaml +1 -1
  137. package/artifacts/release/registry/bundles/vision.yaml +1 -1
  138. package/artifacts/release/registry/omg-capability.schema.json +1 -1
  139. package/artifacts/release/settings.json +3 -3
  140. package/build/lib/commands/OMG:profile-review.md +43 -0
  141. package/build/lib/commands/OMG:validate.md +59 -0
  142. package/build/lib/control_plane/service.py +40 -1
  143. package/build/lib/hooks/_agent_registry.py +2 -0
  144. package/build/lib/hooks/firewall.py +263 -4
  145. package/build/lib/hooks/intentgate-keyword-detector.py +15 -3
  146. package/build/lib/hooks/policy_engine.py +77 -0
  147. package/build/lib/hooks/prompt-enhancer.py +146 -0
  148. package/build/lib/hooks/session-end-capture.py +374 -6
  149. package/build/lib/hooks/session-start.py +13 -35
  150. package/build/lib/hooks/setup_wizard.py +333 -1
  151. package/build/lib/hooks/shadow_manager.py +111 -2
  152. package/build/lib/hooks/stop_dispatcher.py +108 -4
  153. package/build/lib/plugins/advanced/plugin.json +26 -9
  154. package/build/lib/plugins/core/plugin.json +44 -11
  155. package/build/lib/registry/bundles/algorithms.yaml +1 -1
  156. package/build/lib/registry/bundles/api-twin.yaml +1 -1
  157. package/build/lib/registry/bundles/claim-judge.yaml +1 -1
  158. package/build/lib/registry/bundles/control-plane.yaml +1 -1
  159. package/build/lib/registry/bundles/data-lineage.yaml +1 -1
  160. package/build/lib/registry/bundles/delta-classifier.yaml +1 -1
  161. package/build/lib/registry/bundles/eval-gate.yaml +1 -1
  162. package/build/lib/registry/bundles/health.yaml +1 -1
  163. package/build/lib/registry/bundles/hook-governor.yaml +1 -1
  164. package/build/lib/registry/bundles/incident-replay.yaml +1 -1
  165. package/build/lib/registry/bundles/lsp-pack.yaml +1 -1
  166. package/build/lib/registry/bundles/mcp-fabric.yaml +1 -1
  167. package/build/lib/registry/bundles/plan-council.yaml +1 -1
  168. package/build/lib/registry/bundles/preflight.yaml +1 -1
  169. package/build/lib/registry/bundles/proof-gate.yaml +1 -1
  170. package/build/lib/registry/bundles/remote-supervisor.yaml +1 -1
  171. package/build/lib/registry/bundles/robotics.yaml +1 -1
  172. package/build/lib/registry/bundles/secure-worktree-pipeline.yaml +1 -1
  173. package/build/lib/registry/bundles/security-check.yaml +1 -1
  174. package/build/lib/registry/bundles/test-intent-lock.yaml +1 -1
  175. package/build/lib/registry/bundles/tracebank.yaml +1 -1
  176. package/build/lib/registry/bundles/vision.yaml +1 -1
  177. package/build/lib/registry/omg-capability.schema.json +1 -1
  178. package/build/lib/runtime/adoption.py +1 -1
  179. package/build/lib/runtime/background_verification.py +62 -0
  180. package/build/lib/runtime/claim_judge.py +165 -5
  181. package/build/lib/runtime/compat.py +15 -1
  182. package/build/lib/runtime/context_engine.py +261 -4
  183. package/build/lib/runtime/contract_compiler.py +370 -93
  184. package/build/lib/runtime/defense_state.py +79 -8
  185. package/build/lib/runtime/delta_classifier.py +80 -2
  186. package/build/lib/runtime/evidence_query.py +56 -4
  187. package/build/lib/runtime/evidence_registry.py +16 -0
  188. package/build/lib/runtime/evidence_requirements.py +47 -0
  189. package/build/lib/runtime/forge_agents.py +179 -9
  190. package/build/lib/runtime/forge_contracts.py +208 -2
  191. package/build/lib/runtime/interaction_journal.py +318 -42
  192. package/build/lib/runtime/memory_store.py +134 -1
  193. package/build/lib/runtime/mutation_gate.py +57 -11
  194. package/build/lib/runtime/omg_compat_contract_snapshot.json +2 -2
  195. package/build/lib/runtime/omg_mcp_server.py +14 -4
  196. package/build/lib/runtime/preflight.py +14 -0
  197. package/build/lib/runtime/profile_io.py +294 -0
  198. package/build/lib/runtime/proof_gate.py +122 -7
  199. package/build/lib/runtime/release_run_coordinator.py +339 -0
  200. package/build/lib/runtime/release_surfaces.py +243 -0
  201. package/build/lib/runtime/rollback_manifest.py +136 -0
  202. package/build/lib/runtime/router_critics.py +50 -0
  203. package/build/lib/runtime/runtime_contracts.py +137 -0
  204. package/build/lib/runtime/security_check.py +16 -0
  205. package/build/lib/runtime/session_health.py +60 -16
  206. package/build/lib/runtime/team_router.py +156 -13
  207. package/build/lib/runtime/test_intent_lock.py +102 -0
  208. package/build/lib/runtime/tool_plan_gate.py +249 -24
  209. package/build/lib/runtime/validate.py +194 -0
  210. package/build/lib/runtime/verification_controller.py +52 -2
  211. package/commands/OMG:diagnose-plugins.md +33 -0
  212. package/commands/OMG:profile-review.md +43 -0
  213. package/commands/OMG:setup.md +4 -1
  214. package/commands/OMG:validate.md +59 -0
  215. package/control_plane/service.py +40 -1
  216. package/dist/enterprise/bundle/.claude-plugin/marketplace.json +3 -3
  217. package/dist/enterprise/bundle/.claude-plugin/plugin.json +1 -1
  218. package/dist/enterprise/bundle/OMG_COMPAT_CONTRACT.md +1 -1
  219. package/dist/enterprise/bundle/plugins/advanced/plugin.json +26 -9
  220. package/dist/enterprise/bundle/registry/bundles/algorithms.yaml +1 -1
  221. package/dist/enterprise/bundle/registry/bundles/api-twin.yaml +1 -1
  222. package/dist/enterprise/bundle/registry/bundles/claim-judge.yaml +1 -1
  223. package/dist/enterprise/bundle/registry/bundles/control-plane.yaml +1 -1
  224. package/dist/enterprise/bundle/registry/bundles/data-lineage.yaml +1 -1
  225. package/dist/enterprise/bundle/registry/bundles/delta-classifier.yaml +1 -1
  226. package/dist/enterprise/bundle/registry/bundles/eval-gate.yaml +1 -1
  227. package/dist/enterprise/bundle/registry/bundles/health.yaml +1 -1
  228. package/dist/enterprise/bundle/registry/bundles/hook-governor.yaml +1 -1
  229. package/dist/enterprise/bundle/registry/bundles/incident-replay.yaml +1 -1
  230. package/dist/enterprise/bundle/registry/bundles/lsp-pack.yaml +1 -1
  231. package/dist/enterprise/bundle/registry/bundles/mcp-fabric.yaml +1 -1
  232. package/dist/enterprise/bundle/registry/bundles/plan-council.yaml +1 -1
  233. package/dist/enterprise/bundle/registry/bundles/preflight.yaml +1 -1
  234. package/dist/enterprise/bundle/registry/bundles/proof-gate.yaml +1 -1
  235. package/dist/enterprise/bundle/registry/bundles/remote-supervisor.yaml +1 -1
  236. package/dist/enterprise/bundle/registry/bundles/robotics.yaml +1 -1
  237. package/dist/enterprise/bundle/registry/bundles/secure-worktree-pipeline.yaml +1 -1
  238. package/dist/enterprise/bundle/registry/bundles/security-check.yaml +1 -1
  239. package/dist/enterprise/bundle/registry/bundles/test-intent-lock.yaml +1 -1
  240. package/dist/enterprise/bundle/registry/bundles/tracebank.yaml +1 -1
  241. package/dist/enterprise/bundle/registry/bundles/vision.yaml +1 -1
  242. package/dist/enterprise/bundle/registry/omg-capability.schema.json +1 -1
  243. package/dist/enterprise/bundle/settings.json +3 -3
  244. package/dist/enterprise/manifest.json +30 -40
  245. package/dist/oh_my_god-2.1.4-py3-none-any.whl +0 -0
  246. package/dist/oh_my_god-2.1.4.tar.gz +0 -0
  247. package/dist/public/bundle/.claude-plugin/marketplace.json +3 -3
  248. package/dist/public/bundle/.claude-plugin/plugin.json +1 -1
  249. package/dist/public/bundle/OMG_COMPAT_CONTRACT.md +1 -1
  250. package/dist/public/bundle/plugins/advanced/plugin.json +26 -9
  251. package/dist/public/bundle/registry/bundles/algorithms.yaml +1 -1
  252. package/dist/public/bundle/registry/bundles/api-twin.yaml +1 -1
  253. package/dist/public/bundle/registry/bundles/claim-judge.yaml +1 -1
  254. package/dist/public/bundle/registry/bundles/control-plane.yaml +1 -1
  255. package/dist/public/bundle/registry/bundles/data-lineage.yaml +1 -1
  256. package/dist/public/bundle/registry/bundles/delta-classifier.yaml +1 -1
  257. package/dist/public/bundle/registry/bundles/eval-gate.yaml +1 -1
  258. package/dist/public/bundle/registry/bundles/health.yaml +1 -1
  259. package/dist/public/bundle/registry/bundles/hook-governor.yaml +1 -1
  260. package/dist/public/bundle/registry/bundles/incident-replay.yaml +1 -1
  261. package/dist/public/bundle/registry/bundles/lsp-pack.yaml +1 -1
  262. package/dist/public/bundle/registry/bundles/mcp-fabric.yaml +1 -1
  263. package/dist/public/bundle/registry/bundles/plan-council.yaml +1 -1
  264. package/dist/public/bundle/registry/bundles/preflight.yaml +1 -1
  265. package/dist/public/bundle/registry/bundles/proof-gate.yaml +1 -1
  266. package/dist/public/bundle/registry/bundles/remote-supervisor.yaml +1 -1
  267. package/dist/public/bundle/registry/bundles/robotics.yaml +1 -1
  268. package/dist/public/bundle/registry/bundles/secure-worktree-pipeline.yaml +1 -1
  269. package/dist/public/bundle/registry/bundles/security-check.yaml +1 -1
  270. package/dist/public/bundle/registry/bundles/test-intent-lock.yaml +1 -1
  271. package/dist/public/bundle/registry/bundles/tracebank.yaml +1 -1
  272. package/dist/public/bundle/registry/bundles/vision.yaml +1 -1
  273. package/dist/public/bundle/registry/omg-capability.schema.json +1 -1
  274. package/dist/public/bundle/settings.json +3 -3
  275. package/dist/public/manifest.json +30 -40
  276. package/docs/install/opencode.md +30 -0
  277. package/docs/proof.md +11 -0
  278. package/docs/release-checklist.md +14 -1
  279. package/hooks/_agent_registry.py +2 -0
  280. package/hooks/firewall.py +263 -4
  281. package/hooks/intentgate-keyword-detector.py +15 -3
  282. package/hooks/policy_engine.py +77 -0
  283. package/hooks/prompt-enhancer.py +146 -0
  284. package/hooks/session-end-capture.py +374 -6
  285. package/hooks/session-start.py +13 -35
  286. package/hooks/setup_wizard.py +342 -2
  287. package/hooks/shadow_manager.py +111 -2
  288. package/hooks/stop_dispatcher.py +108 -4
  289. package/hud/omg-hud.mjs +30 -6
  290. package/lab/pipeline.py +197 -26
  291. package/package.json +1 -1
  292. package/plugins/advanced/plugin.json +26 -9
  293. package/plugins/core/plugin.json +51 -12
  294. package/pyproject.toml +10 -2
  295. package/registry/bundles/algorithms.yaml +1 -1
  296. package/registry/bundles/api-twin.yaml +1 -1
  297. package/registry/bundles/claim-judge.yaml +1 -1
  298. package/registry/bundles/control-plane.yaml +1 -1
  299. package/registry/bundles/data-lineage.yaml +1 -1
  300. package/registry/bundles/delta-classifier.yaml +1 -1
  301. package/registry/bundles/eval-gate.yaml +1 -1
  302. package/registry/bundles/health.yaml +1 -1
  303. package/registry/bundles/hook-governor.yaml +1 -1
  304. package/registry/bundles/incident-replay.yaml +1 -1
  305. package/registry/bundles/lsp-pack.yaml +1 -1
  306. package/registry/bundles/mcp-fabric.yaml +1 -1
  307. package/registry/bundles/plan-council.yaml +1 -1
  308. package/registry/bundles/preflight.yaml +1 -1
  309. package/registry/bundles/proof-gate.yaml +1 -1
  310. package/registry/bundles/remote-supervisor.yaml +1 -1
  311. package/registry/bundles/robotics.yaml +1 -1
  312. package/registry/bundles/secure-worktree-pipeline.yaml +1 -1
  313. package/registry/bundles/security-check.yaml +1 -1
  314. package/registry/bundles/test-intent-lock.yaml +1 -1
  315. package/registry/bundles/tracebank.yaml +1 -1
  316. package/registry/bundles/vision.yaml +1 -1
  317. package/registry/omg-capability.schema.json +1 -1
  318. package/runtime/adoption.py +7 -5
  319. package/runtime/background_verification.py +62 -0
  320. package/runtime/claim_judge.py +165 -5
  321. package/runtime/compat.py +48 -1
  322. package/runtime/context_engine.py +261 -4
  323. package/runtime/contract_compiler.py +370 -93
  324. package/runtime/defense_state.py +79 -8
  325. package/runtime/delta_classifier.py +80 -2
  326. package/runtime/evidence_query.py +56 -4
  327. package/runtime/evidence_registry.py +16 -0
  328. package/runtime/evidence_requirements.py +47 -0
  329. package/runtime/forge_agents.py +179 -9
  330. package/runtime/forge_contracts.py +208 -2
  331. package/runtime/hook_governor.py +19 -1
  332. package/runtime/interaction_journal.py +318 -42
  333. package/runtime/memory_store.py +134 -1
  334. package/runtime/mutation_gate.py +57 -11
  335. package/runtime/omg_compat_contract_snapshot.json +2 -2
  336. package/runtime/omg_mcp_server.py +14 -4
  337. package/runtime/plugin_diagnostics.py +248 -0
  338. package/runtime/plugin_interop.py +1007 -0
  339. package/runtime/preflight.py +14 -0
  340. package/runtime/profile_io.py +294 -0
  341. package/runtime/proof_gate.py +122 -7
  342. package/runtime/providers/opencode_provider.py +94 -0
  343. package/runtime/release_run_coordinator.py +339 -0
  344. package/runtime/release_surfaces.py +243 -0
  345. package/runtime/rollback_manifest.py +136 -0
  346. package/runtime/router_critics.py +50 -0
  347. package/runtime/runtime_contracts.py +137 -0
  348. package/runtime/security_check.py +16 -0
  349. package/runtime/session_health.py +60 -16
  350. package/runtime/team_router.py +156 -13
  351. package/runtime/test_intent_lock.py +102 -0
  352. package/runtime/tool_plan_gate.py +218 -19
  353. package/runtime/validate.py +289 -0
  354. package/runtime/verification_controller.py +52 -2
  355. package/scripts/omg.py +306 -3
  356. package/scripts/prepare-release-proof-fixtures.py +191 -7
  357. package/scripts/print-canonical-version.py +80 -0
  358. package/scripts/sync-release-identity.py +476 -0
  359. package/scripts/validate-release-identity.py +246 -0
  360. package/scripts/verify-standalone.sh +3 -0
  361. package/settings.json +3 -3
  362. package/templates/plugins-allowlist.yaml +19 -0
  363. package/artifacts/release/dist/enterprise/bundle/.gemini/settings.json +0 -11
  364. package/artifacts/release/dist/enterprise/bundle/.kimi/mcp.json +0 -11
  365. package/artifacts/release/dist/public/bundle/.gemini/settings.json +0 -11
  366. package/artifacts/release/dist/public/bundle/.kimi/mcp.json +0 -11
  367. package/build/lib/yaml.py +0 -321
  368. package/dist/enterprise/bundle/.gemini/settings.json +0 -11
  369. package/dist/enterprise/bundle/.kimi/mcp.json +0 -11
  370. package/dist/public/bundle/.gemini/settings.json +0 -11
  371. package/dist/public/bundle/.kimi/mcp.json +0 -11
@@ -9,10 +9,12 @@ import subprocess
9
9
  import sys
10
10
  import time
11
11
  from datetime import datetime, timedelta, timezone
12
+ import warnings
12
13
 
13
14
  sys.path.insert(0, os.path.dirname(__file__))
15
+ sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
14
16
 
15
- from _common import ( # noqa: E402
17
+ from hooks._common import ( # noqa: E402
16
18
  atomic_json_write,
17
19
  block_decision,
18
20
  check_performance_budget,
@@ -27,7 +29,10 @@ from _common import ( # noqa: E402
27
29
  should_skip_stop_hooks,
28
30
  STOP_CHECK_MAX_MS,
29
31
  )
30
- from state_migration import resolve_state_file # noqa: E402
32
+ from hooks.state_migration import resolve_state_file # noqa: E402
33
+
34
+ from runtime.release_run_coordinator import resolve_current_run_id # noqa: E402
35
+ from runtime import test_intent_lock # noqa: E402
31
36
 
32
37
 
33
38
  setup_crash_handler("stop_dispatcher")
@@ -132,7 +137,7 @@ def _is_internal_control_path(file_path: str) -> bool:
132
137
 
133
138
 
134
139
  try:
135
- from shadow_manager import has_recent_evidence # type: ignore
140
+ from hooks.shadow_manager import has_recent_evidence # type: ignore
136
141
  except Exception: # intentional: optional feature — shadow_manager may not exist
137
142
  has_recent_evidence = None
138
143
 
@@ -621,6 +626,104 @@ def check_bare_done(data, project_dir):
621
626
 
622
627
  return []
623
628
 
629
+
630
+ def _proof_chain_strict_enabled() -> bool:
631
+ return os.environ.get("OMG_PROOF_CHAIN_STRICT", "0").strip() == "1"
632
+
633
+
634
+ def _load_test_delta_from_evidence(project_dir: str, run_id: str | None) -> dict[str, object]:
635
+ evidence_dir = os.path.join(project_dir, ".omg", "evidence")
636
+ if not os.path.isdir(evidence_dir):
637
+ return {}
638
+
639
+ candidates = sorted(
640
+ [
641
+ os.path.join(evidence_dir, name)
642
+ for name in os.listdir(evidence_dir)
643
+ if name.endswith(".json")
644
+ ],
645
+ key=os.path.getmtime,
646
+ reverse=True,
647
+ )
648
+ for path in candidates:
649
+ try:
650
+ with open(path, "r", encoding="utf-8", errors="ignore") as handle:
651
+ payload = json.load(handle)
652
+ except (OSError, json.JSONDecodeError):
653
+ continue
654
+ if not isinstance(payload, dict):
655
+ continue
656
+ if payload.get("schema") != "EvidencePack":
657
+ continue
658
+ payload_run_id = str(payload.get("run_id", "")).strip()
659
+ if run_id and payload_run_id and payload_run_id != run_id:
660
+ continue
661
+ test_delta = payload.get("test_delta")
662
+ if isinstance(test_delta, dict):
663
+ return test_delta
664
+ return {}
665
+
666
+
667
+ def _has_waiver_artifact(delta_summary: dict[str, object]) -> bool:
668
+ waiver = delta_summary.get("waiver_artifact")
669
+ if isinstance(waiver, dict):
670
+ for field in ("artifact_path", "path", "id", "reason"):
671
+ if str(waiver.get(field, "")).strip():
672
+ return True
673
+ return False
674
+
675
+
676
+ def _has_weakened_or_drift(delta_summary: dict[str, object]) -> bool:
677
+ flags = delta_summary.get("flags")
678
+ if not isinstance(flags, list):
679
+ return False
680
+ risk_flags = {
681
+ "weakened_assertions",
682
+ "tests_mismatch",
683
+ "selector_drift",
684
+ "removed_touched_area_coverage",
685
+ "integration_to_mock_downgrade",
686
+ "snapshot_only_refresh",
687
+ }
688
+ normalized = {str(item).strip().lower() for item in flags if str(item).strip()}
689
+ return bool(normalized & risk_flags)
690
+
691
+
692
+ def check_tdd_proof_chain(data, project_dir):
693
+ if not get_feature_flag("tdd_proof_chain", True):
694
+ return []
695
+
696
+ context = data["_stop_ctx"]
697
+ if not context.get("has_source_writes", False):
698
+ return []
699
+
700
+ run_id = resolve_current_run_id(project_dir=project_dir)
701
+ lock_verdict = test_intent_lock.verify_lock(project_dir, run_id=run_id)
702
+ delta_summary = data.get("_test_delta") if isinstance(data.get("_test_delta"), dict) else {}
703
+ if not delta_summary:
704
+ delta_summary = _load_test_delta_from_evidence(project_dir, run_id)
705
+
706
+ lock_missing = str(lock_verdict.get("status", "")).strip() != "ok"
707
+ weakened_without_waiver = _has_weakened_or_drift(delta_summary) and not _has_waiver_artifact(delta_summary)
708
+ if not lock_missing and not weakened_without_waiver:
709
+ return []
710
+
711
+ strict_mode = _proof_chain_strict_enabled()
712
+ if strict_mode:
713
+ return [json.dumps({"status": "blocked", "reason": "tdd_proof_chain_incomplete"}, sort_keys=True)]
714
+
715
+ warnings.warn(
716
+ "tdd_proof_chain_incomplete_permissive",
717
+ RuntimeWarning,
718
+ stacklevel=2,
719
+ )
720
+ advisories = data.setdefault("_stop_advisories", [])
721
+ advisories.append(
722
+ "[OMG advisory] tdd proof chain incomplete: active lock evidence or waiver artifact is missing. "
723
+ "Set OMG_PROOF_CHAIN_STRICT=1 to hard-block completion."
724
+ )
725
+ return []
726
+
624
727
  def check_simplifier(data, project_dir):
625
728
  """CHECK 7: Code simplifier — advisory only, never blocks."""
626
729
  if not get_feature_flag("simplifier", True):
@@ -832,7 +935,7 @@ def check_scope_drift(project_dir):
832
935
 
833
936
 
834
937
 
835
- def check_todo_continuation(data: dict) -> dict | None:
938
+ def check_todo_continuation(data: dict[str, object]) -> dict[str, str] | None:
836
939
  """Check if agent should continue due to incomplete todos.
837
940
  Returns a dict with continuation response if idle, None otherwise.
838
941
  Budget: STOP_CHECK_MAX_MS (15s)
@@ -911,6 +1014,7 @@ def main():
911
1014
  check_diff_budget,
912
1015
  check_recent_failures,
913
1016
  check_test_execution,
1017
+ check_tdd_proof_chain,
914
1018
  check_test_validator_coverage,
915
1019
  check_false_fix,
916
1020
  check_write_failures,
package/hud/omg-hud.mjs CHANGED
@@ -87,7 +87,7 @@ function readOmgVersion() {
87
87
  // fall through to static fallback
88
88
  }
89
89
 
90
- return "2.1.0";
90
+ return "2.1.4";
91
91
  }
92
92
 
93
93
  const OMG_VERSION = readOmgVersion();
@@ -723,6 +723,15 @@ function readSessionHealthFromStdin(stdin) {
723
723
  return null;
724
724
  }
725
725
 
726
+ const STALENESS_THRESHOLD_MS = 5 * 60 * 1000;
727
+
728
+ function isSessionHealthStale(health) {
729
+ if (!health || !health.updated_at) return false;
730
+ const updatedMs = new Date(health.updated_at).getTime();
731
+ if (isNaN(updatedMs)) return false;
732
+ return Date.now() - updatedMs > STALENESS_THRESHOLD_MS;
733
+ }
734
+
726
735
  function renderSessionHealth(health) {
727
736
  if (!health) return null;
728
737
  const contamination = typeof health.contamination_risk === "number" ? health.contamination_risk : 0;
@@ -734,14 +743,16 @@ function renderSessionHealth(health) {
734
743
  const overPct = Math.round(overthinking * 100);
735
744
  const healthPct = Math.round(ctxHealth * 100);
736
745
 
737
- const contColor = contamination >= 0.7 ? red : contamination >= 0.3 ? yellow : green;
738
- const overColor = overthinking >= 0.85 ? red : overthinking >= 0.5 ? yellow : green;
739
- const healthColor = ctxHealth <= 0.2 ? red : ctxHealth <= 0.4 ? yellow : green;
746
+ const stale = isSessionHealthStale(health);
747
+ const contColor = stale ? dim : contamination >= 0.7 ? red : contamination >= 0.3 ? yellow : green;
748
+ const overColor = stale ? dim : overthinking >= 0.85 ? red : overthinking >= 0.5 ? yellow : green;
749
+ const healthColor = stale ? dim : ctxHealth <= 0.2 ? red : ctxHealth <= 0.4 ? yellow : green;
740
750
 
741
751
  let badge = "";
742
752
  if (action === "block") badge = ` ${red("BLOCK")}`;
743
753
  else if (action === "reflect") badge = ` ${yellow("REFLECT")}`;
744
754
  else if (action === "warn") badge = ` ${yellow("WARN")}`;
755
+ if (stale) badge += ` ${yellow("[STALE]")}`;
745
756
 
746
757
  return (
747
758
  `contam:${contColor(`${contPct}%`)} ` +
@@ -940,7 +951,7 @@ function renderBackgroundTasks(tasks) {
940
951
 
941
952
  function renderVerificationStatus(state) {
942
953
  if (!state) return dim("verification: unknown");
943
- const { status, blockers, evidence_links } = state;
954
+ const { status, blockers, evidence_links, progress } = state;
944
955
  const blockerCount = blockers.length;
945
956
  const latestEvidence = evidence_links.length > 0
946
957
  ? evidence_links[evidence_links.length - 1]
@@ -948,11 +959,24 @@ function renderVerificationStatus(state) {
948
959
  const evidenceSuffix = latestEvidence
949
960
  ? ` ${dim(`evidence:${basename(latestEvidence)}`)}`
950
961
  : "";
962
+
963
+ // Build progress suffix from step/total when available
964
+ const step = progress && typeof progress.step === "number" ? progress.step : null;
965
+ const total = progress && typeof progress.total === "number" ? progress.total : null;
966
+ const currentStage = progress && progress.current_stage ? progress.current_stage : null;
967
+ let progressSuffix = "";
968
+ if (step !== null && total !== null && status === "running") {
969
+ progressSuffix = ` ${dim(`[${step}/${total}]`)}`;
970
+ if (currentStage) {
971
+ progressSuffix += ` ${dim(currentStage)}`;
972
+ }
973
+ }
974
+
951
975
  if (status === "ok") {
952
976
  return green("\u2713 verification ok") + evidenceSuffix;
953
977
  }
954
978
  if (status === "running") {
955
- return yellow("\u27F3 verification running") + evidenceSuffix;
979
+ return yellow("\u27F3 verification running") + progressSuffix + evidenceSuffix;
956
980
  }
957
981
  if (status === "error" || status === "blocked") {
958
982
  const blockerSuffix = blockerCount > 0 ? ` (${blockerCount} blockers)` : "";
package/lab/pipeline.py CHANGED
@@ -3,16 +3,42 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from datetime import datetime, timezone
6
+ from pathlib import Path
7
+ from time import monotonic
6
8
  from typing import Any
7
9
 
8
10
  from .policies import validate_job_request
9
11
 
12
+ PIPELINE_STAGE_ORDER: tuple[str, ...] = (
13
+ "data_prepare",
14
+ "synthetic_refine",
15
+ "train_distill",
16
+ "evaluate",
17
+ "regression_test",
18
+ )
19
+
20
+ _STAGE_ADAPTER_KIND: dict[str, str] = {
21
+ "train_distill": "training",
22
+ "evaluate": "simulator",
23
+ "regression_test": "simulator",
24
+ }
25
+
10
26
 
11
27
  def _now() -> str:
12
28
  return datetime.now(timezone.utc).isoformat()
13
29
 
14
30
 
15
- def run_pipeline(job: dict[str, Any]) -> dict[str, Any]:
31
+ def run_pipeline(
32
+ job: dict[str, Any],
33
+ *,
34
+ run_id: str | None = None,
35
+ project_dir: str | None = None,
36
+ ) -> dict[str, Any]:
37
+ from runtime.forge_contracts import build_stage_evidence, read_stage_runtime_snapshots, resolve_stage_timeout_ms
38
+
39
+ from runtime.forge_agents import check_required_backends_satisfied, resolve_adapters
40
+
41
+ active_run_id = str(run_id or _now())
16
42
  ok, reason = validate_job_request(job)
17
43
  if not ok:
18
44
  return {
@@ -21,43 +47,124 @@ def run_pipeline(job: dict[str, Any]) -> dict[str, Any]:
21
47
  "reason": reason,
22
48
  "published": False,
23
49
  "evaluation_report": None,
50
+ "run_id": active_run_id,
51
+ "stage_evidence": [],
52
+ }
53
+
54
+ adapter_evidence = resolve_adapters(job)
55
+ backends_ok, backends_reason = check_required_backends_satisfied(adapter_evidence)
56
+ if not backends_ok:
57
+ return {
58
+ "status": "blocked",
59
+ "stage": "adapter",
60
+ "reason": backends_reason,
61
+ "published": False,
62
+ "evaluation_report": None,
63
+ "run_id": active_run_id,
64
+ "stage_evidence": [],
65
+ "adapter_evidence": adapter_evidence,
24
66
  }
25
67
 
68
+ adapter_by_kind: dict[str, list[dict[str, object]]] = {}
69
+ for ev in adapter_evidence:
70
+ kind = str(ev.get("kind", ""))
71
+ adapter_by_kind.setdefault(kind, []).append(ev)
72
+
26
73
  target_metric = float(job.get("target_metric", 0.8))
27
74
  simulated_metric = float(job.get("simulated_metric", target_metric))
75
+ failed_stages = _normalize_stage_set(job.get("stage_failures"))
76
+ explicit_failed_stage = str(job.get("fail_stage", "")).strip().lower()
77
+ if explicit_failed_stage:
78
+ failed_stages.add(explicit_failed_stage)
28
79
 
29
- stages = [
30
- {"name": "data_prepare", "status": "ok"},
31
- {"name": "synthetic_refine", "status": "ok"},
32
- {"name": "train_distill", "status": "ok"},
33
- {"name": "evaluate", "status": "ok" if simulated_metric >= target_metric else "fail"},
34
- {"name": "regression_test", "status": "ok" if simulated_metric >= target_metric else "fail"},
35
- ]
80
+ stage_durations_ms = _normalize_int_map(job.get("stage_durations_ms"))
81
+ stage_artifacts = _normalize_artifact_map(job.get("stage_artifacts"))
36
82
 
37
- report = {
38
- "created_at": _now(),
39
- "metric": simulated_metric,
40
- "target_metric": target_metric,
41
- "passed": simulated_metric >= target_metric,
42
- "notes": job.get("evaluation_notes", ""),
43
- }
83
+ stages: list[dict[str, str]] = []
84
+ stage_evidence: list[dict[str, object]] = []
85
+ snapshot_root = str(Path(project_dir)) if project_dir else ""
44
86
 
45
- if not report["passed"]:
46
- return {
47
- "status": "failed_evaluation",
48
- "stage": "evaluate",
49
- "stages": stages,
50
- "published": False,
51
- "evaluation_report": report,
52
- }
87
+ for stage in PIPELINE_STAGE_ORDER:
88
+ started_at = monotonic()
89
+ stage_status = "success"
90
+ timeout_ms = resolve_stage_timeout_ms(job, stage)
91
+ requested_duration_ms = stage_durations_ms.get(stage, 0)
53
92
 
54
- return {
93
+ if timeout_ms == 0 or requested_duration_ms > timeout_ms:
94
+ stage_status = "timeout"
95
+ elif stage in failed_stages:
96
+ stage_status = "failed"
97
+ elif stage in {"evaluate", "regression_test"} and simulated_metric < target_metric:
98
+ stage_status = "failed"
99
+
100
+ stage_adapter_kind = _STAGE_ADAPTER_KIND.get(stage)
101
+ stage_adapter_ev = adapter_by_kind.get(stage_adapter_kind, []) if stage_adapter_kind else []
102
+
103
+ defense_snapshot: dict[str, object] = {}
104
+ session_health_snapshot: dict[str, object] = {}
105
+ if snapshot_root:
106
+ defense_snapshot, session_health_snapshot = read_stage_runtime_snapshots(snapshot_root, active_run_id)
107
+
108
+ stage_record = build_stage_evidence(
109
+ stage=stage,
110
+ run_id=active_run_id,
111
+ status=stage_status,
112
+ started_at_ms=started_at,
113
+ defense_snapshot=defense_snapshot,
114
+ session_health_snapshot=session_health_snapshot,
115
+ artifacts=stage_artifacts.get(stage, []),
116
+ adapter_evidence=stage_adapter_ev if stage_adapter_ev else None,
117
+ )
118
+ stage_evidence.append(stage_record)
119
+ stages.append({"name": stage, "status": _to_legacy_stage_status(stage_status)})
120
+
121
+ if stage_status == "timeout":
122
+ return {
123
+ "status": "stage_timeout",
124
+ "stage": stage,
125
+ "reason": f"stage timeout envelope exceeded for {stage}",
126
+ "stages": stages,
127
+ "published": False,
128
+ "evaluation_report": _evaluation_report(job, simulated_metric, target_metric),
129
+ "run_id": active_run_id,
130
+ "stage_evidence": stage_evidence,
131
+ }
132
+ if stage_status == "failed":
133
+ if stage in {"evaluate", "regression_test"} and simulated_metric < target_metric:
134
+ return {
135
+ "status": "failed_evaluation",
136
+ "stage": "evaluate",
137
+ "stages": stages,
138
+ "published": False,
139
+ "evaluation_report": _evaluation_report(job, simulated_metric, target_metric),
140
+ "run_id": active_run_id,
141
+ "stage_evidence": stage_evidence,
142
+ }
143
+ return {
144
+ "status": "failed_stage",
145
+ "stage": stage,
146
+ "reason": f"stage execution failed for {stage}",
147
+ "stages": stages,
148
+ "published": False,
149
+ "evaluation_report": _evaluation_report(job, simulated_metric, target_metric),
150
+ "run_id": active_run_id,
151
+ "stage_evidence": stage_evidence,
152
+ }
153
+
154
+ report = _evaluation_report(job, simulated_metric, target_metric)
155
+
156
+ result: dict[str, Any] = {
55
157
  "status": "ready",
56
158
  "stage": "complete",
57
159
  "stages": stages,
58
160
  "published": False,
59
161
  "evaluation_report": report,
162
+ "run_id": active_run_id,
163
+ "stage_evidence": stage_evidence,
60
164
  }
165
+ if adapter_evidence:
166
+ result["adapter_evidence"] = adapter_evidence
167
+ return result
61
168
 
62
169
 
63
170
  def publish_artifact(result: dict[str, Any]) -> dict[str, Any]:
@@ -79,8 +186,72 @@ def publish_artifact(result: dict[str, Any]) -> dict[str, Any]:
79
186
  def run_pipeline_with_evidence(project_dir: str, job: dict[str, Any], run_id: str) -> dict[str, Any]:
80
187
  from runtime.forge_contracts import build_forge_evidence
81
188
 
82
- result = run_pipeline(job)
83
- evidence_path = build_forge_evidence(project_dir=project_dir, run_id=run_id, job=job, result=result)
189
+ result = run_pipeline(job, run_id=run_id, project_dir=project_dir)
190
+ evidence_path = build_forge_evidence(
191
+ project_dir=project_dir,
192
+ run_id=run_id,
193
+ job=job,
194
+ result=result,
195
+ stage_evidence=result.get("stage_evidence", []),
196
+ )
84
197
  out = dict(result)
85
198
  out["evidence_path"] = evidence_path
199
+ out["labs_only"] = True
200
+ out["proof_backed"] = True
86
201
  return out
202
+
203
+
204
+ def _evaluation_report(job: dict[str, Any], simulated_metric: float, target_metric: float) -> dict[str, object]:
205
+ return {
206
+ "created_at": _now(),
207
+ "metric": simulated_metric,
208
+ "target_metric": target_metric,
209
+ "passed": simulated_metric >= target_metric,
210
+ "notes": job.get("evaluation_notes", ""),
211
+ }
212
+
213
+
214
+ def _normalize_stage_set(value: object) -> set[str]:
215
+ if not isinstance(value, list):
216
+ return set()
217
+ out: set[str] = set()
218
+ for item in value:
219
+ stage = str(item).strip().lower()
220
+ if stage in PIPELINE_STAGE_ORDER:
221
+ out.add(stage)
222
+ return out
223
+
224
+
225
+ def _normalize_int_map(value: object) -> dict[str, int]:
226
+ if not isinstance(value, dict):
227
+ return {}
228
+ out: dict[str, int] = {}
229
+ for raw_key, raw_value in value.items():
230
+ stage = str(raw_key).strip().lower()
231
+ if stage not in PIPELINE_STAGE_ORDER:
232
+ continue
233
+ try:
234
+ out[stage] = max(0, int(raw_value))
235
+ except (TypeError, ValueError):
236
+ continue
237
+ return out
238
+
239
+
240
+ def _normalize_artifact_map(value: object) -> dict[str, list[str]]:
241
+ if not isinstance(value, dict):
242
+ return {}
243
+ out: dict[str, list[str]] = {}
244
+ for raw_key, raw_value in value.items():
245
+ stage = str(raw_key).strip().lower()
246
+ if stage not in PIPELINE_STAGE_ORDER or not isinstance(raw_value, list):
247
+ continue
248
+ out[stage] = [str(item) for item in raw_value]
249
+ return out
250
+
251
+
252
+ def _to_legacy_stage_status(stage_status: str) -> str:
253
+ if stage_status == "success":
254
+ return "ok"
255
+ if stage_status == "timeout":
256
+ return "timeout"
257
+ return "fail"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trac3er/oh-my-god",
3
- "version": "2.1.0",
3
+ "version": "2.1.4",
4
4
  "description": "OMG (Oh My God) — Multi-agent orchestration, evidence-backed verification, and durable session state for Claude Code, Codex, and supported agent hosts",
5
5
  "main": "OMG-setup.sh",
6
6
  "scripts": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omg-advanced",
3
- "version": "2.1.0",
3
+ "version": "2.1.4",
4
4
  "description": "Advanced OMG commands - deep planning, learning, code review, and specialized workflows",
5
5
  "type": "omg-plugin",
6
6
  "commands": {
@@ -53,35 +53,52 @@
53
53
  "categories": {
54
54
  "planning": {
55
55
  "description": "Strategic planning and architecture",
56
- "commands": ["deep-plan"]
56
+ "commands": [
57
+ "deep-plan"
58
+ ]
57
59
  },
58
60
  "quality": {
59
61
  "description": "Code quality and review",
60
- "commands": ["code-review"]
62
+ "commands": [
63
+ "code-review"
64
+ ]
61
65
  },
62
66
  "knowledge": {
63
67
  "description": "Learning and skill creation",
64
- "commands": ["learn"]
68
+ "commands": [
69
+ "learn"
70
+ ]
65
71
  },
66
72
  "delivery": {
67
73
  "description": "Shipping and release workflows",
68
- "commands": ["ship"]
74
+ "commands": [
75
+ "ship"
76
+ ]
69
77
  },
70
78
  "collaboration": {
71
79
  "description": "Team collaboration and handoff",
72
- "commands": ["handoff"]
80
+ "commands": [
81
+ "handoff"
82
+ ]
73
83
  },
74
84
  "automation": {
75
85
  "description": "Autonomous execution modes",
76
- "commands": ["ralph-start", "ralph-stop"]
86
+ "commands": [
87
+ "ralph-start",
88
+ "ralph-stop"
89
+ ]
77
90
  },
78
91
  "thinking": {
79
92
  "description": "Structured thinking tools",
80
- "commands": ["sequential-thinking"]
93
+ "commands": [
94
+ "sequential-thinking"
95
+ ]
81
96
  },
82
97
  "oss": {
83
98
  "description": "Open source maintainer tools",
84
- "commands": ["maintainer"]
99
+ "commands": [
100
+ "maintainer"
101
+ ]
85
102
  }
86
103
  }
87
104
  }