( ctx context.Context, _ toolspkg.Scope, req toolspkg.CallRequest, )
| 2064 | } |
| 2065 | |
| 2066 | func (n *daemonNativeTools) agentHeartbeatStatus( |
| 2067 | ctx context.Context, |
| 2068 | _ toolspkg.Scope, |
| 2069 | req toolspkg.CallRequest, |
| 2070 | ) (toolspkg.ToolResult, error) { |
| 2071 | var input agentHeartbeatStatusInput |
| 2072 | if err := decodeNativeInput(req, &input); err != nil { |
| 2073 | return toolspkg.ToolResult{}, err |
| 2074 | } |
| 2075 | target, err := n.authoredAgentTarget(ctx, req.ToolID, input.WorkspaceID, input.AgentName) |
| 2076 | if err != nil { |
| 2077 | return toolspkg.ToolResult{}, err |
| 2078 | } |
| 2079 | sessionID := strings.TrimSpace(input.SessionID) |
| 2080 | if sessionID != "" { |
| 2081 | if _, err := n.nativeSessionInWorkspace(ctx, req.ToolID, target.workspaceID, sessionID); err != nil { |
| 2082 | return toolspkg.ToolResult{}, err |
| 2083 | } |
| 2084 | } |
| 2085 | status, err := n.deps.HeartbeatStatus.Status(ctx, heartbeat.StatusRequest{ |
| 2086 | Target: target.heartbeatAuthoringTarget(), |
| 2087 | SessionID: sessionID, |
| 2088 | IncludeSessionHealth: input.IncludeSessionHealth, |
| 2089 | }) |
| 2090 | if err != nil { |
| 2091 | return toolspkg.ToolResult{}, err |
| 2092 | } |
| 2093 | payload, err := contract.HeartbeatStatusResponseFromResult(&status) |
| 2094 | if err != nil { |
| 2095 | return toolspkg.ToolResult{}, err |
| 2096 | } |
| 2097 | if input.IncludeRecentWakeEvents && n.deps.WakeEvents != nil { |
| 2098 | events, err := n.deps.WakeEvents.ListHeartbeatWakeEvents(ctx, heartbeat.WakeEventListQuery{ |
| 2099 | WorkspaceID: target.workspaceID, |
| 2100 | AgentName: target.agentName, |
| 2101 | SessionID: sessionID, |
| 2102 | Limit: defaultNativeWakeEventLimit, |
| 2103 | }) |
| 2104 | if err != nil { |
| 2105 | return toolspkg.ToolResult{}, err |
| 2106 | } |
| 2107 | payload.WakeEvents = make([]contract.HeartbeatWakeEventPayload, 0, len(events)) |
| 2108 | for _, event := range events { |
| 2109 | converted, convertErr := contract.HeartbeatWakeEventPayloadFromDomain(event) |
| 2110 | if convertErr != nil { |
| 2111 | return toolspkg.ToolResult{}, convertErr |
| 2112 | } |
| 2113 | payload.WakeEvents = append(payload.WakeEvents, converted) |
| 2114 | } |
| 2115 | } |
| 2116 | if err := contract.ValidateAuthoredContextRedacted(payload); err != nil { |
| 2117 | return toolspkg.ToolResult{}, err |
| 2118 | } |
| 2119 | return structuredResult(map[string]any{"heartbeat": payload}, string(payload.ValidationStatus)) |
| 2120 | } |
| 2121 | |
| 2122 | func (n *daemonNativeTools) agentHeartbeatWake( |
| 2123 | ctx context.Context, |
nothing calls this directly
no test coverage detected