Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions .github/workflows/hostile-reviewer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,13 @@
#
# Adversarial multi-model code review gate on every pull request (OMN-8468).
#
# Invokes omniintelligence.review_pairing.cli_review (node-based path via
# HandlerLlmCliSubprocess / adapter_ai_reviewer) with the two currently-live
# local models (qwen3-review on the 5090, qwen3-review-b on the 4090 --
# Invokes omniintelligence.review_pairing.cli_review directly (a standalone
# module calling model endpoints over HTTP; it does not import or route
# through any omnibase_infra handler -- OMN-15959 corrected this stale
# doc-comment, which named a since-deleted HandlerLlmCliSubprocess class that
# omniintelligence.review_pairing.cli_review never actually imported) with
# the two currently-live local models (qwen3-review on the 5090,
# qwen3-review-b on the 4090 --
# OMN-14176; deepseek-r1 no longer serves on the local fleet). Codex is
# excluded from the initial pilot -- add --model codex once non-interactive
# OAuth auth is confirmed on the omnibase-ci runner (OMN-8524).
Expand Down Expand Up @@ -407,7 +411,7 @@ jobs:
'| `blocked` | CRITICAL findings found | **Yes** |',
'| `degraded` | All models unavailable (infra) | No (pilot) |',
'',
'_Powered by [omniintelligence.review_pairing.cli_review](https://github.com/OmniNode-ai/omniintelligence) — node-based adversarial review via HandlerLlmCliSubprocess (OMN-8468/OMN-8524)_',
'_Powered by [omniintelligence.review_pairing.cli_review](https://github.com/OmniNode-ai/omniintelligence) — multi-model adversarial review (OMN-8468/OMN-8524)_',
].join('\n');

const { data: comments } = await github.rest.issues.listComments({
Expand Down
2 changes: 1 addition & 1 deletion docs/evidence/OMN-12548/determinism-audit.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"epic": "OMN-12525",
"gate_posture": "Report-only at S0 (design D3). Each entry is a real multi-match tie resolved by registration/insertion order \u2014 a latent production hazard ticketed under OMN-12525, NOT gate-blocking in this parity PR.",
"generated_at_utc": "2026-08-20T13:40:04.122324+00:00",
"generated_at_utc": "2026-08-22T21:25:19.434279+00:00",
"order_sensitive_count": 27,
"order_sensitive_probes": [
{
Expand Down
1 change: 0 additions & 1 deletion scripts/ci/infra-node-allowlist.txt
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,6 @@ src/omnibase_infra/nodes/node_llm_inference_effect/handlers/bifrost/model_bifros
src/omnibase_infra/nodes/node_llm_inference_effect/handlers/bifrost/model_bifrost_request.py # approved existing infra handler path; new business-domain handlers belong in omnimarket.
src/omnibase_infra/nodes/node_llm_inference_effect/handlers/bifrost/model_bifrost_response.py # approved existing infra handler path; new business-domain handlers belong in omnimarket.
src/omnibase_infra/nodes/node_llm_inference_effect/handlers/bifrost/model_bifrost_routing_rule.py # approved existing infra handler path; new business-domain handlers belong in omnimarket.
src/omnibase_infra/nodes/node_llm_inference_effect/handlers/handler_llm_cli_subprocess.py # approved existing infra handler path; new business-domain handlers belong in omnimarket.
src/omnibase_infra/nodes/node_llm_inference_effect/handlers/handler_llm_inference_command.py # infra-owned runtime command adapter for the LLM inference effect; business routing remains outside this handler.
src/omnibase_infra/nodes/node_llm_inference_effect/handlers/handler_llm_openai_compatible.py # approved existing infra handler path; new business-domain handlers belong in omnimarket.
src/omnibase_infra/nodes/node_merge_gate_effect/handlers/__init__.py # approved existing infra handler path; new business-domain handlers belong in omnimarket.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@
# SPDX-License-Identifier: MIT
"""Structured CLI subprocess failure classes for coding-agent invocations.

Mirrors the failure vocabulary in
``node_llm_inference_effect.handlers.handler_llm_cli_subprocess.EnumCliBackendStatus``.
Phase D (OMN-13250) collapses the duplicate by relocating the inference handler;
until then the coding-agent surface owns its own copy so the invoke effect does
not import a sibling node's private handler module.
OMN-15959: the sibling copy of this vocabulary in
``node_llm_inference_effect.handlers.handler_llm_cli_subprocess`` was deleted
(OMN-13250's Phase D DoD claimed that collapse had already happened; it had
not — the handler was still live with 40 tests). This module is now the sole
owner of the CLI-backend failure vocabulary; the coding-agent surface does not
import a sibling node's private handler module.
"""

from __future__ import annotations
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@
# transport-envelope-shaped output events before publish, preserving the
# contract-declared terminal event semantics without node-local envelope code.
name: node_coding_agent_invoke_effect
contract_version: {major: 1, minor: 0, patch: 1}
contract_version: {major: 1, minor: 0, patch: 2}
node_type: EFFECT_GENERIC
node_version: {major: 1, minor: 0, patch: 1}
node_version: {major: 1, minor: 0, patch: 2}
description: >
Coding-agent invoke effect. Runs the claude/codex CLI subprocess in the target workspace and returns a system-derived ModelCodingAgentResult: status, exit code, git-derived files_changed + diff (captured AFTER the subprocess exits, never trusted from agent stdout), diff_hash, starting_head_sha, structured error_class (UNAVAILABLE/TIMEOUT/SUBPROCESS_ERROR/EMPTY_RESPONSE), timed_out, and duration. The handler uses the canonical def-B runtime shape: the contract event_model payload is validated by the shared runtime adapter before handle(command), and the bare ModelCodingAgentResult return is wrapped for EFFECT publication by the runtime. shutil.which gates availability; the subprocess spawns in its own process group and a timeout kills the whole group. The subprocess + git I/O are injected seams so this node is the single sanctioned model-CLI shell-out surface. agent-reported output/usage are advisory only.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@
# SPDX-License-Identifier: MIT
"""Coding-agent invoke EFFECT handler (OMN-13247, plan §5.1 / §5.7).

The ONLY I/O node in the workflow. Ported from
``node_llm_inference_effect.handlers.handler_llm_cli_subprocess`` and upgraded
from read-only single-shot inference to a workspace-write agentic invocation with
git-derived diff capture:
The ONLY I/O node in the workflow. Originally ported from
``node_llm_inference_effect.handlers.handler_llm_cli_subprocess`` (deleted
under OMN-15959 — that handler's shell-out architecture was superseded by this
node, not merely duplicated) and upgraded from read-only single-shot inference
to a workspace-write agentic invocation with git-derived diff capture:

- ``shutil.which`` availability gate (UNAVAILABLE if the CLI is missing).
- structured failure classes (UNAVAILABLE / TIMEOUT / SUBPROCESS_ERROR /
Expand Down
42 changes: 9 additions & 33 deletions src/omnibase_infra/nodes/node_llm_inference_effect/contract.yaml
Original file line number Diff line number Diff line change
@@ -1,27 +1,24 @@
# SPDX-FileCopyrightText: 2025 OmniNode.ai Inc.
# SPDX-License-Identifier: MIT
# OMN-8735: handler constructor compliance refactor (2026-04-15)
# OMN-8735 follow-up: HandlerLlmCliSubprocess null-guard compliance (2026-04-16)
# OMN-12816: additive extra_body passthrough — provider-specific request-body
# fields (e.g. chat_template_kwargs.enable_thinking) merged in _build_payload
# without overriding declared fields (2026-06-07)
# OMN-13158: HandlerLlmCliSubprocess resolves OAuth/subscription CLI backends
# from request.model (claude-cli, gemini-cli, opencode-cli).
# OMN-13215: the codex-cli shell-execution path was REMOVED. The delegation
# ceiling executes over the canonical HTTP inference path; no codex subprocess
# operation or backend remains.
# OMN-13204: HandlerLlmOpenaiCompatible Protocol Conformance Note corrected to
# the real protocol I/O types — ProtocolHandler.execute(ModelProtocolRequest)
# -> ModelProtocolResponse and ProtocolMessageHandler.handle(ModelEventEnvelope)
# -> ModelHandlerOutput — replacing the deleted ModelOnexEnvelope reference
# (B5 residual of OMN-13196; deploy-gate runtime-path docstring edit, behavior
# unchanged). (2026-06-17)
# OMN-14804: HandlerLlmCliSubprocess now exposes the canonical async handle()
# dispatch entrypoint for gemini/claude/opencode CLI operations; the retained
# execute_cli_inference accessor delegates to the same owned core. (2026-07-19)
# OMN-15115: HandlerLlmOpenaiCompatible accepts per-request max_retries and the
# OpenAI-compatible request model permits timeout_seconds up to 1800s for slow
# local endpoints measured below the old 600s ceiling. (2026-07-25)
# OMN-15959: HandlerLlmCliSubprocess and its inference.{gemini,claude,opencode}_cli
# shell-out operations were DELETED. OMN-13250 (Phase D) claimed this handler
# was already stripped to HTTP-only; it was not — the file, its 3 operations,
# and 40 tests were still live. The sanctioned CLI shell-out surface is
# node_coding_agent_invoke_effect (descriptor.agent_invocation: true) only.
# (2026-08-12)
# Copyright (c) 2026 OmniNode Team
#
# ONEX Node Contract
Expand All @@ -36,8 +33,8 @@ contract_name: "node_llm_inference_effect"
node_name: "node_llm_inference_effect"
contract_version:
major: 1
minor: 4
patch: 4
minor: 5
patch: 0
node_version:
major: 0
minor: 1
Expand Down Expand Up @@ -87,27 +84,6 @@ handler_routing:
module: "omnibase_infra.nodes.node_llm_inference_effect.handlers.handler_llm_openai_compatible"
handler_type: "HTTP"
description: "Execute LLM inference via OpenAI-compatible API (vLLM, OpenAI, GLM/Z.AI, etc.) with per-request timeout_seconds up to 1800s and max_retries passthrough."
# Gemini CLI Subprocess Handler
- operation: "inference.gemini_cli"
handler:
name: "HandlerLlmCliSubprocess"
module: "omnibase_infra.nodes.node_llm_inference_effect.handlers.handler_llm_cli_subprocess"
description: "Execute LLM inference via Gemini CLI subprocess (gemini -p)"
# OMN-13215: the Codex CLI subprocess operation (inference.codex_cli) was
# REMOVED. The delegation ceiling executes over the canonical HTTP inference
# path (HandlerLlmOpenaiCompatible) — no codex shell-out remains.
# Claude CLI Subprocess Handler (OMN-10137)
- operation: "inference.claude_cli"
handler:
name: "HandlerLlmCliSubprocess"
module: "omnibase_infra.nodes.node_llm_inference_effect.handlers.handler_llm_cli_subprocess"
description: "Execute LLM inference via Claude CLI subprocess (claude -p --output-format json)"
# opencode CLI Subprocess Handler (OMN-10137)
- operation: "inference.opencode_cli"
handler:
name: "HandlerLlmCliSubprocess"
module: "omnibase_infra.nodes.node_llm_inference_effect.handlers.handler_llm_cli_subprocess"
description: "Execute LLM inference via opencode CLI subprocess (opencode run --format json --pure)"
execution_mode: "single"
max_timeout_seconds: 1800
# =============================================================================
Expand Down Expand Up @@ -224,7 +200,7 @@ metadata:
author: "OmniNode Team"
license: "MIT"
created: "2026-02-13"
updated: "2026-07-19"
updated: "2026-08-12"
tags:
- effect
- llm
Expand Down
Loading
Loading