RecordMemoryWriteRejected emits an audit event for denied direct write attempts.
(ctx context.Context, event WriteRejectedEvent)
| 422 | |
| 423 | // RecordMemoryWriteRejected emits an audit event for denied direct write attempts. |
| 424 | func (s *Store) RecordMemoryWriteRejected(ctx context.Context, event WriteRejectedEvent) error { |
| 425 | if ctx == nil { |
| 426 | return errors.New("memory: write rejection context is required") |
| 427 | } |
| 428 | if s == nil || s.catalog == nil { |
| 429 | return nil |
| 430 | } |
| 431 | metadata := map[string]string{ |
| 432 | decisionMetadataReasonKey: strings.TrimSpace(event.Reason), |
| 433 | "tool_id": strings.TrimSpace(event.ToolID), |
| 434 | } |
| 435 | payload, err := json.Marshal(metadata) |
| 436 | if err != nil { |
| 437 | return fmt.Errorf("memory: encode write rejection event metadata: %w", err) |
| 438 | } |
| 439 | return s.catalog.withCatalogWriteTx(ctx, "memory write rejection event insert", func(tx *storepkg.WriteTx) error { |
| 440 | if _, err := tx.ExecContext( |
| 441 | ctx, |
| 442 | `INSERT INTO memory_events ( |
| 443 | op, scope, agent_name, agent_tier, workspace_id, session_id, |
| 444 | actor_kind, decision_id, target_id, metadata, ts_ms |
| 445 | ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, |
| 446 | memoryEventWriteRejected, |
| 447 | nullStringForEmpty(event.Scope.Normalize()), |
| 448 | nullStringForEmpty(event.AgentName), |
| 449 | nullStringForEmpty(string(event.AgentTier.Normalize())), |
| 450 | nullStringForEmpty(event.WorkspaceID), |
| 451 | nullStringForEmpty(event.SessionID), |
| 452 | nullStringForEmpty(event.ActorKind), |
| 453 | nil, |
| 454 | nullStringForEmpty(event.TargetID), |
| 455 | string(payload), |
| 456 | timeToUnixMillis(time.Now().UTC()), |
| 457 | ); err != nil { |
| 458 | return fmt.Errorf("memory: insert write rejection event: %w", err) |
| 459 | } |
| 460 | return nil |
| 461 | }) |
| 462 | } |
| 463 | |
| 464 | func (d storedDecision) record() DecisionRecord { |
| 465 | return DecisionRecord{ |
no test coverage detected