@arbol-ai/cli 2.12.0 → 2.14.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 (3) hide show
  1. package/README.md +7 -1
  2. package/dist/index.js +445 -106
  3. package/package.json +6 -5
package/README.md CHANGED
@@ -140,7 +140,7 @@ bun install
140
140
  bun run forge # build the pinned Cloudflare Forge with cargo into .forge/ (once; needs Rust)
141
141
  bun run openapi # download https://api.getarbol.com/openapi.json
142
142
  bun run generate # src/generated/ from openapi.json with the plugin in generation/plugins/cli.ts
143
- bun run verify # typecheck, tests and dist/
143
+ bun run verify # typecheck and dist/; tests require an explicit human request
144
144
  ```
145
145
 
146
146
  `src/generated/` is the plugin's output, unedited; everything else in `src/` is the CLI itself.
@@ -187,3 +187,9 @@ is private. Provenance is disabled because npm does not support it for private s
187
187
  ## License
188
188
 
189
189
  [Apache License 2.0](LICENSE)
190
+
191
+ ## Validation
192
+
193
+ `bun run verify` checks types and builds the CLI without executing tests. Tests are
194
+ manual: run `bun run test` or `bun run verify:with-tests` only when a human requests
195
+ that run. Automatic verification, generation and publication use the static path.
package/dist/index.js CHANGED
@@ -5424,7 +5424,7 @@ var commands = {
5424
5424
  flag: "capacity",
5425
5425
  kind: "integer",
5426
5426
  required: false,
5427
- description: "Maximum concurrent units this resource or offering can accept.",
5427
+ description: "Legacy concurrent-session limit above 1; details.maxConcurrent takes precedence. The historical default 1 delegates to resource capacity.",
5428
5428
  default: 1
5429
5429
  },
5430
5430
  {
@@ -5511,7 +5511,7 @@ var commands = {
5511
5511
  minimum: 1,
5512
5512
  maximum: 1e4,
5513
5513
  type: "integer",
5514
- description: "Maximum concurrent units this resource or offering can accept.",
5514
+ description: "Legacy concurrent-session limit above 1; details.maxConcurrent takes precedence. The historical default 1 delegates to resource capacity.",
5515
5515
  default: 1
5516
5516
  },
5517
5517
  details: {
@@ -5797,7 +5797,7 @@ var commands = {
5797
5797
  flag: "capacity",
5798
5798
  kind: "integer",
5799
5799
  required: false,
5800
- description: "Maximum concurrent units this resource or offering can accept."
5800
+ description: "Legacy concurrent-session limit above 1; details.maxConcurrent takes precedence. The historical default 1 delegates to resource capacity."
5801
5801
  },
5802
5802
  {
5803
5803
  name: "durationMinutes",
@@ -5876,7 +5876,7 @@ var commands = {
5876
5876
  minimum: 1,
5877
5877
  maximum: 1e4,
5878
5878
  type: "integer",
5879
- description: "Maximum concurrent units this resource or offering can accept."
5879
+ description: "Legacy concurrent-session limit above 1; details.maxConcurrent takes precedence. The historical default 1 delegates to resource capacity."
5880
5880
  },
5881
5881
  details: {
5882
5882
  type: "object",
@@ -5923,6 +5923,80 @@ var commands = {
5923
5923
  ],
5924
5924
  description: "Lifecycle state controlling whether this record remains available to its domain consumers."
5925
5925
  },
5926
+ resourceRequirements: {
5927
+ maxItems: 30,
5928
+ type: "array",
5929
+ items: {
5930
+ additionalProperties: false,
5931
+ type: "object",
5932
+ required: [
5933
+ "kind"
5934
+ ],
5935
+ properties: {
5936
+ alternatives: {
5937
+ maxItems: 100,
5938
+ type: "array",
5939
+ items: {
5940
+ description: "Stable srs-prefixed Scheduling record identifier; ownership is checked in the authenticated organization.",
5941
+ pattern: "^srs_[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
5942
+ type: "string"
5943
+ },
5944
+ default: [],
5945
+ description: "Explicit resource alternatives for this requirement; an empty list allows any resource of the required kind."
5946
+ },
5947
+ kind: {
5948
+ anyOf: [
5949
+ {
5950
+ const: "practitioner",
5951
+ type: "string"
5952
+ },
5953
+ {
5954
+ const: "assistant",
5955
+ type: "string"
5956
+ },
5957
+ {
5958
+ const: "room",
5959
+ type: "string"
5960
+ },
5961
+ {
5962
+ const: "chair",
5963
+ type: "string"
5964
+ },
5965
+ {
5966
+ const: "equipment",
5967
+ type: "string"
5968
+ },
5969
+ {
5970
+ const: "location",
5971
+ type: "string"
5972
+ },
5973
+ {
5974
+ const: "team",
5975
+ type: "string"
5976
+ },
5977
+ {
5978
+ const: "generic",
5979
+ type: "string"
5980
+ }
5981
+ ],
5982
+ description: "Declared domain kind of this record or configuration element."
5983
+ },
5984
+ quantity: {
5985
+ minimum: 1,
5986
+ maximum: 100,
5987
+ type: "integer",
5988
+ default: 1,
5989
+ description: "Number of resources of this kind required by one booking."
5990
+ },
5991
+ required: {
5992
+ type: "boolean",
5993
+ default: true,
5994
+ description: "Whether this resource requirement must be satisfied for the booking to proceed."
5995
+ }
5996
+ }
5997
+ },
5998
+ description: "Complete replacement for future bookings. Existing appointment and hold allocations stay unchanged."
5999
+ },
5926
6000
  expectedVersion: {
5927
6001
  exclusiveMinimum: 0,
5928
6002
  description: "Version last read by the caller. The mutation fails if another writer has changed this record.",
@@ -7146,40 +7220,35 @@ var commands = {
7146
7220
  flag: "appointment-id",
7147
7221
  kind: "string",
7148
7222
  required: false,
7149
- description: "The appointment it relates to: a priority to bring forward.",
7150
- default: null
7223
+ description: "The appointment it relates to: a priority to bring forward."
7151
7224
  },
7152
7225
  {
7153
7226
  name: "conversationUrl",
7154
7227
  flag: "conversation-url",
7155
7228
  kind: "string",
7156
7229
  required: false,
7157
- description: "Agent conversation URL retained so the scheduling team can reopen the referring conversation.",
7158
- default: null
7230
+ description: "Agent conversation URL retained so the scheduling team can reopen the referring conversation."
7159
7231
  },
7160
7232
  {
7161
7233
  name: "note",
7162
7234
  flag: "note",
7163
7235
  kind: "string",
7164
7236
  required: false,
7165
- description: "Desk note attached to the waiting-list entry; null means no note is recorded.",
7166
- default: null
7237
+ description: "Desk note attached to the waiting-list entry; null means no note is recorded."
7167
7238
  },
7168
7239
  {
7169
7240
  name: "payer",
7170
7241
  flag: "payer",
7171
7242
  kind: "string",
7172
7243
  required: false,
7173
- description: "The payer the patient named, as said.",
7174
- default: null
7244
+ description: "The payer the patient named, as said."
7175
7245
  },
7176
7246
  {
7177
7247
  name: "phone",
7178
7248
  flag: "phone",
7179
7249
  kind: "string",
7180
7250
  required: false,
7181
- description: "Patient contact telephone number; null when no number was recorded.",
7182
- default: null
7251
+ description: "The contact phone supplied or confirmed by the person for this request. Replaces their stored contact phone; omitted or null preserves it."
7183
7252
  },
7184
7253
  {
7185
7254
  name: "reason",
@@ -7198,8 +7267,7 @@ var commands = {
7198
7267
  flag: "resource-id",
7199
7268
  kind: "string",
7200
7269
  required: false,
7201
- description: "One professional or agenda; null = any that offers the service.",
7202
- default: null
7270
+ description: "One professional or agenda; null = any that offers the service."
7203
7271
  },
7204
7272
  {
7205
7273
  name: "serviceId",
@@ -7248,8 +7316,7 @@ var commands = {
7248
7316
  {
7249
7317
  type: "null"
7250
7318
  }
7251
- ],
7252
- default: null
7319
+ ]
7253
7320
  },
7254
7321
  conversationUrl: {
7255
7322
  anyOf: [
@@ -7262,7 +7329,6 @@ var commands = {
7262
7329
  type: "null"
7263
7330
  }
7264
7331
  ],
7265
- default: null,
7266
7332
  description: "Agent conversation URL retained so the scheduling team can reopen the referring conversation."
7267
7333
  },
7268
7334
  note: {
@@ -7274,7 +7340,6 @@ var commands = {
7274
7340
  type: "null"
7275
7341
  }
7276
7342
  ],
7277
- default: null,
7278
7343
  description: "Desk note attached to the waiting-list entry; null means no note is recorded."
7279
7344
  },
7280
7345
  patient: {
@@ -7290,8 +7355,7 @@ var commands = {
7290
7355
  {
7291
7356
  type: "null"
7292
7357
  }
7293
- ],
7294
- default: null
7358
+ ]
7295
7359
  },
7296
7360
  phone: {
7297
7361
  anyOf: [
@@ -7302,8 +7366,53 @@ var commands = {
7302
7366
  type: "null"
7303
7367
  }
7304
7368
  ],
7305
- default: null,
7306
- description: "Patient contact telephone number; null when no number was recorded."
7369
+ description: "The contact phone supplied or confirmed by the person for this request. Replaces their stored contact phone; omitted or null preserves it."
7370
+ },
7371
+ preferences: {
7372
+ additionalProperties: false,
7373
+ type: "object",
7374
+ required: [],
7375
+ properties: {
7376
+ from: {
7377
+ description: "From this local date (YYYY-MM-DD).",
7378
+ anyOf: [
7379
+ {
7380
+ format: "date",
7381
+ type: "string"
7382
+ },
7383
+ {
7384
+ type: "null"
7385
+ }
7386
+ ],
7387
+ default: null
7388
+ },
7389
+ times: {
7390
+ description: '"Martes y jueves en la mañana".',
7391
+ anyOf: [
7392
+ {
7393
+ type: "string"
7394
+ },
7395
+ {
7396
+ type: "null"
7397
+ }
7398
+ ],
7399
+ default: null
7400
+ },
7401
+ to: {
7402
+ description: "Until this local date (YYYY-MM-DD).",
7403
+ anyOf: [
7404
+ {
7405
+ format: "date",
7406
+ type: "string"
7407
+ },
7408
+ {
7409
+ type: "null"
7410
+ }
7411
+ ],
7412
+ default: null
7413
+ }
7414
+ },
7415
+ description: "Patient availability preferences retained with the waiting-list entry."
7307
7416
  },
7308
7417
  reason: {
7309
7418
  anyOf: [
@@ -7333,8 +7442,7 @@ var commands = {
7333
7442
  {
7334
7443
  type: "null"
7335
7444
  }
7336
- ],
7337
- default: null
7445
+ ]
7338
7446
  },
7339
7447
  serviceId: {
7340
7448
  description: "Service identifier within the authenticated organization.",
@@ -7368,11 +7476,69 @@ var commands = {
7368
7476
  }
7369
7477
  },
7370
7478
  title: "Add a patient to the waiting list",
7371
- description: "Put a patient on the clinic's waiting list for the team to act on. Use reason 'payer_review' instead of booking when the patient's payer (EPS) has bookingPolicy 'staff_only' in get_intake_settings (create_appointment refuses them): the team coordinates with the doctor and books it. Use reason 'priority' right after create_appointment when the patient asked for a priority (urgent) appointment: pass that appointment's id as appointmentId so the team can bring it forward. Always pass conversationUrl: this conversation's link in Arbol's Contactabilidad (https://raiz.getarbol.com/conversations/…), so the team opens it there. Pass the patient's name, document and documentType, phone, serviceId (and resourceId only when the patient asked for one professional) and the payer as the patient said it. Calling again for the same patient, service and reason returns the same entry. Then tell the patient the clinic's team will contact them.",
7479
+ description: "Put a patient on the clinic's waiting list for the team to act on, only with the person's consent. Use reason 'payer_review' instead of booking when the patient's payer (EPS) has bookingPolicy 'staff_only' in get_intake_settings (create_appointment refuses them): the team coordinates with the doctor and books it. Use reason 'priority' right after create_appointment when the patient asked for a priority (urgent) appointment: pass that appointment's id as appointmentId so the team can bring it forward. Always pass conversationUrl: this conversation's link in Arbol's Contactabilidad (https://raiz.getarbol.com/conversations/…), so the team opens it there. Pass the patient's name, document and documentType, phone, serviceId and the payer as the patient said it. Use resourceId only for the professional the person requested. Calling again for the same patient, service and reason returns the same open entry and updates supplied consented preferences, note, payer, conversation or appointment association. A supplied confirmed phone replaces the patient contact phone; omitted or null phone preserves it. Omitted fields preserve their values; resourceId:null explicitly accepts any professional. When supplying preferences, send the complete consented date/time window; null fields clear those limits. Identical repeats do not change the version. Staff status, priority and original queue position are preserved. A closed entry is not reopened. This registers a waiting-list request, never an appointment. Then tell the patient the clinic's team will contact them.",
7372
7480
  effect: "write",
7373
7481
  confirmation: null,
7374
7482
  hidden: false
7375
7483
  },
7484
+ "agenda waitlist list": {
7485
+ operation: "agenda.waitlist.list",
7486
+ sdkPath: [
7487
+ "agenda",
7488
+ "waitlist",
7489
+ "list"
7490
+ ],
7491
+ pathField: null,
7492
+ fields: [
7493
+ {
7494
+ name: "offeringId",
7495
+ flag: "offering-id",
7496
+ kind: "string",
7497
+ required: false,
7498
+ description: "Only entries recorded for this exact offering, which only entries from before services and agendas were chosen separately have; newer entries carry serviceId and resourceId instead."
7499
+ },
7500
+ {
7501
+ name: "resourceId",
7502
+ flag: "resource-id",
7503
+ kind: "string",
7504
+ required: false,
7505
+ description: "Only entries that asked for this professional or agenda; entries open to any agenda (resourceId null) are left out."
7506
+ },
7507
+ {
7508
+ name: "serviceId",
7509
+ flag: "service-id",
7510
+ kind: "string",
7511
+ required: false,
7512
+ description: "Only entries for this service, whichever agenda they asked for."
7513
+ }
7514
+ ],
7515
+ inputSchema: {
7516
+ additionalProperties: false,
7517
+ type: "object",
7518
+ properties: {
7519
+ offeringId: {
7520
+ description: "Only entries recorded for this exact offering, which only entries from before services and agendas were chosen separately have; newer entries carry serviceId and resourceId instead.",
7521
+ pattern: "^off_[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
7522
+ type: "string"
7523
+ },
7524
+ resourceId: {
7525
+ description: "Only entries that asked for this professional or agenda; entries open to any agenda (resourceId null) are left out.",
7526
+ pattern: "^srs_[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
7527
+ type: "string"
7528
+ },
7529
+ serviceId: {
7530
+ description: "Only entries for this service, whichever agenda they asked for.",
7531
+ pattern: "^svc_[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
7532
+ type: "string"
7533
+ }
7534
+ }
7535
+ },
7536
+ title: "List Waitlist",
7537
+ description: "List the organization’s waitlist entries: open ones first (urgent, then the longest waiting), then closed ones, most recently changed first, up to 500. Narrow them by serviceId and resourceId (the agenda an entry asked for); offeringId finds only entries from before services and agendas were chosen separately.",
7538
+ effect: "read",
7539
+ confirmation: null,
7540
+ hidden: false
7541
+ },
7376
7542
  "axxa authorizations lookup": {
7377
7543
  operation: "axxa.authorizations.lookup",
7378
7544
  sdkPath: [
@@ -30311,6 +30477,8 @@ var schemaComponents = {
30311
30477
  "locations",
30312
30478
  "name",
30313
30479
  "occupationMinutes",
30480
+ "scheduleSummary",
30481
+ "scheduleTimezones",
30314
30482
  "service",
30315
30483
  "serviceId",
30316
30484
  "truncatedAgendas"
@@ -30439,6 +30607,17 @@ var schemaComponents = {
30439
30607
  }
30440
30608
  ]
30441
30609
  },
30610
+ scheduleSummary: {
30611
+ description: "Human-readable service hours and closures. Availability remains authoritative.",
30612
+ type: "string"
30613
+ },
30614
+ scheduleTimezones: {
30615
+ description: "IANA timezones of the agendas in this bounded projection; hours are interpreted locally.",
30616
+ type: "array",
30617
+ items: {
30618
+ type: "string"
30619
+ }
30620
+ },
30442
30621
  service: {
30443
30622
  additionalProperties: false,
30444
30623
  description: "Current service policy and patient instructions; this projection does not establish payer coverage.",
@@ -31029,7 +31208,7 @@ var schemaComponents = {
31029
31208
  type: "string"
31030
31209
  },
31031
31210
  message: {
31032
- const: "The requested operation does not exist.",
31211
+ const: "The requested resource does not exist.",
31033
31212
  type: "string"
31034
31213
  },
31035
31214
  retryable: {
@@ -31683,35 +31862,6 @@ var schemaComponents = {
31683
31862
  }
31684
31863
  }
31685
31864
  },
31686
- {
31687
- additionalProperties: false,
31688
- type: "object",
31689
- required: [
31690
- "code",
31691
- "message",
31692
- "retryable",
31693
- "data"
31694
- ],
31695
- properties: {
31696
- code: {
31697
- const: "AUTHORIZATION_FAILED",
31698
- type: "string"
31699
- },
31700
- message: {
31701
- const: "The identity provider could not authorize this action.",
31702
- type: "string"
31703
- },
31704
- retryable: {
31705
- const: false,
31706
- type: "boolean"
31707
- },
31708
- data: {
31709
- additionalProperties: false,
31710
- type: "object",
31711
- properties: {}
31712
- }
31713
- }
31714
- },
31715
31865
  {
31716
31866
  additionalProperties: false,
31717
31867
  type: "object",
@@ -32176,35 +32326,6 @@ var schemaComponents = {
32176
32326
  }
32177
32327
  }
32178
32328
  },
32179
- {
32180
- additionalProperties: false,
32181
- type: "object",
32182
- required: [
32183
- "code",
32184
- "message",
32185
- "retryable",
32186
- "data"
32187
- ],
32188
- properties: {
32189
- code: {
32190
- const: "SCHEDULING_CONFLICT",
32191
- type: "string"
32192
- },
32193
- message: {
32194
- const: "The schedule changed or this action conflicts with its current state. Refresh before retrying.",
32195
- type: "string"
32196
- },
32197
- retryable: {
32198
- const: false,
32199
- type: "boolean"
32200
- },
32201
- data: {
32202
- additionalProperties: false,
32203
- type: "object",
32204
- properties: {}
32205
- }
32206
- }
32207
- },
32208
32329
  {
32209
32330
  additionalProperties: false,
32210
32331
  type: "object",
@@ -33626,6 +33747,64 @@ var schemaComponents = {
33626
33747
  }
33627
33748
  }
33628
33749
  },
33750
+ {
33751
+ additionalProperties: false,
33752
+ type: "object",
33753
+ required: [
33754
+ "code",
33755
+ "message",
33756
+ "retryable",
33757
+ "data"
33758
+ ],
33759
+ properties: {
33760
+ code: {
33761
+ const: "REMOVAL_WORKFLOW_UNAVAILABLE",
33762
+ type: "string"
33763
+ },
33764
+ message: {
33765
+ const: "Durable removal is unavailable here; use the bounded manual removal operations.",
33766
+ type: "string"
33767
+ },
33768
+ retryable: {
33769
+ const: false,
33770
+ type: "boolean"
33771
+ },
33772
+ data: {
33773
+ additionalProperties: false,
33774
+ type: "object",
33775
+ properties: {}
33776
+ }
33777
+ }
33778
+ },
33779
+ {
33780
+ additionalProperties: false,
33781
+ type: "object",
33782
+ required: [
33783
+ "code",
33784
+ "message",
33785
+ "retryable",
33786
+ "data"
33787
+ ],
33788
+ properties: {
33789
+ code: {
33790
+ const: "REMOVAL_JOB_CONFLICT",
33791
+ type: "string"
33792
+ },
33793
+ message: {
33794
+ const: "A removal is already active, or this idempotency key belongs to another decision.",
33795
+ type: "string"
33796
+ },
33797
+ retryable: {
33798
+ const: false,
33799
+ type: "boolean"
33800
+ },
33801
+ data: {
33802
+ additionalProperties: false,
33803
+ type: "object",
33804
+ properties: {}
33805
+ }
33806
+ }
33807
+ },
33629
33808
  {
33630
33809
  additionalProperties: false,
33631
33810
  type: "object",
@@ -33963,7 +34142,7 @@ var schemaComponents = {
33963
34142
  minimum: 1,
33964
34143
  maximum: 1e4,
33965
34144
  type: "integer",
33966
- description: "Maximum concurrent units this resource or offering can accept."
34145
+ description: "Legacy offering concurrency limit when above one and details.maxConcurrent is absent; one defers to resource capacity."
33967
34146
  },
33968
34147
  details: {
33969
34148
  type: "object",
@@ -43787,6 +43966,7 @@ var schemaComponents = {
43787
43966
  "followUpAfterMinutes",
43788
43967
  "followUpMessage",
43789
43968
  "greeting",
43969
+ "handoffMessage",
43790
43970
  "humanReplyTimeoutMinutes",
43791
43971
  "investigationsEnabled",
43792
43972
  "model",
@@ -43976,7 +44156,7 @@ var schemaComponents = {
43976
44156
  budgetExhaustedMessage: {
43977
44157
  anyOf: [
43978
44158
  {
43979
- description: "Text Agents on WhatsApp. What the contact reads when the Agent has used its `monthlyTokenBudget`: the conversation then goes to the team, as an escalation does, and the Agent writes nothing until the budget is raised or the month ends. Null: the escalation's fixed note in the Agent's language.",
44159
+ description: "Text Agents on WhatsApp. What the contact reads when the Agent has used its `monthlyTokenBudget`: the conversation then goes to the team, as an escalation does, and the Agent writes nothing until the budget is raised or the month ends. Null: `handoffMessage`, including an empty notice when disabled.",
43980
44160
  maxLength: 1000,
43981
44161
  minLength: 1,
43982
44162
  type: "string"
@@ -44047,6 +44227,18 @@ var schemaComponents = {
44047
44227
  }
44048
44228
  ]
44049
44229
  },
44230
+ handoffMessage: {
44231
+ anyOf: [
44232
+ {
44233
+ description: "Text Agents on WhatsApp. The notice appended after an escalation or a requested human handoff. Null: the current localized review notice or the case-specific notice supplied under the Agent's instructions. An empty string disables the notice; the handoff and pause still happen. The model does not write this notice.",
44234
+ maxLength: 1000,
44235
+ type: "string"
44236
+ },
44237
+ {
44238
+ type: "null"
44239
+ }
44240
+ ]
44241
+ },
44050
44242
  humanReplyTimeoutMinutes: {
44051
44243
  anyOf: [
44052
44244
  {
@@ -44426,7 +44618,7 @@ var schemaComponents = {
44426
44618
  budgetExhaustedMessage: {
44427
44619
  anyOf: [
44428
44620
  {
44429
- description: "Text Agents on WhatsApp. What the contact reads when the Agent has used its `monthlyTokenBudget`: the conversation then goes to the team, as an escalation does, and the Agent writes nothing until the budget is raised or the month ends. Null: the escalation's fixed note in the Agent's language.",
44621
+ description: "Text Agents on WhatsApp. What the contact reads when the Agent has used its `monthlyTokenBudget`: the conversation then goes to the team, as an escalation does, and the Agent writes nothing until the budget is raised or the month ends. Null: `handoffMessage`, including an empty notice when disabled.",
44430
44622
  maxLength: 1000,
44431
44623
  minLength: 1,
44432
44624
  type: "string"
@@ -44509,6 +44701,18 @@ var schemaComponents = {
44509
44701
  }
44510
44702
  ]
44511
44703
  },
44704
+ handoffMessage: {
44705
+ anyOf: [
44706
+ {
44707
+ description: "Text Agents on WhatsApp. The notice appended after an escalation or a requested human handoff. Null: the current localized review notice or the case-specific notice supplied under the Agent's instructions. An empty string disables the notice; the handoff and pause still happen. The model does not write this notice.",
44708
+ maxLength: 1000,
44709
+ type: "string"
44710
+ },
44711
+ {
44712
+ type: "null"
44713
+ }
44714
+ ]
44715
+ },
44512
44716
  humanReplyTimeoutMinutes: {
44513
44717
  anyOf: [
44514
44718
  {
@@ -64770,7 +64974,7 @@ var schemaComponents = {
64770
64974
  minimum: 1,
64771
64975
  maximum: 1e4,
64772
64976
  type: "integer",
64773
- description: "Maximum concurrent units this resource or offering can accept.",
64977
+ description: "Legacy concurrent-session limit above 1; details.maxConcurrent takes precedence. The historical default 1 delegates to resource capacity.",
64774
64978
  default: 1
64775
64979
  },
64776
64980
  details: {
@@ -64984,7 +65188,7 @@ var schemaComponents = {
64984
65188
  minimum: 1,
64985
65189
  maximum: 1e4,
64986
65190
  type: "integer",
64987
- description: "Maximum concurrent units this resource or offering can accept."
65191
+ description: "Legacy concurrent-session limit above 1; details.maxConcurrent takes precedence. The historical default 1 delegates to resource capacity."
64988
65192
  },
64989
65193
  details: {
64990
65194
  type: "object",
@@ -65031,6 +65235,80 @@ var schemaComponents = {
65031
65235
  ],
65032
65236
  description: "Lifecycle state controlling whether this record remains available to its domain consumers."
65033
65237
  },
65238
+ resourceRequirements: {
65239
+ maxItems: 30,
65240
+ type: "array",
65241
+ items: {
65242
+ additionalProperties: false,
65243
+ type: "object",
65244
+ required: [
65245
+ "kind"
65246
+ ],
65247
+ properties: {
65248
+ alternatives: {
65249
+ maxItems: 100,
65250
+ type: "array",
65251
+ items: {
65252
+ description: "Stable srs-prefixed Scheduling record identifier; ownership is checked in the authenticated organization.",
65253
+ pattern: "^srs_[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
65254
+ type: "string"
65255
+ },
65256
+ default: [],
65257
+ description: "Explicit resource alternatives for this requirement; an empty list allows any resource of the required kind."
65258
+ },
65259
+ kind: {
65260
+ anyOf: [
65261
+ {
65262
+ const: "practitioner",
65263
+ type: "string"
65264
+ },
65265
+ {
65266
+ const: "assistant",
65267
+ type: "string"
65268
+ },
65269
+ {
65270
+ const: "room",
65271
+ type: "string"
65272
+ },
65273
+ {
65274
+ const: "chair",
65275
+ type: "string"
65276
+ },
65277
+ {
65278
+ const: "equipment",
65279
+ type: "string"
65280
+ },
65281
+ {
65282
+ const: "location",
65283
+ type: "string"
65284
+ },
65285
+ {
65286
+ const: "team",
65287
+ type: "string"
65288
+ },
65289
+ {
65290
+ const: "generic",
65291
+ type: "string"
65292
+ }
65293
+ ],
65294
+ description: "Declared domain kind of this record or configuration element."
65295
+ },
65296
+ quantity: {
65297
+ minimum: 1,
65298
+ maximum: 100,
65299
+ type: "integer",
65300
+ default: 1,
65301
+ description: "Number of resources of this kind required by one booking."
65302
+ },
65303
+ required: {
65304
+ type: "boolean",
65305
+ default: true,
65306
+ description: "Whether this resource requirement must be satisfied for the booking to proceed."
65307
+ }
65308
+ }
65309
+ },
65310
+ description: "Complete replacement for future bookings. Existing appointment and hold allocations stay unchanged."
65311
+ },
65034
65312
  expectedVersion: {
65035
65313
  exclusiveMinimum: 0,
65036
65314
  description: "Version last read by the caller. The mutation fails if another writer has changed this record.",
@@ -65892,6 +66170,27 @@ var schemaComponents = {
65892
66170
  }
65893
66171
  }
65894
66172
  },
66173
+ AgendaWaitlistListInput: {
66174
+ additionalProperties: false,
66175
+ type: "object",
66176
+ properties: {
66177
+ offeringId: {
66178
+ description: "Only entries recorded for this exact offering, which only entries from before services and agendas were chosen separately have; newer entries carry serviceId and resourceId instead.",
66179
+ pattern: "^off_[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
66180
+ type: "string"
66181
+ },
66182
+ resourceId: {
66183
+ description: "Only entries that asked for this professional or agenda; entries open to any agenda (resourceId null) are left out.",
66184
+ pattern: "^srs_[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
66185
+ type: "string"
66186
+ },
66187
+ serviceId: {
66188
+ description: "Only entries for this service, whichever agenda they asked for.",
66189
+ pattern: "^svc_[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
66190
+ type: "string"
66191
+ }
66192
+ }
66193
+ },
65895
66194
  AgendaWaitlistJoinInput: {
65896
66195
  additionalProperties: false,
65897
66196
  type: "object",
@@ -65912,8 +66211,7 @@ var schemaComponents = {
65912
66211
  {
65913
66212
  type: "null"
65914
66213
  }
65915
- ],
65916
- default: null
66214
+ ]
65917
66215
  },
65918
66216
  conversationUrl: {
65919
66217
  anyOf: [
@@ -65926,7 +66224,6 @@ var schemaComponents = {
65926
66224
  type: "null"
65927
66225
  }
65928
66226
  ],
65929
- default: null,
65930
66227
  description: "Agent conversation URL retained so the scheduling team can reopen the referring conversation."
65931
66228
  },
65932
66229
  note: {
@@ -65938,7 +66235,6 @@ var schemaComponents = {
65938
66235
  type: "null"
65939
66236
  }
65940
66237
  ],
65941
- default: null,
65942
66238
  description: "Desk note attached to the waiting-list entry; null means no note is recorded."
65943
66239
  },
65944
66240
  patient: {
@@ -65954,8 +66250,7 @@ var schemaComponents = {
65954
66250
  {
65955
66251
  type: "null"
65956
66252
  }
65957
- ],
65958
- default: null
66253
+ ]
65959
66254
  },
65960
66255
  phone: {
65961
66256
  anyOf: [
@@ -65966,8 +66261,53 @@ var schemaComponents = {
65966
66261
  type: "null"
65967
66262
  }
65968
66263
  ],
65969
- default: null,
65970
- description: "Patient contact telephone number; null when no number was recorded."
66264
+ description: "The contact phone supplied or confirmed by the person for this request. Replaces their stored contact phone; omitted or null preserves it."
66265
+ },
66266
+ preferences: {
66267
+ additionalProperties: false,
66268
+ type: "object",
66269
+ required: [],
66270
+ properties: {
66271
+ from: {
66272
+ description: "From this local date (YYYY-MM-DD).",
66273
+ anyOf: [
66274
+ {
66275
+ format: "date",
66276
+ type: "string"
66277
+ },
66278
+ {
66279
+ type: "null"
66280
+ }
66281
+ ],
66282
+ default: null
66283
+ },
66284
+ times: {
66285
+ description: '"Martes y jueves en la mañana".',
66286
+ anyOf: [
66287
+ {
66288
+ type: "string"
66289
+ },
66290
+ {
66291
+ type: "null"
66292
+ }
66293
+ ],
66294
+ default: null
66295
+ },
66296
+ to: {
66297
+ description: "Until this local date (YYYY-MM-DD).",
66298
+ anyOf: [
66299
+ {
66300
+ format: "date",
66301
+ type: "string"
66302
+ },
66303
+ {
66304
+ type: "null"
66305
+ }
66306
+ ],
66307
+ default: null
66308
+ }
66309
+ },
66310
+ description: "Patient availability preferences retained with the waiting-list entry."
65971
66311
  },
65972
66312
  reason: {
65973
66313
  anyOf: [
@@ -65997,8 +66337,7 @@ var schemaComponents = {
65997
66337
  {
65998
66338
  type: "null"
65999
66339
  }
66000
- ],
66001
- default: null
66340
+ ]
66002
66341
  },
66003
66342
  serviceId: {
66004
66343
  description: "Service identifier within the authenticated organization.",
@@ -76437,9 +76776,9 @@ var schemaComponents = {
76437
76776
  // src/generated/generation.json
76438
76777
  var generation_default = {
76439
76778
  formatVersion: 6,
76440
- release: "1.20261028.150906",
76441
- openapiSha256: "748b57ac1d07b59617769019455e72e1ecd8690b8a25ca63f017e02e95abda4c",
76442
- openapiContentSha256: "3d0ebf02604003a5c7ecc8ee62b01bf6f3370dbeff24255b54b67189168ed1f8",
76779
+ release: "1.20261028.202015",
76780
+ openapiSha256: "513a2324aeeace2d574f76d49eb9d3dbfc8113a97849ff8e418e7d17a8d2bfba",
76781
+ openapiContentSha256: "268d85ea2cea9f6a0cc5de011c11912128724fb1e1a101e2b12cb628a5e2c13d",
76443
76782
  forge: {
76444
76783
  repository: "https://github.com/cloudflare/forge",
76445
76784
  commit: "7f86447210b7bea3779bfdab3cd5655eade0eadb",
@@ -76452,7 +76791,7 @@ var generation_default = {
76452
76791
  outputs: [
76453
76792
  {
76454
76793
  path: "src/generated/commands.ts",
76455
- sha256: "0cd9dde2e9d13c435b1a081c6b09514de111c084e6ff8505b5ce37bf5ef0f5e7"
76794
+ sha256: "f773acce3f565ee909c2c58b6238fb1ca080710f919a48b9ff97fe62cb789c61"
76456
76795
  }
76457
76796
  ]
76458
76797
  };
@@ -76807,7 +77146,7 @@ ${name}`);
76807
77146
  }
76808
77147
 
76809
77148
  // src/index.ts
76810
- var VERSION = "2.12.0";
77149
+ var VERSION = "2.14.0";
76811
77150
  var RELEASE = generation_default.release;
76812
77151
  var SDK_PATHS = new Map(Object.values(commands).map((command) => [command.operation, command.sdkPath]));
76813
77152
  var SERVICES = [...new Set(Object.keys(commands).map((name) => name.split(" ")[0]))].toSorted();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arbol-ai/cli",
3
- "version": "2.12.0",
3
+ "version": "2.14.0",
4
4
  "description": "The Arbol CLI: the Arbol API from your terminal, with commands generated by Cloudflare Forge from the public OpenAPI.",
5
5
  "keywords": [
6
6
  "arbol",
@@ -41,10 +41,11 @@
41
41
  "typecheck": "tsc --noEmit",
42
42
  "test": "bun test tests",
43
43
  "build": "bun scripts/build.ts",
44
- "verify": "bun run typecheck && bun run test && bun run build"
44
+ "verify": "bun run typecheck && bun run build",
45
+ "verify:with-tests": "bun run typecheck && bun run test && bun run build"
45
46
  },
46
47
  "dependencies": {
47
- "@arbol-ai/sdk": "2.13.0",
48
+ "@arbol-ai/sdk": "2.15.0",
48
49
  "ajv": "8.20.0",
49
50
  "ajv-formats": "3.0.1",
50
51
  "oauth4webapi": "3.8.8"
@@ -59,8 +60,8 @@
59
60
  "packageManager": "bun@1.4.3",
60
61
  "arbol": {
61
62
  "openapi": {
62
- "release": "1.20261028.150906",
63
- "sha256": "3d0ebf02604003a5c7ecc8ee62b01bf6f3370dbeff24255b54b67189168ed1f8"
63
+ "release": "1.20261028.202015",
64
+ "sha256": "268d85ea2cea9f6a0cc5de011c11912128724fb1e1a101e2b12cb628a5e2c13d"
64
65
  }
65
66
  }
66
67
  }