@trac3er/oh-my-god 2.0.4 → 2.0.7

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 (668) hide show
  1. package/.agents/skills/omg/AGENTS.fragment.md +57 -4
  2. package/.agents/skills/omg/algorithms/SKILL.md +11 -0
  3. package/.agents/skills/omg/algorithms/openai.yaml +11 -0
  4. package/.agents/skills/omg/api-twin/SKILL.md +11 -0
  5. package/.agents/skills/omg/api-twin/openai.yaml +12 -0
  6. package/.agents/skills/omg/claim-judge/SKILL.md +11 -0
  7. package/.agents/skills/omg/claim-judge/openai.yaml +13 -0
  8. package/.agents/skills/omg/codex-rules.md +33 -0
  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 +11 -0
  12. package/.agents/skills/omg/data-lineage/openai.yaml +12 -0
  13. package/.agents/skills/omg/delta-classifier/SKILL.md +11 -0
  14. package/.agents/skills/omg/delta-classifier/openai.yaml +12 -0
  15. package/.agents/skills/omg/eval-gate/SKILL.md +11 -0
  16. package/.agents/skills/omg/eval-gate/openai.yaml +12 -0
  17. package/.agents/skills/omg/health/SKILL.md +11 -0
  18. package/.agents/skills/omg/health/openai.yaml +11 -0
  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 +11 -0
  22. package/.agents/skills/omg/incident-replay/openai.yaml +12 -0
  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 +11 -0
  28. package/.agents/skills/omg/plan-council/openai.yaml +12 -0
  29. package/.agents/skills/omg/preflight/SKILL.md +11 -0
  30. package/.agents/skills/omg/preflight/openai.yaml +12 -0
  31. package/.agents/skills/omg/proof-gate/SKILL.md +11 -0
  32. package/.agents/skills/omg/proof-gate/openai.yaml +13 -0
  33. package/.agents/skills/omg/remote-supervisor/SKILL.md +11 -0
  34. package/.agents/skills/omg/remote-supervisor/openai.yaml +12 -0
  35. package/.agents/skills/omg/robotics/SKILL.md +11 -0
  36. package/.agents/skills/omg/robotics/openai.yaml +11 -0
  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 +11 -0
  40. package/.agents/skills/omg/security-check/openai.yaml +13 -0
  41. package/.agents/skills/omg/test-intent-lock/SKILL.md +11 -0
  42. package/.agents/skills/omg/test-intent-lock/openai.yaml +13 -0
  43. package/.agents/skills/omg/tracebank/SKILL.md +11 -0
  44. package/.agents/skills/omg/tracebank/openai.yaml +12 -0
  45. package/.agents/skills/omg/vision/SKILL.md +11 -0
  46. package/.agents/skills/omg/vision/openai.yaml +11 -0
  47. package/.claude-plugin/marketplace.json +5 -5
  48. package/.claude-plugin/plugin.json +1 -1
  49. package/.claude-plugin/scripts/uninstall.sh +2 -2
  50. package/.mcp.json +0 -22
  51. package/CHANGELOG.md +13 -0
  52. package/OMG-setup.sh +64 -14
  53. package/OMG_COMPAT_CONTRACT.md +1 -1
  54. package/README.md +8 -6
  55. package/agents/omg-security-auditor.md +1 -1
  56. package/artifacts/release/.agents/skills/omg/AGENTS.fragment.md +52 -0
  57. package/artifacts/release/.agents/skills/omg/algorithms/SKILL.md +11 -0
  58. package/artifacts/release/.agents/skills/omg/algorithms/openai.yaml +11 -0
  59. package/artifacts/release/.agents/skills/omg/api-twin/SKILL.md +11 -0
  60. package/artifacts/release/.agents/skills/omg/api-twin/openai.yaml +12 -0
  61. package/artifacts/release/.agents/skills/omg/codex-mcp.toml +4 -0
  62. package/artifacts/release/.agents/skills/omg/codex-rules.md +29 -0
  63. package/artifacts/release/.agents/skills/omg/control-plane/SKILL.md +11 -0
  64. package/artifacts/release/.agents/skills/omg/control-plane/openai.yaml +14 -0
  65. package/artifacts/release/.agents/skills/omg/data-lineage/SKILL.md +11 -0
  66. package/artifacts/release/.agents/skills/omg/data-lineage/openai.yaml +12 -0
  67. package/artifacts/release/.agents/skills/omg/delta-classifier/SKILL.md +11 -0
  68. package/artifacts/release/.agents/skills/omg/delta-classifier/openai.yaml +12 -0
  69. package/artifacts/release/.agents/skills/omg/eval-gate/SKILL.md +11 -0
  70. package/artifacts/release/.agents/skills/omg/eval-gate/openai.yaml +12 -0
  71. package/artifacts/release/.agents/skills/omg/health/SKILL.md +11 -0
  72. package/artifacts/release/.agents/skills/omg/health/openai.yaml +11 -0
  73. package/artifacts/release/.agents/skills/omg/hook-governor/SKILL.md +11 -0
  74. package/artifacts/release/.agents/skills/omg/hook-governor/openai.yaml +11 -0
  75. package/artifacts/release/.agents/skills/omg/incident-replay/SKILL.md +11 -0
  76. package/artifacts/release/.agents/skills/omg/incident-replay/openai.yaml +12 -0
  77. package/artifacts/release/.agents/skills/omg/lsp-pack/SKILL.md +11 -0
  78. package/artifacts/release/.agents/skills/omg/lsp-pack/openai.yaml +11 -0
  79. package/artifacts/release/.agents/skills/omg/mcp-fabric/SKILL.md +11 -0
  80. package/artifacts/release/.agents/skills/omg/mcp-fabric/openai.yaml +13 -0
  81. package/artifacts/release/.agents/skills/omg/preflight/SKILL.md +11 -0
  82. package/artifacts/release/.agents/skills/omg/preflight/openai.yaml +12 -0
  83. package/artifacts/release/.agents/skills/omg/remote-supervisor/SKILL.md +11 -0
  84. package/artifacts/release/.agents/skills/omg/remote-supervisor/openai.yaml +12 -0
  85. package/artifacts/release/.agents/skills/omg/robotics/SKILL.md +11 -0
  86. package/artifacts/release/.agents/skills/omg/robotics/openai.yaml +11 -0
  87. package/artifacts/release/.agents/skills/omg/secure-worktree-pipeline/SKILL.md +11 -0
  88. package/artifacts/release/.agents/skills/omg/secure-worktree-pipeline/openai.yaml +12 -0
  89. package/artifacts/release/.agents/skills/omg/security-check/SKILL.md +11 -0
  90. package/artifacts/release/.agents/skills/omg/security-check/openai.yaml +13 -0
  91. package/artifacts/release/.agents/skills/omg/tracebank/SKILL.md +11 -0
  92. package/artifacts/release/.agents/skills/omg/tracebank/openai.yaml +12 -0
  93. package/artifacts/release/.agents/skills/omg/vision/SKILL.md +11 -0
  94. package/artifacts/release/.agents/skills/omg/vision/openai.yaml +11 -0
  95. package/artifacts/release/.claude-plugin/marketplace.json +36 -0
  96. package/artifacts/release/.claude-plugin/plugin.json +23 -0
  97. package/artifacts/release/.mcp.json +40 -0
  98. package/artifacts/release/OMG_COMPAT_CONTRACT.md +92 -0
  99. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/AGENTS.fragment.md +52 -0
  100. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/algorithms/SKILL.md +11 -0
  101. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/algorithms/openai.yaml +11 -0
  102. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/api-twin/SKILL.md +11 -0
  103. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/api-twin/openai.yaml +12 -0
  104. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/codex-mcp.toml +4 -0
  105. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/codex-rules.md +29 -0
  106. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/control-plane/SKILL.md +11 -0
  107. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/control-plane/openai.yaml +14 -0
  108. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/data-lineage/SKILL.md +11 -0
  109. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/data-lineage/openai.yaml +12 -0
  110. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/delta-classifier/SKILL.md +11 -0
  111. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/delta-classifier/openai.yaml +12 -0
  112. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/eval-gate/SKILL.md +11 -0
  113. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/eval-gate/openai.yaml +12 -0
  114. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/health/SKILL.md +11 -0
  115. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/health/openai.yaml +11 -0
  116. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/hook-governor/SKILL.md +11 -0
  117. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/hook-governor/openai.yaml +11 -0
  118. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/incident-replay/SKILL.md +11 -0
  119. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/incident-replay/openai.yaml +12 -0
  120. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/lsp-pack/SKILL.md +11 -0
  121. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/lsp-pack/openai.yaml +11 -0
  122. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/mcp-fabric/SKILL.md +11 -0
  123. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/mcp-fabric/openai.yaml +13 -0
  124. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/preflight/SKILL.md +11 -0
  125. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/preflight/openai.yaml +12 -0
  126. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/remote-supervisor/SKILL.md +11 -0
  127. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/remote-supervisor/openai.yaml +12 -0
  128. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/robotics/SKILL.md +11 -0
  129. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/robotics/openai.yaml +11 -0
  130. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/secure-worktree-pipeline/SKILL.md +11 -0
  131. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/secure-worktree-pipeline/openai.yaml +12 -0
  132. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/security-check/SKILL.md +11 -0
  133. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/security-check/openai.yaml +13 -0
  134. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/tracebank/SKILL.md +11 -0
  135. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/tracebank/openai.yaml +12 -0
  136. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/vision/SKILL.md +11 -0
  137. package/artifacts/release/dist/enterprise/bundle/.agents/skills/omg/vision/openai.yaml +11 -0
  138. package/artifacts/release/dist/enterprise/bundle/OMG_COMPAT_CONTRACT.md +92 -0
  139. package/artifacts/release/dist/enterprise/bundle/registry/bundles/algorithms.yaml +45 -0
  140. package/artifacts/release/dist/enterprise/bundle/registry/bundles/api-twin.yaml +48 -0
  141. package/artifacts/release/dist/enterprise/bundle/registry/bundles/control-plane.yaml +151 -0
  142. package/artifacts/release/dist/enterprise/bundle/registry/bundles/data-lineage.yaml +47 -0
  143. package/artifacts/release/dist/enterprise/bundle/registry/bundles/delta-classifier.yaml +47 -0
  144. package/artifacts/release/dist/enterprise/bundle/registry/bundles/eval-gate.yaml +47 -0
  145. package/artifacts/release/dist/enterprise/bundle/registry/bundles/health.yaml +45 -0
  146. package/artifacts/release/dist/enterprise/bundle/registry/bundles/hook-governor.yaml +97 -0
  147. package/artifacts/release/dist/enterprise/bundle/registry/bundles/incident-replay.yaml +47 -0
  148. package/artifacts/release/dist/enterprise/bundle/registry/bundles/lsp-pack.yaml +48 -0
  149. package/artifacts/release/dist/enterprise/bundle/registry/bundles/mcp-fabric.yaml +53 -0
  150. package/artifacts/release/dist/enterprise/bundle/registry/bundles/preflight.yaml +48 -0
  151. package/artifacts/release/dist/enterprise/bundle/registry/bundles/remote-supervisor.yaml +49 -0
  152. package/artifacts/release/dist/enterprise/bundle/registry/bundles/robotics.yaml +45 -0
  153. package/artifacts/release/dist/enterprise/bundle/registry/bundles/secure-worktree-pipeline.yaml +54 -0
  154. package/artifacts/release/dist/enterprise/bundle/registry/bundles/security-check.yaml +50 -0
  155. package/artifacts/release/dist/enterprise/bundle/registry/bundles/tracebank.yaml +47 -0
  156. package/artifacts/release/dist/enterprise/bundle/registry/bundles/vision.yaml +45 -0
  157. package/artifacts/release/dist/enterprise/bundle/registry/omg-capability.schema.json +296 -0
  158. package/artifacts/release/dist/enterprise/manifest.json +243 -0
  159. package/artifacts/release/dist/public/bundle/.agents/skills/omg/AGENTS.fragment.md +7 -0
  160. package/artifacts/release/dist/public/bundle/.agents/skills/omg/algorithms/SKILL.md +11 -0
  161. package/artifacts/release/dist/public/bundle/.agents/skills/omg/algorithms/openai.yaml +11 -0
  162. package/artifacts/release/dist/public/bundle/.agents/skills/omg/api-twin/SKILL.md +11 -0
  163. package/artifacts/release/dist/public/bundle/.agents/skills/omg/api-twin/openai.yaml +12 -0
  164. package/artifacts/release/dist/public/bundle/.agents/skills/omg/codex-mcp.toml +4 -0
  165. package/artifacts/release/dist/public/bundle/.agents/skills/omg/control-plane/SKILL.md +11 -0
  166. package/artifacts/release/dist/public/bundle/.agents/skills/omg/control-plane/openai.yaml +14 -0
  167. package/artifacts/release/dist/public/bundle/.agents/skills/omg/data-lineage/SKILL.md +11 -0
  168. package/artifacts/release/dist/public/bundle/.agents/skills/omg/data-lineage/openai.yaml +12 -0
  169. package/artifacts/release/dist/public/bundle/.agents/skills/omg/delta-classifier/SKILL.md +11 -0
  170. package/artifacts/release/dist/public/bundle/.agents/skills/omg/delta-classifier/openai.yaml +12 -0
  171. package/artifacts/release/dist/public/bundle/.agents/skills/omg/eval-gate/SKILL.md +11 -0
  172. package/artifacts/release/dist/public/bundle/.agents/skills/omg/eval-gate/openai.yaml +12 -0
  173. package/artifacts/release/dist/public/bundle/.agents/skills/omg/health/SKILL.md +11 -0
  174. package/artifacts/release/dist/public/bundle/.agents/skills/omg/health/openai.yaml +11 -0
  175. package/artifacts/release/dist/public/bundle/.agents/skills/omg/hook-governor/SKILL.md +11 -0
  176. package/artifacts/release/dist/public/bundle/.agents/skills/omg/hook-governor/openai.yaml +11 -0
  177. package/artifacts/release/dist/public/bundle/.agents/skills/omg/incident-replay/SKILL.md +11 -0
  178. package/artifacts/release/dist/public/bundle/.agents/skills/omg/incident-replay/openai.yaml +12 -0
  179. package/artifacts/release/dist/public/bundle/.agents/skills/omg/lsp-pack/SKILL.md +11 -0
  180. package/artifacts/release/dist/public/bundle/.agents/skills/omg/lsp-pack/openai.yaml +11 -0
  181. package/artifacts/release/dist/public/bundle/.agents/skills/omg/mcp-fabric/SKILL.md +11 -0
  182. package/artifacts/release/dist/public/bundle/.agents/skills/omg/mcp-fabric/openai.yaml +13 -0
  183. package/artifacts/release/dist/public/bundle/.agents/skills/omg/preflight/SKILL.md +11 -0
  184. package/artifacts/release/dist/public/bundle/.agents/skills/omg/preflight/openai.yaml +12 -0
  185. package/artifacts/release/dist/public/bundle/.agents/skills/omg/remote-supervisor/SKILL.md +11 -0
  186. package/artifacts/release/dist/public/bundle/.agents/skills/omg/remote-supervisor/openai.yaml +12 -0
  187. package/artifacts/release/dist/public/bundle/.agents/skills/omg/robotics/SKILL.md +11 -0
  188. package/artifacts/release/dist/public/bundle/.agents/skills/omg/robotics/openai.yaml +11 -0
  189. package/artifacts/release/dist/public/bundle/.agents/skills/omg/secure-worktree-pipeline/SKILL.md +11 -0
  190. package/artifacts/release/dist/public/bundle/.agents/skills/omg/secure-worktree-pipeline/openai.yaml +12 -0
  191. package/artifacts/release/dist/public/bundle/.agents/skills/omg/security-check/SKILL.md +11 -0
  192. package/artifacts/release/dist/public/bundle/.agents/skills/omg/security-check/openai.yaml +13 -0
  193. package/artifacts/release/dist/public/bundle/.agents/skills/omg/tracebank/SKILL.md +11 -0
  194. package/artifacts/release/dist/public/bundle/.agents/skills/omg/tracebank/openai.yaml +12 -0
  195. package/artifacts/release/dist/public/bundle/.agents/skills/omg/vision/SKILL.md +11 -0
  196. package/artifacts/release/dist/public/bundle/.agents/skills/omg/vision/openai.yaml +11 -0
  197. package/artifacts/release/dist/public/bundle/.claude-plugin/marketplace.json +36 -0
  198. package/artifacts/release/dist/public/bundle/.claude-plugin/plugin.json +23 -0
  199. package/artifacts/release/dist/public/bundle/.mcp.json +40 -0
  200. package/artifacts/release/dist/public/bundle/OMG_COMPAT_CONTRACT.md +92 -0
  201. package/artifacts/release/dist/public/bundle/registry/bundles/algorithms.yaml +45 -0
  202. package/artifacts/release/dist/public/bundle/registry/bundles/api-twin.yaml +48 -0
  203. package/artifacts/release/dist/public/bundle/registry/bundles/control-plane.yaml +151 -0
  204. package/artifacts/release/dist/public/bundle/registry/bundles/data-lineage.yaml +47 -0
  205. package/artifacts/release/dist/public/bundle/registry/bundles/delta-classifier.yaml +47 -0
  206. package/artifacts/release/dist/public/bundle/registry/bundles/eval-gate.yaml +47 -0
  207. package/artifacts/release/dist/public/bundle/registry/bundles/health.yaml +45 -0
  208. package/artifacts/release/dist/public/bundle/registry/bundles/hook-governor.yaml +97 -0
  209. package/artifacts/release/dist/public/bundle/registry/bundles/incident-replay.yaml +47 -0
  210. package/artifacts/release/dist/public/bundle/registry/bundles/lsp-pack.yaml +48 -0
  211. package/artifacts/release/dist/public/bundle/registry/bundles/mcp-fabric.yaml +53 -0
  212. package/artifacts/release/dist/public/bundle/registry/bundles/preflight.yaml +48 -0
  213. package/artifacts/release/dist/public/bundle/registry/bundles/remote-supervisor.yaml +49 -0
  214. package/artifacts/release/dist/public/bundle/registry/bundles/robotics.yaml +45 -0
  215. package/artifacts/release/dist/public/bundle/registry/bundles/secure-worktree-pipeline.yaml +54 -0
  216. package/artifacts/release/dist/public/bundle/registry/bundles/security-check.yaml +50 -0
  217. package/artifacts/release/dist/public/bundle/registry/bundles/tracebank.yaml +47 -0
  218. package/artifacts/release/dist/public/bundle/registry/bundles/vision.yaml +45 -0
  219. package/artifacts/release/dist/public/bundle/registry/omg-capability.schema.json +296 -0
  220. package/artifacts/release/dist/public/bundle/settings.json +526 -0
  221. package/artifacts/release/dist/public/manifest.json +255 -0
  222. package/artifacts/release/registry/bundles/algorithms.yaml +45 -0
  223. package/artifacts/release/registry/bundles/api-twin.yaml +48 -0
  224. package/artifacts/release/registry/bundles/control-plane.yaml +151 -0
  225. package/artifacts/release/registry/bundles/data-lineage.yaml +47 -0
  226. package/artifacts/release/registry/bundles/delta-classifier.yaml +47 -0
  227. package/artifacts/release/registry/bundles/eval-gate.yaml +47 -0
  228. package/artifacts/release/registry/bundles/health.yaml +45 -0
  229. package/artifacts/release/registry/bundles/hook-governor.yaml +97 -0
  230. package/artifacts/release/registry/bundles/incident-replay.yaml +47 -0
  231. package/artifacts/release/registry/bundles/lsp-pack.yaml +48 -0
  232. package/artifacts/release/registry/bundles/mcp-fabric.yaml +53 -0
  233. package/artifacts/release/registry/bundles/preflight.yaml +48 -0
  234. package/artifacts/release/registry/bundles/remote-supervisor.yaml +49 -0
  235. package/artifacts/release/registry/bundles/robotics.yaml +45 -0
  236. package/artifacts/release/registry/bundles/secure-worktree-pipeline.yaml +54 -0
  237. package/artifacts/release/registry/bundles/security-check.yaml +50 -0
  238. package/artifacts/release/registry/bundles/tracebank.yaml +47 -0
  239. package/artifacts/release/registry/bundles/vision.yaml +45 -0
  240. package/artifacts/release/registry/omg-capability.schema.json +296 -0
  241. package/artifacts/release/settings.json +594 -0
  242. package/build/lib/agents/__init__.py +1 -0
  243. package/build/lib/agents/designer.md +67 -0
  244. package/build/lib/agents/explore.md +60 -0
  245. package/build/lib/agents/model_roles.py +196 -0
  246. package/build/lib/agents/omg-api-builder.md +23 -0
  247. package/build/lib/agents/omg-architect-mode.md +41 -0
  248. package/build/lib/agents/omg-architect.md +13 -0
  249. package/build/lib/agents/omg-backend-engineer.md +41 -0
  250. package/build/lib/agents/omg-critic.md +16 -0
  251. package/build/lib/agents/omg-database-engineer.md +41 -0
  252. package/build/lib/agents/omg-escalation-router.md +17 -0
  253. package/build/lib/agents/omg-executor.md +12 -0
  254. package/build/lib/agents/omg-frontend-designer.md +41 -0
  255. package/build/lib/agents/omg-implement-mode.md +49 -0
  256. package/build/lib/agents/omg-infra-engineer.md +41 -0
  257. package/build/lib/agents/omg-qa-tester.md +16 -0
  258. package/build/lib/agents/omg-research-mode.md +41 -0
  259. package/build/lib/agents/omg-security-auditor.md +41 -0
  260. package/build/lib/agents/omg-testing-engineer.md +41 -0
  261. package/build/lib/agents/plan.md +80 -0
  262. package/build/lib/agents/quick_task.md +64 -0
  263. package/build/lib/agents/reviewer.md +83 -0
  264. package/build/lib/agents/task.md +71 -0
  265. package/build/lib/commands/OMG:ai-commit.md +113 -0
  266. package/build/lib/commands/OMG:api-twin.md +22 -0
  267. package/build/lib/commands/OMG:arch.md +313 -0
  268. package/build/lib/commands/OMG:ccg.md +22 -0
  269. package/build/lib/commands/OMG:compat.md +57 -0
  270. package/build/lib/commands/OMG:cost.md +181 -0
  271. package/build/lib/commands/OMG:crazy.md +125 -0
  272. package/build/lib/commands/OMG:create-agent.md +183 -0
  273. package/build/lib/commands/OMG:deps.md +248 -0
  274. package/build/lib/commands/OMG:doctor.md +37 -0
  275. package/build/lib/commands/OMG:domain-init.md +11 -0
  276. package/build/lib/commands/OMG:escalate.md +52 -0
  277. package/build/lib/commands/OMG:health-check.md +45 -0
  278. package/build/lib/commands/OMG:init.md +134 -0
  279. package/build/lib/commands/OMG:mode.md +44 -0
  280. package/build/lib/commands/OMG:preflight.md +26 -0
  281. package/build/lib/commands/OMG:project-init.md +11 -0
  282. package/build/lib/commands/OMG:ralph-start.md +43 -0
  283. package/build/lib/commands/OMG:ralph-stop.md +23 -0
  284. package/build/lib/commands/OMG:security-check.md +28 -0
  285. package/build/lib/commands/OMG:session-branch.md +85 -0
  286. package/build/lib/commands/OMG:session-fork.md +53 -0
  287. package/build/lib/commands/OMG:session-merge.md +134 -0
  288. package/build/lib/commands/OMG:setup.md +78 -0
  289. package/build/lib/commands/OMG:stats.md +225 -0
  290. package/build/lib/commands/OMG:teams.md +39 -0
  291. package/build/lib/commands/OMG:theme.md +44 -0
  292. package/build/lib/commands/__init__.py +1 -0
  293. package/build/lib/control_plane/__init__.py +2 -0
  294. package/build/lib/control_plane/openapi.yaml +260 -0
  295. package/build/lib/control_plane/server.py +147 -0
  296. package/build/lib/control_plane/service.py +222 -0
  297. package/build/lib/hooks/__init__.py +0 -0
  298. package/build/lib/hooks/_agent_registry.py +423 -0
  299. package/build/lib/hooks/_analytics.py +291 -0
  300. package/build/lib/hooks/_budget.py +31 -0
  301. package/build/lib/hooks/_common.py +569 -0
  302. package/build/lib/hooks/_compression_optimizer.py +119 -0
  303. package/build/lib/hooks/_cost_ledger.py +176 -0
  304. package/build/lib/hooks/_learnings.py +126 -0
  305. package/build/lib/hooks/_memory.py +103 -0
  306. package/build/lib/hooks/_protected_context.py +150 -0
  307. package/build/lib/hooks/_token_counter.py +221 -0
  308. package/build/lib/hooks/branch_manager.py +236 -0
  309. package/build/lib/hooks/budget_governor.py +232 -0
  310. package/build/lib/hooks/circuit-breaker.py +270 -0
  311. package/build/lib/hooks/compression_feedback.py +254 -0
  312. package/build/lib/hooks/config-guard.py +216 -0
  313. package/build/lib/hooks/context_pressure.py +53 -0
  314. package/build/lib/hooks/credential_store.py +1020 -0
  315. package/build/lib/hooks/fetch-rate-limits.py +212 -0
  316. package/build/lib/hooks/firewall.py +48 -0
  317. package/build/lib/hooks/hashline-formatter-bridge.py +224 -0
  318. package/build/lib/hooks/hashline-injector.py +273 -0
  319. package/build/lib/hooks/hashline-validator.py +216 -0
  320. package/build/lib/hooks/idle-detector.py +95 -0
  321. package/build/lib/hooks/intentgate-keyword-detector.py +188 -0
  322. package/build/lib/hooks/magic-keyword-router.py +195 -0
  323. package/build/lib/hooks/policy_engine.py +641 -0
  324. package/build/lib/hooks/post-tool-failure.py +19 -0
  325. package/build/lib/hooks/post-write.py +219 -0
  326. package/build/lib/hooks/post_write.py +46 -0
  327. package/build/lib/hooks/pre-compact.py +398 -0
  328. package/build/lib/hooks/pre-tool-inject.py +98 -0
  329. package/build/lib/hooks/prompt-enhancer.py +672 -0
  330. package/build/lib/hooks/quality-runner.py +191 -0
  331. package/build/lib/hooks/query.py +512 -0
  332. package/build/lib/hooks/secret-guard.py +61 -0
  333. package/build/lib/hooks/secret_audit.py +144 -0
  334. package/build/lib/hooks/security_validators.py +75 -0
  335. package/build/lib/hooks/session-end-capture.py +137 -0
  336. package/build/lib/hooks/session-start.py +277 -0
  337. package/build/lib/hooks/setup_wizard.py +646 -0
  338. package/build/lib/hooks/shadow_manager.py +344 -0
  339. package/build/lib/hooks/state_migration.py +225 -0
  340. package/build/lib/hooks/stop-gate.py +7 -0
  341. package/build/lib/hooks/stop_dispatcher.py +945 -0
  342. package/build/lib/hooks/test-validator.py +361 -0
  343. package/build/lib/hooks/test_generator_hook.py +123 -0
  344. package/build/lib/hooks/todo-state-tracker.py +114 -0
  345. package/build/lib/hooks/tool-ledger.py +149 -0
  346. package/build/lib/hooks/trust_review.py +585 -0
  347. package/build/lib/plugins/README.md +60 -0
  348. package/build/lib/plugins/__init__.py +1 -0
  349. package/build/lib/plugins/advanced/commands/OMG:code-review.md +114 -0
  350. package/build/lib/plugins/advanced/commands/OMG:deep-plan.md +265 -0
  351. package/build/lib/plugins/advanced/commands/OMG:handoff.md +115 -0
  352. package/build/lib/plugins/advanced/commands/OMG:learn.md +110 -0
  353. package/build/lib/plugins/advanced/commands/OMG:maintainer.md +31 -0
  354. package/build/lib/plugins/advanced/commands/OMG:ralph-start.md +43 -0
  355. package/build/lib/plugins/advanced/commands/OMG:ralph-stop.md +23 -0
  356. package/build/lib/plugins/advanced/commands/OMG:security-review.md +16 -0
  357. package/build/lib/plugins/advanced/commands/OMG:sequential-thinking.md +20 -0
  358. package/build/lib/plugins/advanced/commands/OMG:ship.md +46 -0
  359. package/build/lib/plugins/advanced/plugin.json +87 -0
  360. package/build/lib/plugins/core/plugin.json +145 -0
  361. package/build/lib/plugins/dephealth/__init__.py +0 -0
  362. package/build/lib/plugins/dephealth/cve_scanner.py +188 -0
  363. package/build/lib/plugins/dephealth/license_checker.py +135 -0
  364. package/build/lib/plugins/dephealth/manifest_detector.py +423 -0
  365. package/build/lib/plugins/dephealth/vuln_analyzer.py +169 -0
  366. package/build/lib/plugins/testgen/__init__.py +0 -0
  367. package/build/lib/plugins/testgen/codamosa_engine.py +402 -0
  368. package/build/lib/plugins/testgen/edge_case_synthesizer.py +184 -0
  369. package/build/lib/plugins/testgen/framework_detector.py +271 -0
  370. package/build/lib/plugins/testgen/skeleton_generator.py +219 -0
  371. package/build/lib/plugins/viz/__init__.py +0 -0
  372. package/build/lib/plugins/viz/ast_parser.py +139 -0
  373. package/build/lib/plugins/viz/diagram_generator.py +192 -0
  374. package/build/lib/plugins/viz/graph_builder.py +444 -0
  375. package/build/lib/plugins/viz/native_parsers.py +259 -0
  376. package/build/lib/plugins/viz/regex_parser.py +112 -0
  377. package/build/lib/registry/__init__.py +1 -0
  378. package/build/lib/registry/bundles/algorithms.yaml +45 -0
  379. package/build/lib/registry/bundles/api-twin.yaml +48 -0
  380. package/build/lib/registry/bundles/claim-judge.yaml +49 -0
  381. package/build/lib/registry/bundles/control-plane.yaml +151 -0
  382. package/build/lib/registry/bundles/data-lineage.yaml +47 -0
  383. package/build/lib/registry/bundles/delta-classifier.yaml +47 -0
  384. package/build/lib/registry/bundles/eval-gate.yaml +47 -0
  385. package/build/lib/registry/bundles/health.yaml +45 -0
  386. package/build/lib/registry/bundles/hook-governor.yaml +97 -0
  387. package/build/lib/registry/bundles/incident-replay.yaml +47 -0
  388. package/build/lib/registry/bundles/lsp-pack.yaml +48 -0
  389. package/build/lib/registry/bundles/mcp-fabric.yaml +53 -0
  390. package/build/lib/registry/bundles/plan-council.yaml +51 -0
  391. package/build/lib/registry/bundles/preflight.yaml +48 -0
  392. package/build/lib/registry/bundles/proof-gate.yaml +49 -0
  393. package/build/lib/registry/bundles/remote-supervisor.yaml +49 -0
  394. package/build/lib/registry/bundles/robotics.yaml +45 -0
  395. package/build/lib/registry/bundles/secure-worktree-pipeline.yaml +54 -0
  396. package/build/lib/registry/bundles/security-check.yaml +50 -0
  397. package/build/lib/registry/bundles/test-intent-lock.yaml +49 -0
  398. package/build/lib/registry/bundles/tracebank.yaml +47 -0
  399. package/build/lib/registry/bundles/vision.yaml +45 -0
  400. package/build/lib/registry/omg-capability.schema.json +296 -0
  401. package/build/lib/registry/verify_artifact.py +90 -0
  402. package/build/lib/runtime/__init__.py +32 -0
  403. package/build/lib/runtime/adapters/__init__.py +13 -0
  404. package/build/lib/runtime/adapters/claude.py +63 -0
  405. package/build/lib/runtime/adapters/gpt.py +56 -0
  406. package/build/lib/runtime/adapters/local.py +56 -0
  407. package/build/lib/runtime/adoption.py +212 -0
  408. package/build/lib/runtime/api_twin.py +450 -0
  409. package/build/lib/runtime/asset_loader.py +62 -0
  410. package/build/lib/runtime/business_workflow.py +234 -0
  411. package/build/lib/runtime/claim_judge.py +95 -0
  412. package/build/lib/runtime/cli_provider.py +85 -0
  413. package/build/lib/runtime/compat.py +1459 -0
  414. package/build/lib/runtime/contract_compiler.py +1918 -0
  415. package/build/lib/runtime/custom_agent_loader.py +366 -0
  416. package/build/lib/runtime/data_lineage.py +73 -0
  417. package/build/lib/runtime/delta_classifier.py +81 -0
  418. package/build/lib/runtime/dispatcher.py +47 -0
  419. package/build/lib/runtime/domain_packs.py +46 -0
  420. package/build/lib/runtime/ecosystem.py +371 -0
  421. package/build/lib/runtime/eval_gate.py +96 -0
  422. package/build/lib/runtime/guide_assert.py +45 -0
  423. package/build/lib/runtime/incident_replay.py +47 -0
  424. package/build/lib/runtime/legacy_compat.py +7 -0
  425. package/build/lib/runtime/mcp_config_writers.py +233 -0
  426. package/build/lib/runtime/mcp_lifecycle.py +175 -0
  427. package/build/lib/runtime/mcp_memory_server.py +135 -0
  428. package/build/lib/runtime/memory_parsers/__init__.py +0 -0
  429. package/build/lib/runtime/memory_parsers/chatgpt_parser.py +257 -0
  430. package/build/lib/runtime/memory_parsers/claude_import.py +107 -0
  431. package/build/lib/runtime/memory_parsers/export.py +97 -0
  432. package/build/lib/runtime/memory_parsers/gemini_import.py +91 -0
  433. package/build/lib/runtime/memory_parsers/kimi_import.py +91 -0
  434. package/build/lib/runtime/memory_store.py +215 -0
  435. package/build/lib/runtime/omc_compat.py +7 -0
  436. package/build/lib/runtime/omg_compat_contract_snapshot.json +916 -0
  437. package/build/lib/runtime/omg_contract_snapshot.json +916 -0
  438. package/build/lib/runtime/omg_mcp_server.py +212 -0
  439. package/build/lib/runtime/playwright_pack.py +169 -0
  440. package/build/lib/runtime/preflight.py +117 -0
  441. package/build/lib/runtime/proof_chain.py +228 -0
  442. package/build/lib/runtime/proof_gate.py +163 -0
  443. package/build/lib/runtime/providers/__init__.py +0 -0
  444. package/build/lib/runtime/providers/codex_provider.py +102 -0
  445. package/build/lib/runtime/providers/gemini_provider.py +109 -0
  446. package/build/lib/runtime/providers/kimi_provider.py +132 -0
  447. package/build/lib/runtime/remote_supervisor.py +64 -0
  448. package/build/lib/runtime/runtime_profile.py +61 -0
  449. package/build/lib/runtime/security_check.py +965 -0
  450. package/build/lib/runtime/subagent_dispatcher.py +469 -0
  451. package/build/lib/runtime/team_router.py +1167 -0
  452. package/build/lib/runtime/test_intent_lock.py +91 -0
  453. package/build/lib/runtime/tmux_session_manager.py +169 -0
  454. package/build/lib/runtime/tracebank.py +95 -0
  455. package/build/lib/runtime/untrusted_content.py +269 -0
  456. package/commands/OMG:doctor.md +37 -0
  457. package/commands/OMG:preflight.md +1 -1
  458. package/commands/__init__.py +1 -0
  459. package/control_plane/__init__.py +2 -0
  460. package/control_plane/openapi.yaml +260 -0
  461. package/control_plane/server.py +147 -0
  462. package/control_plane/service.py +222 -0
  463. package/dist/enterprise/bundle/.agents/skills/omg/AGENTS.fragment.md +50 -3
  464. package/dist/enterprise/bundle/.agents/skills/omg/algorithms/SKILL.md +11 -0
  465. package/dist/enterprise/bundle/.agents/skills/omg/algorithms/openai.yaml +11 -0
  466. package/dist/enterprise/bundle/.agents/skills/omg/api-twin/SKILL.md +11 -0
  467. package/dist/enterprise/bundle/.agents/skills/omg/api-twin/openai.yaml +12 -0
  468. package/dist/enterprise/bundle/.agents/skills/omg/codex-rules.md +29 -0
  469. package/dist/enterprise/bundle/.agents/skills/omg/data-lineage/SKILL.md +11 -0
  470. package/dist/enterprise/bundle/.agents/skills/omg/data-lineage/openai.yaml +12 -0
  471. package/dist/enterprise/bundle/.agents/skills/omg/delta-classifier/SKILL.md +11 -0
  472. package/dist/enterprise/bundle/.agents/skills/omg/delta-classifier/openai.yaml +12 -0
  473. package/dist/enterprise/bundle/.agents/skills/omg/eval-gate/SKILL.md +11 -0
  474. package/dist/enterprise/bundle/.agents/skills/omg/eval-gate/openai.yaml +12 -0
  475. package/dist/enterprise/bundle/.agents/skills/omg/health/SKILL.md +11 -0
  476. package/dist/enterprise/bundle/.agents/skills/omg/health/openai.yaml +11 -0
  477. package/dist/enterprise/bundle/.agents/skills/omg/incident-replay/SKILL.md +11 -0
  478. package/dist/enterprise/bundle/.agents/skills/omg/incident-replay/openai.yaml +12 -0
  479. package/dist/enterprise/bundle/.agents/skills/omg/preflight/SKILL.md +11 -0
  480. package/dist/enterprise/bundle/.agents/skills/omg/preflight/openai.yaml +12 -0
  481. package/dist/enterprise/bundle/.agents/skills/omg/remote-supervisor/SKILL.md +11 -0
  482. package/dist/enterprise/bundle/.agents/skills/omg/remote-supervisor/openai.yaml +12 -0
  483. package/dist/enterprise/bundle/.agents/skills/omg/robotics/SKILL.md +11 -0
  484. package/dist/enterprise/bundle/.agents/skills/omg/robotics/openai.yaml +11 -0
  485. package/dist/enterprise/bundle/.agents/skills/omg/security-check/SKILL.md +11 -0
  486. package/dist/enterprise/bundle/.agents/skills/omg/security-check/openai.yaml +13 -0
  487. package/dist/enterprise/bundle/.agents/skills/omg/tracebank/SKILL.md +11 -0
  488. package/dist/enterprise/bundle/.agents/skills/omg/tracebank/openai.yaml +12 -0
  489. package/dist/enterprise/bundle/.agents/skills/omg/vision/SKILL.md +11 -0
  490. package/dist/enterprise/bundle/.agents/skills/omg/vision/openai.yaml +11 -0
  491. package/dist/enterprise/bundle/.claude-plugin/marketplace.json +5 -5
  492. package/dist/enterprise/bundle/.claude-plugin/plugin.json +1 -1
  493. package/dist/enterprise/bundle/OMG_COMPAT_CONTRACT.md +1 -1
  494. package/dist/enterprise/bundle/plugins/advanced/commands/OMG:code-review.md +114 -0
  495. package/dist/enterprise/bundle/plugins/advanced/commands/OMG:deep-plan.md +221 -0
  496. package/dist/enterprise/bundle/plugins/advanced/commands/OMG:handoff.md +115 -0
  497. package/dist/enterprise/bundle/plugins/advanced/commands/OMG:learn.md +110 -0
  498. package/dist/enterprise/bundle/plugins/advanced/commands/OMG:maintainer.md +31 -0
  499. package/dist/enterprise/bundle/plugins/advanced/commands/OMG:ralph-start.md +43 -0
  500. package/dist/enterprise/bundle/plugins/advanced/commands/OMG:ralph-stop.md +23 -0
  501. package/dist/enterprise/bundle/plugins/advanced/commands/OMG:security-review.md +16 -0
  502. package/dist/enterprise/bundle/plugins/advanced/commands/OMG:sequential-thinking.md +20 -0
  503. package/dist/enterprise/bundle/plugins/advanced/commands/OMG:ship.md +46 -0
  504. package/dist/enterprise/bundle/plugins/advanced/plugin.json +87 -0
  505. package/dist/enterprise/bundle/registry/bundles/algorithms.yaml +45 -0
  506. package/dist/enterprise/bundle/registry/bundles/api-twin.yaml +48 -0
  507. package/dist/enterprise/bundle/registry/bundles/control-plane.yaml +151 -0
  508. package/dist/enterprise/bundle/registry/bundles/data-lineage.yaml +47 -0
  509. package/dist/enterprise/bundle/registry/bundles/delta-classifier.yaml +47 -0
  510. package/dist/enterprise/bundle/registry/bundles/eval-gate.yaml +47 -0
  511. package/dist/enterprise/bundle/registry/bundles/health.yaml +45 -0
  512. package/dist/enterprise/bundle/registry/bundles/hook-governor.yaml +97 -0
  513. package/dist/enterprise/bundle/registry/bundles/incident-replay.yaml +47 -0
  514. package/dist/enterprise/bundle/registry/bundles/lsp-pack.yaml +48 -0
  515. package/dist/enterprise/bundle/registry/bundles/mcp-fabric.yaml +53 -0
  516. package/dist/enterprise/bundle/registry/bundles/preflight.yaml +48 -0
  517. package/dist/enterprise/bundle/registry/bundles/remote-supervisor.yaml +49 -0
  518. package/dist/enterprise/bundle/registry/bundles/robotics.yaml +45 -0
  519. package/dist/enterprise/bundle/registry/bundles/secure-worktree-pipeline.yaml +54 -0
  520. package/dist/enterprise/bundle/registry/bundles/security-check.yaml +50 -0
  521. package/dist/enterprise/bundle/registry/bundles/tracebank.yaml +47 -0
  522. package/dist/enterprise/bundle/registry/bundles/vision.yaml +45 -0
  523. package/dist/enterprise/bundle/registry/omg-capability.schema.json +296 -0
  524. package/dist/enterprise/bundle/settings.json +233 -5
  525. package/dist/enterprise/manifest.json +216 -12
  526. package/dist/public/bundle/.agents/skills/omg/AGENTS.fragment.md +50 -3
  527. package/dist/public/bundle/.agents/skills/omg/algorithms/SKILL.md +11 -0
  528. package/dist/public/bundle/.agents/skills/omg/algorithms/openai.yaml +11 -0
  529. package/dist/public/bundle/.agents/skills/omg/api-twin/SKILL.md +11 -0
  530. package/dist/public/bundle/.agents/skills/omg/api-twin/openai.yaml +12 -0
  531. package/dist/public/bundle/.agents/skills/omg/codex-rules.md +29 -0
  532. package/dist/public/bundle/.agents/skills/omg/data-lineage/SKILL.md +11 -0
  533. package/dist/public/bundle/.agents/skills/omg/data-lineage/openai.yaml +12 -0
  534. package/dist/public/bundle/.agents/skills/omg/delta-classifier/SKILL.md +11 -0
  535. package/dist/public/bundle/.agents/skills/omg/delta-classifier/openai.yaml +12 -0
  536. package/dist/public/bundle/.agents/skills/omg/eval-gate/SKILL.md +11 -0
  537. package/dist/public/bundle/.agents/skills/omg/eval-gate/openai.yaml +12 -0
  538. package/dist/public/bundle/.agents/skills/omg/health/SKILL.md +11 -0
  539. package/dist/public/bundle/.agents/skills/omg/health/openai.yaml +11 -0
  540. package/dist/public/bundle/.agents/skills/omg/incident-replay/SKILL.md +11 -0
  541. package/dist/public/bundle/.agents/skills/omg/incident-replay/openai.yaml +12 -0
  542. package/dist/public/bundle/.agents/skills/omg/preflight/SKILL.md +11 -0
  543. package/dist/public/bundle/.agents/skills/omg/preflight/openai.yaml +12 -0
  544. package/dist/public/bundle/.agents/skills/omg/remote-supervisor/SKILL.md +11 -0
  545. package/dist/public/bundle/.agents/skills/omg/remote-supervisor/openai.yaml +12 -0
  546. package/dist/public/bundle/.agents/skills/omg/robotics/SKILL.md +11 -0
  547. package/dist/public/bundle/.agents/skills/omg/robotics/openai.yaml +11 -0
  548. package/dist/public/bundle/.agents/skills/omg/security-check/SKILL.md +11 -0
  549. package/dist/public/bundle/.agents/skills/omg/security-check/openai.yaml +13 -0
  550. package/dist/public/bundle/.agents/skills/omg/tracebank/SKILL.md +11 -0
  551. package/dist/public/bundle/.agents/skills/omg/tracebank/openai.yaml +12 -0
  552. package/dist/public/bundle/.agents/skills/omg/vision/SKILL.md +11 -0
  553. package/dist/public/bundle/.agents/skills/omg/vision/openai.yaml +11 -0
  554. package/dist/public/bundle/.claude-plugin/marketplace.json +5 -5
  555. package/dist/public/bundle/.claude-plugin/plugin.json +1 -1
  556. package/dist/public/bundle/OMG_COMPAT_CONTRACT.md +1 -1
  557. package/dist/public/bundle/plugins/advanced/commands/OMG:code-review.md +114 -0
  558. package/dist/public/bundle/plugins/advanced/commands/OMG:deep-plan.md +221 -0
  559. package/dist/public/bundle/plugins/advanced/commands/OMG:handoff.md +115 -0
  560. package/dist/public/bundle/plugins/advanced/commands/OMG:learn.md +110 -0
  561. package/dist/public/bundle/plugins/advanced/commands/OMG:maintainer.md +31 -0
  562. package/dist/public/bundle/plugins/advanced/commands/OMG:ralph-start.md +43 -0
  563. package/dist/public/bundle/plugins/advanced/commands/OMG:ralph-stop.md +23 -0
  564. package/dist/public/bundle/plugins/advanced/commands/OMG:security-review.md +16 -0
  565. package/dist/public/bundle/plugins/advanced/commands/OMG:sequential-thinking.md +20 -0
  566. package/dist/public/bundle/plugins/advanced/commands/OMG:ship.md +46 -0
  567. package/dist/public/bundle/plugins/advanced/plugin.json +87 -0
  568. package/dist/public/bundle/registry/bundles/algorithms.yaml +45 -0
  569. package/dist/public/bundle/registry/bundles/api-twin.yaml +48 -0
  570. package/dist/public/bundle/registry/bundles/control-plane.yaml +151 -0
  571. package/dist/public/bundle/registry/bundles/data-lineage.yaml +47 -0
  572. package/dist/public/bundle/registry/bundles/delta-classifier.yaml +47 -0
  573. package/dist/public/bundle/registry/bundles/eval-gate.yaml +47 -0
  574. package/dist/public/bundle/registry/bundles/health.yaml +45 -0
  575. package/dist/public/bundle/registry/bundles/hook-governor.yaml +97 -0
  576. package/dist/public/bundle/registry/bundles/incident-replay.yaml +47 -0
  577. package/dist/public/bundle/registry/bundles/lsp-pack.yaml +48 -0
  578. package/dist/public/bundle/registry/bundles/mcp-fabric.yaml +53 -0
  579. package/dist/public/bundle/registry/bundles/preflight.yaml +48 -0
  580. package/dist/public/bundle/registry/bundles/remote-supervisor.yaml +49 -0
  581. package/dist/public/bundle/registry/bundles/robotics.yaml +45 -0
  582. package/dist/public/bundle/registry/bundles/secure-worktree-pipeline.yaml +54 -0
  583. package/dist/public/bundle/registry/bundles/security-check.yaml +50 -0
  584. package/dist/public/bundle/registry/bundles/tracebank.yaml +47 -0
  585. package/dist/public/bundle/registry/bundles/vision.yaml +45 -0
  586. package/dist/public/bundle/registry/omg-capability.schema.json +296 -0
  587. package/dist/public/bundle/settings.json +232 -4
  588. package/dist/public/manifest.json +216 -12
  589. package/docs/assets/omg-hud.svg +32 -0
  590. package/docs/install/claude-code.md +31 -0
  591. package/docs/install/codex.md +29 -0
  592. package/docs/migration/native-adoption.md +57 -0
  593. package/docs/proof.md +65 -0
  594. package/docs/release-checklist.md +40 -0
  595. package/docs/transcripts/crazy.md +17 -0
  596. package/docs/transcripts/setup.md +25 -0
  597. package/hooks/policy_engine.py +122 -17
  598. package/hooks/setup_wizard.py +52 -12
  599. package/hooks/shadow_manager.py +27 -0
  600. package/package.json +2 -2
  601. package/plugins/README.md +5 -1
  602. package/plugins/__init__.py +1 -0
  603. package/plugins/advanced/commands/OMG:deep-plan.md +50 -6
  604. package/plugins/advanced/commands/OMG:ship.md +1 -1
  605. package/plugins/advanced/plugin.json +1 -10
  606. package/plugins/core/plugin.json +7 -1
  607. package/pyproject.toml +39 -3
  608. package/registry/__init__.py +1 -0
  609. package/registry/bundles/algorithms.yaml +45 -0
  610. package/registry/bundles/api-twin.yaml +48 -0
  611. package/registry/bundles/claim-judge.yaml +49 -0
  612. package/registry/bundles/control-plane.yaml +151 -0
  613. package/registry/bundles/data-lineage.yaml +47 -0
  614. package/registry/bundles/delta-classifier.yaml +47 -0
  615. package/registry/bundles/eval-gate.yaml +47 -0
  616. package/registry/bundles/health.yaml +45 -0
  617. package/registry/bundles/hook-governor.yaml +97 -0
  618. package/registry/bundles/incident-replay.yaml +47 -0
  619. package/registry/bundles/lsp-pack.yaml +48 -0
  620. package/registry/bundles/mcp-fabric.yaml +53 -0
  621. package/registry/bundles/plan-council.yaml +51 -0
  622. package/registry/bundles/preflight.yaml +48 -0
  623. package/registry/bundles/proof-gate.yaml +49 -0
  624. package/registry/bundles/remote-supervisor.yaml +49 -0
  625. package/registry/bundles/robotics.yaml +45 -0
  626. package/registry/bundles/secure-worktree-pipeline.yaml +54 -0
  627. package/registry/bundles/security-check.yaml +50 -0
  628. package/registry/bundles/test-intent-lock.yaml +49 -0
  629. package/registry/bundles/tracebank.yaml +47 -0
  630. package/registry/bundles/vision.yaml +45 -0
  631. package/registry/omg-capability.schema.json +296 -0
  632. package/registry/verify_artifact.py +90 -0
  633. package/runtime/adapters/claude.py +3 -0
  634. package/runtime/adapters/gpt.py +3 -0
  635. package/runtime/adapters/local.py +3 -0
  636. package/runtime/adoption.py +1 -1
  637. package/runtime/api_twin.py +334 -14
  638. package/runtime/asset_loader.py +62 -0
  639. package/runtime/business_workflow.py +14 -0
  640. package/runtime/claim_judge.py +95 -0
  641. package/runtime/compat.py +142 -2
  642. package/runtime/contract_compiler.py +1270 -50
  643. package/runtime/data_lineage.py +73 -0
  644. package/runtime/delta_classifier.py +81 -0
  645. package/runtime/domain_packs.py +12 -0
  646. package/runtime/ecosystem.py +1 -1
  647. package/runtime/eval_gate.py +96 -0
  648. package/runtime/incident_replay.py +47 -0
  649. package/runtime/mcp_config_writers.py +12 -0
  650. package/runtime/mcp_lifecycle.py +31 -9
  651. package/runtime/mcp_memory_server.py +1 -1
  652. package/runtime/omg_compat_contract_snapshot.json +1 -1
  653. package/runtime/omg_contract_snapshot.json +1 -1
  654. package/runtime/omg_mcp_server.py +16 -9
  655. package/runtime/playwright_pack.py +169 -0
  656. package/runtime/preflight.py +66 -1
  657. package/runtime/proof_chain.py +228 -0
  658. package/runtime/proof_gate.py +163 -0
  659. package/runtime/remote_supervisor.py +64 -0
  660. package/runtime/security_check.py +626 -8
  661. package/runtime/team_router.py +6 -6
  662. package/runtime/test_intent_lock.py +91 -0
  663. package/runtime/tracebank.py +95 -0
  664. package/runtime/untrusted_content.py +172 -5
  665. package/scripts/check-omg-public-ready.py +77 -0
  666. package/scripts/omg.py +207 -3
  667. package/scripts/verify-standalone.sh +7 -0
  668. package/settings.json +233 -5
@@ -0,0 +1,641 @@
1
+ #!/usr/bin/env python3
2
+ """OMG v1 Policy Engine
3
+
4
+ Centralized policy decision layer for tool access, file access, and supply-chain
5
+ artifact verification.
6
+ """
7
+ from __future__ import annotations
8
+
9
+ from dataclasses import dataclass, asdict
10
+ from fnmatch import fnmatch
11
+ import importlib
12
+ import os
13
+ import re
14
+ from typing import Any
15
+
16
+
17
+ Action = str
18
+ RiskLevel = str
19
+
20
+
21
+ @dataclass
22
+ class PolicyDecision:
23
+ action: Action # allow | ask | deny
24
+ risk_level: RiskLevel # low | med | high | critical
25
+ reason: str = ""
26
+ controls: list[str] | None = None
27
+
28
+ def to_dict(self) -> dict[str, Any]:
29
+ data = asdict(self)
30
+ if data.get("controls") is None:
31
+ data["controls"] = []
32
+ return data
33
+
34
+
35
+ def allow(reason: str = "", controls: list[str] | None = None) -> PolicyDecision:
36
+ return PolicyDecision("allow", "low", reason, controls or [])
37
+
38
+
39
+ def ask(reason: str, risk_level: RiskLevel = "med", controls: list[str] | None = None) -> PolicyDecision:
40
+ return PolicyDecision("ask", risk_level, reason, controls or [])
41
+
42
+
43
+ def deny(reason: str, risk_level: RiskLevel = "high", controls: list[str] | None = None) -> PolicyDecision:
44
+ return PolicyDecision("deny", risk_level, reason, controls or [])
45
+
46
+
47
+ # === BASH POLICY ============================================================
48
+
49
+ DESTRUCT_PATTERNS = [
50
+ (r"rm\s+-[a-zA-Z]*r[a-zA-Z]*f[a-zA-Z]*\s+/(\s|$|\*)", "rm -rf /"),
51
+ (r"rm\s+-[a-zA-Z]*r[a-zA-Z]*f[a-zA-Z]*\s+~/?(\s|$|\*)", "rm -rf ~"),
52
+ (r"rm\s+-[a-zA-Z]*r[a-zA-Z]*f[a-zA-Z]*\s+\$HOME", "rm -rf $HOME"),
53
+ (r"rm\s+-[a-zA-Z]*r[a-zA-Z]*f[a-zA-Z]*\s+\$\{?HOME\}?", "rm -rf ${HOME}"),
54
+ (r"rm\s+-[a-zA-Z]*r[a-zA-Z]*f[a-zA-Z]*\s+\.\.\s", "rm -rf .."),
55
+ (r":\(\)\s*\{\s*:\|:&\s*\}\s*;:", "fork bomb"),
56
+ (r"function\s+\w+\(\)\s*\{\s*\w+\s*\|\s*\w+\s*&", "potential fork bomb"),
57
+ (r">\s*/dev/sd[a-z]", "overwrite disk"),
58
+ (r"dd\s+.*of=/dev/sd[a-z]", "dd to disk device"),
59
+ (r"sudo\s+(dd|mkfs|fdisk|parted|wipefs)\b", "destructive disk op"),
60
+ (r"sudo\s+rm\b", "sudo rm"),
61
+ (r"echo\s+.*>\s*/proc/", "write to /proc"),
62
+ (r"echo\s+.*>\s*/sys/", "write to /sys"),
63
+ ]
64
+
65
+ PIPE_SHELL_PATTERNS = [
66
+ r"(curl|wget)\s+.*\|\s*(sudo\s+)?(ba)?sh",
67
+ r"(curl|wget)\s+.*\|\s*python[23]?",
68
+ r"(curl|wget)\s+.*\|\s*perl",
69
+ r"(curl|wget)\s+.*\|\s*ruby",
70
+ r"base64\s+.*\|\s*(ba)?sh",
71
+ r"echo\s+.*\|\s*base64\s+-d\s*\|\s*(ba)?sh",
72
+ ]
73
+
74
+ EVAL_PATTERNS = [
75
+ r"\beval\s+\"\$",
76
+ r"\beval\s+\$\(",
77
+ r"\beval\s+`",
78
+ ]
79
+
80
+ SAFE_ENV_REFERENCE = re.compile(r"\.env\.(example|sample|template)\b", re.IGNORECASE)
81
+
82
+ SECRET_FILE_PATTERNS = [
83
+ r"\.(env|pem|key|p12|pfx|jks|keystore|netrc|npmrc|pypirc)\b",
84
+ r"/\.aws/(credentials|config)\b",
85
+ r"/\.kube/config\b",
86
+ r"/id_(rsa|ed25519|ecdsa)\b",
87
+ r"/\.ssh/",
88
+ r"\bsecrets?/",
89
+ r"\bcredentials?\.",
90
+ r"\bpasswords?\.",
91
+ r"\btokens?\.",
92
+ ]
93
+
94
+ READ_COMMANDS = [
95
+ "cat", "less", "more", "head", "tail", "strings", "xxd", "od",
96
+ "hexdump", "base64", "vim", "vi", "nano", "emacs", "view",
97
+ "bat", "pygmentize", "highlight", "source", "\\.",
98
+ "awk", "gawk", "mawk", "perl", "ruby", "python", "python3", "node",
99
+ ]
100
+ READ_PATTERN = r"(?:^|\s|;|&&|\|\|)(?:" + "|".join(re.escape(c) for c in READ_COMMANDS) + r")\s+"
101
+
102
+ EXFIL_COMMANDS = [
103
+ r"\b(cp|mv|ln\s+-s)\s+",
104
+ r"\btar\s+.*-?c",
105
+ r"\bzip\s+",
106
+ ]
107
+
108
+ ASK_PATTERNS = [
109
+ (r"(^|\s)(curl|wget)(\s|$)", "Network egress"),
110
+ (r"(^|\s)(ssh|scp|rsync)(\s|$)", "Remote connection"),
111
+ (r"git\s+push\s+.*(-f|--force)", "Force push"),
112
+ (r"git\s+push\s+.*(main|master|production|release)", "Push to protected branch"),
113
+ (r"chmod\s+(777|666|a\+[rwx])", "Overly permissive chmod"),
114
+ (r"docker\s+run\s+.*--privileged", "Privileged container"),
115
+ (r"python[23]?\s+-c\s+", "Inline Python execution"),
116
+ (r"node\s+-e\s+", "Inline Node execution"),
117
+ ]
118
+
119
+ UNTRUSTED_MUTATION_PATTERNS = [
120
+ r"\bgit\s+(commit|push|tag)\b",
121
+ r"\bnpm\s+(install|publish)\b",
122
+ r"\bpython[23]?\s+.*\b(setup\.py|manage\.py)\b",
123
+ r"\b(mv|cp|tee|sed\s+-i|touch|mkdir)\b",
124
+ ]
125
+
126
+ TRUSTED_CONTENT_TIERS = frozenset({"local", "balanced"})
127
+ UNTRUSTED_EXTERNAL_TIERS = frozenset({"research", "browser"})
128
+
129
+
130
+ def _project_dir() -> str:
131
+ return os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd())
132
+
133
+
134
+ def _load_untrusted_provenance_entries() -> list[dict[str, Any]]:
135
+ try:
136
+ from runtime.untrusted_content import get_untrusted_content_state
137
+
138
+ state = get_untrusted_content_state(_project_dir())
139
+ provenance = state.get("provenance", [])
140
+ if isinstance(provenance, list):
141
+ return [entry for entry in provenance if isinstance(entry, dict)]
142
+ except Exception:
143
+ return []
144
+ return []
145
+
146
+
147
+ def _is_state_changing_action(action: str) -> bool:
148
+ normalized = str(action).strip().lower()
149
+ return normalized in {
150
+ "state_change",
151
+ "state-changing",
152
+ "bash_mutation",
153
+ "file_mutation",
154
+ "write",
155
+ "edit",
156
+ "delete",
157
+ }
158
+
159
+
160
+ def evaluate_action_justification(
161
+ *,
162
+ action: str,
163
+ evidence: list[dict[str, Any]],
164
+ require_explicit_approval: bool = True,
165
+ ) -> PolicyDecision:
166
+ if not _is_state_changing_action(action):
167
+ return allow("non-mutating action")
168
+ if not evidence:
169
+ return ask(
170
+ "State-changing action lacks trust-scored evidence.",
171
+ "high",
172
+ ["manual-approval", "trusted-evidence-required"],
173
+ )
174
+
175
+ tiers = {
176
+ str(item.get("_trust_tier") or item.get("trust_tier") or "").strip().lower()
177
+ for item in evidence
178
+ if isinstance(item, dict)
179
+ }
180
+ tiers.discard("")
181
+ has_trusted = bool(tiers & TRUSTED_CONTENT_TIERS)
182
+ has_external_only = bool(tiers) and tiers.issubset(UNTRUSTED_EXTERNAL_TIERS)
183
+
184
+ if has_trusted:
185
+ return allow("trusted local evidence present")
186
+
187
+ if has_external_only:
188
+ reason = (
189
+ "State-changing action is justified only by UNTRUSTED_EXTERNAL_CONTENT "
190
+ "(research/browser tier)."
191
+ )
192
+ controls = ["manual-approval", "trusted-corroboration", "review-provenance"]
193
+ if require_explicit_approval:
194
+ return ask(reason, "high", controls)
195
+ return deny(reason, "high", controls)
196
+
197
+ return ask(
198
+ "State-changing action has unknown trust provenance.",
199
+ "high",
200
+ ["manual-approval", "review-provenance"],
201
+ )
202
+
203
+
204
+ def _is_untrusted_content_mode_active() -> bool:
205
+ try:
206
+ from runtime.untrusted_content import is_untrusted_content_mode_active
207
+
208
+ project_dir = _project_dir()
209
+ return is_untrusted_content_mode_active(project_dir)
210
+ except Exception:
211
+ return False
212
+
213
+
214
+ def evaluate_bash_command(cmd: str) -> PolicyDecision:
215
+ if not cmd:
216
+ return allow("empty command")
217
+
218
+ for pat, label in DESTRUCT_PATTERNS:
219
+ if re.search(pat, cmd):
220
+ return deny(f"Blocked: {label}", "critical", ["destructive-op"])
221
+
222
+ for pat in PIPE_SHELL_PATTERNS:
223
+ if re.search(pat, cmd):
224
+ return deny("Blocked: pipe-to-shell", "critical", ["remote-code-exec"])
225
+
226
+ for pat in EVAL_PATTERNS:
227
+ if re.search(pat, cmd):
228
+ return deny("Blocked: dynamic eval", "high", ["dynamic-eval"])
229
+
230
+ for secret_pat in SECRET_FILE_PATTERNS:
231
+ if not re.search(secret_pat, cmd, re.IGNORECASE):
232
+ continue
233
+
234
+ if SAFE_ENV_REFERENCE.search(cmd):
235
+ cleaned = SAFE_ENV_REFERENCE.sub("__SAFE_REF__", cmd)
236
+ if not re.search(secret_pat, cleaned, re.IGNORECASE):
237
+ continue
238
+
239
+ if re.search(READ_PATTERN, cmd, re.IGNORECASE):
240
+ return deny("Blocked: reading secret file", "critical", ["secret-access"])
241
+
242
+ if re.search(r"<\s*\S*(" + secret_pat + r")", cmd, re.IGNORECASE):
243
+ return deny("Blocked: reading secret file via redirect", "critical", ["secret-access"])
244
+
245
+ for exfil in EXFIL_COMMANDS:
246
+ if re.search(exfil, cmd):
247
+ return deny("Blocked: copying secret file", "critical", ["secret-exfiltration"])
248
+
249
+ if re.search(r"\bgrep\b", cmd):
250
+ return ask("Searching inside potential secret file — confirm this is safe", "high", ["secret-search"])
251
+
252
+ for pat, label in ASK_PATTERNS:
253
+ if re.search(pat, cmd):
254
+ return ask(f"{label}: {cmd[:120]}", "med", ["human-approval"])
255
+
256
+ for pat in UNTRUSTED_MUTATION_PATTERNS:
257
+ if not re.search(pat, cmd):
258
+ continue
259
+ provenance_entries = _load_untrusted_provenance_entries()
260
+ if provenance_entries:
261
+ decision = evaluate_action_justification(
262
+ action="state_change",
263
+ evidence=provenance_entries,
264
+ require_explicit_approval=True,
265
+ )
266
+ if decision.action != "allow":
267
+ return decision
268
+ if _is_untrusted_content_mode_active():
269
+ return ask(
270
+ "Untrusted external content mode is active. Review before running state-changing commands.",
271
+ "high",
272
+ ["manual-approval", "review-provenance"],
273
+ )
274
+ break
275
+
276
+ return allow("command allowed")
277
+
278
+
279
+ # === FILE POLICY ============================================================
280
+
281
+ BLOCKED_FILES = {
282
+ ".env", ".env.local", ".env.development", ".env.production",
283
+ ".env.staging", ".env.test", ".npmrc", ".pypirc", ".netrc",
284
+ "id_rsa", "id_ed25519", "id_ecdsa", "id_rsa.pub", "id_ed25519.pub", "id_ecdsa.pub",
285
+ }
286
+
287
+ EXAMPLE_FILES = {".env.example", ".env.sample", ".env.template"}
288
+
289
+ BLOCKED_PATH_PATTERNS = [
290
+ r"/\.aws/(credentials|config)$",
291
+ r"/\.kube/config$",
292
+ r"/\.ssh/",
293
+ r"/\.gnupg/",
294
+ r"/secrets?/",
295
+ r"\.(pem|key|p12|pfx|jks|keystore)$",
296
+ r"(^|/)secret[s]?\.",
297
+ r"(^|/)credential[s]?\.",
298
+ r"(^|/)password[s]?\.",
299
+ r"(^|/)token[s]?\.",
300
+ r"(^|/)\.docker/config\.json$",
301
+ r"(^|/)\.git-credentials$",
302
+ ]
303
+
304
+
305
+ # OMG internal credential store paths (exempted from secret-file blocking)
306
+ # Only these exact filenames inside .omg/state/ are allowed.
307
+ _OMG_CREDENTIAL_STORE_ALLOWLIST = frozenset({
308
+ "credentials.enc",
309
+ "credentials.meta",
310
+ })
311
+
312
+
313
+ def _is_omg_credential_path(normalized_path: str) -> bool:
314
+ """Return True if the path is an OMG credential store file.
315
+
316
+ Only exempts files that are:
317
+ 1. Inside .omg/state/ directory
318
+ 2. Named exactly 'credentials.enc' or 'credentials.meta'
319
+ 3. Feature flag MULTI_CREDENTIAL is enabled
320
+
321
+ This is deliberately narrow to prevent path traversal attacks.
322
+ """
323
+ # Import here to avoid circular dependency at module level
324
+ try:
325
+ get_feature_flag = getattr(importlib.import_module("hooks._common"), "get_feature_flag")
326
+ except Exception:
327
+ get_feature_flag = getattr(importlib.import_module("_common"), "get_feature_flag")
328
+
329
+ # Only exempt if feature is enabled
330
+ if not get_feature_flag("MULTI_CREDENTIAL", default=False):
331
+ return False
332
+
333
+ basename = os.path.basename(normalized_path).lower()
334
+ if basename not in _OMG_CREDENTIAL_STORE_ALLOWLIST:
335
+ return False
336
+
337
+ # Verify it's actually inside .omg/state/
338
+ parent = os.path.dirname(normalized_path)
339
+ return parent.endswith(os.sep + ".omg" + os.sep + "state") or \
340
+ parent.endswith("/.omg/state")
341
+
342
+
343
+ # === ALLOWLIST SUPPORT =======================================================
344
+
345
+ # Globs that are too broad to be safe — reject these in allowlist entries.
346
+ OVERLY_BROAD_GLOBS = frozenset({
347
+ "*", "**", "**/*", "**/**", "*/*", "*/**",
348
+ })
349
+
350
+
351
+ def validate_allowlist_entry(entry: dict[str, Any]) -> None:
352
+ """Validate a single allowlist entry.
353
+
354
+ Schema: {"path": "glob", "tools": ["Read", "Write"], "reason": "text"}
355
+
356
+ Raises ValueError if the entry is invalid.
357
+ """
358
+ if not isinstance(entry, dict):
359
+ raise ValueError("Allowlist entry must be a dict")
360
+
361
+ for field in ("path", "tools", "reason"):
362
+ if field not in entry:
363
+ raise ValueError(f"Missing required field: {field}")
364
+
365
+ path = entry["path"]
366
+ if path in OVERLY_BROAD_GLOBS:
367
+ raise ValueError(f"Overly broad glob rejected: {path}")
368
+
369
+ tools = entry["tools"]
370
+ if not isinstance(tools, list) or not tools:
371
+ raise ValueError("tools must be a non-empty list")
372
+
373
+
374
+ def is_allowlisted(file_path: str, tool: str, allowlist: list[dict[str, Any]]) -> bool:
375
+ """Check if a file_path + tool combination is allowlisted.
376
+
377
+ Matches the file's basename and normalized path against allowlist globs.
378
+ Invalid entries are silently skipped.
379
+
380
+ Returns True if the path+tool matches any valid allowlist entry.
381
+ """
382
+ if not allowlist:
383
+ return False
384
+
385
+ normalized = os.path.normpath(file_path)
386
+ basename = os.path.basename(normalized)
387
+
388
+ for entry in allowlist:
389
+ try:
390
+ validate_allowlist_entry(entry)
391
+ except (ValueError, TypeError):
392
+ continue
393
+
394
+ pattern = entry["path"]
395
+ entry_tools = entry["tools"]
396
+
397
+ # Match against basename or full normalized path
398
+ if fnmatch(basename, pattern) or fnmatch(normalized, pattern):
399
+ if tool in entry_tools:
400
+ _log_allowlist_bypass(
401
+ file_path, tool, entry.get("reason", "")
402
+ )
403
+ return True
404
+
405
+ return False
406
+
407
+
408
+ def load_allowlist(project_dir: str = ".") -> list[dict[str, Any]]:
409
+ """Load allowlist entries from .omg/policy.yaml.
410
+
411
+ Returns a list of valid allowlist entries. Invalid entries (overly broad
412
+ globs, missing fields) are filtered out silently.
413
+
414
+ Returns empty list if file doesn't exist or has no allowlist section.
415
+ """
416
+ policy_path = os.path.join(project_dir, ".omg", "policy.yaml")
417
+ if not os.path.isfile(policy_path):
418
+ return []
419
+
420
+ try:
421
+ import yaml
422
+ with open(policy_path, "r") as f:
423
+ data = yaml.safe_load(f)
424
+ except ImportError:
425
+ # Fallback: no yaml module — try simple line-by-line parse
426
+ data = _parse_policy_yaml_fallback(policy_path)
427
+ except Exception:
428
+ return []
429
+
430
+ if not isinstance(data, dict):
431
+ return []
432
+
433
+ raw_allowlist = data.get("allowlist")
434
+ if not isinstance(raw_allowlist, list):
435
+ return []
436
+
437
+ # Filter out invalid entries
438
+ valid = []
439
+ for entry in raw_allowlist:
440
+ try:
441
+ validate_allowlist_entry(entry)
442
+ valid.append(entry)
443
+ except (ValueError, TypeError):
444
+ continue
445
+
446
+ return valid
447
+
448
+
449
+ def _parse_policy_yaml_fallback(path: str) -> dict[str, Any]:
450
+ """Minimal YAML-like parser for allowlist section only.
451
+
452
+ Used when PyYAML is not available. Handles simple allowlist entries.
453
+ """
454
+ try:
455
+ with open(path, "r") as f:
456
+ lines = f.readlines()
457
+ except Exception:
458
+ return {}
459
+
460
+ result: dict[str, Any] = {}
461
+ in_allowlist = False
462
+ allowlist: list[dict[str, Any]] = []
463
+ current_entry: dict[str, Any] | None = None
464
+
465
+ for line in lines:
466
+ stripped = line.rstrip()
467
+
468
+ if stripped == "allowlist:":
469
+ in_allowlist = True
470
+ continue
471
+
472
+ if in_allowlist:
473
+ # Detect end of allowlist section (new top-level key)
474
+ if stripped and not stripped.startswith(" ") and not stripped.startswith("\t"):
475
+ in_allowlist = False
476
+ continue
477
+
478
+ # New list entry
479
+ if stripped.lstrip().startswith("- path:"):
480
+ if current_entry is not None:
481
+ allowlist.append(current_entry)
482
+ val = stripped.split(":", 1)[1].strip().strip("'\"")
483
+ current_entry = {"path": val, "tools": [], "reason": ""}
484
+ elif current_entry is not None:
485
+ clean = stripped.strip()
486
+ if clean.startswith("reason:"):
487
+ current_entry["reason"] = clean.split(":", 1)[1].strip().strip("'\"")
488
+ elif clean.startswith("- ") and "tools" not in clean:
489
+ current_entry["tools"].append(clean[2:].strip().strip("'\""))
490
+
491
+ if current_entry is not None:
492
+ allowlist.append(current_entry)
493
+
494
+ if allowlist:
495
+ result["allowlist"] = allowlist
496
+
497
+ return result
498
+
499
+
500
+ def _log_allowlist_bypass(path: str, tool: str, reason: str) -> None:
501
+ """Record that an allowlist entry overrode a deny decision.
502
+
503
+ Writes an audit trail entry to .omg/state/ledger/secret-access.jsonl
504
+ with allowlisted=True. Uses CLAUDE_PROJECT_DIR or cwd as project root.
505
+ Silently fails — never raises exceptions (crash isolation invariant).
506
+ """
507
+ try:
508
+ try:
509
+ log_secret_access = getattr(importlib.import_module("hooks.secret_audit"), "log_secret_access")
510
+ except Exception:
511
+ log_secret_access = getattr(importlib.import_module("secret_audit"), "log_secret_access")
512
+
513
+ project_dir = os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd())
514
+ log_secret_access(
515
+ project_dir=project_dir,
516
+ tool=tool,
517
+ file_path=path,
518
+ decision="allow",
519
+ reason=f"allowlist bypass: {reason}",
520
+ allowlisted=True,
521
+ )
522
+ except Exception:
523
+ pass # Crash isolation: audit logging must never break policy evaluation
524
+
525
+
526
+ def evaluate_file_access(
527
+ tool: str,
528
+ file_path: str,
529
+ allowlist: list[dict[str, Any]] | None = None,
530
+ ) -> PolicyDecision:
531
+ """Evaluate file access policy.
532
+
533
+ If an allowlist is provided, matching entries may override non-secret-file
534
+ deny decisions for the given path and tool combination.
535
+ """
536
+ if not file_path:
537
+ return allow("no file")
538
+
539
+ normalized = os.path.normpath(file_path)
540
+ # Resolve symlinks to prevent bypass via symlink to secret file
541
+ try:
542
+ normalized = os.path.realpath(normalized)
543
+ except (OSError, ValueError):
544
+ pass
545
+ basename = os.path.basename(normalized).lower()
546
+ lowpath = normalized.lower()
547
+
548
+ if basename in EXAMPLE_FILES and tool in ("Write", "Edit", "MultiEdit"):
549
+ return deny(
550
+ f"Modifying example env file blocked (Read is allowed): {file_path}",
551
+ "high",
552
+ ["immutable-env-template"],
553
+ )
554
+
555
+ if basename in BLOCKED_FILES:
556
+ return deny(f"Secret file blocked: {file_path}", "critical", ["secret-access"])
557
+
558
+ if re.match(r"^\.env(\..+)?$", basename) and basename not in EXAMPLE_FILES:
559
+ return deny(f"Environment file blocked: {file_path}", "critical", ["secret-access"])
560
+
561
+ # EXEMPTION: OMG credential store files within .omg/state/
562
+ # These are managed by hooks/credential_store.py and must be accessible
563
+ if _is_omg_credential_path(normalized):
564
+ return allow("OMG credential store (managed path)")
565
+
566
+ for pat in BLOCKED_PATH_PATTERNS:
567
+ if re.search(pat, lowpath):
568
+ return deny(f"Sensitive path blocked: {file_path}", "critical", ["secret-access"])
569
+
570
+ if tool in {"Write", "Edit", "MultiEdit"}:
571
+ provenance_entries = _load_untrusted_provenance_entries()
572
+ if provenance_entries:
573
+ decision = evaluate_action_justification(
574
+ action="file_mutation",
575
+ evidence=provenance_entries,
576
+ require_explicit_approval=True,
577
+ )
578
+ if decision.action != "allow":
579
+ return decision
580
+ if _is_untrusted_content_mode_active():
581
+ return ask(
582
+ "Untrusted external content mode is active. Review before mutating files.",
583
+ "high",
584
+ ["manual-approval", "review-provenance"],
585
+ )
586
+
587
+ if allowlist and is_allowlisted(file_path, tool, allowlist):
588
+ return allow(f"Allowlisted: {file_path}")
589
+
590
+ return allow("file allowed")
591
+
592
+
593
+ # === SUPPLY CHAIN POLICY ====================================================
594
+
595
+
596
+ def evaluate_supply_artifact(artifact: dict[str, Any], mode: str = "warn_and_run") -> PolicyDecision:
597
+ """Verify artifact trust with Warn-And-Run semantics.
598
+
599
+ mode=warn_and_run: missing trust metadata returns ASK
600
+ critical findings always DENY
601
+ """
602
+ findings = artifact.get("static_scan") or []
603
+ permissions = artifact.get("permissions") or []
604
+ signer = artifact.get("signer")
605
+ checksum = artifact.get("checksum")
606
+
607
+ for finding in findings:
608
+ sev = str((finding or {}).get("severity", "")).lower()
609
+ if sev == "critical":
610
+ return deny("Critical static-scan finding detected", "critical", ["supply-critical-block"])
611
+
612
+ joined_perms = " ".join(str(p) for p in permissions)
613
+ if any(token in joined_perms for token in ["sudo", "rm -rf", "--privileged", "curl |", "wget |"]):
614
+ return deny("Critical permission profile detected in artifact", "critical", ["dangerous-permissions"])
615
+
616
+ if not signer or not checksum:
617
+ if mode == "warn_and_run":
618
+ return ask(
619
+ "Artifact missing signer/checksum metadata (untrusted). Continue with isolation.",
620
+ "high",
621
+ ["isolate-network", "read-only-fs", "manual-approval"],
622
+ )
623
+ return deny("Artifact missing signer/checksum metadata", "high", ["unsigned-artifact"])
624
+
625
+ has_high = any(str((finding or {}).get("severity", "")).lower() == "high" for finding in findings)
626
+ if has_high:
627
+ return ask("High-risk findings present. Explicit approval required.", "high", ["manual-approval"])
628
+
629
+ return allow("artifact trusted")
630
+
631
+
632
+ def to_pretool_hook_output(decision: PolicyDecision) -> dict[str, Any] | None:
633
+ if decision.action == "allow":
634
+ return None
635
+ return {
636
+ "hookSpecificOutput": {
637
+ "hookEventName": "PreToolUse",
638
+ "permissionDecision": decision.action,
639
+ "permissionDecisionReason": decision.reason,
640
+ }
641
+ }
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env python3
2
+ """PostToolUseFailure Hook — Logs tool failures for enhanced tracking."""
3
+ import sys
4
+ import os
5
+
6
+ sys.path.insert(0, os.path.dirname(__file__))
7
+
8
+ from _common import setup_crash_handler, json_input, get_feature_flag, log_hook_error
9
+
10
+ setup_crash_handler('post-tool-failure')
11
+
12
+ data = json_input()
13
+ tool_name = data.get('tool_name', 'unknown')
14
+ error = data.get('error', data.get('message', 'unknown error'))
15
+
16
+ # Log to hook-errors.jsonl using the shared utility
17
+ log_hook_error('post-tool-failure', error, context={'tool': tool_name})
18
+
19
+ sys.exit(0)