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