Documentation
¶
Index ¶
- Constants
- Variables
- func BuildSyncSelection(flags SyncFlags, agentIDs []model.AgentID) model.Selection
- func DiscoverAgents(homeDir string) []model.AgentID
- func ExecuteTUIInstallRecordingCodexServiceTier(homeDir string, selection model.Selection, resolved planner.ResolvedPlan, ...) (pipeline.ExecutionResult, *pipeline.Orchestrator, *string)
- func NewShellInstallModel(cancel context.CancelFunc) tea.Model
- func PrintInstallHelp(w io.Writer)
- func PrintSyncHelp(w io.Writer)
- func RenderDryRun(result InstallResult) string
- func RenderInstallManualActions(result InstallResult) string
- func RenderSyncReport(result SyncResult) string
- func RenderUninstallOpenCodePluginReport(result opencodeplugin.UninstallResult) string
- func RenderUninstallReport(result componentuninstall.Result) string
- func ResolveAgentConfigDir(scope InstallScope, homeDir, workspaceDir string) string
- func ResolveInstallProfile(detection system.DetectionResult) system.PlatformProfile
- func RestoreManagedBackup(manifest backup.Manifest) error
- func RestorePersistedSelection(selection *model.Selection, persisted state.InstallState, flags SyncFlags)
- func ReviewModeStatus(ctx context.Context, repo string) (reviewtransaction.RDDModeStatus, error)
- func ReviewOperationFlagSurface(verb string) (map[string]bool, bool)
- func RunCodeGraph(args []string, stdout io.Writer) error
- func RunDoctor(ctx context.Context, w io.Writer) error
- func RunRestore(args []string, stdout io.Writer) error
- func RunRestoreWithFn(args []string, restorer RestoreFunc, stdout io.Writer) error
- func RunRestoreWithFnAndInput(args []string, restorer RestoreFunc, stdout io.Writer, stdin io.Reader) error
- func RunReview(args []string, stdout io.Writer) error
- func RunReviewAbandon(args []string, stdout io.Writer) error
- func RunReviewAcknowledgeApproved(args []string, stdout io.Writer) error
- func RunReviewAssess(args []string, stdout io.Writer) error
- func RunReviewBundleExport(args []string, stdout io.Writer) error
- func RunReviewBundleImport(args []string, stdout io.Writer) error
- func RunReviewCapabilities(args []string, stdout io.Writer) error
- func RunReviewCaptureCorrectionPlan(args []string, stdout io.Writer) error
- func RunReviewCaptureRefuter(args []string, stdout io.Writer) error
- func RunReviewCaptureResult(args []string, stdout io.Writer) error
- func RunReviewCaptureUnachievable(args []string, stdout io.Writer) error
- func RunReviewCaptureValidation(args []string, stdout io.Writer) error
- func RunReviewInspectAuthority(args []string, stdout io.Writer) error
- func RunReviewInspectCandidate(args []string, stdout io.Writer) error
- func RunReviewInvalidate(args []string, stdout io.Writer) error
- func RunReviewLensContext(args []string, stdout io.Writer) error
- func RunReviewMode(args []string, stdout io.Writer) error
- func RunReviewOpenCodeTransport(args []string, stdout io.Writer) error
- func RunReviewReclaim(args []string, stdout io.Writer) error
- func RunReviewRecover(args []string, stdout io.Writer) error
- func RunReviewReopenResults(args []string, stdout io.Writer) error
- func RunReviewResume(args []string, stdout io.Writer) error
- func RunReviewSchema(args []string, stdout io.Writer) error
- func RunReviewStart(args []string, stdout io.Writer) error
- func RunReviewStep(args []string, stdout io.Writer) error
- func RunReviewStopHook(args []string, stdout io.Writer) error
- func RunReviewStoreReset(args []string, stdout io.Writer) error
- func RunReviewValidateNonDeciding(args []string, stdout io.Writer) error
- func RunShell(args []string, stdout io.Writer) (resultErr error)
- func RunTelemetry(args []string, stdout io.Writer) error
- func RunUninstall(args []string, stdout io.Writer) (componentuninstall.Result, error)
- func RunUninstallOpenCodePlugin(args []string, stdout io.Writer) (opencodeplugin.UninstallResult, error)
- func RunUninstallWithSelection(homeDir, workspaceDir string, agentIDs []model.AgentID, ...) (componentuninstall.Result, error)
- func RunUninstallWithSelectionAndEngramScope(homeDir, workspaceDir string, agentIDs []model.AgentID, ...) (componentuninstall.Result, error)
- func SetCommandOutputStreaming(enabled bool) func()
- func SetGlobalReviewMode(ctx context.Context, repo string, enabled bool) (reviewtransaction.RDDModeStatus, error)
- func ShellInstallArguments(selection ShellInstallSelection) []string
- func SplitPrintedCommandWords(line string) ([]string, error)
- func TelemetryTrigger(homeDir string)
- type CheckResult
- type CheckStatus
- type DoctorReport
- type InstallChannel
- type InstallFlags
- type InstallInput
- type InstallResult
- type InstallScope
- type OpenCodeBackgroundResolution
- type OpenCodeBackgroundResolveInput
- type OpenCodeSDKConsent
- type PartialSyncError
- type PiBackgroundResolution
- type PiBackgroundResolveInput
- type PreparedInstall
- type RestoreFunc
- type ReviewAbandonResult
- type ReviewActionBinding
- type ReviewActionEligibility
- type ReviewAssessmentCandidate
- type ReviewAssessmentNextTransition
- type ReviewAssessmentReason
- type ReviewAssessmentResult
- type ReviewBundleResult
- type ReviewCapabilitiesBootstrap
- type ReviewCapabilitiesBuild
- type ReviewCapabilitiesCompatibility
- type ReviewCapabilitiesExecutable
- type ReviewCapabilitiesFeatures
- type ReviewCapabilitiesLegacyWindow
- type ReviewCapabilitiesPackage
- type ReviewCapabilitiesProtocol
- type ReviewCapabilitiesResult
- type ReviewCapabilitiesTargetSelector
- type ReviewCapabilityFeature
- type ReviewEligibleAction
- type ReviewFacadeLensBinding
- type ReviewFacadeStartResult
- type ReviewForbiddenAction
- type ReviewForecast
- type ReviewForecastHorizon
- type ReviewForecastItem
- type ReviewGateDeniedError
- type ReviewInspectAuthorityResult
- type ReviewIntegrationConsentChoice
- type ReviewIntegrationConsentOffPath
- type ReviewIntegrationConsentResult
- type ReviewIntegrationFailure
- type ReviewIntegrationFailureContext
- type ReviewIntegrationFailureError
- type ReviewIntegrationNegotiatedComponents
- type ReviewIntegrationOperationResult
- type ReviewIntegrationScopeChange
- type ReviewIntegrationScopeTarget
- type ReviewIntegrationStartResult
- type ReviewIntegrationTargetDrift
- type ReviewInvalidateResult
- type ReviewModeResult
- type ReviewModeUnreadableError
- type ReviewModeUnreadableScope
- type ReviewMutationOutcome
- type ReviewNextTransition
- type ReviewProviderTask
- type ReviewReceiptDiscoveryError
- type ReviewReceiptDiscoveryKind
- type ReviewReclaimResult
- type ReviewRecoverResult
- type ReviewRepairDispositionExecution
- type ReviewRepairDispositionProviderInputs
- type ReviewRepairMode
- type ReviewRepairProviderInputs
- type ReviewRepairResult
- type ReviewRepositoryContextReference
- type ReviewResultReopenResult
- type ReviewResumeResult
- type ReviewStopContinuation
- type ReviewStoreResetResult
- type ReviewTargetStatusAuthority
- type ReviewTargetStatusFrozen
- type ReviewTargetStatusProjection
- type ReviewTargetStatusResult
- type ReviewTraceOutcome
- type ReviewTransitionArgument
- type ReviewTransitionArtifact
- type ReviewTransitionBinding
- type ReviewTransitionCollection
- type ReviewTransitionExecution
- type ReviewTransitionInput
- type ReviewTransitionSubmission
- type ReviewTransitionSubmissionValue
- type ReviewUnachievableLensSlot
- type ReviewUnachievableLensWithdraw
- type ReviewValidateResult
- type ReviewerResultPayloadError
- type ShellInstallSelection
- type SyncFlags
- type SyncResult
- type SyncSkippedAgent
- type TelemetryPolicyResult
- type TelemetryStatusResult
- type TelemetryTriggerResult
- type UninstallFlags
- type UninstallOpenCodePluginFlags
Constants ¶
const ( CheckStatusPass = doctor.StatusPass CheckStatusWarn = doctor.StatusWarn CheckStatusFail = doctor.StatusFail )
const ( ReviewResumeSchema = "gentle-ai.review-resume/v1" ReviewBundleSchema = "gentle-ai.review-bundle-result/v1" ReviewValidateSchema = "gentle-ai.review-gate-result/v1" )
const OpenCodeBackgroundSubagentsEnv = "GENTLE_AI_OPENCODE_BACKGROUND_SUBAGENTS"
const PiBackgroundSubagentsEnv = "GENTLE_AI_PI_BACKGROUND_SUBAGENTS"
PiBackgroundSubagentsEnv is the environment source for the managed Pi background-subagent preference. It mirrors the OpenCode contract; there is no launcher or activation plumbing behind it because the primitive is the already-installed pi-subagents extension reading a projected policy file.
const PiConfigHomeEnv = "GENTLE_PI_CONFIG_HOME"
PiConfigHomeEnv overrides gentle-pi's config base directory (default ~/.pi), matching gentle-pi's own configuration precedent.
const PiExcludePackagesEnv = "GENTLE_AI_PI_EXCLUDE_PACKAGES"
PiExcludePackagesEnv lists managed Pi package sources the install must not run `pi install` for (comma-separated). A non-empty --pi-exclude-package flag wins over it; the value is never persisted.
const ReviewAssessmentSchema = "gentle-ai.review-assessment/v1"
ReviewAssessmentSchema is the typed envelope gentle-ai review assess prints with --json. It is a read-only projection of the same candidate risk assessment START uses to choose lenses (reviewtransaction.AssessSnapshotRisk), so a host can gate delegated verification on it before deciding whether to start a review at all, with or without receipt-driven development enabled (issue #4295).
const ReviewAssessmentSchemaID = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/assess.schema.json"
const ReviewInspectAuthoritySchema = "gentle-ai.review-authority-inspection/v1"
const ReviewIntegrationCapabilitiesSchema = "gentle-ai.review-integration.capabilities/v1.5"
const ReviewIntegrationCapabilitiesSchemaID = "https://gentle-ai.dev/contracts/review-integration/v1/schemas/capabilities-v1.5.schema.json"
const ReviewIntegrationCapabilitiesSchemaIDV1 = "https://gentle-ai.dev/contracts/review-integration/v1/schemas/capabilities.schema.json"
const ReviewIntegrationCapabilitiesSchemaIDV11 = "https://gentle-ai.dev/contracts/review-integration/v1/schemas/capabilities-v1.1.schema.json"
const ReviewIntegrationCapabilitiesSchemaIDV12 = "https://gentle-ai.dev/contracts/review-integration/v1/schemas/capabilities-v1.2.schema.json"
const ReviewIntegrationCapabilitiesSchemaIDV13 = "https://gentle-ai.dev/contracts/review-integration/v1/schemas/capabilities-v1.3.schema.json"
const ReviewIntegrationCapabilitiesSchemaIDV14 = "https://gentle-ai.dev/contracts/review-integration/v1/schemas/capabilities-v1.4.schema.json"
const ReviewIntegrationCapabilitiesSchemaIDV2 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/capabilities.schema.json"
const ReviewIntegrationCapabilitiesSchemaIDV21 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/capabilities-v2.1.schema.json"
const ReviewIntegrationCapabilitiesSchemaIDV22 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/capabilities-v2.2.schema.json"
const ReviewIntegrationCapabilitiesSchemaIDV23 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/capabilities-v2.3.schema.json"
const ReviewIntegrationCapabilitiesSchemaIDV24 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/capabilities-v2.4.schema.json"
const ReviewIntegrationCapabilitiesSchemaIDV25 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/capabilities-v2.5.schema.json"
const ReviewIntegrationCapabilitiesSchemaIDV26 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/capabilities-v2.6.schema.json"
const ReviewIntegrationCapabilitiesSchemaV1 = "gentle-ai.review-integration.capabilities/v1"
const ReviewIntegrationCapabilitiesSchemaV11 = "gentle-ai.review-integration.capabilities/v1.1"
const ReviewIntegrationCapabilitiesSchemaV12 = "gentle-ai.review-integration.capabilities/v1.2"
const ReviewIntegrationCapabilitiesSchemaV13 = "gentle-ai.review-integration.capabilities/v1.3"
const ReviewIntegrationCapabilitiesSchemaV14 = "gentle-ai.review-integration.capabilities/v1.4"
const ReviewIntegrationCapabilitiesSchemaV2 = "gentle-ai.review-integration.capabilities/v2"
const ReviewIntegrationCapabilitiesSchemaV21 = "gentle-ai.review-integration.capabilities/v2.1"
const ReviewIntegrationCapabilitiesSchemaV22 = "gentle-ai.review-integration.capabilities/v2.2"
const ReviewIntegrationCapabilitiesSchemaV23 = "gentle-ai.review-integration.capabilities/v2.3"
const ReviewIntegrationCapabilitiesSchemaV24 = "gentle-ai.review-integration.capabilities/v2.4"
const ReviewIntegrationCapabilitiesSchemaV25 = "gentle-ai.review-integration.capabilities/v2.5"
const ReviewIntegrationCapabilitiesSchemaV26 = "gentle-ai.review-integration.capabilities/v2.6"
const ReviewIntegrationConsentSchema = "gentle-ai.review-integration.consent/v1"
const ReviewIntegrationConsentSchemaID = "https://gentle-ai.dev/contracts/review-integration/v1/schemas/consent.schema.json"
const ReviewIntegrationConsentSchemaIDV2 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/consent.schema.json"
const ReviewIntegrationConsentSchemaIDV3 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/consent-v3.schema.json"
const ReviewIntegrationConsentSchemaV2 = "gentle-ai.review-integration.consent/v2"
const ReviewIntegrationConsentSchemaV3 = "gentle-ai.review-integration.consent/v3"
const ReviewIntegrationContractV1 = "gentle-ai.review-integration/v1"
const ReviewIntegrationContractV2 = "gentle-ai.review-integration/v2"
const ReviewIntegrationFailureSchema = "gentle-ai.review-integration.failure/v1"
const ReviewIntegrationFailureSchemaID = "https://gentle-ai.dev/contracts/review-integration/v1/schemas/failure.schema.json"
const ReviewIntegrationFailureSchemaIDV2 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/failure.schema.json"
const ReviewIntegrationFailureSchemaV2 = "gentle-ai.review-integration.failure/v2"
const ReviewIntegrationOperationSchema = "gentle-ai.review-integration.operation/v1"
const ReviewIntegrationOperationSchemaID = "https://gentle-ai.dev/contracts/review-integration/v1/schemas/operation.schema.json"
const ReviewIntegrationOperationSchemaIDV2 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/operation.schema.json"
const ReviewIntegrationOperationSchemaV2 = "gentle-ai.review-integration.operation/v2"
const ReviewIntegrationOperationValidate = "review.validate"
const ReviewIntegrationProjectionSchema = "gentle-ai.review-integration.projection/v1"
const ReviewIntegrationProjectionSchemaID = "https://gentle-ai.dev/contracts/review-integration/v1/schemas/projection.schema.json"
const ReviewIntegrationRepairSchema = "gentle-ai.review-integration.repair/v1"
const ReviewIntegrationRepairSchemaID = "https://gentle-ai.dev/contracts/review-integration/v1/schemas/repair.schema.json"
const ReviewIntegrationRepairSchemaIDV2 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/repair.schema.json"
const ReviewIntegrationRepairSchemaV2 = "gentle-ai.review-integration.repair/v2"
const ReviewIntegrationStartSchema = ReviewIntegrationStartSchemaV4
const ReviewIntegrationStartSchemaID = ReviewIntegrationStartSchemaIDV4
const ReviewIntegrationStartSchemaIDV1 = "https://gentle-ai.dev/contracts/review-integration/v1/schemas/start.schema.json"
const ReviewIntegrationStartSchemaIDV2 = "https://gentle-ai.dev/contracts/review-integration/v1/schemas/start-v2.schema.json"
const ReviewIntegrationStartSchemaIDV3 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/start.schema.json"
const ReviewIntegrationStartSchemaIDV4 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/start-v4.schema.json"
const ReviewIntegrationStartSchemaV1 = "gentle-ai.review-integration.start/v1"
const ReviewIntegrationStartSchemaV2 = "gentle-ai.review-integration.start/v2"
const ReviewIntegrationStartSchemaV3 = "gentle-ai.review-integration.start/v3"
const ReviewIntegrationStartSchemaV4 = "gentle-ai.review-integration.start/v4"
const ReviewIntegrationStatusSchema = ReviewIntegrationStatusSchemaV9
const ReviewIntegrationStatusSchemaID = ReviewIntegrationStatusSchemaIDV9
const ReviewIntegrationStatusSchemaIDV1 = "https://gentle-ai.dev/contracts/review-integration/v1/schemas/status.schema.json"
const ReviewIntegrationStatusSchemaIDV2 = "https://gentle-ai.dev/contracts/review-integration/v1/schemas/status-v2.schema.json"
const ReviewIntegrationStatusSchemaIDV3 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/status.schema.json"
const ReviewIntegrationStatusSchemaIDV4 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/status-v4.schema.json"
const ReviewIntegrationStatusSchemaIDV5 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/status-v5.schema.json"
const ReviewIntegrationStatusSchemaIDV6 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/status-v6.schema.json"
const ReviewIntegrationStatusSchemaIDV7 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/status-v7.schema.json"
const ReviewIntegrationStatusSchemaIDV8 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/status-v8.schema.json"
const ReviewIntegrationStatusSchemaIDV9 = "https://gentle-ai.dev/contracts/review-integration/v2/schemas/status-v9.schema.json"
const ReviewIntegrationStatusSchemaV1 = "gentle-ai.review-integration.status/v1"
const ReviewIntegrationStatusSchemaV2 = "gentle-ai.review-integration.status/v2"
const ReviewIntegrationStatusSchemaV3 = "gentle-ai.review-integration.status/v3"
const ReviewIntegrationStatusSchemaV4 = "gentle-ai.review-integration.status/v4"
const ReviewIntegrationStatusSchemaV5 = "gentle-ai.review-integration.status/v5"
const ReviewIntegrationStatusSchemaV6 = "gentle-ai.review-integration.status/v6"
const ReviewIntegrationStatusSchemaV7 = "gentle-ai.review-integration.status/v7"
const ReviewIntegrationStatusSchemaV8 = "gentle-ai.review-integration.status/v8"
const ReviewIntegrationStatusSchemaV9 = "gentle-ai.review-integration.status/v9"
const ReviewModeSchema = "gentle-ai.review-mode/v1"
ReviewModeSchema identifies the user-facing kill-switch projection.
const ReviewResultReopenSchema = "gentle-ai.review-result-reopen-result/v1"
const ReviewStartConsentDeclinedThisCandidate = "declined_this_candidate"
ReviewStartConsentDeclinedThisCandidate reports that the user answered the one-time consent question with "Not now, just this once": this candidate was not reviewed, nothing was persisted, and the next candidate asks again. The token mirrors the snake_case delivery vocabulary (receipt_governed, unmanaged) so agents can distinguish this outcome from every other start.
const ReviewStoreResetSchema = "gentle-ai.review-store-reset-result/v1"
ReviewStoreResetSchema identifies the user-facing store reset projection.
const TelemetryStatusSchema = telemetry.StatusSchema
TelemetryStatusSchema identifies the `teicos telemetry status|enable|disable` projection (gentle-ai.telemetry-status/v1).
const TelemetryStdinReadLimit = telemetry.MaxPayloadBytes + 1
TelemetryStdinReadLimit caps how many bytes `telemetry send` will read from its own stdin: one more than the contract's payload ceiling, so an oversized or runaway stream is refused rather than read without bound.
const TelemetryTriggerSchema = "gentle-ai.telemetry-trigger/v1"
TelemetryTriggerSchema identifies `teicos telemetry trigger`'s answer (gentle-ai.telemetry-trigger/v1).
Variables ¶
var ( // AppVersion is the teicos version that will be written into backup manifests. // It is set by app.go before any CLI operation so that every backup created during // an install or sync records which version of gentle-ai made it. // Default "dev" matches the ldflags default in app.Version. AppVersion = "dev" )
Functions ¶
func BuildSyncSelection ¶
BuildSyncSelection builds a model.Selection for the sync command.
Default sync scope: Engram, Context7, GGA, Skills, Persona. Excluded by default: Permissions, Theme (no markers; managed via JSON overlays where user customization cannot be safely diff-merged). Permissions and Theme can be opted-in via flags.
Persona is included because its content lives between <!-- gentle-ai:persona --> markers — that block is harness-managed and must propagate embedded-asset changes across versions. Content outside the markers (user-authored sections) is preserved by InjectMarkdownSection.
This is the reusable managed-asset sync contract. A future `upgrade --sync` flow can call this function to get the same managed-only selection semantics.
func DiscoverAgents ¶
DiscoverAgents returns the agent IDs to sync. Persisted selections are authoritative, including an explicitly configured empty selection. Missing or incidental state falls back to filesystem discovery; unreadable state fails closed so sync cannot inject into unselected agent configuration.
When --agents is provided explicitly, callers should pass those IDs directly instead of calling DiscoverAgents.
func ExecuteTUIInstallRecordingCodexServiceTier ¶
func ExecuteTUIInstallRecordingCodexServiceTier(homeDir string, selection model.Selection, resolved planner.ResolvedPlan, profile system.PlatformProfile, background model.OpenCodeBackgroundIntent, piBackground model.PiBackgroundIntent, onProgress pipeline.ProgressFunc, consent ...*OpenCodeSDKConsent) (pipeline.ExecutionResult, *pipeline.Orchestrator, *string)
ExecuteTUIInstallRecordingCodexServiceTier runs a TUI install and returns its orchestrator plus the service tier engram left in Codex's config.toml (nil = not written), for state to record.
func NewShellInstallModel ¶
func NewShellInstallModel(cancel context.CancelFunc) tea.Model
NewShellInstallModel creates a selector for embedding in an existing program. It never starts an installer worker; confirmation quits the selector so its owner can restore the terminal before executing ShellInstallArguments.
func PrintInstallHelp ¶
func PrintSyncHelp ¶
func RenderDryRun ¶
func RenderDryRun(result InstallResult) string
func RenderInstallManualActions ¶
func RenderInstallManualActions(result InstallResult) string
RenderInstallManualActions renders non-fatal completion actions after the normal verification report so CLI users receive the same drift guidance.
func RenderSyncReport ¶
func RenderSyncReport(result SyncResult) string
RenderSyncReport renders a human-readable summary of a sync execution.
Unlike verify.RenderReport (which shows verification check statuses), this function reports the managed sync actions that were executed — matching the spec requirement to surface "what was done" rather than "what was checked".
No-op cases:
- No agents were discovered or specified (NoOp=true, Agents empty).
- All managed assets were already current (NoOp=true, FilesChanged=0).
func RenderUninstallOpenCodePluginReport ¶
func RenderUninstallOpenCodePluginReport(result opencodeplugin.UninstallResult) string
RenderUninstallOpenCodePluginReport renders a human-readable report of what the 4-layer engine touched.
func RenderUninstallReport ¶
func RenderUninstallReport(result componentuninstall.Result) string
func ResolveAgentConfigDir ¶
func ResolveAgentConfigDir(scope InstallScope, homeDir, workspaceDir string) string
ResolveAgentConfigDir returns the directory to use as the agent config root. When scope is ScopeWorkspace, workspaceDir is returned; otherwise homeDir is used. Both homeDir and workspaceDir must be non-empty absolute paths.
func ResolveInstallProfile ¶
func ResolveInstallProfile(detection system.DetectionResult) system.PlatformProfile
ResolveInstallProfile returns the platform profile from detection, defaulting to darwin/brew.
func RestoreManagedBackup ¶
RestoreManagedBackup keeps generic restore defaults unchanged. A managed standalone restore may also use the current validated Codex home when an entry belongs there. Authority comes from the environment, never the manifest; RestoreService still enforces containment and symlink-escape checks.
func RestorePersistedSelection ¶
func RestorePersistedSelection(selection *model.Selection, persisted state.InstallState, flags SyncFlags)
func ReviewModeStatus ¶
func ReviewModeStatus(ctx context.Context, repo string) (reviewtransaction.RDDModeStatus, error)
reviewModeStatus is strictly read-only: it never creates user state and never creates repository state. ReviewModeStatus resolves the persisted review-mode sources without mutating them.
func ReviewOperationFlagSurface ¶
ReviewOperationFlagSurface returns the set of flag names the negotiated review operation owning the given CLI verb declares in reviewIntegrationOperationRegistry, or found=false when no negotiated row with a declared flag surface owns that verb. The registry is the single policy source for the negotiated route (see its own comment), so a documented invocation of a negotiated verb can be checked against the exact flags negotiated routing recognises without re-deriving them.
func RunCodeGraph ¶
RunCodeGraph exposes the safe, Gentle-AI-owned initialization boundary used by generated agent guidance. It intentionally accepts no raw CodeGraph args.
func RunRestore ¶
RunRestore is the top-level entry point for `gentle-ai restore [args]`. It reads backups from the real home directory and uses the default restore function.
func RunRestoreWithFn ¶
func RunRestoreWithFn(args []string, restorer RestoreFunc, stdout io.Writer) error
RunRestoreWithFn is the testable variant of RunRestore. It uses the provided RestoreFunc and reads backups from the HOME environment variable (set by tests).
func RunRestoreWithFnAndInput ¶
func RunRestoreWithFnAndInput(args []string, restorer RestoreFunc, stdout io.Writer, stdin io.Reader) error
RunRestoreWithFnAndInput is the fully injectable variant used in tests that need to simulate stdin input (e.g. testing confirmation prompts).
func RunReviewAssess ¶
RunReviewAssess is the read-only `gentle-ai review assess` command. It builds the exact same candidate review start would (current changes, or a named --base-ref comparison), runs the shared risk assessment, and prints it: no authority, no lineage, no store mutation, and no lock beyond an ordinary read. It works identically whether or not receipt-driven development is enabled, so a host can gate delegated verification on the result before ever calling review start (issue #4295).
When the candidate cannot be built or assessed, this command fails closed: every returned error names a runnable `gentle-ai review assess ...` continuation (or an unambiguous %w propagation of the underlying native failure). Hosts that cannot resolve the named continuation should treat the failure exactly as they would treat a "high" result.
func RunReviewCaptureCorrectionPlan ¶
RunReviewCaptureCorrectionPlan records the one immutable, positive correction forecast before the user edits. It is the only public event that advances a correction_required authority into an open bounded correction.
func RunReviewCaptureRefuter ¶
RunReviewCaptureRefuter materializes or executes the one transaction-wide provider refuter batch. --materialize prints the Go-materialized opaque prompt raw; --execute runs a fresh Go-owned locked-down pi process on that exact request and admits its raw bytes, so adversarial provenance mirrors the compiled claude/codex path; admission and canonicalization stay in Go.
func RunReviewCaptureResult ¶
RunReviewCaptureResult validates or captures one result bound to review authority.
func RunReviewCaptureUnachievable ¶
RunReviewCaptureUnachievable persists one bound declaration that a selected lens slot cannot be completed under current conditions, or -- with --withdraw=true -- retracts that exact declaration (issue #3442's resilience gap: a host that mistook a transient failure, such as a host relay transport bound, for a deterministic one had no way back into the same lineage). Both forms bind to the exact lineage, revision, target, and SubjectHash the negotiated collect transition already offered for that slot (rendered as its `subject-hash` argument), exactly like every other capture verb -- so a host cannot skip a lens or fabricate a result, only report that the one slot it was actually asked to fill could not be filled, or take that report back. Declaring stops a restarted STATUS negotiation from re-offering the slot (a typed, named stop instead); withdrawing makes STATUS re-offer it again.
func RunReviewCaptureValidation ¶
RunReviewCaptureValidation materializes or captures the correction-bound provider targeted-validator result, binding the frozen validation request hash in both modes so the verdict can never drift to another correction.
func RunReviewInspectCandidate ¶
RunReviewInspectCandidate exposes only provider-bound immutable candidate inspection; callers supply no repository path, tree, or literal path.
func RunReviewLensContext ¶
RunReviewLensContext emits the finished reviewer lens context for one selected lens: the provider-authored binding, the provider-authored capture context, and the materialized immutable candidate evidence, budget already applied and refusals already resolved.
It takes the two opaque tokens the collect transition already carries and nothing else. The repository context handle is a digest that commits to the lineage, target identity, revision, and repository identity, so those four values are recovered from the handle rather than relayed; the selected order is recovered from the lens. There is nothing left for a caller to assemble, and therefore nothing for it to author incorrectly.
The command consumes no correction budget, no reviewer invocation, and no authority revision. Its only write is an append-only audit note recording that the provider produced this lens context and by which mechanism, so running it again with the same mechanism converges rather than conflicting.
func RunReviewMode ¶
RunReviewMode is the user-controlled receipt-driven-development switch. Receipt-driven development is opt-out: with no source expressing an opinion it resolves to on without persisting a user decision. The global mode lives in uncommitted user state; the clone-local override lives under this clone's Git common directory and can only disable. Any off wins, status never mutates, and enabling applies to future candidates only.
func RunReviewReopenResults ¶
RunReviewReopenResults exposes the only path returning an uncorrected validating or correction-required authority to reviewing. Native detection covers reviewer slots that were historically accepted without provider admission or whose own evidence proves that repository inspection was unavailable; --quarantine-lens additionally lets a maintainer override named admitted slots when the reviewers' input, not the candidate, was wrong. The overridden bytes are preserved in quarantine and the audit record names each authorized lens.
func RunReviewStopHook ¶
RunReviewStopHook is the `gentle-ai review stop-hook` entry point. Claude Code runs it as both a SessionStart and a Stop hook. On SessionStart it records the repository's current unreviewed-candidate identity (if any) as this session's baseline, with zero output. On Stop it prints one reminder, only when receipt-driven development is enabled and the repository holds a candidate the session did not start with, that routes the agent through the selectorless STATUS preflight before it reports completion. Every other case -- including an unrecognized hook_event_name -- is silent (exit 0, no output), and this command never starts a review itself.
func RunReviewStoreReset ¶
RunReviewStoreReset removes this clone's accumulated review lineage state.
It is user-initiated only, in the same sense `review mode disable` is: it carries no negotiated contract row, so no adapter can reach it on the machine route, and nothing in the product invokes it. A human types it or picks it in the TUI, or it does not happen.
Preview is the default and removal needs --confirm. That asymmetry is deliberate. The operation is irreversible and clone-wide, so the bare invocation -- the one that gets typed from memory, pasted out of a chat log, or recalled from shell history -- has to be the one that only looks. Costing the user a second invocation is a much smaller price than the first mistake.
func RunReviewValidateNonDeciding ¶
RunReviewValidateNonDeciding is the shipped legacy review-validate route. It retains legacy syntax only far enough to identify the repository and gate; it never reads a receipt, authority, candidate, or gate evidence. The retained RunReviewValidate evaluator below remains available for internal historical coverage that explicitly exercises the old gate algebra.
func RunShell ¶
Dedicated early route, deliberately independent of the generic installer, profile detector, self-update, gate and ordinary Gentle AI startup TUI.
func RunTelemetry ¶
RunTelemetry implements `teicos telemetry status|enable|disable|preview` plus the hidden `telemetry send` subcommand that SpawnDetachedSend launches in the background (payload arrives on its stdin, never a file path, so there is never a path for it to remove). status, enable, disable, and preview never send anything themselves.
func RunUninstall ¶
func RunUninstallOpenCodePlugin ¶
func RunUninstallOpenCodePlugin(args []string, stdout io.Writer) (opencodeplugin.UninstallResult, error)
RunUninstallOpenCodePlugin is the CLI entry point for the sub-command. Prompts for confirmation unless flags.Yes, then calls opencodeplugin.Uninstall. Writes a report to stdout on success or surfaces the error.
func RunUninstallWithSelection ¶
func RunUninstallWithSelection(homeDir, workspaceDir string, agentIDs []model.AgentID, componentIDs []model.ComponentID) (componentuninstall.Result, error)
func RunUninstallWithSelectionAndEngramScope ¶
func RunUninstallWithSelectionAndEngramScope(homeDir, workspaceDir string, agentIDs []model.AgentID, componentIDs []model.ComponentID, engramScope model.EngramUninstallScope) (componentuninstall.Result, error)
func SetCommandOutputStreaming ¶
func SetCommandOutputStreaming(enabled bool) func()
SetCommandOutputStreaming toggles whether command stdout/stderr is streamed directly to the terminal. It returns a restore function.
func SetGlobalReviewMode ¶
func SetGlobalReviewMode(ctx context.Context, repo string, enabled bool) (reviewtransaction.RDDModeStatus, error)
SetGlobalReviewMode changes only the global review-mode source and returns the resolved status for the requested repository.
func ShellInstallArguments ¶
func ShellInstallArguments(selection ShellInstallSelection) []string
ShellInstallArguments preserves the backend's existing entry protocol. Unconfirmed and cancelled selectors have no executable argument vector.
func SplitPrintedCommandWords ¶
SplitPrintedCommandWords splits one printed command line into the argv a POSIX shell would hand the product.
It understands exactly the quoting reviewTransitionShellWord emits and nothing more: POSIX single quotes, and a backslash escape for the one character single quotes cannot contain (an embedded quote renders as '\”). Anything else, such as an unterminated quote or a trailing escape, is a line that would not run as printed, and saying so is the point.
This is the same grammar bench's splitPrintedCommandWords enforces for envelope-printed commands (issue #1865). It lives here, beside the emitter it inverts, because the bench module cannot import the product module's internals; the two implementations must stay in step with reviewTransitionShellWord and with each other.
func TelemetryTrigger ¶
func TelemetryTrigger(homeDir string)
TelemetryTrigger is what install, update, and sync call at the end of a successful run. It reads the just-persisted install selection back from state (so the reported agents/components always match what is actually on disk, regardless of which in-memory selection the caller built along the way) and hands it to telemetry.Opportunistic. It never returns an error and never panics: telemetry is best-effort and must never affect the caller's own exit code or output.
Types ¶
type CheckResult ¶
type CheckStatus ¶
type DoctorReport ¶
type InstallChannel ¶
type InstallChannel string
const ( ChannelStable InstallChannel = "stable" ChannelBeta InstallChannel = "beta" )
func ResolveInstallChannel ¶
func ResolveInstallChannel(flagValue string) (InstallChannel, error)
func (InstallChannel) IsBeta ¶
func (c InstallChannel) IsBeta() bool
type InstallFlags ¶
type InstallFlags struct {
Agents []string
Components []string
Skills []string
Persona string
Preset string
SDDMode string
Scope string
Channel string
DryRun bool
OpenCodeBackgroundSubagents string
OpenCodeBackgroundSubagentsSet bool
PiBackgroundSubagents string
PiBackgroundSubagentsSet bool
PiExcludePackages []string
ClaudeOrchestratorModules bool
}
func ParseInstallFlags ¶
func ParseInstallFlags(args []string) (InstallFlags, error)
type InstallInput ¶
type InstallInput struct {
Selection model.Selection
Scope InstallScope
Channel InstallChannel
DryRun bool
// ClaudeOrchestratorModules opts a global install that selects Claude into
// the user-global module pilot (#5256).
ClaudeOrchestratorModules bool
}
func NormalizeInstallFlags ¶
func NormalizeInstallFlags(flags InstallFlags, detection system.DetectionResult) (InstallInput, error)
type InstallResult ¶
type InstallResult struct {
Selection model.Selection
Resolved planner.ResolvedPlan
Review planner.ReviewPayload
Plan pipeline.StagePlan
Execution pipeline.ExecutionResult
Verify verify.Report
Dependencies system.DependencyReport
PiCodeGraph *communitytool.PiCodeGraphResult
ManualActions []string
DryRun bool
Background OpenCodeBackgroundResolution
BackgroundPolicyEnabled bool
PiBackground PiBackgroundResolution
// PiExcludedPackages are managed Pi sources skipped by `pi install`.
PiExcludedPackages []string
}
func RunPreparedInstall ¶
func RunPreparedInstall(prepared PreparedInstall, detection system.DetectionResult) (InstallResult, error)
RunPreparedInstall executes a plan returned by PrepareInstall.
type InstallScope ¶
type InstallScope string
InstallScope controls where agent-scoped config files (system prompts, skills/, agents/, etc.) are written. ScopeGlobal writes to the user's global config root for each selected agent. ScopeWorkspace writes to the current workspace config root for each selected agent.
const ( // ScopeGlobal writes to the global agent config dir (default, backward-compatible). ScopeGlobal InstallScope = "global" // ScopeWorkspace writes to the current workspace config root for each selected agent. ScopeWorkspace InstallScope = "workspace" )
func ResolveInstallScope ¶
func ResolveInstallScope(flagValue string) (InstallScope, error)
ResolveInstallScope resolves the install scope from the flag value and env var. Priority: explicit flag > env var > default (global). An empty flagValue means the flag was not set.
type OpenCodeBackgroundResolution ¶
type OpenCodeBackgroundResolution struct {
Intent model.OpenCodeBackgroundIntent
Effective model.OpenCodeBackgroundIntent
Persist model.OpenCodeBackgroundIntent
NeedsPrompt bool
Activation opencodeactivation.ActivationReport
// contains filtered or unexported fields
}
OpenCodeBackgroundResolution separates the winning intent from the concrete runtime outcome. Persist is non-empty only for a newly supplied on/off choice; prior state is consulted by auto but is never republished here.
func ResolveOpenCodeBackground ¶
func ResolveOpenCodeBackground(input OpenCodeBackgroundResolveInput) (OpenCodeBackgroundResolution, error)
ResolveOpenCodeBackground applies CLI > non-empty env > prior managed state > auto. Auto consults prior on/off state; only implicit unresolved auto prompts interactively, while explicit auto stays auto without enabling.
func ResolveOpenCodeBackgroundInteractive ¶
func ResolveOpenCodeBackgroundInteractive(prior model.OpenCodeBackgroundIntent) (OpenCodeBackgroundResolution, error)
ResolveOpenCodeBackgroundInteractive resolves the TUI's environment and persisted sources with interactive auto behavior. CLI flags are absent from the TUI flow, so a missing prior and missing environment decision is the only case that requests the TUI choice screen.
type OpenCodeBackgroundResolveInput ¶
type OpenCodeBackgroundResolveInput struct {
CLISet bool
CLIValue model.OpenCodeBackgroundIntent
EnvSet bool
EnvValue string
PriorManaged model.OpenCodeBackgroundIntent
Interactive bool
}
OpenCodeBackgroundResolveInput contains already-discovered sources. The resolver is pure so loading state and reading the process environment remain caller responsibilities in the activation child.
type OpenCodeSDKConsent ¶
type OpenCodeSDKConsent struct {
ConfigDir string
Manager string
Dependency string
// contains filtered or unexported fields
}
OpenCodeSDKConsent describes one reviewed package-manager mutation, not a persisted preference. Only the TUI's separate confirmation supplies it.
func OpenCodeSDKInstallProposal ¶
func OpenCodeSDKInstallProposal(homeDir string) (*OpenCodeSDKConsent, error)
OpenCodeSDKInstallProposal returns nil when no SDK operation is needed. A conflicting or unavailable package manager is never guessed.
type PartialSyncError ¶
type PartialSyncError struct {
Skipped []SyncSkippedAgent
}
PartialSyncError reports a sync that applied every other selected agent but skipped some. The result returned with it is complete for the applied part.
func (*PartialSyncError) Error ¶
func (e *PartialSyncError) Error() string
type PiBackgroundResolution ¶
type PiBackgroundResolution struct {
Intent model.PiBackgroundIntent
Effective model.PiBackgroundIntent
Persist model.PiBackgroundIntent
NeedsPrompt bool
// contains filtered or unexported fields
}
PiBackgroundResolution separates the winning intent from the concrete runtime outcome. Persist is non-empty only for a newly supplied on/off choice; prior state is consulted by auto but is never republished here.
func ResolvePiBackground ¶
func ResolvePiBackground(input PiBackgroundResolveInput) (PiBackgroundResolution, error)
ResolvePiBackground applies CLI > non-empty env > prior managed state > auto. Auto consults prior on/off state; only implicit unresolved auto prompts interactively, while explicit auto stays auto without enabling. Unresolved non-interactive auto resolves to off.
func ResolvePiBackgroundInteractive ¶
func ResolvePiBackgroundInteractive(prior model.PiBackgroundIntent) (PiBackgroundResolution, error)
ResolvePiBackgroundInteractive resolves the TUI's environment and persisted sources with interactive auto behavior. CLI flags are absent from the TUI flow, so a missing prior and missing environment decision is the only case that requests the TUI choice screen.
type PiBackgroundResolveInput ¶
type PiBackgroundResolveInput struct {
CLISet bool
CLIValue model.PiBackgroundIntent
EnvSet bool
EnvValue string
PriorManaged model.PiBackgroundIntent
Interactive bool
}
PiBackgroundResolveInput contains already-discovered sources. The resolver is pure so loading state and reading the process environment remain caller responsibilities.
type PreparedInstall ¶
type PreparedInstall struct {
// contains filtered or unexported fields
}
PreparedInstall is a validated install plan, ready for execution after app preflight. Its fields stay private so dispatch reuses the exact parsed and resolved input.
func PrepareInstall ¶
func PrepareInstall(args []string, detection system.DetectionResult) (PreparedInstall, error)
PrepareInstall resolves and validates without reading or writing install state.
type RestoreFunc ¶
RestoreFunc is the function signature for restoring a backup from its manifest. It matches app.tuiRestore and backup.RestoreService.Restore signatures.
type ReviewAbandonResult ¶
type ReviewAbandonResult struct {
Operation string `json:"operation"`
Record reviewtransaction.CompactReclaimRecord `json:"record"`
}
type ReviewActionBinding ¶
type ReviewActionBinding struct {
LineageID string `json:"lineage_id"`
Revision string `json:"revision"`
TargetIdentity string `json:"target_identity"`
}
ReviewActionBinding is a proof reference, not an authorization template. It is emitted only for a natively eligible maintainer-authorized recovery.
type ReviewActionEligibility ¶
type ReviewActionEligibility struct {
AllowedActions []ReviewEligibleAction `json:"allowed_actions"`
ForbiddenActions []ReviewForbiddenAction `json:"forbidden_actions"`
}
ReviewActionEligibility remains an additive compatibility detail for older consumers. A negotiated next_transition is the sole routing authority.
func (ReviewActionEligibility) Validate ¶
func (eligibility ReviewActionEligibility) Validate(status ReviewTargetStatusResult) error
type ReviewAssessmentCandidate ¶
type ReviewAssessmentCandidate struct {
Kind string `json:"kind"`
BaseRef string `json:"base_ref,omitempty"`
Consumed bool `json:"consumed"`
}
ReviewAssessmentCandidate names the exact candidate the assessment was computed over, so a caller can tell a current-changes candidate from a named base comparison without re-deriving it. Consumed reports whether this exact candidate's terminal review authority was already acknowledged -- the same evidence STATUS itself consults (reviewtransaction.CompactTargetConsumed) before ever offering a fresh START for the identical identity -- so a host never re-derives review_due from a tier that a burned lineage has already settled.
type ReviewAssessmentNextTransition ¶
type ReviewAssessmentNextTransition struct {
Operation string `json:"operation"`
Command string `json:"command"`
Arguments []ReviewTransitionArgument `json:"arguments"`
}
ReviewAssessmentNextTransition is the exact, literally runnable `gentle-ai review status ... --next-transition` preflight continuation for a review_due=true candidate, rendered with the same ReviewTransitionArgument rows and builder conventions review_next_transition.go uses for every other negotiated continuation this product emits. Command is "gentle-ai " plus every argument's token joined by single spaces, so a caller never hand-assembles the invocation from prose (issue: orchestrators skipped the RDD preflight after a slice closed because the ODD rule was prose only).
type ReviewAssessmentReason ¶
type ReviewAssessmentReason struct {
Code string `json:"code"`
Path string `json:"path,omitempty"`
Detail string `json:"detail,omitempty"`
}
ReviewAssessmentReason is the public projection of one reviewtransaction.RiskReason: the same evidence code and path START already carries in its own risk_reasons, plus an optional human-readable detail for the signal or mode-change evidence a bare code does not spell out.
type ReviewAssessmentResult ¶
type ReviewAssessmentResult struct {
Schema string `json:"schema"`
Risk string `json:"risk"`
Reasons []ReviewAssessmentReason `json:"reasons"`
ChangedPaths int `json:"changed_paths"`
ChangedLines int `json:"changed_lines"`
Candidate ReviewAssessmentCandidate `json:"candidate"`
ReviewDue bool `json:"review_due"`
ReviewDueReason string `json:"review_due_reason"`
NextTransition *ReviewAssessmentNextTransition `json:"next_transition,omitempty"`
}
ReviewAssessmentResult is the complete gentle-ai.review-assessment/v1 envelope. Risk is the public vocabulary: "passive" is exactly the tier reviewtransaction.RiskLow names -- the same zero-lens, structural-readback tier START selects for it -- and "medium"/"high" are unchanged so this projection can never disagree with START's own classification of the same candidate. ReviewDue and ReviewDueReason turn that tier into the one consequence orchestrators actually need (issue: the ~400-line ODD slice rule was prose only, and it was skipped in practice); NextTransition is the literal preflight command to run when ReviewDue is true, and is absent otherwise.
type ReviewBundleResult ¶
type ReviewBundleResult struct {
Schema string `json:"schema"`
Operation string `json:"operation"`
LineageID string `json:"lineage_id"`
BundleDigest string `json:"bundle_digest"`
StoreRevision string `json:"store_revision"`
GenesisRevision string `json:"genesis_revision"`
ChainIdentity string `json:"chain_identity"`
BundlePath string `json:"bundle_path,omitempty"`
}
type ReviewCapabilitiesBootstrap ¶
type ReviewCapabilitiesBootstrap struct {
Command string `json:"command"`
TargetSelectorVariants []ReviewCapabilitiesTargetSelector `json:"target_selector_variants"`
RequiredFeature string `json:"required_feature"`
UnsupportedOutcome string `json:"unsupported_outcome"`
ParentOnly bool `json:"parent_only"`
}
ReviewCapabilitiesBootstrap is optional capability metadata. Consumers that do not understand it retain the existing v1 capability surface.
type ReviewCapabilitiesBuild ¶
type ReviewCapabilitiesCompatibility ¶
type ReviewCapabilitiesCompatibility struct {
MinimumProtocolMajor int `json:"minimum_protocol_major"`
MaximumProtocolMajor int `json:"maximum_protocol_major"`
AdditiveMinorPolicy string `json:"additive_minor_policy"`
UnknownMandatory string `json:"unknown_mandatory"`
UnknownOptional string `json:"unknown_optional"`
Modes []string `json:"modes"`
LegacyWindow ReviewCapabilitiesLegacyWindow `json:"legacy_window"`
}
type ReviewCapabilitiesFeatures ¶
type ReviewCapabilitiesFeatures struct {
Mandatory []ReviewCapabilityFeature `json:"mandatory"`
Optional []ReviewCapabilityFeature `json:"optional"`
}
type ReviewCapabilitiesResult ¶
type ReviewCapabilitiesResult struct {
Schema string `json:"schema"`
Contract string `json:"contract"`
Protocol ReviewCapabilitiesProtocol `json:"protocol"`
Package ReviewCapabilitiesPackage `json:"package"`
Build ReviewCapabilitiesBuild `json:"build"`
Executable ReviewCapabilitiesExecutable `json:"executable"`
Operations []string `json:"operations"`
Gates []string `json:"gates"`
Projections []string `json:"projections"`
Schemas []string `json:"schemas"`
Features ReviewCapabilitiesFeatures `json:"features"`
Bootstrap *ReviewCapabilitiesBootstrap `json:"bootstrap,omitempty"`
Compatibility ReviewCapabilitiesCompatibility `json:"compatibility"`
}
func (ReviewCapabilitiesResult) Validate ¶
func (result ReviewCapabilitiesResult) Validate() error
type ReviewCapabilityFeature ¶
type ReviewEligibleAction ¶
type ReviewEligibleAction struct {
Action string `json:"action"`
ReasonCode string `json:"reason_code"`
RequiredInputs []string `json:"required_inputs"`
Disposition reviewtransaction.RecoveryDisposition `json:"disposition,omitempty"`
Binding *ReviewActionBinding `json:"binding,omitempty"`
}
type ReviewFacadeLensBinding ¶
type ReviewFacadeLensBinding struct {
Lens string `json:"lens"`
Order int `json:"order"`
// FindingIDPrefix is the prefix admission requires for explicit finding
// IDs bound to this lens. It follows the lens, not the selection order:
// high-risk START selects review-resilience at order 1, but its explicit
// IDs must still carry R4-.
FindingIDPrefix string `json:"finding_id_prefix"`
}
ReviewFacadeLensBinding pairs one selected lens with its frozen zero-based order so orchestrators build capture bindings exclusively from START output.
type ReviewFacadeStartResult ¶
type ReviewFacadeStartResult struct {
Operation string `json:"operation"`
Action string `json:"action"`
LensesRequired bool `json:"lenses_required"`
LineageID string `json:"lineage_id"`
State reviewtransaction.State `json:"state"`
RiskLevel reviewtransaction.RiskLevel `json:"risk_level"`
SelectedLenses []string `json:"selected_lenses"`
LensBindings []ReviewFacadeLensBinding `json:"lens_bindings"`
Projection reviewtransaction.Projection `json:"projection"`
TargetMode reviewtransaction.TargetKind `json:"target_mode,omitempty"`
TargetIdentity string `json:"target_identity,omitempty"`
BaseTree string `json:"base_tree,omitempty"`
CandidateTree string `json:"candidate_tree,omitempty"`
ChangedFiles int `json:"changed_files"`
ChangedLines int `json:"changed_lines"`
CorrectionBudget int `json:"correction_budget"`
// RiskEvidence carries the same human phrases the interactive consent
// prompt speaks for the frozen candidate, so a headless consumer can relay
// WHY the tier escalated. Absent when no evidence drove an escalation.
RiskEvidence []string `json:"risk_evidence,omitempty"`
// Hint is a purely informational recovery pointer; it never changes START
// behavior and is absent outside its one scoped case.
Hint string `json:"hint,omitempty"`
// Consent reports a user consent choice as a typed outcome instead of an
// error, in the same additive omitted-by-default spirit as RiskEvidence,
// Hint, and the gate result's Delivery: every start that already shipped
// keeps its exact field set, and only a candidate the user declined
// carries the extra token. A decline is a reported choice, never a veto.
Consent string `json:"consent,omitempty"`
// Acknowledgement is present only for a v2 zero-lens approved START. It
// carries the exact continuation that burns the pending compact authority.
Acknowledgement *ReviewTransitionExecution `json:"acknowledgement,omitempty"`
// Trace is present only when --trace was explicitly requested for this
// START (#1854). The authority mutation above always represents what
// actually committed; Trace separately reports whether the requested
// diagnostic entry was also persisted, never the other way around.
Trace *ReviewTraceOutcome `json:"trace,omitempty"`
}
type ReviewForbiddenAction ¶
type ReviewForecast ¶
type ReviewForecast struct {
Horizon ReviewForecastHorizon `json:"horizon"`
Steps []ReviewForecastItem `json:"steps"`
}
type ReviewForecastHorizon ¶
type ReviewForecastHorizon string
const ( ForecastHorizonPartial ReviewForecastHorizon = "partial" ForecastHorizonTerminal ReviewForecastHorizon = "terminal" )
type ReviewForecastItem ¶
type ReviewGateDeniedError ¶
type ReviewGateDeniedError struct {
Result reviewtransaction.GateResult
// Reason is the exact reason the JSON gate-result envelope publishes for
// this denial. It is carried here so the human surface renders the same
// specific statement the machine surface already had, instead of throwing
// it away and substituting a placeholder.
Reason string
Context reviewtransaction.GateContext
Cause error
}
func (ReviewGateDeniedError) Error ¶
func (err ReviewGateDeniedError) Error() string
Error renders the human-surface denial. It always names a continuation: every branch below derives it from the SAME source the negotiated gate_scope_changed/gate_escalated/gate_invalidated envelope already uses (reviewGateAction, and for scope-changed the frozen GateScopeChangeDiagnostics.RecoveryOperation/RecoveryRequiredInputs) so the wording can never drift from the routing knowledge the JSON envelope carries. When no derivable continuation exists, it states the exact Reason the same envelope publishes instead of inventing a command -- and only when there is no reason either does it fall back to the terminal precondition.
Nothing rendered here may be a dotted operation identifier. Those are wire tokens for the negotiated contract; an operator who types one gets nothing, so every command named here goes through reviewRunnableCommand.
func (ReviewGateDeniedError) Unwrap ¶
func (err ReviewGateDeniedError) Unwrap() error
type ReviewInspectAuthorityResult ¶
type ReviewInspectAuthorityResult struct {
Schema string `json:"schema"`
Operation string `json:"operation"`
RepositoryRoot string `json:"repository_root"`
Complete bool `json:"complete"`
Valid bool `json:"valid"`
Totals reviewtransaction.CompactRecoveryInspectionTotals `json:"totals"`
Edges []reviewtransaction.CompactRecoveryEdgeInspection `json:"edges"`
EntryDiagnostics []reviewtransaction.CompactRecoveryEntryDiagnostic `json:"entry_diagnostics"`
// SanctionedExits names, per invalid edge, the operation that would accept
// it right now. It is reported beside the edges rather than inside them
// because the edge shape is the binding identity batch reconciliation
// re-derives and compares, while this is derived against the live store.
SanctionedExits []reviewtransaction.CompactRecoverySanctionedExit `json:"sanctioned_exits"`
}
type ReviewIntegrationConsentChoice ¶
type ReviewIntegrationConsentChoice = consentenvelope.Choice
ReviewIntegrationConsentChoice is one allowed answer: its token, the human label the interactive prompt uses, what choosing it does, and the exact runnable follow-up invocation scoped to this candidate. It is an alias of the shared consent-envelope core's Choice (#2554): the JSON field names are shipped contract bytes, pinned byte-for-byte by TestReviewConsentEnvelopeSerializedBytesUnchanged.
type ReviewIntegrationConsentOffPath ¶
type ReviewIntegrationConsentOffPath = consentenvelope.OffPath
ReviewIntegrationConsentOffPath names the documented permanent-disable command that is deliberately not part of the choice set. Alias of the shared core's OffPath under the same byte pin.
type ReviewIntegrationConsentResult ¶
type ReviewIntegrationConsentResult struct {
Schema string `json:"schema"`
Contract string `json:"contract"`
Operation string `json:"operation"`
Action string `json:"action"`
Agent string `json:"agent,omitempty"`
// Blocking marks this envelope as a decision the caller must relay before
// any review work starts; nothing has been persisted.
Blocking bool `json:"blocking"`
TargetIdentity string `json:"target_identity"`
Projection reviewtransaction.Projection `json:"projection"`
RiskLevel reviewtransaction.RiskLevel `json:"risk_level"`
ChangedFiles int `json:"changed_files"`
ChangedLines int `json:"changed_lines"`
Headline string `json:"headline"`
Reason string `json:"reason"`
Value string `json:"value"`
RiskEvidence []string `json:"risk_evidence"`
Choices []ReviewIntegrationConsentChoice `json:"choices"`
// OffPath documents the permanent disable outside the choice set, exactly
// as the interactive prompt does: a decline is deliberately not the kill
// switch, and turning reviews off for good must cost more than answering
// a relayed question in a hurry.
OffPath ReviewIntegrationConsentOffPath `json:"off_path"`
}
ReviewIntegrationConsentResult is the typed per-candidate consent question a relay-declared negotiated START answers with instead of proceeding. It is a blocking decision envelope in the sense of the orchestrator contract's Lossless Blocking Prompts rule: it carries WHY input is required (the same human phrases the interactive question speaks), the COMPLETE choice set, and the EXACT runnable way to answer, scoped to the one frozen candidate.
It exists only behind the --consent relay declaration. A caller that declares nothing never sees this shape, which is what keeps every already shipped negotiated flow byte-for-byte unchanged.
func (ReviewIntegrationConsentResult) Validate ¶
func (result ReviewIntegrationConsentResult) Validate() error
type ReviewIntegrationFailure ¶
type ReviewIntegrationFailure struct {
Schema string `json:"schema"`
Contract string `json:"contract"`
Operation string `json:"operation"`
Phase string `json:"phase"`
Code string `json:"code"`
Message string `json:"message"`
MutationOutcome ReviewMutationOutcome `json:"mutation_outcome"`
AuthorityApplicability string `json:"authority_applicability"`
RetrySafe bool `json:"retry_safe"`
Replayability reviewtransaction.Replayability `json:"replayability"`
LineageID string `json:"lineage_id,omitempty"`
// TargetIdentity binds an operation failure to the frozen candidate whose
// retained lineage the caller must query with STATUS. It is optional for
// unrelated historical failure classes.
TargetIdentity string `json:"target_identity,omitempty"`
RequestDigest string `json:"request_digest,omitempty"`
ProgressIdentity string `json:"progress_identity,omitempty"`
RequiredInputs []string `json:"required_inputs"`
NextAction string `json:"next_action"`
CauseCategory string `json:"cause_category,omitempty"`
// Cause is additive: the scrubbed, bounded native cause for a typed failure
// branch that has a safe diagnostic to publish.
Cause string `json:"cause,omitempty"`
Context *ReviewIntegrationFailureContext `json:"context,omitempty"`
// Continuation is the one candidate-preserving runnable follow-up a
// managed_assets_outdated refusal can offer (#3299, #4170): the exact
// `teicos sync` invocation that reconciles the recorded digest. It is
// additive and, on THIS envelope, only ever set for that one refusal code;
// the release continuation the type also carries travels on a STATUS stop,
// never here.
Continuation *ReviewStopContinuation `json:"continuation,omitempty"`
}
func (ReviewIntegrationFailure) Validate ¶
func (failure ReviewIntegrationFailure) Validate() error
type ReviewIntegrationFailureContext ¶
type ReviewIntegrationFailureContext struct {
ScopeChange *ReviewIntegrationScopeChange `json:"scope_change,omitempty"`
// TargetDrift is the additive #4494 stale-target evidence: the negotiated
// components beside their live rebuild, with the differing component
// names. Exactly one of the two context variants is ever set.
TargetDrift *ReviewIntegrationTargetDrift `json:"target_drift,omitempty"`
}
type ReviewIntegrationFailureError ¶
type ReviewIntegrationFailureError struct {
Failure ReviewIntegrationFailure
// contains filtered or unexported fields
}
func (*ReviewIntegrationFailureError) Error ¶
func (err *ReviewIntegrationFailureError) Error() string
func (*ReviewIntegrationFailureError) Unwrap ¶
func (err *ReviewIntegrationFailureError) Unwrap() error
type ReviewIntegrationNegotiatedComponents ¶
type ReviewIntegrationNegotiatedComponents struct {
Kind string `json:"kind"`
Projection string `json:"projection"`
BaseTree string `json:"base_tree,omitempty"`
CandidateTree string `json:"candidate_tree"`
PathsDigest string `json:"paths_digest"`
}
ReviewIntegrationNegotiatedComponents are the five identity components a negotiated continuation carries. base_tree is optional: an unborn HEAD current-changes candidate has no base tree, and absence means exactly that, never an omission.
type ReviewIntegrationOperationResult ¶
type ReviewIntegrationOperationResult struct {
Schema string `json:"schema"`
Contract string `json:"contract"`
Operation string `json:"operation"`
Result json.RawMessage `json:"result"`
}
func (ReviewIntegrationOperationResult) Validate ¶
func (result ReviewIntegrationOperationResult) Validate() error
type ReviewIntegrationScopeChange ¶
type ReviewIntegrationScopeChange struct {
Expected ReviewIntegrationScopeTarget `json:"expected"`
Actual ReviewIntegrationScopeTarget `json:"actual"`
DifferingPathCount int `json:"differing_path_count"`
DifferingPathsDigest string `json:"differing_paths_digest"`
PredecessorLineageID string `json:"predecessor_lineage_id"`
PredecessorRevision string `json:"predecessor_revision"`
RecoveryOperation string `json:"recovery_operation"`
RecoveryRequiredInputs []string `json:"recovery_required_inputs"`
}
type ReviewIntegrationStartResult ¶
type ReviewIntegrationStartResult struct {
Schema string `json:"schema"`
Contract string `json:"contract"`
Operation string `json:"operation"`
Action string `json:"action"`
LensesRequired bool `json:"lenses_required"`
LineageID string `json:"lineage_id"`
State reviewtransaction.State `json:"state"`
RiskLevel reviewtransaction.RiskLevel `json:"risk_level"`
SelectedLenses []string `json:"selected_lenses"`
Projection reviewtransaction.Projection `json:"projection"`
TargetMode reviewtransaction.TargetKind `json:"target_mode,omitempty"`
TargetIdentity string `json:"target_identity,omitempty"`
BaseTree string `json:"base_tree,omitempty"`
CandidateTree string `json:"candidate_tree,omitempty"`
ChangedFiles int `json:"changed_files"`
ChangedLines int `json:"changed_lines"`
CorrectionBudget int `json:"correction_budget"`
RiskReasons []reviewtransaction.RiskReason `json:"risk_reasons"`
ArtifactSubjects []reviewtransaction.ArtifactSubject `json:"artifact_subjects"`
CandidateDiff *reviewtransaction.FrozenCandidateDiff `json:"candidate_diff,omitempty"`
ChangedPathManifest *[]reviewtransaction.ChangedPathManifestEntry `json:"changed_path_manifest,omitempty"`
RepositoryContext *ReviewRepositoryContextReference `json:"repository_context,omitempty"`
Acknowledgement *ReviewTransitionExecution `json:"acknowledgement,omitempty"`
NextTransition *ReviewNextTransition `json:"next_transition,omitempty"`
// Trace mirrors ReviewFacadeStartResult.Trace (#1854). It is carried
// only on the current (non-legacy-transport) envelope, the same gating
// Acknowledgement and NextTransition already use, so the frozen v1
// legacy-transport wire shape (start-v2.schema.json) never gains a field.
Trace *ReviewTraceOutcome `json:"trace,omitempty"`
}
ReviewIntegrationStartResult is the explicitly negotiated START response. The legacy ReviewFacadeStartResult remains byte- and schema-compatible.
func (ReviewIntegrationStartResult) Validate ¶
func (result ReviewIntegrationStartResult) Validate() error
type ReviewIntegrationTargetDrift ¶
type ReviewIntegrationTargetDrift struct {
Expected ReviewIntegrationNegotiatedComponents `json:"expected"`
Actual ReviewIntegrationNegotiatedComponents `json:"actual"`
DifferingComponents []string `json:"differing_components"`
}
ReviewIntegrationTargetDrift decomposes one stale-target refusal into the truthful cause: which components of the negotiated candidate evidence no longer describe the live workspace (the moved class), or that every component matches while the identity hash alone drifted (the derivation defect class, #2700/#4353/#4412).
type ReviewInvalidateResult ¶
type ReviewInvalidateResult struct {
Operation string `json:"operation"`
LineageID string `json:"lineage_id"`
State reviewtransaction.State `json:"state"`
StoreRevision string `json:"store_revision"`
}
type ReviewModeResult ¶
type ReviewModeResult struct {
Schema string `json:"schema"`
Operation string `json:"operation"`
Scope string `json:"scope"`
Status reviewtransaction.RDDModeStatus `json:"status"`
}
ReviewModeResult reports what the command did and the resulting effective mode with both of its sources. It carries no review outcome.
type ReviewModeUnreadableError ¶
type ReviewModeUnreadableError struct {
Scopes []ReviewModeUnreadableScope
Cause error
}
ReviewModeUnreadableError reports a kill-switch record that exists but cannot be read as a mode. Failing closed is deliberate and stays exactly as it was: an unintelligible switch is not a disabled switch, so it resolves to managed and every start and mutation still refuses. What the refusal has to carry is the file holding the value and the command that overwrites it, both of which the product already knows and neither of which it used to say.
func (*ReviewModeUnreadableError) Error ¶
func (err *ReviewModeUnreadableError) Error() string
func (*ReviewModeUnreadableError) Unwrap ¶
func (err *ReviewModeUnreadableError) Unwrap() error
type ReviewModeUnreadableScope ¶
ReviewModeUnreadableScope names one kill-switch source whose persisted value cannot be read as a mode, the file that holds it, and the repository that file belongs to.
type ReviewMutationOutcome ¶
type ReviewMutationOutcome string
const ( ReviewMutationNotStarted ReviewMutationOutcome = "not_started" ReviewMutationUnknown ReviewMutationOutcome = "unknown" ReviewMutationCommitted ReviewMutationOutcome = "committed" )
type ReviewNextTransition ¶
type ReviewNextTransition struct {
Kind string `json:"kind"`
ReasonCode string `json:"reason_code"`
Execute *ReviewTransitionExecution `json:"execute,omitempty"`
Collect *ReviewTransitionCollection `json:"collect,omitempty"`
CorrectionRequest *reviewtransaction.CorrectionPlanRequest `json:"correction_request,omitempty"`
Continuation *ReviewStopContinuation `json:"continuation,omitempty"`
// UnachievableLensSlots is a pointer-to-slice, exactly like
// ReviewTransitionExecution.SelectorArguments, so ReviewNextTransition
// stays a comparable struct (== / != against a zero value) for the
// existing state-table test's "omitted" check.
UnachievableLensSlots *[]ReviewUnachievableLensSlot `json:"unachievable_lens_slots,omitempty"`
}
ReviewNextTransition is the sole negotiated routing decision. Its execute form is complete, its collect form identifies one externally supplied input, and its stop form otherwise contains no command-shaped data. Two deliberate exceptions exist: the managed_assets_outdated stop is itself the candidate-preserving continuation (#3299, #4170), so Continuation is additive and set only there; and UnachievableLensSlots (issue #3442): a bare stop with no recoverable binding would strand a restarted orchestrator that lost the pre-stop collect offer carrying the declared slot's SubjectHash, with no native route back to the exact `--request-hash` its own withdraw needs.
func (ReviewNextTransition) Validate ¶
func (transition ReviewNextTransition) Validate() error
type ReviewProviderTask ¶
type ReviewProviderTask struct {
Agent string `json:"agent"`
Role string `json:"role"`
Prompt string `json:"prompt"`
}
ReviewProviderTask is a Go-issued host task. OpenCode relays its opaque prompt and final bytes through one live child process; Go owns admission.
type ReviewReceiptDiscoveryError ¶
type ReviewReceiptDiscoveryError struct {
Kind ReviewReceiptDiscoveryKind
Category string
Candidates []string
Context *reviewtransaction.GateContext
// Detail preserves the exact typed cause of a deterministic mismatch so
// the denial states what is actually true instead of a generic projection.
Detail string
// DeterministicallyStaleOnly is meaningful only when Kind ==
// ReviewReceiptAmbiguous. It records the ambiguity's COMPOSITION: true
// only when every lineage contributing to it classified into a
// deterministically-typed stale bucket (scope-changed, delivery-shape, or
// target-resolution) rather than an undecidable one (assessment-unknown
// or scope-diagnostics-unavailable) or a genuinely competing exact match
// (len(exact) > 1, which never sets this field). organic-dx Phase 3c: the
// gate asks exactly one question -- does an approved receipt cover
// exactly these candidate bytes? A stale receipt must INFORM, never
// DECIDE. When this field is true, discovery has proven no candidate
// governs, so the residual ambiguity is only about which stale lineage to
// name in diagnostics -- it never has a delivery consequence, in either
// mode. A false value (the default) means the gate genuinely cannot pick
// -- present-tense competing authority, or an assessment that could not
// even be completed.
//
// That false value keeps failing closed while reviews are ON, where
// answering requires naming one governing receipt. It no longer decides
// whether the gate BLOCKS while reviews are off: a switched-off system has
// no implications, and declining to govern requires choosing nothing. What
// it decides there is whether the reported disabled/unmanaged result must
// additionally SAY the gate could not decide -- see
// reviewDiscoveryLeftTheGateUndecided.
//
// A bool field was chosen over a distinct ReviewReceiptDiscoveryKind
// because Kind is wire-facing (JSON "code", docs continuation table,
// Phase 4's narration registry); splitting it would ripple through all
// three surfaces for a distinction that has no separate wire behavior of
// its own -- it only feeds one internal classification decision. This
// field is package-internal bookkeeping, never serialized.
DeterministicallyStaleOnly bool
}
func (*ReviewReceiptDiscoveryError) Error ¶
func (err *ReviewReceiptDiscoveryError) Error() string
type ReviewReceiptDiscoveryKind ¶
type ReviewReceiptDiscoveryKind string
const ( ReviewReceiptMissing ReviewReceiptDiscoveryKind = "receipt_missing" ReviewReceiptScopeChanged ReviewReceiptDiscoveryKind = "receipt_scope_changed" ReviewReceiptAmbiguous ReviewReceiptDiscoveryKind = "receipt_ambiguous" ReviewAuthorityCorrupted ReviewReceiptDiscoveryKind = "authority_corrupted" // ReviewReceiptTargetUnresolvable names a deterministic target-resolution // failure (issue-1832): the repository has no upstream to derive a // publication boundary from. It is not authority damage, so it shares the // unmanaged-while-disabled classification with a missing, scope-changed, // or unrelated receipt. ReviewReceiptTargetUnresolvable ReviewReceiptDiscoveryKind = "target_unresolvable" // ReviewGateRemoteFetchRequired (issue #3342) names the one assessment // failure class the local repository resolves by itself: every unknown // assessment failed because the advertised publication tip is not in the // local object store. The authority store is healthy; `git fetch // <remote>` followed by the identical gate resolves it. The gate stays // denied (fail-closed), but the denial is retry-safe, never maintainer // escalation. ReviewGateRemoteFetchRequired ReviewReceiptDiscoveryKind = "remote_fetch_required" // ReviewAuthorityInventoryBusy (issue #3342) names transient shared-store // coordination instead of damage: the shared compact store lock is held // by a live concurrent review operation, a store read lost a bounded lock // wait, or the lock file carries readable interrupted-holder residue. The // gate stays denied (fail-closed), but the denial names the lock, its // recorded holder, and the retry continuation, never maintainer // escalation for a condition that clears itself. ReviewAuthorityInventoryBusy ReviewReceiptDiscoveryKind = "inventory_busy" // ReviewAuthorityLockUnverifiable names shared store-lock residue whose // recorded holder is neither flock-held nor verifiably dead on this // host; no event terminates a retry, so it is NOT retry-safe. ReviewAuthorityLockUnverifiable ReviewReceiptDiscoveryKind = "lock_holder_unverifiable" )
type ReviewReclaimResult ¶
type ReviewReclaimResult struct {
Operation string `json:"operation"`
Record reviewtransaction.CompactReclaimRecord `json:"record"`
}
type ReviewRecoverResult ¶
type ReviewRecoverResult struct {
Operation string `json:"operation"`
LineageID string `json:"lineage_id"`
State reviewtransaction.State `json:"state"`
StoreRevision string `json:"store_revision"`
Projection reviewtransaction.Projection `json:"projection"`
TargetIdentity string `json:"target_identity"`
Recovery reviewtransaction.CompactRecoveryProvenance `json:"recovery"`
}
type ReviewRepairDispositionExecution ¶
type ReviewRepairDispositionExecution struct {
Schema string `json:"schema"`
Status string `json:"status"`
LineageID string `json:"lineage_id"`
PlanDigest string `json:"plan_digest"`
AuthorityInventoryRevision string `json:"authority_inventory_revision"`
AnomalyClass string `json:"anomaly_class"`
AuthorizationSHA256 string `json:"authorization_sha256"`
}
ReviewRepairDispositionExecution is the safe, path-free projection of a committed leaf authority disposition quarantine (mirrors reviewtransaction.AuthorityDispositionProof; never carries SourcePath or QuarantinePath).
type ReviewRepairDispositionProviderInputs ¶
type ReviewRepairDispositionProviderInputs struct {
PlanDigest string `json:"plan_digest"`
AuthorityInventoryRevision string `json:"authority_inventory_revision"`
SeedLineageID string `json:"seed_lineage_id,omitempty"`
SeedExpectedRevision string `json:"seed_expected_revision,omitempty"`
}
ReviewRepairDispositionProviderInputs is the plan-bound preflight output for Slice S3's leaf authority disposition wiring (tasks.md 3.1): the plan digest and the authority inventory revision it is bound to, plus (Wave 6) the seed's own lineage_id/expected_revision — nothing a maintainer could not already derive read-only through reviewtransaction.DeriveAuthorityDispositionPlanAtRepo (plan.SeedSet[0] / plan.ExpectedRevisions[plan.SeedSet[0]]), and nothing that changes if the maintainer supplies no authorization. The seed identity is additive here (Wave 6): the negotiated `review status --next-transition` route's execute{review.repair} transition needs a concrete lineage/revision binding, matching every other "review.repair" execute transition's shape (rdd-closure-disposition-execution / "Reachable Through the Negotiated Transition Route").
type ReviewRepairMode ¶
type ReviewRepairMode string
const ( ReviewRepairModePreflight ReviewRepairMode = "preflight" ReviewRepairModeExecute ReviewRepairMode = "execute" )
type ReviewRepairProviderInputs ¶
type ReviewRepairProviderInputs struct {
Class reviewtransaction.AuthorityRepairClass `json:"class"`
LineageID string `json:"lineage_id"`
ExpectedRevision string `json:"expected_revision"`
Cause reviewtransaction.AuthorityRepairCause `json:"cause"`
Disposition reviewtransaction.AuthorityRepairDisposition `json:"disposition"`
RepositoryBinding string `json:"repository_binding"`
AuthorizationSchema string `json:"authorization_schema"`
}
type ReviewRepairResult ¶
type ReviewRepairResult struct {
Schema string `json:"schema"`
Contract string `json:"contract"`
Operation string `json:"operation"`
Mode ReviewRepairMode `json:"mode"`
Assessment reviewtransaction.AuthorityRepairAssessment `json:"assessment"`
// Continuation is populated only for a truncated preflight, and is then
// exactly reviewRepairTruncatedContinuation.
Continuation string `json:"continuation,omitempty"`
ProviderInputs *ReviewRepairProviderInputs `json:"provider_inputs,omitempty"`
RequiredInputs []string `json:"required_inputs"`
Execution *reviewtransaction.ClassifiedAuthorityRepairExecution `json:"execution,omitempty"`
DispositionProviderInputs *ReviewRepairDispositionProviderInputs `json:"disposition_provider_inputs,omitempty"`
DispositionSelectors []reviewtransaction.AuthorityDispositionSelector `json:"disposition_selectors,omitempty"`
DispositionExecution *ReviewRepairDispositionExecution `json:"disposition_execution,omitempty"`
}
func (ReviewRepairResult) Validate ¶
func (result ReviewRepairResult) Validate() error
type ReviewRepositoryContextReference ¶
type ReviewRepositoryContextReference struct {
Capability string `json:"capability"`
Handle string `json:"handle"`
Revision string `json:"revision"`
TargetIdentity string `json:"target_identity"`
}
ReviewRepositoryContextReference is the path-free provider context that a capture transition can carry across process cwd boundaries.
type ReviewResultReopenResult ¶
type ReviewResultReopenResult struct {
Schema string `json:"schema"`
Operation string `json:"operation"`
Prepared bool `json:"prepared"`
Plan *reviewtransaction.CompactResultReopenPlan `json:"plan,omitempty"`
Record *reviewtransaction.CompactResultReopenRecord `json:"record,omitempty"`
}
type ReviewResumeResult ¶
type ReviewResumeResult struct {
Schema string `json:"schema"`
Operation string `json:"operation"`
Target reviewtransaction.Snapshot `json:"target"`
Transaction reviewtransaction.Transaction `json:"transaction"`
StoreAuthority string `json:"store_authority"`
StoreRevision string `json:"store_revision"`
GenesisRevision string `json:"genesis_revision"`
ChainIdentity string `json:"chain_identity"`
}
type ReviewStopContinuation ¶
type ReviewStopContinuation struct {
Operation string `json:"operation"`
Command string `json:"command"`
Agent string `json:"agent,omitempty"`
StaleAssets []string `json:"stale_assets,omitempty"`
Detail string `json:"detail,omitempty"`
}
ReviewStopContinuation names the one literally runnable follow-up a stop that has one can carry, so no caller has to recover it from prose. Two operations use it: `sync`, which resolves a managed_assets_outdated refusal without abandoning the frozen candidate, and `abandon`, the release a correction_context_budget_exceeded stop requires. Command is the runnable command line, bound to the same runtime agent the blocked operation was asked for. When this process can identify its executable, the token is anchored to that binary (#4434). The final bare `gentle-ai` compatibility fallback is not an exact executable identity and may resolve through PATH. StaleAssets carries the stale recorded digest when it is known. Detail is set only where the command is a preparatory step rather than the whole operation, and then it says plainly what running it produces.
type ReviewStoreResetResult ¶
type ReviewStoreResetResult struct {
Schema string `json:"schema"`
Operation string `json:"operation"`
Report reviewtransaction.StoreResetReport `json:"report"`
}
ReviewStoreResetResult is the command's machine-readable output.
type ReviewTargetStatusAuthority ¶
type ReviewTargetStatusAuthority struct {
Version reviewtransaction.AuthorityVersion `json:"version"`
LineageID string `json:"lineage_id"`
State reviewtransaction.State `json:"state"`
Generation int `json:"generation"`
Revision string `json:"revision"`
CapturePhaseRevision string `json:"-"`
}
type ReviewTargetStatusFrozen ¶
type ReviewTargetStatusFrozen struct {
Tier reviewtransaction.RiskLevel `json:"tier"`
OriginalChangedLines int `json:"original_changed_lines"`
CorrectionBudget int `json:"correction_budget"`
// ChangedPathManifestSHA256 is the digest of the frozen candidate's
// changed-path manifest, re-derived from the repository at STATUS time.
// Per-lens capture inputs carry no manifest any more, so each subject's
// digest is bound to this one value instead of to an inlined copy.
ChangedPathManifestSHA256 string `json:"changed_path_manifest_sha256,omitempty"`
}
type ReviewTargetStatusProjection ¶
type ReviewTargetStatusProjection struct {
Schema string `json:"schema"`
Kind reviewtransaction.TargetKind `json:"kind"`
Projection reviewtransaction.Projection `json:"projection"`
BaseTree string `json:"base_tree"`
InitialReviewTree string `json:"initial_review_tree"`
CurrentCandidateTree string `json:"current_candidate_tree"`
PathsDigest string `json:"paths_digest"`
Paths []string `json:"paths"`
IntendedUntracked []string `json:"intended_untracked"`
IntendedUntrackedProof string `json:"intended_untracked_proof"`
InitialSnapshotIdentity string `json:"initial_snapshot_identity"`
CurrentSnapshotIdentity string `json:"current_snapshot_identity"`
}
func (ReviewTargetStatusProjection) Validate ¶
func (projection ReviewTargetStatusProjection) Validate() error
type ReviewTargetStatusResult ¶
type ReviewTargetStatusResult struct {
Schema string `json:"schema"`
Contract string `json:"contract"`
Operation string `json:"operation"`
Applicability reviewtransaction.TargetApplicability `json:"applicability"`
Authority *ReviewTargetStatusAuthority `json:"authority,omitempty"`
Action reviewtransaction.TargetStatusAction `json:"action"`
// ActionDisposition names the provider recovery class accepted by the
// selected action. Recovery remains target-scoped and independent from
// terminal capture closure.
ActionDisposition reviewtransaction.RecoveryDisposition `json:"action_disposition,omitempty"`
Replayability reviewtransaction.Replayability `json:"replayability"`
Frozen *ReviewTargetStatusFrozen `json:"frozen,omitempty"`
TargetIdentity string `json:"target_identity"`
AuthorityTargetIdentity string `json:"authority_target_identity,omitempty"`
Projection ReviewTargetStatusProjection `json:"projection"`
// EligibleUntrackedInventory is the canonical digest
// intendedUntrackedScopeForTarget already computes over the live
// workspace's eligible untracked population, published unconditionally
// on every projection that inspects untracked files (issue #4040): a
// refusal that names this STATUS as its recovery route always yields a
// usable value. The `staged` projection does not inspect untracked
// files, so it leaves this at its zero value and `omitempty` drops the
// key entirely — absence means "not applicable", not "checked, found
// none". This is a top-level fact about what the live workspace could
// have included; it lives outside Projection (a record of the frozen
// candidate) because ReviewTargetStatusProjection serializes through the
// shared, multi-version projection.schema.json.
EligibleUntrackedInventory string `json:"eligible_untracked_inventory,omitempty"`
Repair reviewtransaction.AuthorityRepairAssessment `json:"repair"`
// Disposition is Wave 6's negotiated-route provider preview (rdd-closure-
// disposition-execution / "Reachable Through the Negotiated Transition
// Route"): populated only when Repair is not eligible but a closed
// closure disposition plan derives and admits. It carries the same two
// fields `review repair --preflight` already publishes for this route
// (ReviewRepairDispositionProviderInputs) — nothing a maintainer could
// not already derive read-only, and nothing that changes without a real
// authorization.
Disposition *ReviewRepairDispositionProviderInputs `json:"disposition,omitempty"`
Candidates []string `json:"candidates"`
Eligibility *ReviewActionEligibility `json:"eligibility,omitempty"`
Forecast *ReviewForecast `json:"forecast,omitempty"`
NextTransition *ReviewNextTransition `json:"next_transition,omitempty"`
Escalation *reviewtransaction.CompactEscalationEvidence `json:"escalation,omitempty"`
RepositoryContext *ReviewRepositoryContextReference `json:"repository_context,omitempty"`
ValidationRequest *reviewtransaction.TargetedValidationRequest `json:"validation_request,omitempty"`
// contains filtered or unexported fields
}
func (ReviewTargetStatusResult) Validate ¶
func (result ReviewTargetStatusResult) Validate() error
type ReviewTraceOutcome ¶
type ReviewTraceOutcome struct {
// RequestedPath is a redacted identity of the --trace value, the same
// way this surface avoids ever publishing a raw filesystem path.
RequestedPath string `json:"requested_path,omitempty"`
Persisted bool `json:"persisted"`
// ErrorClass distinguishes mkdir/open/write/fsync/close failures; empty
// when Persisted is true.
ErrorClass string `json:"error_class,omitempty"`
CommittedRevision string `json:"committed_revision,omitempty"`
// EventIdentity lets a caller confirm a later retry describes the same
// event, without trusting free-form text.
EventIdentity string `json:"event_identity,omitempty"`
// Retry is present only when Persisted is false.
Retry string `json:"retry,omitempty"`
}
ReviewTraceOutcome reports what happened to an explicitly requested --trace diagnostic entry after its authority mutation already committed (issue #1854). It is absent entirely unless --trace was requested, and its presence or content never changes whether the mutation itself committed.
type ReviewTransitionArgument ¶
type ReviewTransitionArgument struct {
Name string `json:"name"`
Value string `json:"value"`
// Token is the exact, literally executable argv token for this argument
// (e.g. "--captured-results=true"). It is populated wherever the argument
// really is argv: on ReviewTransitionExecution.Arguments, on the
// Arguments of a ReviewTransitionInput whose CaptureOperation names an
// operation this product performs (see reviewNativeCaptureVerb), and on
// the SelectorArguments of a reviewing START status continuation, whose
// rows are byte-identical copies of already-tokenized argument rows
// (issue #3894). It stays empty on Preconditions, which are assertions
// rather than argv, on the normalized selector echoes older transitions
// carry, and on the Arguments of an "external.*" capture operation,
// which are values to hand to whoever performs it somewhere this product
// does not run. Name/Value stay byte-identical so existing consumers of
// those two fields never move.
Token string `json:"token,omitempty"`
}
type ReviewTransitionArtifact ¶
type ReviewTransitionArtifact struct {
Schema string `json:"schema"`
Capability string `json:"capability"`
SHA256 string `json:"sha256"`
LineageID string `json:"lineage_id"`
TargetIdentity string `json:"target_identity"`
Lens string `json:"lens"`
SelectedOrder int `json:"selected_order"`
SubjectHash string `json:"subject_hash"`
AdmissionDecision reviewtransaction.ArtifactAdmissionDecision `json:"admission_decision"`
}
ReviewTransitionArtifact deliberately excludes the provider-owned path. The native closure path discovers immutable captured bytes itself.
type ReviewTransitionBinding ¶
type ReviewTransitionBinding struct {
LineageID string `json:"lineage_id,omitempty"`
Revision string `json:"revision,omitempty"`
TargetIdentity string `json:"target_identity"`
RepositoryContext string `json:"repository_context,omitempty"`
// RepositoryRoot is rendered as the --cwd token beside the repository
// context and never serialized into the binding object. The context handle
// is a digest over this repository and the binding above, so the capture
// command has to be told which repository to verify it against.
RepositoryRoot string `json:"-"`
}
type ReviewTransitionCollection ¶
type ReviewTransitionCollection struct {
Inputs []ReviewTransitionInput `json:"inputs"`
}
type ReviewTransitionExecution ¶
type ReviewTransitionExecution struct {
Operation string `json:"operation"`
// Command is the complete, literally runnable command line for this
// transition, e.g. "gentle-ai review start --contract=... --target=...".
// Operation alone is a dotted logical name, so a caller had to already know
// that "review.start" means "gentle-ai review start" before it could run
// anything. Operation, Arguments and their Tokens stay byte-identical, so
// existing consumers never move.
Command string `json:"command,omitempty"`
Arguments []ReviewTransitionArgument `json:"arguments"`
SelectorArguments *[]ReviewTransitionArgument `json:"selector_arguments,omitempty"`
Preconditions []ReviewTransitionArgument `json:"preconditions"`
Binding ReviewTransitionBinding `json:"binding"`
Artifacts []ReviewTransitionArtifact `json:"artifacts,omitempty"`
}
type ReviewTransitionInput ¶
type ReviewTransitionInput struct {
Name string `json:"name"`
Schema string `json:"schema"`
CaptureOperation string `json:"capture_operation"`
Arguments []ReviewTransitionArgument `json:"arguments"`
ProviderTask *ReviewProviderTask `json:"provider_task,omitempty"`
Submission *ReviewTransitionSubmission `json:"submission,omitempty"`
ArtifactSubject *reviewtransaction.ArtifactSubject `json:"artifact_subject,omitempty"`
CandidateDiff *reviewtransaction.FrozenCandidateDiff `json:"candidate_diff,omitempty"`
BaseTree string `json:"base_tree,omitempty"`
CandidateTree string `json:"candidate_tree,omitempty"`
ChangedPathManifest *[]reviewtransaction.ChangedPathManifestEntry `json:"changed_path_manifest,omitempty"`
ValidationRequest *reviewtransaction.TargetedValidationRequest `json:"validation_request,omitempty"`
}
type ReviewTransitionSubmission ¶
type ReviewTransitionSubmission struct {
OperationToken string `json:"operation_token"`
ArgumentTokens []string `json:"argument_tokens"`
Value *ReviewTransitionSubmissionValue `json:"value,omitempty"`
Values []ReviewTransitionSubmissionValue `json:"values,omitempty"`
}
ReviewTransitionSubmission is the provider-owned argv template. Consumers substitute only the declared Value or Values slots.
func (ReviewTransitionSubmission) Validate ¶
func (submission ReviewTransitionSubmission) Validate() error
type ReviewTransitionSubmissionValue ¶
type ReviewTransitionSubmissionValue struct {
Slot string `json:"slot"`
Domain string `json:"domain"`
Schema string `json:"schema,omitempty"`
Minimum int `json:"minimum,omitempty"`
Maximum int `json:"maximum,omitempty"`
AllowedValues []string `json:"allowed_values,omitempty"`
SubstitutionLocation int `json:"substitution_location"`
}
type ReviewUnachievableLensSlot ¶
type ReviewUnachievableLensSlot struct {
Lens string `json:"lens"`
SelectedOrder int `json:"selected_order"`
SubjectHash string `json:"subject_hash"`
Reason string `json:"reason"`
Detail string `json:"detail,omitempty"`
Withdraw ReviewUnachievableLensWithdraw `json:"withdraw"`
}
ReviewUnachievableLensSlot names one selected lens slot a host declared unachievable, carrying the exact command a restarted orchestrator needs to retract that declaration -- even one that never saw, or has since lost, the original collect offer that carried this SubjectHash -- so the withdraw binding is always recoverable from the stop itself.
type ReviewUnachievableLensWithdraw ¶
type ReviewUnachievableLensWithdraw struct {
Operation string `json:"operation"`
Command string `json:"command"`
Arguments []ReviewTransitionArgument `json:"arguments"`
Binding ReviewTransitionBinding `json:"binding"`
}
ReviewUnachievableLensWithdraw is the complete, literally runnable `review capture-unachievable ... --withdraw=true` command for one declared slot. It deliberately does not reuse ReviewTransitionExecution: that type's Preconditions field has no omitempty and always renders (even as an empty list), and its shipped v2 schema enumerates only the handful of operations (start/status/recover/repair/validate) that already carry preconditions and selector semantics this withdraw command has neither of. A narrower, self-contained shape keeps this addition decoupled from that broader, tightly pinned contract.
type ReviewValidateResult ¶
type ReviewValidateResult struct {
Schema string `json:"schema"`
Result reviewtransaction.GateResult `json:"result"`
Allowed bool `json:"allowed"`
Action string `json:"action"`
Reason string `json:"reason"`
Context reviewtransaction.GateContext `json:"context"`
// Delivery names what governs delivery when the answer is not the receipt
// itself. It is an additive, omitted-by-default extension of
// gentle-ai.review-gate-result/v1: every projection that already shipped
// keeps its exact field set, and only a candidate that is unmanaged by the
// user's own choice carries the extra token. It never carries an approval.
Delivery reviewtransaction.RDDDelivery `json:"delivery,omitempty"`
// Relation and Next are Wave 5 (Gate Cutover) Slice 3's additive wire
// projection of NativeGateEvaluation's own new fields (gate.go): omitted
// by default, so every existing consumer's exact field set is unchanged,
// and populated only where attachGateVerdictRelation (compact_gate.go)
// could classify the denial this slice -- currently the "changed"
// relation only (see that function's own doc comment for why the rest
// is not wired yet).
Relation reviewtransaction.CandidateRelation `json:"relation,omitempty"`
Next *reviewtransaction.GateNextStep `json:"next,omitempty"`
}
type ReviewerResultPayloadError ¶
ReviewerResultPayloadError is returned when a raw reviewer result payload is structurally invalid before JSON decoding is attempted. Code is machine-readable: "empty_result" for empty/whitespace-only payloads and "nested_envelope" for payloads that still contain an XML task envelope.
func (*ReviewerResultPayloadError) Error ¶
func (e *ReviewerResultPayloadError) Error() string
type ShellInstallSelection ¶
type ShellInstallSelection struct {
Request shellinstaller.UserInstallRequest
Confirmed bool
}
ShellInstallSelection is the reviewed request, not execution authority. The worker still validates the physical selection and its confirmation.
func ShellInstallOutcome ¶
func ShellInstallOutcome(model tea.Model) (ShellInstallSelection, error)
ShellInstallOutcome reads the final selector without performing installation.
type SyncFlags ¶
type SyncFlags struct {
Agents []string
Skills []string
SDDMode string
StrictTDD bool
IncludePermissions bool
IncludeTheme bool
Scope string
DryRun bool
OpenCodeBackgroundSubagents string
OpenCodeBackgroundSubagentsSet bool
PiBackgroundSubagents string
PiBackgroundSubagentsSet bool
// contains filtered or unexported fields
}
SyncFlags holds parsed CLI flags for the sync command.
func ParseSyncFlags ¶
ParseSyncFlags parses the CLI arguments for the sync subcommand.
type SyncResult ¶
type SyncResult struct {
Agents []model.AgentID
Selection model.Selection
Plan pipeline.StagePlan
Execution pipeline.ExecutionResult
Verify verify.Report
DryRun bool
// NoOp is true when no managed asset changes were needed:
// either no agents were discovered/provided, or all managed assets
// were already current (idempotent re-sync).
NoOp bool
// FilesChanged is the number of deduplicated managed file paths
// whose persisted content or existence changed during this sync.
// Zero means all assets were already current.
FilesChanged int
// ChangedFiles lists deduplicated absolute paths of managed files
// processed during this sync. Paths appear once even when multiple
// components touch the same file. It is nil when no files changed.
ChangedFiles []string
ManualActions []string
// DryRunStops lists refusals a dry-run found that the real sync would stop
// on before writing anything.
DryRunStops []string
Background OpenCodeBackgroundResolution
BackgroundPolicyEnabled bool
PiBackground PiBackgroundResolution
// SkippedAgents lists selected agents this sync deliberately did not
// touch, each with the actionable reason. A non-empty list makes the sync
// partial: the returned error is a *PartialSyncError.
SkippedAgents []SyncSkippedAgent
}
SyncResult holds the outcome of a sync execution.
func RunSync ¶
func RunSync(args []string) (SyncResult, error)
RunSync is the top-level sync entry point, parallel to RunInstall. It parses CLI flags, discovers agents, builds the selection, then delegates to RunSyncWithSelection for the actual sync execution.
func RunSyncWithSelection ¶
func RunSyncWithSelection(homeDir string, selection model.Selection) (SyncResult, error)
RunSyncWithSelection is the programmatic entry point for sync. It skips flag parsing and agent discovery — the caller provides the homeDir and a fully-built Selection (agents + components + options). This is the function the TUI calls directly to avoid CLI flag parsing.
func RunSyncWithSelectionScope ¶
func RunSyncWithSelectionScope(homeDir string, selection model.Selection, scope InstallScope) (SyncResult, error)
RunSyncWithSelectionScope is the scope-aware programmatic entry point for sync. ScopeGlobal preserves the historical behavior; ScopeWorkspace runs the issue-#1074 workspace-only refresh with zero global mutation.
type SyncSkippedAgent ¶
type SyncSkippedAgent struct {
Agent model.AgentID
// Part names the skipped part of the agent; empty means the whole agent.
Part string
Reason string
}
SyncSkippedAgent is one selected agent that a partial sync left untouched.
func (SyncSkippedAgent) Action ¶
func (s SyncSkippedAgent) Action() string
Action is the operator-facing line for a skipped agent, reused by the CLI error and the TUI manual actions.
type TelemetryPolicyResult ¶
type TelemetryPolicyResult struct {
Schema string `json:"schema"`
Operation string `json:"operation"`
Enabled bool `json:"enabled"`
Source telemetry.Source `json:"source"`
Reason string `json:"reason"`
}
TelemetryPolicyResult contains only bounded collection-policy metadata. It is not a send decision: rate limits, backoff, and build identity are checked by the sender, not by this read-only collection query.
type TelemetryStatusResult ¶
type TelemetryStatusResult struct {
Schema string `json:"schema"`
Operation string `json:"operation"`
Enabled bool `json:"enabled"`
Source string `json:"source"`
InstallID string `json:"install_id"`
NoticeShown bool `json:"notice_shown"`
Endpoint string `json:"endpoint"`
LastInstallSentAt string `json:"last_install_sent_at,omitempty"`
LastHeartbeatAt string `json:"last_heartbeat_at,omitempty"`
LastFailureAt string `json:"last_failure_at,omitempty"`
BackoffUntil string `json:"backoff_until,omitempty"`
Counters telemetry.Counters `json:"counters"`
}
TelemetryStatusResult is the typed answer for status, enable, and disable: each reports the operation it ran and the resulting effective state.
type TelemetryTriggerResult ¶
type TelemetryTriggerResult struct {
Schema string `json:"schema"`
Decision string `json:"decision"`
Source string `json:"source"`
}
TelemetryTriggerResult is what `telemetry trigger` reports: the exhaustive classification of what Opportunistic just did, never an error.
type UninstallFlags ¶
func ParseUninstallFlags ¶
func ParseUninstallFlags(args []string) (UninstallFlags, error)
type UninstallOpenCodePluginFlags ¶
type UninstallOpenCodePluginFlags struct {
PluginID model.OpenCodeCommunityPluginID
Yes bool
}
UninstallOpenCodePluginFlags are the parsed flags for the `teicos uninstall opencode-plugin <id>` sub-command.
func ParseUninstallOpenCodePluginFlags ¶
func ParseUninstallOpenCodePluginFlags(args []string) (UninstallOpenCodePluginFlags, error)
ParseUninstallOpenCodePluginFlags parses the args after "uninstall opencode-plugin". Expects exactly one positional argument (the plugin id). --yes/-y are hoisted before flag.Parse because Go's flag package stops scanning flags at the first non-flag argument, and the natural usage `teicos uninstall opencode-plugin <id> --yes` puts the flag after the id.
Source Files
¶
- channel.go
- codegraph.go
- codex_home.go
- codex_service_tier.go
- compatibility_skills.go
- compatibility_transaction_nonwindows.go
- compatibility_writer_unix.go
- doctor.go
- doctor_tool_probe.go
- doctor_tool_probe_unix.go
- dryrun.go
- help_request.go
- install.go
- install_state_lock.go
- opencode_background.go
- opencode_sdk_manager.go
- pi_background.go
- pi_exclude.go
- pi_mcp_diagnostic.go
- restore.go
- review.go
- review_abandon.go
- review_artifact.go
- review_assess.go
- review_asset_provenance.go
- review_audit_actor.go
- review_capabilities.go
- review_capture_unachievable.go
- review_consent_contract.go
- review_correction_context.go
- review_correction_plan_capture.go
- review_defect_report.go
- review_escalation.go
- review_facade.go
- review_facade_input_unix.go
- review_facade_new_lineage.go
- review_incident.go
- review_inspect_authority.go
- review_inspect_candidate.go
- review_intended_untracked.go
- review_kill_switch.go
- review_last_event_closure.go
- review_lens_context.go
- review_mode.go
- review_narration.go
- review_next_transition.go
- review_opencode_transport.go
- review_operation_contract.go
- review_printed_command.go
- review_provider.go
- review_provider_correction.go
- review_provider_role_capture.go
- review_provider_roles.go
- review_provider_runtime.go
- review_reclaim.go
- review_rejected_result.go
- review_reopen_results.go
- review_repair.go
- review_request_context.go
- review_schema.go
- review_self_recovery_reason.go
- review_start_contract.go
- review_start_lineage.go
- review_start_preflight.go
- review_start_target_evidence.go
- review_status_contract.go
- review_stop_hook.go
- review_store_reset.go
- review_transport_admission.go
- review_transport_capability.go
- run.go
- scope.go
- shell_install.go
- shell_install_embedded.go
- shell_install_help_other.go
- shell_install_model_other.go
- shell_install_platform_other.go
- shell_install_view.go
- sync.go
- telemetry.go
- telemetry_runtime.go
- uninstall.go
- uninstall_opencode_plugin.go
- validate.go