238d353653
Enable autonomous QA through a remote OpenAI-compatible provider (NVIDIA NIM) and harden the tool/approval path so unattended multi-stage runs complete. - inference: add openai_compat provider (Bearer chat-completions for NIM/OpenAI), dispatched by provider type "nim"/"openai"; key via api_key/api_key_env. - server: bind configured [server] host/port instead of a hardcoded 8080; POST /sessions accepts an optional `intent` (WS parity) for intent-driven workflows. - kernel: thread the bound operator profile's approval_mode into per-tool gating so auto/yolo enable unattended approval (engine still consulted; policy/plane-2 BLOCK stays terminal); on a recoverable tool failure feed the tool's arg-schema back into context so the model self-corrects instead of repeating a malformed call. - tools: split deletion out of file_write into a separate, explicitly-named file_delete tool — a model can no longer delete a file by getting a write-mode parameter wrong. - server: add GET /metrics/tool-reliability — per-model tool-call validity from the event log (measurement groundwork for capability-aware routing). - docs: update AGENTS.md across kernel, tools, server, inference. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4.0 KiB
4.0 KiB
core/kernel — AGENTS.md
Purpose
Top-level orchestration: drives session lifecycle through workflow stages, coordinates retries, manages approval gating, runs static analysis, and provides deterministic replay of past sessions.
Ownership
CORREX kernel team. This is the integration point for all other core/ modules. Changes here affect end-to-end session behavior.
Local Contracts
SessionOrchestrator/DefaultSessionOrchestrator— primary entry point for launching and advancing sessions through workflow stages.OrchestrationState/OrchestrationReducer(DefaultOrchestrationReducer) /OrchestrationProjector/OrchestrationRepository— standard event-sourcing stack for orchestration state.RetryCoordinator/DefaultRetryCoordinator— manages retry logic perRetryPolicy.- On a recoverable tool failure
dispatchToolCallsfeeds the failing tool's argument schema back into context alongside the error (toolArgsHint), so the model self-corrects a malformed call instead of repeating it — the contract stays strict; the feedback is what loosens. ApprovalGateway— kernel-side approval bridge; callscore:approvalsengine before executing gated operations. Per-tool gating indispatchToolCallsbuilds theApprovalContextmode from the session's bound operator profile (boundProfile.approvalMode, mapped byapprovalModeFor): unset/promptkeeps a human in the loop (default),autoauto-approves up to T2,yoloall tiers,denyblocks above T0. The engine is always consulted (Invariant #4 holds); policy/plane-2 BLOCK stays terminal regardless of mode.ReplayOrchestrator/ReplayInferenceProvider/ReplayStrategy— deterministic replay of a session from its event log.ReplayInferenceProviderreturns recorded responses — no live LLM (Hard Invariant #8).SubagentRunner/InSessionSubagentRunner— runs sub-agent invocations within an active session.StaticAnalysisRunner/ProcessStaticAnalysisRunner— runs static analysis tools and records results as events.StageCheckpointReconciler— reconciles checkpoint state across stage transitions.JournalCompactionService— triggers journal compaction and emitsJournalCompactedEvent.OrchestratorEngines/OrchestratorRepositories— dependency bundles for wiring.WorkspaceContext/WorkspaceToolRegistryProvider— workspace-scoped tool registry provisioning.RepoKnowledgeRetriever— retrieves repo knowledge facts recorded as events (Hard Invariant #9: observations recorded at query time, not re-queried during replay).BriefEchoDiff/BriefReferenceExtractor— brief grounding utilities.CritiqueOutcomeCorrelator— correlates critique findings with orchestration outcomes for calibration.ContextFeedback— feeds context signals back into the orchestration loop.PreemptRedirect— handles steering/preempt events mid-session.ReplayArtifactMissingException— thrown when replay requires an artifact that was not recorded.
Work Guidance
- Follow the standard Events→State→Reducer→Projector→Repository pattern (see
core/AGENTS.md). DefaultOrchestrationReduceronly doesstate.copy(...). All routing decisions live inDefaultSessionOrchestrator.- Hard Invariant #3:
DefaultSessionOrchestratordecides; LLM proposals fromcore:inferenceare inputs, not decisions. - Hard Invariant #4:
ApprovalGatewaymust be called before any gated operation. Policy denial is terminal. - Hard Invariant #8:
ReplayOrchestratormust never call a live provider. UseReplayInferenceProvider. OrchestratorEnginesandOrchestratorRepositoriesare the canonical wiring containers. Add new dependencies there, not as ad-hoc constructor params scattered across callers.
Verification
./gradlew :core:kernel:test --rerun-tasks
Tests in testing/kernel/ (RetryCoordinator, ReplayInferenceProvider, LaunchRegistrationRace, ContextFeedback) and testing/replay/ (session replay, execution plan, refinement, repo knowledge replay).
Child DOX Index
No child AGENTS.md (leaf module).