@vinaverse/server 0.1.0-alpha.2 → 0.1.0-alpha.21

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.
@@ -1,4 +1,4 @@
1
- import { c as components$1, w as webhooks } from './vinaverse-v1.d-BVc4uyUd.js';
1
+ import { c as components$1, w as webhooks } from './vinaverse-v1.d-D-NPpZqW.js';
2
2
  import { c as NonceStore, a as IdempotencyStore } from './nonces-scwljZwl.js';
3
3
 
4
4
  /**
@@ -265,6 +265,18 @@ declare const TOOL_OPERATIONS: {
265
265
  readonly pathParams: {};
266
266
  readonly queryParams: {};
267
267
  };
268
+ readonly get_setup_state: {
269
+ readonly id: "get_setup_state";
270
+ readonly method: "GET";
271
+ readonly path: "/business/setup";
272
+ readonly effect: "read";
273
+ readonly maxResultBytes: 16384;
274
+ readonly successStatus: 200;
275
+ readonly idempotencyKey: false;
276
+ readonly body: false;
277
+ readonly pathParams: {};
278
+ readonly queryParams: {};
279
+ };
268
280
  readonly get_workspace: {
269
281
  readonly id: "get_workspace";
270
282
  readonly method: "GET";
@@ -366,6 +378,31 @@ declare const TOOL_OPERATIONS: {
366
378
  };
367
379
  };
368
380
  };
381
+ readonly list_services_in_area: {
382
+ readonly id: "list_services_in_area";
383
+ readonly method: "GET";
384
+ readonly path: "/areas/services";
385
+ readonly effect: "read";
386
+ readonly maxResultBytes: 16384;
387
+ readonly successStatus: 200;
388
+ readonly idempotencyKey: false;
389
+ readonly body: false;
390
+ readonly pathParams: {};
391
+ readonly queryParams: {
392
+ readonly lat: {
393
+ readonly type: "number";
394
+ readonly required: false;
395
+ };
396
+ readonly lng: {
397
+ readonly type: "number";
398
+ readonly required: false;
399
+ };
400
+ readonly radius_miles: {
401
+ readonly type: "integer";
402
+ readonly required: false;
403
+ };
404
+ };
405
+ };
369
406
  readonly resolve_place: {
370
407
  readonly id: "resolve_place";
371
408
  readonly method: "GET";
@@ -578,6 +615,55 @@ interface components {
578
615
  price_is_from?: boolean;
579
616
  duration_minutes: number;
580
617
  };
618
+ /**
619
+ * @description `estimate`: the tenant did not count exactly (a cached or sampled figure); the agent says "about"
620
+ * @enum {string}
621
+ */
622
+ CountStatus: "exact" | "estimate";
623
+ InventoryService: {
624
+ id: string;
625
+ name: string;
626
+ count: number;
627
+ count_status: components["schemas"]["CountStatus"];
628
+ };
629
+ InventoryCategory: {
630
+ id: string;
631
+ name: string;
632
+ count: number;
633
+ count_status: components["schemas"]["CountStatus"];
634
+ services?: components["schemas"]["InventoryService"][];
635
+ };
636
+ NearbyArea: {
637
+ area: components["schemas"]["Area"];
638
+ lat?: number;
639
+ lng?: number;
640
+ count: number;
641
+ count_status: components["schemas"]["CountStatus"];
642
+ };
643
+ /** @description v1-draft.15, `list_services_in_area`'s result: what is represented around the place, and where else there is supply. Empty `categories` means nothing is offered within the radius; `nearest_areas` then says where there is. */
644
+ AreaInventory: {
645
+ /** @constant */
646
+ type: "area_inventory";
647
+ /**
648
+ * Format: date-time
649
+ * @description when the tenant counted
650
+ */
651
+ as_of: string;
652
+ categories: components["schemas"]["InventoryCategory"][];
653
+ /** @description the nearest areas outside the radius that have supply, nearest first */
654
+ nearest_areas: components["schemas"]["NearbyArea"][];
655
+ };
656
+ /** @description v1-draft.15: one approved photo. `id` and `version` name the asset as the tenant's media store does: a new version is a new photo, and approval binds to the version, never to a mutable URL. The URL is https and starts with a prefix the manifest registers (`image_url_prefixes`), compared after the runtime parses and normalizes it: a URL with user info, a backslash, a fragment, or a `.` or `..` path segment (also percent-encoded, as `%2e`) is dropped, never resolved, so no path can step outside the approved one. `expires_at` is set only when the URL expires (a signed URL), and then the runtime drops it from a card it records after that time. */
657
+ ImageAsset: {
658
+ id: string;
659
+ version: string;
660
+ /** Format: uri */
661
+ url: string;
662
+ width?: number;
663
+ height?: number;
664
+ /** Format: date-time */
665
+ expires_at?: string;
666
+ };
581
667
  ProfessionalSummary: {
582
668
  /** @constant */
583
669
  type: "professional";
@@ -586,8 +672,12 @@ interface components {
586
672
  headline?: string;
587
673
  /** Format: uri */
588
674
  photo_url?: string;
675
+ /** @description v1-draft.15, approved photos, the first the hero (`photo_url` is its URL) */
676
+ images?: components["schemas"]["ImageAsset"][];
589
677
  rating?: components["schemas"]["Rating"];
590
678
  area?: components["schemas"]["Area"];
679
+ /** @description v1-draft.15: the lowest price the professional asks for a service, as the tenant knows it; left out when it does not */
680
+ price_from?: components["schemas"]["Money"];
591
681
  top_services?: components["schemas"]["ServiceOffer"][];
592
682
  /** Format: date-time */
593
683
  next_available?: string | null;
@@ -609,12 +699,19 @@ interface components {
609
699
  category?: string;
610
700
  /** Format: uri */
611
701
  photo_url?: string;
702
+ /** @description v1-draft.15, approved photos, the first the hero (`photo_url` is its URL) */
703
+ images?: components["schemas"]["ImageAsset"][];
612
704
  rating?: components["schemas"]["Rating"];
613
705
  area?: components["schemas"]["Area"];
614
706
  price_from?: components["schemas"]["Money"];
615
707
  /** @enum {string} */
616
708
  price_unit?: "hour" | "day" | "week" | "month";
617
709
  deep_link: string;
710
+ /**
711
+ * @description v1-draft.16, the renter licence the space asks for: `sent` (sent before renting) or `approved`. Absent: the space names none, never "none needed"; the agent says a licence is needed only when this says so.
712
+ * @enum {string}
713
+ */
714
+ renter_license_requirement?: "sent" | "approved";
618
715
  };
619
716
  WorkspaceDetail: components["schemas"]["WorkspaceSummary"] & {
620
717
  description?: string;
@@ -760,6 +857,35 @@ interface components {
760
857
  country: string;
761
858
  };
762
859
  TextList: string[];
860
+ /** @description A business's setup steps, in the order the business should do them. The steps and their state are the tenant's own record; a business with nothing left to set up has every step `done`. */
861
+ SetupState: {
862
+ steps: components["schemas"]["SetupStep"][];
863
+ };
864
+ /** @description One step of a business's setup. `title`, `body` and `label` are the tenant's own words for it, shown on the `next_step` card when the step has a `deep_link`. A `blocked` step says why in `reason`. */
865
+ SetupStep: {
866
+ /**
867
+ * @description the tenant's id for the step, stable across reads; the agent names a step by it
868
+ * @example business_name
869
+ * @example opening_hours
870
+ * @example payouts
871
+ */
872
+ id: string;
873
+ /** @description the step, as the person knows it */
874
+ title: string;
875
+ /**
876
+ * @description `not_started` and `in_progress` are still to do, `done` is finished, and `blocked` waits on something the person cannot do in this conversation (a review, another step), named in `reason`.
877
+ * @enum {string}
878
+ */
879
+ status: "not_started" | "in_progress" | "done" | "blocked";
880
+ /** @description what the step is for, in one or two sentences */
881
+ body?: string;
882
+ /** @description why a `blocked` step is blocked; only a `blocked` step has one */
883
+ reason?: string;
884
+ /** @description the action's words on its `next_step` card */
885
+ label?: string;
886
+ /** @description For a step finished on the tenant's own screen, a link into the tenant's app. It must start with a prefix registered for the environment and pass the link checks (`admin-v1.yaml`, `Connector.deep_link_prefixes`). The runtime removes one that fails, and the step is then shown without a card. */
887
+ deep_link?: string;
888
+ } & unknown;
763
889
  /** @description One of the signed-in customer's kits: items a styling-kit retailer sends to try at home, each kept or returned, the kept ones charged. `status` is where the kit is in its life: `preparing` (being put together), `shipped` (on its way), `delivered` (arrived, deciding not open yet), `feedback_open` (the customer decides keep or return for each item, until `feedback_closes_at`), `feedback_closed` (the decisions are in; the items to return are due back by `return_by`), `returned` (the returned items arrived), `billed` (the kept items were charged: `order_id`), `cancelled`. A retailer whose kits skip a state (feedback opens on delivery) never sends it. "What do I still need to do" is answered by `undecided_count` and each item's `decision` before `feedback_closes_at`, and by the items to return and `return_by` after it. */
764
890
  Kit: {
765
891
  /** @constant */
@@ -1218,6 +1344,36 @@ interface operations {
1218
1344
  default: components["responses"]["Problem"];
1219
1345
  };
1220
1346
  };
1347
+ list_services_in_area: {
1348
+ parameters: {
1349
+ query?: {
1350
+ lat?: components["parameters"]["Lat"];
1351
+ lng?: components["parameters"]["Lng"];
1352
+ radius_miles?: components["parameters"]["RadiusMiles"];
1353
+ };
1354
+ header?: {
1355
+ /** @description on every tool call in a session, a channel session's included (never on the catalogue sweep), the session's id; informational and not signed */
1356
+ "Vinaverse-Session"?: components["parameters"]["VinaverseSession"];
1357
+ /** @description on every tool call of a session that belongs to a conversation (never on the catalogue sweep), its id; informational and not signed */
1358
+ "Vinaverse-Conversation"?: components["parameters"]["VinaverseConversation"];
1359
+ };
1360
+ path?: never;
1361
+ cookie?: never;
1362
+ };
1363
+ requestBody?: never;
1364
+ responses: {
1365
+ /** @description OK */
1366
+ 200: {
1367
+ headers: {
1368
+ [name: string]: unknown;
1369
+ };
1370
+ content: {
1371
+ "application/json": components["schemas"]["AreaInventory"];
1372
+ };
1373
+ };
1374
+ default: components["responses"]["Problem"];
1375
+ };
1376
+ };
1221
1377
  search_workspaces: {
1222
1378
  parameters: {
1223
1379
  query?: {
@@ -1605,6 +1761,32 @@ interface operations {
1605
1761
  default: components["responses"]["Problem"];
1606
1762
  };
1607
1763
  };
1764
+ get_setup_state: {
1765
+ parameters: {
1766
+ query?: never;
1767
+ header?: {
1768
+ /** @description on every tool call in a session, a channel session's included (never on the catalogue sweep), the session's id; informational and not signed */
1769
+ "Vinaverse-Session"?: components["parameters"]["VinaverseSession"];
1770
+ /** @description on every tool call of a session that belongs to a conversation (never on the catalogue sweep), its id; informational and not signed */
1771
+ "Vinaverse-Conversation"?: components["parameters"]["VinaverseConversation"];
1772
+ };
1773
+ path?: never;
1774
+ cookie?: never;
1775
+ };
1776
+ requestBody?: never;
1777
+ responses: {
1778
+ /** @description OK */
1779
+ 200: {
1780
+ headers: {
1781
+ [name: string]: unknown;
1782
+ };
1783
+ content: {
1784
+ "application/json": components["schemas"]["SetupState"];
1785
+ };
1786
+ };
1787
+ default: components["responses"]["Problem"];
1788
+ };
1789
+ };
1608
1790
  create_handoff: {
1609
1791
  parameters: {
1610
1792
  query?: never;
@@ -1,4 +1,4 @@
1
- import { c as components$1, w as webhooks } from './vinaverse-v1.d-BVc4uyUd.cjs';
1
+ import { c as components$1, w as webhooks } from './vinaverse-v1.d-D-NPpZqW.cjs';
2
2
  import { c as NonceStore, a as IdempotencyStore } from './nonces-scwljZwl.cjs';
3
3
 
4
4
  /**
@@ -265,6 +265,18 @@ declare const TOOL_OPERATIONS: {
265
265
  readonly pathParams: {};
266
266
  readonly queryParams: {};
267
267
  };
268
+ readonly get_setup_state: {
269
+ readonly id: "get_setup_state";
270
+ readonly method: "GET";
271
+ readonly path: "/business/setup";
272
+ readonly effect: "read";
273
+ readonly maxResultBytes: 16384;
274
+ readonly successStatus: 200;
275
+ readonly idempotencyKey: false;
276
+ readonly body: false;
277
+ readonly pathParams: {};
278
+ readonly queryParams: {};
279
+ };
268
280
  readonly get_workspace: {
269
281
  readonly id: "get_workspace";
270
282
  readonly method: "GET";
@@ -366,6 +378,31 @@ declare const TOOL_OPERATIONS: {
366
378
  };
367
379
  };
368
380
  };
381
+ readonly list_services_in_area: {
382
+ readonly id: "list_services_in_area";
383
+ readonly method: "GET";
384
+ readonly path: "/areas/services";
385
+ readonly effect: "read";
386
+ readonly maxResultBytes: 16384;
387
+ readonly successStatus: 200;
388
+ readonly idempotencyKey: false;
389
+ readonly body: false;
390
+ readonly pathParams: {};
391
+ readonly queryParams: {
392
+ readonly lat: {
393
+ readonly type: "number";
394
+ readonly required: false;
395
+ };
396
+ readonly lng: {
397
+ readonly type: "number";
398
+ readonly required: false;
399
+ };
400
+ readonly radius_miles: {
401
+ readonly type: "integer";
402
+ readonly required: false;
403
+ };
404
+ };
405
+ };
369
406
  readonly resolve_place: {
370
407
  readonly id: "resolve_place";
371
408
  readonly method: "GET";
@@ -578,6 +615,55 @@ interface components {
578
615
  price_is_from?: boolean;
579
616
  duration_minutes: number;
580
617
  };
618
+ /**
619
+ * @description `estimate`: the tenant did not count exactly (a cached or sampled figure); the agent says "about"
620
+ * @enum {string}
621
+ */
622
+ CountStatus: "exact" | "estimate";
623
+ InventoryService: {
624
+ id: string;
625
+ name: string;
626
+ count: number;
627
+ count_status: components["schemas"]["CountStatus"];
628
+ };
629
+ InventoryCategory: {
630
+ id: string;
631
+ name: string;
632
+ count: number;
633
+ count_status: components["schemas"]["CountStatus"];
634
+ services?: components["schemas"]["InventoryService"][];
635
+ };
636
+ NearbyArea: {
637
+ area: components["schemas"]["Area"];
638
+ lat?: number;
639
+ lng?: number;
640
+ count: number;
641
+ count_status: components["schemas"]["CountStatus"];
642
+ };
643
+ /** @description v1-draft.15, `list_services_in_area`'s result: what is represented around the place, and where else there is supply. Empty `categories` means nothing is offered within the radius; `nearest_areas` then says where there is. */
644
+ AreaInventory: {
645
+ /** @constant */
646
+ type: "area_inventory";
647
+ /**
648
+ * Format: date-time
649
+ * @description when the tenant counted
650
+ */
651
+ as_of: string;
652
+ categories: components["schemas"]["InventoryCategory"][];
653
+ /** @description the nearest areas outside the radius that have supply, nearest first */
654
+ nearest_areas: components["schemas"]["NearbyArea"][];
655
+ };
656
+ /** @description v1-draft.15: one approved photo. `id` and `version` name the asset as the tenant's media store does: a new version is a new photo, and approval binds to the version, never to a mutable URL. The URL is https and starts with a prefix the manifest registers (`image_url_prefixes`), compared after the runtime parses and normalizes it: a URL with user info, a backslash, a fragment, or a `.` or `..` path segment (also percent-encoded, as `%2e`) is dropped, never resolved, so no path can step outside the approved one. `expires_at` is set only when the URL expires (a signed URL), and then the runtime drops it from a card it records after that time. */
657
+ ImageAsset: {
658
+ id: string;
659
+ version: string;
660
+ /** Format: uri */
661
+ url: string;
662
+ width?: number;
663
+ height?: number;
664
+ /** Format: date-time */
665
+ expires_at?: string;
666
+ };
581
667
  ProfessionalSummary: {
582
668
  /** @constant */
583
669
  type: "professional";
@@ -586,8 +672,12 @@ interface components {
586
672
  headline?: string;
587
673
  /** Format: uri */
588
674
  photo_url?: string;
675
+ /** @description v1-draft.15, approved photos, the first the hero (`photo_url` is its URL) */
676
+ images?: components["schemas"]["ImageAsset"][];
589
677
  rating?: components["schemas"]["Rating"];
590
678
  area?: components["schemas"]["Area"];
679
+ /** @description v1-draft.15: the lowest price the professional asks for a service, as the tenant knows it; left out when it does not */
680
+ price_from?: components["schemas"]["Money"];
591
681
  top_services?: components["schemas"]["ServiceOffer"][];
592
682
  /** Format: date-time */
593
683
  next_available?: string | null;
@@ -609,12 +699,19 @@ interface components {
609
699
  category?: string;
610
700
  /** Format: uri */
611
701
  photo_url?: string;
702
+ /** @description v1-draft.15, approved photos, the first the hero (`photo_url` is its URL) */
703
+ images?: components["schemas"]["ImageAsset"][];
612
704
  rating?: components["schemas"]["Rating"];
613
705
  area?: components["schemas"]["Area"];
614
706
  price_from?: components["schemas"]["Money"];
615
707
  /** @enum {string} */
616
708
  price_unit?: "hour" | "day" | "week" | "month";
617
709
  deep_link: string;
710
+ /**
711
+ * @description v1-draft.16, the renter licence the space asks for: `sent` (sent before renting) or `approved`. Absent: the space names none, never "none needed"; the agent says a licence is needed only when this says so.
712
+ * @enum {string}
713
+ */
714
+ renter_license_requirement?: "sent" | "approved";
618
715
  };
619
716
  WorkspaceDetail: components["schemas"]["WorkspaceSummary"] & {
620
717
  description?: string;
@@ -760,6 +857,35 @@ interface components {
760
857
  country: string;
761
858
  };
762
859
  TextList: string[];
860
+ /** @description A business's setup steps, in the order the business should do them. The steps and their state are the tenant's own record; a business with nothing left to set up has every step `done`. */
861
+ SetupState: {
862
+ steps: components["schemas"]["SetupStep"][];
863
+ };
864
+ /** @description One step of a business's setup. `title`, `body` and `label` are the tenant's own words for it, shown on the `next_step` card when the step has a `deep_link`. A `blocked` step says why in `reason`. */
865
+ SetupStep: {
866
+ /**
867
+ * @description the tenant's id for the step, stable across reads; the agent names a step by it
868
+ * @example business_name
869
+ * @example opening_hours
870
+ * @example payouts
871
+ */
872
+ id: string;
873
+ /** @description the step, as the person knows it */
874
+ title: string;
875
+ /**
876
+ * @description `not_started` and `in_progress` are still to do, `done` is finished, and `blocked` waits on something the person cannot do in this conversation (a review, another step), named in `reason`.
877
+ * @enum {string}
878
+ */
879
+ status: "not_started" | "in_progress" | "done" | "blocked";
880
+ /** @description what the step is for, in one or two sentences */
881
+ body?: string;
882
+ /** @description why a `blocked` step is blocked; only a `blocked` step has one */
883
+ reason?: string;
884
+ /** @description the action's words on its `next_step` card */
885
+ label?: string;
886
+ /** @description For a step finished on the tenant's own screen, a link into the tenant's app. It must start with a prefix registered for the environment and pass the link checks (`admin-v1.yaml`, `Connector.deep_link_prefixes`). The runtime removes one that fails, and the step is then shown without a card. */
887
+ deep_link?: string;
888
+ } & unknown;
763
889
  /** @description One of the signed-in customer's kits: items a styling-kit retailer sends to try at home, each kept or returned, the kept ones charged. `status` is where the kit is in its life: `preparing` (being put together), `shipped` (on its way), `delivered` (arrived, deciding not open yet), `feedback_open` (the customer decides keep or return for each item, until `feedback_closes_at`), `feedback_closed` (the decisions are in; the items to return are due back by `return_by`), `returned` (the returned items arrived), `billed` (the kept items were charged: `order_id`), `cancelled`. A retailer whose kits skip a state (feedback opens on delivery) never sends it. "What do I still need to do" is answered by `undecided_count` and each item's `decision` before `feedback_closes_at`, and by the items to return and `return_by` after it. */
764
890
  Kit: {
765
891
  /** @constant */
@@ -1218,6 +1344,36 @@ interface operations {
1218
1344
  default: components["responses"]["Problem"];
1219
1345
  };
1220
1346
  };
1347
+ list_services_in_area: {
1348
+ parameters: {
1349
+ query?: {
1350
+ lat?: components["parameters"]["Lat"];
1351
+ lng?: components["parameters"]["Lng"];
1352
+ radius_miles?: components["parameters"]["RadiusMiles"];
1353
+ };
1354
+ header?: {
1355
+ /** @description on every tool call in a session, a channel session's included (never on the catalogue sweep), the session's id; informational and not signed */
1356
+ "Vinaverse-Session"?: components["parameters"]["VinaverseSession"];
1357
+ /** @description on every tool call of a session that belongs to a conversation (never on the catalogue sweep), its id; informational and not signed */
1358
+ "Vinaverse-Conversation"?: components["parameters"]["VinaverseConversation"];
1359
+ };
1360
+ path?: never;
1361
+ cookie?: never;
1362
+ };
1363
+ requestBody?: never;
1364
+ responses: {
1365
+ /** @description OK */
1366
+ 200: {
1367
+ headers: {
1368
+ [name: string]: unknown;
1369
+ };
1370
+ content: {
1371
+ "application/json": components["schemas"]["AreaInventory"];
1372
+ };
1373
+ };
1374
+ default: components["responses"]["Problem"];
1375
+ };
1376
+ };
1221
1377
  search_workspaces: {
1222
1378
  parameters: {
1223
1379
  query?: {
@@ -1605,6 +1761,32 @@ interface operations {
1605
1761
  default: components["responses"]["Problem"];
1606
1762
  };
1607
1763
  };
1764
+ get_setup_state: {
1765
+ parameters: {
1766
+ query?: never;
1767
+ header?: {
1768
+ /** @description on every tool call in a session, a channel session's included (never on the catalogue sweep), the session's id; informational and not signed */
1769
+ "Vinaverse-Session"?: components["parameters"]["VinaverseSession"];
1770
+ /** @description on every tool call of a session that belongs to a conversation (never on the catalogue sweep), its id; informational and not signed */
1771
+ "Vinaverse-Conversation"?: components["parameters"]["VinaverseConversation"];
1772
+ };
1773
+ path?: never;
1774
+ cookie?: never;
1775
+ };
1776
+ requestBody?: never;
1777
+ responses: {
1778
+ /** @description OK */
1779
+ 200: {
1780
+ headers: {
1781
+ [name: string]: unknown;
1782
+ };
1783
+ content: {
1784
+ "application/json": components["schemas"]["SetupState"];
1785
+ };
1786
+ };
1787
+ default: components["responses"]["Problem"];
1788
+ };
1789
+ };
1608
1790
  create_handoff: {
1609
1791
  parameters: {
1610
1792
  query?: never;