gemini

package
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 30, 2026 License: Apache-2.0 Imports: 5 Imported by: 0

Documentation

Overview

Package gemini exposes typed public Gemini hook inputs, responses, and registrars for the production-ready Gemini Go runtime lane, including the current 9-hook runtime surface.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AfterAgentEvent

type AfterAgentEvent = internalgemini.AfterAgentInput

AfterAgentEvent is the Gemini AfterAgent hook input.

type AfterAgentResponse

type AfterAgentResponse struct {
	CommonResponse
	ClearContext bool
}

AfterAgentResponse is the AfterAgent response type.

func AfterAgentAllow

func AfterAgentAllow() *AfterAgentResponse

AfterAgentAllow returns an explicit allow decision for AfterAgent.

func AfterAgentClearContext

func AfterAgentClearContext() *AfterAgentResponse

AfterAgentClearContext clears LLM conversation memory while preserving the UI display.

func AfterAgentContinue

func AfterAgentContinue() *AfterAgentResponse

AfterAgentContinue returns an explicit no-op AfterAgent response.

func AfterAgentDeny

func AfterAgentDeny(reason string) *AfterAgentResponse

AfterAgentDeny rejects the response and requests a retry.

func AfterAgentStop

func AfterAgentStop(reason string) *AfterAgentResponse

AfterAgentStop stops the session without triggering a retry.

type AfterModelEvent

type AfterModelEvent = internalgemini.AfterModelInput

AfterModelEvent is the Gemini AfterModel hook input.

type AfterModelResponse

type AfterModelResponse struct {
	CommonResponse
	LLMResponse json.RawMessage
}

AfterModelResponse is the AfterModel response type.

func AfterModelContinue

func AfterModelContinue() *AfterModelResponse

AfterModelContinue returns an explicit no-op AfterModel response.

func AfterModelDeny

func AfterModelDeny(reason string) *AfterModelResponse

AfterModelDeny blocks the model result with a deny decision.

func AfterModelReplaceResponse

func AfterModelReplaceResponse(response json.RawMessage) *AfterModelResponse

AfterModelReplaceResponse continues with a rewritten llm_response payload.

func AfterModelReplaceResponseValue

func AfterModelReplaceResponseValue(v any) (*AfterModelResponse, error)

AfterModelReplaceResponseValue marshals a replacement llm_response object for Gemini AfterModel hooks.

func AfterModelStop

func AfterModelStop(reason string) *AfterModelResponse

AfterModelStop stops the entire Gemini agent loop immediately.

type AfterToolEvent

type AfterToolEvent = internalgemini.AfterToolInput

AfterToolEvent is the Gemini AfterTool hook input.

type AfterToolResponse

type AfterToolResponse struct {
	CommonResponse
	AdditionalContext   string
	TailToolCallRequest *TailToolCallRequest
}

AfterToolResponse is the AfterTool response type.

func AfterToolAddContext

func AfterToolAddContext(context string) *AfterToolResponse

AfterToolAddContext appends additional text to the tool result sent back to the agent.

func AfterToolAllow

func AfterToolAllow() *AfterToolResponse

AfterToolAllow returns an explicit allow decision for AfterTool.

func AfterToolContinue

func AfterToolContinue() *AfterToolResponse

AfterToolContinue returns an explicit no-op AfterTool response.

func AfterToolDeny

func AfterToolDeny(reason string) *AfterToolResponse

AfterToolDeny blocks the follow-up path with a deny decision.

func AfterToolStop

func AfterToolStop(reason string) *AfterToolResponse

AfterToolStop stops the entire Gemini agent loop after tool execution.

func AfterToolTailCall

func AfterToolTailCall(name string, args json.RawMessage) *AfterToolResponse

AfterToolTailCall requests an immediate follow-up tool invocation.

func AfterToolTailCallValue

func AfterToolTailCallValue(name string, args any) (*AfterToolResponse, error)

AfterToolTailCallValue marshals a typed follow-up tool request. Gemini expects tailToolCallRequest.args to be a JSON object, so non-object values return an error.

type BeforeAgentEvent

type BeforeAgentEvent = internalgemini.BeforeAgentInput

BeforeAgentEvent is the Gemini BeforeAgent hook input.

type BeforeAgentResponse

type BeforeAgentResponse struct {
	CommonResponse
	AdditionalContext string
}

BeforeAgentResponse is the BeforeAgent response type.

func BeforeAgentAddContext

func BeforeAgentAddContext(context string) *BeforeAgentResponse

BeforeAgentAddContext appends additional context to the current turn prompt.

func BeforeAgentAllow

func BeforeAgentAllow() *BeforeAgentResponse

BeforeAgentAllow returns an explicit allow decision for BeforeAgent.

func BeforeAgentContinue

func BeforeAgentContinue() *BeforeAgentResponse

BeforeAgentContinue returns an explicit no-op BeforeAgent response.

func BeforeAgentDeny

func BeforeAgentDeny(reason string) *BeforeAgentResponse

BeforeAgentDeny blocks the turn and discards the user's prompt from history.

func BeforeAgentStop

func BeforeAgentStop(reason string) *BeforeAgentResponse

BeforeAgentStop aborts the current turn but keeps the user's prompt in history, matching Gemini's continue=false semantics.

type BeforeModelEvent

type BeforeModelEvent = internalgemini.BeforeModelInput

BeforeModelEvent is the Gemini BeforeModel hook input.

type BeforeModelResponse

type BeforeModelResponse struct {
	CommonResponse
	LLMRequest  json.RawMessage
	LLMResponse json.RawMessage
}

BeforeModelResponse is the BeforeModel response type.

func BeforeModelContinue

func BeforeModelContinue() *BeforeModelResponse

BeforeModelContinue returns an explicit no-op BeforeModel response.

func BeforeModelDeny

func BeforeModelDeny(reason string) *BeforeModelResponse

BeforeModelDeny blocks the LLM request with a deny decision.

func BeforeModelOverrideRequest

func BeforeModelOverrideRequest(request json.RawMessage) *BeforeModelResponse

BeforeModelOverrideRequest continues with a rewritten llm_request payload.

func BeforeModelOverrideRequestValue

func BeforeModelOverrideRequestValue(v any) (*BeforeModelResponse, error)

BeforeModelOverrideRequestValue marshals a replacement llm_request object for Gemini BeforeModel hooks.

func BeforeModelSyntheticResponse

func BeforeModelSyntheticResponse(response json.RawMessage) *BeforeModelResponse

BeforeModelSyntheticResponse short-circuits the LLM request with a synthetic llm_response payload.

func BeforeModelSyntheticResponseValue

func BeforeModelSyntheticResponseValue(v any) (*BeforeModelResponse, error)

BeforeModelSyntheticResponseValue marshals a synthetic llm_response object for Gemini BeforeModel hooks.

type BeforeToolEvent

type BeforeToolEvent = internalgemini.BeforeToolInput

BeforeToolEvent is the Gemini BeforeTool hook input.

type BeforeToolResponse

type BeforeToolResponse struct {
	CommonResponse
	ToolInput json.RawMessage
}

BeforeToolResponse is the BeforeTool response type.

func BeforeToolAllow

func BeforeToolAllow() *BeforeToolResponse

BeforeToolAllow returns an explicit allow decision for BeforeTool.

func BeforeToolContinue

func BeforeToolContinue() *BeforeToolResponse

BeforeToolContinue returns an explicit no-op BeforeTool response.

func BeforeToolDeny

func BeforeToolDeny(reason string) *BeforeToolResponse

BeforeToolDeny blocks the tool invocation with a deny decision.

func BeforeToolRewriteInput

func BeforeToolRewriteInput(input json.RawMessage) *BeforeToolResponse

BeforeToolRewriteInput continues with a rewritten tool_input payload.

func BeforeToolRewriteInputValue

func BeforeToolRewriteInputValue(v any) (*BeforeToolResponse, error)

BeforeToolRewriteInputValue marshals a replacement tool_input object for Gemini BeforeTool hooks. Gemini expects hookSpecificOutput.tool_input to be a JSON object, so non-object values return an error.

func BeforeToolStop

func BeforeToolStop(reason string) *BeforeToolResponse

BeforeToolStop stops the entire Gemini agent loop before the tool executes.

type BeforeToolSelectionEvent

type BeforeToolSelectionEvent = internalgemini.BeforeToolSelectionInput

BeforeToolSelectionEvent is the Gemini BeforeToolSelection hook input.

type BeforeToolSelectionResponse

type BeforeToolSelectionResponse struct {
	SuppressOutput       bool
	Mode                 ToolMode
	AllowedFunctionNames []string
}

BeforeToolSelectionResponse is the Gemini BeforeToolSelection response type.

func BeforeToolSelectionAllowOnly

func BeforeToolSelectionAllowOnly(allowedFunctionNames ...string) *BeforeToolSelectionResponse

BeforeToolSelectionAllowOnly restricts Gemini tool selection to the provided allowlist by using ANY mode, which is the vendor-accepted shape for allowedFunctionNames.

func BeforeToolSelectionConfig

func BeforeToolSelectionConfig(mode ToolMode, allowedFunctionNames ...string) *BeforeToolSelectionResponse

BeforeToolSelectionConfig applies a tool selection mode. Gemini currently accepts allowedFunctionNames only together with ANY mode.

func BeforeToolSelectionContinue

func BeforeToolSelectionContinue() *BeforeToolSelectionResponse

BeforeToolSelectionContinue returns an explicit no-op BeforeToolSelection response.

func BeforeToolSelectionDisableAll

func BeforeToolSelectionDisableAll() *BeforeToolSelectionResponse

BeforeToolSelectionDisableAll disables all tools for the current decision step.

func BeforeToolSelectionForceAny

func BeforeToolSelectionForceAny(allowedFunctionNames ...string) *BeforeToolSelectionResponse

BeforeToolSelectionForceAny requires Gemini to pick at least one tool and optionally narrows the candidate set with an allowlist.

func BeforeToolSelectionForceAuto

func BeforeToolSelectionForceAuto(allowedFunctionNames ...string) *BeforeToolSelectionResponse

BeforeToolSelectionForceAuto explicitly restores AUTO tool mode. Gemini does not currently accept allowedFunctionNames outside ANY mode, so any optional allowlist arguments are ignored.

func BeforeToolSelectionQuiet

func BeforeToolSelectionQuiet() *BeforeToolSelectionResponse

BeforeToolSelectionQuiet suppresses Gemini's internal hook metadata for the current tool-selection step without changing toolConfig.

type CommonResponse

type CommonResponse struct {
	Continue       *bool
	SuppressOutput bool
	StopReason     string
	Decision       string
	Reason         string
	SystemMessage  string
}

CommonResponse contains fields shared by Gemini's synchronous hook envelope.

type Registrar

type Registrar struct {
	// contains filtered or unexported fields
}

Registrar registers public Gemini hook handlers on a root SDK app.

func NewRegistrar

func NewRegistrar(backend runtime.RegistrarBackend) *Registrar

NewRegistrar builds a Gemini registrar on top of the shared runtime backend.

func (*Registrar) OnAfterAgent

func (r *Registrar) OnAfterAgent(fn func(*AfterAgentEvent) *AfterAgentResponse)

OnAfterAgent registers a handler for the gemini AfterAgent.

func (*Registrar) OnAfterModel

func (r *Registrar) OnAfterModel(fn func(*AfterModelEvent) *AfterModelResponse)

OnAfterModel registers a handler for the gemini AfterModel.

func (*Registrar) OnAfterTool

func (r *Registrar) OnAfterTool(fn func(*AfterToolEvent) *AfterToolResponse)

OnAfterTool registers a handler for the gemini AfterTool.

func (*Registrar) OnBeforeAgent

func (r *Registrar) OnBeforeAgent(fn func(*BeforeAgentEvent) *BeforeAgentResponse)

OnBeforeAgent registers a handler for the gemini BeforeAgent.

func (*Registrar) OnBeforeModel

func (r *Registrar) OnBeforeModel(fn func(*BeforeModelEvent) *BeforeModelResponse)

OnBeforeModel registers a handler for the gemini BeforeModel.

func (*Registrar) OnBeforeTool

func (r *Registrar) OnBeforeTool(fn func(*BeforeToolEvent) *BeforeToolResponse)

OnBeforeTool registers a handler for the gemini BeforeTool.

func (*Registrar) OnBeforeToolSelection

func (r *Registrar) OnBeforeToolSelection(fn func(*BeforeToolSelectionEvent) *BeforeToolSelectionResponse)

OnBeforeToolSelection registers a handler for the gemini BeforeToolSelection.

func (*Registrar) OnSessionEnd

func (r *Registrar) OnSessionEnd(fn func(*SessionEndEvent) *SessionEndResponse)

OnSessionEnd registers a handler for the gemini SessionEnd.

func (*Registrar) OnSessionStart

func (r *Registrar) OnSessionStart(fn func(*SessionStartEvent) *SessionStartResponse)

OnSessionStart registers a handler for the gemini SessionStart.

type SessionEndEvent

type SessionEndEvent = internalgemini.SessionEndInput

SessionEndEvent is the Gemini SessionEnd hook input.

type SessionEndResponse

type SessionEndResponse = CommonResponse

SessionEndResponse is the SessionEnd response type.

func SessionEndContinue

func SessionEndContinue() *SessionEndResponse

SessionEndContinue returns an explicit no-op SessionEnd response.

func SessionEndMessage

func SessionEndMessage(message string) *SessionEndResponse

SessionEndMessage emits a systemMessage during SessionEnd.

type SessionStartEvent

type SessionStartEvent = internalgemini.SessionStartInput

SessionStartEvent is the Gemini SessionStart hook input.

type SessionStartResponse

type SessionStartResponse struct {
	CommonResponse
	AdditionalContext string
}

SessionStartResponse is the SessionStart response type.

func SessionStartAddContext

func SessionStartAddContext(context string) *SessionStartResponse

SessionStartAddContext appends additional context during SessionStart.

func SessionStartContinue

func SessionStartContinue() *SessionStartResponse

SessionStartContinue returns an explicit no-op SessionStart response.

func SessionStartMessage

func SessionStartMessage(message string) *SessionStartResponse

SessionStartMessage emits a systemMessage during SessionStart.

type TailToolCallRequest

type TailToolCallRequest struct {
	Name string
	Args json.RawMessage
}

TailToolCallRequest requests an immediate follow-up tool execution from an AfterTool hook.

type ToolMode

type ToolMode string

ToolMode configures Gemini BeforeToolSelection tool routing.

const (
	ToolModeAuto ToolMode = "AUTO"
	ToolModeAny  ToolMode = "ANY"
	ToolModeNone ToolMode = "NONE"
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL