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

Method BlockTask

internal/task/block_service.go:23–89  ·  view source on GitHub ↗

BlockTask creates a runtime-declared task block and parks the active run when supplied.

(ctx context.Context, req BlockRequest, actor ActorContext)

Source from the content-addressed store, hash-verified

21
22// BlockTask creates a runtime-declared task block and parks the active run when supplied.
23func (m *Service) BlockTask(ctx context.Context, req BlockRequest, actor ActorContext) (TaskBlock, error) {
24 if err := requireWriteAuthority(actor); err != nil {
25 return TaskBlock{}, err
26 }
27 block, runID, claimToken, err := m.taskBlockFromRequest(req, actor)
28 if err != nil {
29 return TaskBlock{}, err
30 }
31 if runID != "" || claimToken != "" {
32 if runID == "" {
33 return TaskBlock{}, fmt.Errorf("%w: task_block.run_id is required when claim_token is set", ErrValidation)
34 }
35 if claimToken == "" {
36 return TaskBlock{}, fmt.Errorf("%w: task_block.claim_token is required when run_id is set", ErrValidation)
37 }
38 result, blockErr := m.store.BlockTaskAndReleaseRun(ctx, BlockTaskAndReleaseRunMutation{
39 Block: block,
40 RunID: runID,
41 ClaimToken: claimToken,
42 Now: block.CreatedAt,
43 RecurrenceLimit: m.blockRecurrenceLimit,
44 })
45 if blockErr != nil {
46 return TaskBlock{}, blockErr
47 }
48 reconciled, reconcileErr := m.reconcileTaskCascade(ctx, result.Block.TaskID)
49 if reconcileErr != nil {
50 return TaskBlock{}, reconcileErr
51 }
52 m.recordTaskBlockCreated(ctx, result.Block, reconciled, actor, &result)
53 m.recordReleasedRunEvent(ctx, &result, reconciled, actor)
54 m.dispatchTaskBlocked(ctx, result.Block, reconciled, actor, &result)
55 m.dispatchBlockedWake(ctx, reconciled, result.Block, actor, &result)
56 m.recordTaskNeedsAttention(
57 ctx,
58 result.Block,
59 result.Recurrence,
60 result.EscalatedTask,
61 reconciled,
62 actor,
63 &result,
64 )
65 m.dispatchTaskRunReleased(ctx, result.Run, reconciled, actor, result.PreviousRun, result.ReleaseReason)
66 return result.Block, nil
67 }
68
69 if err := m.requireAgentSessionTaskLease(ctx, block.TaskID, actor); err != nil {
70 return TaskBlock{}, err
71 }
72
73 created, err := m.store.CreateTaskBlock(ctx, CreateTaskBlockMutation{
74 Block: block,
75 RecurrenceLimit: m.blockRecurrenceLimit,
76 })
77 if err != nil {
78 return TaskBlock{}, err
79 }
80 reconciled, err := m.reconcileTaskCascade(ctx, created.Block.TaskID)

Callers

nothing calls this directly

Calls 12

taskBlockFromRequestMethod · 0.95
reconcileTaskCascadeMethod · 0.95
dispatchTaskBlockedMethod · 0.95
dispatchBlockedWakeMethod · 0.95
requireWriteAuthorityFunction · 0.85
CreateTaskBlockMethod · 0.65

Tested by

no test coverage detected