@happyvertical/smrt-places 0.30.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.
@@ -0,0 +1,900 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "generatedAt": "2026-06-23T01:18:42.807Z",
4
+ "packageName": "@happyvertical/smrt-places",
5
+ "packageVersion": "0.30.0",
6
+ "sourceManifestPath": "dist/manifest.json",
7
+ "agentDocPath": "AGENTS.md",
8
+ "sourceHashes": {
9
+ "manifest": "d633c1a1821b9c3cb5fd3925df16d74d5e59eb4d4f442cdd3100d04300533308",
10
+ "packageJson": "a0180c46f73a7171ad1b9caaef46222f97994cb60a65961eacee5a9504aa8ce2",
11
+ "agents": "1f12a465f3ef103ac0ba27bcec1ec2b982fd0f5e8a63b9a42738f2c79ecebe49"
12
+ },
13
+ "exports": [
14
+ ".",
15
+ "./manifest",
16
+ "./manifest.json",
17
+ "./utils"
18
+ ],
19
+ "dependencies": {
20
+ "@happyvertical/ai": "catalog:",
21
+ "@happyvertical/cache": "catalog:",
22
+ "@happyvertical/files": "catalog:",
23
+ "@happyvertical/geo": "catalog:",
24
+ "@happyvertical/logger": "catalog:",
25
+ "@happyvertical/smrt-assets": "workspace:*",
26
+ "@happyvertical/smrt-core": "workspace:*",
27
+ "@happyvertical/smrt-tenancy": "workspace:*",
28
+ "@happyvertical/sql": "catalog:",
29
+ "@happyvertical/utils": "catalog:",
30
+ "@happyvertical/smrt-vitest": "workspace:*",
31
+ "@types/node": "25.0.9",
32
+ "fast-glob": "3.3.3",
33
+ "typescript": "^5.9.3",
34
+ "vite": "^7.3.1",
35
+ "vitest": "^4.0.17"
36
+ },
37
+ "smrtDependencies": [
38
+ "@happyvertical/smrt-assets",
39
+ "@happyvertical/smrt-core",
40
+ "@happyvertical/smrt-tenancy",
41
+ "@happyvertical/smrt-vitest"
42
+ ],
43
+ "sdkDependencies": [
44
+ "@happyvertical/ai",
45
+ "@happyvertical/cache",
46
+ "@happyvertical/files",
47
+ "@happyvertical/geo",
48
+ "@happyvertical/logger",
49
+ "@happyvertical/sql",
50
+ "@happyvertical/utils"
51
+ ],
52
+ "tags": [],
53
+ "risks": [],
54
+ "objects": [
55
+ {
56
+ "name": "PlaceAssetCollection",
57
+ "qualifiedName": "@happyvertical/smrt-places:PlaceAssetCollection",
58
+ "collection": "placeassets",
59
+ "tableName": "place_assets",
60
+ "packageName": "@happyvertical/smrt-places",
61
+ "extends": "SmrtJunction",
62
+ "fields": [],
63
+ "relationships": [],
64
+ "methods": [
65
+ "addAsset",
66
+ "attach",
67
+ "byLeft",
68
+ "byRight",
69
+ "detach",
70
+ "getAssets",
71
+ "removeAsset",
72
+ "setLinks"
73
+ ],
74
+ "surfaces": [],
75
+ "relationshipFeatures": [
76
+ "SmrtJunction",
77
+ "uuidColumns"
78
+ ],
79
+ "tags": [],
80
+ "risks": []
81
+ },
82
+ {
83
+ "name": "PlaceCollection",
84
+ "qualifiedName": "@happyvertical/smrt-places:PlaceCollection",
85
+ "collection": "places",
86
+ "tableName": "place_collections",
87
+ "packageName": "@happyvertical/smrt-places",
88
+ "extends": "SmrtCollection",
89
+ "fields": [],
90
+ "relationships": [],
91
+ "methods": [
92
+ "addAsset",
93
+ "discoverNearby",
94
+ "findByTenant",
95
+ "findGlobal",
96
+ "findWithGlobals",
97
+ "getAssets",
98
+ "getByType",
99
+ "getChildren",
100
+ "getHierarchy",
101
+ "getRootPlaces",
102
+ "lookupOrCreate",
103
+ "removeAsset",
104
+ "resolveTrackPlaces",
105
+ "searchByProximity"
106
+ ],
107
+ "surfaces": [],
108
+ "relationshipFeatures": [
109
+ "uuidColumns"
110
+ ],
111
+ "tags": [],
112
+ "risks": []
113
+ },
114
+ {
115
+ "name": "PlaceTypeCollection",
116
+ "qualifiedName": "@happyvertical/smrt-places:PlaceTypeCollection",
117
+ "collection": "placetypes",
118
+ "tableName": "place_type_collections",
119
+ "packageName": "@happyvertical/smrt-places",
120
+ "extends": "SmrtCollection",
121
+ "fields": [],
122
+ "relationships": [],
123
+ "methods": [
124
+ "getBySlug",
125
+ "getOrCreate",
126
+ "initializeDefaults"
127
+ ],
128
+ "surfaces": [],
129
+ "relationshipFeatures": [
130
+ "uuidColumns"
131
+ ],
132
+ "tags": [],
133
+ "risks": []
134
+ },
135
+ {
136
+ "name": "Place",
137
+ "qualifiedName": "@happyvertical/smrt-places:Place",
138
+ "collection": "places",
139
+ "tableName": "places",
140
+ "packageName": "@happyvertical/smrt-places",
141
+ "extends": "SmrtHierarchical",
142
+ "fields": [
143
+ {
144
+ "name": "created_at",
145
+ "type": "datetime",
146
+ "required": false,
147
+ "columnType": "TIMESTAMP"
148
+ },
149
+ {
150
+ "name": "updated_at",
151
+ "type": "datetime",
152
+ "required": false,
153
+ "columnType": "TIMESTAMP"
154
+ },
155
+ {
156
+ "name": "parentId",
157
+ "type": "foreignKey",
158
+ "required": false,
159
+ "related": "Place",
160
+ "columnType": "UUID"
161
+ },
162
+ {
163
+ "name": "tenantId",
164
+ "type": "text",
165
+ "required": false,
166
+ "columnType": "UUID"
167
+ },
168
+ {
169
+ "name": "typeId",
170
+ "type": "foreignKey",
171
+ "required": false,
172
+ "related": "PlaceType",
173
+ "columnType": "UUID"
174
+ },
175
+ {
176
+ "name": "name",
177
+ "type": "text",
178
+ "required": false,
179
+ "columnType": "TEXT"
180
+ },
181
+ {
182
+ "name": "description",
183
+ "type": "text",
184
+ "required": false,
185
+ "columnType": "TEXT"
186
+ },
187
+ {
188
+ "name": "latitude",
189
+ "type": "decimal",
190
+ "required": false,
191
+ "columnType": "REAL"
192
+ },
193
+ {
194
+ "name": "longitude",
195
+ "type": "decimal",
196
+ "required": false,
197
+ "columnType": "REAL"
198
+ },
199
+ {
200
+ "name": "streetNumber",
201
+ "type": "text",
202
+ "required": false,
203
+ "columnType": "TEXT"
204
+ },
205
+ {
206
+ "name": "streetName",
207
+ "type": "text",
208
+ "required": false,
209
+ "columnType": "TEXT"
210
+ },
211
+ {
212
+ "name": "city",
213
+ "type": "text",
214
+ "required": false,
215
+ "columnType": "TEXT"
216
+ },
217
+ {
218
+ "name": "region",
219
+ "type": "text",
220
+ "required": false,
221
+ "columnType": "TEXT"
222
+ },
223
+ {
224
+ "name": "country",
225
+ "type": "text",
226
+ "required": false,
227
+ "columnType": "TEXT"
228
+ },
229
+ {
230
+ "name": "postalCode",
231
+ "type": "text",
232
+ "required": false,
233
+ "columnType": "TEXT"
234
+ },
235
+ {
236
+ "name": "countryCode",
237
+ "type": "text",
238
+ "required": false,
239
+ "columnType": "TEXT"
240
+ },
241
+ {
242
+ "name": "timezone",
243
+ "type": "text",
244
+ "required": false,
245
+ "columnType": "TEXT"
246
+ },
247
+ {
248
+ "name": "externalId",
249
+ "type": "text",
250
+ "required": false,
251
+ "columnType": "TEXT"
252
+ },
253
+ {
254
+ "name": "source",
255
+ "type": "text",
256
+ "required": false,
257
+ "columnType": "TEXT"
258
+ },
259
+ {
260
+ "name": "metadata",
261
+ "type": "text",
262
+ "required": false,
263
+ "columnType": "TEXT"
264
+ },
265
+ {
266
+ "name": "createdAt",
267
+ "type": "text",
268
+ "required": false,
269
+ "columnType": "TIMESTAMP"
270
+ },
271
+ {
272
+ "name": "updatedAt",
273
+ "type": "text",
274
+ "required": false,
275
+ "columnType": "TIMESTAMP"
276
+ }
277
+ ],
278
+ "relationships": [
279
+ {
280
+ "name": "parentId",
281
+ "type": "foreignKey",
282
+ "required": false,
283
+ "related": "Place",
284
+ "columnType": "UUID"
285
+ },
286
+ {
287
+ "name": "typeId",
288
+ "type": "foreignKey",
289
+ "required": false,
290
+ "related": "PlaceType",
291
+ "columnType": "UUID"
292
+ }
293
+ ],
294
+ "methods": [
295
+ "addAsset",
296
+ "classifyConstraintError",
297
+ "clearEmbeddings",
298
+ "delete",
299
+ "describe",
300
+ "destroy",
301
+ "do",
302
+ "executeToolCall",
303
+ "forget",
304
+ "forgetScope",
305
+ "generateEmbeddings",
306
+ "getAiUsageSnapshot",
307
+ "getAncestors",
308
+ "getAssets",
309
+ "getAvailableTools",
310
+ "getChildren",
311
+ "getDescendants",
312
+ "getEmbedding",
313
+ "getFields",
314
+ "getGeoData",
315
+ "getHierarchy",
316
+ "getId",
317
+ "getMetadata",
318
+ "getParent",
319
+ "getRelated",
320
+ "getSavedId",
321
+ "getSlug",
322
+ "getType",
323
+ "hasCoordinates",
324
+ "hasStaleEmbeddings",
325
+ "initialize",
326
+ "is",
327
+ "isRelatedLoaded",
328
+ "isSaved",
329
+ "listAiUsage",
330
+ "loadDataFromDb",
331
+ "loadFromId",
332
+ "loadFromSlug",
333
+ "loadRelated",
334
+ "loadRelatedMany",
335
+ "markAsPersisted",
336
+ "moveTo",
337
+ "recall",
338
+ "recallAll",
339
+ "remember",
340
+ "removeAsset",
341
+ "resetAiUsage",
342
+ "save",
343
+ "setMetadata",
344
+ "summarizeAiUsage",
345
+ "toJSON",
346
+ "toPlainObject",
347
+ "toPublicJSON",
348
+ "updateMetadata"
349
+ ],
350
+ "surfaces": [
351
+ {
352
+ "kind": "api",
353
+ "name": "places.list",
354
+ "operation": "list",
355
+ "objectName": "@happyvertical/smrt-places:Place",
356
+ "path": "/places",
357
+ "method": "GET"
358
+ },
359
+ {
360
+ "kind": "api",
361
+ "name": "places.get",
362
+ "operation": "get",
363
+ "objectName": "@happyvertical/smrt-places:Place",
364
+ "path": "/places/[id]",
365
+ "method": "GET"
366
+ },
367
+ {
368
+ "kind": "api",
369
+ "name": "places.create",
370
+ "operation": "create",
371
+ "objectName": "@happyvertical/smrt-places:Place",
372
+ "path": "/places",
373
+ "method": "POST"
374
+ },
375
+ {
376
+ "kind": "api",
377
+ "name": "places.update",
378
+ "operation": "update",
379
+ "objectName": "@happyvertical/smrt-places:Place",
380
+ "path": "/places/[id]",
381
+ "method": "PATCH"
382
+ },
383
+ {
384
+ "kind": "api",
385
+ "name": "places.delete",
386
+ "operation": "delete",
387
+ "objectName": "@happyvertical/smrt-places:Place",
388
+ "path": "/places/[id]",
389
+ "method": "DELETE"
390
+ },
391
+ {
392
+ "kind": "cli",
393
+ "name": "place_list",
394
+ "operation": "list",
395
+ "objectName": "@happyvertical/smrt-places:Place"
396
+ },
397
+ {
398
+ "kind": "cli",
399
+ "name": "place_get",
400
+ "operation": "get",
401
+ "objectName": "@happyvertical/smrt-places:Place"
402
+ },
403
+ {
404
+ "kind": "cli",
405
+ "name": "place_create",
406
+ "operation": "create",
407
+ "objectName": "@happyvertical/smrt-places:Place"
408
+ },
409
+ {
410
+ "kind": "cli",
411
+ "name": "place_update",
412
+ "operation": "update",
413
+ "objectName": "@happyvertical/smrt-places:Place"
414
+ },
415
+ {
416
+ "kind": "cli",
417
+ "name": "place_delete",
418
+ "operation": "delete",
419
+ "objectName": "@happyvertical/smrt-places:Place"
420
+ },
421
+ {
422
+ "kind": "mcp",
423
+ "name": "place_list",
424
+ "operation": "list",
425
+ "objectName": "@happyvertical/smrt-places:Place"
426
+ },
427
+ {
428
+ "kind": "mcp",
429
+ "name": "place_get",
430
+ "operation": "get",
431
+ "objectName": "@happyvertical/smrt-places:Place"
432
+ },
433
+ {
434
+ "kind": "mcp",
435
+ "name": "place_create",
436
+ "operation": "create",
437
+ "objectName": "@happyvertical/smrt-places:Place"
438
+ },
439
+ {
440
+ "kind": "mcp",
441
+ "name": "place_update",
442
+ "operation": "update",
443
+ "objectName": "@happyvertical/smrt-places:Place"
444
+ }
445
+ ],
446
+ "relationshipFeatures": [
447
+ "SmrtHierarchical",
448
+ "foreignKey",
449
+ "uuidColumns"
450
+ ],
451
+ "tags": [],
452
+ "risks": []
453
+ },
454
+ {
455
+ "name": "PlaceAsset",
456
+ "qualifiedName": "@happyvertical/smrt-places:PlaceAsset",
457
+ "collection": "placeassets",
458
+ "tableName": "place_assets",
459
+ "packageName": "@happyvertical/smrt-places",
460
+ "extends": "SmrtObject",
461
+ "fields": [
462
+ {
463
+ "name": "tenantId",
464
+ "type": "text",
465
+ "required": false,
466
+ "columnType": "UUID"
467
+ },
468
+ {
469
+ "name": "placeId",
470
+ "type": "foreignKey",
471
+ "required": true,
472
+ "related": "Place",
473
+ "columnType": "UUID"
474
+ },
475
+ {
476
+ "name": "assetId",
477
+ "type": "crossPackageRef",
478
+ "required": true,
479
+ "related": "@happyvertical/smrt-assets:Asset",
480
+ "columnType": "UUID"
481
+ },
482
+ {
483
+ "name": "relationship",
484
+ "type": "text",
485
+ "required": true,
486
+ "columnType": "TEXT"
487
+ },
488
+ {
489
+ "name": "sortOrder",
490
+ "type": "integer",
491
+ "required": true,
492
+ "columnType": "INTEGER"
493
+ }
494
+ ],
495
+ "relationships": [
496
+ {
497
+ "name": "placeId",
498
+ "type": "foreignKey",
499
+ "required": true,
500
+ "related": "Place",
501
+ "columnType": "UUID"
502
+ },
503
+ {
504
+ "name": "assetId",
505
+ "type": "crossPackageRef",
506
+ "required": true,
507
+ "related": "@happyvertical/smrt-assets:Asset",
508
+ "columnType": "UUID"
509
+ }
510
+ ],
511
+ "methods": [],
512
+ "surfaces": [],
513
+ "relationshipFeatures": [
514
+ "crossPackageRef",
515
+ "foreignKey",
516
+ "uuidColumns"
517
+ ],
518
+ "tags": [],
519
+ "risks": []
520
+ },
521
+ {
522
+ "name": "PlaceType",
523
+ "qualifiedName": "@happyvertical/smrt-places:PlaceType",
524
+ "collection": "placetypes",
525
+ "tableName": "place_types",
526
+ "packageName": "@happyvertical/smrt-places",
527
+ "extends": "SmrtObject",
528
+ "fields": [
529
+ {
530
+ "name": "created_at",
531
+ "type": "datetime",
532
+ "required": false,
533
+ "columnType": "TIMESTAMP"
534
+ },
535
+ {
536
+ "name": "updated_at",
537
+ "type": "datetime",
538
+ "required": false,
539
+ "columnType": "TIMESTAMP"
540
+ },
541
+ {
542
+ "name": "name",
543
+ "type": "text",
544
+ "required": true,
545
+ "columnType": "TEXT"
546
+ },
547
+ {
548
+ "name": "description",
549
+ "type": "text",
550
+ "required": false,
551
+ "columnType": "TEXT"
552
+ },
553
+ {
554
+ "name": "createdAt",
555
+ "type": "text",
556
+ "required": false,
557
+ "columnType": "TIMESTAMP"
558
+ },
559
+ {
560
+ "name": "updatedAt",
561
+ "type": "text",
562
+ "required": false,
563
+ "columnType": "TIMESTAMP"
564
+ }
565
+ ],
566
+ "relationships": [],
567
+ "methods": [
568
+ "classifyConstraintError",
569
+ "clearEmbeddings",
570
+ "delete",
571
+ "describe",
572
+ "destroy",
573
+ "do",
574
+ "executeToolCall",
575
+ "forget",
576
+ "forgetScope",
577
+ "generateEmbeddings",
578
+ "getAiUsageSnapshot",
579
+ "getAvailableTools",
580
+ "getBySlug",
581
+ "getEmbedding",
582
+ "getFields",
583
+ "getId",
584
+ "getRelated",
585
+ "getSavedId",
586
+ "getSlug",
587
+ "hasStaleEmbeddings",
588
+ "initialize",
589
+ "is",
590
+ "isRelatedLoaded",
591
+ "isSaved",
592
+ "listAiUsage",
593
+ "loadDataFromDb",
594
+ "loadFromId",
595
+ "loadFromSlug",
596
+ "loadRelated",
597
+ "loadRelatedMany",
598
+ "markAsPersisted",
599
+ "recall",
600
+ "recallAll",
601
+ "remember",
602
+ "resetAiUsage",
603
+ "save",
604
+ "summarizeAiUsage",
605
+ "toJSON",
606
+ "toPlainObject",
607
+ "toPublicJSON"
608
+ ],
609
+ "surfaces": [
610
+ {
611
+ "kind": "api",
612
+ "name": "placetypes.list",
613
+ "operation": "list",
614
+ "objectName": "@happyvertical/smrt-places:PlaceType",
615
+ "path": "/placetypes",
616
+ "method": "GET"
617
+ },
618
+ {
619
+ "kind": "api",
620
+ "name": "placetypes.get",
621
+ "operation": "get",
622
+ "objectName": "@happyvertical/smrt-places:PlaceType",
623
+ "path": "/placetypes/[id]",
624
+ "method": "GET"
625
+ },
626
+ {
627
+ "kind": "api",
628
+ "name": "placetypes.create",
629
+ "operation": "create",
630
+ "objectName": "@happyvertical/smrt-places:PlaceType",
631
+ "path": "/placetypes",
632
+ "method": "POST"
633
+ },
634
+ {
635
+ "kind": "api",
636
+ "name": "placetypes.update",
637
+ "operation": "update",
638
+ "objectName": "@happyvertical/smrt-places:PlaceType",
639
+ "path": "/placetypes/[id]",
640
+ "method": "PATCH"
641
+ },
642
+ {
643
+ "kind": "api",
644
+ "name": "placetypes.delete",
645
+ "operation": "delete",
646
+ "objectName": "@happyvertical/smrt-places:PlaceType",
647
+ "path": "/placetypes/[id]",
648
+ "method": "DELETE"
649
+ },
650
+ {
651
+ "kind": "cli",
652
+ "name": "placetype_list",
653
+ "operation": "list",
654
+ "objectName": "@happyvertical/smrt-places:PlaceType"
655
+ },
656
+ {
657
+ "kind": "cli",
658
+ "name": "placetype_get",
659
+ "operation": "get",
660
+ "objectName": "@happyvertical/smrt-places:PlaceType"
661
+ },
662
+ {
663
+ "kind": "cli",
664
+ "name": "placetype_create",
665
+ "operation": "create",
666
+ "objectName": "@happyvertical/smrt-places:PlaceType"
667
+ },
668
+ {
669
+ "kind": "cli",
670
+ "name": "placetype_update",
671
+ "operation": "update",
672
+ "objectName": "@happyvertical/smrt-places:PlaceType"
673
+ },
674
+ {
675
+ "kind": "cli",
676
+ "name": "placetype_delete",
677
+ "operation": "delete",
678
+ "objectName": "@happyvertical/smrt-places:PlaceType"
679
+ },
680
+ {
681
+ "kind": "mcp",
682
+ "name": "placetype_list",
683
+ "operation": "list",
684
+ "objectName": "@happyvertical/smrt-places:PlaceType"
685
+ },
686
+ {
687
+ "kind": "mcp",
688
+ "name": "placetype_get",
689
+ "operation": "get",
690
+ "objectName": "@happyvertical/smrt-places:PlaceType"
691
+ },
692
+ {
693
+ "kind": "mcp",
694
+ "name": "placetype_create",
695
+ "operation": "create",
696
+ "objectName": "@happyvertical/smrt-places:PlaceType"
697
+ }
698
+ ],
699
+ "relationshipFeatures": [
700
+ "uuidColumns"
701
+ ],
702
+ "tags": [],
703
+ "risks": []
704
+ }
705
+ ],
706
+ "surfaces": [
707
+ {
708
+ "kind": "api",
709
+ "name": "places.list",
710
+ "operation": "list",
711
+ "objectName": "@happyvertical/smrt-places:Place",
712
+ "path": "/places",
713
+ "method": "GET"
714
+ },
715
+ {
716
+ "kind": "api",
717
+ "name": "places.get",
718
+ "operation": "get",
719
+ "objectName": "@happyvertical/smrt-places:Place",
720
+ "path": "/places/[id]",
721
+ "method": "GET"
722
+ },
723
+ {
724
+ "kind": "api",
725
+ "name": "places.create",
726
+ "operation": "create",
727
+ "objectName": "@happyvertical/smrt-places:Place",
728
+ "path": "/places",
729
+ "method": "POST"
730
+ },
731
+ {
732
+ "kind": "api",
733
+ "name": "places.update",
734
+ "operation": "update",
735
+ "objectName": "@happyvertical/smrt-places:Place",
736
+ "path": "/places/[id]",
737
+ "method": "PATCH"
738
+ },
739
+ {
740
+ "kind": "api",
741
+ "name": "places.delete",
742
+ "operation": "delete",
743
+ "objectName": "@happyvertical/smrt-places:Place",
744
+ "path": "/places/[id]",
745
+ "method": "DELETE"
746
+ },
747
+ {
748
+ "kind": "cli",
749
+ "name": "place_list",
750
+ "operation": "list",
751
+ "objectName": "@happyvertical/smrt-places:Place"
752
+ },
753
+ {
754
+ "kind": "cli",
755
+ "name": "place_get",
756
+ "operation": "get",
757
+ "objectName": "@happyvertical/smrt-places:Place"
758
+ },
759
+ {
760
+ "kind": "cli",
761
+ "name": "place_create",
762
+ "operation": "create",
763
+ "objectName": "@happyvertical/smrt-places:Place"
764
+ },
765
+ {
766
+ "kind": "cli",
767
+ "name": "place_update",
768
+ "operation": "update",
769
+ "objectName": "@happyvertical/smrt-places:Place"
770
+ },
771
+ {
772
+ "kind": "cli",
773
+ "name": "place_delete",
774
+ "operation": "delete",
775
+ "objectName": "@happyvertical/smrt-places:Place"
776
+ },
777
+ {
778
+ "kind": "mcp",
779
+ "name": "place_list",
780
+ "operation": "list",
781
+ "objectName": "@happyvertical/smrt-places:Place"
782
+ },
783
+ {
784
+ "kind": "mcp",
785
+ "name": "place_get",
786
+ "operation": "get",
787
+ "objectName": "@happyvertical/smrt-places:Place"
788
+ },
789
+ {
790
+ "kind": "mcp",
791
+ "name": "place_create",
792
+ "operation": "create",
793
+ "objectName": "@happyvertical/smrt-places:Place"
794
+ },
795
+ {
796
+ "kind": "mcp",
797
+ "name": "place_update",
798
+ "operation": "update",
799
+ "objectName": "@happyvertical/smrt-places:Place"
800
+ },
801
+ {
802
+ "kind": "api",
803
+ "name": "placetypes.list",
804
+ "operation": "list",
805
+ "objectName": "@happyvertical/smrt-places:PlaceType",
806
+ "path": "/placetypes",
807
+ "method": "GET"
808
+ },
809
+ {
810
+ "kind": "api",
811
+ "name": "placetypes.get",
812
+ "operation": "get",
813
+ "objectName": "@happyvertical/smrt-places:PlaceType",
814
+ "path": "/placetypes/[id]",
815
+ "method": "GET"
816
+ },
817
+ {
818
+ "kind": "api",
819
+ "name": "placetypes.create",
820
+ "operation": "create",
821
+ "objectName": "@happyvertical/smrt-places:PlaceType",
822
+ "path": "/placetypes",
823
+ "method": "POST"
824
+ },
825
+ {
826
+ "kind": "api",
827
+ "name": "placetypes.update",
828
+ "operation": "update",
829
+ "objectName": "@happyvertical/smrt-places:PlaceType",
830
+ "path": "/placetypes/[id]",
831
+ "method": "PATCH"
832
+ },
833
+ {
834
+ "kind": "api",
835
+ "name": "placetypes.delete",
836
+ "operation": "delete",
837
+ "objectName": "@happyvertical/smrt-places:PlaceType",
838
+ "path": "/placetypes/[id]",
839
+ "method": "DELETE"
840
+ },
841
+ {
842
+ "kind": "cli",
843
+ "name": "placetype_list",
844
+ "operation": "list",
845
+ "objectName": "@happyvertical/smrt-places:PlaceType"
846
+ },
847
+ {
848
+ "kind": "cli",
849
+ "name": "placetype_get",
850
+ "operation": "get",
851
+ "objectName": "@happyvertical/smrt-places:PlaceType"
852
+ },
853
+ {
854
+ "kind": "cli",
855
+ "name": "placetype_create",
856
+ "operation": "create",
857
+ "objectName": "@happyvertical/smrt-places:PlaceType"
858
+ },
859
+ {
860
+ "kind": "cli",
861
+ "name": "placetype_update",
862
+ "operation": "update",
863
+ "objectName": "@happyvertical/smrt-places:PlaceType"
864
+ },
865
+ {
866
+ "kind": "cli",
867
+ "name": "placetype_delete",
868
+ "operation": "delete",
869
+ "objectName": "@happyvertical/smrt-places:PlaceType"
870
+ },
871
+ {
872
+ "kind": "mcp",
873
+ "name": "placetype_list",
874
+ "operation": "list",
875
+ "objectName": "@happyvertical/smrt-places:PlaceType"
876
+ },
877
+ {
878
+ "kind": "mcp",
879
+ "name": "placetype_get",
880
+ "operation": "get",
881
+ "objectName": "@happyvertical/smrt-places:PlaceType"
882
+ },
883
+ {
884
+ "kind": "mcp",
885
+ "name": "placetype_create",
886
+ "operation": "create",
887
+ "objectName": "@happyvertical/smrt-places:PlaceType"
888
+ }
889
+ ],
890
+ "prompts": [],
891
+ "relationshipsV2": {
892
+ "foreignKeyFields": 3,
893
+ "crossPackageRefFields": 1,
894
+ "junctionCollections": 1,
895
+ "hierarchicalObjects": 1,
896
+ "polymorphicAssociations": 0,
897
+ "uuidColumns": 12
898
+ },
899
+ "agentDoc": "# @happyvertical/smrt-places\n\nHierarchical geographic database with organic growth via geocoding integration.\n\n## Models\n\n- **Place** (STI): hierarchical via `parentId`. Optional geo fields (all nullable — supports abstract places like game zones). `externalId`/`source` from geocoder. Metadata JSON.\n- **PlaceAsset**: dedicated owned-asset join in `place_assets` with `relationship` and `sortOrder`.\n- **PlaceType**: slug-based classification (country, city, building, zone, room, region).\n\n## Key Collection Methods\n\n| Method | Purpose |\n|--------|---------|\n| `lookupOrCreate(query)` | DB first → geocode if not found → create. Organic growth pattern. |\n| `findByCoordinates(lat, lng, threshold)` | Default 0.0001° ≈ 11m tolerance at equator |\n| `searchByProximity(lat, lng, radiusKm)` | Haversine distance, sorted by proximity |\n| `findWithGlobals(tenantId)` | Tenant + global (tenantId=null) places |\n| `getRootPlaces()`, `getByType(slug)` | Hierarchy + type queries |\n| `getAssets()` / `addAsset()` / `removeAsset()` | Owned asset helpers on both `Place` and `PlaceCollection`, backed by `place_assets` |\n\nHierarchy traversal: `getParent()`, `getChildren()`, `getAncestors()`, `getDescendants()`, `getHierarchy()`.\n\n## Gotchas\n\n- **Geo providers**: Google Maps needs `GOOGLE_MAPS_API_KEY`; OpenStreetMap is default\n- **Abstract places allowed**: lat/lng nullable — supports non-geographic locations\n- **Coordinate tolerance varies by latitude**: 0.0001° ≈ 11m at equator, less at poles\n- **Optional tenancy** with nullable tenantId\n"
900
+ }