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