MCPcopy Create free account
hub / github.com/compozy/agh / taskBlockFromRequest

Method taskBlockFromRequest

internal/task/block_service.go:451–496  ·  view source on GitHub ↗
(req BlockRequest, actor ActorContext)

Source from the content-addressed store, hash-verified

449}
450
451func (m *Service) taskBlockFromRequest(req BlockRequest, actor ActorContext) (TaskBlock, string, string, error) {
452 now := m.now().UTC()
453 taskID := strings.TrimSpace(req.TaskID)
454 if taskID == "" {
455 return TaskBlock{}, "", "", fmt.Errorf("%w: task_block.task_id is required", ErrValidation)
456 }
457 kind := req.Kind.Normalize()
458 if err := kind.Validate("task_block.kind"); err != nil {
459 return TaskBlock{}, "", "", err
460 }
461 reason := strings.TrimSpace(req.Reason)
462 if reason == "" {
463 return TaskBlock{}, "", "", fmt.Errorf("%w: task_block.reason is required", ErrValidation)
464 }
465 if err := rejectTaskSecretText("task_block.reason", reason); err != nil {
466 return TaskBlock{}, "", "", err
467 }
468 details := cloneRawJSON(req.Details)
469 if err := rejectTaskSecretJSON("task_block.details", details); err != nil {
470 return TaskBlock{}, "", "", err
471 }
472 expiresAt := req.ExpiresAt
473 if !expiresAt.IsZero() {
474 expiresAt = expiresAt.UTC()
475 if kind != BlockKindTransient {
476 return TaskBlock{}, "", "", fmt.Errorf(
477 "%w: task_block.expires_at is only valid for %q blocks",
478 ErrValidation,
479 BlockKindTransient,
480 )
481 }
482 }
483 runID := strings.TrimSpace(req.RunID)
484 claimToken := strings.TrimSpace(req.ClaimToken)
485
486 return TaskBlock{
487 ID: m.newID(taskBlockIDPrefix),
488 TaskID: taskID,
489 Kind: kind,
490 Reason: reason,
491 Details: details,
492 CreatedBy: ActorIdentity{Kind: actor.Actor.Kind.Normalize(), Ref: strings.TrimSpace(actor.Actor.Ref)},
493 CreatedAt: now,
494 ExpiresAt: expiresAt,
495 }, runID, claimToken, nil
496}
497
498func rejectTaskSecretText(path string, value string) error {
499 if redactTaskSecretText(value) != value {

Callers 1

BlockTaskMethod · 0.95

Calls 7

rejectTaskSecretTextFunction · 0.85
rejectTaskSecretJSONFunction · 0.85
cloneRawJSONFunction · 0.70
ValidateMethod · 0.65
nowMethod · 0.45
NormalizeMethod · 0.45
IsZeroMethod · 0.45

Tested by

no test coverage detected