@robbeverhelst/do 1.289.0 → 1.291.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 (2) hide show
  1. package/dist/do.js +194 -125
  2. package/package.json +1 -1
package/dist/do.js CHANGED
@@ -3975,7 +3975,8 @@ var notificationType = pgEnum("notification_type", [
3975
3975
  "card",
3976
3976
  "bank_link",
3977
3977
  "import_failed",
3978
- "animal_ask"
3978
+ "animal_ask",
3979
+ "life_block"
3979
3980
  ]);
3980
3981
  var notificationDomain = pgEnum("notification_domain", [
3981
3982
  "task",
@@ -4043,6 +4044,7 @@ var notifications = pgTable("notifications", {
4043
4044
  groupKey: text("group_key"),
4044
4045
  actor: text("actor"),
4045
4046
  digestId: text("digest_id"),
4047
+ display: jsonb("display").$type(),
4046
4048
  createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow()
4047
4049
  }, (t) => [
4048
4050
  unique("notifications_tenant_dedupe_uniq").on(t.tenantId, t.dedupeKey),
@@ -4923,6 +4925,7 @@ var contactMoments = pgTable("contact_moments", {
4923
4925
  kind: contactMomentKind("kind").notNull().default("other"),
4924
4926
  at: timestamp("at", { withTimezone: true }).notNull(),
4925
4927
  summary: text("summary"),
4928
+ note: text("note"),
4926
4929
  source: text("source").notNull().default("manual"),
4927
4930
  sourceNodeId: text("source_node_id").references(() => nodes.id),
4928
4931
  withContactIds: text("with_contact_ids").array().notNull().default([]),
@@ -4944,6 +4947,7 @@ var giftIdeas = pgTable("gift_ideas", {
4944
4947
  title: text("title").notNull(),
4945
4948
  url: text("url"),
4946
4949
  priceCents: integer("price_cents"),
4950
+ note: text("note"),
4947
4951
  heardAt: timestamp("heard_at", { withTimezone: true }).notNull().defaultNow(),
4948
4952
  source: text("source").notNull().default("manual"),
4949
4953
  occasionKeyDateId: text("occasion_key_date_id").references(() => keyDates.id, {
@@ -20157,6 +20161,7 @@ var collectionEntryKindValues = [
20157
20161
  "service",
20158
20162
  "repair",
20159
20163
  "fault",
20164
+ "part",
20160
20165
  "lent",
20161
20166
  "returned",
20162
20167
  "valued",
@@ -21317,6 +21322,10 @@ var houseValueRowSchema = object({
21317
21322
  model: string2().nullable(),
21318
21323
  placeId: string2().nullable(),
21319
21324
  placeTitle: string2().nullable(),
21325
+ placeGroup: string2().nullable().default(null),
21326
+ withHouse: boolean3().default(false),
21327
+ paidApprox: boolean3().default(false),
21328
+ borrowedFrom: string2().nullable().default(null),
21320
21329
  bought: day.nullable(),
21321
21330
  paid: number2().nullable(),
21322
21331
  now: number2().nullable(),
@@ -21329,9 +21338,15 @@ var houseValueSchema = object({
21329
21338
  rows: array(houseValueRowSchema),
21330
21339
  totals: object({
21331
21340
  now: number2(),
21332
- paid: number2()
21341
+ paid: number2(),
21342
+ newForOld: number2().default(0)
21333
21343
  }),
21334
- policy: object({ documentId: string2(), title: string2(), insuredValue: number2() }).nullable()
21344
+ policy: object({
21345
+ documentId: string2(),
21346
+ title: string2(),
21347
+ insuredValue: number2(),
21348
+ lastClaim: object({ kind: string2(), on: day }).nullable().default(null)
21349
+ }).nullable()
21335
21350
  });
21336
21351
  var upkeepMonthMarkSchema = _enum2(["done", "due", "planned", "late"]).nullable();
21337
21352
  var houseUpkeepRoutineSchema = object({
@@ -21340,15 +21355,21 @@ var houseUpkeepRoutineSchema = object({
21340
21355
  itemId: string2(),
21341
21356
  itemTitle: string2(),
21342
21357
  category: string2().nullable(),
21343
- months: array(upkeepMonthMarkSchema).length(12)
21358
+ months: array(upkeepMonthMarkSchema).length(12),
21359
+ bookedOn: day.nullable().default(null),
21360
+ itemState: string2().nullable().default(null),
21361
+ certified: boolean3().default(false)
21344
21362
  });
21345
21363
  var houseUpkeepNeedSchema = object({
21346
21364
  id: string2(),
21365
+ kind: _enum2(["supply", "loan"]).default("supply"),
21347
21366
  title: string2(),
21348
21367
  quantity: number2(),
21349
21368
  unit: string2().nullable(),
21350
21369
  low: boolean3(),
21351
- itemTitle: string2()
21370
+ itemTitle: string2(),
21371
+ who: string2().nullable().default(null),
21372
+ dueBack: day.nullable().default(null)
21352
21373
  });
21353
21374
  var houseUpkeepYearSchema = object({
21354
21375
  year: number2().int(),
@@ -21359,7 +21380,8 @@ var houseUpkeepYearSchema = object({
21359
21380
  spent: object({
21360
21381
  total: number2(),
21361
21382
  repairs: number2(),
21362
- services: number2()
21383
+ services: number2(),
21384
+ parts: number2().default(0)
21363
21385
  })
21364
21386
  });
21365
21387
  var houseUpkeepYearQuerySchema = object({ year: exports_coerce.number().int().min(2000).max(2100).optional() }).strict();
@@ -21600,7 +21622,7 @@ var postRunSchema = object({
21600
21622
  status: runStatusSchema,
21601
21623
  steps: array(runStepSchema).max(12).optional()
21602
21624
  });
21603
- var POST_RECEIPT_ABOUT_VALUES = ["red_flags", "saved"];
21625
+ var POST_RECEIPT_ABOUT_VALUES = ["red_flags", "saved", "vet_visit"];
21604
21626
  var POST_RECEIPT_SOURCE_MAX = 80;
21605
21627
  var postReceiptInputSchema = object({
21606
21628
  nodeId: ulidSchema,
@@ -23229,6 +23251,120 @@ var updateUserSettingsInputSchema = createUpdateSchema(userSettings, {
23229
23251
  focusUntil: true
23230
23252
  }).strict();
23231
23253
 
23254
+ // ../../packages/schema/src/contracts/day-record.ts
23255
+ var dayDateSchema = string2().regex(/^\d{4}-\d{2}-\d{2}$/, "a day must be YYYY-MM-DD").refine((d) => {
23256
+ const [y, m, day] = d.split("-").map(Number);
23257
+ const at = new Date(Date.UTC(y, m - 1, day));
23258
+ return at.getUTCFullYear() === y && at.getUTCMonth() === m - 1 && at.getUTCDate() === day;
23259
+ }, "not a calendar day");
23260
+ var RECORD_ROUND_MINUTES = 15;
23261
+ var timeBlockStatusSchema = _enum2(TIME_BLOCK_STATUSES);
23262
+ var recordStateSchema = _enum2(RECORD_STATES);
23263
+ var recordConfidenceSchema = _enum2(RECORD_CONFIDENCES);
23264
+ var evidenceSourceSchema = _enum2(EVIDENCE_SOURCES);
23265
+ var blockEvidenceInputSchema = object({
23266
+ source: evidenceSourceSchema,
23267
+ refKind: string2().trim().min(1).max(40).optional(),
23268
+ refId: string2().trim().min(1).max(100).optional(),
23269
+ at: exports_coerce.date().optional(),
23270
+ note: string2().trim().min(1).max(500).optional()
23271
+ }).strict().refine((v) => Boolean(v.refKind) === Boolean(v.refId), {
23272
+ message: "refKind and refId come together",
23273
+ path: ["refId"]
23274
+ });
23275
+ var dayRecordChangeSchema = object({
23276
+ blockId: ulidSchema.optional(),
23277
+ id: ulidSchema.optional(),
23278
+ lifeKind: lifeBlockKindSchema.optional(),
23279
+ title: string2().trim().min(1).max(500).optional(),
23280
+ startAt: exports_coerce.date().optional(),
23281
+ endAt: exports_coerce.date().optional(),
23282
+ skipped: literal(true).optional(),
23283
+ replacedBy: ulidSchema.optional(),
23284
+ evidence: array(blockEvidenceInputSchema).max(20).default([])
23285
+ }).strict().refine((v) => Boolean(v.blockId) !== Boolean(v.id), {
23286
+ message: "name an existing block (blockId) or mint a new one (id), not both",
23287
+ path: ["blockId"]
23288
+ }).refine((v) => !v.id || v.lifeKind && v.startAt && v.endAt, {
23289
+ message: "a new block needs lifeKind, startAt and endAt",
23290
+ path: ["id"]
23291
+ }).refine((v) => !v.blockId || !v.lifeKind, {
23292
+ message: "a block's kind doesn't change in its record",
23293
+ path: ["lifeKind"]
23294
+ }).refine((v) => !(v.skipped && v.replacedBy), {
23295
+ message: "a block is skipped or replaced, not both",
23296
+ path: ["replacedBy"]
23297
+ }).refine((v) => !v.startAt || !v.endAt || v.endAt > v.startAt, {
23298
+ message: "endAt must be after startAt",
23299
+ path: ["endAt"]
23300
+ });
23301
+ var dayRecordWriteInputSchema = object({
23302
+ changes: array(dayRecordChangeSchema).min(1).max(50)
23303
+ }).strict();
23304
+ var dayRecordAskInputSchema = object({
23305
+ question: string2().trim().min(1).max(300),
23306
+ blockId: ulidSchema.optional(),
23307
+ id: ulidSchema.optional(),
23308
+ startAt: exports_coerce.date().optional(),
23309
+ endAt: exports_coerce.date().optional()
23310
+ }).strict().refine((v) => Boolean(v.blockId) !== Boolean(v.id && v.startAt && v.endAt), {
23311
+ message: "ask about a block (blockId) or a gap (id, startAt, endAt)",
23312
+ path: ["blockId"]
23313
+ }).refine((v) => !v.startAt || !v.endAt || v.endAt > v.startAt, {
23314
+ message: "endAt must be after startAt",
23315
+ path: ["endAt"]
23316
+ });
23317
+ var dayRecordUndoInputSchema = object({ receipt: string2().regex(/^\d+$/, "a receipt is a write's id") }).strict();
23318
+ var blockEvidenceSchema = object({
23319
+ id: string2(),
23320
+ source: evidenceSourceSchema,
23321
+ refKind: string2().nullable(),
23322
+ refId: string2().nullable(),
23323
+ at: exports_coerce.date().nullable(),
23324
+ weight: number2().int(),
23325
+ note: string2().nullable()
23326
+ });
23327
+ var dayRecordBlockSchema = timeBlockViewSchema.extend({
23328
+ status: timeBlockStatusSchema,
23329
+ recordState: recordStateSchema,
23330
+ confidence: recordConfidenceSchema.nullable(),
23331
+ replacedById: string2().nullable(),
23332
+ question: string2().nullable(),
23333
+ askedAt: exports_coerce.date().nullable(),
23334
+ evidence: array(blockEvidenceSchema)
23335
+ });
23336
+ var dayRecordSchema = object({
23337
+ date: dayDateSchema,
23338
+ timezone: string2(),
23339
+ from: exports_coerce.date(),
23340
+ to: exports_coerce.date(),
23341
+ blocks: array(dayRecordBlockSchema),
23342
+ questions: array(object({ blockId: string2(), question: string2(), askedAt: exports_coerce.date() })),
23343
+ filledIn: array(string2()),
23344
+ gaps: array(object({ startAt: exports_coerce.date(), endAt: exports_coerce.date() })),
23345
+ closed: boolean3(),
23346
+ autoClosesAt: exports_coerce.date()
23347
+ });
23348
+ var dayRecordReceiptLineSchema = object({
23349
+ blockId: string2(),
23350
+ title: string2(),
23351
+ lifeKind: lifeBlockKindSchema.nullable(),
23352
+ status: timeBlockStatusSchema,
23353
+ text: string2()
23354
+ });
23355
+ var dayRecordReceiptSchema = object({
23356
+ receipt: string2(),
23357
+ date: dayDateSchema,
23358
+ lines: array(dayRecordReceiptLineSchema),
23359
+ googleUpdated: boolean3(),
23360
+ day: dayRecordSchema
23361
+ });
23362
+ var dayRecordUndoResultSchema = object({
23363
+ undone: array(string2()),
23364
+ day: dayRecordSchema
23365
+ });
23366
+ var STATUS_QUARTER_MS = RECORD_ROUND_MINUTES * 60000;
23367
+
23232
23368
  // ../../packages/schema/src/contracts/insights.ts
23233
23369
  var insightsActivityPointSchema = object({
23234
23370
  day: string2(),
@@ -23954,11 +24090,19 @@ var contactMomentSchema = createSelectSchema(contactMoments, {
23954
24090
  at: exports_coerce.date(),
23955
24091
  expiresAt: exports_coerce.date().nullable(),
23956
24092
  thankedAt: exports_coerce.date().nullable().default(null),
24093
+ note: string2().nullable().default(null),
23957
24094
  createdAt: exports_coerce.date(),
23958
24095
  updatedAt: exports_coerce.date()
23959
24096
  });
24097
+ var momentSourceNodeSchema = object({
24098
+ id: ulidSchema,
24099
+ type: string2(),
24100
+ title: string2()
24101
+ });
23960
24102
  var contactMomentViewSchema = contactMomentSchema.extend({
23961
- contactTitle: string2()
24103
+ contactTitle: string2(),
24104
+ sourceNode: momentSourceNodeSchema.nullable().default(null),
24105
+ photoCount: number2().int().min(0).default(0)
23962
24106
  });
23963
24107
  var createContactMomentInputSchema = object({
23964
24108
  id: ulidSchema,
@@ -23966,6 +24110,7 @@ var createContactMomentInputSchema = object({
23966
24110
  kind: contactMomentKindSchema.optional(),
23967
24111
  at: exports_coerce.date().optional(),
23968
24112
  summary: string2().trim().min(1).max(500).nullish(),
24113
+ note: string2().trim().min(1).max(200).nullish(),
23969
24114
  source: sourceSchema2.optional(),
23970
24115
  sourceNodeId: ulidSchema.nullish(),
23971
24116
  withContactIds: array(ulidSchema).max(50).optional(),
@@ -23982,6 +24127,7 @@ var contactMomentsQuerySchema = object({
23982
24127
  });
23983
24128
  var giftIdeaSchema = createSelectSchema(giftIdeas, {
23984
24129
  heardAt: exports_coerce.date(),
24130
+ note: string2().nullable().default(null),
23985
24131
  createdAt: exports_coerce.date(),
23986
24132
  updatedAt: exports_coerce.date()
23987
24133
  });
@@ -23995,6 +24141,7 @@ var createGiftIdeaInputSchema = object({
23995
24141
  title: string2().trim().min(1).max(200),
23996
24142
  url: string2().url().max(2000).nullish(),
23997
24143
  priceCents: number2().int().min(0).max(1e8).nullish(),
24144
+ note: string2().trim().min(1).max(200).nullish(),
23998
24145
  heardAt: exports_coerce.date().optional(),
23999
24146
  source: sourceSchema2.optional(),
24000
24147
  occasionKeyDateId: ulidSchema.nullish(),
@@ -24150,7 +24297,13 @@ var personBriefSchema = object({
24150
24297
  circleIds: array(ulidSchema)
24151
24298
  }),
24152
24299
  lifeUpdates: array(contactMomentSchema),
24153
- followUps: array(object({ id: ulidSchema, label: string2().nullable(), date: keyDateDaySchema })),
24300
+ followUps: array(object({
24301
+ id: ulidSchema,
24302
+ label: string2().nullable(),
24303
+ date: keyDateDaySchema,
24304
+ taskId: ulidSchema.nullable().default(null),
24305
+ about: string2().nullable().default(null)
24306
+ })),
24154
24307
  giftIdeas: array(giftIdeaSchema),
24155
24308
  upcoming: array(object({
24156
24309
  id: ulidSchema,
@@ -24166,6 +24319,22 @@ var personBriefSchema = object({
24166
24319
  since: keyDateDaySchema,
24167
24320
  dueBack: keyDateDaySchema.nullable(),
24168
24321
  note: string2().nullable()
24322
+ })).default([]),
24323
+ knownSince: number2().int().nullable().default(null),
24324
+ lastSeen: object({ at: exports_coerce.date(), summary: string2().nullable(), source: string2() }).nullable().default(null),
24325
+ kids: array(object({
24326
+ contactId: ulidSchema,
24327
+ title: string2(),
24328
+ birthday: keyDateDaySchema.nullable(),
24329
+ yearKnown: boolean3()
24330
+ })).default([]),
24331
+ dates: array(object({
24332
+ id: ulidSchema,
24333
+ kind: string2(),
24334
+ label: string2().nullable(),
24335
+ nextOn: keyDateDaySchema,
24336
+ taskOn: keyDateDaySchema,
24337
+ taskId: ulidSchema.nullable()
24169
24338
  })).default([])
24170
24339
  });
24171
24340
  var peopleOverviewQuerySchema = object({
@@ -24197,9 +24366,18 @@ var peopleOverviewSchema = object({
24197
24366
  lastSeenAt: exports_coerce.date().nullable(),
24198
24367
  lastTalkedAt: exports_coerce.date().nullable(),
24199
24368
  rhythmDays: number2().int(),
24200
- ring: number2()
24369
+ ring: number2(),
24370
+ phone: string2().nullable().default(null)
24201
24371
  })),
24202
- heardLately: array(contactMomentViewSchema)
24372
+ heardLately: array(contactMomentViewSchema),
24373
+ lent: array(object({
24374
+ itemId: ulidSchema,
24375
+ title: string2(),
24376
+ contactId: ulidSchema,
24377
+ contactTitle: string2(),
24378
+ since: keyDateDaySchema,
24379
+ needFor: object({ taskId: ulidSchema, title: string2(), on: keyDateDaySchema }).nullable()
24380
+ })).default([])
24203
24381
  });
24204
24382
  var personPrivateNoteSchema = object({
24205
24383
  body: string2().nullable(),
@@ -27065,118 +27243,6 @@ var updateCalendarConnectionCalendarInputSchema = object({
27065
27243
  countsAsBusy: boolean3().optional()
27066
27244
  });
27067
27245
 
27068
- // ../../packages/schema/src/contracts/day-record.ts
27069
- var dayDateSchema = string2().regex(/^\d{4}-\d{2}-\d{2}$/, "a day must be YYYY-MM-DD").refine((d) => {
27070
- const [y, m, day] = d.split("-").map(Number);
27071
- const at = new Date(Date.UTC(y, m - 1, day));
27072
- return at.getUTCFullYear() === y && at.getUTCMonth() === m - 1 && at.getUTCDate() === day;
27073
- }, "not a calendar day");
27074
- var timeBlockStatusSchema = _enum2(TIME_BLOCK_STATUSES);
27075
- var recordStateSchema = _enum2(RECORD_STATES);
27076
- var recordConfidenceSchema = _enum2(RECORD_CONFIDENCES);
27077
- var evidenceSourceSchema = _enum2(EVIDENCE_SOURCES);
27078
- var blockEvidenceInputSchema = object({
27079
- source: evidenceSourceSchema,
27080
- refKind: string2().trim().min(1).max(40).optional(),
27081
- refId: string2().trim().min(1).max(100).optional(),
27082
- at: exports_coerce.date().optional(),
27083
- note: string2().trim().min(1).max(500).optional()
27084
- }).strict().refine((v) => Boolean(v.refKind) === Boolean(v.refId), {
27085
- message: "refKind and refId come together",
27086
- path: ["refId"]
27087
- });
27088
- var dayRecordChangeSchema = object({
27089
- blockId: ulidSchema.optional(),
27090
- id: ulidSchema.optional(),
27091
- lifeKind: lifeBlockKindSchema.optional(),
27092
- title: string2().trim().min(1).max(500).optional(),
27093
- startAt: exports_coerce.date().optional(),
27094
- endAt: exports_coerce.date().optional(),
27095
- skipped: literal(true).optional(),
27096
- replacedBy: ulidSchema.optional(),
27097
- evidence: array(blockEvidenceInputSchema).max(20).default([])
27098
- }).strict().refine((v) => Boolean(v.blockId) !== Boolean(v.id), {
27099
- message: "name an existing block (blockId) or mint a new one (id), not both",
27100
- path: ["blockId"]
27101
- }).refine((v) => !v.id || v.lifeKind && v.startAt && v.endAt, {
27102
- message: "a new block needs lifeKind, startAt and endAt",
27103
- path: ["id"]
27104
- }).refine((v) => !v.blockId || !v.lifeKind, {
27105
- message: "a block's kind doesn't change in its record",
27106
- path: ["lifeKind"]
27107
- }).refine((v) => !(v.skipped && v.replacedBy), {
27108
- message: "a block is skipped or replaced, not both",
27109
- path: ["replacedBy"]
27110
- }).refine((v) => !v.startAt || !v.endAt || v.endAt > v.startAt, {
27111
- message: "endAt must be after startAt",
27112
- path: ["endAt"]
27113
- });
27114
- var dayRecordWriteInputSchema = object({
27115
- changes: array(dayRecordChangeSchema).min(1).max(50)
27116
- }).strict();
27117
- var dayRecordAskInputSchema = object({
27118
- question: string2().trim().min(1).max(300),
27119
- blockId: ulidSchema.optional(),
27120
- id: ulidSchema.optional(),
27121
- startAt: exports_coerce.date().optional(),
27122
- endAt: exports_coerce.date().optional()
27123
- }).strict().refine((v) => Boolean(v.blockId) !== Boolean(v.id && v.startAt && v.endAt), {
27124
- message: "ask about a block (blockId) or a gap (id, startAt, endAt)",
27125
- path: ["blockId"]
27126
- }).refine((v) => !v.startAt || !v.endAt || v.endAt > v.startAt, {
27127
- message: "endAt must be after startAt",
27128
- path: ["endAt"]
27129
- });
27130
- var dayRecordUndoInputSchema = object({ receipt: string2().regex(/^\d+$/, "a receipt is a write's id") }).strict();
27131
- var blockEvidenceSchema = object({
27132
- id: string2(),
27133
- source: evidenceSourceSchema,
27134
- refKind: string2().nullable(),
27135
- refId: string2().nullable(),
27136
- at: exports_coerce.date().nullable(),
27137
- weight: number2().int(),
27138
- note: string2().nullable()
27139
- });
27140
- var dayRecordBlockSchema = timeBlockViewSchema.extend({
27141
- status: timeBlockStatusSchema,
27142
- recordState: recordStateSchema,
27143
- confidence: recordConfidenceSchema.nullable(),
27144
- replacedById: string2().nullable(),
27145
- question: string2().nullable(),
27146
- askedAt: exports_coerce.date().nullable(),
27147
- evidence: array(blockEvidenceSchema)
27148
- });
27149
- var dayRecordSchema = object({
27150
- date: dayDateSchema,
27151
- timezone: string2(),
27152
- from: exports_coerce.date(),
27153
- to: exports_coerce.date(),
27154
- blocks: array(dayRecordBlockSchema),
27155
- questions: array(object({ blockId: string2(), question: string2(), askedAt: exports_coerce.date() })),
27156
- filledIn: array(string2()),
27157
- gaps: array(object({ startAt: exports_coerce.date(), endAt: exports_coerce.date() })),
27158
- closed: boolean3(),
27159
- autoClosesAt: exports_coerce.date()
27160
- });
27161
- var dayRecordReceiptLineSchema = object({
27162
- blockId: string2(),
27163
- title: string2(),
27164
- lifeKind: lifeBlockKindSchema.nullable(),
27165
- status: timeBlockStatusSchema,
27166
- text: string2()
27167
- });
27168
- var dayRecordReceiptSchema = object({
27169
- receipt: string2(),
27170
- date: dayDateSchema,
27171
- lines: array(dayRecordReceiptLineSchema),
27172
- googleUpdated: boolean3(),
27173
- day: dayRecordSchema
27174
- });
27175
- var dayRecordUndoResultSchema = object({
27176
- undone: array(string2()),
27177
- day: dayRecordSchema
27178
- });
27179
-
27180
27246
  // ../../packages/schema/src/contracts/plans.ts
27181
27247
  var PLAN_KINDS = ["week", "day"];
27182
27248
  var PLAN_ITEM_ACTIONS = ["plan", "someday", "let_go"];
@@ -28294,6 +28360,9 @@ var assetFacetSchema = object({
28294
28360
  lastServicedAt: isoDateString2.nullish(),
28295
28361
  purchasedAt: isoDateString2.nullish(),
28296
28362
  purchasePrice: number2().min(0).max(1e7).nullish(),
28363
+ priceApprox: boolean3().nullish(),
28364
+ cameWithHouse: boolean3().nullish(),
28365
+ newPrice: number2().min(0).max(1e7).nullish(),
28297
28366
  merchant: string2().min(1).max(200).nullish(),
28298
28367
  merchantContactId: string2().min(1).max(64).nullish(),
28299
28368
  installedAt: isoDateString2.nullish(),
@@ -28694,7 +28763,7 @@ function parseCapture2(input, now) {
28694
28763
 
28695
28764
  // src/meta.ts
28696
28765
  var CLI_NAME = "do";
28697
- var VERSION = "1.289.0";
28766
+ var VERSION = "1.291.0";
28698
28767
  var API_PREFIX = "/api/v1";
28699
28768
  var DEFAULT_API_URL = "http://localhost:3001";
28700
28769
 
@@ -33744,7 +33813,7 @@ var COMMAND_SPECS = [
33744
33813
  ],
33745
33814
  scopes: ["animals:write"],
33746
33815
  returns: "AnimalVetVisit",
33747
- notes: 'POST /api/v1/animals/{id}/vet-visits (`animal_vet_visit`, mockup 03). The visit is the receipt: post it with `receipt: { nodeId: <visit id> }`. `do animals vet-visit <dog> --data \'{"reason":"booster","vaccine":{"name":"DHPPi + L4","source":"sticker"},"weight":{"value":37.8}}\'`.'
33816
+ notes: 'POST /api/v1/animals/{id}/vet-visits (`animal_vet_visit`, mockup 03). The visit is the receipt: post it with `receipt: { nodeId: <animal id>, about: "vet_visit", parts: [<visit id>] }`. `do animals vet-visit <dog> --data \'{"reason":"booster","vaccine":{"name":"DHPPi + L4","source":"sticker"},"weight":{"value":37.8}}\'`.'
33748
33817
  },
33749
33818
  {
33750
33819
  path: ["animals", "vet-visit-get"],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robbeverhelst/do",
3
- "version": "1.289.0",
3
+ "version": "1.291.0",
4
4
  "private": false,
5
5
  "description": "do — the agent-drivable CLI over the public /api/v1 surface",
6
6
  "homepage": "https://github.com/robbeverhelst/do/tree/main/apps/cli",