@happyvertical/smrt-assets 0.56.0 → 0.56.2

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.
@@ -3,13 +3,14 @@
3
3
  "sensitiveFieldsExcluded": true,
4
4
  "generatedAt": "1970-01-01T00:00:00.000Z",
5
5
  "packageName": "@happyvertical/smrt-assets",
6
- "packageVersion": "0.56.0",
6
+ "packageVersion": "0.56.2",
7
7
  "sourceManifestPath": "dist/manifest.json",
8
8
  "agentDocPath": "AGENTS.md",
9
9
  "sourceHashes": {
10
- "manifest": "b863210364a4ee60c80ec092f099d8a31c7f0cb2c69aa6cebe060d05fcc140ed",
11
- "packageJson": "ed84e86c0a315075a320758099eac64a598407a95fab1e0e2c631b17e56253c3",
12
- "agents": "4e84d65324e346f9c6072da7ccee6753289efb95ffb2faf5e999081502189737"
10
+ "manifest": "319b7ebbeb26b73cfcbfdc73800cce3ab7b70949752e18de0425eff9abf47911",
11
+ "packageJson": "af6df0a96db37b8bd3b50815a9583ffe856a4776ab415432b5fd27ea842e0fc3",
12
+ "agents": "09c9e0e5cbf7ab5e0aff28d489ce15a3d88b003ef4d0137dab43f9210c7752aa",
13
+ "moduleDoc:agents/private-assets.md": "8540b9eb31f4e7dd03ff50e213c4ad3f72cbe697298817f71dd7f4f2bf1bfeb9"
13
14
  },
14
15
  "exports": [
15
16
  ".",
@@ -333,46 +334,6 @@
333
334
  }
334
335
  ],
335
336
  "surfaces": [
336
- {
337
- "kind": "api",
338
- "name": "assetassociations.byRight",
339
- "operation": "byRight",
340
- "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection",
341
- "path": "/assetassociations/byRight",
342
- "method": "POST"
343
- },
344
- {
345
- "kind": "api",
346
- "name": "assetassociations.byLeft",
347
- "operation": "byLeft",
348
- "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection",
349
- "path": "/assetassociations/byLeft",
350
- "method": "POST"
351
- },
352
- {
353
- "kind": "api",
354
- "name": "assetassociations.attach",
355
- "operation": "attach",
356
- "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection",
357
- "path": "/assetassociations/attach",
358
- "method": "POST"
359
- },
360
- {
361
- "kind": "api",
362
- "name": "assetassociations.detach",
363
- "operation": "detach",
364
- "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection",
365
- "path": "/assetassociations/detach",
366
- "method": "POST"
367
- },
368
- {
369
- "kind": "api",
370
- "name": "assetassociations.setLinks",
371
- "operation": "setLinks",
372
- "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection",
373
- "path": "/assetassociations/setLinks",
374
- "method": "POST"
375
- },
376
337
  {
377
338
  "kind": "cli",
378
339
  "name": "assetassociationcollection_byRight",
@@ -402,35 +363,42 @@
402
363
  "name": "assetassociationcollection_setLinks",
403
364
  "operation": "setLinks",
404
365
  "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection"
405
- },
366
+ }
367
+ ],
368
+ "withheldSurfaces": [
406
369
  {
407
- "kind": "mcp",
408
- "name": "assetassociationcollection_byright",
409
- "operation": "byRight",
370
+ "kind": "api",
371
+ "operation": "attach",
372
+ "code": "not-included",
373
+ "reason": "not listed in api.include",
410
374
  "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection"
411
375
  },
412
376
  {
413
- "kind": "mcp",
414
- "name": "assetassociationcollection_byleft",
377
+ "kind": "api",
415
378
  "operation": "byLeft",
379
+ "code": "not-included",
380
+ "reason": "not listed in api.include",
416
381
  "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection"
417
382
  },
418
383
  {
419
- "kind": "mcp",
420
- "name": "assetassociationcollection_attach",
421
- "operation": "attach",
384
+ "kind": "api",
385
+ "operation": "byRight",
386
+ "code": "not-included",
387
+ "reason": "not listed in api.include",
422
388
  "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection"
423
389
  },
424
390
  {
425
- "kind": "mcp",
426
- "name": "assetassociationcollection_detach",
391
+ "kind": "api",
427
392
  "operation": "detach",
393
+ "code": "not-included",
394
+ "reason": "not listed in api.include",
428
395
  "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection"
429
396
  },
430
397
  {
431
- "kind": "mcp",
432
- "name": "assetassociationcollection_setlinks",
398
+ "kind": "api",
433
399
  "operation": "setLinks",
400
+ "code": "not-included",
401
+ "reason": "not listed in api.include",
434
402
  "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection"
435
403
  }
436
404
  ],
@@ -674,22 +642,6 @@
674
642
  }
675
643
  ],
676
644
  "surfaces": [
677
- {
678
- "kind": "api",
679
- "name": "assetmetafields.getOrCreate",
680
- "operation": "getOrCreate",
681
- "objectName": "@happyvertical/smrt-assets:AssetMetafieldCollection",
682
- "path": "/assetmetafields/getOrCreate",
683
- "method": "POST"
684
- },
685
- {
686
- "kind": "api",
687
- "name": "assetmetafields.initializeCommonMetafields",
688
- "operation": "initializeCommonMetafields",
689
- "objectName": "@happyvertical/smrt-assets:AssetMetafieldCollection",
690
- "path": "/assetmetafields/initializeCommonMetafields",
691
- "method": "POST"
692
- },
693
645
  {
694
646
  "kind": "cli",
695
647
  "name": "assetmetafieldcollection_getOrCreate",
@@ -701,17 +653,21 @@
701
653
  "name": "assetmetafieldcollection_initializeCommonMetafields",
702
654
  "operation": "initializeCommonMetafields",
703
655
  "objectName": "@happyvertical/smrt-assets:AssetMetafieldCollection"
704
- },
656
+ }
657
+ ],
658
+ "withheldSurfaces": [
705
659
  {
706
- "kind": "mcp",
707
- "name": "assetmetafieldcollection_getorcreate",
660
+ "kind": "api",
708
661
  "operation": "getOrCreate",
662
+ "code": "not-included",
663
+ "reason": "not listed in api.include",
709
664
  "objectName": "@happyvertical/smrt-assets:AssetMetafieldCollection"
710
665
  },
711
666
  {
712
- "kind": "mcp",
713
- "name": "assetmetafieldcollection_initializecommonmetafields",
667
+ "kind": "api",
714
668
  "operation": "initializeCommonMetafields",
669
+ "code": "not-included",
670
+ "reason": "not listed in api.include",
715
671
  "objectName": "@happyvertical/smrt-assets:AssetMetafieldCollection"
716
672
  }
717
673
  ],
@@ -915,22 +871,6 @@
915
871
  }
916
872
  ],
917
873
  "surfaces": [
918
- {
919
- "kind": "api",
920
- "name": "assetstatuses.getOrCreate",
921
- "operation": "getOrCreate",
922
- "objectName": "@happyvertical/smrt-assets:AssetStatusCollection",
923
- "path": "/assetstatuses/getOrCreate",
924
- "method": "POST"
925
- },
926
- {
927
- "kind": "api",
928
- "name": "assetstatuses.initializeCommonStatuses",
929
- "operation": "initializeCommonStatuses",
930
- "objectName": "@happyvertical/smrt-assets:AssetStatusCollection",
931
- "path": "/assetstatuses/initializeCommonStatuses",
932
- "method": "POST"
933
- },
934
874
  {
935
875
  "kind": "cli",
936
876
  "name": "assetstatuscollection_getOrCreate",
@@ -942,17 +882,21 @@
942
882
  "name": "assetstatuscollection_initializeCommonStatuses",
943
883
  "operation": "initializeCommonStatuses",
944
884
  "objectName": "@happyvertical/smrt-assets:AssetStatusCollection"
945
- },
885
+ }
886
+ ],
887
+ "withheldSurfaces": [
946
888
  {
947
- "kind": "mcp",
948
- "name": "assetstatuscollection_getorcreate",
889
+ "kind": "api",
949
890
  "operation": "getOrCreate",
891
+ "code": "not-included",
892
+ "reason": "not listed in api.include",
950
893
  "objectName": "@happyvertical/smrt-assets:AssetStatusCollection"
951
894
  },
952
895
  {
953
- "kind": "mcp",
954
- "name": "assetstatuscollection_initializecommonstatuses",
896
+ "kind": "api",
955
897
  "operation": "initializeCommonStatuses",
898
+ "code": "not-included",
899
+ "reason": "not listed in api.include",
956
900
  "objectName": "@happyvertical/smrt-assets:AssetStatusCollection"
957
901
  }
958
902
  ],
@@ -1331,22 +1275,6 @@
1331
1275
  }
1332
1276
  ],
1333
1277
  "surfaces": [
1334
- {
1335
- "kind": "api",
1336
- "name": "assettypes.getOrCreate",
1337
- "operation": "getOrCreate",
1338
- "objectName": "@happyvertical/smrt-assets:AssetTypeCollection",
1339
- "path": "/assettypes/getOrCreate",
1340
- "method": "POST"
1341
- },
1342
- {
1343
- "kind": "api",
1344
- "name": "assettypes.initializeCommonTypes",
1345
- "operation": "initializeCommonTypes",
1346
- "objectName": "@happyvertical/smrt-assets:AssetTypeCollection",
1347
- "path": "/assettypes/initializeCommonTypes",
1348
- "method": "POST"
1349
- },
1350
1278
  {
1351
1279
  "kind": "cli",
1352
1280
  "name": "assettypecollection_getOrCreate",
@@ -1358,17 +1286,21 @@
1358
1286
  "name": "assettypecollection_initializeCommonTypes",
1359
1287
  "operation": "initializeCommonTypes",
1360
1288
  "objectName": "@happyvertical/smrt-assets:AssetTypeCollection"
1361
- },
1289
+ }
1290
+ ],
1291
+ "withheldSurfaces": [
1362
1292
  {
1363
- "kind": "mcp",
1364
- "name": "assettypecollection_getorcreate",
1293
+ "kind": "api",
1365
1294
  "operation": "getOrCreate",
1295
+ "code": "not-included",
1296
+ "reason": "not listed in api.include",
1366
1297
  "objectName": "@happyvertical/smrt-assets:AssetTypeCollection"
1367
1298
  },
1368
1299
  {
1369
- "kind": "mcp",
1370
- "name": "assettypecollection_initializecommontypes",
1300
+ "kind": "api",
1371
1301
  "operation": "initializeCommonTypes",
1302
+ "code": "not-included",
1303
+ "reason": "not listed in api.include",
1372
1304
  "objectName": "@happyvertical/smrt-assets:AssetTypeCollection"
1373
1305
  }
1374
1306
  ],
@@ -1405,6 +1337,14 @@
1405
1337
  "required": false,
1406
1338
  "columnType": "UUID"
1407
1339
  },
1340
+ {
1341
+ "name": "accessMode",
1342
+ "type": "text",
1343
+ "required": false,
1344
+ "columnType": "TEXT",
1345
+ "default": "public",
1346
+ "description": "Whether this record is public to ordinary asset APIs or private."
1347
+ },
1408
1348
  {
1409
1349
  "name": "name",
1410
1350
  "type": "text",
@@ -2181,142 +2121,6 @@
2181
2121
  }
2182
2122
  ],
2183
2123
  "surfaces": [
2184
- {
2185
- "kind": "api",
2186
- "name": "assets.findByTenant",
2187
- "operation": "findByTenant",
2188
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
2189
- "path": "/assets/findByTenant",
2190
- "method": "POST"
2191
- },
2192
- {
2193
- "kind": "api",
2194
- "name": "assets.findGlobal",
2195
- "operation": "findGlobal",
2196
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
2197
- "path": "/assets/findGlobal",
2198
- "method": "POST"
2199
- },
2200
- {
2201
- "kind": "api",
2202
- "name": "assets.findWithGlobals",
2203
- "operation": "findWithGlobals",
2204
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
2205
- "path": "/assets/findWithGlobals",
2206
- "method": "POST"
2207
- },
2208
- {
2209
- "kind": "api",
2210
- "name": "assets.addTag",
2211
- "operation": "addTag",
2212
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
2213
- "path": "/assets/addTag",
2214
- "method": "POST"
2215
- },
2216
- {
2217
- "kind": "api",
2218
- "name": "assets.removeTag",
2219
- "operation": "removeTag",
2220
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
2221
- "path": "/assets/removeTag",
2222
- "method": "POST"
2223
- },
2224
- {
2225
- "kind": "api",
2226
- "name": "assets.setTags",
2227
- "operation": "setTags",
2228
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
2229
- "path": "/assets/setTags",
2230
- "method": "POST"
2231
- },
2232
- {
2233
- "kind": "api",
2234
- "name": "assets.getTagsForAssets",
2235
- "operation": "getTagsForAssets",
2236
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
2237
- "path": "/assets/getTagsForAssets",
2238
- "method": "POST"
2239
- },
2240
- {
2241
- "kind": "api",
2242
- "name": "assets.getByTag",
2243
- "operation": "getByTag",
2244
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
2245
- "path": "/assets/getByTag",
2246
- "method": "POST"
2247
- },
2248
- {
2249
- "kind": "api",
2250
- "name": "assets.getByType",
2251
- "operation": "getByType",
2252
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
2253
- "path": "/assets/getByType",
2254
- "method": "POST"
2255
- },
2256
- {
2257
- "kind": "api",
2258
- "name": "assets.getByStatus",
2259
- "operation": "getByStatus",
2260
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
2261
- "path": "/assets/getByStatus",
2262
- "method": "POST"
2263
- },
2264
- {
2265
- "kind": "api",
2266
- "name": "assets.getByOwner",
2267
- "operation": "getByOwner",
2268
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
2269
- "path": "/assets/getByOwner",
2270
- "method": "POST"
2271
- },
2272
- {
2273
- "kind": "api",
2274
- "name": "assets.getLatestVersion",
2275
- "operation": "getLatestVersion",
2276
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
2277
- "path": "/assets/getLatestVersion",
2278
- "method": "POST"
2279
- },
2280
- {
2281
- "kind": "api",
2282
- "name": "assets.listVersions",
2283
- "operation": "listVersions",
2284
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
2285
- "path": "/assets/listVersions",
2286
- "method": "POST"
2287
- },
2288
- {
2289
- "kind": "api",
2290
- "name": "assets.getDerivatives",
2291
- "operation": "getDerivatives",
2292
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
2293
- "path": "/assets/getDerivatives",
2294
- "method": "POST"
2295
- },
2296
- {
2297
- "kind": "api",
2298
- "name": "assets.getByMimeType",
2299
- "operation": "getByMimeType",
2300
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
2301
- "path": "/assets/getByMimeType",
2302
- "method": "POST"
2303
- },
2304
- {
2305
- "kind": "api",
2306
- "name": "assets.rollbackToVersion",
2307
- "operation": "rollbackToVersion",
2308
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
2309
- "path": "/assets/rollbackToVersion",
2310
- "method": "POST"
2311
- },
2312
- {
2313
- "kind": "api",
2314
- "name": "assets.getByFolder",
2315
- "operation": "getByFolder",
2316
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
2317
- "path": "/assets/getByFolder",
2318
- "method": "POST"
2319
- },
2320
2124
  {
2321
2125
  "kind": "cli",
2322
2126
  "name": "assetcollection_findByTenant",
@@ -2424,122 +2228,133 @@
2424
2228
  "name": "assetcollection_getByFolder",
2425
2229
  "operation": "getByFolder",
2426
2230
  "objectName": "@happyvertical/smrt-assets:AssetCollection"
2231
+ }
2232
+ ],
2233
+ "withheldSurfaces": [
2234
+ {
2235
+ "kind": "api",
2236
+ "operation": "addTag",
2237
+ "code": "not-included",
2238
+ "reason": "not listed in api.include",
2239
+ "objectName": "@happyvertical/smrt-assets:AssetCollection"
2427
2240
  },
2428
2241
  {
2429
- "kind": "mcp",
2430
- "name": "assetcollection_findbytenant",
2431
- "operation": "findByTenant",
2242
+ "kind": "api",
2243
+ "operation": "createNewVersion",
2244
+ "code": "not-included",
2245
+ "reason": "not listed in api.include",
2432
2246
  "objectName": "@happyvertical/smrt-assets:AssetCollection"
2433
2247
  },
2434
2248
  {
2435
- "kind": "mcp",
2436
- "name": "assetcollection_findglobal",
2437
- "operation": "findGlobal",
2249
+ "kind": "api",
2250
+ "operation": "findByTenant",
2251
+ "code": "not-included",
2252
+ "reason": "not listed in api.include",
2438
2253
  "objectName": "@happyvertical/smrt-assets:AssetCollection"
2439
2254
  },
2440
2255
  {
2441
- "kind": "mcp",
2442
- "name": "assetcollection_findwithglobals",
2443
- "operation": "findWithGlobals",
2256
+ "kind": "api",
2257
+ "operation": "findGlobal",
2258
+ "code": "not-included",
2259
+ "reason": "not listed in api.include",
2444
2260
  "objectName": "@happyvertical/smrt-assets:AssetCollection"
2445
2261
  },
2446
2262
  {
2447
- "kind": "mcp",
2448
- "name": "assetcollection_addtag",
2449
- "operation": "addTag",
2263
+ "kind": "api",
2264
+ "operation": "findWithGlobals",
2265
+ "code": "not-included",
2266
+ "reason": "not listed in api.include",
2450
2267
  "objectName": "@happyvertical/smrt-assets:AssetCollection"
2451
2268
  },
2452
2269
  {
2453
- "kind": "mcp",
2454
- "name": "assetcollection_removetag",
2455
- "operation": "removeTag",
2270
+ "kind": "api",
2271
+ "operation": "getByFolder",
2272
+ "code": "not-included",
2273
+ "reason": "not listed in api.include",
2456
2274
  "objectName": "@happyvertical/smrt-assets:AssetCollection"
2457
2275
  },
2458
2276
  {
2459
- "kind": "mcp",
2460
- "name": "assetcollection_settags",
2461
- "operation": "setTags",
2277
+ "kind": "api",
2278
+ "operation": "getByMimeType",
2279
+ "code": "not-included",
2280
+ "reason": "not listed in api.include",
2462
2281
  "objectName": "@happyvertical/smrt-assets:AssetCollection"
2463
2282
  },
2464
2283
  {
2465
- "kind": "mcp",
2466
- "name": "assetcollection_gettagsforassets",
2467
- "operation": "getTagsForAssets",
2468
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
2469
- },
2470
- {
2471
- "kind": "mcp",
2472
- "name": "assetcollection_getbytag",
2473
- "operation": "getByTag",
2284
+ "kind": "api",
2285
+ "operation": "getByOwner",
2286
+ "code": "not-included",
2287
+ "reason": "not listed in api.include",
2474
2288
  "objectName": "@happyvertical/smrt-assets:AssetCollection"
2475
2289
  },
2476
2290
  {
2477
- "kind": "mcp",
2478
- "name": "assetcollection_getbytype",
2479
- "operation": "getByType",
2291
+ "kind": "api",
2292
+ "operation": "getByStatus",
2293
+ "code": "not-included",
2294
+ "reason": "not listed in api.include",
2480
2295
  "objectName": "@happyvertical/smrt-assets:AssetCollection"
2481
2296
  },
2482
2297
  {
2483
- "kind": "mcp",
2484
- "name": "assetcollection_getbystatus",
2485
- "operation": "getByStatus",
2298
+ "kind": "api",
2299
+ "operation": "getByTag",
2300
+ "code": "not-included",
2301
+ "reason": "not listed in api.include",
2486
2302
  "objectName": "@happyvertical/smrt-assets:AssetCollection"
2487
2303
  },
2488
2304
  {
2489
- "kind": "mcp",
2490
- "name": "assetcollection_getbyowner",
2491
- "operation": "getByOwner",
2305
+ "kind": "api",
2306
+ "operation": "getByType",
2307
+ "code": "not-included",
2308
+ "reason": "not listed in api.include",
2492
2309
  "objectName": "@happyvertical/smrt-assets:AssetCollection"
2493
2310
  },
2494
2311
  {
2495
- "kind": "mcp",
2496
- "name": "assetcollection_createnewversion",
2497
- "operation": "createNewVersion",
2312
+ "kind": "api",
2313
+ "operation": "getDerivatives",
2314
+ "code": "not-included",
2315
+ "reason": "not listed in api.include",
2498
2316
  "objectName": "@happyvertical/smrt-assets:AssetCollection"
2499
2317
  },
2500
2318
  {
2501
- "kind": "mcp",
2502
- "name": "assetcollection_getlatestversion",
2319
+ "kind": "api",
2503
2320
  "operation": "getLatestVersion",
2321
+ "code": "not-included",
2322
+ "reason": "not listed in api.include",
2504
2323
  "objectName": "@happyvertical/smrt-assets:AssetCollection"
2505
2324
  },
2506
2325
  {
2507
- "kind": "mcp",
2508
- "name": "assetcollection_listversions",
2509
- "operation": "listVersions",
2326
+ "kind": "api",
2327
+ "operation": "getTagsForAssets",
2328
+ "code": "not-included",
2329
+ "reason": "not listed in api.include",
2510
2330
  "objectName": "@happyvertical/smrt-assets:AssetCollection"
2511
2331
  },
2512
2332
  {
2513
- "kind": "mcp",
2514
- "name": "assetcollection_getderivatives",
2515
- "operation": "getDerivatives",
2333
+ "kind": "api",
2334
+ "operation": "listVersions",
2335
+ "code": "not-included",
2336
+ "reason": "not listed in api.include",
2516
2337
  "objectName": "@happyvertical/smrt-assets:AssetCollection"
2517
2338
  },
2518
2339
  {
2519
- "kind": "mcp",
2520
- "name": "assetcollection_getbymimetype",
2521
- "operation": "getByMimeType",
2340
+ "kind": "api",
2341
+ "operation": "removeTag",
2342
+ "code": "not-included",
2343
+ "reason": "not listed in api.include",
2522
2344
  "objectName": "@happyvertical/smrt-assets:AssetCollection"
2523
2345
  },
2524
2346
  {
2525
- "kind": "mcp",
2526
- "name": "assetcollection_rollbacktoversion",
2347
+ "kind": "api",
2527
2348
  "operation": "rollbackToVersion",
2349
+ "code": "not-included",
2350
+ "reason": "not listed in api.include",
2528
2351
  "objectName": "@happyvertical/smrt-assets:AssetCollection"
2529
2352
  },
2530
- {
2531
- "kind": "mcp",
2532
- "name": "assetcollection_getbyfolder",
2533
- "operation": "getByFolder",
2534
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
2535
- }
2536
- ],
2537
- "withheldSurfaces": [
2538
2353
  {
2539
2354
  "kind": "api",
2540
- "operation": "createNewVersion",
2541
- "code": "not-wireable",
2542
- "reason": "not routed: parameter `updates`: `Asset` is a model class instance, not JSON data",
2355
+ "operation": "setTags",
2356
+ "code": "not-included",
2357
+ "reason": "not listed in api.include",
2543
2358
  "objectName": "@happyvertical/smrt-assets:AssetCollection"
2544
2359
  }
2545
2360
  ],
@@ -2935,22 +2750,6 @@
2935
2750
  }
2936
2751
  ],
2937
2752
  "surfaces": [
2938
- {
2939
- "kind": "api",
2940
- "name": "folders.getTree",
2941
- "operation": "getTree",
2942
- "objectName": "@happyvertical/smrt-assets:FolderCollection",
2943
- "path": "/folders/getTree",
2944
- "method": "POST"
2945
- },
2946
- {
2947
- "kind": "api",
2948
- "name": "folders.getPath",
2949
- "operation": "getPath",
2950
- "objectName": "@happyvertical/smrt-assets:FolderCollection",
2951
- "path": "/folders/getPath",
2952
- "method": "POST"
2953
- },
2954
2753
  {
2955
2754
  "kind": "cli",
2956
2755
  "name": "foldercollection_getTree",
@@ -2974,45 +2773,35 @@
2974
2773
  "name": "foldercollection_moveAsset",
2975
2774
  "operation": "moveAsset",
2976
2775
  "objectName": "@happyvertical/smrt-assets:FolderCollection"
2977
- },
2776
+ }
2777
+ ],
2778
+ "withheldSurfaces": [
2978
2779
  {
2979
- "kind": "mcp",
2980
- "name": "foldercollection_gettree",
2981
- "operation": "getTree",
2780
+ "kind": "api",
2781
+ "operation": "getContents",
2782
+ "code": "not-included",
2783
+ "reason": "not listed in api.include",
2982
2784
  "objectName": "@happyvertical/smrt-assets:FolderCollection"
2983
2785
  },
2984
2786
  {
2985
- "kind": "mcp",
2986
- "name": "foldercollection_getpath",
2787
+ "kind": "api",
2987
2788
  "operation": "getPath",
2789
+ "code": "not-included",
2790
+ "reason": "not listed in api.include",
2988
2791
  "objectName": "@happyvertical/smrt-assets:FolderCollection"
2989
2792
  },
2990
- {
2991
- "kind": "mcp",
2992
- "name": "foldercollection_getcontents",
2993
- "operation": "getContents",
2994
- "objectName": "@happyvertical/smrt-assets:FolderCollection"
2995
- },
2996
- {
2997
- "kind": "mcp",
2998
- "name": "foldercollection_moveasset",
2999
- "operation": "moveAsset",
3000
- "objectName": "@happyvertical/smrt-assets:FolderCollection"
3001
- }
3002
- ],
3003
- "withheldSurfaces": [
3004
2793
  {
3005
2794
  "kind": "api",
3006
- "operation": "getContents",
3007
- "code": "not-wireable",
3008
- "reason": "not routed: parameter `assetCollection`: `AssetCollection` is a model class instance, not JSON data",
2795
+ "operation": "getTree",
2796
+ "code": "not-included",
2797
+ "reason": "not listed in api.include",
3009
2798
  "objectName": "@happyvertical/smrt-assets:FolderCollection"
3010
2799
  },
3011
2800
  {
3012
2801
  "kind": "api",
3013
2802
  "operation": "moveAsset",
3014
- "code": "not-wireable",
3015
- "reason": "not routed: parameter `asset`: `Asset` is a model class instance, not JSON data",
2803
+ "code": "not-included",
2804
+ "reason": "not listed in api.include",
3016
2805
  "objectName": "@happyvertical/smrt-assets:FolderCollection"
3017
2806
  }
3018
2807
  ],
@@ -3110,46 +2899,6 @@
3110
2899
  "operation": "create",
3111
2900
  "objectName": "@happyvertical/smrt-assets:AssetAssociation"
3112
2901
  },
3113
- {
3114
- "kind": "api",
3115
- "name": "assetassociations.byRight",
3116
- "operation": "byRight",
3117
- "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection",
3118
- "path": "/assetassociations/byRight",
3119
- "method": "POST"
3120
- },
3121
- {
3122
- "kind": "api",
3123
- "name": "assetassociations.byLeft",
3124
- "operation": "byLeft",
3125
- "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection",
3126
- "path": "/assetassociations/byLeft",
3127
- "method": "POST"
3128
- },
3129
- {
3130
- "kind": "api",
3131
- "name": "assetassociations.attach",
3132
- "operation": "attach",
3133
- "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection",
3134
- "path": "/assetassociations/attach",
3135
- "method": "POST"
3136
- },
3137
- {
3138
- "kind": "api",
3139
- "name": "assetassociations.detach",
3140
- "operation": "detach",
3141
- "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection",
3142
- "path": "/assetassociations/detach",
3143
- "method": "POST"
3144
- },
3145
- {
3146
- "kind": "api",
3147
- "name": "assetassociations.setLinks",
3148
- "operation": "setLinks",
3149
- "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection",
3150
- "path": "/assetassociations/setLinks",
3151
- "method": "POST"
3152
- },
3153
2902
  {
3154
2903
  "kind": "cli",
3155
2904
  "name": "assetassociationcollection_byRight",
@@ -3180,36 +2929,6 @@
3180
2929
  "operation": "setLinks",
3181
2930
  "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection"
3182
2931
  },
3183
- {
3184
- "kind": "mcp",
3185
- "name": "assetassociationcollection_byright",
3186
- "operation": "byRight",
3187
- "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection"
3188
- },
3189
- {
3190
- "kind": "mcp",
3191
- "name": "assetassociationcollection_byleft",
3192
- "operation": "byLeft",
3193
- "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection"
3194
- },
3195
- {
3196
- "kind": "mcp",
3197
- "name": "assetassociationcollection_attach",
3198
- "operation": "attach",
3199
- "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection"
3200
- },
3201
- {
3202
- "kind": "mcp",
3203
- "name": "assetassociationcollection_detach",
3204
- "operation": "detach",
3205
- "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection"
3206
- },
3207
- {
3208
- "kind": "mcp",
3209
- "name": "assetassociationcollection_setlinks",
3210
- "operation": "setLinks",
3211
- "objectName": "@happyvertical/smrt-assets:AssetAssociationCollection"
3212
- },
3213
2932
  {
3214
2933
  "kind": "api",
3215
2934
  "name": "assetmetafields.list",
@@ -3316,22 +3035,6 @@
3316
3035
  "operation": "create",
3317
3036
  "objectName": "@happyvertical/smrt-assets:AssetMetafield"
3318
3037
  },
3319
- {
3320
- "kind": "api",
3321
- "name": "assetmetafields.getOrCreate",
3322
- "operation": "getOrCreate",
3323
- "objectName": "@happyvertical/smrt-assets:AssetMetafieldCollection",
3324
- "path": "/assetmetafields/getOrCreate",
3325
- "method": "POST"
3326
- },
3327
- {
3328
- "kind": "api",
3329
- "name": "assetmetafields.initializeCommonMetafields",
3330
- "operation": "initializeCommonMetafields",
3331
- "objectName": "@happyvertical/smrt-assets:AssetMetafieldCollection",
3332
- "path": "/assetmetafields/initializeCommonMetafields",
3333
- "method": "POST"
3334
- },
3335
3038
  {
3336
3039
  "kind": "cli",
3337
3040
  "name": "assetmetafieldcollection_getOrCreate",
@@ -3344,18 +3047,6 @@
3344
3047
  "operation": "initializeCommonMetafields",
3345
3048
  "objectName": "@happyvertical/smrt-assets:AssetMetafieldCollection"
3346
3049
  },
3347
- {
3348
- "kind": "mcp",
3349
- "name": "assetmetafieldcollection_getorcreate",
3350
- "operation": "getOrCreate",
3351
- "objectName": "@happyvertical/smrt-assets:AssetMetafieldCollection"
3352
- },
3353
- {
3354
- "kind": "mcp",
3355
- "name": "assetmetafieldcollection_initializecommonmetafields",
3356
- "operation": "initializeCommonMetafields",
3357
- "objectName": "@happyvertical/smrt-assets:AssetMetafieldCollection"
3358
- },
3359
3050
  {
3360
3051
  "kind": "api",
3361
3052
  "name": "assetstatuses.list",
@@ -3450,22 +3141,6 @@
3450
3141
  "operation": "create",
3451
3142
  "objectName": "@happyvertical/smrt-assets:AssetStatus"
3452
3143
  },
3453
- {
3454
- "kind": "api",
3455
- "name": "assetstatuses.getOrCreate",
3456
- "operation": "getOrCreate",
3457
- "objectName": "@happyvertical/smrt-assets:AssetStatusCollection",
3458
- "path": "/assetstatuses/getOrCreate",
3459
- "method": "POST"
3460
- },
3461
- {
3462
- "kind": "api",
3463
- "name": "assetstatuses.initializeCommonStatuses",
3464
- "operation": "initializeCommonStatuses",
3465
- "objectName": "@happyvertical/smrt-assets:AssetStatusCollection",
3466
- "path": "/assetstatuses/initializeCommonStatuses",
3467
- "method": "POST"
3468
- },
3469
3144
  {
3470
3145
  "kind": "cli",
3471
3146
  "name": "assetstatuscollection_getOrCreate",
@@ -3478,18 +3153,6 @@
3478
3153
  "operation": "initializeCommonStatuses",
3479
3154
  "objectName": "@happyvertical/smrt-assets:AssetStatusCollection"
3480
3155
  },
3481
- {
3482
- "kind": "mcp",
3483
- "name": "assetstatuscollection_getorcreate",
3484
- "operation": "getOrCreate",
3485
- "objectName": "@happyvertical/smrt-assets:AssetStatusCollection"
3486
- },
3487
- {
3488
- "kind": "mcp",
3489
- "name": "assetstatuscollection_initializecommonstatuses",
3490
- "operation": "initializeCommonStatuses",
3491
- "objectName": "@happyvertical/smrt-assets:AssetStatusCollection"
3492
- },
3493
3156
  {
3494
3157
  "kind": "api",
3495
3158
  "name": "assettypes.list",
@@ -3584,22 +3247,6 @@
3584
3247
  "operation": "create",
3585
3248
  "objectName": "@happyvertical/smrt-assets:AssetType"
3586
3249
  },
3587
- {
3588
- "kind": "api",
3589
- "name": "assettypes.getOrCreate",
3590
- "operation": "getOrCreate",
3591
- "objectName": "@happyvertical/smrt-assets:AssetTypeCollection",
3592
- "path": "/assettypes/getOrCreate",
3593
- "method": "POST"
3594
- },
3595
- {
3596
- "kind": "api",
3597
- "name": "assettypes.initializeCommonTypes",
3598
- "operation": "initializeCommonTypes",
3599
- "objectName": "@happyvertical/smrt-assets:AssetTypeCollection",
3600
- "path": "/assettypes/initializeCommonTypes",
3601
- "method": "POST"
3602
- },
3603
3250
  {
3604
3251
  "kind": "cli",
3605
3252
  "name": "assettypecollection_getOrCreate",
@@ -3612,18 +3259,6 @@
3612
3259
  "operation": "initializeCommonTypes",
3613
3260
  "objectName": "@happyvertical/smrt-assets:AssetTypeCollection"
3614
3261
  },
3615
- {
3616
- "kind": "mcp",
3617
- "name": "assettypecollection_getorcreate",
3618
- "operation": "getOrCreate",
3619
- "objectName": "@happyvertical/smrt-assets:AssetTypeCollection"
3620
- },
3621
- {
3622
- "kind": "mcp",
3623
- "name": "assettypecollection_initializecommontypes",
3624
- "operation": "initializeCommonTypes",
3625
- "objectName": "@happyvertical/smrt-assets:AssetTypeCollection"
3626
- },
3627
3262
  {
3628
3263
  "kind": "api",
3629
3264
  "name": "assets.list",
@@ -3808,142 +3443,6 @@
3808
3443
  "operation": "update",
3809
3444
  "objectName": "@happyvertical/smrt-assets:Asset"
3810
3445
  },
3811
- {
3812
- "kind": "api",
3813
- "name": "assets.findByTenant",
3814
- "operation": "findByTenant",
3815
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
3816
- "path": "/assets/findByTenant",
3817
- "method": "POST"
3818
- },
3819
- {
3820
- "kind": "api",
3821
- "name": "assets.findGlobal",
3822
- "operation": "findGlobal",
3823
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
3824
- "path": "/assets/findGlobal",
3825
- "method": "POST"
3826
- },
3827
- {
3828
- "kind": "api",
3829
- "name": "assets.findWithGlobals",
3830
- "operation": "findWithGlobals",
3831
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
3832
- "path": "/assets/findWithGlobals",
3833
- "method": "POST"
3834
- },
3835
- {
3836
- "kind": "api",
3837
- "name": "assets.addTag",
3838
- "operation": "addTag",
3839
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
3840
- "path": "/assets/addTag",
3841
- "method": "POST"
3842
- },
3843
- {
3844
- "kind": "api",
3845
- "name": "assets.removeTag",
3846
- "operation": "removeTag",
3847
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
3848
- "path": "/assets/removeTag",
3849
- "method": "POST"
3850
- },
3851
- {
3852
- "kind": "api",
3853
- "name": "assets.setTags",
3854
- "operation": "setTags",
3855
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
3856
- "path": "/assets/setTags",
3857
- "method": "POST"
3858
- },
3859
- {
3860
- "kind": "api",
3861
- "name": "assets.getTagsForAssets",
3862
- "operation": "getTagsForAssets",
3863
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
3864
- "path": "/assets/getTagsForAssets",
3865
- "method": "POST"
3866
- },
3867
- {
3868
- "kind": "api",
3869
- "name": "assets.getByTag",
3870
- "operation": "getByTag",
3871
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
3872
- "path": "/assets/getByTag",
3873
- "method": "POST"
3874
- },
3875
- {
3876
- "kind": "api",
3877
- "name": "assets.getByType",
3878
- "operation": "getByType",
3879
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
3880
- "path": "/assets/getByType",
3881
- "method": "POST"
3882
- },
3883
- {
3884
- "kind": "api",
3885
- "name": "assets.getByStatus",
3886
- "operation": "getByStatus",
3887
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
3888
- "path": "/assets/getByStatus",
3889
- "method": "POST"
3890
- },
3891
- {
3892
- "kind": "api",
3893
- "name": "assets.getByOwner",
3894
- "operation": "getByOwner",
3895
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
3896
- "path": "/assets/getByOwner",
3897
- "method": "POST"
3898
- },
3899
- {
3900
- "kind": "api",
3901
- "name": "assets.getLatestVersion",
3902
- "operation": "getLatestVersion",
3903
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
3904
- "path": "/assets/getLatestVersion",
3905
- "method": "POST"
3906
- },
3907
- {
3908
- "kind": "api",
3909
- "name": "assets.listVersions",
3910
- "operation": "listVersions",
3911
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
3912
- "path": "/assets/listVersions",
3913
- "method": "POST"
3914
- },
3915
- {
3916
- "kind": "api",
3917
- "name": "assets.getDerivatives",
3918
- "operation": "getDerivatives",
3919
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
3920
- "path": "/assets/getDerivatives",
3921
- "method": "POST"
3922
- },
3923
- {
3924
- "kind": "api",
3925
- "name": "assets.getByMimeType",
3926
- "operation": "getByMimeType",
3927
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
3928
- "path": "/assets/getByMimeType",
3929
- "method": "POST"
3930
- },
3931
- {
3932
- "kind": "api",
3933
- "name": "assets.rollbackToVersion",
3934
- "operation": "rollbackToVersion",
3935
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
3936
- "path": "/assets/rollbackToVersion",
3937
- "method": "POST"
3938
- },
3939
- {
3940
- "kind": "api",
3941
- "name": "assets.getByFolder",
3942
- "operation": "getByFolder",
3943
- "objectName": "@happyvertical/smrt-assets:AssetCollection",
3944
- "path": "/assets/getByFolder",
3945
- "method": "POST"
3946
- },
3947
3446
  {
3948
3447
  "kind": "cli",
3949
3448
  "name": "assetcollection_findByTenant",
@@ -4052,114 +3551,6 @@
4052
3551
  "operation": "getByFolder",
4053
3552
  "objectName": "@happyvertical/smrt-assets:AssetCollection"
4054
3553
  },
4055
- {
4056
- "kind": "mcp",
4057
- "name": "assetcollection_findbytenant",
4058
- "operation": "findByTenant",
4059
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
4060
- },
4061
- {
4062
- "kind": "mcp",
4063
- "name": "assetcollection_findglobal",
4064
- "operation": "findGlobal",
4065
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
4066
- },
4067
- {
4068
- "kind": "mcp",
4069
- "name": "assetcollection_findwithglobals",
4070
- "operation": "findWithGlobals",
4071
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
4072
- },
4073
- {
4074
- "kind": "mcp",
4075
- "name": "assetcollection_addtag",
4076
- "operation": "addTag",
4077
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
4078
- },
4079
- {
4080
- "kind": "mcp",
4081
- "name": "assetcollection_removetag",
4082
- "operation": "removeTag",
4083
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
4084
- },
4085
- {
4086
- "kind": "mcp",
4087
- "name": "assetcollection_settags",
4088
- "operation": "setTags",
4089
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
4090
- },
4091
- {
4092
- "kind": "mcp",
4093
- "name": "assetcollection_gettagsforassets",
4094
- "operation": "getTagsForAssets",
4095
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
4096
- },
4097
- {
4098
- "kind": "mcp",
4099
- "name": "assetcollection_getbytag",
4100
- "operation": "getByTag",
4101
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
4102
- },
4103
- {
4104
- "kind": "mcp",
4105
- "name": "assetcollection_getbytype",
4106
- "operation": "getByType",
4107
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
4108
- },
4109
- {
4110
- "kind": "mcp",
4111
- "name": "assetcollection_getbystatus",
4112
- "operation": "getByStatus",
4113
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
4114
- },
4115
- {
4116
- "kind": "mcp",
4117
- "name": "assetcollection_getbyowner",
4118
- "operation": "getByOwner",
4119
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
4120
- },
4121
- {
4122
- "kind": "mcp",
4123
- "name": "assetcollection_createnewversion",
4124
- "operation": "createNewVersion",
4125
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
4126
- },
4127
- {
4128
- "kind": "mcp",
4129
- "name": "assetcollection_getlatestversion",
4130
- "operation": "getLatestVersion",
4131
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
4132
- },
4133
- {
4134
- "kind": "mcp",
4135
- "name": "assetcollection_listversions",
4136
- "operation": "listVersions",
4137
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
4138
- },
4139
- {
4140
- "kind": "mcp",
4141
- "name": "assetcollection_getderivatives",
4142
- "operation": "getDerivatives",
4143
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
4144
- },
4145
- {
4146
- "kind": "mcp",
4147
- "name": "assetcollection_getbymimetype",
4148
- "operation": "getByMimeType",
4149
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
4150
- },
4151
- {
4152
- "kind": "mcp",
4153
- "name": "assetcollection_rollbacktoversion",
4154
- "operation": "rollbackToVersion",
4155
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
4156
- },
4157
- {
4158
- "kind": "mcp",
4159
- "name": "assetcollection_getbyfolder",
4160
- "operation": "getByFolder",
4161
- "objectName": "@happyvertical/smrt-assets:AssetCollection"
4162
- },
4163
3554
  {
4164
3555
  "kind": "api",
4165
3556
  "name": "folders.list",
@@ -4296,22 +3687,6 @@
4296
3687
  "operation": "update",
4297
3688
  "objectName": "@happyvertical/smrt-assets:Folder"
4298
3689
  },
4299
- {
4300
- "kind": "api",
4301
- "name": "folders.getTree",
4302
- "operation": "getTree",
4303
- "objectName": "@happyvertical/smrt-assets:FolderCollection",
4304
- "path": "/folders/getTree",
4305
- "method": "POST"
4306
- },
4307
- {
4308
- "kind": "api",
4309
- "name": "folders.getPath",
4310
- "operation": "getPath",
4311
- "objectName": "@happyvertical/smrt-assets:FolderCollection",
4312
- "path": "/folders/getPath",
4313
- "method": "POST"
4314
- },
4315
3690
  {
4316
3691
  "kind": "cli",
4317
3692
  "name": "foldercollection_getTree",
@@ -4335,30 +3710,6 @@
4335
3710
  "name": "foldercollection_moveAsset",
4336
3711
  "operation": "moveAsset",
4337
3712
  "objectName": "@happyvertical/smrt-assets:FolderCollection"
4338
- },
4339
- {
4340
- "kind": "mcp",
4341
- "name": "foldercollection_gettree",
4342
- "operation": "getTree",
4343
- "objectName": "@happyvertical/smrt-assets:FolderCollection"
4344
- },
4345
- {
4346
- "kind": "mcp",
4347
- "name": "foldercollection_getpath",
4348
- "operation": "getPath",
4349
- "objectName": "@happyvertical/smrt-assets:FolderCollection"
4350
- },
4351
- {
4352
- "kind": "mcp",
4353
- "name": "foldercollection_getcontents",
4354
- "operation": "getContents",
4355
- "objectName": "@happyvertical/smrt-assets:FolderCollection"
4356
- },
4357
- {
4358
- "kind": "mcp",
4359
- "name": "foldercollection_moveasset",
4360
- "operation": "moveAsset",
4361
- "objectName": "@happyvertical/smrt-assets:FolderCollection"
4362
3713
  }
4363
3714
  ],
4364
3715
  "prompts": [],
@@ -4370,7 +3721,14 @@
4370
3721
  "polymorphicAssociations": 1,
4371
3722
  "uuidColumns": 40
4372
3723
  },
4373
- "agentDoc": "# @happyvertical/smrt-assets\n\nProvider-agnostic asset management with versioning, type classification, and generic/provenance associations.\n\n## Models\n\n- **Asset** (STI base): versioning via `primaryVersionId` chain + `version` number. `ownerProfileId`, `typeSlug`, `statusSlug`, `mimeType`, `sourceUri`. Derivation chain via `sourceAssetId` (R3-D — was `parentId` before the rename; column `source_asset_id`).\n- **AssetType** / **AssetStatus**: lookup tables for classification and lifecycle.\n- **AssetMetafield**: custom metadata field definitions with JSON validation rules.\n- **Folder**: hierarchical container for assets. Own `SmrtHierarchical` model with its own `folders` table (R3-D — was an STI subclass of Asset before). `Asset.folderId` points to the folder.\n- **AssetAssociation**: generic/provenance polymorphic join — `assetId` + `metaType` + `metaId` + `role` + `sortOrder`. Use it when a relationship is not owned by a base/domain model join table like `content_assets`, `profile_assets`, `event_assets`, `place_assets`, or `product_assets`.\n\n## Key Patterns\n\n- **Versioning**: `createNewVersion()` increments version, chains via `primaryVersionId`. `findVersions()` to retrieve history.\n- **Tag integration**: `addTag()`/`removeTag()` use raw `db.upsert()` on `asset_tags` join table (not a SMRT model).\n- **AssetStore**: abstraction for provider-agnostic file I/O (S3, local, etc.).\n `planFile(asset, opts)` resolves a recoverable URI before bytes are written;\n persist it before `preserveFile(asset, bytes, opts)`. Preservation adopts equal\n existing bytes and rejects changed bytes, changed resolver targets and read\n failures other than not-found. The caller owns receipt fencing/serialization.\n `removeFile(asset)` removes only bytes for recovery cleanup, including an\n already-pruned owner record; `remove(asset)` also deletes the owner record.\n- **Ownership rule**: base/domain-owned asset relationships should live on noun join tables such as `content_assets`, `profile_assets`, `event_assets`, `place_assets`, and `product_assets`; keep `AssetAssociation` for generic/provenance links like image derivation.\n\n## Runtime surface\n\nApps and agents should depend on the public **asset runtime** rather than hand-wiring a collection + store per-package (#1128).\n\n- `createAssetRuntime({ db, storage })` → `AssetRuntime` bundling `AssetCollection`, `AssetAssociationCollection`, and an initialized `AssetStore`.\n- `AssetRuntime.storeSourceAsset(name, data, opts)` — create a new source asset (record + bytes).\n- `AssetRuntime.storeDerivedAsset(source, name, data, opts)` — create a derivative with `sourceAssetId` set and (by default) a provenance `AssetAssociation` under a chosen role.\n- `AssetRuntime.linkDerivation(source, derivative, { role })` — record provenance without touching bytes.\n- `AssetRuntime.setExtractionStatus(asset, status, { error?, extractedAt? })` — write canonical extraction metadata into the asset's description JSON sidecar. Non-destructive: if `description` is free-form prose or non-object JSON, the original value is preserved under the reserved `text` key instead of being overwritten. Existing JSON objects are merged into.\n\nAgents that need asset I/O should accept an `AssetRuntimeLike` in their options rather than asking callers to pass a store + collection separately.\n\n## Serving contract\n\n- `serveAsset({ runtime, asset, tenantId?, disposition?, canAccess?, headers?, remoteMode? })` → standard Web `Response`.\n - `404` when the id doesn't resolve; `403` when the tenant mismatches or `canAccess` denies; `302` when `remoteMode: 'redirect'` and the asset's `sourceUri` is `http(s)`; `502` when `remoteMode: 'proxy'` and the origin fetch fails; `500` on store read errors or unexpected failures; `200` otherwise with `Content-Type`, `Content-Length`, and `Content-Disposition` set.\n - Assets whose `sourceUri` is `http(s)` are supported via `remoteMode`: `'proxy'` (default, fetch and return bytes), `'redirect'` (302 to the origin), or `'error'` (treat as misconfiguration). Pass `fetchImpl` to swap the fetch client.\n - `Content-Disposition` uses an ASCII-safe quoted `filename` fallback and retains the Unicode download name in UTF-8 `filename*` ([RFC 6266](https://www.rfc-editor.org/rfc/rfc6266#section-4.3), [RFC 8187](https://www.rfc-editor.org/rfc/rfc8187#section-3.2.1)). Both names strip C0/DEL/C1 controls and replace `\"` / `\\` / `/` to prevent header injection; isolated UTF-16 surrogates become U+FFFD before encoding, while valid pairs are preserved.\n - The 500 body is a generic `'Internal error serving asset'`; the underlying error is logged via `console.error` so operators can debug without leaking paths/bucket names to clients.\n - Works in SvelteKit `+server.ts` endpoints, Hono, and any runtime with a global `Response` (Node 18+). Pass `responseCtor` for older runtimes.\n- `resolveAssetForServing(options)` → `{ asset, data, contentType, filename, size }` when callers want to render their own framework response. Throws `AssetServeError(status)` on the same failure modes.\n\n## Source/derived vocabulary\n\nThe following roles are exported as `ASSET_ROLES` and should be preferred over ad-hoc strings when apps want cross-package tooling (serving, UI pickers) to agree on meaning:\n\n| Role | Use |\n|------|-----|\n| `source_document` | original upstream document (agenda PDF, minutes) |\n| `document_image` | page/extracted image derived from a source document |\n| `thumbnail` | preview rendition of another asset |\n| `proof` | non-canonical evidence asset backing a fact |\n| `derivation_source` | \"came from\" link on generated media |\n| `attachment` | generic owner-join link |\n| `hero` | primary/featured asset on an owner |\n\nCanonical metadata keys are exported as `ASSET_METADATA_KEYS`: `extractionStatus`, `extractionError`, `extractedAt`, `sourceUrl`, `sourceHash`, `pageNumber`. Extraction status values live in `ASSET_EXTRACTION_STATUS` (`pending | running | succeeded | failed`).\n\n## UI Registry\n\nThe `./ui` subpath exports `ASSETS_MODULE_META` and `ASSETS_UI_SLOTS` so registry-driven hosts (smrt-chat, dynamic admin shells) can discover the package's Svelte components without a hard import.\n\n```ts\nimport { ASSETS_MODULE_META, ASSETS_UI_SLOTS } from '@happyvertical/smrt-assets/ui';\nimport '@happyvertical/smrt-assets/svelte'; // side-effect: ModuleUIRegistry.register(...)\nimport { ModuleUIRegistry } from '@happyvertical/smrt-ui/registry';\n\nconst AssetManager = ModuleUIRegistry.get('@happyvertical/smrt-assets', 'asset-manager');\n```\n\nRegistered slots: `asset-manager` (admin), `asset-grid` / `asset-list` (list), `asset-detail` (detail), `asset-toolbar` / `asset-action-bar` (action), `asset-create-modal` (form). Slot IDs are stable contracts — host apps reference them by string.\n\n## Gotchas\n\n- **Files SDK is a lazy boundary (#1979)**: `AssetStore` loads `@happyvertical/files` through `src/files-runtime.ts` (bundler-invisible), because smrt-assets is reachable from provider-neutral consumer graphs via profiles. Node/tsx/vite-dev runtimes resolve it on first file operation; fully-bundled deployments import `@happyvertical/smrt-assets/filesystem` at startup. Never import the files SDK statically from modules reachable from `src/index.ts`.\n- **Version history manual**: `findVersions()` chaining required — no ORM shortcut\n- **Tag management uses raw SQL**: `asset_tags` is a join table, not an SMRT model\n- **Folder tree traversal**: via `SmrtHierarchical` (`getParent`/`getChildren`/`getAncestors`/`getDescendants`/`getHierarchy`/`moveTo`); `FolderCollection.getTree(rootId?)` and `getPath(folderId)` wrap these for convenience\n- **AssetAssociation polymorphic FK**: requires manual `metaType` string matching\n- **Optional tenancy**: assets can be global (tenantId=null) or tenant-scoped\n",
3724
+ "agentDoc": "# @happyvertical/smrt-assets\n\nProvider-agnostic asset management with versioning, type classification, and generic/provenance associations.\n\n## Models\n\n- **Asset** (STI base): versioning via `primaryVersionId` chain + `version` number. `ownerProfileId`, `typeSlug`, `statusSlug`, `mimeType`, `sourceUri`. Derivation chain via `sourceAssetId` (R3-D — was `parentId` before the rename; column `source_asset_id`).\n- **AssetType** / **AssetStatus**: lookup tables for classification and lifecycle.\n- **AssetMetafield**: custom metadata field definitions with JSON validation rules.\n- **Folder**: hierarchical container for assets. Own `SmrtHierarchical` model with its own `folders` table (R3-D — was an STI subclass of Asset before). `Asset.folderId` points to the folder.\n- **AssetAssociation**: generic/provenance polymorphic join — `assetId` + `metaType` + `metaId` + `role` + `sortOrder`. Use it when a relationship is not owned by a base/domain model join table like `content_assets`, `profile_assets`, `event_assets`, `place_assets`, or `product_assets`.\n\n## Key Patterns\n\n- **Versioning**: `createNewVersion()` increments version, chains via `primaryVersionId`. `findVersions()` to retrieve history.\n- **Tag integration**: `addTag()`/`removeTag()` use raw `db.upsert()` on `asset_tags` join table (not a SMRT model).\n- **AssetStore**: abstraction for provider-agnostic file I/O (S3, local, etc.).\n `planFile(asset, opts)` resolves a recoverable URI before bytes are written;\n persist it before `preserveFile(asset, bytes, opts)`. Preservation adopts equal\n existing bytes and rejects changed bytes, changed resolver targets and read\n failures other than not-found. The caller owns receipt fencing/serialization.\n `removeFile(asset)` removes only bytes for recovery cleanup, including an\n already-pruned owner record; `remove(asset)` also deletes the owner record.\n- **Ownership rule**: base/domain-owned asset relationships should live on noun join tables such as `content_assets`, `profile_assets`, `event_assets`, `place_assets`, and `product_assets`; keep `AssetAssociation` for generic/provenance links like image derivation.\n\n## Runtime surface\n\nApps and agents should depend on the public **asset runtime** rather than hand-wiring a collection + store per-package (#1128).\n\n- `createAssetRuntime({ db, storage })` → `AssetRuntime` bundling `AssetCollection`, `AssetAssociationCollection`, and an initialized `AssetStore`.\n- `AssetRuntime.storeSourceAsset(name, data, opts)` — create a new source asset (record + bytes).\n- `AssetRuntime.storeDerivedAsset(source, name, data, opts)` — create a derivative with `sourceAssetId` set and (by default) a provenance `AssetAssociation` under a chosen role.\n- `AssetRuntime.linkDerivation(source, derivative, { role })` — record provenance without touching bytes.\n- `AssetRuntime.setExtractionStatus(asset, status, { error?, extractedAt? })` — write canonical extraction metadata into the asset's description JSON sidecar. Non-destructive: if `description` is free-form prose or non-object JSON, the original value is preserved under the reserved `text` key instead of being overwritten. Existing JSON objects are merged into.\n\nAgents that need asset I/O should accept an `AssetRuntimeLike` in their options rather than asking callers to pass a store + collection separately.\n\n## Serving contract\n\n- `serveAsset({ runtime, asset, tenantId?, disposition?, canAccess?, headers?, remoteMode? })` → standard Web `Response`.\n - `404` when the id doesn't resolve; `403` when the tenant mismatches or `canAccess` denies; `302` when `remoteMode: 'redirect'` and the asset's `sourceUri` is `http(s)`; `502` when `remoteMode: 'proxy'` and the origin fetch fails; `500` on store read errors or unexpected failures; `200` otherwise with `Content-Type`, `Content-Length`, and `Content-Disposition` set.\n - Assets whose `sourceUri` is `http(s)` are supported via `remoteMode`: `'proxy'` (default, fetch and return bytes), `'redirect'` (302 to the origin), or `'error'` (treat as misconfiguration). Pass `fetchImpl` to swap the fetch client.\n - `Content-Disposition` uses an ASCII-safe quoted `filename` fallback and retains the Unicode download name in UTF-8 `filename*` ([RFC 6266](https://www.rfc-editor.org/rfc/rfc6266#section-4.3), [RFC 8187](https://www.rfc-editor.org/rfc/rfc8187#section-3.2.1)). Both names strip C0/DEL/C1 controls and replace `\"` / `\\` / `/` to prevent header injection; isolated UTF-16 surrogates become U+FFFD before encoding, while valid pairs are preserved.\n - The 500 body is a generic `'Internal error serving asset'`; the underlying error is logged via `console.error` so operators can debug without leaking paths/bucket names to clients.\n - Works in SvelteKit `+server.ts` endpoints, Hono, and any runtime with a global `Response` (Node 18+). Pass `responseCtor` for older runtimes.\n- `resolveAssetForServing(options)` → `{ asset, data, contentType, filename, size }` when callers want to render their own framework response. Throws `AssetServeError(status)` on the same failure modes.\n\n## Source/derived vocabulary\n\nThe following roles are exported as `ASSET_ROLES` and should be preferred over ad-hoc strings when apps want cross-package tooling (serving, UI pickers) to agree on meaning:\n\n| Role | Use |\n|------|-----|\n| `source_document` | original upstream document (agenda PDF, minutes) |\n| `document_image` | page/extracted image derived from a source document |\n| `thumbnail` | preview rendition of another asset |\n| `proof` | non-canonical evidence asset backing a fact |\n| `derivation_source` | \"came from\" link on generated media |\n| `attachment` | generic owner-join link |\n| `hero` | primary/featured asset on an owner |\n\nCanonical metadata keys are exported as `ASSET_METADATA_KEYS`: `extractionStatus`, `extractionError`, `extractedAt`, `sourceUrl`, `sourceHash`, `pageNumber`. Extraction status values live in `ASSET_EXTRACTION_STATUS` (`pending | running | succeeded | failed`).\n\n## UI Registry\n\nThe `./ui` subpath exports `ASSETS_MODULE_META` and `ASSETS_UI_SLOTS` so registry-driven hosts (smrt-chat, dynamic admin shells) can discover the package's Svelte components without a hard import.\n\n```ts\nimport { ASSETS_MODULE_META, ASSETS_UI_SLOTS } from '@happyvertical/smrt-assets/ui';\nimport '@happyvertical/smrt-assets/svelte'; // side-effect: ModuleUIRegistry.register(...)\nimport { ModuleUIRegistry } from '@happyvertical/smrt-ui/registry';\n\nconst AssetManager = ModuleUIRegistry.get('@happyvertical/smrt-assets', 'asset-manager');\n```\n\nRegistered slots: `asset-manager` (admin), `asset-grid` / `asset-list` (list), `asset-detail` (detail), `asset-toolbar` / `asset-action-bar` (action), `asset-create-modal` (form). Slot IDs are stable contracts — host apps reference them by string.\n\n## Gotchas\n\n- **Files SDK is a lazy boundary (#1979)**: `AssetStore` loads `@happyvertical/files` through `src/files-runtime.ts` (bundler-invisible), because smrt-assets is reachable from provider-neutral consumer graphs via profiles. Node/tsx/vite-dev runtimes resolve it on first file operation; fully-bundled deployments import `@happyvertical/smrt-assets/filesystem` at startup. Never import the files SDK statically from modules reachable from `src/index.ts`.\n- **Version history manual**: `findVersions()` chaining required — no ORM shortcut\n- **Tag management uses raw SQL**: `asset_tags` is a join table, not an SMRT model\n- **Folder tree traversal**: via `SmrtHierarchical` (`getParent`/`getChildren`/`getAncestors`/`getDescendants`/`getHierarchy`/`moveTo`); `FolderCollection.getTree(rootId?)` and `getPath(folderId)` wrap these for convenience\n- **AssetAssociation polymorphic FK**: requires manual `metaType` string matching\n- **Optional tenancy**: assets can be global (tenantId=null) or tenant-scoped\n\n## Private records\n\n`Asset.accessMode` and the mandatory owning interceptor protect private records\nacross generated and parent STI surfaces. Use the exact actor/owner/ID capability\nonly after host authorization; see [private assets](agents/private-assets.md).\n",
3725
+ "moduleDocs": [
3726
+ {
3727
+ "path": "agents/private-assets.md",
3728
+ "module": "private-assets",
3729
+ "content": "# Private asset records\n\n`Asset.accessMode` is `public` by default: the record is available through ordinary\nasset APIs subject to the existing tenant/authentication checks. It does not mean\nthat the underlying bytes are publicly hosted. `private` records are excluded\nfrom ordinary list/get, projection/count and parent STI hydration, even in system\nor super-admin contexts. The policy is installed by importing Asset itself.\nGenerated REST/MCP updates and deletes cannot discover a private record.\n\nA trusted server may use `withPrivateAssetAccess({ tenantId, actorUserId,\nownerProfileId, assetIds }, callback)` after independently authorizing the actor's\nrelationship to the owning business record. Never expose this capability as a\nrequest option or populate it from arbitrary request JSON. It permits only the\nexact private IDs and owner; ordinary public rows are not included within that\nscope. The current tenant/user must match at each operation. Nested scopes may\nonly narrow IDs with the same owner, and scopes close when their callback ends.\nAwait every operation inside the callback. Async-local storage is resolved lazily\non Node; without that server capability, private scope creation explicitly fails\nand ordinary policy reads remain public-only. This does not promise full package\nbrowser runtime support: existing tenancy dependencies retain their own platform\nlimitations.\n\nPrivate writes require the same capability. Classification and ownership of an\nexisting private record are immutable. Core applies a mandatory persisted-write\npredicate at the final database mutation, including natural-key adoption, so an\nordinary create/upsert cannot overwrite a private record that committed after its\npre-save probe. Guarded new writes never fall back to an unconditional SDK upsert;\na late insert collision can require a caller retry. The instance transaction\nexecutor is used throughout. Raw `AssetCollection.query()` is rejected because\narbitrary SQL cannot reliably preserve the private-row predicate; use the guarded\nlist/get APIs. `findGlobal` and `findWithGlobals` retain their behavior through\nguarded list reads. Direct database access is trusted infrastructure, not an\nuntrusted request API.\n\nPrivate bytes must reside in non-public storage. HTTP(S) source locators are\nrejected for private records; hosts must also configure private bucket/filesystem\nACLs. Hiding a locator cannot protect bytes already publicly accessible. Serving\nroutes must authorize the business relationship, validate their signed claim and\nopen only that exact asset capability before resolving the record.\n\n## Schema and release\n\nThe new `access_mode` column has a `public` default, preserving existing asset\nvisibility after explicit migration. Generate/apply the normal manifest migration\nbefore running the new runtime; runtime checks never create or alter application\nschema. Rebuild assets and downstream manifests. A low-cardinality standalone\nindex on access mode is not added: exact reads use the primary key and scoped\nlists retain their existing tenant predicates/indexes.\n\nEducation captures and split worksheet pages are private from their initial\ntransactional insert. Database metadata is atomic; external bytes use the\neducation service's compensating cleanup contract, not a distributed transaction.\n"
3730
+ }
3731
+ ],
4374
3732
  "recipes": [
4375
3733
  {
4376
3734
  "id": "assets.attachments",