@knpkv/herdr-work 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +99 -1
  2. package/dist/agent-binding.d.ts +4 -0
  3. package/dist/agent-binding.d.ts.map +1 -0
  4. package/dist/agent-binding.js +26 -0
  5. package/dist/agent-binding.js.map +1 -0
  6. package/dist/errors.d.ts +141 -0
  7. package/dist/errors.d.ts.map +1 -1
  8. package/dist/errors.js +97 -0
  9. package/dist/errors.js.map +1 -1
  10. package/dist/goal-family.d.ts +4 -0
  11. package/dist/goal-family.d.ts.map +1 -0
  12. package/dist/goal-family.js +32 -0
  13. package/dist/goal-family.js.map +1 -0
  14. package/dist/index.d.ts +4 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +4 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/internal/agent-binding-admission.d.ts +15 -0
  19. package/dist/internal/agent-binding-admission.d.ts.map +1 -0
  20. package/dist/internal/agent-binding-admission.js +92 -0
  21. package/dist/internal/agent-binding-admission.js.map +1 -0
  22. package/dist/internal/agent-binding-readback.d.ts +55 -0
  23. package/dist/internal/agent-binding-readback.d.ts.map +1 -0
  24. package/dist/internal/agent-binding-readback.js +124 -0
  25. package/dist/internal/agent-binding-readback.js.map +1 -0
  26. package/dist/internal/coordinator-authority.d.ts +62 -0
  27. package/dist/internal/coordinator-authority.d.ts.map +1 -0
  28. package/dist/internal/coordinator-authority.js +214 -0
  29. package/dist/internal/coordinator-authority.js.map +1 -0
  30. package/dist/internal/decision-handoff-migration.d.ts +126 -0
  31. package/dist/internal/decision-handoff-migration.d.ts.map +1 -0
  32. package/dist/internal/decision-handoff-migration.js +51 -0
  33. package/dist/internal/decision-handoff-migration.js.map +1 -0
  34. package/dist/internal/history-validation.d.ts +5 -0
  35. package/dist/internal/history-validation.d.ts.map +1 -0
  36. package/dist/internal/history-validation.js +33 -0
  37. package/dist/internal/history-validation.js.map +1 -0
  38. package/dist/model.d.ts +3109 -51
  39. package/dist/model.d.ts.map +1 -1
  40. package/dist/model.js +340 -11
  41. package/dist/model.js.map +1 -1
  42. package/dist/navigation.d.ts +17 -0
  43. package/dist/navigation.d.ts.map +1 -0
  44. package/dist/navigation.js +62 -0
  45. package/dist/navigation.js.map +1 -0
  46. package/dist/projection.d.ts +660 -0
  47. package/dist/projection.d.ts.map +1 -1
  48. package/dist/projection.js +65 -25
  49. package/dist/projection.js.map +1 -1
  50. package/dist/service.d.ts +1886 -3
  51. package/dist/service.d.ts.map +1 -1
  52. package/dist/service.js +138 -5
  53. package/dist/service.js.map +1 -1
  54. package/dist/sql.d.ts +30 -0
  55. package/dist/sql.d.ts.map +1 -0
  56. package/dist/sql.js +1454 -0
  57. package/dist/sql.js.map +1 -0
  58. package/dist/store.d.ts +1072 -4
  59. package/dist/store.d.ts.map +1 -1
  60. package/dist/store.js +3328 -43
  61. package/dist/store.js.map +1 -1
  62. package/dist/view.d.ts +9 -2
  63. package/dist/view.d.ts.map +1 -1
  64. package/dist/view.js +156 -8
  65. package/dist/view.js.map +1 -1
  66. package/package.json +25 -13
  67. package/src/styles.css +91 -17
package/dist/service.d.ts CHANGED
@@ -1,13 +1,1236 @@
1
- import { Effect } from "effect";
2
- import type { WorkCheckpointConflictError, WorkProjectionError, WorkStoreError } from "./errors.js";
3
- import type { WorkGoalCheckpoint, WorkSnapshots } from "./model.js";
1
+ import { Effect, Option } from "effect";
2
+ import { WorkPullRequestLinkError, WorkRecoveryContextError } from "./errors.js";
3
+ import type { WorkAdmissionConflictError, WorkAgentBindingAuthorityError, WorkAgentBindingConflictError, WorkCheckpointConflictError, WorkCoordinatorHandoffConflictError, WorkDecisionAuthorityConflictError, WorkDecisionHandoffConflictError, WorkDecisionRevisionConflictError, WorkGoalAgentTargetConflictError, WorkGoalBindingRequiresAgentError, WorkGoalOwnerMismatchError, WorkGoalReassignmentConflictError, WorkGoalRevisionConflictError, WorkLaneClaimConflictError, WorkLaneGoalConflictError, WorkLaneOperationConflictError, WorkProjectionError, WorkStoreError, WorkTransactionConflictError } from "./errors.js";
4
+ import type { WorkAdmissionPreflight, WorkAdmissionTarget, WorkAgentBinding, WorkAgentBindingRequest, WorkDecisionHandoff, WorkExistingGoalRecovery, WorkExistingOwnerReconciliation, WorkGoalCheckpoint, WorkGoalReassigned, WorkGoalReassignment, WorkLaneClaim, WorkLaneClaimed, WorkProspectiveAdmission, WorkRecoveryContext, WorkRecoveryPreflight, WorkRecoveryTarget, WorkSnapshots } from "./model.js";
5
+ import { WorkPullRequestLink, WorkPullRequestLinkRequest } from "./model.js";
4
6
  import type { WorkStoreService } from "./store.js";
5
7
  export interface WorkService {
8
+ /** Exact durable checkpoint facts, not recovery eligibility or approval authority. */
9
+ readonly recoveryContext: (goalId: string) => Effect.Effect<WorkRecoveryContext, WorkRecoveryContextError | WorkProjectionError | WorkStoreError>;
10
+ readonly recoveryPreflight: (target: WorkRecoveryTarget) => Effect.Effect<WorkRecoveryPreflight, WorkProjectionError | WorkStoreError>;
11
+ readonly recoverExistingGoal: (request: WorkExistingGoalRecovery) => Effect.Effect<WorkPullRequestLink, WorkAdmissionConflictError | WorkProjectionError | WorkStoreError>;
12
+ /** Approval-bound owner transfer; replaying the same approval job returns the prior result. */
13
+ readonly reassign: (request: WorkGoalReassignment) => Effect.Effect<WorkGoalReassigned, WorkGoalAgentTargetConflictError | WorkGoalBindingRequiresAgentError | WorkGoalOwnerMismatchError | WorkGoalReassignmentConflictError | WorkGoalRevisionConflictError | WorkProjectionError | WorkStoreError>;
14
+ readonly admissionPreflight: (target: WorkAdmissionTarget) => Effect.Effect<WorkAdmissionPreflight, WorkProjectionError | WorkStoreError>;
15
+ readonly admitExistingOwner: (request: WorkProspectiveAdmission) => Effect.Effect<WorkPullRequestLink, WorkAdmissionConflictError | WorkProjectionError | WorkStoreError>;
16
+ readonly inspectPullRequest: (request: WorkPullRequestLinkRequest) => Effect.Effect<WorkPullRequestLink, WorkPullRequestLinkError | WorkProjectionError | WorkStoreError>;
17
+ readonly reconcileExistingOwner: (request: WorkExistingOwnerReconciliation) => Effect.Effect<WorkLaneClaimed, WorkPullRequestLinkError | WorkLaneClaimConflictError | WorkLaneGoalConflictError | WorkLaneOperationConflictError | WorkProjectionError | WorkStoreError>;
18
+ readonly bindAgent: (request: WorkAgentBindingRequest) => Effect.Effect<WorkAgentBinding, WorkAgentBindingAuthorityError | WorkAgentBindingConflictError | WorkProjectionError | WorkStoreError>;
19
+ readonly agentBinding: (dispatchRequestId: string) => Effect.Effect<Option.Option<WorkAgentBinding>, WorkStoreError>;
6
20
  readonly record: (event: WorkGoalCheckpoint) => Effect.Effect<WorkGoalCheckpoint, WorkCheckpointConflictError | WorkProjectionError | WorkStoreError>;
21
+ /**
22
+ * Projects history at an explicit timestamp, or at the later of the current
23
+ * clock and the coordinator-owned logical timestamp when none is given.
24
+ */
7
25
  readonly snapshots: (observedAt?: number) => Effect.Effect<WorkSnapshots, WorkStoreError | WorkProjectionError>;
26
+ readonly recordMany: (transactionId: string, events: ReadonlyArray<WorkGoalCheckpoint>) => Effect.Effect<ReadonlyArray<WorkGoalCheckpoint>, WorkCheckpointConflictError | WorkProjectionError | WorkTransactionConflictError | WorkStoreError>;
27
+ readonly claim: (claim: WorkLaneClaim) => Effect.Effect<WorkLaneClaimed, WorkLaneClaimConflictError | WorkLaneGoalConflictError | WorkLaneOperationConflictError | WorkPullRequestLinkError | WorkProjectionError | WorkStoreError>;
28
+ readonly currentClaim: (laneId: string) => Effect.Effect<Option.Option<WorkLaneClaimed>, WorkStoreError>;
29
+ readonly activeGoalClaim: (goalId: string) => Effect.Effect<Option.Option<WorkLaneClaimed>, WorkStoreError>;
30
+ readonly handoff: (handoff: WorkDecisionHandoff) => Effect.Effect<WorkDecisionHandoff, WorkCoordinatorHandoffConflictError | WorkDecisionAuthorityConflictError | WorkDecisionHandoffConflictError | WorkDecisionRevisionConflictError | WorkProjectionError | WorkStoreError>;
31
+ readonly coordinatorHandoff: (sessionId: string) => Effect.Effect<Option.Option<WorkDecisionHandoff>, WorkStoreError>;
32
+ readonly decisions: (laneId: string) => Effect.Effect<ReadonlyArray<WorkDecisionHandoff>, WorkStoreError>;
8
33
  }
9
34
  export declare const makeWorkService: (store: WorkStoreService) => Effect.Effect<{
35
+ recoveryContext: (goalId: string) => Effect.Effect<{
36
+ goalId: string;
37
+ expectedGoalEventId: string;
38
+ expectedGoalUpdatedAt: number;
39
+ }, WorkProjectionError | WorkRecoveryContextError | WorkStoreError, never>;
40
+ recoveryPreflight: (target: WorkRecoveryTarget) => Effect.Effect<{
41
+ readonly _tag: "conflict";
42
+ readonly target: {
43
+ readonly repository: string;
44
+ readonly pullRequest: number;
45
+ readonly reviewUrl: string;
46
+ readonly goalId: string;
47
+ readonly laneId: string;
48
+ readonly head: string;
49
+ readonly baseHead: string;
50
+ readonly owner: {
51
+ readonly id: string;
52
+ readonly name: string;
53
+ };
54
+ readonly sessionId: string;
55
+ readonly expectedWork: string;
56
+ readonly worker: {
57
+ readonly host: string;
58
+ readonly agentId: string;
59
+ readonly name: string;
60
+ readonly paneId: string;
61
+ readonly relationship?: {
62
+ readonly parentAgentId: string;
63
+ readonly relation: "delegated" | "pair" | "review";
64
+ };
65
+ };
66
+ readonly worktree: string;
67
+ readonly branch: string;
68
+ readonly expectedGoalEventId: string;
69
+ readonly expectedGoalUpdatedAt: number;
70
+ };
71
+ readonly reason: string;
72
+ } | {
73
+ readonly _tag: "existing";
74
+ readonly target: {
75
+ readonly repository: string;
76
+ readonly pullRequest: number;
77
+ readonly reviewUrl: string;
78
+ readonly goalId: string;
79
+ readonly laneId: string;
80
+ readonly head: string;
81
+ readonly baseHead: string;
82
+ readonly owner: {
83
+ readonly id: string;
84
+ readonly name: string;
85
+ };
86
+ readonly sessionId: string;
87
+ readonly expectedWork: string;
88
+ readonly worker: {
89
+ readonly host: string;
90
+ readonly agentId: string;
91
+ readonly name: string;
92
+ readonly paneId: string;
93
+ readonly relationship?: {
94
+ readonly parentAgentId: string;
95
+ readonly relation: "delegated" | "pair" | "review";
96
+ };
97
+ };
98
+ readonly worktree: string;
99
+ readonly branch: string;
100
+ readonly expectedGoalEventId: string;
101
+ readonly expectedGoalUpdatedAt: number;
102
+ };
103
+ readonly link: {
104
+ readonly request: {
105
+ readonly repository: string;
106
+ readonly pullRequest: number;
107
+ readonly goalId: string;
108
+ readonly laneId: string;
109
+ };
110
+ readonly goalEventId: string;
111
+ readonly goal: {
112
+ readonly id: string;
113
+ readonly title: string;
114
+ readonly summary: string;
115
+ readonly detail: string;
116
+ readonly state: "blocked" | "completed" | "deployed" | "planned" | "review" | "working";
117
+ readonly owner: {
118
+ readonly id: string;
119
+ readonly name: string;
120
+ };
121
+ readonly repository: {
122
+ readonly repository: string;
123
+ readonly branch: string;
124
+ };
125
+ readonly spend: {
126
+ readonly currency: string;
127
+ readonly minorUnits: number;
128
+ } | null;
129
+ readonly delivery: "deployed" | "local" | "merged" | "pull_request" | "review";
130
+ readonly blocker: {
131
+ readonly summary: string;
132
+ readonly since: number;
133
+ } | null;
134
+ readonly connectTarget: {
135
+ readonly host: string;
136
+ readonly agentId: string;
137
+ readonly url: string;
138
+ } | null;
139
+ readonly goalFamily?: {
140
+ readonly canonicalGoalId: string;
141
+ readonly role: "canonical" | "superseded";
142
+ };
143
+ readonly agentHierarchy?: {
144
+ readonly agent: {
145
+ readonly host: string;
146
+ readonly agentId: string;
147
+ readonly name: string;
148
+ readonly paneId: string;
149
+ readonly relationship?: {
150
+ readonly parentAgentId: string;
151
+ readonly relation: "delegated" | "pair" | "review";
152
+ };
153
+ };
154
+ } | null;
155
+ readonly activity?: readonly {
156
+ readonly id: string;
157
+ readonly kind: "blocker" | "note" | "request" | "review" | "shipment" | "status";
158
+ readonly summary: string;
159
+ readonly occurredAt: number;
160
+ }[];
161
+ readonly blockers?: readonly {
162
+ readonly summary: string;
163
+ readonly since: number;
164
+ }[];
165
+ readonly requests?: readonly {
166
+ readonly id: string;
167
+ readonly summary: string;
168
+ readonly state: "approved" | "fulfilled" | "open" | "rejected";
169
+ readonly requestedAt: number;
170
+ readonly approvalTarget: {
171
+ readonly host: string;
172
+ readonly jobId: string;
173
+ readonly url: string;
174
+ } | null;
175
+ }[];
176
+ readonly review?: {
177
+ readonly state: "approved" | "changes_requested" | "not_requested" | "requested";
178
+ readonly summary: string | null;
179
+ readonly updatedAt: number;
180
+ readonly url: string | null;
181
+ } | null;
182
+ readonly approvalTarget?: {
183
+ readonly host: string;
184
+ readonly jobId: string;
185
+ readonly url: string;
186
+ } | null;
187
+ readonly createdAt: number;
188
+ readonly updatedAt: number;
189
+ };
190
+ readonly lane: {
191
+ readonly operationId: string;
192
+ readonly goalId: string;
193
+ readonly laneId: string;
194
+ readonly worktree: string;
195
+ readonly branch: string;
196
+ readonly head: string;
197
+ readonly owner: {
198
+ readonly id: string;
199
+ readonly name: string;
200
+ };
201
+ readonly parent: string | null;
202
+ readonly phase: "claim" | "implementation" | "review" | "shipped" | "validation";
203
+ readonly expectedRevision: number;
204
+ readonly reconciliation?: {
205
+ readonly repository: string;
206
+ readonly pullRequest: number;
207
+ readonly expectedHead: string;
208
+ readonly expectedOwner: {
209
+ readonly id: string;
210
+ readonly name: string;
211
+ };
212
+ readonly expectedGoalEventId: string;
213
+ readonly bindingDispatchRequestId: string;
214
+ readonly sessionId: string;
215
+ readonly worker: {
216
+ readonly host: string;
217
+ readonly agentId: string;
218
+ readonly name: string;
219
+ readonly paneId: string;
220
+ readonly relationship?: {
221
+ readonly parentAgentId: string;
222
+ readonly relation: "delegated" | "pair" | "review";
223
+ };
224
+ };
225
+ };
226
+ readonly revision: number;
227
+ };
228
+ readonly binding: {
229
+ readonly version: "herdr.work.agent-binding.v1";
230
+ readonly request: {
231
+ readonly version: "herdr.work.agent-binding-request.v1";
232
+ readonly dispatchRequestId: string;
233
+ readonly laneId: string;
234
+ readonly expectedRevision: number;
235
+ readonly worker: {
236
+ readonly host: string;
237
+ readonly agentId: string;
238
+ readonly name: string;
239
+ readonly paneId: string;
240
+ readonly relationship?: {
241
+ readonly parentAgentId: string;
242
+ readonly relation: "delegated" | "pair" | "review";
243
+ };
244
+ };
245
+ readonly prospectiveAdmission?: {
246
+ readonly sessionId: string;
247
+ readonly workAssignment: string;
248
+ readonly baseHead: string;
249
+ readonly expectedAbsenceToken: string;
250
+ readonly approvalJobId: string;
251
+ readonly approvalActor: string;
252
+ };
253
+ readonly existingGoalRecovery?: {
254
+ readonly sessionId: string;
255
+ readonly workAssignment: string;
256
+ readonly baseHead: string;
257
+ readonly expectedHistoryToken: string;
258
+ readonly expectedGoalEventId: string;
259
+ readonly expectedGoalUpdatedAt: number;
260
+ readonly approvalJobId: string;
261
+ readonly approvalActor: string;
262
+ readonly approvalApprovedBy: string;
263
+ readonly approvalApprovedAt: number;
264
+ readonly approvalHash: string;
265
+ };
266
+ readonly ownerReassignment?: {
267
+ readonly previousDispatchRequestId: string;
268
+ readonly approvalJobId: string;
269
+ readonly approvalActor: string;
270
+ readonly approvalApprovedBy: string;
271
+ readonly approvalApprovedAt: number;
272
+ readonly approvalHash: string;
273
+ };
274
+ };
275
+ readonly lane: {
276
+ readonly operationId: string;
277
+ readonly goalId: string;
278
+ readonly laneId: string;
279
+ readonly worktree: string;
280
+ readonly branch: string;
281
+ readonly head: string;
282
+ readonly owner: {
283
+ readonly id: string;
284
+ readonly name: string;
285
+ };
286
+ readonly parent: string | null;
287
+ readonly phase: "claim" | "implementation" | "review" | "shipped" | "validation";
288
+ readonly expectedRevision: number;
289
+ readonly reconciliation?: {
290
+ readonly repository: string;
291
+ readonly pullRequest: number;
292
+ readonly expectedHead: string;
293
+ readonly expectedOwner: {
294
+ readonly id: string;
295
+ readonly name: string;
296
+ };
297
+ readonly expectedGoalEventId: string;
298
+ readonly bindingDispatchRequestId: string;
299
+ readonly sessionId: string;
300
+ readonly worker: {
301
+ readonly host: string;
302
+ readonly agentId: string;
303
+ readonly name: string;
304
+ readonly paneId: string;
305
+ readonly relationship?: {
306
+ readonly parentAgentId: string;
307
+ readonly relation: "delegated" | "pair" | "review";
308
+ };
309
+ };
310
+ };
311
+ readonly revision: number;
312
+ };
313
+ readonly checkpoint: {
314
+ readonly version: "herdr.work.event.v1";
315
+ readonly eventId: string;
316
+ readonly occurredAt: number;
317
+ readonly goal: {
318
+ readonly id: string;
319
+ readonly title: string;
320
+ readonly summary: string;
321
+ readonly detail: string;
322
+ readonly state: "blocked" | "completed" | "deployed" | "planned" | "review" | "working";
323
+ readonly owner: {
324
+ readonly id: string;
325
+ readonly name: string;
326
+ };
327
+ readonly repository: {
328
+ readonly repository: string;
329
+ readonly branch: string;
330
+ };
331
+ readonly spend: {
332
+ readonly currency: string;
333
+ readonly minorUnits: number;
334
+ } | null;
335
+ readonly delivery: "deployed" | "local" | "merged" | "pull_request" | "review";
336
+ readonly blocker: {
337
+ readonly summary: string;
338
+ readonly since: number;
339
+ } | null;
340
+ readonly connectTarget: {
341
+ readonly host: string;
342
+ readonly agentId: string;
343
+ readonly url: string;
344
+ } | null;
345
+ readonly goalFamily?: {
346
+ readonly canonicalGoalId: string;
347
+ readonly role: "canonical" | "superseded";
348
+ };
349
+ readonly agentHierarchy?: {
350
+ readonly agent: {
351
+ readonly host: string;
352
+ readonly agentId: string;
353
+ readonly name: string;
354
+ readonly paneId: string;
355
+ readonly relationship?: {
356
+ readonly parentAgentId: string;
357
+ readonly relation: "delegated" | "pair" | "review";
358
+ };
359
+ };
360
+ } | null;
361
+ readonly activity?: readonly {
362
+ readonly id: string;
363
+ readonly kind: "blocker" | "note" | "request" | "review" | "shipment" | "status";
364
+ readonly summary: string;
365
+ readonly occurredAt: number;
366
+ }[];
367
+ readonly blockers?: readonly {
368
+ readonly summary: string;
369
+ readonly since: number;
370
+ }[];
371
+ readonly requests?: readonly {
372
+ readonly id: string;
373
+ readonly summary: string;
374
+ readonly state: "approved" | "fulfilled" | "open" | "rejected";
375
+ readonly requestedAt: number;
376
+ readonly approvalTarget: {
377
+ readonly host: string;
378
+ readonly jobId: string;
379
+ readonly url: string;
380
+ } | null;
381
+ }[];
382
+ readonly review?: {
383
+ readonly state: "approved" | "changes_requested" | "not_requested" | "requested";
384
+ readonly summary: string | null;
385
+ readonly updatedAt: number;
386
+ readonly url: string | null;
387
+ } | null;
388
+ readonly approvalTarget?: {
389
+ readonly host: string;
390
+ readonly jobId: string;
391
+ readonly url: string;
392
+ } | null;
393
+ readonly createdAt: number;
394
+ readonly updatedAt: number;
395
+ };
396
+ };
397
+ };
398
+ };
399
+ } | {
400
+ readonly _tag: "recoverable";
401
+ readonly target: {
402
+ readonly repository: string;
403
+ readonly pullRequest: number;
404
+ readonly reviewUrl: string;
405
+ readonly goalId: string;
406
+ readonly laneId: string;
407
+ readonly head: string;
408
+ readonly baseHead: string;
409
+ readonly owner: {
410
+ readonly id: string;
411
+ readonly name: string;
412
+ };
413
+ readonly sessionId: string;
414
+ readonly expectedWork: string;
415
+ readonly worker: {
416
+ readonly host: string;
417
+ readonly agentId: string;
418
+ readonly name: string;
419
+ readonly paneId: string;
420
+ readonly relationship?: {
421
+ readonly parentAgentId: string;
422
+ readonly relation: "delegated" | "pair" | "review";
423
+ };
424
+ };
425
+ readonly worktree: string;
426
+ readonly branch: string;
427
+ readonly expectedGoalEventId: string;
428
+ readonly expectedGoalUpdatedAt: number;
429
+ };
430
+ readonly historyToken: string;
431
+ }, WorkProjectionError | WorkStoreError, never>;
432
+ recoverExistingGoal: (request: {
433
+ readonly kind: "work.recover";
434
+ readonly repository: string;
435
+ readonly pullRequest: number;
436
+ readonly reviewUrl: string;
437
+ readonly goalId: string;
438
+ readonly laneId: string;
439
+ readonly operationId: string;
440
+ readonly expectedGoalEventId: string;
441
+ readonly expectedGoalUpdatedAt: number;
442
+ readonly expectedHistoryToken: string;
443
+ readonly head: string;
444
+ readonly baseHead: string;
445
+ readonly owner: {
446
+ readonly id: string;
447
+ readonly name: string;
448
+ };
449
+ readonly sessionId: string;
450
+ readonly expectedWork: string;
451
+ readonly worker: {
452
+ readonly host: string;
453
+ readonly agentId: string;
454
+ readonly name: string;
455
+ readonly paneId: string;
456
+ readonly relationship?: {
457
+ readonly parentAgentId: string;
458
+ readonly relation: "delegated" | "pair" | "review";
459
+ };
460
+ };
461
+ readonly worktree: string;
462
+ readonly branch: string;
463
+ readonly approvalJobId: string;
464
+ readonly approvalActor: string;
465
+ readonly approvalApprovedBy: string;
466
+ readonly approvalApprovedAt: number;
467
+ readonly approvalHash: string;
468
+ }) => Effect.Effect<WorkPullRequestLink, WorkAdmissionConflictError | WorkProjectionError | WorkStoreError, never>;
469
+ reassign: (request: {
470
+ readonly kind: "work.reassign";
471
+ readonly goalId: string;
472
+ readonly from: {
473
+ readonly id: string;
474
+ readonly name: string;
475
+ };
476
+ readonly to: {
477
+ readonly id: string;
478
+ readonly name: string;
479
+ };
480
+ readonly toAgent: {
481
+ readonly _tag: "clear";
482
+ } | {
483
+ readonly _tag: "keep";
484
+ } | {
485
+ readonly _tag: "set";
486
+ readonly agent: {
487
+ readonly host: string;
488
+ readonly agentId: string;
489
+ readonly name: string;
490
+ readonly paneId: string;
491
+ readonly relationship?: {
492
+ readonly parentAgentId: string;
493
+ readonly relation: "delegated" | "pair" | "review";
494
+ };
495
+ };
496
+ };
497
+ readonly reason: string;
498
+ readonly expectedGoalEventId: string;
499
+ readonly expectedGoalUpdatedAt: number;
500
+ readonly approvalJobId: string;
501
+ readonly approvalActor: string;
502
+ readonly approvalApprovedBy: string;
503
+ readonly approvalApprovedAt: number;
504
+ readonly approvalHash: string;
505
+ }) => Effect.Effect<WorkGoalReassigned, WorkGoalAgentTargetConflictError | WorkGoalBindingRequiresAgentError | WorkGoalOwnerMismatchError | WorkGoalReassignmentConflictError | WorkGoalRevisionConflictError | WorkProjectionError | WorkStoreError, never>;
506
+ admissionPreflight: (target: WorkAdmissionTarget) => Effect.Effect<{
507
+ readonly _tag: "conflict";
508
+ readonly target: {
509
+ readonly repository: string;
510
+ readonly pullRequest: number;
511
+ readonly reviewUrl: string;
512
+ readonly goalId: string;
513
+ readonly laneId: string;
514
+ readonly head: string;
515
+ readonly baseHead: string;
516
+ readonly owner: {
517
+ readonly id: string;
518
+ readonly name: string;
519
+ };
520
+ readonly sessionId: string;
521
+ readonly expectedWork: string;
522
+ readonly worker: {
523
+ readonly host: string;
524
+ readonly agentId: string;
525
+ readonly name: string;
526
+ readonly paneId: string;
527
+ readonly relationship?: {
528
+ readonly parentAgentId: string;
529
+ readonly relation: "delegated" | "pair" | "review";
530
+ };
531
+ };
532
+ readonly worktree: string;
533
+ readonly branch: string;
534
+ };
535
+ readonly reason: string;
536
+ } | {
537
+ readonly _tag: "existing";
538
+ readonly target: {
539
+ readonly repository: string;
540
+ readonly pullRequest: number;
541
+ readonly reviewUrl: string;
542
+ readonly goalId: string;
543
+ readonly laneId: string;
544
+ readonly head: string;
545
+ readonly baseHead: string;
546
+ readonly owner: {
547
+ readonly id: string;
548
+ readonly name: string;
549
+ };
550
+ readonly sessionId: string;
551
+ readonly expectedWork: string;
552
+ readonly worker: {
553
+ readonly host: string;
554
+ readonly agentId: string;
555
+ readonly name: string;
556
+ readonly paneId: string;
557
+ readonly relationship?: {
558
+ readonly parentAgentId: string;
559
+ readonly relation: "delegated" | "pair" | "review";
560
+ };
561
+ };
562
+ readonly worktree: string;
563
+ readonly branch: string;
564
+ };
565
+ readonly link: {
566
+ readonly request: {
567
+ readonly repository: string;
568
+ readonly pullRequest: number;
569
+ readonly goalId: string;
570
+ readonly laneId: string;
571
+ };
572
+ readonly goalEventId: string;
573
+ readonly goal: {
574
+ readonly id: string;
575
+ readonly title: string;
576
+ readonly summary: string;
577
+ readonly detail: string;
578
+ readonly state: "blocked" | "completed" | "deployed" | "planned" | "review" | "working";
579
+ readonly owner: {
580
+ readonly id: string;
581
+ readonly name: string;
582
+ };
583
+ readonly repository: {
584
+ readonly repository: string;
585
+ readonly branch: string;
586
+ };
587
+ readonly spend: {
588
+ readonly currency: string;
589
+ readonly minorUnits: number;
590
+ } | null;
591
+ readonly delivery: "deployed" | "local" | "merged" | "pull_request" | "review";
592
+ readonly blocker: {
593
+ readonly summary: string;
594
+ readonly since: number;
595
+ } | null;
596
+ readonly connectTarget: {
597
+ readonly host: string;
598
+ readonly agentId: string;
599
+ readonly url: string;
600
+ } | null;
601
+ readonly goalFamily?: {
602
+ readonly canonicalGoalId: string;
603
+ readonly role: "canonical" | "superseded";
604
+ };
605
+ readonly agentHierarchy?: {
606
+ readonly agent: {
607
+ readonly host: string;
608
+ readonly agentId: string;
609
+ readonly name: string;
610
+ readonly paneId: string;
611
+ readonly relationship?: {
612
+ readonly parentAgentId: string;
613
+ readonly relation: "delegated" | "pair" | "review";
614
+ };
615
+ };
616
+ } | null;
617
+ readonly activity?: readonly {
618
+ readonly id: string;
619
+ readonly kind: "blocker" | "note" | "request" | "review" | "shipment" | "status";
620
+ readonly summary: string;
621
+ readonly occurredAt: number;
622
+ }[];
623
+ readonly blockers?: readonly {
624
+ readonly summary: string;
625
+ readonly since: number;
626
+ }[];
627
+ readonly requests?: readonly {
628
+ readonly id: string;
629
+ readonly summary: string;
630
+ readonly state: "approved" | "fulfilled" | "open" | "rejected";
631
+ readonly requestedAt: number;
632
+ readonly approvalTarget: {
633
+ readonly host: string;
634
+ readonly jobId: string;
635
+ readonly url: string;
636
+ } | null;
637
+ }[];
638
+ readonly review?: {
639
+ readonly state: "approved" | "changes_requested" | "not_requested" | "requested";
640
+ readonly summary: string | null;
641
+ readonly updatedAt: number;
642
+ readonly url: string | null;
643
+ } | null;
644
+ readonly approvalTarget?: {
645
+ readonly host: string;
646
+ readonly jobId: string;
647
+ readonly url: string;
648
+ } | null;
649
+ readonly createdAt: number;
650
+ readonly updatedAt: number;
651
+ };
652
+ readonly lane: {
653
+ readonly operationId: string;
654
+ readonly goalId: string;
655
+ readonly laneId: string;
656
+ readonly worktree: string;
657
+ readonly branch: string;
658
+ readonly head: string;
659
+ readonly owner: {
660
+ readonly id: string;
661
+ readonly name: string;
662
+ };
663
+ readonly parent: string | null;
664
+ readonly phase: "claim" | "implementation" | "review" | "shipped" | "validation";
665
+ readonly expectedRevision: number;
666
+ readonly reconciliation?: {
667
+ readonly repository: string;
668
+ readonly pullRequest: number;
669
+ readonly expectedHead: string;
670
+ readonly expectedOwner: {
671
+ readonly id: string;
672
+ readonly name: string;
673
+ };
674
+ readonly expectedGoalEventId: string;
675
+ readonly bindingDispatchRequestId: string;
676
+ readonly sessionId: string;
677
+ readonly worker: {
678
+ readonly host: string;
679
+ readonly agentId: string;
680
+ readonly name: string;
681
+ readonly paneId: string;
682
+ readonly relationship?: {
683
+ readonly parentAgentId: string;
684
+ readonly relation: "delegated" | "pair" | "review";
685
+ };
686
+ };
687
+ };
688
+ readonly revision: number;
689
+ };
690
+ readonly binding: {
691
+ readonly version: "herdr.work.agent-binding.v1";
692
+ readonly request: {
693
+ readonly version: "herdr.work.agent-binding-request.v1";
694
+ readonly dispatchRequestId: string;
695
+ readonly laneId: string;
696
+ readonly expectedRevision: number;
697
+ readonly worker: {
698
+ readonly host: string;
699
+ readonly agentId: string;
700
+ readonly name: string;
701
+ readonly paneId: string;
702
+ readonly relationship?: {
703
+ readonly parentAgentId: string;
704
+ readonly relation: "delegated" | "pair" | "review";
705
+ };
706
+ };
707
+ readonly prospectiveAdmission?: {
708
+ readonly sessionId: string;
709
+ readonly workAssignment: string;
710
+ readonly baseHead: string;
711
+ readonly expectedAbsenceToken: string;
712
+ readonly approvalJobId: string;
713
+ readonly approvalActor: string;
714
+ };
715
+ readonly existingGoalRecovery?: {
716
+ readonly sessionId: string;
717
+ readonly workAssignment: string;
718
+ readonly baseHead: string;
719
+ readonly expectedHistoryToken: string;
720
+ readonly expectedGoalEventId: string;
721
+ readonly expectedGoalUpdatedAt: number;
722
+ readonly approvalJobId: string;
723
+ readonly approvalActor: string;
724
+ readonly approvalApprovedBy: string;
725
+ readonly approvalApprovedAt: number;
726
+ readonly approvalHash: string;
727
+ };
728
+ readonly ownerReassignment?: {
729
+ readonly previousDispatchRequestId: string;
730
+ readonly approvalJobId: string;
731
+ readonly approvalActor: string;
732
+ readonly approvalApprovedBy: string;
733
+ readonly approvalApprovedAt: number;
734
+ readonly approvalHash: string;
735
+ };
736
+ };
737
+ readonly lane: {
738
+ readonly operationId: string;
739
+ readonly goalId: string;
740
+ readonly laneId: string;
741
+ readonly worktree: string;
742
+ readonly branch: string;
743
+ readonly head: string;
744
+ readonly owner: {
745
+ readonly id: string;
746
+ readonly name: string;
747
+ };
748
+ readonly parent: string | null;
749
+ readonly phase: "claim" | "implementation" | "review" | "shipped" | "validation";
750
+ readonly expectedRevision: number;
751
+ readonly reconciliation?: {
752
+ readonly repository: string;
753
+ readonly pullRequest: number;
754
+ readonly expectedHead: string;
755
+ readonly expectedOwner: {
756
+ readonly id: string;
757
+ readonly name: string;
758
+ };
759
+ readonly expectedGoalEventId: string;
760
+ readonly bindingDispatchRequestId: string;
761
+ readonly sessionId: string;
762
+ readonly worker: {
763
+ readonly host: string;
764
+ readonly agentId: string;
765
+ readonly name: string;
766
+ readonly paneId: string;
767
+ readonly relationship?: {
768
+ readonly parentAgentId: string;
769
+ readonly relation: "delegated" | "pair" | "review";
770
+ };
771
+ };
772
+ };
773
+ readonly revision: number;
774
+ };
775
+ readonly checkpoint: {
776
+ readonly version: "herdr.work.event.v1";
777
+ readonly eventId: string;
778
+ readonly occurredAt: number;
779
+ readonly goal: {
780
+ readonly id: string;
781
+ readonly title: string;
782
+ readonly summary: string;
783
+ readonly detail: string;
784
+ readonly state: "blocked" | "completed" | "deployed" | "planned" | "review" | "working";
785
+ readonly owner: {
786
+ readonly id: string;
787
+ readonly name: string;
788
+ };
789
+ readonly repository: {
790
+ readonly repository: string;
791
+ readonly branch: string;
792
+ };
793
+ readonly spend: {
794
+ readonly currency: string;
795
+ readonly minorUnits: number;
796
+ } | null;
797
+ readonly delivery: "deployed" | "local" | "merged" | "pull_request" | "review";
798
+ readonly blocker: {
799
+ readonly summary: string;
800
+ readonly since: number;
801
+ } | null;
802
+ readonly connectTarget: {
803
+ readonly host: string;
804
+ readonly agentId: string;
805
+ readonly url: string;
806
+ } | null;
807
+ readonly goalFamily?: {
808
+ readonly canonicalGoalId: string;
809
+ readonly role: "canonical" | "superseded";
810
+ };
811
+ readonly agentHierarchy?: {
812
+ readonly agent: {
813
+ readonly host: string;
814
+ readonly agentId: string;
815
+ readonly name: string;
816
+ readonly paneId: string;
817
+ readonly relationship?: {
818
+ readonly parentAgentId: string;
819
+ readonly relation: "delegated" | "pair" | "review";
820
+ };
821
+ };
822
+ } | null;
823
+ readonly activity?: readonly {
824
+ readonly id: string;
825
+ readonly kind: "blocker" | "note" | "request" | "review" | "shipment" | "status";
826
+ readonly summary: string;
827
+ readonly occurredAt: number;
828
+ }[];
829
+ readonly blockers?: readonly {
830
+ readonly summary: string;
831
+ readonly since: number;
832
+ }[];
833
+ readonly requests?: readonly {
834
+ readonly id: string;
835
+ readonly summary: string;
836
+ readonly state: "approved" | "fulfilled" | "open" | "rejected";
837
+ readonly requestedAt: number;
838
+ readonly approvalTarget: {
839
+ readonly host: string;
840
+ readonly jobId: string;
841
+ readonly url: string;
842
+ } | null;
843
+ }[];
844
+ readonly review?: {
845
+ readonly state: "approved" | "changes_requested" | "not_requested" | "requested";
846
+ readonly summary: string | null;
847
+ readonly updatedAt: number;
848
+ readonly url: string | null;
849
+ } | null;
850
+ readonly approvalTarget?: {
851
+ readonly host: string;
852
+ readonly jobId: string;
853
+ readonly url: string;
854
+ } | null;
855
+ readonly createdAt: number;
856
+ readonly updatedAt: number;
857
+ };
858
+ };
859
+ };
860
+ };
861
+ } | {
862
+ readonly _tag: "prospective";
863
+ readonly target: {
864
+ readonly repository: string;
865
+ readonly pullRequest: number;
866
+ readonly reviewUrl: string;
867
+ readonly goalId: string;
868
+ readonly laneId: string;
869
+ readonly head: string;
870
+ readonly baseHead: string;
871
+ readonly owner: {
872
+ readonly id: string;
873
+ readonly name: string;
874
+ };
875
+ readonly sessionId: string;
876
+ readonly expectedWork: string;
877
+ readonly worker: {
878
+ readonly host: string;
879
+ readonly agentId: string;
880
+ readonly name: string;
881
+ readonly paneId: string;
882
+ readonly relationship?: {
883
+ readonly parentAgentId: string;
884
+ readonly relation: "delegated" | "pair" | "review";
885
+ };
886
+ };
887
+ readonly worktree: string;
888
+ readonly branch: string;
889
+ };
890
+ readonly absenceToken: string;
891
+ }, WorkProjectionError | WorkStoreError, never>;
892
+ admitExistingOwner: (request: {
893
+ readonly kind: "work.admit";
894
+ readonly repository: string;
895
+ readonly pullRequest: number;
896
+ readonly reviewUrl: string;
897
+ readonly goalId: string;
898
+ readonly laneId: string;
899
+ readonly operationId: string;
900
+ readonly expectedAbsenceToken: string;
901
+ readonly head: string;
902
+ readonly baseHead: string;
903
+ readonly owner: {
904
+ readonly id: string;
905
+ readonly name: string;
906
+ };
907
+ readonly sessionId: string;
908
+ readonly expectedWork: string;
909
+ readonly worker: {
910
+ readonly host: string;
911
+ readonly agentId: string;
912
+ readonly name: string;
913
+ readonly paneId: string;
914
+ readonly relationship?: {
915
+ readonly parentAgentId: string;
916
+ readonly relation: "delegated" | "pair" | "review";
917
+ };
918
+ };
919
+ readonly worktree: string;
920
+ readonly branch: string;
921
+ readonly title: string;
922
+ readonly summary: string;
923
+ readonly detail: string;
924
+ readonly approvalJobId: string;
925
+ readonly approvalActor: string;
926
+ }) => Effect.Effect<WorkPullRequestLink, WorkAdmissionConflictError | WorkProjectionError | WorkStoreError, never>;
927
+ agentBinding: (dispatchRequestId: string) => Effect.Effect<Option.Option<WorkAgentBinding>, WorkStoreError, never>;
928
+ inspectPullRequest: (request: WorkPullRequestLinkRequest) => Effect.Effect<{
929
+ readonly request: {
930
+ readonly repository: string;
931
+ readonly pullRequest: number;
932
+ readonly goalId: string;
933
+ readonly laneId: string;
934
+ };
935
+ readonly goalEventId: string;
936
+ readonly goal: {
937
+ readonly id: string;
938
+ readonly title: string;
939
+ readonly summary: string;
940
+ readonly detail: string;
941
+ readonly state: "blocked" | "completed" | "deployed" | "planned" | "review" | "working";
942
+ readonly owner: {
943
+ readonly id: string;
944
+ readonly name: string;
945
+ };
946
+ readonly repository: {
947
+ readonly repository: string;
948
+ readonly branch: string;
949
+ };
950
+ readonly spend: {
951
+ readonly currency: string;
952
+ readonly minorUnits: number;
953
+ } | null;
954
+ readonly delivery: "deployed" | "local" | "merged" | "pull_request" | "review";
955
+ readonly blocker: {
956
+ readonly summary: string;
957
+ readonly since: number;
958
+ } | null;
959
+ readonly connectTarget: {
960
+ readonly host: string;
961
+ readonly agentId: string;
962
+ readonly url: string;
963
+ } | null;
964
+ readonly goalFamily?: {
965
+ readonly canonicalGoalId: string;
966
+ readonly role: "canonical" | "superseded";
967
+ };
968
+ readonly agentHierarchy?: {
969
+ readonly agent: {
970
+ readonly host: string;
971
+ readonly agentId: string;
972
+ readonly name: string;
973
+ readonly paneId: string;
974
+ readonly relationship?: {
975
+ readonly parentAgentId: string;
976
+ readonly relation: "delegated" | "pair" | "review";
977
+ };
978
+ };
979
+ } | null;
980
+ readonly activity?: readonly {
981
+ readonly id: string;
982
+ readonly kind: "blocker" | "note" | "request" | "review" | "shipment" | "status";
983
+ readonly summary: string;
984
+ readonly occurredAt: number;
985
+ }[];
986
+ readonly blockers?: readonly {
987
+ readonly summary: string;
988
+ readonly since: number;
989
+ }[];
990
+ readonly requests?: readonly {
991
+ readonly id: string;
992
+ readonly summary: string;
993
+ readonly state: "approved" | "fulfilled" | "open" | "rejected";
994
+ readonly requestedAt: number;
995
+ readonly approvalTarget: {
996
+ readonly host: string;
997
+ readonly jobId: string;
998
+ readonly url: string;
999
+ } | null;
1000
+ }[];
1001
+ readonly review?: {
1002
+ readonly state: "approved" | "changes_requested" | "not_requested" | "requested";
1003
+ readonly summary: string | null;
1004
+ readonly updatedAt: number;
1005
+ readonly url: string | null;
1006
+ } | null;
1007
+ readonly approvalTarget?: {
1008
+ readonly host: string;
1009
+ readonly jobId: string;
1010
+ readonly url: string;
1011
+ } | null;
1012
+ readonly createdAt: number;
1013
+ readonly updatedAt: number;
1014
+ };
1015
+ readonly lane: {
1016
+ readonly operationId: string;
1017
+ readonly goalId: string;
1018
+ readonly laneId: string;
1019
+ readonly worktree: string;
1020
+ readonly branch: string;
1021
+ readonly head: string;
1022
+ readonly owner: {
1023
+ readonly id: string;
1024
+ readonly name: string;
1025
+ };
1026
+ readonly parent: string | null;
1027
+ readonly phase: "claim" | "implementation" | "review" | "shipped" | "validation";
1028
+ readonly expectedRevision: number;
1029
+ readonly reconciliation?: {
1030
+ readonly repository: string;
1031
+ readonly pullRequest: number;
1032
+ readonly expectedHead: string;
1033
+ readonly expectedOwner: {
1034
+ readonly id: string;
1035
+ readonly name: string;
1036
+ };
1037
+ readonly expectedGoalEventId: string;
1038
+ readonly bindingDispatchRequestId: string;
1039
+ readonly sessionId: string;
1040
+ readonly worker: {
1041
+ readonly host: string;
1042
+ readonly agentId: string;
1043
+ readonly name: string;
1044
+ readonly paneId: string;
1045
+ readonly relationship?: {
1046
+ readonly parentAgentId: string;
1047
+ readonly relation: "delegated" | "pair" | "review";
1048
+ };
1049
+ };
1050
+ };
1051
+ readonly revision: number;
1052
+ };
1053
+ readonly binding: {
1054
+ readonly version: "herdr.work.agent-binding.v1";
1055
+ readonly request: {
1056
+ readonly version: "herdr.work.agent-binding-request.v1";
1057
+ readonly dispatchRequestId: string;
1058
+ readonly laneId: string;
1059
+ readonly expectedRevision: number;
1060
+ readonly worker: {
1061
+ readonly host: string;
1062
+ readonly agentId: string;
1063
+ readonly name: string;
1064
+ readonly paneId: string;
1065
+ readonly relationship?: {
1066
+ readonly parentAgentId: string;
1067
+ readonly relation: "delegated" | "pair" | "review";
1068
+ };
1069
+ };
1070
+ readonly prospectiveAdmission?: {
1071
+ readonly sessionId: string;
1072
+ readonly workAssignment: string;
1073
+ readonly baseHead: string;
1074
+ readonly expectedAbsenceToken: string;
1075
+ readonly approvalJobId: string;
1076
+ readonly approvalActor: string;
1077
+ };
1078
+ readonly existingGoalRecovery?: {
1079
+ readonly sessionId: string;
1080
+ readonly workAssignment: string;
1081
+ readonly baseHead: string;
1082
+ readonly expectedHistoryToken: string;
1083
+ readonly expectedGoalEventId: string;
1084
+ readonly expectedGoalUpdatedAt: number;
1085
+ readonly approvalJobId: string;
1086
+ readonly approvalActor: string;
1087
+ readonly approvalApprovedBy: string;
1088
+ readonly approvalApprovedAt: number;
1089
+ readonly approvalHash: string;
1090
+ };
1091
+ readonly ownerReassignment?: {
1092
+ readonly previousDispatchRequestId: string;
1093
+ readonly approvalJobId: string;
1094
+ readonly approvalActor: string;
1095
+ readonly approvalApprovedBy: string;
1096
+ readonly approvalApprovedAt: number;
1097
+ readonly approvalHash: string;
1098
+ };
1099
+ };
1100
+ readonly lane: {
1101
+ readonly operationId: string;
1102
+ readonly goalId: string;
1103
+ readonly laneId: string;
1104
+ readonly worktree: string;
1105
+ readonly branch: string;
1106
+ readonly head: string;
1107
+ readonly owner: {
1108
+ readonly id: string;
1109
+ readonly name: string;
1110
+ };
1111
+ readonly parent: string | null;
1112
+ readonly phase: "claim" | "implementation" | "review" | "shipped" | "validation";
1113
+ readonly expectedRevision: number;
1114
+ readonly reconciliation?: {
1115
+ readonly repository: string;
1116
+ readonly pullRequest: number;
1117
+ readonly expectedHead: string;
1118
+ readonly expectedOwner: {
1119
+ readonly id: string;
1120
+ readonly name: string;
1121
+ };
1122
+ readonly expectedGoalEventId: string;
1123
+ readonly bindingDispatchRequestId: string;
1124
+ readonly sessionId: string;
1125
+ readonly worker: {
1126
+ readonly host: string;
1127
+ readonly agentId: string;
1128
+ readonly name: string;
1129
+ readonly paneId: string;
1130
+ readonly relationship?: {
1131
+ readonly parentAgentId: string;
1132
+ readonly relation: "delegated" | "pair" | "review";
1133
+ };
1134
+ };
1135
+ };
1136
+ readonly revision: number;
1137
+ };
1138
+ readonly checkpoint: {
1139
+ readonly version: "herdr.work.event.v1";
1140
+ readonly eventId: string;
1141
+ readonly occurredAt: number;
1142
+ readonly goal: {
1143
+ readonly id: string;
1144
+ readonly title: string;
1145
+ readonly summary: string;
1146
+ readonly detail: string;
1147
+ readonly state: "blocked" | "completed" | "deployed" | "planned" | "review" | "working";
1148
+ readonly owner: {
1149
+ readonly id: string;
1150
+ readonly name: string;
1151
+ };
1152
+ readonly repository: {
1153
+ readonly repository: string;
1154
+ readonly branch: string;
1155
+ };
1156
+ readonly spend: {
1157
+ readonly currency: string;
1158
+ readonly minorUnits: number;
1159
+ } | null;
1160
+ readonly delivery: "deployed" | "local" | "merged" | "pull_request" | "review";
1161
+ readonly blocker: {
1162
+ readonly summary: string;
1163
+ readonly since: number;
1164
+ } | null;
1165
+ readonly connectTarget: {
1166
+ readonly host: string;
1167
+ readonly agentId: string;
1168
+ readonly url: string;
1169
+ } | null;
1170
+ readonly goalFamily?: {
1171
+ readonly canonicalGoalId: string;
1172
+ readonly role: "canonical" | "superseded";
1173
+ };
1174
+ readonly agentHierarchy?: {
1175
+ readonly agent: {
1176
+ readonly host: string;
1177
+ readonly agentId: string;
1178
+ readonly name: string;
1179
+ readonly paneId: string;
1180
+ readonly relationship?: {
1181
+ readonly parentAgentId: string;
1182
+ readonly relation: "delegated" | "pair" | "review";
1183
+ };
1184
+ };
1185
+ } | null;
1186
+ readonly activity?: readonly {
1187
+ readonly id: string;
1188
+ readonly kind: "blocker" | "note" | "request" | "review" | "shipment" | "status";
1189
+ readonly summary: string;
1190
+ readonly occurredAt: number;
1191
+ }[];
1192
+ readonly blockers?: readonly {
1193
+ readonly summary: string;
1194
+ readonly since: number;
1195
+ }[];
1196
+ readonly requests?: readonly {
1197
+ readonly id: string;
1198
+ readonly summary: string;
1199
+ readonly state: "approved" | "fulfilled" | "open" | "rejected";
1200
+ readonly requestedAt: number;
1201
+ readonly approvalTarget: {
1202
+ readonly host: string;
1203
+ readonly jobId: string;
1204
+ readonly url: string;
1205
+ } | null;
1206
+ }[];
1207
+ readonly review?: {
1208
+ readonly state: "approved" | "changes_requested" | "not_requested" | "requested";
1209
+ readonly summary: string | null;
1210
+ readonly updatedAt: number;
1211
+ readonly url: string | null;
1212
+ } | null;
1213
+ readonly approvalTarget?: {
1214
+ readonly host: string;
1215
+ readonly jobId: string;
1216
+ readonly url: string;
1217
+ } | null;
1218
+ readonly createdAt: number;
1219
+ readonly updatedAt: number;
1220
+ };
1221
+ };
1222
+ };
1223
+ }, WorkProjectionError | WorkPullRequestLinkError | WorkStoreError, never>;
1224
+ reconcileExistingOwner: (request: WorkExistingOwnerReconciliation) => Effect.Effect<WorkLaneClaimed, WorkLaneClaimConflictError | WorkLaneGoalConflictError | WorkLaneOperationConflictError | WorkProjectionError | WorkPullRequestLinkError | WorkStoreError, never>;
1225
+ activeGoalClaim: (goalId: string) => Effect.Effect<Option.Option<WorkLaneClaimed>, WorkStoreError, never>;
1226
+ bindAgent: (request: WorkAgentBindingRequest) => Effect.Effect<WorkAgentBinding, WorkAgentBindingAuthorityError | WorkAgentBindingConflictError | WorkProjectionError | WorkStoreError, never>;
1227
+ claim: (lane: WorkLaneClaim) => Effect.Effect<WorkLaneClaimed, WorkLaneClaimConflictError | WorkLaneGoalConflictError | WorkLaneOperationConflictError | WorkProjectionError | WorkPullRequestLinkError | WorkStoreError, never>;
1228
+ coordinatorHandoff: (sessionId: string) => Effect.Effect<Option.Option<WorkDecisionHandoff>, WorkStoreError, never>;
1229
+ currentClaim: (laneId: string) => Effect.Effect<Option.Option<WorkLaneClaimed>, WorkStoreError, never>;
1230
+ decisions: (laneId: string) => Effect.Effect<readonly WorkDecisionHandoff[], WorkStoreError, never>;
1231
+ handoff: (decision: WorkDecisionHandoff) => Effect.Effect<WorkDecisionHandoff, WorkCoordinatorHandoffConflictError | WorkDecisionAuthorityConflictError | WorkDecisionHandoffConflictError | WorkDecisionRevisionConflictError | WorkProjectionError | WorkStoreError, never>;
10
1232
  record: (event: WorkGoalCheckpoint) => Effect.Effect<WorkGoalCheckpoint, WorkCheckpointConflictError | WorkProjectionError | WorkStoreError, never>;
1233
+ recordMany: (transactionId: string, events: readonly WorkGoalCheckpoint[]) => Effect.Effect<readonly WorkGoalCheckpoint[], WorkCheckpointConflictError | WorkProjectionError | WorkStoreError | WorkTransactionConflictError, never>;
11
1234
  snapshots: (observedAt?: number | undefined) => Effect.Effect<{
12
1235
  readonly observedAt: number;
13
1236
  readonly now: {
@@ -42,6 +1265,10 @@ export declare const makeWorkService: (store: WorkStoreService) => Effect.Effect
42
1265
  readonly agentId: string;
43
1266
  readonly url: string;
44
1267
  } | null;
1268
+ readonly goalFamily?: {
1269
+ readonly canonicalGoalId: string;
1270
+ readonly role: "canonical" | "superseded";
1271
+ };
45
1272
  readonly agentHierarchy?: {
46
1273
  readonly agent: {
47
1274
  readonly host: string;
@@ -89,6 +1316,167 @@ export declare const makeWorkService: (store: WorkStoreService) => Effect.Effect
89
1316
  readonly createdAt: number;
90
1317
  readonly updatedAt: number;
91
1318
  }[];
1319
+ readonly families?: readonly {
1320
+ readonly canonicalGoalId: string;
1321
+ readonly canonical: {
1322
+ readonly id: string;
1323
+ readonly title: string;
1324
+ readonly summary: string;
1325
+ readonly detail: string;
1326
+ readonly state: "blocked" | "completed" | "deployed" | "planned" | "review" | "working";
1327
+ readonly owner: {
1328
+ readonly id: string;
1329
+ readonly name: string;
1330
+ };
1331
+ readonly repository: {
1332
+ readonly repository: string;
1333
+ readonly branch: string;
1334
+ };
1335
+ readonly spend: {
1336
+ readonly currency: string;
1337
+ readonly minorUnits: number;
1338
+ } | null;
1339
+ readonly delivery: "deployed" | "local" | "merged" | "pull_request" | "review";
1340
+ readonly blocker: {
1341
+ readonly summary: string;
1342
+ readonly since: number;
1343
+ } | null;
1344
+ readonly connectTarget: {
1345
+ readonly host: string;
1346
+ readonly agentId: string;
1347
+ readonly url: string;
1348
+ } | null;
1349
+ readonly goalFamily?: {
1350
+ readonly canonicalGoalId: string;
1351
+ readonly role: "canonical" | "superseded";
1352
+ };
1353
+ readonly agentHierarchy?: {
1354
+ readonly agent: {
1355
+ readonly host: string;
1356
+ readonly agentId: string;
1357
+ readonly name: string;
1358
+ readonly paneId: string;
1359
+ readonly relationship?: {
1360
+ readonly parentAgentId: string;
1361
+ readonly relation: "delegated" | "pair" | "review";
1362
+ };
1363
+ };
1364
+ } | null;
1365
+ readonly activity?: readonly {
1366
+ readonly id: string;
1367
+ readonly kind: "blocker" | "note" | "request" | "review" | "shipment" | "status";
1368
+ readonly summary: string;
1369
+ readonly occurredAt: number;
1370
+ }[];
1371
+ readonly blockers?: readonly {
1372
+ readonly summary: string;
1373
+ readonly since: number;
1374
+ }[];
1375
+ readonly requests?: readonly {
1376
+ readonly id: string;
1377
+ readonly summary: string;
1378
+ readonly state: "approved" | "fulfilled" | "open" | "rejected";
1379
+ readonly requestedAt: number;
1380
+ readonly approvalTarget: {
1381
+ readonly host: string;
1382
+ readonly jobId: string;
1383
+ readonly url: string;
1384
+ } | null;
1385
+ }[];
1386
+ readonly review?: {
1387
+ readonly state: "approved" | "changes_requested" | "not_requested" | "requested";
1388
+ readonly summary: string | null;
1389
+ readonly updatedAt: number;
1390
+ readonly url: string | null;
1391
+ } | null;
1392
+ readonly approvalTarget?: {
1393
+ readonly host: string;
1394
+ readonly jobId: string;
1395
+ readonly url: string;
1396
+ } | null;
1397
+ readonly createdAt: number;
1398
+ readonly updatedAt: number;
1399
+ };
1400
+ readonly superseded: readonly {
1401
+ readonly id: string;
1402
+ readonly title: string;
1403
+ readonly summary: string;
1404
+ readonly detail: string;
1405
+ readonly state: "blocked" | "completed" | "deployed" | "planned" | "review" | "working";
1406
+ readonly owner: {
1407
+ readonly id: string;
1408
+ readonly name: string;
1409
+ };
1410
+ readonly repository: {
1411
+ readonly repository: string;
1412
+ readonly branch: string;
1413
+ };
1414
+ readonly spend: {
1415
+ readonly currency: string;
1416
+ readonly minorUnits: number;
1417
+ } | null;
1418
+ readonly delivery: "deployed" | "local" | "merged" | "pull_request" | "review";
1419
+ readonly blocker: {
1420
+ readonly summary: string;
1421
+ readonly since: number;
1422
+ } | null;
1423
+ readonly connectTarget: {
1424
+ readonly host: string;
1425
+ readonly agentId: string;
1426
+ readonly url: string;
1427
+ } | null;
1428
+ readonly goalFamily?: {
1429
+ readonly canonicalGoalId: string;
1430
+ readonly role: "canonical" | "superseded";
1431
+ };
1432
+ readonly agentHierarchy?: {
1433
+ readonly agent: {
1434
+ readonly host: string;
1435
+ readonly agentId: string;
1436
+ readonly name: string;
1437
+ readonly paneId: string;
1438
+ readonly relationship?: {
1439
+ readonly parentAgentId: string;
1440
+ readonly relation: "delegated" | "pair" | "review";
1441
+ };
1442
+ };
1443
+ } | null;
1444
+ readonly activity?: readonly {
1445
+ readonly id: string;
1446
+ readonly kind: "blocker" | "note" | "request" | "review" | "shipment" | "status";
1447
+ readonly summary: string;
1448
+ readonly occurredAt: number;
1449
+ }[];
1450
+ readonly blockers?: readonly {
1451
+ readonly summary: string;
1452
+ readonly since: number;
1453
+ }[];
1454
+ readonly requests?: readonly {
1455
+ readonly id: string;
1456
+ readonly summary: string;
1457
+ readonly state: "approved" | "fulfilled" | "open" | "rejected";
1458
+ readonly requestedAt: number;
1459
+ readonly approvalTarget: {
1460
+ readonly host: string;
1461
+ readonly jobId: string;
1462
+ readonly url: string;
1463
+ } | null;
1464
+ }[];
1465
+ readonly review?: {
1466
+ readonly state: "approved" | "changes_requested" | "not_requested" | "requested";
1467
+ readonly summary: string | null;
1468
+ readonly updatedAt: number;
1469
+ readonly url: string | null;
1470
+ } | null;
1471
+ readonly approvalTarget?: {
1472
+ readonly host: string;
1473
+ readonly jobId: string;
1474
+ readonly url: string;
1475
+ } | null;
1476
+ readonly createdAt: number;
1477
+ readonly updatedAt: number;
1478
+ }[];
1479
+ }[];
92
1480
  };
93
1481
  readonly day: {
94
1482
  readonly window: "day" | "month" | "now" | "week";
@@ -122,6 +1510,10 @@ export declare const makeWorkService: (store: WorkStoreService) => Effect.Effect
122
1510
  readonly agentId: string;
123
1511
  readonly url: string;
124
1512
  } | null;
1513
+ readonly goalFamily?: {
1514
+ readonly canonicalGoalId: string;
1515
+ readonly role: "canonical" | "superseded";
1516
+ };
125
1517
  readonly agentHierarchy?: {
126
1518
  readonly agent: {
127
1519
  readonly host: string;
@@ -169,6 +1561,167 @@ export declare const makeWorkService: (store: WorkStoreService) => Effect.Effect
169
1561
  readonly createdAt: number;
170
1562
  readonly updatedAt: number;
171
1563
  }[];
1564
+ readonly families?: readonly {
1565
+ readonly canonicalGoalId: string;
1566
+ readonly canonical: {
1567
+ readonly id: string;
1568
+ readonly title: string;
1569
+ readonly summary: string;
1570
+ readonly detail: string;
1571
+ readonly state: "blocked" | "completed" | "deployed" | "planned" | "review" | "working";
1572
+ readonly owner: {
1573
+ readonly id: string;
1574
+ readonly name: string;
1575
+ };
1576
+ readonly repository: {
1577
+ readonly repository: string;
1578
+ readonly branch: string;
1579
+ };
1580
+ readonly spend: {
1581
+ readonly currency: string;
1582
+ readonly minorUnits: number;
1583
+ } | null;
1584
+ readonly delivery: "deployed" | "local" | "merged" | "pull_request" | "review";
1585
+ readonly blocker: {
1586
+ readonly summary: string;
1587
+ readonly since: number;
1588
+ } | null;
1589
+ readonly connectTarget: {
1590
+ readonly host: string;
1591
+ readonly agentId: string;
1592
+ readonly url: string;
1593
+ } | null;
1594
+ readonly goalFamily?: {
1595
+ readonly canonicalGoalId: string;
1596
+ readonly role: "canonical" | "superseded";
1597
+ };
1598
+ readonly agentHierarchy?: {
1599
+ readonly agent: {
1600
+ readonly host: string;
1601
+ readonly agentId: string;
1602
+ readonly name: string;
1603
+ readonly paneId: string;
1604
+ readonly relationship?: {
1605
+ readonly parentAgentId: string;
1606
+ readonly relation: "delegated" | "pair" | "review";
1607
+ };
1608
+ };
1609
+ } | null;
1610
+ readonly activity?: readonly {
1611
+ readonly id: string;
1612
+ readonly kind: "blocker" | "note" | "request" | "review" | "shipment" | "status";
1613
+ readonly summary: string;
1614
+ readonly occurredAt: number;
1615
+ }[];
1616
+ readonly blockers?: readonly {
1617
+ readonly summary: string;
1618
+ readonly since: number;
1619
+ }[];
1620
+ readonly requests?: readonly {
1621
+ readonly id: string;
1622
+ readonly summary: string;
1623
+ readonly state: "approved" | "fulfilled" | "open" | "rejected";
1624
+ readonly requestedAt: number;
1625
+ readonly approvalTarget: {
1626
+ readonly host: string;
1627
+ readonly jobId: string;
1628
+ readonly url: string;
1629
+ } | null;
1630
+ }[];
1631
+ readonly review?: {
1632
+ readonly state: "approved" | "changes_requested" | "not_requested" | "requested";
1633
+ readonly summary: string | null;
1634
+ readonly updatedAt: number;
1635
+ readonly url: string | null;
1636
+ } | null;
1637
+ readonly approvalTarget?: {
1638
+ readonly host: string;
1639
+ readonly jobId: string;
1640
+ readonly url: string;
1641
+ } | null;
1642
+ readonly createdAt: number;
1643
+ readonly updatedAt: number;
1644
+ };
1645
+ readonly superseded: readonly {
1646
+ readonly id: string;
1647
+ readonly title: string;
1648
+ readonly summary: string;
1649
+ readonly detail: string;
1650
+ readonly state: "blocked" | "completed" | "deployed" | "planned" | "review" | "working";
1651
+ readonly owner: {
1652
+ readonly id: string;
1653
+ readonly name: string;
1654
+ };
1655
+ readonly repository: {
1656
+ readonly repository: string;
1657
+ readonly branch: string;
1658
+ };
1659
+ readonly spend: {
1660
+ readonly currency: string;
1661
+ readonly minorUnits: number;
1662
+ } | null;
1663
+ readonly delivery: "deployed" | "local" | "merged" | "pull_request" | "review";
1664
+ readonly blocker: {
1665
+ readonly summary: string;
1666
+ readonly since: number;
1667
+ } | null;
1668
+ readonly connectTarget: {
1669
+ readonly host: string;
1670
+ readonly agentId: string;
1671
+ readonly url: string;
1672
+ } | null;
1673
+ readonly goalFamily?: {
1674
+ readonly canonicalGoalId: string;
1675
+ readonly role: "canonical" | "superseded";
1676
+ };
1677
+ readonly agentHierarchy?: {
1678
+ readonly agent: {
1679
+ readonly host: string;
1680
+ readonly agentId: string;
1681
+ readonly name: string;
1682
+ readonly paneId: string;
1683
+ readonly relationship?: {
1684
+ readonly parentAgentId: string;
1685
+ readonly relation: "delegated" | "pair" | "review";
1686
+ };
1687
+ };
1688
+ } | null;
1689
+ readonly activity?: readonly {
1690
+ readonly id: string;
1691
+ readonly kind: "blocker" | "note" | "request" | "review" | "shipment" | "status";
1692
+ readonly summary: string;
1693
+ readonly occurredAt: number;
1694
+ }[];
1695
+ readonly blockers?: readonly {
1696
+ readonly summary: string;
1697
+ readonly since: number;
1698
+ }[];
1699
+ readonly requests?: readonly {
1700
+ readonly id: string;
1701
+ readonly summary: string;
1702
+ readonly state: "approved" | "fulfilled" | "open" | "rejected";
1703
+ readonly requestedAt: number;
1704
+ readonly approvalTarget: {
1705
+ readonly host: string;
1706
+ readonly jobId: string;
1707
+ readonly url: string;
1708
+ } | null;
1709
+ }[];
1710
+ readonly review?: {
1711
+ readonly state: "approved" | "changes_requested" | "not_requested" | "requested";
1712
+ readonly summary: string | null;
1713
+ readonly updatedAt: number;
1714
+ readonly url: string | null;
1715
+ } | null;
1716
+ readonly approvalTarget?: {
1717
+ readonly host: string;
1718
+ readonly jobId: string;
1719
+ readonly url: string;
1720
+ } | null;
1721
+ readonly createdAt: number;
1722
+ readonly updatedAt: number;
1723
+ }[];
1724
+ }[];
172
1725
  };
173
1726
  readonly week: {
174
1727
  readonly window: "day" | "month" | "now" | "week";
@@ -202,6 +1755,10 @@ export declare const makeWorkService: (store: WorkStoreService) => Effect.Effect
202
1755
  readonly agentId: string;
203
1756
  readonly url: string;
204
1757
  } | null;
1758
+ readonly goalFamily?: {
1759
+ readonly canonicalGoalId: string;
1760
+ readonly role: "canonical" | "superseded";
1761
+ };
205
1762
  readonly agentHierarchy?: {
206
1763
  readonly agent: {
207
1764
  readonly host: string;
@@ -249,6 +1806,167 @@ export declare const makeWorkService: (store: WorkStoreService) => Effect.Effect
249
1806
  readonly createdAt: number;
250
1807
  readonly updatedAt: number;
251
1808
  }[];
1809
+ readonly families?: readonly {
1810
+ readonly canonicalGoalId: string;
1811
+ readonly canonical: {
1812
+ readonly id: string;
1813
+ readonly title: string;
1814
+ readonly summary: string;
1815
+ readonly detail: string;
1816
+ readonly state: "blocked" | "completed" | "deployed" | "planned" | "review" | "working";
1817
+ readonly owner: {
1818
+ readonly id: string;
1819
+ readonly name: string;
1820
+ };
1821
+ readonly repository: {
1822
+ readonly repository: string;
1823
+ readonly branch: string;
1824
+ };
1825
+ readonly spend: {
1826
+ readonly currency: string;
1827
+ readonly minorUnits: number;
1828
+ } | null;
1829
+ readonly delivery: "deployed" | "local" | "merged" | "pull_request" | "review";
1830
+ readonly blocker: {
1831
+ readonly summary: string;
1832
+ readonly since: number;
1833
+ } | null;
1834
+ readonly connectTarget: {
1835
+ readonly host: string;
1836
+ readonly agentId: string;
1837
+ readonly url: string;
1838
+ } | null;
1839
+ readonly goalFamily?: {
1840
+ readonly canonicalGoalId: string;
1841
+ readonly role: "canonical" | "superseded";
1842
+ };
1843
+ readonly agentHierarchy?: {
1844
+ readonly agent: {
1845
+ readonly host: string;
1846
+ readonly agentId: string;
1847
+ readonly name: string;
1848
+ readonly paneId: string;
1849
+ readonly relationship?: {
1850
+ readonly parentAgentId: string;
1851
+ readonly relation: "delegated" | "pair" | "review";
1852
+ };
1853
+ };
1854
+ } | null;
1855
+ readonly activity?: readonly {
1856
+ readonly id: string;
1857
+ readonly kind: "blocker" | "note" | "request" | "review" | "shipment" | "status";
1858
+ readonly summary: string;
1859
+ readonly occurredAt: number;
1860
+ }[];
1861
+ readonly blockers?: readonly {
1862
+ readonly summary: string;
1863
+ readonly since: number;
1864
+ }[];
1865
+ readonly requests?: readonly {
1866
+ readonly id: string;
1867
+ readonly summary: string;
1868
+ readonly state: "approved" | "fulfilled" | "open" | "rejected";
1869
+ readonly requestedAt: number;
1870
+ readonly approvalTarget: {
1871
+ readonly host: string;
1872
+ readonly jobId: string;
1873
+ readonly url: string;
1874
+ } | null;
1875
+ }[];
1876
+ readonly review?: {
1877
+ readonly state: "approved" | "changes_requested" | "not_requested" | "requested";
1878
+ readonly summary: string | null;
1879
+ readonly updatedAt: number;
1880
+ readonly url: string | null;
1881
+ } | null;
1882
+ readonly approvalTarget?: {
1883
+ readonly host: string;
1884
+ readonly jobId: string;
1885
+ readonly url: string;
1886
+ } | null;
1887
+ readonly createdAt: number;
1888
+ readonly updatedAt: number;
1889
+ };
1890
+ readonly superseded: readonly {
1891
+ readonly id: string;
1892
+ readonly title: string;
1893
+ readonly summary: string;
1894
+ readonly detail: string;
1895
+ readonly state: "blocked" | "completed" | "deployed" | "planned" | "review" | "working";
1896
+ readonly owner: {
1897
+ readonly id: string;
1898
+ readonly name: string;
1899
+ };
1900
+ readonly repository: {
1901
+ readonly repository: string;
1902
+ readonly branch: string;
1903
+ };
1904
+ readonly spend: {
1905
+ readonly currency: string;
1906
+ readonly minorUnits: number;
1907
+ } | null;
1908
+ readonly delivery: "deployed" | "local" | "merged" | "pull_request" | "review";
1909
+ readonly blocker: {
1910
+ readonly summary: string;
1911
+ readonly since: number;
1912
+ } | null;
1913
+ readonly connectTarget: {
1914
+ readonly host: string;
1915
+ readonly agentId: string;
1916
+ readonly url: string;
1917
+ } | null;
1918
+ readonly goalFamily?: {
1919
+ readonly canonicalGoalId: string;
1920
+ readonly role: "canonical" | "superseded";
1921
+ };
1922
+ readonly agentHierarchy?: {
1923
+ readonly agent: {
1924
+ readonly host: string;
1925
+ readonly agentId: string;
1926
+ readonly name: string;
1927
+ readonly paneId: string;
1928
+ readonly relationship?: {
1929
+ readonly parentAgentId: string;
1930
+ readonly relation: "delegated" | "pair" | "review";
1931
+ };
1932
+ };
1933
+ } | null;
1934
+ readonly activity?: readonly {
1935
+ readonly id: string;
1936
+ readonly kind: "blocker" | "note" | "request" | "review" | "shipment" | "status";
1937
+ readonly summary: string;
1938
+ readonly occurredAt: number;
1939
+ }[];
1940
+ readonly blockers?: readonly {
1941
+ readonly summary: string;
1942
+ readonly since: number;
1943
+ }[];
1944
+ readonly requests?: readonly {
1945
+ readonly id: string;
1946
+ readonly summary: string;
1947
+ readonly state: "approved" | "fulfilled" | "open" | "rejected";
1948
+ readonly requestedAt: number;
1949
+ readonly approvalTarget: {
1950
+ readonly host: string;
1951
+ readonly jobId: string;
1952
+ readonly url: string;
1953
+ } | null;
1954
+ }[];
1955
+ readonly review?: {
1956
+ readonly state: "approved" | "changes_requested" | "not_requested" | "requested";
1957
+ readonly summary: string | null;
1958
+ readonly updatedAt: number;
1959
+ readonly url: string | null;
1960
+ } | null;
1961
+ readonly approvalTarget?: {
1962
+ readonly host: string;
1963
+ readonly jobId: string;
1964
+ readonly url: string;
1965
+ } | null;
1966
+ readonly createdAt: number;
1967
+ readonly updatedAt: number;
1968
+ }[];
1969
+ }[];
252
1970
  };
253
1971
  readonly month: {
254
1972
  readonly window: "day" | "month" | "now" | "week";
@@ -282,6 +2000,10 @@ export declare const makeWorkService: (store: WorkStoreService) => Effect.Effect
282
2000
  readonly agentId: string;
283
2001
  readonly url: string;
284
2002
  } | null;
2003
+ readonly goalFamily?: {
2004
+ readonly canonicalGoalId: string;
2005
+ readonly role: "canonical" | "superseded";
2006
+ };
285
2007
  readonly agentHierarchy?: {
286
2008
  readonly agent: {
287
2009
  readonly host: string;
@@ -329,6 +2051,167 @@ export declare const makeWorkService: (store: WorkStoreService) => Effect.Effect
329
2051
  readonly createdAt: number;
330
2052
  readonly updatedAt: number;
331
2053
  }[];
2054
+ readonly families?: readonly {
2055
+ readonly canonicalGoalId: string;
2056
+ readonly canonical: {
2057
+ readonly id: string;
2058
+ readonly title: string;
2059
+ readonly summary: string;
2060
+ readonly detail: string;
2061
+ readonly state: "blocked" | "completed" | "deployed" | "planned" | "review" | "working";
2062
+ readonly owner: {
2063
+ readonly id: string;
2064
+ readonly name: string;
2065
+ };
2066
+ readonly repository: {
2067
+ readonly repository: string;
2068
+ readonly branch: string;
2069
+ };
2070
+ readonly spend: {
2071
+ readonly currency: string;
2072
+ readonly minorUnits: number;
2073
+ } | null;
2074
+ readonly delivery: "deployed" | "local" | "merged" | "pull_request" | "review";
2075
+ readonly blocker: {
2076
+ readonly summary: string;
2077
+ readonly since: number;
2078
+ } | null;
2079
+ readonly connectTarget: {
2080
+ readonly host: string;
2081
+ readonly agentId: string;
2082
+ readonly url: string;
2083
+ } | null;
2084
+ readonly goalFamily?: {
2085
+ readonly canonicalGoalId: string;
2086
+ readonly role: "canonical" | "superseded";
2087
+ };
2088
+ readonly agentHierarchy?: {
2089
+ readonly agent: {
2090
+ readonly host: string;
2091
+ readonly agentId: string;
2092
+ readonly name: string;
2093
+ readonly paneId: string;
2094
+ readonly relationship?: {
2095
+ readonly parentAgentId: string;
2096
+ readonly relation: "delegated" | "pair" | "review";
2097
+ };
2098
+ };
2099
+ } | null;
2100
+ readonly activity?: readonly {
2101
+ readonly id: string;
2102
+ readonly kind: "blocker" | "note" | "request" | "review" | "shipment" | "status";
2103
+ readonly summary: string;
2104
+ readonly occurredAt: number;
2105
+ }[];
2106
+ readonly blockers?: readonly {
2107
+ readonly summary: string;
2108
+ readonly since: number;
2109
+ }[];
2110
+ readonly requests?: readonly {
2111
+ readonly id: string;
2112
+ readonly summary: string;
2113
+ readonly state: "approved" | "fulfilled" | "open" | "rejected";
2114
+ readonly requestedAt: number;
2115
+ readonly approvalTarget: {
2116
+ readonly host: string;
2117
+ readonly jobId: string;
2118
+ readonly url: string;
2119
+ } | null;
2120
+ }[];
2121
+ readonly review?: {
2122
+ readonly state: "approved" | "changes_requested" | "not_requested" | "requested";
2123
+ readonly summary: string | null;
2124
+ readonly updatedAt: number;
2125
+ readonly url: string | null;
2126
+ } | null;
2127
+ readonly approvalTarget?: {
2128
+ readonly host: string;
2129
+ readonly jobId: string;
2130
+ readonly url: string;
2131
+ } | null;
2132
+ readonly createdAt: number;
2133
+ readonly updatedAt: number;
2134
+ };
2135
+ readonly superseded: readonly {
2136
+ readonly id: string;
2137
+ readonly title: string;
2138
+ readonly summary: string;
2139
+ readonly detail: string;
2140
+ readonly state: "blocked" | "completed" | "deployed" | "planned" | "review" | "working";
2141
+ readonly owner: {
2142
+ readonly id: string;
2143
+ readonly name: string;
2144
+ };
2145
+ readonly repository: {
2146
+ readonly repository: string;
2147
+ readonly branch: string;
2148
+ };
2149
+ readonly spend: {
2150
+ readonly currency: string;
2151
+ readonly minorUnits: number;
2152
+ } | null;
2153
+ readonly delivery: "deployed" | "local" | "merged" | "pull_request" | "review";
2154
+ readonly blocker: {
2155
+ readonly summary: string;
2156
+ readonly since: number;
2157
+ } | null;
2158
+ readonly connectTarget: {
2159
+ readonly host: string;
2160
+ readonly agentId: string;
2161
+ readonly url: string;
2162
+ } | null;
2163
+ readonly goalFamily?: {
2164
+ readonly canonicalGoalId: string;
2165
+ readonly role: "canonical" | "superseded";
2166
+ };
2167
+ readonly agentHierarchy?: {
2168
+ readonly agent: {
2169
+ readonly host: string;
2170
+ readonly agentId: string;
2171
+ readonly name: string;
2172
+ readonly paneId: string;
2173
+ readonly relationship?: {
2174
+ readonly parentAgentId: string;
2175
+ readonly relation: "delegated" | "pair" | "review";
2176
+ };
2177
+ };
2178
+ } | null;
2179
+ readonly activity?: readonly {
2180
+ readonly id: string;
2181
+ readonly kind: "blocker" | "note" | "request" | "review" | "shipment" | "status";
2182
+ readonly summary: string;
2183
+ readonly occurredAt: number;
2184
+ }[];
2185
+ readonly blockers?: readonly {
2186
+ readonly summary: string;
2187
+ readonly since: number;
2188
+ }[];
2189
+ readonly requests?: readonly {
2190
+ readonly id: string;
2191
+ readonly summary: string;
2192
+ readonly state: "approved" | "fulfilled" | "open" | "rejected";
2193
+ readonly requestedAt: number;
2194
+ readonly approvalTarget: {
2195
+ readonly host: string;
2196
+ readonly jobId: string;
2197
+ readonly url: string;
2198
+ } | null;
2199
+ }[];
2200
+ readonly review?: {
2201
+ readonly state: "approved" | "changes_requested" | "not_requested" | "requested";
2202
+ readonly summary: string | null;
2203
+ readonly updatedAt: number;
2204
+ readonly url: string | null;
2205
+ } | null;
2206
+ readonly approvalTarget?: {
2207
+ readonly host: string;
2208
+ readonly jobId: string;
2209
+ readonly url: string;
2210
+ } | null;
2211
+ readonly createdAt: number;
2212
+ readonly updatedAt: number;
2213
+ }[];
2214
+ }[];
332
2215
  };
333
2216
  }, WorkProjectionError | WorkStoreError, never>;
334
2217
  }, never, never>;