@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,221 @@
1
+ #!/usr/bin/env python3
2
+ """Tiered token estimation helpers for OMG hooks."""
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ import os
7
+ import importlib
8
+ import urllib.request
9
+ from collections.abc import Iterable
10
+
11
+ API_URL = "https://api.anthropic.com/v1/messages/count_tokens"
12
+ API_MODEL = "claude-3-5-haiku-20241022"
13
+
14
+ _FEATURE_UI_DISPLAY = "ui_display"
15
+ _FEATURE_BUDGET_ENFORCEMENT = "budget_enforcement"
16
+ _FEATURE_PREFLIGHT = "preflight"
17
+
18
+
19
+ def _safe_int(value: float) -> int:
20
+ if value <= 0:
21
+ return 0
22
+ return int(value)
23
+
24
+
25
+ def _extract_features(text: str) -> tuple[int, int, int]:
26
+ encoded = text.encode("utf-8")
27
+ byte_count = len(encoded)
28
+ word_count = len(text.split())
29
+ line_count = text.count("\n") + (1 if text else 0)
30
+ return byte_count, word_count, line_count
31
+
32
+
33
+ def _default_coefficients() -> tuple[float, float, float, float]:
34
+ return (1.0, 0.19, 0.75, 1.1)
35
+
36
+
37
+ def _gaussian_solve(matrix: list[list[float]], vector: list[float]) -> list[float] | None:
38
+ n = len(vector)
39
+ if n == 0:
40
+ return None
41
+ try:
42
+ for i in range(n):
43
+ pivot = i
44
+ for r in range(i + 1, n):
45
+ if abs(matrix[r][i]) > abs(matrix[pivot][i]):
46
+ pivot = r
47
+ if abs(matrix[pivot][i]) < 1e-12:
48
+ return None
49
+
50
+ if pivot != i:
51
+ matrix[i], matrix[pivot] = matrix[pivot], matrix[i]
52
+ vector[i], vector[pivot] = vector[pivot], vector[i]
53
+
54
+ pivot_val = matrix[i][i]
55
+ for c in range(i, n):
56
+ matrix[i][c] /= pivot_val
57
+ vector[i] /= pivot_val
58
+
59
+ for r in range(n):
60
+ if r == i:
61
+ continue
62
+ factor = matrix[r][i]
63
+ if factor == 0:
64
+ continue
65
+ for c in range(i, n):
66
+ matrix[r][c] -= factor * matrix[i][c]
67
+ vector[r] -= factor * vector[i]
68
+ return vector
69
+ except Exception:
70
+ return None
71
+
72
+
73
+ def _fit_linear_coefficients(samples: Iterable[tuple[str, int]]) -> tuple[float, float, float, float]:
74
+ rows: list[list[float]] = []
75
+ targets: list[float] = []
76
+ for text, tokens in samples:
77
+ bcount, wcount, lcount = _extract_features(text)
78
+ rows.append([1.0, float(bcount), float(wcount), float(lcount)])
79
+ targets.append(float(tokens))
80
+
81
+ dim = 4
82
+ if len(rows) < dim:
83
+ return _default_coefficients()
84
+
85
+ xtx = [[0.0 for _ in range(dim)] for _ in range(dim)]
86
+ xty = [0.0 for _ in range(dim)]
87
+ for row, target in zip(rows, targets):
88
+ for i in range(dim):
89
+ xty[i] += row[i] * target
90
+ for j in range(dim):
91
+ xtx[i][j] += row[i] * row[j]
92
+
93
+ solved = _gaussian_solve(xtx, xty)
94
+ if solved is None:
95
+ return _default_coefficients()
96
+
97
+ return (float(solved[0]), float(solved[1]), float(solved[2]), float(solved[3]))
98
+
99
+
100
+ _CALIBRATION_SAMPLES: tuple[tuple[str, int], ...] = (
101
+ ("ls", 5),
102
+ ("git status", 7),
103
+ ("echo 'hello world'", 10),
104
+ ("python3 -m pytest tests/hooks/test_feature_flags_v2.py -q", 18),
105
+ ("def hello():\n return 'world'\n", 24),
106
+ (
107
+ """from pathlib import Path\nfor path in Path('hooks').glob('*.py'):\n print(path.name)\n""",
108
+ 44,
109
+ ),
110
+ (
111
+ """def estimate_tokens(text: str, tier: int = 1) -> int:\n if tier == 1:\n return max(1, int(len(text) / 3.5))\n return 0\n""",
112
+ 80,
113
+ ),
114
+ (
115
+ "\n".join(["line with common code and comments" for _ in range(80)]),
116
+ 720,
117
+ ),
118
+ (
119
+ "\n".join(["longer source line with punctuation () {} [] == != <= >=" for _ in range(250)]),
120
+ 1800,
121
+ ),
122
+ )
123
+
124
+ _COEFFICIENTS = _fit_linear_coefficients(_CALIBRATION_SAMPLES)
125
+
126
+
127
+ def _estimate_tier1(text: str) -> int:
128
+ if not text:
129
+ return 0
130
+ return max(1, int(len(text) / 3.5))
131
+
132
+
133
+ def _estimate_tier2(text: str) -> int:
134
+ if not text:
135
+ return 0
136
+ bias, w_bytes, w_words, w_lines = _COEFFICIENTS
137
+ bcount, wcount, lcount = _extract_features(text)
138
+ prediction = bias + (w_bytes * bcount) + (w_words * wcount) + (w_lines * lcount)
139
+ return max(1, _safe_int(prediction))
140
+
141
+
142
+ def _get_anthropic_api_key() -> str | None:
143
+ try:
144
+ store_mod = importlib.import_module("credential_store")
145
+ key = store_mod.get_active_key("anthropic")
146
+ if key:
147
+ return key
148
+ except Exception:
149
+ pass
150
+ return os.environ.get("ANTHROPIC_API_KEY")
151
+
152
+
153
+ def _estimate_tier3(text: str) -> int:
154
+ if not text:
155
+ return 0
156
+
157
+ api_key = _get_anthropic_api_key()
158
+ if not api_key:
159
+ return _estimate_tier2(text)
160
+
161
+ payload = {
162
+ "model": API_MODEL,
163
+ "messages": [{"role": "user", "content": text}],
164
+ }
165
+ body = json.dumps(payload).encode("utf-8")
166
+ request = urllib.request.Request(
167
+ API_URL,
168
+ data=body,
169
+ method="POST",
170
+ headers={
171
+ "content-type": "application/json",
172
+ "x-api-key": api_key,
173
+ "anthropic-version": "2023-06-01",
174
+ },
175
+ )
176
+
177
+ try:
178
+ with urllib.request.urlopen(request, timeout=8) as response:
179
+ raw = response.read().decode("utf-8")
180
+ parsed = json.loads(raw)
181
+ token_value = parsed.get("input_tokens")
182
+ if isinstance(token_value, int) and token_value >= 0:
183
+ return token_value
184
+ except Exception:
185
+ return _estimate_tier2(text)
186
+
187
+ return _estimate_tier2(text)
188
+
189
+
190
+ def auto_select_tier(operation: str, text: str = "") -> int:
191
+ normalized = (operation or "").strip().lower()
192
+ if normalized == _FEATURE_UI_DISPLAY:
193
+ return 1
194
+ if normalized == _FEATURE_BUDGET_ENFORCEMENT:
195
+ return 2
196
+ if normalized == _FEATURE_PREFLIGHT:
197
+ if len(text) >= 8000:
198
+ return 3
199
+ if _estimate_tier2(text) >= 1000:
200
+ return 3
201
+ return 2
202
+ return 1
203
+
204
+
205
+ def estimate_tokens(text: str, tier: int = 1) -> int:
206
+ """Estimate token count with 3 reliability/cost tiers.
207
+
208
+ Tier 1: fast heuristic (`len(text)/3.5`).
209
+ Tier 2: calibrated linear model using bytes, words, lines.
210
+ Tier 3: Anthropic count_tokens API with graceful fallback to tier 2.
211
+ """
212
+ try:
213
+ if tier == 1:
214
+ return _estimate_tier1(text)
215
+ if tier == 2:
216
+ return _estimate_tier2(text)
217
+ if tier == 3:
218
+ return _estimate_tier3(text)
219
+ return _estimate_tier1(text)
220
+ except Exception:
221
+ return _estimate_tier1(text)
@@ -0,0 +1,236 @@
1
+ #!/usr/bin/env python3
2
+ """SessionStart Hook — Smart Branch Manager.
3
+
4
+ Auto-creates a feature branch when on main/master/develop.
5
+ Extracts task description from OMG state files for branch naming.
6
+
7
+ Feature-gated: OMG_GIT_WORKFLOW_ENABLED (uses get_feature_flag('GIT_WORKFLOW'))
8
+ """
9
+ import json
10
+ import os
11
+ import re
12
+ import subprocess
13
+ import sys
14
+ from datetime import datetime
15
+
16
+ HOOKS_DIR = os.path.dirname(__file__)
17
+ if HOOKS_DIR not in sys.path:
18
+ sys.path.insert(0, HOOKS_DIR)
19
+
20
+ from _common import setup_crash_handler, json_input, get_feature_flag
21
+
22
+ setup_crash_handler("branch-manager", fail_closed=False)
23
+
24
+ # Default branches that trigger feature branch creation
25
+ DEFAULT_BRANCHES = frozenset({"main", "master", "develop"})
26
+
27
+ # Max length for the descriptive part of branch name
28
+ MAX_BRANCH_NAME_LEN = 50
29
+
30
+
31
+ def _get_project_dir() -> str:
32
+ """Get project directory from env or cwd."""
33
+ return os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd())
34
+
35
+
36
+ def _has_git(project_dir: str) -> bool:
37
+ """Check if project_dir is inside a git repo."""
38
+ try:
39
+ result = subprocess.run(
40
+ ["git", "-C", project_dir, "rev-parse", "--git-dir"],
41
+ capture_output=True, text=True, timeout=5,
42
+ )
43
+ return result.returncode == 0
44
+ except Exception:
45
+ return False
46
+
47
+
48
+ def _current_branch(project_dir: str) -> str | None:
49
+ """Get current branch name. Returns None on failure."""
50
+ try:
51
+ result = subprocess.run(
52
+ ["git", "-C", project_dir, "rev-parse", "--abbrev-ref", "HEAD"],
53
+ capture_output=True, text=True, timeout=5,
54
+ )
55
+ if result.returncode == 0:
56
+ return result.stdout.strip()
57
+ except Exception:
58
+ pass
59
+ return None
60
+
61
+
62
+ def _sanitize_branch_name(description: str) -> str:
63
+ """Sanitize a description into a valid git branch name segment.
64
+
65
+ Rules:
66
+ - Lowercase
67
+ - Replace spaces/underscores with hyphens
68
+ - Strip special characters (keep alphanumeric and hyphens)
69
+ - Collapse consecutive hyphens
70
+ - Strip leading/trailing hyphens
71
+ - Max MAX_BRANCH_NAME_LEN chars
72
+ """
73
+ name = description.lower().strip()
74
+ # Replace spaces and underscores with hyphens
75
+ name = re.sub(r"[\s_]+", "-", name)
76
+ # Remove everything except alphanumeric and hyphens
77
+ name = re.sub(r"[^a-z0-9-]", "", name)
78
+ # Collapse consecutive hyphens
79
+ name = re.sub(r"-{2,}", "-", name)
80
+ # Strip leading/trailing hyphens
81
+ name = name.strip("-")
82
+ # Truncate to max length, but don't cut mid-word if possible
83
+ if len(name) > MAX_BRANCH_NAME_LEN:
84
+ truncated = name[:MAX_BRANCH_NAME_LEN]
85
+ # Try to cut at last hyphen to avoid mid-word truncation
86
+ last_hyphen = truncated.rfind("-")
87
+ if last_hyphen > 20:
88
+ truncated = truncated[:last_hyphen]
89
+ name = truncated.rstrip("-")
90
+ return name
91
+
92
+
93
+ def _extract_task_description(project_dir: str) -> str | None:
94
+ """Extract task description from OMG state files.
95
+
96
+ Priority order:
97
+ (a) .omg/state/_plan.md title (first # heading)
98
+ (b) .omg/state/_checklist.md first item
99
+ (c) .omg/state/working-memory.md last entry
100
+ (d) fallback: None (caller uses session-{timestamp})
101
+ """
102
+ state_dir = os.path.join(project_dir, ".omg", "state")
103
+
104
+ # (a) Plan title
105
+ plan_path = os.path.join(state_dir, "_plan.md")
106
+ if os.path.isfile(plan_path):
107
+ try:
108
+ with open(plan_path, "r", encoding="utf-8", errors="ignore") as f:
109
+ for line in f:
110
+ line = line.strip()
111
+ if line.startswith("# "):
112
+ title = line[2:].strip()
113
+ if title:
114
+ return title
115
+ except Exception:
116
+ pass
117
+
118
+ # (b) Checklist first item
119
+ checklist_path = os.path.join(state_dir, "_checklist.md")
120
+ if os.path.isfile(checklist_path):
121
+ try:
122
+ with open(checklist_path, "r", encoding="utf-8", errors="ignore") as f:
123
+ for line in f:
124
+ line = line.strip()
125
+ # Match markdown checkbox items: - [ ] or - [x]
126
+ m = re.match(r"^-\s*\[.\]\s*(.+)$", line)
127
+ if m:
128
+ item = m.group(1).strip()
129
+ if item:
130
+ return item
131
+ except Exception:
132
+ pass
133
+
134
+ # (c) Working memory last entry
135
+ wm_path = os.path.join(state_dir, "working-memory.md")
136
+ if os.path.isfile(wm_path):
137
+ try:
138
+ with open(wm_path, "r", encoding="utf-8", errors="ignore") as f:
139
+ content = f.read()
140
+ # Split by ## headings, take last entry's content
141
+ sections = re.split(r"\n## ", content)
142
+ if len(sections) > 1:
143
+ # Last section: first line is heading, rest is content
144
+ last_lines = sections[-1].split("\n")
145
+ # Find first non-empty content line after heading
146
+ for line in last_lines[1:]:
147
+ line = line.strip()
148
+ if line:
149
+ return line
150
+ # Fallback to heading if no content
151
+ heading = last_lines[0].strip()
152
+ if heading:
153
+ return heading
154
+ elif sections:
155
+ # Single section — try first non-empty non-heading line
156
+ for line in sections[0].split("\n"):
157
+ line = line.strip()
158
+ if line and not line.startswith("#"):
159
+ return line
160
+ except Exception:
161
+ pass
162
+
163
+ # (d) No state files found
164
+ return None
165
+
166
+
167
+ def _create_branch(project_dir: str, branch_name: str) -> bool:
168
+ """Create and checkout a new branch. Returns True on success."""
169
+ try:
170
+ result = subprocess.run(
171
+ ["git", "-C", project_dir, "checkout", "-b", branch_name],
172
+ capture_output=True, text=True, timeout=10,
173
+ )
174
+ return result.returncode == 0
175
+ except Exception:
176
+ return False
177
+
178
+
179
+ def main() -> None:
180
+ """Main hook entry point."""
181
+ data = json_input()
182
+
183
+ # Feature gate: exit silently if disabled
184
+ if not get_feature_flag("GIT_WORKFLOW", default=False):
185
+ sys.exit(0)
186
+
187
+ project_dir = _get_project_dir()
188
+
189
+ # No-op if not a git repo
190
+ if not _has_git(project_dir):
191
+ sys.exit(0)
192
+
193
+ # Get current branch
194
+ branch = _current_branch(project_dir)
195
+ if branch is None:
196
+ sys.exit(0)
197
+
198
+ # No-op if already on a non-default branch (feature branch, etc.)
199
+ if branch not in DEFAULT_BRANCHES:
200
+ sys.exit(0)
201
+
202
+ # Extract task description and build branch name
203
+ description = _extract_task_description(project_dir)
204
+ if description:
205
+ sanitized = _sanitize_branch_name(description)
206
+ else:
207
+ sanitized = ""
208
+
209
+ if not sanitized:
210
+ # Fallback: session-{timestamp}
211
+ sanitized = f"session-{datetime.now().strftime('%Y%m%d-%H%M%S')}"
212
+
213
+ target_branch = f"feature/{sanitized}"
214
+
215
+ # Dry-run mode: output what would happen without executing
216
+ dry_run = os.environ.get("OMG_GIT_WORKFLOW_DRY_RUN", "").lower() in ("1", "true", "yes")
217
+ if dry_run:
218
+ print(
219
+ f"[OMG branch-manager] DRY-RUN: Would create branch '{target_branch}' from '{branch}'",
220
+ file=sys.stderr,
221
+ )
222
+ sys.exit(0)
223
+
224
+ # Create the feature branch
225
+ success = _create_branch(project_dir, target_branch)
226
+ if success:
227
+ print(
228
+ f"[OMG branch-manager] Created branch '{target_branch}' from '{branch}'",
229
+ file=sys.stderr,
230
+ )
231
+
232
+ sys.exit(0)
233
+
234
+
235
+ if __name__ == "__main__":
236
+ main()
@@ -0,0 +1,232 @@
1
+ #!/usr/bin/env python3
2
+ """PostToolUse budget governor (BATS-style additionalContext injection)."""
3
+ from __future__ import annotations
4
+
5
+ import importlib.util
6
+ import json
7
+ import os
8
+ import sys
9
+ from typing import Any
10
+
11
+ HOOKS_DIR = os.path.dirname(__file__)
12
+
13
+
14
+ def _load_module(module_name: str, filename: str):
15
+ path = os.path.join(HOOKS_DIR, filename)
16
+ spec = importlib.util.spec_from_file_location(module_name, path)
17
+ if spec is None or spec.loader is None:
18
+ raise RuntimeError(f"Unable to load module: {filename}")
19
+ module = importlib.util.module_from_spec(spec)
20
+ spec.loader.exec_module(module)
21
+ return module
22
+
23
+
24
+ _common = _load_module("_common", "_common.py")
25
+ _cost_ledger = _load_module("_cost_ledger", "_cost_ledger.py")
26
+ _token_counter = _load_module("_token_counter", "_token_counter.py")
27
+
28
+ get_feature_flag = _common.get_feature_flag
29
+ get_project_dir = _common.get_project_dir
30
+ json_input = _common.json_input
31
+ setup_crash_handler = _common.setup_crash_handler
32
+ read_cost_summary = _cost_ledger.read_cost_summary
33
+ estimate_tokens = _token_counter.estimate_tokens
34
+
35
+ DEFAULT_SESSION_LIMIT_USD = 5.0
36
+ DEFAULT_INPUT_PER_MTOK = 3.0
37
+ DEFAULT_OUTPUT_PER_MTOK = 15.0
38
+ DEFAULT_PROJECTED_TOOL_CALLS = 50
39
+ DEFAULT_THRESHOLDS = [50, 80, 95]
40
+ THRESHOLD_STATE_FILE = ".omg/state/.cost-threshold-state.json"
41
+
42
+
43
+ def _safe_float(value, default: float) -> float:
44
+ try:
45
+ parsed = float(value)
46
+ if parsed <= 0:
47
+ return default
48
+ return parsed
49
+ except (TypeError, ValueError):
50
+ return default
51
+
52
+
53
+ def _read_budget_config(project_dir: str) -> tuple[float, float, float]:
54
+ session_limit = DEFAULT_SESSION_LIMIT_USD
55
+ input_per_mtok = DEFAULT_INPUT_PER_MTOK
56
+ output_per_mtok = DEFAULT_OUTPUT_PER_MTOK
57
+
58
+ settings_path = os.path.join(project_dir, "settings.json")
59
+ try:
60
+ with open(settings_path, "r", encoding="utf-8") as f:
61
+ settings = json.load(f)
62
+ budget_cfg = settings.get("_omg", {}).get("cost_budget", {})
63
+ pricing = budget_cfg.get("pricing", {})
64
+ session_limit = _safe_float(budget_cfg.get("session_limit_usd"), DEFAULT_SESSION_LIMIT_USD)
65
+ input_per_mtok = _safe_float(pricing.get("input_per_mtok"), DEFAULT_INPUT_PER_MTOK)
66
+ output_per_mtok = _safe_float(pricing.get("output_per_mtok"), DEFAULT_OUTPUT_PER_MTOK)
67
+ except Exception:
68
+ pass
69
+
70
+ return session_limit, input_per_mtok, output_per_mtok
71
+
72
+
73
+ def _to_text(value) -> str:
74
+ if value is None:
75
+ return ""
76
+ if isinstance(value, str):
77
+ return value
78
+ try:
79
+ return json.dumps(value, ensure_ascii=True, sort_keys=True)
80
+ except Exception:
81
+ return str(value)
82
+
83
+
84
+ def _estimate_call_cost(tool_input, tool_response, input_per_mtok: float, output_per_mtok: float) -> float:
85
+ input_text = _to_text(tool_input)
86
+ output_text = _to_text(tool_response)
87
+
88
+ tokens_in = estimate_tokens(input_text, tier=2)
89
+ tokens_out = estimate_tokens(output_text, tier=2)
90
+
91
+ cost_in = (tokens_in / 1_000_000.0) * input_per_mtok
92
+ cost_out = (tokens_out / 1_000_000.0) * output_per_mtok
93
+ return max(0.0, cost_in + cost_out)
94
+
95
+
96
+ def _project_total_calls(used_cost_usd: float, used_calls: int, session_limit_usd: float) -> int:
97
+ if used_calls <= 0 or used_cost_usd <= 0:
98
+ return DEFAULT_PROJECTED_TOOL_CALLS
99
+ avg_cost = used_cost_usd / float(used_calls)
100
+ if avg_cost <= 0:
101
+ return DEFAULT_PROJECTED_TOOL_CALLS
102
+ projected = max(used_calls, int(round(session_limit_usd / avg_cost)))
103
+ if projected > (DEFAULT_PROJECTED_TOOL_CALLS * 10):
104
+ return DEFAULT_PROJECTED_TOOL_CALLS
105
+ rounded = int(round(projected / 10.0) * 10)
106
+ return max(10, rounded)
107
+
108
+
109
+ def _build_context(used_cost_usd: float, session_limit_usd: float, used_calls: int, projected_calls: int) -> str:
110
+ remaining_ratio = 1.0 - (used_cost_usd / session_limit_usd)
111
+ remaining_pct = int(round(max(0.0, min(1.0, remaining_ratio)) * 100))
112
+ return (
113
+ f"Budget: {remaining_pct}% remaining | "
114
+ f"${used_cost_usd:.2f} of ${session_limit_usd:.2f} used | "
115
+ f"{used_calls} tool calls of ~{projected_calls}"
116
+ )
117
+
118
+
119
+ def _get_threshold_message(pct: int) -> str:
120
+ if pct >= 95:
121
+ return (
122
+ f"@cost-limit: {pct}% budget used. "
123
+ "Complete current task and stop. Do NOT start new tasks."
124
+ )
125
+ if pct >= 80:
126
+ return (
127
+ f"@cost-critical: {pct}% budget used. "
128
+ "Be efficient \u2014 minimize unnecessary tool calls, "
129
+ "batch operations where possible."
130
+ )
131
+ return f"@cost-warning: {pct}% budget used"
132
+
133
+
134
+ def _read_thresholds_config(project_dir: str) -> list[int]:
135
+ try:
136
+ settings_path = os.path.join(project_dir, "settings.json")
137
+ with open(settings_path, "r", encoding="utf-8") as f:
138
+ settings = json.load(f)
139
+ raw = settings.get("_omg", {}).get("cost_budget", {}).get("thresholds")
140
+ if isinstance(raw, list) and all(isinstance(t, (int, float)) for t in raw):
141
+ return sorted(int(t) for t in raw)
142
+ except Exception:
143
+ pass
144
+ return list(DEFAULT_THRESHOLDS)
145
+
146
+
147
+ def _read_threshold_state(project_dir: str) -> dict[str, Any]:
148
+ path = os.path.join(project_dir, THRESHOLD_STATE_FILE)
149
+ try:
150
+ with open(path, "r", encoding="utf-8") as f:
151
+ return json.load(f)
152
+ except Exception:
153
+ return {"session_id": "", "fired": []}
154
+
155
+
156
+ def _write_threshold_state(project_dir: str, state: dict[str, Any]) -> None:
157
+ path = os.path.join(project_dir, THRESHOLD_STATE_FILE)
158
+ try:
159
+ os.makedirs(os.path.dirname(path), exist_ok=True)
160
+ with open(path, "w", encoding="utf-8") as f:
161
+ json.dump(state, f, separators=(",", ":"))
162
+ except Exception:
163
+ pass
164
+
165
+
166
+ def _check_thresholds(
167
+ used_pct: float, project_dir: str, session_id: str
168
+ ) -> list[str]:
169
+ thresholds = _read_thresholds_config(project_dir)
170
+ state = _read_threshold_state(project_dir)
171
+
172
+ if state.get("session_id", "") != session_id:
173
+ state = {"session_id": session_id, "fired": []}
174
+
175
+ already_fired = set(state.get("fired", []))
176
+ new_messages: list[str] = []
177
+ new_fired: list[int] = []
178
+
179
+ for threshold in thresholds:
180
+ if used_pct >= threshold and threshold not in already_fired:
181
+ new_messages.append(_get_threshold_message(threshold))
182
+ new_fired.append(threshold)
183
+
184
+ if new_fired:
185
+ state["fired"] = sorted(list(already_fired | set(new_fired)))
186
+ state["session_id"] = session_id
187
+ _write_threshold_state(project_dir, state)
188
+
189
+ return new_messages
190
+
191
+
192
+ def main() -> None:
193
+ setup_crash_handler("budget-governor", fail_closed=False)
194
+
195
+ payload = json_input()
196
+ if not get_feature_flag("COST_TRACKING", default=False):
197
+ sys.exit(0)
198
+
199
+ project_dir = get_project_dir()
200
+ session_limit_usd, input_per_mtok, output_per_mtok = _read_budget_config(project_dir)
201
+ summary = read_cost_summary(project_dir)
202
+
203
+ estimated_current_cost = _estimate_call_cost(
204
+ payload.get("tool_input", {}),
205
+ payload.get("tool_response", {}),
206
+ input_per_mtok,
207
+ output_per_mtok,
208
+ )
209
+
210
+ used_cost_usd = float(summary.get("total_cost_usd", 0.0)) + estimated_current_cost
211
+ used_calls = int(summary.get("entry_count", 0)) + 1
212
+ projected_calls = _project_total_calls(used_cost_usd, used_calls, session_limit_usd)
213
+
214
+ context = _build_context(
215
+ used_cost_usd=used_cost_usd,
216
+ session_limit_usd=session_limit_usd,
217
+ used_calls=used_calls,
218
+ projected_calls=projected_calls,
219
+ )
220
+
221
+ used_pct = (used_cost_usd / session_limit_usd * 100) if session_limit_usd > 0 else 0.0
222
+ session_id = os.environ.get("CLAUDE_SESSION_ID", "")
223
+ threshold_alerts = _check_thresholds(used_pct, project_dir, session_id)
224
+ if threshold_alerts:
225
+ context += "\n" + "\n".join(threshold_alerts)
226
+
227
+ json.dump({"additionalContext": context}, sys.stdout)
228
+ sys.exit(0)
229
+
230
+
231
+ if __name__ == "__main__":
232
+ main()