@knpkv/herdr-work 0.2.0 → 0.3.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 +9 -1
- package/dist/model.d.ts +370 -0
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +103 -2
- package/dist/model.js.map +1 -1
- package/dist/projection.d.ts +176 -0
- package/dist/projection.d.ts.map +1 -1
- package/dist/service.d.ts +176 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/store.d.ts +44 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/view.d.ts.map +1 -1
- package/dist/view.js +40 -2
- package/dist/view.js.map +1 -1
- package/package.json +4 -2
- package/src/styles.css +46 -3
package/README.md
CHANGED
|
@@ -4,4 +4,12 @@ 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.
|
|
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.
|
|
8
|
+
|
|
9
|
+
`WorkBoard` renders these persisted outbound-link forms:
|
|
10
|
+
|
|
11
|
+
- `AgentConnectTarget.url` — local terminal handoff.
|
|
12
|
+
- `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.
|
|
13
|
+
- `WorkReview.url` — review destination.
|
|
14
|
+
|
|
15
|
+
Every URL uses the credential-free HTTP(S) `LinkUrl` boundary. Provider credentials and private locators never enter these persisted or browser-visible links.
|
package/dist/model.d.ts
CHANGED
|
@@ -31,6 +31,68 @@ 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
|
+
}
|
|
34
96
|
export declare const WorkGoal: Schema.Struct<{
|
|
35
97
|
readonly id: Schema.String;
|
|
36
98
|
readonly title: Schema.String;
|
|
@@ -59,6 +121,50 @@ export declare const WorkGoal: Schema.Struct<{
|
|
|
59
121
|
readonly agentId: Schema.String;
|
|
60
122
|
readonly url: Schema.String;
|
|
61
123
|
}>>;
|
|
124
|
+
readonly agentHierarchy: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
125
|
+
readonly agent: Schema.Struct<{
|
|
126
|
+
readonly host: Schema.String;
|
|
127
|
+
readonly agentId: Schema.String;
|
|
128
|
+
readonly name: Schema.String;
|
|
129
|
+
readonly paneId: Schema.String;
|
|
130
|
+
readonly relationship: Schema.optionalKey<Schema.Struct<{
|
|
131
|
+
readonly parentAgentId: Schema.String;
|
|
132
|
+
readonly relation: Schema.Literals<readonly ["delegated", "pair", "review"]>;
|
|
133
|
+
}>>;
|
|
134
|
+
}>;
|
|
135
|
+
}>>>;
|
|
136
|
+
readonly activity: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
137
|
+
readonly id: Schema.String;
|
|
138
|
+
readonly kind: Schema.Literals<readonly ["note", "status", "blocker", "request", "review", "shipment"]>;
|
|
139
|
+
readonly summary: Schema.String;
|
|
140
|
+
readonly occurredAt: Schema.Number;
|
|
141
|
+
}>>>;
|
|
142
|
+
readonly blockers: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
143
|
+
readonly summary: Schema.String;
|
|
144
|
+
readonly since: Schema.Number;
|
|
145
|
+
}>>>;
|
|
146
|
+
readonly requests: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
147
|
+
readonly id: Schema.String;
|
|
148
|
+
readonly summary: Schema.String;
|
|
149
|
+
readonly state: Schema.Literals<readonly ["open", "approved", "rejected", "fulfilled"]>;
|
|
150
|
+
readonly requestedAt: Schema.Number;
|
|
151
|
+
readonly approvalTarget: Schema.NullOr<Schema.Struct<{
|
|
152
|
+
readonly host: Schema.String;
|
|
153
|
+
readonly jobId: Schema.String;
|
|
154
|
+
readonly url: Schema.String;
|
|
155
|
+
}>>;
|
|
156
|
+
}>>>;
|
|
157
|
+
readonly review: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
158
|
+
readonly state: Schema.Literals<readonly ["not_requested", "requested", "changes_requested", "approved"]>;
|
|
159
|
+
readonly summary: Schema.NullOr<Schema.String>;
|
|
160
|
+
readonly updatedAt: Schema.Number;
|
|
161
|
+
readonly url: Schema.NullOr<Schema.String>;
|
|
162
|
+
}>>>;
|
|
163
|
+
readonly approvalTarget: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
164
|
+
readonly host: Schema.String;
|
|
165
|
+
readonly jobId: Schema.String;
|
|
166
|
+
readonly url: Schema.String;
|
|
167
|
+
}>>>;
|
|
62
168
|
readonly createdAt: Schema.Number;
|
|
63
169
|
readonly updatedAt: Schema.Number;
|
|
64
170
|
}>;
|
|
@@ -96,6 +202,50 @@ export declare const WorkGoalCheckpoint: Schema.Struct<{
|
|
|
96
202
|
readonly agentId: Schema.String;
|
|
97
203
|
readonly url: Schema.String;
|
|
98
204
|
}>>;
|
|
205
|
+
readonly agentHierarchy: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
206
|
+
readonly agent: Schema.Struct<{
|
|
207
|
+
readonly host: Schema.String;
|
|
208
|
+
readonly agentId: Schema.String;
|
|
209
|
+
readonly name: Schema.String;
|
|
210
|
+
readonly paneId: Schema.String;
|
|
211
|
+
readonly relationship: Schema.optionalKey<Schema.Struct<{
|
|
212
|
+
readonly parentAgentId: Schema.String;
|
|
213
|
+
readonly relation: Schema.Literals<readonly ["delegated", "pair", "review"]>;
|
|
214
|
+
}>>;
|
|
215
|
+
}>;
|
|
216
|
+
}>>>;
|
|
217
|
+
readonly activity: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
218
|
+
readonly id: Schema.String;
|
|
219
|
+
readonly kind: Schema.Literals<readonly ["note", "status", "blocker", "request", "review", "shipment"]>;
|
|
220
|
+
readonly summary: Schema.String;
|
|
221
|
+
readonly occurredAt: Schema.Number;
|
|
222
|
+
}>>>;
|
|
223
|
+
readonly blockers: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
224
|
+
readonly summary: Schema.String;
|
|
225
|
+
readonly since: Schema.Number;
|
|
226
|
+
}>>>;
|
|
227
|
+
readonly requests: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
228
|
+
readonly id: Schema.String;
|
|
229
|
+
readonly summary: Schema.String;
|
|
230
|
+
readonly state: Schema.Literals<readonly ["open", "approved", "rejected", "fulfilled"]>;
|
|
231
|
+
readonly requestedAt: Schema.Number;
|
|
232
|
+
readonly approvalTarget: Schema.NullOr<Schema.Struct<{
|
|
233
|
+
readonly host: Schema.String;
|
|
234
|
+
readonly jobId: Schema.String;
|
|
235
|
+
readonly url: Schema.String;
|
|
236
|
+
}>>;
|
|
237
|
+
}>>>;
|
|
238
|
+
readonly review: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
239
|
+
readonly state: Schema.Literals<readonly ["not_requested", "requested", "changes_requested", "approved"]>;
|
|
240
|
+
readonly summary: Schema.NullOr<Schema.String>;
|
|
241
|
+
readonly updatedAt: Schema.Number;
|
|
242
|
+
readonly url: Schema.NullOr<Schema.String>;
|
|
243
|
+
}>>>;
|
|
244
|
+
readonly approvalTarget: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
245
|
+
readonly host: Schema.String;
|
|
246
|
+
readonly jobId: Schema.String;
|
|
247
|
+
readonly url: Schema.String;
|
|
248
|
+
}>>>;
|
|
99
249
|
readonly createdAt: Schema.Number;
|
|
100
250
|
readonly updatedAt: Schema.Number;
|
|
101
251
|
}>;
|
|
@@ -136,6 +286,50 @@ export declare const WorkSnapshot: Schema.Struct<{
|
|
|
136
286
|
readonly agentId: Schema.String;
|
|
137
287
|
readonly url: Schema.String;
|
|
138
288
|
}>>;
|
|
289
|
+
readonly agentHierarchy: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
290
|
+
readonly agent: Schema.Struct<{
|
|
291
|
+
readonly host: Schema.String;
|
|
292
|
+
readonly agentId: Schema.String;
|
|
293
|
+
readonly name: Schema.String;
|
|
294
|
+
readonly paneId: Schema.String;
|
|
295
|
+
readonly relationship: Schema.optionalKey<Schema.Struct<{
|
|
296
|
+
readonly parentAgentId: Schema.String;
|
|
297
|
+
readonly relation: Schema.Literals<readonly ["delegated", "pair", "review"]>;
|
|
298
|
+
}>>;
|
|
299
|
+
}>;
|
|
300
|
+
}>>>;
|
|
301
|
+
readonly activity: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
302
|
+
readonly id: Schema.String;
|
|
303
|
+
readonly kind: Schema.Literals<readonly ["note", "status", "blocker", "request", "review", "shipment"]>;
|
|
304
|
+
readonly summary: Schema.String;
|
|
305
|
+
readonly occurredAt: Schema.Number;
|
|
306
|
+
}>>>;
|
|
307
|
+
readonly blockers: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
308
|
+
readonly summary: Schema.String;
|
|
309
|
+
readonly since: Schema.Number;
|
|
310
|
+
}>>>;
|
|
311
|
+
readonly requests: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
312
|
+
readonly id: Schema.String;
|
|
313
|
+
readonly summary: Schema.String;
|
|
314
|
+
readonly state: Schema.Literals<readonly ["open", "approved", "rejected", "fulfilled"]>;
|
|
315
|
+
readonly requestedAt: Schema.Number;
|
|
316
|
+
readonly approvalTarget: Schema.NullOr<Schema.Struct<{
|
|
317
|
+
readonly host: Schema.String;
|
|
318
|
+
readonly jobId: Schema.String;
|
|
319
|
+
readonly url: Schema.String;
|
|
320
|
+
}>>;
|
|
321
|
+
}>>>;
|
|
322
|
+
readonly review: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
323
|
+
readonly state: Schema.Literals<readonly ["not_requested", "requested", "changes_requested", "approved"]>;
|
|
324
|
+
readonly summary: Schema.NullOr<Schema.String>;
|
|
325
|
+
readonly updatedAt: Schema.Number;
|
|
326
|
+
readonly url: Schema.NullOr<Schema.String>;
|
|
327
|
+
}>>>;
|
|
328
|
+
readonly approvalTarget: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
329
|
+
readonly host: Schema.String;
|
|
330
|
+
readonly jobId: Schema.String;
|
|
331
|
+
readonly url: Schema.String;
|
|
332
|
+
}>>>;
|
|
139
333
|
readonly createdAt: Schema.Number;
|
|
140
334
|
readonly updatedAt: Schema.Number;
|
|
141
335
|
}>>;
|
|
@@ -176,6 +370,50 @@ export declare const WorkSnapshots: Schema.Struct<{
|
|
|
176
370
|
readonly agentId: Schema.String;
|
|
177
371
|
readonly url: Schema.String;
|
|
178
372
|
}>>;
|
|
373
|
+
readonly agentHierarchy: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
374
|
+
readonly agent: Schema.Struct<{
|
|
375
|
+
readonly host: Schema.String;
|
|
376
|
+
readonly agentId: Schema.String;
|
|
377
|
+
readonly name: Schema.String;
|
|
378
|
+
readonly paneId: Schema.String;
|
|
379
|
+
readonly relationship: Schema.optionalKey<Schema.Struct<{
|
|
380
|
+
readonly parentAgentId: Schema.String;
|
|
381
|
+
readonly relation: Schema.Literals<readonly ["delegated", "pair", "review"]>;
|
|
382
|
+
}>>;
|
|
383
|
+
}>;
|
|
384
|
+
}>>>;
|
|
385
|
+
readonly activity: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
386
|
+
readonly id: Schema.String;
|
|
387
|
+
readonly kind: Schema.Literals<readonly ["note", "status", "blocker", "request", "review", "shipment"]>;
|
|
388
|
+
readonly summary: Schema.String;
|
|
389
|
+
readonly occurredAt: Schema.Number;
|
|
390
|
+
}>>>;
|
|
391
|
+
readonly blockers: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
392
|
+
readonly summary: Schema.String;
|
|
393
|
+
readonly since: Schema.Number;
|
|
394
|
+
}>>>;
|
|
395
|
+
readonly requests: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
396
|
+
readonly id: Schema.String;
|
|
397
|
+
readonly summary: Schema.String;
|
|
398
|
+
readonly state: Schema.Literals<readonly ["open", "approved", "rejected", "fulfilled"]>;
|
|
399
|
+
readonly requestedAt: Schema.Number;
|
|
400
|
+
readonly approvalTarget: Schema.NullOr<Schema.Struct<{
|
|
401
|
+
readonly host: Schema.String;
|
|
402
|
+
readonly jobId: Schema.String;
|
|
403
|
+
readonly url: Schema.String;
|
|
404
|
+
}>>;
|
|
405
|
+
}>>>;
|
|
406
|
+
readonly review: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
407
|
+
readonly state: Schema.Literals<readonly ["not_requested", "requested", "changes_requested", "approved"]>;
|
|
408
|
+
readonly summary: Schema.NullOr<Schema.String>;
|
|
409
|
+
readonly updatedAt: Schema.Number;
|
|
410
|
+
readonly url: Schema.NullOr<Schema.String>;
|
|
411
|
+
}>>>;
|
|
412
|
+
readonly approvalTarget: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
413
|
+
readonly host: Schema.String;
|
|
414
|
+
readonly jobId: Schema.String;
|
|
415
|
+
readonly url: Schema.String;
|
|
416
|
+
}>>>;
|
|
179
417
|
readonly createdAt: Schema.Number;
|
|
180
418
|
readonly updatedAt: Schema.Number;
|
|
181
419
|
}>>;
|
|
@@ -212,6 +450,50 @@ export declare const WorkSnapshots: Schema.Struct<{
|
|
|
212
450
|
readonly agentId: Schema.String;
|
|
213
451
|
readonly url: Schema.String;
|
|
214
452
|
}>>;
|
|
453
|
+
readonly agentHierarchy: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
454
|
+
readonly agent: Schema.Struct<{
|
|
455
|
+
readonly host: Schema.String;
|
|
456
|
+
readonly agentId: Schema.String;
|
|
457
|
+
readonly name: Schema.String;
|
|
458
|
+
readonly paneId: Schema.String;
|
|
459
|
+
readonly relationship: Schema.optionalKey<Schema.Struct<{
|
|
460
|
+
readonly parentAgentId: Schema.String;
|
|
461
|
+
readonly relation: Schema.Literals<readonly ["delegated", "pair", "review"]>;
|
|
462
|
+
}>>;
|
|
463
|
+
}>;
|
|
464
|
+
}>>>;
|
|
465
|
+
readonly activity: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
466
|
+
readonly id: Schema.String;
|
|
467
|
+
readonly kind: Schema.Literals<readonly ["note", "status", "blocker", "request", "review", "shipment"]>;
|
|
468
|
+
readonly summary: Schema.String;
|
|
469
|
+
readonly occurredAt: Schema.Number;
|
|
470
|
+
}>>>;
|
|
471
|
+
readonly blockers: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
472
|
+
readonly summary: Schema.String;
|
|
473
|
+
readonly since: Schema.Number;
|
|
474
|
+
}>>>;
|
|
475
|
+
readonly requests: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
476
|
+
readonly id: Schema.String;
|
|
477
|
+
readonly summary: Schema.String;
|
|
478
|
+
readonly state: Schema.Literals<readonly ["open", "approved", "rejected", "fulfilled"]>;
|
|
479
|
+
readonly requestedAt: Schema.Number;
|
|
480
|
+
readonly approvalTarget: Schema.NullOr<Schema.Struct<{
|
|
481
|
+
readonly host: Schema.String;
|
|
482
|
+
readonly jobId: Schema.String;
|
|
483
|
+
readonly url: Schema.String;
|
|
484
|
+
}>>;
|
|
485
|
+
}>>>;
|
|
486
|
+
readonly review: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
487
|
+
readonly state: Schema.Literals<readonly ["not_requested", "requested", "changes_requested", "approved"]>;
|
|
488
|
+
readonly summary: Schema.NullOr<Schema.String>;
|
|
489
|
+
readonly updatedAt: Schema.Number;
|
|
490
|
+
readonly url: Schema.NullOr<Schema.String>;
|
|
491
|
+
}>>>;
|
|
492
|
+
readonly approvalTarget: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
493
|
+
readonly host: Schema.String;
|
|
494
|
+
readonly jobId: Schema.String;
|
|
495
|
+
readonly url: Schema.String;
|
|
496
|
+
}>>>;
|
|
215
497
|
readonly createdAt: Schema.Number;
|
|
216
498
|
readonly updatedAt: Schema.Number;
|
|
217
499
|
}>>;
|
|
@@ -248,6 +530,50 @@ export declare const WorkSnapshots: Schema.Struct<{
|
|
|
248
530
|
readonly agentId: Schema.String;
|
|
249
531
|
readonly url: Schema.String;
|
|
250
532
|
}>>;
|
|
533
|
+
readonly agentHierarchy: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
534
|
+
readonly agent: Schema.Struct<{
|
|
535
|
+
readonly host: Schema.String;
|
|
536
|
+
readonly agentId: Schema.String;
|
|
537
|
+
readonly name: Schema.String;
|
|
538
|
+
readonly paneId: Schema.String;
|
|
539
|
+
readonly relationship: Schema.optionalKey<Schema.Struct<{
|
|
540
|
+
readonly parentAgentId: Schema.String;
|
|
541
|
+
readonly relation: Schema.Literals<readonly ["delegated", "pair", "review"]>;
|
|
542
|
+
}>>;
|
|
543
|
+
}>;
|
|
544
|
+
}>>>;
|
|
545
|
+
readonly activity: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
546
|
+
readonly id: Schema.String;
|
|
547
|
+
readonly kind: Schema.Literals<readonly ["note", "status", "blocker", "request", "review", "shipment"]>;
|
|
548
|
+
readonly summary: Schema.String;
|
|
549
|
+
readonly occurredAt: Schema.Number;
|
|
550
|
+
}>>>;
|
|
551
|
+
readonly blockers: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
552
|
+
readonly summary: Schema.String;
|
|
553
|
+
readonly since: Schema.Number;
|
|
554
|
+
}>>>;
|
|
555
|
+
readonly requests: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
556
|
+
readonly id: Schema.String;
|
|
557
|
+
readonly summary: Schema.String;
|
|
558
|
+
readonly state: Schema.Literals<readonly ["open", "approved", "rejected", "fulfilled"]>;
|
|
559
|
+
readonly requestedAt: Schema.Number;
|
|
560
|
+
readonly approvalTarget: Schema.NullOr<Schema.Struct<{
|
|
561
|
+
readonly host: Schema.String;
|
|
562
|
+
readonly jobId: Schema.String;
|
|
563
|
+
readonly url: Schema.String;
|
|
564
|
+
}>>;
|
|
565
|
+
}>>>;
|
|
566
|
+
readonly review: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
567
|
+
readonly state: Schema.Literals<readonly ["not_requested", "requested", "changes_requested", "approved"]>;
|
|
568
|
+
readonly summary: Schema.NullOr<Schema.String>;
|
|
569
|
+
readonly updatedAt: Schema.Number;
|
|
570
|
+
readonly url: Schema.NullOr<Schema.String>;
|
|
571
|
+
}>>>;
|
|
572
|
+
readonly approvalTarget: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
573
|
+
readonly host: Schema.String;
|
|
574
|
+
readonly jobId: Schema.String;
|
|
575
|
+
readonly url: Schema.String;
|
|
576
|
+
}>>>;
|
|
251
577
|
readonly createdAt: Schema.Number;
|
|
252
578
|
readonly updatedAt: Schema.Number;
|
|
253
579
|
}>>;
|
|
@@ -284,6 +610,50 @@ export declare const WorkSnapshots: Schema.Struct<{
|
|
|
284
610
|
readonly agentId: Schema.String;
|
|
285
611
|
readonly url: Schema.String;
|
|
286
612
|
}>>;
|
|
613
|
+
readonly agentHierarchy: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
614
|
+
readonly agent: Schema.Struct<{
|
|
615
|
+
readonly host: Schema.String;
|
|
616
|
+
readonly agentId: Schema.String;
|
|
617
|
+
readonly name: Schema.String;
|
|
618
|
+
readonly paneId: Schema.String;
|
|
619
|
+
readonly relationship: Schema.optionalKey<Schema.Struct<{
|
|
620
|
+
readonly parentAgentId: Schema.String;
|
|
621
|
+
readonly relation: Schema.Literals<readonly ["delegated", "pair", "review"]>;
|
|
622
|
+
}>>;
|
|
623
|
+
}>;
|
|
624
|
+
}>>>;
|
|
625
|
+
readonly activity: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
626
|
+
readonly id: Schema.String;
|
|
627
|
+
readonly kind: Schema.Literals<readonly ["note", "status", "blocker", "request", "review", "shipment"]>;
|
|
628
|
+
readonly summary: Schema.String;
|
|
629
|
+
readonly occurredAt: Schema.Number;
|
|
630
|
+
}>>>;
|
|
631
|
+
readonly blockers: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
632
|
+
readonly summary: Schema.String;
|
|
633
|
+
readonly since: Schema.Number;
|
|
634
|
+
}>>>;
|
|
635
|
+
readonly requests: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
636
|
+
readonly id: Schema.String;
|
|
637
|
+
readonly summary: Schema.String;
|
|
638
|
+
readonly state: Schema.Literals<readonly ["open", "approved", "rejected", "fulfilled"]>;
|
|
639
|
+
readonly requestedAt: Schema.Number;
|
|
640
|
+
readonly approvalTarget: Schema.NullOr<Schema.Struct<{
|
|
641
|
+
readonly host: Schema.String;
|
|
642
|
+
readonly jobId: Schema.String;
|
|
643
|
+
readonly url: Schema.String;
|
|
644
|
+
}>>;
|
|
645
|
+
}>>>;
|
|
646
|
+
readonly review: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
647
|
+
readonly state: Schema.Literals<readonly ["not_requested", "requested", "changes_requested", "approved"]>;
|
|
648
|
+
readonly summary: Schema.NullOr<Schema.String>;
|
|
649
|
+
readonly updatedAt: Schema.Number;
|
|
650
|
+
readonly url: Schema.NullOr<Schema.String>;
|
|
651
|
+
}>>>;
|
|
652
|
+
readonly approvalTarget: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
653
|
+
readonly host: Schema.String;
|
|
654
|
+
readonly jobId: Schema.String;
|
|
655
|
+
readonly url: Schema.String;
|
|
656
|
+
}>>>;
|
|
287
657
|
readonly createdAt: Schema.Number;
|
|
288
658
|
readonly updatedAt: Schema.Number;
|
|
289
659
|
}>>;
|
package/dist/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
package/dist/model.js
CHANGED
|
@@ -1,8 +1,23 @@
|
|
|
1
|
-
import { AgentConnectTarget } from "@knpkv/herdr-fleet/model";
|
|
1
|
+
import { AgentConnectTarget, AgentWorkerIdentity } from "@knpkv/herdr-fleet/model";
|
|
2
2
|
import { Schema } from "effect";
|
|
3
3
|
const Identifier = Schema.String.check(Schema.isNonEmpty(), Schema.isMaxLength(256));
|
|
4
|
+
// Approval hosts are bounded identifiers, not DNS names; the approvals app also
|
|
5
|
+
// accepts labels such as "PI 5".
|
|
6
|
+
const ApprovalHostName = Schema.String.check(Schema.isNonEmpty(), Schema.isMaxLength(256));
|
|
4
7
|
const Text = Schema.String.check(Schema.isNonEmpty(), Schema.isMaxLength(4_096), Schema.isPattern(/^[^\p{Cc}]+$/u));
|
|
5
8
|
const Timestamp = Schema.Number.check(Schema.isInt(), Schema.isBetween({ minimum: 0, maximum: 8_640_000_000_000_000 }));
|
|
9
|
+
/**
|
|
10
|
+
* Credential-free HTTP(S) URL persisted for an outbound handoff. Provider
|
|
11
|
+
* credentials and private locators never belong in this representation.
|
|
12
|
+
*/
|
|
13
|
+
const LinkUrl = Schema.String.check(Schema.isMaxLength(2_048), Schema.makeFilter((value) => {
|
|
14
|
+
if (!URL.canParse(value))
|
|
15
|
+
return false;
|
|
16
|
+
const url = new URL(value);
|
|
17
|
+
return (url.protocol === "http:" || url.protocol === "https:") &&
|
|
18
|
+
url.username === "" &&
|
|
19
|
+
url.password === "";
|
|
20
|
+
}, { expected: "an HTTP(S) URL without embedded credentials" }));
|
|
6
21
|
export const workHistoryMaxEvents = 16_384;
|
|
7
22
|
export const workSnapshotMaxGoals = 1_024;
|
|
8
23
|
export const WorkGoalId = Identifier;
|
|
@@ -21,6 +36,63 @@ export const WorkBlocker = Schema.Struct({
|
|
|
21
36
|
summary: Text,
|
|
22
37
|
since: Timestamp
|
|
23
38
|
});
|
|
39
|
+
export const WorkAgentHierarchy = Schema.Struct({
|
|
40
|
+
agent: AgentWorkerIdentity
|
|
41
|
+
});
|
|
42
|
+
export const WorkActivityKind = Schema.Literals([
|
|
43
|
+
"note",
|
|
44
|
+
"status",
|
|
45
|
+
"blocker",
|
|
46
|
+
"request",
|
|
47
|
+
"review",
|
|
48
|
+
"shipment"
|
|
49
|
+
]);
|
|
50
|
+
export const WorkActivity = Schema.Struct({
|
|
51
|
+
id: Identifier,
|
|
52
|
+
kind: WorkActivityKind,
|
|
53
|
+
summary: Text,
|
|
54
|
+
occurredAt: Timestamp
|
|
55
|
+
});
|
|
56
|
+
export const WorkApprovalTarget = Schema.Struct({
|
|
57
|
+
host: ApprovalHostName,
|
|
58
|
+
jobId: Identifier,
|
|
59
|
+
url: LinkUrl
|
|
60
|
+
}).check(Schema.makeFilter(({ host, jobId, url }) => {
|
|
61
|
+
const parsed = new URL(url);
|
|
62
|
+
const queryKeys = [...parsed.searchParams.keys()];
|
|
63
|
+
const approvalHosts = parsed.searchParams.getAll("approvalHost");
|
|
64
|
+
const approvalJobs = parsed.searchParams.getAll("approvalJob");
|
|
65
|
+
return parsed.pathname === "/" &&
|
|
66
|
+
parsed.hash === "" &&
|
|
67
|
+
queryKeys.length === 3 &&
|
|
68
|
+
parsed.searchParams.getAll("tab").length === 1 &&
|
|
69
|
+
parsed.searchParams.get("tab") === "approvals" &&
|
|
70
|
+
approvalHosts.length === 1 &&
|
|
71
|
+
approvalJobs.length === 1 &&
|
|
72
|
+
approvalHosts[0]?.toLowerCase() === host.toLowerCase() &&
|
|
73
|
+
approvalJobs[0] === jobId;
|
|
74
|
+
}, { expected: "an approval URL with matching host and job identity" }));
|
|
75
|
+
/**
|
|
76
|
+
* Checks a decoded approval target against the origin resolved by the
|
|
77
|
+
* configuration-aware approvals boundary before the target is persisted.
|
|
78
|
+
*/
|
|
79
|
+
export const approvalTargetMatchesOrigin = (target, authoritativeOrigin) => new URL(target.url).origin === authoritativeOrigin;
|
|
80
|
+
export const WorkRequestState = Schema.Literals(["open", "approved", "rejected", "fulfilled"]);
|
|
81
|
+
export const WorkRequest = Schema.Struct({
|
|
82
|
+
id: Identifier,
|
|
83
|
+
summary: Text,
|
|
84
|
+
state: WorkRequestState,
|
|
85
|
+
requestedAt: Timestamp,
|
|
86
|
+
approvalTarget: Schema.NullOr(WorkApprovalTarget)
|
|
87
|
+
});
|
|
88
|
+
export const WorkReviewState = Schema.Literals(["not_requested", "requested", "changes_requested", "approved"]);
|
|
89
|
+
/** Review status plus the persisted credential-free destination, when known. */
|
|
90
|
+
export const WorkReview = Schema.Struct({
|
|
91
|
+
state: WorkReviewState,
|
|
92
|
+
summary: Schema.NullOr(Text),
|
|
93
|
+
updatedAt: Timestamp,
|
|
94
|
+
url: Schema.NullOr(LinkUrl)
|
|
95
|
+
});
|
|
24
96
|
export const WorkGoal = Schema.Struct({
|
|
25
97
|
id: WorkGoalId,
|
|
26
98
|
title: Text,
|
|
@@ -33,9 +105,38 @@ export const WorkGoal = Schema.Struct({
|
|
|
33
105
|
delivery: DeliveryStage,
|
|
34
106
|
blocker: Schema.NullOr(WorkBlocker),
|
|
35
107
|
connectTarget: Schema.NullOr(AgentConnectTarget),
|
|
108
|
+
agentHierarchy: Schema.optionalKey(Schema.NullOr(WorkAgentHierarchy)),
|
|
109
|
+
activity: Schema.optionalKey(Schema.Array(WorkActivity)
|
|
110
|
+
.check(Schema.isMaxLength(128))
|
|
111
|
+
.check(Schema.makeFilter((activities) => new Set(activities.map(({ id }) => id)).size === activities.length, { expected: "unique activity ids" }))),
|
|
112
|
+
blockers: Schema.optionalKey(Schema.Array(WorkBlocker)
|
|
113
|
+
.check(Schema.isMaxLength(32))
|
|
114
|
+
.check(Schema.makeFilter((blockers) => new Set(blockers.map(({ since, summary }) => `${since}\u0000${summary}`)).size === blockers.length, { expected: "unique blocker records" }))),
|
|
115
|
+
requests: Schema.optionalKey(Schema.Array(WorkRequest)
|
|
116
|
+
.check(Schema.isMaxLength(32))
|
|
117
|
+
.check(Schema.makeFilter((requests) => new Set(requests.map(({ id }) => id)).size === requests.length, { expected: "unique request ids" }))),
|
|
118
|
+
review: Schema.optionalKey(Schema.NullOr(WorkReview)),
|
|
119
|
+
approvalTarget: Schema.optionalKey(Schema.NullOr(WorkApprovalTarget)),
|
|
36
120
|
createdAt: Timestamp,
|
|
37
121
|
updatedAt: Timestamp
|
|
38
|
-
}).check(Schema.makeFilter((goal) =>
|
|
122
|
+
}).check(Schema.makeFilter((goal) => {
|
|
123
|
+
const hasBlocker = goal.blocker !== null ||
|
|
124
|
+
(goal.blockers !== undefined && goal.blockers.length > 0);
|
|
125
|
+
const agent = goal.agentHierarchy?.agent;
|
|
126
|
+
const isDetailTimestamp = (timestamp) => timestamp >= goal.createdAt && timestamp <= goal.updatedAt;
|
|
127
|
+
return goal.updatedAt >= goal.createdAt &&
|
|
128
|
+
((goal.state === "blocked") === hasBlocker) &&
|
|
129
|
+
(goal.blockers === undefined || goal.blocker === null) &&
|
|
130
|
+
(goal.blocker === null || isDetailTimestamp(goal.blocker.since)) &&
|
|
131
|
+
(goal.blockers === undefined || goal.blockers.every(({ since }) => isDetailTimestamp(since))) &&
|
|
132
|
+
(goal.activity === undefined || goal.activity.every(({ occurredAt }) => isDetailTimestamp(occurredAt))) &&
|
|
133
|
+
(goal.requests === undefined || goal.requests.every(({ requestedAt }) => isDetailTimestamp(requestedAt))) &&
|
|
134
|
+
(goal.review === undefined || goal.review === null || isDetailTimestamp(goal.review.updatedAt)) &&
|
|
135
|
+
(agent === undefined || agent === null || ((agent.relationship === undefined || agent.relationship.parentAgentId !== agent.agentId) &&
|
|
136
|
+
goal.connectTarget !== null &&
|
|
137
|
+
goal.connectTarget.agentId === agent.agentId &&
|
|
138
|
+
goal.connectTarget.host.toLowerCase() === agent.host.toLowerCase()));
|
|
139
|
+
}, { expected: "ordered goal timestamps, blocker state, and non-cyclic authoritative agent target" }));
|
|
39
140
|
export const WorkGoalCheckpoint = Schema.Struct({
|
|
40
141
|
version: Schema.Literal("herdr.work.event.v1"),
|
|
41
142
|
eventId: Identifier,
|
package/dist/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|