diff --git a/packages/catalog-realm/AppListing/707a0c91-4c88-45d9-a28e-1195c8834b66.json b/packages/catalog-realm/AppListing/707a0c91-4c88-45d9-a28e-1195c8834b66.json index 9964f271627..f572f5d515e 100644 --- a/packages/catalog-realm/AppListing/707a0c91-4c88-45d9-a28e-1195c8834b66.json +++ b/packages/catalog-realm/AppListing/707a0c91-4c88-45d9-a28e-1195c8834b66.json @@ -30,7 +30,7 @@ }, "tags.0": { "links": { - "self": "../Tag/51de249c-516a-4c4d-bd88-76e88274c483" + "self": "../Tag/game" } }, "license": { diff --git a/packages/catalog-realm/AppListing/77083eb2-d809-4366-ad85-f757dc5c693b.json b/packages/catalog-realm/AppListing/77083eb2-d809-4366-ad85-f757dc5c693b.json index 54d004b5358..fe87ca26f86 100644 --- a/packages/catalog-realm/AppListing/77083eb2-d809-4366-ad85-f757dc5c693b.json +++ b/packages/catalog-realm/AppListing/77083eb2-d809-4366-ad85-f757dc5c693b.json @@ -29,7 +29,7 @@ }, "tags.0": { "links": { - "self": "../Tag/140feda8-625b-4a24-9ddb-6f4da891aef2" + "self": "../Tag/bundled" } }, "license": { diff --git a/packages/catalog-realm/AppListing/95cbe2c7-9b60-4afd-8a3c-1382b610e316.json b/packages/catalog-realm/AppListing/95cbe2c7-9b60-4afd-8a3c-1382b610e316.json index 0382bb4205e..75e165e9d3d 100644 --- a/packages/catalog-realm/AppListing/95cbe2c7-9b60-4afd-8a3c-1382b610e316.json +++ b/packages/catalog-realm/AppListing/95cbe2c7-9b60-4afd-8a3c-1382b610e316.json @@ -30,12 +30,12 @@ }, "tags.0": { "links": { - "self": "../Tag/140feda8-625b-4a24-9ddb-6f4da891aef2" + "self": "../Tag/bundled" } }, "tags.1": { "links": { - "self": "../Tag/ed5a1a3f-0dbf-47b5-b2a6-d88b0d2a7642" + "self": "../Tag/official" } }, "license": { diff --git a/packages/catalog-realm/AppListing/a47dcb12-f1aa-4415-8be1-5ae04f5db457.json b/packages/catalog-realm/AppListing/a47dcb12-f1aa-4415-8be1-5ae04f5db457.json index a652d9f0b9e..500b04c8e68 100644 --- a/packages/catalog-realm/AppListing/a47dcb12-f1aa-4415-8be1-5ae04f5db457.json +++ b/packages/catalog-realm/AppListing/a47dcb12-f1aa-4415-8be1-5ae04f5db457.json @@ -28,7 +28,7 @@ }, "tags.0": { "links": { - "self": "../Tag/140feda8-625b-4a24-9ddb-6f4da891aef2" + "self": "../Tag/bundled" } }, "license": { diff --git a/packages/catalog-realm/AppListing/c1413482-092a-45b4-b92b-d8d2672641e7.json b/packages/catalog-realm/AppListing/c1413482-092a-45b4-b92b-d8d2672641e7.json index fb090b38013..940cefce364 100644 --- a/packages/catalog-realm/AppListing/c1413482-092a-45b4-b92b-d8d2672641e7.json +++ b/packages/catalog-realm/AppListing/c1413482-092a-45b4-b92b-d8d2672641e7.json @@ -28,7 +28,7 @@ }, "tags.0": { "links": { - "self": "../Tag/ed5a1a3f-0dbf-47b5-b2a6-d88b0d2a7642" + "self": "../Tag/official" } }, "license": { diff --git a/packages/catalog-realm/CardListing/10ff8743-4b8c-403e-95a6-90c36cbb98ca.json b/packages/catalog-realm/CardListing/10ff8743-4b8c-403e-95a6-90c36cbb98ca.json index abbdb2ae07f..21ae48adf21 100644 --- a/packages/catalog-realm/CardListing/10ff8743-4b8c-403e-95a6-90c36cbb98ca.json +++ b/packages/catalog-realm/CardListing/10ff8743-4b8c-403e-95a6-90c36cbb98ca.json @@ -28,7 +28,7 @@ }, "tags.0": { "links": { - "self": "../Tag/51de249c-516a-4c4d-bd88-76e88274c483" + "self": "../Tag/game" } }, "license": { diff --git a/packages/catalog-realm/CardListing/2669572f-00e1-485f-900d-5b686acfe9c6.json b/packages/catalog-realm/CardListing/2669572f-00e1-485f-900d-5b686acfe9c6.json index 039a8825988..433b63bb8b3 100644 --- a/packages/catalog-realm/CardListing/2669572f-00e1-485f-900d-5b686acfe9c6.json +++ b/packages/catalog-realm/CardListing/2669572f-00e1-485f-900d-5b686acfe9c6.json @@ -28,12 +28,12 @@ }, "tags.0": { "links": { - "self": "../Tag/4d0f9ae2-048e-4ce0-b263-7006602ce6a4" + "self": "../Tag/user-contributed" } }, "tags.1": { "links": { - "self": "../Tag/ed5a1a3f-0dbf-47b5-b2a6-d88b0d2a7642" + "self": "../Tag/official" } }, "license": { diff --git a/packages/catalog-realm/CardListing/2b1f1edf-dc57-4198-a180-9b07fc26dbfe.json b/packages/catalog-realm/CardListing/2b1f1edf-dc57-4198-a180-9b07fc26dbfe.json index 5515941b17d..045e82a80e3 100644 --- a/packages/catalog-realm/CardListing/2b1f1edf-dc57-4198-a180-9b07fc26dbfe.json +++ b/packages/catalog-realm/CardListing/2b1f1edf-dc57-4198-a180-9b07fc26dbfe.json @@ -95,7 +95,7 @@ }, "categories.1": { "links": { - "self": "../Category/38b5d1dc-00d3-4a19-8998-29f0c19081de" + "self": "../Category/travel-lifestyle" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/CardListing/2d838726-ed2c-437d-a171-eade2544ca66.json b/packages/catalog-realm/CardListing/2d838726-ed2c-437d-a171-eade2544ca66.json index 3327b9372b0..d4f5fb48f2f 100644 --- a/packages/catalog-realm/CardListing/2d838726-ed2c-437d-a171-eade2544ca66.json +++ b/packages/catalog-realm/CardListing/2d838726-ed2c-437d-a171-eade2544ca66.json @@ -24,7 +24,7 @@ "relationships": { "tags.0": { "links": { - "self": "../Tag/140feda8-625b-4a24-9ddb-6f4da891aef2" + "self": "../Tag/bundled" } }, "skills": { diff --git a/packages/catalog-realm/CardListing/358a08b8-9e03-4a39-a40b-539eb3e01622.json b/packages/catalog-realm/CardListing/358a08b8-9e03-4a39-a40b-539eb3e01622.json index 97fcc64c91b..fb86d420e30 100644 --- a/packages/catalog-realm/CardListing/358a08b8-9e03-4a39-a40b-539eb3e01622.json +++ b/packages/catalog-realm/CardListing/358a08b8-9e03-4a39-a40b-539eb3e01622.json @@ -28,7 +28,7 @@ }, "tags.0": { "links": { - "self": "../Tag/51de249c-516a-4c4d-bd88-76e88274c483" + "self": "../Tag/game" } }, "license": { diff --git a/packages/catalog-realm/CardListing/36de56b9-9ee7-4105-8f2c-497819d76da6.json b/packages/catalog-realm/CardListing/36de56b9-9ee7-4105-8f2c-497819d76da6.json index e640aa26866..a1b4b31bce7 100644 --- a/packages/catalog-realm/CardListing/36de56b9-9ee7-4105-8f2c-497819d76da6.json +++ b/packages/catalog-realm/CardListing/36de56b9-9ee7-4105-8f2c-497819d76da6.json @@ -30,12 +30,12 @@ }, "tags.0": { "links": { - "self": "../Tag/631d1b5d-fcd0-465c-964e-e535fc6bb893" + "self": "../Tag/ai" } }, "tags.1": { "links": { - "self": "../Tag/c1fe433a-b3df-41f4-bdcf-d98686ee42d7" + "self": "../Tag/calculator" } }, "license": { @@ -170,7 +170,7 @@ }, "categories.0": { "links": { - "self": "../Category/38b5d1dc-00d3-4a19-8998-29f0c19081de" + "self": "../Category/travel-lifestyle" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/CardListing/49ea1457-ecc8-418d-9013-d74730b116e1.json b/packages/catalog-realm/CardListing/49ea1457-ecc8-418d-9013-d74730b116e1.json index 9b0efd3d919..ac3bcc7167e 100644 --- a/packages/catalog-realm/CardListing/49ea1457-ecc8-418d-9013-d74730b116e1.json +++ b/packages/catalog-realm/CardListing/49ea1457-ecc8-418d-9013-d74730b116e1.json @@ -29,12 +29,12 @@ }, "tags.0": { "links": { - "self": "../Tag/140feda8-625b-4a24-9ddb-6f4da891aef2" + "self": "../Tag/bundled" } }, "tags.1": { "links": { - "self": "../Tag/4d0f9ae2-048e-4ce0-b263-7006602ce6a4" + "self": "../Tag/user-contributed" } }, "license": { diff --git a/packages/catalog-realm/CardListing/4aca5509-09d5-4aec-aeba-1cd26628cca9.json b/packages/catalog-realm/CardListing/4aca5509-09d5-4aec-aeba-1cd26628cca9.json index 52f7624b776..35a6481968a 100644 --- a/packages/catalog-realm/CardListing/4aca5509-09d5-4aec-aeba-1cd26628cca9.json +++ b/packages/catalog-realm/CardListing/4aca5509-09d5-4aec-aeba-1cd26628cca9.json @@ -28,7 +28,7 @@ }, "tags.0": { "links": { - "self": "../Tag/c1fe433a-b3df-41f4-bdcf-d98686ee42d7" + "self": "../Tag/calculator" } }, "license": { diff --git a/packages/catalog-realm/CardListing/5b6c4561-ca61-4e38-aeb1-7d9f7ff9778e.json b/packages/catalog-realm/CardListing/5b6c4561-ca61-4e38-aeb1-7d9f7ff9778e.json index 44b1cdfc251..e961da67dab 100644 --- a/packages/catalog-realm/CardListing/5b6c4561-ca61-4e38-aeb1-7d9f7ff9778e.json +++ b/packages/catalog-realm/CardListing/5b6c4561-ca61-4e38-aeb1-7d9f7ff9778e.json @@ -88,7 +88,7 @@ }, "categories.1": { "links": { - "self": "../Category/38b5d1dc-00d3-4a19-8998-29f0c19081de" + "self": "../Category/travel-lifestyle" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/CardListing/61be974d-6254-4ddd-9917-d91fa165a536.json b/packages/catalog-realm/CardListing/61be974d-6254-4ddd-9917-d91fa165a536.json index c3dc8f1d3d3..c0580888da5 100644 --- a/packages/catalog-realm/CardListing/61be974d-6254-4ddd-9917-d91fa165a536.json +++ b/packages/catalog-realm/CardListing/61be974d-6254-4ddd-9917-d91fa165a536.json @@ -26,12 +26,12 @@ "relationships": { "tags.0": { "links": { - "self": "../Tag/51de249c-516a-4c4d-bd88-76e88274c483" + "self": "../Tag/game" } }, "tags.1": { "links": { - "self": "../Tag/631d1b5d-fcd0-465c-964e-e535fc6bb893" + "self": "../Tag/ai" } }, "license": { diff --git a/packages/catalog-realm/CardListing/694bf025-0904-488d-af1b-2b88bbd8df43.json b/packages/catalog-realm/CardListing/694bf025-0904-488d-af1b-2b88bbd8df43.json index 6881e9bf012..443ece2a233 100644 --- a/packages/catalog-realm/CardListing/694bf025-0904-488d-af1b-2b88bbd8df43.json +++ b/packages/catalog-realm/CardListing/694bf025-0904-488d-af1b-2b88bbd8df43.json @@ -24,12 +24,12 @@ "relationships": { "tags.0": { "links": { - "self": "../Tag/51de249c-516a-4c4d-bd88-76e88274c483" + "self": "../Tag/game" } }, "tags.1": { "links": { - "self": "../Tag/631d1b5d-fcd0-465c-964e-e535fc6bb893" + "self": "../Tag/ai" } }, "license": { diff --git a/packages/catalog-realm/CardListing/79937c95-92ec-4393-acbb-b1028b78defe.json b/packages/catalog-realm/CardListing/79937c95-92ec-4393-acbb-b1028b78defe.json index add063a6a33..ce907bcf3a1 100644 --- a/packages/catalog-realm/CardListing/79937c95-92ec-4393-acbb-b1028b78defe.json +++ b/packages/catalog-realm/CardListing/79937c95-92ec-4393-acbb-b1028b78defe.json @@ -29,12 +29,12 @@ }, "tags.0": { "links": { - "self": "../Tag/51de249c-516a-4c4d-bd88-76e88274c483" + "self": "../Tag/game" } }, "tags.1": { "links": { - "self": "../Tag/631d1b5d-fcd0-465c-964e-e535fc6bb893" + "self": "../Tag/ai" } }, "license": { diff --git a/packages/catalog-realm/CardListing/8190ab54-5b6f-457b-8c87-43f09eabf757.json b/packages/catalog-realm/CardListing/8190ab54-5b6f-457b-8c87-43f09eabf757.json index 85646aab5ed..7d3857ebde0 100644 --- a/packages/catalog-realm/CardListing/8190ab54-5b6f-457b-8c87-43f09eabf757.json +++ b/packages/catalog-realm/CardListing/8190ab54-5b6f-457b-8c87-43f09eabf757.json @@ -30,7 +30,7 @@ }, "tags.0": { "links": { - "self": "../Tag/ed5a1a3f-0dbf-47b5-b2a6-d88b0d2a7642" + "self": "../Tag/official" } }, "license": { diff --git a/packages/catalog-realm/CardListing/9b84fcb0-80f4-456e-9fb3-e9abd0ec3fcb.json b/packages/catalog-realm/CardListing/9b84fcb0-80f4-456e-9fb3-e9abd0ec3fcb.json index 709398895a4..a0a347330e2 100644 --- a/packages/catalog-realm/CardListing/9b84fcb0-80f4-456e-9fb3-e9abd0ec3fcb.json +++ b/packages/catalog-realm/CardListing/9b84fcb0-80f4-456e-9fb3-e9abd0ec3fcb.json @@ -80,7 +80,7 @@ }, "categories.0": { "links": { - "self": "../Category/38b5d1dc-00d3-4a19-8998-29f0c19081de" + "self": "../Category/travel-lifestyle" } }, "categories.1": { diff --git a/packages/catalog-realm/CardListing/9de5efec-83f7-42d3-9425-3a19e8a15fd2.json b/packages/catalog-realm/CardListing/9de5efec-83f7-42d3-9425-3a19e8a15fd2.json index eb88e46b794..ac2f13357ae 100644 --- a/packages/catalog-realm/CardListing/9de5efec-83f7-42d3-9425-3a19e8a15fd2.json +++ b/packages/catalog-realm/CardListing/9de5efec-83f7-42d3-9425-3a19e8a15fd2.json @@ -58,7 +58,7 @@ }, "categories.0": { "links": { - "self": "../Category/38b5d1dc-00d3-4a19-8998-29f0c19081de" + "self": "../Category/travel-lifestyle" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/CardListing/9ffcb030-9c5a-4d17-ace6-2ea83c6ae2d4.json b/packages/catalog-realm/CardListing/9ffcb030-9c5a-4d17-ace6-2ea83c6ae2d4.json index 618a26e619f..b4054d3b52d 100644 --- a/packages/catalog-realm/CardListing/9ffcb030-9c5a-4d17-ace6-2ea83c6ae2d4.json +++ b/packages/catalog-realm/CardListing/9ffcb030-9c5a-4d17-ace6-2ea83c6ae2d4.json @@ -29,7 +29,7 @@ }, "tags.0": { "links": { - "self": "../Tag/4d0f9ae2-048e-4ce0-b263-7006602ce6a4" + "self": "../Tag/user-contributed" } }, "license": { @@ -69,7 +69,7 @@ }, "categories.1": { "links": { - "self": "../Category/38b5d1dc-00d3-4a19-8998-29f0c19081de" + "self": "../Category/travel-lifestyle" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/CardListing/a487a65f-4356-42a1-9da0-c6e0be0166e4.json b/packages/catalog-realm/CardListing/a487a65f-4356-42a1-9da0-c6e0be0166e4.json index 662beb1cdcc..09d04dda407 100644 --- a/packages/catalog-realm/CardListing/a487a65f-4356-42a1-9da0-c6e0be0166e4.json +++ b/packages/catalog-realm/CardListing/a487a65f-4356-42a1-9da0-c6e0be0166e4.json @@ -29,7 +29,7 @@ }, "tags.0": { "links": { - "self": "../Tag/f21d95da-0728-46a8-8622-6c157716c26c" + "self": "../Tag/poster" } }, "license": { diff --git a/packages/catalog-realm/CardListing/a51b73a3-08c5-4dfd-b22a-8e66a0285801.json b/packages/catalog-realm/CardListing/a51b73a3-08c5-4dfd-b22a-8e66a0285801.json index af40bcb285b..255a41db0fa 100644 --- a/packages/catalog-realm/CardListing/a51b73a3-08c5-4dfd-b22a-8e66a0285801.json +++ b/packages/catalog-realm/CardListing/a51b73a3-08c5-4dfd-b22a-8e66a0285801.json @@ -28,7 +28,7 @@ }, "tags.0": { "links": { - "self": "../Tag/51de249c-516a-4c4d-bd88-76e88274c483" + "self": "../Tag/game" } }, "license": { diff --git a/packages/catalog-realm/CardListing/b920054b-0f48-440b-b50e-64a5a097e7a5.json b/packages/catalog-realm/CardListing/b920054b-0f48-440b-b50e-64a5a097e7a5.json index b79432ba536..8419ca10249 100644 --- a/packages/catalog-realm/CardListing/b920054b-0f48-440b-b50e-64a5a097e7a5.json +++ b/packages/catalog-realm/CardListing/b920054b-0f48-440b-b50e-64a5a097e7a5.json @@ -29,12 +29,12 @@ }, "tags.0": { "links": { - "self": "../Tag/51de249c-516a-4c4d-bd88-76e88274c483" + "self": "../Tag/game" } }, "tags.1": { "links": { - "self": "../Tag/631d1b5d-fcd0-465c-964e-e535fc6bb893" + "self": "../Tag/ai" } }, "license": { diff --git a/packages/catalog-realm/CardListing/cbe2c79b-60aa-4dca-bc13-82b610e31653.json b/packages/catalog-realm/CardListing/cbe2c79b-60aa-4dca-bc13-82b610e31653.json index 1ea8c68f286..21d5c2fc02a 100644 --- a/packages/catalog-realm/CardListing/cbe2c79b-60aa-4dca-bc13-82b610e31653.json +++ b/packages/catalog-realm/CardListing/cbe2c79b-60aa-4dca-bc13-82b610e31653.json @@ -25,7 +25,7 @@ "relationships": { "tags.0": { "links": { - "self": "../Tag/631d1b5d-fcd0-465c-964e-e535fc6bb893" + "self": "../Tag/ai" } }, "license": { diff --git a/packages/catalog-realm/CardListing/d5208656-b610-4ad5-81f8-cbd7d512493a.json b/packages/catalog-realm/CardListing/d5208656-b610-4ad5-81f8-cbd7d512493a.json index 55b04f5465e..aeb017d011c 100644 --- a/packages/catalog-realm/CardListing/d5208656-b610-4ad5-81f8-cbd7d512493a.json +++ b/packages/catalog-realm/CardListing/d5208656-b610-4ad5-81f8-cbd7d512493a.json @@ -30,12 +30,12 @@ }, "tags.0": { "links": { - "self": "../Tag/4d0f9ae2-048e-4ce0-b263-7006602ce6a4" + "self": "../Tag/user-contributed" } }, "tags.1": { "links": { - "self": "../Tag/ed5a1a3f-0dbf-47b5-b2a6-d88b0d2a7642" + "self": "../Tag/official" } }, "license": { diff --git a/packages/catalog-realm/CardListing/daily-report-dashboard.json b/packages/catalog-realm/CardListing/daily-report-dashboard.json index 90cfd648bb4..fa7a913b0e5 100644 --- a/packages/catalog-realm/CardListing/daily-report-dashboard.json +++ b/packages/catalog-realm/CardListing/daily-report-dashboard.json @@ -23,12 +23,12 @@ "relationships": { "tags.0": { "links": { - "self": "../Tag/140feda8-625b-4a24-9ddb-6f4da891aef2" + "self": "../Tag/bundled" } }, "tags.1": { "links": { - "self": "../Tag/631d1b5d-fcd0-465c-964e-e535fc6bb893" + "self": "../Tag/ai" } }, "license": { diff --git a/packages/catalog-realm/CardListing/e7fe0e9a-f6ce-40f7-bf63-02157530cae1.json b/packages/catalog-realm/CardListing/e7fe0e9a-f6ce-40f7-bf63-02157530cae1.json index eb24ebd3524..9657f30afeb 100644 --- a/packages/catalog-realm/CardListing/e7fe0e9a-f6ce-40f7-bf63-02157530cae1.json +++ b/packages/catalog-realm/CardListing/e7fe0e9a-f6ce-40f7-bf63-02157530cae1.json @@ -28,7 +28,7 @@ }, "tags.0": { "links": { - "self": "../Tag/4d0f9ae2-048e-4ce0-b263-7006602ce6a4" + "self": "../Tag/user-contributed" } }, "license": { @@ -68,7 +68,7 @@ }, "categories.1": { "links": { - "self": "../Category/38b5d1dc-00d3-4a19-8998-29f0c19081de" + "self": "../Category/travel-lifestyle" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/CardListing/ef22ef9b-d7f6-4593-8bec-e2cc283103ec.json b/packages/catalog-realm/CardListing/ef22ef9b-d7f6-4593-8bec-e2cc283103ec.json index b1b8a1b5f85..c30160cbae5 100644 --- a/packages/catalog-realm/CardListing/ef22ef9b-d7f6-4593-8bec-e2cc283103ec.json +++ b/packages/catalog-realm/CardListing/ef22ef9b-d7f6-4593-8bec-e2cc283103ec.json @@ -30,7 +30,7 @@ }, "tags.0": { "links": { - "self": "../Tag/140feda8-625b-4a24-9ddb-6f4da891aef2" + "self": "../Tag/bundled" } }, "license": { diff --git a/packages/catalog-realm/CardListing/f0277f2a-26af-4e25-8222-6d6492bc08f6.json b/packages/catalog-realm/CardListing/f0277f2a-26af-4e25-8222-6d6492bc08f6.json index a68ff1c620f..af98f59bbc2 100644 --- a/packages/catalog-realm/CardListing/f0277f2a-26af-4e25-8222-6d6492bc08f6.json +++ b/packages/catalog-realm/CardListing/f0277f2a-26af-4e25-8222-6d6492bc08f6.json @@ -29,12 +29,12 @@ }, "tags.0": { "links": { - "self": "../Tag/ed5a1a3f-0dbf-47b5-b2a6-d88b0d2a7642" + "self": "../Tag/official" } }, "tags.1": { "links": { - "self": "../Tag/631d1b5d-fcd0-465c-964e-e535fc6bb893" + "self": "../Tag/ai" } }, "license": { diff --git a/packages/catalog-realm/CardListing/f0c0ad91-0194-46b9-a971-9e60d637a51a.json b/packages/catalog-realm/CardListing/f0c0ad91-0194-46b9-a971-9e60d637a51a.json index eef8f2f8794..62f6a87732d 100644 --- a/packages/catalog-realm/CardListing/f0c0ad91-0194-46b9-a971-9e60d637a51a.json +++ b/packages/catalog-realm/CardListing/f0c0ad91-0194-46b9-a971-9e60d637a51a.json @@ -29,7 +29,7 @@ }, "tags.0": { "links": { - "self": "../Tag/140feda8-625b-4a24-9ddb-6f4da891aef2" + "self": "../Tag/bundled" } }, "license": { diff --git a/packages/catalog-realm/Category/accounting-finance.json b/packages/catalog-realm/Category/accounting-finance.json index e89902e12e8..6e6713c39b3 100644 --- a/packages/catalog-realm/Category/accounting-finance.json +++ b/packages/catalog-realm/Category/accounting-finance.json @@ -11,7 +11,7 @@ "name": "Accounting & Finance", "cardInfo": { "notes": null, - "name": null, + "name": "Accounting & Finance", "summary": "Financial management, bookkeeping, budgeting, invoicing, tax preparation, audit reports, and financial planning tools.", "cardThumbnailURL": null } @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/20dcc8f6-891d-4570-a0c0-1e07b14c97ee" + "self": "../Sphere/work" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/adventure-outdoor-activities.json b/packages/catalog-realm/Category/adventure-outdoor-activities.json index 6404fdd8920..218b847599c 100644 --- a/packages/catalog-realm/Category/adventure-outdoor-activities.json +++ b/packages/catalog-realm/Category/adventure-outdoor-activities.json @@ -11,7 +11,7 @@ "name": "Adventure & Outdoor Activities", "cardInfo": { "notes": null, - "name": null, + "name": "Adventure & Outdoor Activities", "summary": "Outdoor adventures, nature exploration, camping trips, hiking expeditions, extreme sports, and outdoor equipment management.", "cardThumbnailURL": null } @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/c8f6891d-9570-40c0-9e07-b14c97eedb48" + "self": "../Sphere/play" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/ai-automation.json b/packages/catalog-realm/Category/ai-automation.json index aff930d1e38..de6195b021a 100644 --- a/packages/catalog-realm/Category/ai-automation.json +++ b/packages/catalog-realm/Category/ai-automation.json @@ -11,7 +11,7 @@ "name": "AI & Automation", "cardInfo": { "notes": null, - "name": null, + "name": "AI & Automation", "summary": "Artificial intelligence projects, automation scripts, machine learning workflows, and intelligent system development.", "cardThumbnailURL": null } @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/637767ff-c7a9-40d6-9cd3-93f0b32a8fbb" + "self": "../Sphere/build" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/analytics-reporting.json b/packages/catalog-realm/Category/analytics-reporting.json index a178452fd9f..2d7b91c7057 100644 --- a/packages/catalog-realm/Category/analytics-reporting.json +++ b/packages/catalog-realm/Category/analytics-reporting.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/20dcc8f6-891d-4570-a0c0-1e07b14c97ee" + "self": "../Sphere/work" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/api-integration.json b/packages/catalog-realm/Category/api-integration.json index c9c022b14ca..7cbed998af7 100644 --- a/packages/catalog-realm/Category/api-integration.json +++ b/packages/catalog-realm/Category/api-integration.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/637767ff-c7a9-40d6-9cd3-93f0b32a8fbb" + "self": "../Sphere/build" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/business-development.json b/packages/catalog-realm/Category/business-development.json index dfc2f4c517f..f7c29706c63 100644 --- a/packages/catalog-realm/Category/business-development.json +++ b/packages/catalog-realm/Category/business-development.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/20dcc8f6-891d-4570-a0c0-1e07b14c97ee" + "self": "../Sphere/work" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/career-development.json b/packages/catalog-realm/Category/career-development.json index 6fc366078fd..2d8ab3a3676 100644 --- a/packages/catalog-realm/Category/career-development.json +++ b/packages/catalog-realm/Category/career-development.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/67ffc7a9-70d6-4cd3-93f0-b32a8fbbd34e" + "self": "../Sphere/learn" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/certifications-training.json b/packages/catalog-realm/Category/certifications-training.json index f982bfdbfba..141adeec481 100644 --- a/packages/catalog-realm/Category/certifications-training.json +++ b/packages/catalog-realm/Category/certifications-training.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/67ffc7a9-70d6-4cd3-93f0-b32a8fbbd34e" + "self": "../Sphere/learn" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/communication.json b/packages/catalog-realm/Category/communication.json new file mode 100644 index 00000000000..474c34fd3ef --- /dev/null +++ b/packages/catalog-realm/Category/communication.json @@ -0,0 +1,32 @@ +{ + "data": { + "meta": { + "adoptsFrom": { + "name": "Category", + "module": "../catalog-app/listing/category" + } + }, + "type": "card", + "attributes": { + "name": "Communication", + "cardInfo": { + "name": "Communication", + "notes": null, + "summary": "Email management, messaging, chat apps, notifications, team collaboration, and communication workflow tools.", + "cardThumbnailURL": null + } + }, + "relationships": { + "sphere": { + "links": { + "self": "../Sphere/work" + } + }, + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} \ No newline at end of file diff --git a/packages/catalog-realm/Category/content-creation.json b/packages/catalog-realm/Category/content-creation.json index 13c62bd2cf5..bf52124c2b9 100644 --- a/packages/catalog-realm/Category/content-creation.json +++ b/packages/catalog-realm/Category/content-creation.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/c8f6891d-9570-40c0-9e07-b14c97eedb48" + "self": "../Sphere/play" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/creative-projects.json b/packages/catalog-realm/Category/creative-projects.json index c2f3ba850df..125dfba2998 100644 --- a/packages/catalog-realm/Category/creative-projects.json +++ b/packages/catalog-realm/Category/creative-projects.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/c8f6891d-9570-40c0-9e07-b14c97eedb48" + "self": "../Sphere/play" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/customer-support.json b/packages/catalog-realm/Category/customer-support.json index 263df2966dd..16b6aa24ca4 100644 --- a/packages/catalog-realm/Category/customer-support.json +++ b/packages/catalog-realm/Category/customer-support.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/20dcc8f6-891d-4570-a0c0-1e07b14c97ee" + "self": "../Sphere/work" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/data-analytics.json b/packages/catalog-realm/Category/data-analytics.json index 6a429321174..872e18fa3c5 100644 --- a/packages/catalog-realm/Category/data-analytics.json +++ b/packages/catalog-realm/Category/data-analytics.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/637767ff-c7a9-40d6-9cd3-93f0b32a8fbb" + "self": "../Sphere/build" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/data-engineering.json b/packages/catalog-realm/Category/data-engineering.json index 5764be1b152..f1bb06a18b3 100644 --- a/packages/catalog-realm/Category/data-engineering.json +++ b/packages/catalog-realm/Category/data-engineering.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/637767ff-c7a9-40d6-9cd3-93f0b32a8fbb" + "self": "../Sphere/build" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/data-management.json b/packages/catalog-realm/Category/data-management.json index abbf2603272..4b5d0999d8a 100644 --- a/packages/catalog-realm/Category/data-management.json +++ b/packages/catalog-realm/Category/data-management.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/637767ff-c7a9-40d6-9cd3-93f0b32a8fbb" + "self": "../Sphere/build" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/design-creative.json b/packages/catalog-realm/Category/design-creative.json index b798063f979..dd51bfde161 100644 --- a/packages/catalog-realm/Category/design-creative.json +++ b/packages/catalog-realm/Category/design-creative.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/637767ff-c7a9-40d6-9cd3-93f0b32a8fbb" + "self": "../Sphere/build" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/developer-tools-code.json b/packages/catalog-realm/Category/developer-tools-code.json index 43e76ef9e22..ffa9ea3f533 100644 --- a/packages/catalog-realm/Category/developer-tools-code.json +++ b/packages/catalog-realm/Category/developer-tools-code.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/637767ff-c7a9-40d6-9cd3-93f0b32a8fbb" + "self": "../Sphere/build" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/devops-infrastructure.json b/packages/catalog-realm/Category/devops-infrastructure.json index a992bf19bdc..c3d44017e92 100644 --- a/packages/catalog-realm/Category/devops-infrastructure.json +++ b/packages/catalog-realm/Category/devops-infrastructure.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/637767ff-c7a9-40d6-9cd3-93f0b32a8fbb" + "self": "../Sphere/build" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/e-commerce-online-sales.json b/packages/catalog-realm/Category/e-commerce-online-sales.json index 3bc7e5d44cd..94488189896 100644 --- a/packages/catalog-realm/Category/e-commerce-online-sales.json +++ b/packages/catalog-realm/Category/e-commerce-online-sales.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/20dcc8f6-891d-4570-a0c0-1e07b14c97ee" + "self": "../Sphere/work" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/education-courses.json b/packages/catalog-realm/Category/education-courses.json index 6765d38bfb0..0ef8e97a7d8 100644 --- a/packages/catalog-realm/Category/education-courses.json +++ b/packages/catalog-realm/Category/education-courses.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/67ffc7a9-70d6-4cd3-93f0-b32a8fbbd34e" + "self": "../Sphere/learn" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/entertainment-media.json b/packages/catalog-realm/Category/entertainment-media.json index d19f4045f6d..4a9b77cd2ec 100644 --- a/packages/catalog-realm/Category/entertainment-media.json +++ b/packages/catalog-realm/Category/entertainment-media.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/c8f6891d-9570-40c0-9e07-b14c97eedb48" + "self": "../Sphere/play" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/events-celebrations.json b/packages/catalog-realm/Category/events-celebrations.json index c7ed03b0b9b..e7110fba8b4 100644 --- a/packages/catalog-realm/Category/events-celebrations.json +++ b/packages/catalog-realm/Category/events-celebrations.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/5d7420dc-c8f6-491d-9570-60c01e07b14c" + "self": "../Sphere/life" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/family-relationships.json b/packages/catalog-realm/Category/family-relationships.json index 74c436d71b7..7f47497cdeb 100644 --- a/packages/catalog-realm/Category/family-relationships.json +++ b/packages/catalog-realm/Category/family-relationships.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/5d7420dc-c8f6-491d-9570-60c01e07b14c" + "self": "../Sphere/life" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/food-cooking.json b/packages/catalog-realm/Category/food-cooking.json new file mode 100644 index 00000000000..3c0a3561bac --- /dev/null +++ b/packages/catalog-realm/Category/food-cooking.json @@ -0,0 +1,32 @@ +{ + "data": { + "meta": { + "adoptsFrom": { + "name": "Category", + "module": "../catalog-app/listing/category" + } + }, + "type": "card", + "attributes": { + "name": "Food & Cooking", + "cardInfo": { + "name": "Food & Cooking", + "notes": null, + "summary": "Recipes, meal planning, grocery lists, restaurant tracking, cooking guides, nutrition tracking, and food discovery.", + "cardThumbnailURL": null + } + }, + "relationships": { + "sphere": { + "links": { + "self": "../Sphere/life" + } + }, + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} \ No newline at end of file diff --git a/packages/catalog-realm/Category/gaming.json b/packages/catalog-realm/Category/gaming.json new file mode 100644 index 00000000000..de84081e206 --- /dev/null +++ b/packages/catalog-realm/Category/gaming.json @@ -0,0 +1,32 @@ +{ + "data": { + "meta": { + "adoptsFrom": { + "name": "Category", + "module": "../catalog-app/listing/category" + } + }, + "type": "card", + "attributes": { + "name": "Gaming", + "cardInfo": { + "name": "Gaming", + "notes": null, + "summary": "Game trackers, scoreboards, walkthroughs, gaming communities, achievement logs, and game collection management.", + "cardThumbnailURL": null + } + }, + "relationships": { + "sphere": { + "links": { + "self": "../Sphere/play" + } + }, + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} \ No newline at end of file diff --git a/packages/catalog-realm/Category/goals-habits.json b/packages/catalog-realm/Category/goals-habits.json index 4ee4ddd68da..1835c3153e1 100644 --- a/packages/catalog-realm/Category/goals-habits.json +++ b/packages/catalog-realm/Category/goals-habits.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/5d7420dc-c8f6-491d-9570-60c01e07b14c" + "self": "../Sphere/life" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/hardware-iot.json b/packages/catalog-realm/Category/hardware-iot.json index 0e820c659c5..91286d44821 100644 --- a/packages/catalog-realm/Category/hardware-iot.json +++ b/packages/catalog-realm/Category/hardware-iot.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/637767ff-c7a9-40d6-9cd3-93f0b32a8fbb" + "self": "../Sphere/build" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/health-wellness.json b/packages/catalog-realm/Category/health-wellness.json index c2ebe1d9165..c62d5b96f40 100644 --- a/packages/catalog-realm/Category/health-wellness.json +++ b/packages/catalog-realm/Category/health-wellness.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/5d7420dc-c8f6-491d-9570-60c01e07b14c" + "self": "../Sphere/life" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/hobbies-crafts.json b/packages/catalog-realm/Category/hobbies-crafts.json index f306e00e783..89be52040f0 100644 --- a/packages/catalog-realm/Category/hobbies-crafts.json +++ b/packages/catalog-realm/Category/hobbies-crafts.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/c8f6891d-9570-40c0-9e07-b14c97eedb48" + "self": "../Sphere/play" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/home-living.json b/packages/catalog-realm/Category/home-living.json index 143b688506f..e88dc77ceb8 100644 --- a/packages/catalog-realm/Category/home-living.json +++ b/packages/catalog-realm/Category/home-living.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/5d7420dc-c8f6-491d-9570-60c01e07b14c" + "self": "../Sphere/life" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/hr-people-management.json b/packages/catalog-realm/Category/hr-people-management.json index 0f689a156bb..e6534ff6956 100644 --- a/packages/catalog-realm/Category/hr-people-management.json +++ b/packages/catalog-realm/Category/hr-people-management.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/20dcc8f6-891d-4570-a0c0-1e07b14c97ee" + "self": "../Sphere/work" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/knowledge-management.json b/packages/catalog-realm/Category/knowledge-management.json index 46ac4f0878c..e41297e789f 100644 --- a/packages/catalog-realm/Category/knowledge-management.json +++ b/packages/catalog-realm/Category/knowledge-management.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/67ffc7a9-70d6-4cd3-93f0-b32a8fbbd34e" + "self": "../Sphere/learn" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/language-learning.json b/packages/catalog-realm/Category/language-learning.json index f5f47594dcb..636271ac801 100644 --- a/packages/catalog-realm/Category/language-learning.json +++ b/packages/catalog-realm/Category/language-learning.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/67ffc7a9-70d6-4cd3-93f0-b32a8fbbd34e" + "self": "../Sphere/learn" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/legal-compliance.json b/packages/catalog-realm/Category/legal-compliance.json index 10bc329003c..abbc3a209e2 100644 --- a/packages/catalog-realm/Category/legal-compliance.json +++ b/packages/catalog-realm/Category/legal-compliance.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/20dcc8f6-891d-4570-a0c0-1e07b14c97ee" + "self": "../Sphere/work" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/maps-navigation.json b/packages/catalog-realm/Category/maps-navigation.json new file mode 100644 index 00000000000..4f7dd041066 --- /dev/null +++ b/packages/catalog-realm/Category/maps-navigation.json @@ -0,0 +1,32 @@ +{ + "data": { + "meta": { + "adoptsFrom": { + "name": "Category", + "module": "../catalog-app/listing/category" + } + }, + "type": "card", + "attributes": { + "name": "Maps & Navigation", + "cardInfo": { + "name": "Maps & Navigation", + "notes": null, + "summary": "Location-based apps, route planning, geo-tracking, place discovery, address management, and mapping tools.", + "cardThumbnailURL": null + } + }, + "relationships": { + "sphere": { + "links": { + "self": "../Sphere/life" + } + }, + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} \ No newline at end of file diff --git a/packages/catalog-realm/Category/marketing-growth.json b/packages/catalog-realm/Category/marketing-growth.json index c794070df04..f5008771343 100644 --- a/packages/catalog-realm/Category/marketing-growth.json +++ b/packages/catalog-realm/Category/marketing-growth.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/20dcc8f6-891d-4570-a0c0-1e07b14c97ee" + "self": "../Sphere/work" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/news-media.json b/packages/catalog-realm/Category/news-media.json new file mode 100644 index 00000000000..4700b32071e --- /dev/null +++ b/packages/catalog-realm/Category/news-media.json @@ -0,0 +1,32 @@ +{ + "data": { + "meta": { + "adoptsFrom": { + "name": "Category", + "module": "../catalog-app/listing/category" + } + }, + "type": "card", + "attributes": { + "name": "News & Media", + "cardInfo": { + "name": "News & Media", + "notes": null, + "summary": "News readers, RSS feeds, media trackers, journalism tools, newsletters, podcasts, and broadcast management.", + "cardThumbnailURL": null + } + }, + "relationships": { + "sphere": { + "links": { + "self": "../Sphere/life" + } + }, + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} \ No newline at end of file diff --git a/packages/catalog-realm/Category/operations-supply-chain.json b/packages/catalog-realm/Category/operations-supply-chain.json index 1c2ae80f165..2a5a22db55d 100644 --- a/packages/catalog-realm/Category/operations-supply-chain.json +++ b/packages/catalog-realm/Category/operations-supply-chain.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/20dcc8f6-891d-4570-a0c0-1e07b14c97ee" + "self": "../Sphere/work" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/parties-celebrations.json b/packages/catalog-realm/Category/parties-celebrations.json index 572133161b9..15720902e72 100644 --- a/packages/catalog-realm/Category/parties-celebrations.json +++ b/packages/catalog-realm/Category/parties-celebrations.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/c8f6891d-9570-40c0-9e07-b14c97eedb48" + "self": "../Sphere/play" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/personal-finance.json b/packages/catalog-realm/Category/personal-finance.json index 0de1df8c934..011b1ad9258 100644 --- a/packages/catalog-realm/Category/personal-finance.json +++ b/packages/catalog-realm/Category/personal-finance.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/5d7420dc-c8f6-491d-9570-60c01e07b14c" + "self": "../Sphere/life" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/product-catalogs.json b/packages/catalog-realm/Category/product-catalogs.json index 238cc7406c4..fdd1ae98521 100644 --- a/packages/catalog-realm/Category/product-catalogs.json +++ b/packages/catalog-realm/Category/product-catalogs.json @@ -11,15 +11,15 @@ "name": "Product Catalogs", "cardInfo": { "notes": null, - "name": null, - "summary": null, + "name": "Product Catalogs", + "summary": "Product listings, inventory catalogs, digital product stores, merchandise catalogs, and product collection management.", "cardThumbnailURL": null } }, "relationships": { "sphere": { "links": { - "self": "../Sphere/20dcc8f6-891d-4570-a0c0-1e07b14c97ee" + "self": "../Sphere/work" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/professional-services.json b/packages/catalog-realm/Category/professional-services.json index 20b262120fc..a919446bb7d 100644 --- a/packages/catalog-realm/Category/professional-services.json +++ b/packages/catalog-realm/Category/professional-services.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/20dcc8f6-891d-4570-a0c0-1e07b14c97ee" + "self": "../Sphere/work" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/project-management.json b/packages/catalog-realm/Category/project-management.json index ad2affd2f3b..af917fedb50 100644 --- a/packages/catalog-realm/Category/project-management.json +++ b/packages/catalog-realm/Category/project-management.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/20dcc8f6-891d-4570-a0c0-1e07b14c97ee" + "self": "../Sphere/work" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/prototyping-experiments.json b/packages/catalog-realm/Category/prototyping-experiments.json index d40cbd0e6d3..0064e2490d8 100644 --- a/packages/catalog-realm/Category/prototyping-experiments.json +++ b/packages/catalog-realm/Category/prototyping-experiments.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/637767ff-c7a9-40d6-9cd3-93f0b32a8fbb" + "self": "../Sphere/build" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/quality-assurance.json b/packages/catalog-realm/Category/quality-assurance.json index ed8f6ef68a1..f848696e364 100644 --- a/packages/catalog-realm/Category/quality-assurance.json +++ b/packages/catalog-realm/Category/quality-assurance.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/20dcc8f6-891d-4570-a0c0-1e07b14c97ee" + "self": "../Sphere/work" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/reading-literature.json b/packages/catalog-realm/Category/reading-literature.json index 990058fdc74..2cceffd828e 100644 --- a/packages/catalog-realm/Category/reading-literature.json +++ b/packages/catalog-realm/Category/reading-literature.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/67ffc7a9-70d6-4cd3-93f0-b32a8fbbd34e" + "self": "../Sphere/learn" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/real-estate-property.json b/packages/catalog-realm/Category/real-estate-property.json index 76c06a3a165..74fed7c5e80 100644 --- a/packages/catalog-realm/Category/real-estate-property.json +++ b/packages/catalog-realm/Category/real-estate-property.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/20dcc8f6-891d-4570-a0c0-1e07b14c97ee" + "self": "../Sphere/work" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/research-knowledge.json b/packages/catalog-realm/Category/research-knowledge.json index ab464aa7e2c..eb0b955a18f 100644 --- a/packages/catalog-realm/Category/research-knowledge.json +++ b/packages/catalog-realm/Category/research-knowledge.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/67ffc7a9-70d6-4cd3-93f0-b32a8fbbd34e" + "self": "../Sphere/learn" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/science-discovery.json b/packages/catalog-realm/Category/science-discovery.json index f8f8f1770f5..a918cbd72fd 100644 --- a/packages/catalog-realm/Category/science-discovery.json +++ b/packages/catalog-realm/Category/science-discovery.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/67ffc7a9-70d6-4cd3-93f0-b32a8fbbd34e" + "self": "../Sphere/learn" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/security-privacy.json b/packages/catalog-realm/Category/security-privacy.json new file mode 100644 index 00000000000..d8fc6bdee45 --- /dev/null +++ b/packages/catalog-realm/Category/security-privacy.json @@ -0,0 +1,32 @@ +{ + "data": { + "meta": { + "adoptsFrom": { + "name": "Category", + "module": "../catalog-app/listing/category" + } + }, + "type": "card", + "attributes": { + "name": "Security & Privacy", + "cardInfo": { + "name": "Security & Privacy", + "notes": null, + "summary": "Password managers, security audits, privacy tools, access control, vulnerability tracking, and compliance checklists.", + "cardThumbnailURL": null + } + }, + "relationships": { + "sphere": { + "links": { + "self": "../Sphere/build" + } + }, + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} \ No newline at end of file diff --git a/packages/catalog-realm/Category/shopping-consumer.json b/packages/catalog-realm/Category/shopping-consumer.json index d2a0b2e2690..754bc7df76f 100644 --- a/packages/catalog-realm/Category/shopping-consumer.json +++ b/packages/catalog-realm/Category/shopping-consumer.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/5d7420dc-c8f6-491d-9570-60c01e07b14c" + "self": "../Sphere/life" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/skills-training.json b/packages/catalog-realm/Category/skills-training.json index 15589e32033..e9c86f3dc50 100644 --- a/packages/catalog-realm/Category/skills-training.json +++ b/packages/catalog-realm/Category/skills-training.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/67ffc7a9-70d6-4cd3-93f0-b32a8fbbd34e" + "self": "../Sphere/learn" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/social-networking.json b/packages/catalog-realm/Category/social-networking.json index 5cde4806496..d2187c28d20 100644 --- a/packages/catalog-realm/Category/social-networking.json +++ b/packages/catalog-realm/Category/social-networking.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/637767ff-c7a9-40d6-9cd3-93f0b32a8fbb" + "self": "../Sphere/build" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/software-development.json b/packages/catalog-realm/Category/software-development.json index 4bc317a3488..0d0f86651e2 100644 --- a/packages/catalog-realm/Category/software-development.json +++ b/packages/catalog-realm/Category/software-development.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/637767ff-c7a9-40d6-9cd3-93f0b32a8fbb" + "self": "../Sphere/build" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/sports-fitness.json b/packages/catalog-realm/Category/sports-fitness.json index d3084fd0502..058b248ba7c 100644 --- a/packages/catalog-realm/Category/sports-fitness.json +++ b/packages/catalog-realm/Category/sports-fitness.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/c8f6891d-9570-40c0-9e07-b14c97eedb48" + "self": "../Sphere/play" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/teaching-instruction.json b/packages/catalog-realm/Category/teaching-instruction.json index 6b5325a231e..de629b565e6 100644 --- a/packages/catalog-realm/Category/teaching-instruction.json +++ b/packages/catalog-realm/Category/teaching-instruction.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/67ffc7a9-70d6-4cd3-93f0-b32a8fbbd34e" + "self": "../Sphere/learn" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/technical-documentation.json b/packages/catalog-realm/Category/technical-documentation.json index 1bb88d46e12..f39a48c5ac5 100644 --- a/packages/catalog-realm/Category/technical-documentation.json +++ b/packages/catalog-realm/Category/technical-documentation.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/67ffc7a9-70d6-4cd3-93f0-b32a8fbbd34e" + "self": "../Sphere/learn" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/travel-experiences.json b/packages/catalog-realm/Category/travel-experiences.json index 85707cb878e..ac14ad6a028 100644 --- a/packages/catalog-realm/Category/travel-experiences.json +++ b/packages/catalog-realm/Category/travel-experiences.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/5d7420dc-c8f6-491d-9570-60c01e07b14c" + "self": "../Sphere/life" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/38b5d1dc-00d3-4a19-8998-29f0c19081de.json b/packages/catalog-realm/Category/travel-lifestyle.json similarity index 68% rename from packages/catalog-realm/Category/38b5d1dc-00d3-4a19-8998-29f0c19081de.json rename to packages/catalog-realm/Category/travel-lifestyle.json index 1fb1afe4c6d..4acf161b372 100644 --- a/packages/catalog-realm/Category/38b5d1dc-00d3-4a19-8998-29f0c19081de.json +++ b/packages/catalog-realm/Category/travel-lifestyle.json @@ -10,16 +10,16 @@ "attributes": { "name": "Travel and Lifestyle", "cardInfo": { - "name": null, + "name": "Travel and Lifestyle", "notes": null, - "summary": null, + "summary": "Travel planning, destination guides, cultural experiences, accommodation booking, travel itineraries, and vacation activities.", "cardThumbnailURL": null } }, "relationships": { "sphere": { "links": { - "self": "../Sphere/5d7420dc-c8f6-491d-9570-60c01e07b14c" + "self": "../Sphere/life" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/ui-components-design.json b/packages/catalog-realm/Category/ui-components-design.json index 8d615b2c255..0df5b924111 100644 --- a/packages/catalog-realm/Category/ui-components-design.json +++ b/packages/catalog-realm/Category/ui-components-design.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/637767ff-c7a9-40d6-9cd3-93f0b32a8fbb" + "self": "../Sphere/build" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/video-games-interactive.json b/packages/catalog-realm/Category/video-games-interactive.json index 97de0f0efba..99323f659a5 100644 --- a/packages/catalog-realm/Category/video-games-interactive.json +++ b/packages/catalog-realm/Category/video-games-interactive.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/c8f6891d-9570-40c0-9e07-b14c97eedb48" + "self": "../Sphere/play" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/Category/web-development.json b/packages/catalog-realm/Category/web-development.json index a9b469617bb..d13168e4b3a 100644 --- a/packages/catalog-realm/Category/web-development.json +++ b/packages/catalog-realm/Category/web-development.json @@ -19,7 +19,7 @@ "relationships": { "sphere": { "links": { - "self": "../Sphere/637767ff-c7a9-40d6-9cd3-93f0b32a8fbb" + "self": "../Sphere/build" } }, "cardInfo.theme": { diff --git a/packages/catalog-realm/FieldListing/fb9494c4-0d61-4d2d-a6c0-7b16ca40b42b.json b/packages/catalog-realm/FieldListing/fb9494c4-0d61-4d2d-a6c0-7b16ca40b42b.json index b051a9e6247..c19ea85f062 100644 --- a/packages/catalog-realm/FieldListing/fb9494c4-0d61-4d2d-a6c0-7b16ca40b42b.json +++ b/packages/catalog-realm/FieldListing/fb9494c4-0d61-4d2d-a6c0-7b16ca40b42b.json @@ -29,7 +29,7 @@ }, "tags.0": { "links": { - "self": "../Tag/ed5a1a3f-0dbf-47b5-b2a6-d88b0d2a7642" + "self": "../Tag/official" } }, "license": { diff --git a/packages/catalog-realm/FieldListing/geo-point.json b/packages/catalog-realm/FieldListing/geo-point.json index aebe62c7a4d..7766d037e50 100644 --- a/packages/catalog-realm/FieldListing/geo-point.json +++ b/packages/catalog-realm/FieldListing/geo-point.json @@ -59,7 +59,7 @@ }, "categories.0": { "links": { - "self": "../Category/38b5d1dc-00d3-4a19-8998-29f0c19081de" + "self": "../Category/travel-lifestyle" } }, "categories.1": { diff --git a/packages/catalog-realm/FieldListing/geo-search-point.json b/packages/catalog-realm/FieldListing/geo-search-point.json index 70b4f8d5778..ed1a0ba959b 100644 --- a/packages/catalog-realm/FieldListing/geo-search-point.json +++ b/packages/catalog-realm/FieldListing/geo-search-point.json @@ -73,7 +73,7 @@ }, "categories.1": { "links": { - "self": "../Category/38b5d1dc-00d3-4a19-8998-29f0c19081de" + "self": "../Category/travel-lifestyle" } }, "categories.2": { diff --git a/packages/catalog-realm/SkillListing/cursor-coding.json b/packages/catalog-realm/SkillListing/cursor-coding.json index 38016d61023..1bc08819510 100644 --- a/packages/catalog-realm/SkillListing/cursor-coding.json +++ b/packages/catalog-realm/SkillListing/cursor-coding.json @@ -28,12 +28,12 @@ }, "tags.0": { "links": { - "self": "../Tag/631d1b5d-fcd0-465c-964e-e535fc6bb893" + "self": "../Tag/ai" } }, "tags.1": { "links": { - "self": "../Tag/ed5a1a3f-0dbf-47b5-b2a6-d88b0d2a7642" + "self": "../Tag/official" } }, "license": { diff --git a/packages/catalog-realm/SkillListing/talk-like-a-pirate.json b/packages/catalog-realm/SkillListing/talk-like-a-pirate.json index c02c6ff7ada..e550bd0eea7 100644 --- a/packages/catalog-realm/SkillListing/talk-like-a-pirate.json +++ b/packages/catalog-realm/SkillListing/talk-like-a-pirate.json @@ -28,12 +28,12 @@ }, "tags.0": { "links": { - "self": "../Tag/631d1b5d-fcd0-465c-964e-e535fc6bb893" + "self": "../Tag/ai" } }, "tags.1": { "links": { - "self": "../Tag/ed5a1a3f-0dbf-47b5-b2a6-d88b0d2a7642" + "self": "../Tag/official" } }, "license": { diff --git a/packages/catalog-realm/Sphere/637767ff-c7a9-40d6-9cd3-93f0b32a8fbb.json b/packages/catalog-realm/Sphere/build.json similarity index 100% rename from packages/catalog-realm/Sphere/637767ff-c7a9-40d6-9cd3-93f0b32a8fbb.json rename to packages/catalog-realm/Sphere/build.json diff --git a/packages/catalog-realm/Sphere/67ffc7a9-70d6-4cd3-93f0-b32a8fbbd34e.json b/packages/catalog-realm/Sphere/learn.json similarity index 100% rename from packages/catalog-realm/Sphere/67ffc7a9-70d6-4cd3-93f0-b32a8fbbd34e.json rename to packages/catalog-realm/Sphere/learn.json diff --git a/packages/catalog-realm/Sphere/5d7420dc-c8f6-491d-9570-60c01e07b14c.json b/packages/catalog-realm/Sphere/life.json similarity index 100% rename from packages/catalog-realm/Sphere/5d7420dc-c8f6-491d-9570-60c01e07b14c.json rename to packages/catalog-realm/Sphere/life.json diff --git a/packages/catalog-realm/Sphere/c8f6891d-9570-40c0-9e07-b14c97eedb48.json b/packages/catalog-realm/Sphere/play.json similarity index 100% rename from packages/catalog-realm/Sphere/c8f6891d-9570-40c0-9e07-b14c97eedb48.json rename to packages/catalog-realm/Sphere/play.json diff --git a/packages/catalog-realm/Sphere/20dcc8f6-891d-4570-a0c0-1e07b14c97ee.json b/packages/catalog-realm/Sphere/work.json similarity index 100% rename from packages/catalog-realm/Sphere/20dcc8f6-891d-4570-a0c0-1e07b14c97ee.json rename to packages/catalog-realm/Sphere/work.json diff --git a/packages/catalog-realm/Tag/631d1b5d-fcd0-465c-964e-e535fc6bb893.json b/packages/catalog-realm/Tag/ai.json similarity index 89% rename from packages/catalog-realm/Tag/631d1b5d-fcd0-465c-964e-e535fc6bb893.json rename to packages/catalog-realm/Tag/ai.json index 159488e985a..95c7f24e72a 100644 --- a/packages/catalog-realm/Tag/631d1b5d-fcd0-465c-964e-e535fc6bb893.json +++ b/packages/catalog-realm/Tag/ai.json @@ -2,11 +2,11 @@ "data": { "type": "card", "attributes": { - "name": "Ai", - "color": "#6638ff", + "name": "AI", + "color": "#F97316", "cardInfo": { "notes": null, - "name": null, + "name": "AI", "summary": "Cards and apps that use artificial intelligence or machine learning, including LLM-powered features, smart automation, and AI-assisted workflows.", "cardThumbnailURL": null } diff --git a/packages/catalog-realm/Tag/app.json b/packages/catalog-realm/Tag/app.json new file mode 100644 index 00000000000..153eb008eff --- /dev/null +++ b/packages/catalog-realm/Tag/app.json @@ -0,0 +1,28 @@ +{ + "data": { + "type": "card", + "attributes": { + "name": "App", + "color": "#10B981", + "cardInfo": { + "notes": null, + "name": "App", + "summary": "Full applications such as news readers, todo apps, CRMs, and other multi-feature tools.", + "cardThumbnailURL": null + } + }, + "meta": { + "adoptsFrom": { + "module": "../catalog-app/listing/tag", + "name": "Tag" + } + }, + "relationships": { + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} diff --git a/packages/catalog-realm/Tag/140feda8-625b-4a24-9ddb-6f4da891aef2.json b/packages/catalog-realm/Tag/bundled.json similarity index 91% rename from packages/catalog-realm/Tag/140feda8-625b-4a24-9ddb-6f4da891aef2.json rename to packages/catalog-realm/Tag/bundled.json index 1b4d748440f..a463fe780d7 100644 --- a/packages/catalog-realm/Tag/140feda8-625b-4a24-9ddb-6f4da891aef2.json +++ b/packages/catalog-realm/Tag/bundled.json @@ -3,10 +3,10 @@ "type": "card", "attributes": { "name": "Bundled", - "color": "#0069f9", + "color": "#F97316", "cardInfo": { "notes": null, - "name": null, + "name": "Bundled", "summary": "Cards or apps that are packaged together as a curated set, combining multiple related components into a single installable bundle.", "cardThumbnailURL": null } diff --git a/packages/catalog-realm/Tag/c1fe433a-b3df-41f4-bdcf-d98686ee42d7.json b/packages/catalog-realm/Tag/calculator.json similarity index 90% rename from packages/catalog-realm/Tag/c1fe433a-b3df-41f4-bdcf-d98686ee42d7.json rename to packages/catalog-realm/Tag/calculator.json index 188c378b13c..58740d3a955 100644 --- a/packages/catalog-realm/Tag/c1fe433a-b3df-41f4-bdcf-d98686ee42d7.json +++ b/packages/catalog-realm/Tag/calculator.json @@ -3,10 +3,10 @@ "type": "card", "attributes": { "name": "Calculator", - "color": "#00ebe5", + "color": "#10B981", "cardInfo": { "notes": null, - "name": null, + "name": "Calculator", "summary": "Cards that perform numerical computations, financial calculations, unit conversions, or any form of formula-driven data processing.", "cardThumbnailURL": null } @@ -25,4 +25,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/catalog-realm/Tag/card.json b/packages/catalog-realm/Tag/card.json new file mode 100644 index 00000000000..575d2d9bee9 --- /dev/null +++ b/packages/catalog-realm/Tag/card.json @@ -0,0 +1,28 @@ +{ + "data": { + "type": "card", + "attributes": { + "name": "Card", + "color": "#10B981", + "cardInfo": { + "notes": null, + "name": "Card", + "summary": "Simple single-purpose cards that display or capture one focused piece of information.", + "cardThumbnailURL": null + } + }, + "meta": { + "adoptsFrom": { + "module": "../catalog-app/listing/tag", + "name": "Tag" + } + }, + "relationships": { + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} diff --git a/packages/catalog-realm/Tag/community.json b/packages/catalog-realm/Tag/community.json new file mode 100644 index 00000000000..de389bb6c37 --- /dev/null +++ b/packages/catalog-realm/Tag/community.json @@ -0,0 +1,28 @@ +{ + "data": { + "type": "card", + "attributes": { + "name": "Community", + "color": "#F97316", + "cardInfo": { + "notes": null, + "name": "Community", + "summary": "Created and shared by the community. A friendly complement to the user-contributed tag.", + "cardThumbnailURL": null + } + }, + "meta": { + "adoptsFrom": { + "module": "../catalog-app/listing/tag", + "name": "Tag" + } + }, + "relationships": { + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} diff --git a/packages/catalog-realm/Tag/dashboard.json b/packages/catalog-realm/Tag/dashboard.json new file mode 100644 index 00000000000..031bb385837 --- /dev/null +++ b/packages/catalog-realm/Tag/dashboard.json @@ -0,0 +1,28 @@ +{ + "data": { + "type": "card", + "attributes": { + "name": "Dashboard", + "color": "#10B981", + "cardInfo": { + "notes": null, + "name": "Dashboard", + "summary": "Data overview and analytics views that summarise key metrics at a glance.", + "cardThumbnailURL": null + } + }, + "meta": { + "adoptsFrom": { + "module": "../catalog-app/listing/tag", + "name": "Tag" + } + }, + "relationships": { + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} diff --git a/packages/catalog-realm/Tag/featured.json b/packages/catalog-realm/Tag/featured.json new file mode 100644 index 00000000000..c233a077265 --- /dev/null +++ b/packages/catalog-realm/Tag/featured.json @@ -0,0 +1,28 @@ +{ + "data": { + "type": "card", + "attributes": { + "name": "Featured", + "color": "#F97316", + "cardInfo": { + "notes": null, + "name": "Featured", + "summary": "Curated and highlighted listings selected by the catalog team as top picks.", + "cardThumbnailURL": null + } + }, + "meta": { + "adoptsFrom": { + "module": "../catalog-app/listing/tag", + "name": "Tag" + } + }, + "relationships": { + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} diff --git a/packages/catalog-realm/Tag/form.json b/packages/catalog-realm/Tag/form.json new file mode 100644 index 00000000000..0bd7080bef9 --- /dev/null +++ b/packages/catalog-realm/Tag/form.json @@ -0,0 +1,28 @@ +{ + "data": { + "type": "card", + "attributes": { + "name": "Form", + "color": "#10B981", + "cardInfo": { + "notes": null, + "name": "Form", + "summary": "Data entry forms, surveys, intake forms, and structured input collection cards.", + "cardThumbnailURL": null + } + }, + "meta": { + "adoptsFrom": { + "module": "../catalog-app/listing/tag", + "name": "Tag" + } + }, + "relationships": { + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} diff --git a/packages/catalog-realm/Tag/51de249c-516a-4c4d-bd88-76e88274c483.json b/packages/catalog-realm/Tag/game.json similarity index 91% rename from packages/catalog-realm/Tag/51de249c-516a-4c4d-bd88-76e88274c483.json rename to packages/catalog-realm/Tag/game.json index 0dbd1a6918c..c8175d57a16 100644 --- a/packages/catalog-realm/Tag/51de249c-516a-4c4d-bd88-76e88274c483.json +++ b/packages/catalog-realm/Tag/game.json @@ -3,10 +3,10 @@ "type": "card", "attributes": { "name": "Game", - "color": "#37eb77", + "color": "#10B981", "cardInfo": { "notes": null, - "name": null, + "name": "Game", "summary": "Cards and apps for gaming, game tracking, scoreboards, turn management, or any interactive game-related experience.", "cardThumbnailURL": null } diff --git a/packages/catalog-realm/Tag/general.json b/packages/catalog-realm/Tag/general.json new file mode 100644 index 00000000000..e37b69e1a65 --- /dev/null +++ b/packages/catalog-realm/Tag/general.json @@ -0,0 +1,28 @@ +{ + "data": { + "type": "card", + "attributes": { + "name": "General", + "color": "#F97316", + "cardInfo": { + "notes": null, + "name": "General", + "summary": "Universal fallback tag for any card or app that does not fit a more specific type.", + "cardThumbnailURL": null + } + }, + "meta": { + "adoptsFrom": { + "module": "../catalog-app/listing/tag", + "name": "Tag" + } + }, + "relationships": { + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} diff --git a/packages/catalog-realm/Tag/new.json b/packages/catalog-realm/Tag/new.json new file mode 100644 index 00000000000..dc80b1fb72e --- /dev/null +++ b/packages/catalog-realm/Tag/new.json @@ -0,0 +1,28 @@ +{ + "data": { + "type": "card", + "attributes": { + "name": "New", + "color": "#F97316", + "cardInfo": { + "notes": null, + "name": "New", + "summary": "Recently added listings in the catalog.", + "cardThumbnailURL": null + } + }, + "meta": { + "adoptsFrom": { + "module": "../catalog-app/listing/tag", + "name": "Tag" + } + }, + "relationships": { + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} diff --git a/packages/catalog-realm/Tag/ed5a1a3f-0dbf-47b5-b2a6-d88b0d2a7642.json b/packages/catalog-realm/Tag/official.json similarity index 91% rename from packages/catalog-realm/Tag/ed5a1a3f-0dbf-47b5-b2a6-d88b0d2a7642.json rename to packages/catalog-realm/Tag/official.json index af8ba4a0bf3..1d608c04900 100644 --- a/packages/catalog-realm/Tag/ed5a1a3f-0dbf-47b5-b2a6-d88b0d2a7642.json +++ b/packages/catalog-realm/Tag/official.json @@ -3,10 +3,10 @@ "type": "card", "attributes": { "name": "Official", - "color": "#00ebac", + "color": "#F97316", "cardInfo": { "notes": null, - "name": null, + "name": "Official", "summary": "Cards and apps officially created and maintained by the Cardstack team. Guaranteed quality, ongoing support, and compatibility with the latest platform updates.", "cardThumbnailURL": null } diff --git a/packages/catalog-realm/Tag/planner.json b/packages/catalog-realm/Tag/planner.json new file mode 100644 index 00000000000..c3ea358e988 --- /dev/null +++ b/packages/catalog-realm/Tag/planner.json @@ -0,0 +1,28 @@ +{ + "data": { + "type": "card", + "attributes": { + "name": "Planner", + "color": "#10B981", + "cardInfo": { + "notes": null, + "name": "Planner", + "summary": "Meal planners, project planners, schedule cards, and anything focused on planning ahead.", + "cardThumbnailURL": null + } + }, + "meta": { + "adoptsFrom": { + "module": "../catalog-app/listing/tag", + "name": "Tag" + } + }, + "relationships": { + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} diff --git a/packages/catalog-realm/Tag/f21d95da-0728-46a8-8622-6c157716c26c.json b/packages/catalog-realm/Tag/poster.json similarity index 79% rename from packages/catalog-realm/Tag/f21d95da-0728-46a8-8622-6c157716c26c.json rename to packages/catalog-realm/Tag/poster.json index 7d583497aa7..dc020fdab85 100644 --- a/packages/catalog-realm/Tag/f21d95da-0728-46a8-8622-6c157716c26c.json +++ b/packages/catalog-realm/Tag/poster.json @@ -1,22 +1,22 @@ { "data": { - "meta": { - "adoptsFrom": { - "name": "Tag", - "module": "../catalog-app/listing/tag" - } - }, "type": "card", "attributes": { "name": "Poster", - "color": "#ff7f00", + "color": "#10B981", "cardInfo": { "notes": null, - "name": "", + "name": "Poster", "summary": "Cards designed for creating posters, flyers, promotional visuals, or any print-ready or display-ready graphical layouts.", "cardThumbnailURL": null } }, + "meta": { + "adoptsFrom": { + "module": "../catalog-app/listing/tag", + "name": "Tag" + } + }, "relationships": { "cardInfo.theme": { "links": { diff --git a/packages/catalog-realm/Tag/report.json b/packages/catalog-realm/Tag/report.json new file mode 100644 index 00000000000..adc40233c18 --- /dev/null +++ b/packages/catalog-realm/Tag/report.json @@ -0,0 +1,28 @@ +{ + "data": { + "type": "card", + "attributes": { + "name": "Report", + "color": "#10B981", + "cardInfo": { + "notes": null, + "name": "Report", + "summary": "Generated summaries, financial reports, audit reports, and structured output documents.", + "cardThumbnailURL": null + } + }, + "meta": { + "adoptsFrom": { + "module": "../catalog-app/listing/tag", + "name": "Tag" + } + }, + "relationships": { + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} diff --git a/packages/catalog-realm/Tag/skill.json b/packages/catalog-realm/Tag/skill.json new file mode 100644 index 00000000000..ef242c56fcc --- /dev/null +++ b/packages/catalog-realm/Tag/skill.json @@ -0,0 +1,28 @@ +{ + "data": { + "type": "card", + "attributes": { + "name": "Skill", + "color": "#10B981", + "cardInfo": { + "notes": null, + "name": "Skill", + "summary": "Cards and apps that teach, demonstrate, or practice specific AI skills, capabilities, and techniques.", + "cardThumbnailURL": null + } + }, + "meta": { + "adoptsFrom": { + "module": "../catalog-app/listing/tag", + "name": "Tag" + } + }, + "relationships": { + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} diff --git a/packages/catalog-realm/Tag/template.json b/packages/catalog-realm/Tag/template.json new file mode 100644 index 00000000000..3f369322d93 --- /dev/null +++ b/packages/catalog-realm/Tag/template.json @@ -0,0 +1,28 @@ +{ + "data": { + "type": "card", + "attributes": { + "name": "Template", + "color": "#10B981", + "cardInfo": { + "notes": null, + "name": "Template", + "summary": "Reusable starting points and boilerplates ready to be customised for your own use.", + "cardThumbnailURL": null + } + }, + "meta": { + "adoptsFrom": { + "module": "../catalog-app/listing/tag", + "name": "Tag" + } + }, + "relationships": { + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} diff --git a/packages/catalog-realm/Tag/b793225c-32f9-404c-b2a9-b4041b93090c.json b/packages/catalog-realm/Tag/theme.json similarity index 79% rename from packages/catalog-realm/Tag/b793225c-32f9-404c-b2a9-b4041b93090c.json rename to packages/catalog-realm/Tag/theme.json index bb4d69a9f79..e0c0625ff3e 100644 --- a/packages/catalog-realm/Tag/b793225c-32f9-404c-b2a9-b4041b93090c.json +++ b/packages/catalog-realm/Tag/theme.json @@ -1,22 +1,22 @@ { "data": { - "meta": { - "adoptsFrom": { - "name": "Tag", - "module": "../catalog-app/listing/tag" - } - }, "type": "card", "attributes": { "name": "Theme", - "color": "#ff009d", + "color": "#10B981", "cardInfo": { "notes": null, - "name": null, + "name": "Theme", "summary": "Visual themes and styling cards that customize the appearance and color scheme of the Boxel workspace or other cards.", "cardThumbnailURL": null } }, + "meta": { + "adoptsFrom": { + "module": "../catalog-app/listing/tag", + "name": "Tag" + } + }, "relationships": { "cardInfo.theme": { "links": { diff --git a/packages/catalog-realm/Tag/tracker.json b/packages/catalog-realm/Tag/tracker.json new file mode 100644 index 00000000000..253e882f6b9 --- /dev/null +++ b/packages/catalog-realm/Tag/tracker.json @@ -0,0 +1,28 @@ +{ + "data": { + "type": "card", + "attributes": { + "name": "Tracker", + "color": "#10B981", + "cardInfo": { + "notes": null, + "name": "Tracker", + "summary": "Habit trackers, expense trackers, progress trackers, and any card focused on monitoring over time.", + "cardThumbnailURL": null + } + }, + "meta": { + "adoptsFrom": { + "module": "../catalog-app/listing/tag", + "name": "Tag" + } + }, + "relationships": { + "cardInfo.theme": { + "links": { + "self": null + } + } + } + } +} diff --git a/packages/catalog-realm/Tag/4d0f9ae2-048e-4ce0-b263-7006602ce6a4.json b/packages/catalog-realm/Tag/user-contributed.json similarity index 89% rename from packages/catalog-realm/Tag/4d0f9ae2-048e-4ce0-b263-7006602ce6a4.json rename to packages/catalog-realm/Tag/user-contributed.json index 8b149d2f5f1..5b65b8ab131 100644 --- a/packages/catalog-realm/Tag/4d0f9ae2-048e-4ce0-b263-7006602ce6a4.json +++ b/packages/catalog-realm/Tag/user-contributed.json @@ -3,10 +3,10 @@ "type": "card", "attributes": { "name": "User Contributed", - "color": "#c3fc33", + "color": "#F97316", "cardInfo": { "notes": null, - "name": null, + "name": "User Contributed", "summary": "Content created and submitted by community members rather than the official Cardstack team. Quality and support may vary.", "cardThumbnailURL": null } @@ -25,4 +25,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/catalog-realm/ThemeListing/4d6390f1-3bae-4e75-a95d-4309010e03e4.json b/packages/catalog-realm/ThemeListing/4d6390f1-3bae-4e75-a95d-4309010e03e4.json index f02d4aa4a30..db982be4889 100644 --- a/packages/catalog-realm/ThemeListing/4d6390f1-3bae-4e75-a95d-4309010e03e4.json +++ b/packages/catalog-realm/ThemeListing/4d6390f1-3bae-4e75-a95d-4309010e03e4.json @@ -35,12 +35,12 @@ }, "tags.0": { "links": { - "self": "../Tag/ed5a1a3f-0dbf-47b5-b2a6-d88b0d2a7642" + "self": "../Tag/official" } }, "tags.1": { "links": { - "self": "../Tag/b793225c-32f9-404c-b2a9-b4041b93090c" + "self": "../Tag/theme" } }, "license": { diff --git a/packages/catalog-realm/ThemeListing/f87667d9-7616-4baf-b2fe-8ce5d393f676.json b/packages/catalog-realm/ThemeListing/f87667d9-7616-4baf-b2fe-8ce5d393f676.json index 98c9913a3ce..cf7234b0d74 100644 --- a/packages/catalog-realm/ThemeListing/f87667d9-7616-4baf-b2fe-8ce5d393f676.json +++ b/packages/catalog-realm/ThemeListing/f87667d9-7616-4baf-b2fe-8ce5d393f676.json @@ -35,12 +35,12 @@ }, "tags.0": { "links": { - "self": "../Tag/ed5a1a3f-0dbf-47b5-b2a6-d88b0d2a7642" + "self": "../Tag/official" } }, "tags.1": { "links": { - "self": "../Tag/b793225c-32f9-404c-b2a9-b4041b93090c" + "self": "../Tag/theme" } }, "license": { diff --git a/packages/catalog-realm/crm-app/Tag/8a14f671-4daf-4195-aca5-85dc143d15b8.json b/packages/catalog-realm/crm-app/Tag/8a14f671-4daf-4195-aca5-85dc143d15b8.json index 671618648a3..253e6559f71 100644 --- a/packages/catalog-realm/crm-app/Tag/8a14f671-4daf-4195-aca5-85dc143d15b8.json +++ b/packages/catalog-realm/crm-app/Tag/8a14f671-4daf-4195-aca5-85dc143d15b8.json @@ -3,15 +3,26 @@ "type": "card", "attributes": { "name": "Proposal", - "color": "#A66DFA", - "cardDescription": null, - "cardThumbnailURL": null + "color": null, + "cardInfo": { + "notes": null, + "name": "Proposal", + "summary": "Proposal documents, client pitches, project proposals, business proposals, and contract proposals.", + "cardThumbnailURL": null + } }, "meta": { "adoptsFrom": { "module": "../tag", "name": "Tag" } + }, + "relationships": { + "cardInfo.theme": { + "links": { + "self": null + } + } } } } diff --git a/packages/catalog-realm/sprint-planner/Tag/631d1b5d-fcd0-465c-964e-e535fc6bb893.json b/packages/catalog-realm/sprint-planner/Tag/631d1b5d-fcd0-465c-964e-e535fc6bb893.json index f007ebfa190..b3ff8fda1d8 100644 --- a/packages/catalog-realm/sprint-planner/Tag/631d1b5d-fcd0-465c-964e-e535fc6bb893.json +++ b/packages/catalog-realm/sprint-planner/Tag/631d1b5d-fcd0-465c-964e-e535fc6bb893.json @@ -4,14 +4,25 @@ "attributes": { "name": "AI", "color": null, - "cardDescription": null, - "cardThumbnailURL": null + "cardInfo": { + "notes": null, + "name": "AI", + "summary": "Cards and apps that use artificial intelligence or machine learning, including LLM-powered features, smart automation, and AI-assisted workflows.", + "cardThumbnailURL": null + } }, "meta": { "adoptsFrom": { "module": "../tag", "name": "Tag" } + }, + "relationships": { + "cardInfo.theme": { + "links": { + "self": null + } + } } } } diff --git a/packages/catalog-realm/sprint-planner/Tag/e3625690-2231-428e-8f6d-d123d8f5cc6c.json b/packages/catalog-realm/sprint-planner/Tag/e3625690-2231-428e-8f6d-d123d8f5cc6c.json index e0ccdb20fba..8fd626a5907 100644 --- a/packages/catalog-realm/sprint-planner/Tag/e3625690-2231-428e-8f6d-d123d8f5cc6c.json +++ b/packages/catalog-realm/sprint-planner/Tag/e3625690-2231-428e-8f6d-d123d8f5cc6c.json @@ -3,15 +3,26 @@ "type": "card", "attributes": { "name": "Health and Fitness", - "color": "#1EDF67", - "cardDescription": null, - "cardThumbnailURL": null + "color": null, + "cardInfo": { + "notes": null, + "name": "Health and Fitness", + "summary": "Cards and apps for tracking health metrics, fitness activities, wellness goals, exercise routines, and fitness progress.", + "cardThumbnailURL": null + } }, "meta": { "adoptsFrom": { "module": "../tag", "name": "Tag" } + }, + "relationships": { + "cardInfo.theme": { + "links": { + "self": null + } + } } } } diff --git a/packages/host/app/commands/listing-create.ts b/packages/host/app/commands/listing-create.ts index d08771639f9..7610ca5a4a1 100644 --- a/packages/host/app/commands/listing-create.ts +++ b/packages/host/app/commands/listing-create.ts @@ -153,22 +153,48 @@ export default class ListingCreateCommand extends HostBaseCommand< const listingCard = listing as CardAPI.CardDef; const firstOpenCardId = openCardIds?.[0]; - const backgroundWork = Promise.all([ - this.autoPatchName(listingCard, codeRef), - this.autoPatchSummary(listingCard, codeRef), - this.autoLinkTag(listingCard, codeRef), - this.autoLinkCategory(listingCard, codeRef), - this.autoLinkLicense(listingCard), - this.autoLinkExample(listingCard, codeRef, openCardIds), - this.linkSpecs( - listingCard, - targetRealm, - firstOpenCardId ?? codeRef?.module, - codeRef.module, - codeRef, - ), - ]).catch((error) => { - console.warn('Background autopatch failed:', error); + const backgroundTasks = [ + { + name: 'autoPatchName', + promise: this.autoPatchName(listingCard, codeRef), + }, + { + name: 'autoPatchSummary', + promise: this.autoPatchSummary(listingCard, codeRef), + }, + { name: 'autoLinkTag', promise: this.autoLinkTag(listingCard, codeRef) }, + { + name: 'autoLinkCategory', + promise: this.autoLinkCategory(listingCard, codeRef), + }, + { name: 'autoLinkLicense', promise: this.autoLinkLicense(listingCard) }, + { + name: 'autoLinkExample', + promise: this.autoLinkExample(listingCard, codeRef, openCardIds), + }, + { + name: 'linkSpecs', + promise: this.linkSpecs( + listingCard, + targetRealm, + firstOpenCardId ?? codeRef?.module, + codeRef.module, + codeRef, + ), + }, + ]; + + const backgroundWork = Promise.allSettled( + backgroundTasks.map((t) => t.promise), + ).then((results) => { + results.forEach((result, i) => { + if (result.status === 'rejected') { + console.warn( + `Background autopatch failed [${backgroundTasks[i].name}]:`, + result.reason, + ); + } + }); }); const { ListingCreateResult } = commandModule; @@ -508,10 +534,9 @@ export default class ListingCreateCommand extends HostBaseCommand< max: 1, additionalSystemPrompt: 'You are selecting from an existing list of catalog tags. ' + - "Choose the single best tag that describes the card's subject matter, use case, or domain. " + - 'Prefer a specific descriptive tag over a broad organizational bucket. ' + - 'Only select ids from the provided options. ' + - 'Return [] if no tag clearly fits.', + "Choose the most specific descriptive tag that describes the card's subject matter, use case, or domain. " + + 'If no tag clearly fits the subject matter, select a Source/Origin tag as a fallback (From tag pools). ' + + 'Return [] only if no appropriate tag exists.', }, ); (listing as any).tags = selected; @@ -533,9 +558,7 @@ export default class ListingCreateCommand extends HostBaseCommand< max: 1, additionalSystemPrompt: 'You are selecting from an existing list of catalog categories. ' + - "Choose the single best high-level category that matches the card's main purpose. " + - 'Prefer broad organizing categories over keyword-style tags. ' + - 'Only select ids from the provided options. ' + + "Choose the most specific descriptive category that matches the card's main purpose. " + 'Return [] if no category clearly fits.', }, ); diff --git a/packages/host/app/commands/one-shot-llm-request.ts b/packages/host/app/commands/one-shot-llm-request.ts index de081616ed2..30968217d1c 100644 --- a/packages/host/app/commands/one-shot-llm-request.ts +++ b/packages/host/app/commands/one-shot-llm-request.ts @@ -167,7 +167,7 @@ export default class OneShotLlmRequestCommand extends HostBaseCommand< url: 'https://openrouter.ai/api/v1/chat/completions', method: 'POST', requestBody: JSON.stringify({ - model: input.llmModel || 'anthropic/claude-3-haiku', + model: input.llmModel || 'anthropic/claude-haiku-4.5', messages: generationMessages, stream: false, }), @@ -180,11 +180,6 @@ export default class OneShotLlmRequestCommand extends HostBaseCommand< } const responseData = await result.response.json(); - oneShotLogger.debug('raw llm response meta', { - status: result.response.status, - model: input.llmModel || 'anthropic/claude-3-haiku', - usage: responseData.usage || null, - }); const output = responseData.choices?.[0]?.message?.content || null; oneShotLogger.debug('llm request complete', output); diff --git a/packages/host/app/commands/search-and-choose.ts b/packages/host/app/commands/search-and-choose.ts index 97e785e7aa0..8af46d846c1 100644 --- a/packages/host/app/commands/search-and-choose.ts +++ b/packages/host/app/commands/search-and-choose.ts @@ -6,8 +6,6 @@ import type * as BaseCommandModule from 'https://cardstack.com/base/command'; import HostBaseCommand from '../lib/host-base-command'; -import { prettifyPrompts } from '../utils/prettify-prompts'; - import OneShotLlmRequestCommand from './one-shot-llm-request'; import { SearchCardsByTypeAndTitleCommand } from './search-cards'; @@ -49,6 +47,8 @@ export default class SearchAndChooseCommand extends HostBaseCommand< throw new Error('max must be at least 1'); } + const { SearchAndChooseResult } = await this.loadCommandModule(); + // 1. Gather candidates via existing search command const search = new SearchCardsByTypeAndTitleCommand(this.commandContext); const searchResult = await search.execute({ type: candidateTypeCodeRef }); @@ -58,55 +58,63 @@ export default class SearchAndChooseCommand extends HostBaseCommand< log.debug('No instances found for type', { type: candidateTypeCodeRef.name, }); - const { SearchAndChooseResult } = await this.loadCommandModule(); return new SearchAndChooseResult({ selectedIds: [], selectedCards: [] }); } // 2. Prepare prompt content - const summaries = this.formatCandidatesForPrompt(instances); - let systemPrompt = - max === 1 - ? `Select the single most relevant id representing ${candidateTypeCodeRef.name}. Output ONLY a JSON array with exactly 1 id string. No commentary.` - : `Select the most relevant 1 to ${max} ids representing ${candidateTypeCodeRef.name}. Output ONLY a JSON array of unique id strings. No commentary.`; + // Use numbered indices instead of raw IDs to prevent the LLM from + // hallucinating IDs it knows from training data. Options are numbered starting + // from 1 in the prompt, then mapped back to 0-based indices when selecting. + const numberedCandidates = this.formatCandidatesAsNumberedList(instances); + const isMaxOne = max === 1; + + let contextSection = ''; if (selectionContextCodeRef) { - systemPrompt += ` Use the attached module source for "${selectionContextCodeRef.name}" (${selectionContextCodeRef.module}) as selection context.`; + contextSection = `Selection context: "${selectionContextCodeRef.name}" (${selectionContextCodeRef.module})`; } if (additionalSystemPrompt && additionalSystemPrompt.trim()) { - systemPrompt += ` ${additionalSystemPrompt.trim()}`; + contextSection += `${contextSection ? '\n' : ''}${additionalSystemPrompt.trim()}`; } - const userPrompt = - max === 1 - ? `Options (id :: title):\n${summaries}\n\nRules:\n- Return a JSON array with exactly 1 id.\n- Only use ids from the list.\n- If nothing is relevant return [].` - : `Options (id :: title):\n${summaries}\n\nRules:\n- Return a JSON array with 1 to ${max} ids.\n- No duplicates.\n- Only use ids from the list.\n- If nothing is relevant return [].`; + const systemPrompt = + 'You are a selection assistant. Return only what is asked with no commentary.'; + const userPrompt = [ + `Choose the most relevant ${ + isMaxOne ? '1 option' : `1 to ${max} options` + } for "${candidateTypeCodeRef.name}" from the numbered list below.`, + contextSection, + `Options:\n${numberedCandidates}`, + isMaxOne + ? `Return a JSON array containing exactly 1 number (the option number). If nothing is relevant return [].` + : `Return a JSON array of numbers (the option numbers, no duplicates, up to ${max}). If nothing is relevant return [].`, + ] + .filter(Boolean) + .join('\n\n'); // 3. LLM selection const oneShot = new OneShotLlmRequestCommand(this.commandContext); - // Unified prompt logging via reusable utility - log.debug( - prettifyPrompts({ - scope: `SearchAndChoose:${candidateTypeCodeRef.name}`, - systemPrompt, - userPrompt, - }), - ); - const r = await oneShot.execute({ + const res = await oneShot.execute({ systemPrompt, userPrompt, - llmModel: llmModel || 'anthropic/claude-3-haiku', + llmModel, codeRef: selectionContextCodeRef ?? candidateTypeCodeRef, }); - const selectedIds = this.parseIdsFromLlmOutput(r.output || '[]').slice( - 0, - max, - ); - const selectedCards = instances.filter((inst: any) => - selectedIds.some( - (id) => typeof inst.id === 'string' && inst.id.includes(id), - ), - ); - const { SearchAndChooseResult } = await this.loadCommandModule(); + const validInstances = instances.filter((c: any) => c && c.id); + const rawIndices = this.parseIndicesFromLlmOutput(res.output || '[]'); + const selectedIndices = Array.from(new Set(rawIndices)).slice(0, max); + const selectedCards = selectedIndices + .map((i) => validInstances[i - 1]) + .filter(Boolean); + const selectedIds = selectedCards.map((c: any) => c.id); + + // Log a warning if the LLM output could not be parsed into valid selections, to aid debugging + if (selectedCards.length === 0) { + console.warn( + `[SearchAndChoose:${candidateTypeCodeRef.name}] LLM could not find a relevant option from ${validInstances.length} available cards. LLM output: "${res.output}" (Parsed indices: ${selectedIndices})`, + ); + } + return new SearchAndChooseResult({ selectedIds, selectedCards, @@ -126,7 +134,7 @@ export default class SearchAndChooseCommand extends HostBaseCommand< return codeRef; } - private parseIdsFromLlmOutput(output: string): string[] { + private parseIndicesFromLlmOutput(output: string): number[] { let text = output.trim(); if (!text) return []; if (text.startsWith('```')) { @@ -138,21 +146,34 @@ export default class SearchAndChooseCommand extends HostBaseCommand< try { const parsed = JSON.parse(text); if (!Array.isArray(parsed)) return []; - return parsed.filter((v) => typeof v === 'string'); + return parsed + .map((v) => { + // Accept either a number or a string representation of a positive integer + if (typeof v === 'number' && Number.isInteger(v) && v > 0) { + return v; + } + if (typeof v === 'string') { + const num = parseInt(v, 10); + // Verify the entire string was consumed (no partial parsing like "1.5" -> 1) + if (Number.isInteger(num) && num > 0 && String(num) === v.trim()) { + return num; + } + } + return null; + }) + .filter((v): v is number => v !== null); } catch { return []; } } - private formatCandidatesForPrompt(instances: any[]): string { + private formatCandidatesAsNumberedList(instances: any[]): string { return instances .filter((c) => c && c.id) - .map((c) => { - const title = c.title || ''; + .map((c, i) => { + const name = c.cardTitle || c.name || ''; const summary = c.cardInfo?.summary || ''; - return summary - ? `${c.id} :: ${title} — ${summary}`.trim() - : `${c.id} :: ${title}`.trim(); + return summary ? `${i + 1}. ${name} — ${summary}` : `${i + 1}. ${name}`; }) .join('\n'); } diff --git a/packages/host/tests/integration/commands/search-and-choose-test.gts b/packages/host/tests/integration/commands/search-and-choose-test.gts index 5b4bdf61a9a..69bfbd2c891 100644 --- a/packages/host/tests/integration/commands/search-and-choose-test.gts +++ b/packages/host/tests/integration/commands/search-and-choose-test.gts @@ -56,7 +56,7 @@ module('Integration | commands | search-and-choose', function (hooks) { choices: [ { message: { - content: JSON.stringify([`${testRealmURL}Choice/alpha`]), + content: JSON.stringify([1]), }, }, ], @@ -146,7 +146,7 @@ export class ContextCard extends CardDef { ); }); - test('uses sourceContextCodeRef source instead of the searched type source', async function (assert) { + test('LLM index selection uses sourceContextCodeRef as context', async function (assert) { let result = await searchAndChooseCommand.execute({ candidateTypeCodeRef: { module: `${testRealmURL}choice.gts`, @@ -178,4 +178,56 @@ export class ContextCard extends CardDef { 'LLM request does not include the searched type source', ); }); + + test('parseIndicesFromLlmOutput accepts numeric literals', function (assert) { + const result = + searchAndChooseCommand['parseIndicesFromLlmOutput']('[1, 2, 3]'); + assert.deepEqual(result, [1, 2, 3]); + }); + + test('parseIndicesFromLlmOutput accepts quoted numeric strings', function (assert) { + const result = + searchAndChooseCommand['parseIndicesFromLlmOutput']('["1", "2", "3"]'); + assert.deepEqual(result, [1, 2, 3]); + }); + + test('parseIndicesFromLlmOutput handles mixed numeric and quoted strings', function (assert) { + const result = + searchAndChooseCommand['parseIndicesFromLlmOutput']('[1, "2", 3]'); + assert.deepEqual(result, [1, 2, 3]); + }); + + test('parseIndicesFromLlmOutput rejects non-numeric strings', function (assert) { + const result = + searchAndChooseCommand['parseIndicesFromLlmOutput']('["abc", "1.5", ""]'); + assert.deepEqual(result, []); + }); + + test('parseIndicesFromLlmOutput rejects zero and negative numbers', function (assert) { + const result = + searchAndChooseCommand['parseIndicesFromLlmOutput']('[0, -1, 1]'); + assert.deepEqual(result, [1]); + }); + + test('parseIndicesFromLlmOutput handles code block formatting', function (assert) { + const result = searchAndChooseCommand['parseIndicesFromLlmOutput']( + '```json\n["1", "2"]\n```', + ); + assert.deepEqual(result, [1, 2]); + }); + + test('parseIndicesFromLlmOutput returns empty array for empty input', function (assert) { + assert.deepEqual( + searchAndChooseCommand['parseIndicesFromLlmOutput'](''), + [], + ); + assert.deepEqual( + searchAndChooseCommand['parseIndicesFromLlmOutput']('[]'), + [], + ); + assert.deepEqual( + searchAndChooseCommand['parseIndicesFromLlmOutput']('invalid json'), + [], + ); + }); });