@knpkv/herdr-work 0.2.0 → 0.4.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.
package/README.md CHANGED
@@ -4,4 +4,16 @@ Durable fleet work checkpoints and the Rly departure-board projection used by th
4
4
 
5
5
  Each `WorkGoalCheckpoint` stores a complete, Schema-decoded goal state at its exact durable timestamp. `projectWorkSnapshots` selects the latest recorded checkpoint at now, 24 hours, 7 days, and 30 days. A goal does not appear before its creation checkpoint, and missing history is never synthesized.
6
6
 
7
- `WorkStore` persists events in SQLite. Recording the exact same checkpoint again is an idempotent replay; reusing an event ID or goal timestamp with changed content returns `WorkCheckpointConflictError`. `makeWorkService` is the small runtime interface for recording checkpoints and reading all four snapshots. `WorkBoard` renders the projection and links only through the persisted `AgentConnectTarget`.
7
+ `WorkGoal.goalFamily` records a goal as either the canonical member of a family or a superseded member pointing to that canonical goal. Superseded goals leave the active projection only after their durable relation checkpoint. Earlier snapshots still show their previous state, blockers, reviews, and activity. A relation cannot be removed or retargeted, and a superseded goal cannot precede its canonical member.
8
+
9
+ `WorkStore` persists events in SQLite. Recording the exact same checkpoint again is an idempotent replay; reusing an event ID or goal timestamp with changed content returns `WorkCheckpointConflictError`. `makeWorkService` is the small runtime interface for recording checkpoints and reading all four snapshots.
10
+
11
+ `WorkBoard` renders these persisted outbound-link forms:
12
+
13
+ - `AgentConnectTarget.url` — local terminal handoff.
14
+ - `WorkApprovalTarget` — approval deep link with its host and job identity. The approvals ingestion boundary resolves the configured destination and verifies the URL origin before persistence; the root path and identity query remain required.
15
+ - `WorkReview.url` — review destination.
16
+
17
+ Every URL uses the credential-free HTTP(S) `LinkUrl` boundary. Provider credentials and private locators never enter these persisted or browser-visible links.
18
+
19
+ `WorkBoard` accepts `externalLinks="enabled"` by default. With `externalLinks="disabled"`, it keeps recorded approval, review, and Connect targets visible as metadata without rendering outbound links for read-only LAN Work.
@@ -0,0 +1,4 @@
1
+ import { WorkProjectionError } from "./errors.js";
2
+ import type { WorkGoalCheckpoint } from "./model.js";
3
+ export declare const validateGoalFamilyHistory: (events: ReadonlyArray<WorkGoalCheckpoint>) => WorkProjectionError | undefined;
4
+ //# sourceMappingURL=goal-family.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal-family.d.ts","sourceRoot":"","sources":["../src/goal-family.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAkB,MAAM,YAAY,CAAA;AAKpE,eAAO,MAAM,yBAAyB,WAC5B,aAAa,CAAC,kBAAkB,CAAC,KACxC,mBAAmB,GAAG,SAkCxB,CAAA"}
@@ -0,0 +1,32 @@
1
+ import { WorkProjectionError } from "./errors.js";
2
+ const inconsistency = (detail, cause) => new WorkProjectionError({ cause, detail, reason: "inconsistent_history" });
3
+ export const validateGoalFamilyHistory = (events) => {
4
+ const familyByGoal = new Map();
5
+ const canonicalActivatedAt = new Map();
6
+ const ordered = events.toSorted((left, right) => left.occurredAt - right.occurredAt);
7
+ for (const event of ordered) {
8
+ const family = event.goal.goalFamily;
9
+ const previousFamily = familyByGoal.get(event.goal.id);
10
+ if (previousFamily !== undefined && (family === undefined ||
11
+ family.canonicalGoalId !== previousFamily.canonicalGoalId ||
12
+ family.role !== previousFamily.role)) {
13
+ return inconsistency(`goal ${event.goal.id} changed or removed its goal-family relation`, event);
14
+ }
15
+ if (family !== undefined) {
16
+ familyByGoal.set(event.goal.id, family);
17
+ if (family.role === "canonical" && !canonicalActivatedAt.has(event.goal.id)) {
18
+ canonicalActivatedAt.set(event.goal.id, event.occurredAt);
19
+ }
20
+ }
21
+ }
22
+ for (const event of ordered) {
23
+ const family = event.goal.goalFamily;
24
+ if (family?.role !== "superseded")
25
+ continue;
26
+ const canonicalAt = canonicalActivatedAt.get(family.canonicalGoalId);
27
+ if (canonicalAt === undefined || canonicalAt > event.occurredAt) {
28
+ return inconsistency(`goal ${event.goal.id} was superseded before canonical goal ${family.canonicalGoalId} was recorded`, event);
29
+ }
30
+ }
31
+ };
32
+ //# sourceMappingURL=goal-family.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal-family.js","sourceRoot":"","sources":["../src/goal-family.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,KAAyB,EAAE,EAAE,CAClE,IAAI,mBAAmB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAA;AAE5E,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,MAAyC,EACR,EAAE;IACnC,MAAM,YAAY,GAAG,IAAI,GAAG,EAA0B,CAAA;IACtD,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAkB,CAAA;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,CAAA;IACpF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAA;QACpC,MAAM,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACtD,IACE,cAAc,KAAK,SAAS,IAAI,CAC9B,MAAM,KAAK,SAAS;YACpB,MAAM,CAAC,eAAe,KAAK,cAAc,CAAC,eAAe;YACzD,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,IAAI,CACpC,EACD,CAAC;YACD,OAAO,aAAa,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,EAAE,8CAA8C,EAAE,KAAK,CAAC,CAAA;QAClG,CAAC;QACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;YACvC,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC5E,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;YAC3D,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAA;QACpC,IAAI,MAAM,EAAE,IAAI,KAAK,YAAY;YAAE,SAAQ;QAC3C,MAAM,WAAW,GAAG,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;QACpE,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;YAChE,OAAO,aAAa,CAClB,QAAQ,KAAK,CAAC,IAAI,CAAC,EAAE,yCAAyC,MAAM,CAAC,eAAe,eAAe,EACnG,KAAK,CACN,CAAA;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAA"}
package/dist/model.d.ts CHANGED
@@ -31,6 +31,74 @@ export declare const WorkBlocker: Schema.Struct<{
31
31
  }>;
32
32
  export interface WorkBlocker extends Schema.Schema.Type<typeof WorkBlocker> {
33
33
  }
34
+ export declare const WorkAgentHierarchy: Schema.Struct<{
35
+ readonly agent: Schema.Struct<{
36
+ readonly host: Schema.String;
37
+ readonly agentId: Schema.String;
38
+ readonly name: Schema.String;
39
+ readonly paneId: Schema.String;
40
+ readonly relationship: Schema.optionalKey<Schema.Struct<{
41
+ readonly parentAgentId: Schema.String;
42
+ readonly relation: Schema.Literals<readonly ["delegated", "pair", "review"]>;
43
+ }>>;
44
+ }>;
45
+ }>;
46
+ export interface WorkAgentHierarchy extends Schema.Schema.Type<typeof WorkAgentHierarchy> {
47
+ }
48
+ export declare const WorkActivityKind: Schema.Literals<readonly ["note", "status", "blocker", "request", "review", "shipment"]>;
49
+ export type WorkActivityKind = typeof WorkActivityKind.Type;
50
+ export declare const WorkActivity: Schema.Struct<{
51
+ readonly id: Schema.String;
52
+ readonly kind: Schema.Literals<readonly ["note", "status", "blocker", "request", "review", "shipment"]>;
53
+ readonly summary: Schema.String;
54
+ readonly occurredAt: Schema.Number;
55
+ }>;
56
+ export interface WorkActivity extends Schema.Schema.Type<typeof WorkActivity> {
57
+ }
58
+ export declare const WorkApprovalTarget: Schema.Struct<{
59
+ readonly host: Schema.String;
60
+ readonly jobId: Schema.String;
61
+ readonly url: Schema.String;
62
+ }>;
63
+ export interface WorkApprovalTarget extends Schema.Schema.Type<typeof WorkApprovalTarget> {
64
+ }
65
+ /**
66
+ * Checks a decoded approval target against the origin resolved by the
67
+ * configuration-aware approvals boundary before the target is persisted.
68
+ */
69
+ export declare const approvalTargetMatchesOrigin: (target: WorkApprovalTarget, authoritativeOrigin: string) => boolean;
70
+ export declare const WorkRequestState: Schema.Literals<readonly ["open", "approved", "rejected", "fulfilled"]>;
71
+ export type WorkRequestState = typeof WorkRequestState.Type;
72
+ export declare const WorkRequest: Schema.Struct<{
73
+ readonly id: Schema.String;
74
+ readonly summary: Schema.String;
75
+ readonly state: Schema.Literals<readonly ["open", "approved", "rejected", "fulfilled"]>;
76
+ readonly requestedAt: Schema.Number;
77
+ readonly approvalTarget: Schema.NullOr<Schema.Struct<{
78
+ readonly host: Schema.String;
79
+ readonly jobId: Schema.String;
80
+ readonly url: Schema.String;
81
+ }>>;
82
+ }>;
83
+ export interface WorkRequest extends Schema.Schema.Type<typeof WorkRequest> {
84
+ }
85
+ export declare const WorkReviewState: Schema.Literals<readonly ["not_requested", "requested", "changes_requested", "approved"]>;
86
+ export type WorkReviewState = typeof WorkReviewState.Type;
87
+ /** Review status plus the persisted credential-free destination, when known. */
88
+ export declare const WorkReview: Schema.Struct<{
89
+ readonly state: Schema.Literals<readonly ["not_requested", "requested", "changes_requested", "approved"]>;
90
+ readonly summary: Schema.NullOr<Schema.String>;
91
+ readonly updatedAt: Schema.Number;
92
+ readonly url: Schema.NullOr<Schema.String>;
93
+ }>;
94
+ export interface WorkReview extends Schema.Schema.Type<typeof WorkReview> {
95
+ }
96
+ export declare const WorkGoalFamily: Schema.Struct<{
97
+ readonly canonicalGoalId: Schema.String;
98
+ readonly role: Schema.Literals<readonly ["canonical", "superseded"]>;
99
+ }>;
100
+ export interface WorkGoalFamily extends Schema.Schema.Type<typeof WorkGoalFamily> {
101
+ }
34
102
  export declare const WorkGoal: Schema.Struct<{
35
103
  readonly id: Schema.String;
36
104
  readonly title: Schema.String;
@@ -59,6 +127,54 @@ export declare const WorkGoal: Schema.Struct<{
59
127
  readonly agentId: Schema.String;
60
128
  readonly url: Schema.String;
61
129
  }>>;
130
+ readonly goalFamily: Schema.optionalKey<Schema.Struct<{
131
+ readonly canonicalGoalId: Schema.String;
132
+ readonly role: Schema.Literals<readonly ["canonical", "superseded"]>;
133
+ }>>;
134
+ readonly agentHierarchy: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
135
+ readonly agent: Schema.Struct<{
136
+ readonly host: Schema.String;
137
+ readonly agentId: Schema.String;
138
+ readonly name: Schema.String;
139
+ readonly paneId: Schema.String;
140
+ readonly relationship: Schema.optionalKey<Schema.Struct<{
141
+ readonly parentAgentId: Schema.String;
142
+ readonly relation: Schema.Literals<readonly ["delegated", "pair", "review"]>;
143
+ }>>;
144
+ }>;
145
+ }>>>;
146
+ readonly activity: Schema.optionalKey<Schema.$Array<Schema.Struct<{
147
+ readonly id: Schema.String;
148
+ readonly kind: Schema.Literals<readonly ["note", "status", "blocker", "request", "review", "shipment"]>;
149
+ readonly summary: Schema.String;
150
+ readonly occurredAt: Schema.Number;
151
+ }>>>;
152
+ readonly blockers: Schema.optionalKey<Schema.$Array<Schema.Struct<{
153
+ readonly summary: Schema.String;
154
+ readonly since: Schema.Number;
155
+ }>>>;
156
+ readonly requests: Schema.optionalKey<Schema.$Array<Schema.Struct<{
157
+ readonly id: Schema.String;
158
+ readonly summary: Schema.String;
159
+ readonly state: Schema.Literals<readonly ["open", "approved", "rejected", "fulfilled"]>;
160
+ readonly requestedAt: Schema.Number;
161
+ readonly approvalTarget: Schema.NullOr<Schema.Struct<{
162
+ readonly host: Schema.String;
163
+ readonly jobId: Schema.String;
164
+ readonly url: Schema.String;
165
+ }>>;
166
+ }>>>;
167
+ readonly review: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
168
+ readonly state: Schema.Literals<readonly ["not_requested", "requested", "changes_requested", "approved"]>;
169
+ readonly summary: Schema.NullOr<Schema.String>;
170
+ readonly updatedAt: Schema.Number;
171
+ readonly url: Schema.NullOr<Schema.String>;
172
+ }>>>;
173
+ readonly approvalTarget: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
174
+ readonly host: Schema.String;
175
+ readonly jobId: Schema.String;
176
+ readonly url: Schema.String;
177
+ }>>>;
62
178
  readonly createdAt: Schema.Number;
63
179
  readonly updatedAt: Schema.Number;
64
180
  }>;
@@ -96,6 +212,54 @@ export declare const WorkGoalCheckpoint: Schema.Struct<{
96
212
  readonly agentId: Schema.String;
97
213
  readonly url: Schema.String;
98
214
  }>>;
215
+ readonly goalFamily: Schema.optionalKey<Schema.Struct<{
216
+ readonly canonicalGoalId: Schema.String;
217
+ readonly role: Schema.Literals<readonly ["canonical", "superseded"]>;
218
+ }>>;
219
+ readonly agentHierarchy: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
220
+ readonly agent: Schema.Struct<{
221
+ readonly host: Schema.String;
222
+ readonly agentId: Schema.String;
223
+ readonly name: Schema.String;
224
+ readonly paneId: Schema.String;
225
+ readonly relationship: Schema.optionalKey<Schema.Struct<{
226
+ readonly parentAgentId: Schema.String;
227
+ readonly relation: Schema.Literals<readonly ["delegated", "pair", "review"]>;
228
+ }>>;
229
+ }>;
230
+ }>>>;
231
+ readonly activity: Schema.optionalKey<Schema.$Array<Schema.Struct<{
232
+ readonly id: Schema.String;
233
+ readonly kind: Schema.Literals<readonly ["note", "status", "blocker", "request", "review", "shipment"]>;
234
+ readonly summary: Schema.String;
235
+ readonly occurredAt: Schema.Number;
236
+ }>>>;
237
+ readonly blockers: Schema.optionalKey<Schema.$Array<Schema.Struct<{
238
+ readonly summary: Schema.String;
239
+ readonly since: Schema.Number;
240
+ }>>>;
241
+ readonly requests: Schema.optionalKey<Schema.$Array<Schema.Struct<{
242
+ readonly id: Schema.String;
243
+ readonly summary: Schema.String;
244
+ readonly state: Schema.Literals<readonly ["open", "approved", "rejected", "fulfilled"]>;
245
+ readonly requestedAt: Schema.Number;
246
+ readonly approvalTarget: Schema.NullOr<Schema.Struct<{
247
+ readonly host: Schema.String;
248
+ readonly jobId: Schema.String;
249
+ readonly url: Schema.String;
250
+ }>>;
251
+ }>>>;
252
+ readonly review: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
253
+ readonly state: Schema.Literals<readonly ["not_requested", "requested", "changes_requested", "approved"]>;
254
+ readonly summary: Schema.NullOr<Schema.String>;
255
+ readonly updatedAt: Schema.Number;
256
+ readonly url: Schema.NullOr<Schema.String>;
257
+ }>>>;
258
+ readonly approvalTarget: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
259
+ readonly host: Schema.String;
260
+ readonly jobId: Schema.String;
261
+ readonly url: Schema.String;
262
+ }>>>;
99
263
  readonly createdAt: Schema.Number;
100
264
  readonly updatedAt: Schema.Number;
101
265
  }>;
@@ -136,6 +300,54 @@ export declare const WorkSnapshot: Schema.Struct<{
136
300
  readonly agentId: Schema.String;
137
301
  readonly url: Schema.String;
138
302
  }>>;
303
+ readonly goalFamily: Schema.optionalKey<Schema.Struct<{
304
+ readonly canonicalGoalId: Schema.String;
305
+ readonly role: Schema.Literals<readonly ["canonical", "superseded"]>;
306
+ }>>;
307
+ readonly agentHierarchy: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
308
+ readonly agent: Schema.Struct<{
309
+ readonly host: Schema.String;
310
+ readonly agentId: Schema.String;
311
+ readonly name: Schema.String;
312
+ readonly paneId: Schema.String;
313
+ readonly relationship: Schema.optionalKey<Schema.Struct<{
314
+ readonly parentAgentId: Schema.String;
315
+ readonly relation: Schema.Literals<readonly ["delegated", "pair", "review"]>;
316
+ }>>;
317
+ }>;
318
+ }>>>;
319
+ readonly activity: Schema.optionalKey<Schema.$Array<Schema.Struct<{
320
+ readonly id: Schema.String;
321
+ readonly kind: Schema.Literals<readonly ["note", "status", "blocker", "request", "review", "shipment"]>;
322
+ readonly summary: Schema.String;
323
+ readonly occurredAt: Schema.Number;
324
+ }>>>;
325
+ readonly blockers: Schema.optionalKey<Schema.$Array<Schema.Struct<{
326
+ readonly summary: Schema.String;
327
+ readonly since: Schema.Number;
328
+ }>>>;
329
+ readonly requests: Schema.optionalKey<Schema.$Array<Schema.Struct<{
330
+ readonly id: Schema.String;
331
+ readonly summary: Schema.String;
332
+ readonly state: Schema.Literals<readonly ["open", "approved", "rejected", "fulfilled"]>;
333
+ readonly requestedAt: Schema.Number;
334
+ readonly approvalTarget: Schema.NullOr<Schema.Struct<{
335
+ readonly host: Schema.String;
336
+ readonly jobId: Schema.String;
337
+ readonly url: Schema.String;
338
+ }>>;
339
+ }>>>;
340
+ readonly review: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
341
+ readonly state: Schema.Literals<readonly ["not_requested", "requested", "changes_requested", "approved"]>;
342
+ readonly summary: Schema.NullOr<Schema.String>;
343
+ readonly updatedAt: Schema.Number;
344
+ readonly url: Schema.NullOr<Schema.String>;
345
+ }>>>;
346
+ readonly approvalTarget: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
347
+ readonly host: Schema.String;
348
+ readonly jobId: Schema.String;
349
+ readonly url: Schema.String;
350
+ }>>>;
139
351
  readonly createdAt: Schema.Number;
140
352
  readonly updatedAt: Schema.Number;
141
353
  }>>;
@@ -176,6 +388,54 @@ export declare const WorkSnapshots: Schema.Struct<{
176
388
  readonly agentId: Schema.String;
177
389
  readonly url: Schema.String;
178
390
  }>>;
391
+ readonly goalFamily: Schema.optionalKey<Schema.Struct<{
392
+ readonly canonicalGoalId: Schema.String;
393
+ readonly role: Schema.Literals<readonly ["canonical", "superseded"]>;
394
+ }>>;
395
+ readonly agentHierarchy: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
396
+ readonly agent: Schema.Struct<{
397
+ readonly host: Schema.String;
398
+ readonly agentId: Schema.String;
399
+ readonly name: Schema.String;
400
+ readonly paneId: Schema.String;
401
+ readonly relationship: Schema.optionalKey<Schema.Struct<{
402
+ readonly parentAgentId: Schema.String;
403
+ readonly relation: Schema.Literals<readonly ["delegated", "pair", "review"]>;
404
+ }>>;
405
+ }>;
406
+ }>>>;
407
+ readonly activity: Schema.optionalKey<Schema.$Array<Schema.Struct<{
408
+ readonly id: Schema.String;
409
+ readonly kind: Schema.Literals<readonly ["note", "status", "blocker", "request", "review", "shipment"]>;
410
+ readonly summary: Schema.String;
411
+ readonly occurredAt: Schema.Number;
412
+ }>>>;
413
+ readonly blockers: Schema.optionalKey<Schema.$Array<Schema.Struct<{
414
+ readonly summary: Schema.String;
415
+ readonly since: Schema.Number;
416
+ }>>>;
417
+ readonly requests: Schema.optionalKey<Schema.$Array<Schema.Struct<{
418
+ readonly id: Schema.String;
419
+ readonly summary: Schema.String;
420
+ readonly state: Schema.Literals<readonly ["open", "approved", "rejected", "fulfilled"]>;
421
+ readonly requestedAt: Schema.Number;
422
+ readonly approvalTarget: Schema.NullOr<Schema.Struct<{
423
+ readonly host: Schema.String;
424
+ readonly jobId: Schema.String;
425
+ readonly url: Schema.String;
426
+ }>>;
427
+ }>>>;
428
+ readonly review: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
429
+ readonly state: Schema.Literals<readonly ["not_requested", "requested", "changes_requested", "approved"]>;
430
+ readonly summary: Schema.NullOr<Schema.String>;
431
+ readonly updatedAt: Schema.Number;
432
+ readonly url: Schema.NullOr<Schema.String>;
433
+ }>>>;
434
+ readonly approvalTarget: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
435
+ readonly host: Schema.String;
436
+ readonly jobId: Schema.String;
437
+ readonly url: Schema.String;
438
+ }>>>;
179
439
  readonly createdAt: Schema.Number;
180
440
  readonly updatedAt: Schema.Number;
181
441
  }>>;
@@ -212,6 +472,54 @@ export declare const WorkSnapshots: Schema.Struct<{
212
472
  readonly agentId: Schema.String;
213
473
  readonly url: Schema.String;
214
474
  }>>;
475
+ readonly goalFamily: Schema.optionalKey<Schema.Struct<{
476
+ readonly canonicalGoalId: Schema.String;
477
+ readonly role: Schema.Literals<readonly ["canonical", "superseded"]>;
478
+ }>>;
479
+ readonly agentHierarchy: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
480
+ readonly agent: Schema.Struct<{
481
+ readonly host: Schema.String;
482
+ readonly agentId: Schema.String;
483
+ readonly name: Schema.String;
484
+ readonly paneId: Schema.String;
485
+ readonly relationship: Schema.optionalKey<Schema.Struct<{
486
+ readonly parentAgentId: Schema.String;
487
+ readonly relation: Schema.Literals<readonly ["delegated", "pair", "review"]>;
488
+ }>>;
489
+ }>;
490
+ }>>>;
491
+ readonly activity: Schema.optionalKey<Schema.$Array<Schema.Struct<{
492
+ readonly id: Schema.String;
493
+ readonly kind: Schema.Literals<readonly ["note", "status", "blocker", "request", "review", "shipment"]>;
494
+ readonly summary: Schema.String;
495
+ readonly occurredAt: Schema.Number;
496
+ }>>>;
497
+ readonly blockers: Schema.optionalKey<Schema.$Array<Schema.Struct<{
498
+ readonly summary: Schema.String;
499
+ readonly since: Schema.Number;
500
+ }>>>;
501
+ readonly requests: Schema.optionalKey<Schema.$Array<Schema.Struct<{
502
+ readonly id: Schema.String;
503
+ readonly summary: Schema.String;
504
+ readonly state: Schema.Literals<readonly ["open", "approved", "rejected", "fulfilled"]>;
505
+ readonly requestedAt: Schema.Number;
506
+ readonly approvalTarget: Schema.NullOr<Schema.Struct<{
507
+ readonly host: Schema.String;
508
+ readonly jobId: Schema.String;
509
+ readonly url: Schema.String;
510
+ }>>;
511
+ }>>>;
512
+ readonly review: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
513
+ readonly state: Schema.Literals<readonly ["not_requested", "requested", "changes_requested", "approved"]>;
514
+ readonly summary: Schema.NullOr<Schema.String>;
515
+ readonly updatedAt: Schema.Number;
516
+ readonly url: Schema.NullOr<Schema.String>;
517
+ }>>>;
518
+ readonly approvalTarget: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
519
+ readonly host: Schema.String;
520
+ readonly jobId: Schema.String;
521
+ readonly url: Schema.String;
522
+ }>>>;
215
523
  readonly createdAt: Schema.Number;
216
524
  readonly updatedAt: Schema.Number;
217
525
  }>>;
@@ -248,6 +556,54 @@ export declare const WorkSnapshots: Schema.Struct<{
248
556
  readonly agentId: Schema.String;
249
557
  readonly url: Schema.String;
250
558
  }>>;
559
+ readonly goalFamily: Schema.optionalKey<Schema.Struct<{
560
+ readonly canonicalGoalId: Schema.String;
561
+ readonly role: Schema.Literals<readonly ["canonical", "superseded"]>;
562
+ }>>;
563
+ readonly agentHierarchy: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
564
+ readonly agent: Schema.Struct<{
565
+ readonly host: Schema.String;
566
+ readonly agentId: Schema.String;
567
+ readonly name: Schema.String;
568
+ readonly paneId: Schema.String;
569
+ readonly relationship: Schema.optionalKey<Schema.Struct<{
570
+ readonly parentAgentId: Schema.String;
571
+ readonly relation: Schema.Literals<readonly ["delegated", "pair", "review"]>;
572
+ }>>;
573
+ }>;
574
+ }>>>;
575
+ readonly activity: Schema.optionalKey<Schema.$Array<Schema.Struct<{
576
+ readonly id: Schema.String;
577
+ readonly kind: Schema.Literals<readonly ["note", "status", "blocker", "request", "review", "shipment"]>;
578
+ readonly summary: Schema.String;
579
+ readonly occurredAt: Schema.Number;
580
+ }>>>;
581
+ readonly blockers: Schema.optionalKey<Schema.$Array<Schema.Struct<{
582
+ readonly summary: Schema.String;
583
+ readonly since: Schema.Number;
584
+ }>>>;
585
+ readonly requests: Schema.optionalKey<Schema.$Array<Schema.Struct<{
586
+ readonly id: Schema.String;
587
+ readonly summary: Schema.String;
588
+ readonly state: Schema.Literals<readonly ["open", "approved", "rejected", "fulfilled"]>;
589
+ readonly requestedAt: Schema.Number;
590
+ readonly approvalTarget: Schema.NullOr<Schema.Struct<{
591
+ readonly host: Schema.String;
592
+ readonly jobId: Schema.String;
593
+ readonly url: Schema.String;
594
+ }>>;
595
+ }>>>;
596
+ readonly review: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
597
+ readonly state: Schema.Literals<readonly ["not_requested", "requested", "changes_requested", "approved"]>;
598
+ readonly summary: Schema.NullOr<Schema.String>;
599
+ readonly updatedAt: Schema.Number;
600
+ readonly url: Schema.NullOr<Schema.String>;
601
+ }>>>;
602
+ readonly approvalTarget: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
603
+ readonly host: Schema.String;
604
+ readonly jobId: Schema.String;
605
+ readonly url: Schema.String;
606
+ }>>>;
251
607
  readonly createdAt: Schema.Number;
252
608
  readonly updatedAt: Schema.Number;
253
609
  }>>;
@@ -284,6 +640,54 @@ export declare const WorkSnapshots: Schema.Struct<{
284
640
  readonly agentId: Schema.String;
285
641
  readonly url: Schema.String;
286
642
  }>>;
643
+ readonly goalFamily: Schema.optionalKey<Schema.Struct<{
644
+ readonly canonicalGoalId: Schema.String;
645
+ readonly role: Schema.Literals<readonly ["canonical", "superseded"]>;
646
+ }>>;
647
+ readonly agentHierarchy: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
648
+ readonly agent: Schema.Struct<{
649
+ readonly host: Schema.String;
650
+ readonly agentId: Schema.String;
651
+ readonly name: Schema.String;
652
+ readonly paneId: Schema.String;
653
+ readonly relationship: Schema.optionalKey<Schema.Struct<{
654
+ readonly parentAgentId: Schema.String;
655
+ readonly relation: Schema.Literals<readonly ["delegated", "pair", "review"]>;
656
+ }>>;
657
+ }>;
658
+ }>>>;
659
+ readonly activity: Schema.optionalKey<Schema.$Array<Schema.Struct<{
660
+ readonly id: Schema.String;
661
+ readonly kind: Schema.Literals<readonly ["note", "status", "blocker", "request", "review", "shipment"]>;
662
+ readonly summary: Schema.String;
663
+ readonly occurredAt: Schema.Number;
664
+ }>>>;
665
+ readonly blockers: Schema.optionalKey<Schema.$Array<Schema.Struct<{
666
+ readonly summary: Schema.String;
667
+ readonly since: Schema.Number;
668
+ }>>>;
669
+ readonly requests: Schema.optionalKey<Schema.$Array<Schema.Struct<{
670
+ readonly id: Schema.String;
671
+ readonly summary: Schema.String;
672
+ readonly state: Schema.Literals<readonly ["open", "approved", "rejected", "fulfilled"]>;
673
+ readonly requestedAt: Schema.Number;
674
+ readonly approvalTarget: Schema.NullOr<Schema.Struct<{
675
+ readonly host: Schema.String;
676
+ readonly jobId: Schema.String;
677
+ readonly url: Schema.String;
678
+ }>>;
679
+ }>>>;
680
+ readonly review: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
681
+ readonly state: Schema.Literals<readonly ["not_requested", "requested", "changes_requested", "approved"]>;
682
+ readonly summary: Schema.NullOr<Schema.String>;
683
+ readonly updatedAt: Schema.Number;
684
+ readonly url: Schema.NullOr<Schema.String>;
685
+ }>>>;
686
+ readonly approvalTarget: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
687
+ readonly host: Schema.String;
688
+ readonly jobId: Schema.String;
689
+ readonly url: Schema.String;
690
+ }>>>;
287
691
  readonly createdAt: Schema.Number;
288
692
  readonly updatedAt: Schema.Number;
289
693
  }>>;
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAS/B,eAAO,MAAM,oBAAoB,QAAS,CAAA;AAC1C,eAAO,MAAM,oBAAoB,OAAQ,CAAA;AAEzC,eAAO,MAAM,UAAU,eAAa,CAAA;AACpC,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAE/C,eAAO,MAAM,SAAS,gGAAwF,CAAA;AAC9G,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAE7C,eAAO,MAAM,aAAa,qFAA6E,CAAA;AACvG,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD,eAAO,MAAM,SAAS;;;EAAgD,CAAA;AACtE,MAAM,WAAW,SAAU,SAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC;CAAG;AAE1E,eAAO,MAAM,cAAc;;;EAGzB,CAAA;AACF,MAAM,WAAW,cAAe,SAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,cAAc,CAAC;CAAG;AAEpF,eAAO,MAAM,SAAS;;;EAGpB,CAAA;AACF,MAAM,WAAW,SAAU,SAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC;CAAG;AAE1E,eAAO,MAAM,WAAW;;;EAGtB,CAAA;AACF,MAAM,WAAW,WAAY,SAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,WAAW,CAAC;CAAG;AAE9E,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmBpB,CAAA;AACD,MAAM,WAAW,QAAS,SAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC;CAAG;AAExE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU9B,CAAA;AACD,MAAM,WAAW,kBAAmB,SAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,kBAAkB,CAAC;CAAG;AAE5F,eAAO,MAAM,kBAAkB,2DAAmD,CAAA;AAClF,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAA;AAE/D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKvB,CAAA;AACF,MAAM,WAAW,YAAa,SAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,YAAY,CAAC;CAAG;AAEhF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMxB,CAAA;AACF,MAAM,WAAW,aAAc,SAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,aAAa,CAAC;CAAG"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}