@aeolus-fleet/core 0.19.0 → 0.20.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 (106) hide show
  1. package/dist/adapters/prisma/generated/browser.d.ts +25 -0
  2. package/dist/adapters/prisma/generated/client.d.ts +25 -0
  3. package/dist/adapters/prisma/generated/internal/class.d.ts +44 -0
  4. package/dist/adapters/prisma/generated/internal/class.js +4 -4
  5. package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
  6. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +338 -1
  7. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +34 -1
  8. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
  9. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +37 -0
  10. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +34 -1
  11. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  12. package/dist/adapters/prisma/generated/models/CrewRequest.d.ts +103 -1
  13. package/dist/adapters/prisma/generated/models/Fleet.d.ts +860 -0
  14. package/dist/adapters/prisma/generated/models/Label.d.ts +1475 -0
  15. package/dist/adapters/prisma/generated/models/Label.js +2 -0
  16. package/dist/adapters/prisma/generated/models/Label.js.map +1 -0
  17. package/dist/adapters/prisma/generated/models/LabelValue.d.ts +1454 -0
  18. package/dist/adapters/prisma/generated/models/LabelValue.js +2 -0
  19. package/dist/adapters/prisma/generated/models/LabelValue.js.map +1 -0
  20. package/dist/adapters/prisma/generated/models/Ship.d.ts +1225 -70
  21. package/dist/adapters/prisma/generated/models/ShipLabel.d.ts +1431 -0
  22. package/dist/adapters/prisma/generated/models/ShipLabel.js +2 -0
  23. package/dist/adapters/prisma/generated/models/ShipLabel.js.map +1 -0
  24. package/dist/adapters/prisma/generated/models/WorktreeClearRequest.d.ts +1539 -0
  25. package/dist/adapters/prisma/generated/models/WorktreeClearRequest.js +2 -0
  26. package/dist/adapters/prisma/generated/models/WorktreeClearRequest.js.map +1 -0
  27. package/dist/adapters/prisma/generated/models.d.ts +4 -0
  28. package/dist/adapters/prisma/registry.d.ts +3 -1
  29. package/dist/adapters/prisma/registry.js +129 -9
  30. package/dist/adapters/prisma/registry.js.map +1 -1
  31. package/dist/adapters/prisma/rows.d.ts +10 -0
  32. package/dist/adapters/prisma/rows.js +41 -2
  33. package/dist/adapters/prisma/rows.js.map +1 -1
  34. package/dist/adapters/prisma/unit-of-work.d.ts +3 -1
  35. package/dist/adapters/prisma/unit-of-work.js +3 -1
  36. package/dist/adapters/prisma/unit-of-work.js.map +1 -1
  37. package/dist/adapters/trpc/console.d.ts +1 -1
  38. package/dist/adapters/trpc/context.d.ts +20 -0
  39. package/dist/adapters/trpc/fleet.d.ts +144 -8
  40. package/dist/adapters/trpc/fleet.js +143 -6
  41. package/dist/adapters/trpc/fleet.js.map +1 -1
  42. package/dist/adapters/trpc/router.d.ts +134 -8
  43. package/dist/adapters/trpc/ship-contract.js +10 -0
  44. package/dist/adapters/trpc/ship-contract.js.map +1 -1
  45. package/dist/adapters/trpc/trpc.js +14 -0
  46. package/dist/adapters/trpc/trpc.js.map +1 -1
  47. package/dist/domain/registry/assign-label.d.ts +32 -0
  48. package/dist/domain/registry/assign-label.js +39 -0
  49. package/dist/domain/registry/assign-label.js.map +1 -0
  50. package/dist/domain/registry/change-label-values.d.ts +33 -0
  51. package/dist/domain/registry/change-label-values.js +34 -0
  52. package/dist/domain/registry/change-label-values.js.map +1 -0
  53. package/dist/domain/registry/clear-request.d.ts +69 -0
  54. package/dist/domain/registry/clear-request.js +51 -0
  55. package/dist/domain/registry/clear-request.js.map +1 -0
  56. package/dist/domain/registry/confirm-worktree-cleared.d.ts +31 -0
  57. package/dist/domain/registry/confirm-worktree-cleared.js +30 -0
  58. package/dist/domain/registry/confirm-worktree-cleared.js.map +1 -0
  59. package/dist/domain/registry/crew-request.d.ts +9 -3
  60. package/dist/domain/registry/crew-request.js +9 -6
  61. package/dist/domain/registry/crew-request.js.map +1 -1
  62. package/dist/domain/registry/define-label.d.ts +33 -0
  63. package/dist/domain/registry/define-label.js +33 -0
  64. package/dist/domain/registry/define-label.js.map +1 -0
  65. package/dist/domain/registry/delete-label.d.ts +30 -0
  66. package/dist/domain/registry/delete-label.js +32 -0
  67. package/dist/domain/registry/delete-label.js.map +1 -0
  68. package/dist/domain/registry/find-label-value.d.ts +22 -0
  69. package/dist/domain/registry/find-label-value.js +19 -0
  70. package/dist/domain/registry/find-label-value.js.map +1 -0
  71. package/dist/domain/registry/label.d.ts +197 -0
  72. package/dist/domain/registry/label.js +263 -0
  73. package/dist/domain/registry/label.js.map +1 -0
  74. package/dist/domain/registry/list-fleet.d.ts +13 -7
  75. package/dist/domain/registry/list-fleet.js +10 -5
  76. package/dist/domain/registry/list-fleet.js.map +1 -1
  77. package/dist/domain/registry/list-labels.d.ts +12 -0
  78. package/dist/domain/registry/list-labels.js +9 -0
  79. package/dist/domain/registry/list-labels.js.map +1 -0
  80. package/dist/domain/registry/ports.d.ts +59 -1
  81. package/dist/domain/registry/read-clear-requests.d.ts +15 -0
  82. package/dist/domain/registry/read-clear-requests.js +16 -0
  83. package/dist/domain/registry/read-clear-requests.js.map +1 -0
  84. package/dist/domain/registry/report-crew-status.d.ts +6 -3
  85. package/dist/domain/registry/report-crew-status.js +11 -4
  86. package/dist/domain/registry/report-crew-status.js.map +1 -1
  87. package/dist/domain/registry/request-worktree-clear.d.ts +31 -0
  88. package/dist/domain/registry/request-worktree-clear.js +35 -0
  89. package/dist/domain/registry/request-worktree-clear.js.map +1 -0
  90. package/dist/domain/registry/retire-ship.d.ts +9 -3
  91. package/dist/domain/registry/retire-ship.js +27 -2
  92. package/dist/domain/registry/retire-ship.js.map +1 -1
  93. package/dist/domain/registry/unassign-label.d.ts +30 -0
  94. package/dist/domain/registry/unassign-label.js +37 -0
  95. package/dist/domain/registry/unassign-label.js.map +1 -0
  96. package/dist/domain/shared/errors.d.ts +1 -1
  97. package/dist/domain/shared/errors.js.map +1 -1
  98. package/dist/wiring.d.ts +20 -0
  99. package/dist/wiring.js +21 -1
  100. package/dist/wiring.js.map +1 -1
  101. package/package.json +2 -2
  102. package/src/adapters/prisma/migrations/20261007100000_labels/migration.sql +87 -0
  103. package/src/adapters/prisma/migrations/20261007110000_foreign_key_indexes/migration.sql +42 -0
  104. package/src/adapters/prisma/migrations/20261007120000_crew_status_attempt/migration.sql +4 -0
  105. package/src/adapters/prisma/migrations/20261007140000_worktree_clear_requests/migration.sql +32 -0
  106. package/src/adapters/prisma/schema.prisma +120 -0
@@ -46,6 +46,10 @@ model Fleet {
46
46
  ships Ship[]
47
47
  leases Lease[]
48
48
  crewRequests CrewRequest[]
49
+ clearRequests WorktreeClearRequest[]
50
+ labels Label[]
51
+ labelValues LabelValue[]
52
+ shipLabels ShipLabel[]
49
53
  credentials Credential[]
50
54
  messages Message[]
51
55
  deliveries Delivery[]
@@ -97,6 +101,11 @@ model Ship {
97
101
  events Event[] @relation("EventShip")
98
102
  crewRequest CrewRequest? @relation("CrewRequestShip")
99
103
  assignedCrews CrewRequest[] @relation("CrewRequestAssignee")
104
+ clearRequests WorktreeClearRequest[] @relation("WorktreeClearRequestTrierarch")
105
+ clearedWorktrees WorktreeClearRequest[] @relation("WorktreeClearRequestShip")
106
+ requestedClears WorktreeClearRequest[] @relation("WorktreeClearRequestRequester")
107
+ ownedLabels Label[] @relation("LabelOwner")
108
+ labels ShipLabel[] @relation("ShipLabelShip")
100
109
 
101
110
  @@unique([fleetId, id])
102
111
  /// An idempotency key is used once per commissioning ship.
@@ -163,6 +172,9 @@ model Lease {
163
172
  @@unique([fleetId, id])
164
173
  /// At most one open lease per ship.
165
174
  @@unique([shipId], map: "leases_ship_id_open_key", where: { endedAt: null })
175
+ /// Every foreign key has an index leading with its columns, so deleting a
176
+ /// referenced row checks it with an index, not a scan (#331).
177
+ @@index([fleetId, shipId])
166
178
  @@map("leases")
167
179
  }
168
180
 
@@ -192,6 +204,10 @@ model CrewRequest {
192
204
  status CrewStatus?
193
205
  /// Why no trierarch can take it, written by the assigner while unassigned; null when none.
194
206
  reason String?
207
+ /// How many times its trierarch restarted the session within its restart window, with the status: 0 on its first start.
208
+ attempt Int @default(0)
209
+ /// When the session its trierarch runs now started, with the status; null while none runs.
210
+ sessionStartedAt DateTime? @map("session_started_at") @db.Timestamptz(3)
195
211
 
196
212
  fleet Fleet @relation(fields: [fleetId], references: [id])
197
213
  ship Ship @relation("CrewRequestShip", fields: [fleetId, shipId], references: [fleetId, id])
@@ -203,6 +219,88 @@ model CrewRequest {
203
219
  @@map("crew_requests")
204
220
  }
205
221
 
222
+ /// A pending request that a trierarch clear a worktree it kept (decision 0032),
223
+ /// named by the ship it belonged to and its repository: never a path.
224
+ model WorktreeClearRequest {
225
+ fleetId String @map("fleet_id")
226
+ trierarchShipId String @map("trierarch_ship_id")
227
+ shipId String @map("ship_id")
228
+ repository String
229
+ requestedBy String @map("requested_by_ship_id")
230
+ requestedAt DateTime @map("requested_at") @db.Timestamptz(3)
231
+
232
+ fleet Fleet @relation(fields: [fleetId], references: [id])
233
+ trierarch Ship @relation("WorktreeClearRequestTrierarch", fields: [fleetId, trierarchShipId], references: [fleetId, id])
234
+ ship Ship @relation("WorktreeClearRequestShip", fields: [fleetId, shipId], references: [fleetId, id])
235
+ requester Ship @relation("WorktreeClearRequestRequester", fields: [fleetId, requestedBy], references: [fleetId, id])
236
+
237
+ @@id([fleetId, trierarchShipId, shipId, repository])
238
+ @@index([fleetId, shipId])
239
+ @@index([fleetId, requestedBy])
240
+ @@map("worktree_clear_requests")
241
+ }
242
+
243
+ /// A label (decision 0031): a key unique in its fleet with its defined values,
244
+ /// owned by the ship that defined it. Ids start with lbl_. A retired or deleted
245
+ /// label is deleted with its values; its events stay.
246
+ model Label {
247
+ id String @id
248
+ fleetId String @map("fleet_id")
249
+ key String
250
+ ownerShipId String @map("owner_ship_id")
251
+
252
+ fleet Fleet @relation(fields: [fleetId], references: [id])
253
+ owner Ship @relation("LabelOwner", fields: [fleetId, ownerShipId], references: [fleetId, id])
254
+ values LabelValue[]
255
+ carriers ShipLabel[]
256
+
257
+ @@unique([fleetId, id])
258
+ @@unique([fleetId, key])
259
+ /// A retire finds the labels its ship owns.
260
+ @@index([fleetId, ownerShipId])
261
+ @@map("labels")
262
+ }
263
+
264
+ /// One value of a label, each once, at most 50 a label. Ids start with lbv_; a
265
+ /// value keeps its id while its label has it.
266
+ model LabelValue {
267
+ id String @id
268
+ fleetId String @map("fleet_id")
269
+ labelId String @map("label_id")
270
+ value String
271
+ /// Its place in the order the owner gave the values.
272
+ position Int
273
+
274
+ fleet Fleet @relation(fields: [fleetId], references: [id])
275
+ label Label @relation(fields: [fleetId, labelId], references: [fleetId, id])
276
+ carriers ShipLabel[]
277
+
278
+ @@unique([fleetId, id])
279
+ @@unique([fleetId, labelId, value])
280
+ @@map("label_values")
281
+ }
282
+
283
+ /// A label value a ship carries: a ship holds a set of values, so the ship and
284
+ /// the value are its key.
285
+ model ShipLabel {
286
+ fleetId String @map("fleet_id")
287
+ shipId String @map("ship_id")
288
+ labelId String @map("label_id")
289
+ valueId String @map("value_id")
290
+
291
+ fleet Fleet @relation(fields: [fleetId], references: [id])
292
+ ship Ship @relation("ShipLabelShip", fields: [fleetId, shipId], references: [fleetId, id])
293
+ label Label @relation(fields: [fleetId, labelId], references: [fleetId, id])
294
+ value LabelValue @relation(fields: [fleetId, valueId], references: [fleetId, id])
295
+
296
+ @@id([fleetId, shipId, valueId])
297
+ /// A change of values, a delete and a retire find every ship that carries a label.
298
+ @@index([fleetId, labelId])
299
+ /// Removing a value checks that no ship carries it.
300
+ @@index([fleetId, valueId])
301
+ @@map("ship_labels")
302
+ }
303
+
206
304
  /// A ship secret, stored only as its hash. Ids start with crd_.
207
305
  /// The hash is unique across all fleets: finding a ship by its secret is one of the
208
306
  /// lookups not scoped by fleet (ADR 0007).
@@ -220,6 +318,9 @@ model Credential {
220
318
 
221
319
  /// At most one valid secret per ship.
222
320
  @@unique([shipId], map: "credentials_ship_id_valid_key", where: { invalidatedAt: null })
321
+ /// Every foreign key has an index leading with its columns, so deleting a
322
+ /// referenced row checks it with an index, not a scan (#331).
323
+ @@index([fleetId, shipId])
223
324
  @@map("credentials")
224
325
  }
225
326
 
@@ -268,6 +369,11 @@ model Message {
268
369
  @@unique([fleetId, senderShipId, idempotencyKey])
269
370
  /// A ship's current model is its newest message with a model.
270
371
  @@index([fleetId, senderShipId, createdAt])
372
+ /// Every foreign key has an index leading with its columns, so deleting a
373
+ /// referenced row checks it with an index, not a scan (#331).
374
+ @@index([fleetId, selectorShipId])
375
+ @@index([fleetId, inReplyToMessageId])
376
+ @@index([fleetId, resendOfMessageId])
271
377
  @@map("messages")
272
378
  }
273
379
 
@@ -315,6 +421,10 @@ model Delivery {
315
421
  @@index([fleetId, recipientType, state])
316
422
  /// A crew's own deliveries in flight, which its next receive returns first.
317
423
  @@index([fleetId, claimedByLeaseId, state])
424
+ /// Every foreign key has an index leading with its columns, so deleting a
425
+ /// referenced row checks it with an index, not a scan (#331).
426
+ @@index([fleetId, messageId])
427
+ @@index([fleetId, claimedByShipId])
318
428
  @@map("deliveries")
319
429
  }
320
430
 
@@ -344,6 +454,12 @@ model Event {
344
454
  delivery Delivery? @relation(fields: [fleetId, deliveryId], references: [fleetId, id], onDelete: Restrict)
345
455
 
346
456
  @@unique([fleetId, seq])
457
+ /// Every foreign key has an index leading with its columns, so deleting a
458
+ /// referenced row checks it with an index, not a scan (#331).
459
+ @@index([fleetId, actorShipId])
460
+ @@index([fleetId, shipId])
461
+ @@index([fleetId, messageId])
462
+ @@index([fleetId, deliveryId])
347
463
  @@map("events")
348
464
  }
349
465
 
@@ -416,6 +532,10 @@ model ConsoleSession {
416
532
 
417
533
  /// At most one live session holding argo's lease per fleet: signing in ends the previous one. Viewer sessions run beside it.
418
534
  @@unique([fleetId], map: "console_sessions_fleet_id_open_key", where: raw("ended_at IS NULL AND lease_id IS NOT NULL"))
535
+ /// Every foreign key has an index leading with its columns, so deleting a
536
+ /// referenced row checks it with an index, not a scan (#331).
537
+ @@index([fleetId, shipId])
538
+ @@index([fleetId, leaseId])
419
539
  @@map("console_sessions")
420
540
  }
421
541