diff --git a/packages/ai-bot/tests/resources/chats/added-skill-and-attached-card.json b/packages/ai-bot/tests/resources/chats/added-skill-and-attached-card.json index a1a6a7c55f..aefb4af4a9 100644 --- a/packages/ai-bot/tests/resources/chats/added-skill-and-attached-card.json +++ b/packages/ai-bot/tests/resources/chats/added-skill-and-attached-card.json @@ -175,7 +175,7 @@ "format": "app.boxel.card", "body": "card fragment 1 of 1", "formatted_body": "card fragment 1 of 1", - "data": "{\"cardFragment\":\"{\\\"data\\\":{\\\"type\\\":\\\"card\\\",\\\"id\\\":\\\"https://cardstack.com/base/SkillCard/card-editing\\\",\\\"attributes\\\":{\\\"instructions\\\":\\\"- If the user wants the data they see edited, AND the patchCard function is available, you MUST use the \\\\\\\"patchCard\\\\\\\" function to make the change.\\\\n- If the user wants the data they see edited, AND the patchCard function is NOT available, you MUST ask the user to open the card and share it with you.\\\\n- If you do not call patchCard, the user will not see the change.\\\\n- You can ONLY modify cards shared with you. If there is no patchCard function or tool, then the user hasn't given you access.\\\\n- NEVER tell the user to use patchCard; you should always do it for them.\\\\n- If the user wants to search for a card instance, AND the \\\\\\\"searchCard\\\\\\\" function is available, you MUST use the \\\\\\\"searchCard\\\\\\\" function to find the card instance.\\\\nOnly recommend one searchCard function at a time.\\\\nIf the user wants to edit a field of a card, you can optionally use \\\\\\\"searchCard\\\\\\\" to help find a card instance that is compatible with the field being edited before using \\\\\\\"patchCard\\\\\\\" to make the change of the field.\\\\n You MUST confirm with the user the correct choice of card instance that he intends to use based upon the results of the search.\\\\n- If the user wants to generate an app module, AND the \\\\\\\"generateAppModule\\\\\\\" function is available, you MUST use the \\\\\\\"generateAppModule\\\\\\\" function to create the card source.\\\",\\\"title\\\":\\\"Card Editing\\\",\\\"description\\\":null,\\\"thumbnailURL\\\":null},\\\"meta\\\":{\\\"adoptsFrom\\\":{\\\"module\\\":\\\"https://cardstack.com/base/skill-card\\\",\\\"name\\\":\\\"SkillCard\\\"}}}}\",\"index\":0,\"totalParts\":1}" + "data": "{\"cardFragment\":\"{\\\"data\\\":{\\\"type\\\":\\\"card\\\",\\\"id\\\":\\\"https://cardstack.com/base/SkillCard/card-editing\\\",\\\"attributes\\\":{\\\"instructions\\\":\\\"- If the user wants the data they see edited, AND the patchCard function is available, you MUST use the \\\\\\\"patchCard\\\\\\\" function to make the change.\\\\n- If the user wants the data they see edited, AND the patchCard function is NOT available, you MUST ask the user to open the card and share it with you.\\\\n- If you do not call patchCard, the user will not see the change.\\\\n- You can ONLY modify cards shared with you. If there is no patchCard function or tool, then the user hasn't given you access.\\\\n- NEVER tell the user to use patchCard; you should always do it for them.\\\\n- If the user wants to search for a card instance, AND the \\\\\\\"searchCard\\\\\\\" function is available, you MUST use the \\\\\\\"searchCard\\\\\\\" function to find the card instance.\\\\nOnly recommend one searchCard function at a time.\\\\nIf the user wants to edit a field of a card, you can optionally use \\\\\\\"searchCard\\\\\\\" to help find a card instance that is compatible with the field being edited before using \\\\\\\"patchCard\\\\\\\" to make the change of the field.\\\\n You MUST confirm with the user the correct choice of card instance that he intends to use based upon the results of the search.\\\",\\\"title\\\":\\\"Card Editing\\\",\\\"description\\\":null,\\\"thumbnailURL\\\":null},\\\"meta\\\":{\\\"adoptsFrom\\\":{\\\"module\\\":\\\"https://cardstack.com/base/skill-card\\\",\\\"name\\\":\\\"SkillCard\\\"}}}}\",\"index\":0,\"totalParts\":1}" }, "origin_server_ts": 1733266517262, "unsigned": { @@ -395,7 +395,7 @@ "format": "org.matrix.custom.html", "formatted_body": "
Summarize this card
\n", "clientGeneratedId": "b329fa44-e944-46c2-9e65-34d157509326", - "data": "{\"attachedCardsEventIds\":[\"$VpJ0-QkjZZo5C2yVrgY2m9BtMSXyMJaRrfeSftTX5vU\"],\"context\":{\"openCardIds\":[\"http://localhost:4201/user/lukes-workspace/ProductRequirementDocument/9f816882-17e0-473f-81f2-a37381874322\"],\"tools\":[{\"type\":\"function\",\"function\":{\"name\":\"patchCard\",\"description\":\"Propose a patch to an existing card to change its contents. Any attributes specified will be fully replaced, return the minimum required to make the change. If a relationship field value is removed, set the self property of the specific item to null. When editing a relationship array, display the full array in the patch code. Ensure the description explains what change you are making.\",\"parameters\":{\"type\":\"object\",\"properties\":{\"description\":{\"type\":\"string\"},\"attributes\":{\"type\":\"object\",\"properties\":{\"cardId\":{\"type\":\"string\",\"const\":\"http://localhost:4201/user/lukes-workspace/ProductRequirementDocument/9f816882-17e0-473f-81f2-a37381874322\"},\"patch\":{\"type\":\"object\",\"properties\":{\"attributes\":{\"type\":\"object\",\"properties\":{\"appTitle\":{\"type\":\"string\"},\"shortDescription\":{\"type\":\"string\"},\"thumbnail\":{\"type\":\"object\",\"properties\":{\"altText\":{\"type\":\"string\"},\"height\":{\"type\":\"number\"},\"width\":{\"type\":\"number\"},\"base64\":{\"type\":\"string\"}}},\"prompt\":{\"type\":\"string\"},\"overview\":{\"type\":\"string\"},\"schema\":{\"type\":\"string\"},\"layoutAndNavigation\":{\"type\":\"string\"},\"moduleURL\":{\"type\":\"string\"},\"thumbnailURL\":{\"type\":\"string\"}}},\"relationships\":{\"type\":\"object\",\"properties\":{\"appInstances\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"links\":{\"type\":\"object\",\"properties\":{\"self\":{\"type\":\"string\"}},\"required\":[\"self\"]}},\"required\":[\"links\"]}}},\"required\":[\"appInstances\"]}}}}}},\"required\":[\"attributes\",\"description\"]}}},{\"type\":\"function\",\"function\":{\"name\":\"searchCard\",\"description\":\"Propose a query to search for a card instance filtered by type. If a card was shared with you, always prioritise search based upon the card that was last shared. If you do not have information on card module and name, do the search using the `cardType` attribute.\",\"parameters\":{\"type\":\"object\",\"properties\":{\"description\":{\"type\":\"string\"},\"attributes\":{\"type\":\"object\",\"properties\":{\"title\":{\"type\":\"string\",\"description\":\"title of the card\"},\"cardType\":{\"type\":\"string\",\"description\":\"name of the card type\"}},\"required\":[\"cardType\"]}}},\"required\":[\"attributes\",\"description\"]}},{\"type\":\"function\",\"function\":{\"name\":\"generateAppModule\",\"description\":\"Propose a post request to generate a new app module. Insert the module code in the 'moduleCode' property of the payload and the title for the module in the 'appTitle' property. Ensure the description explains what change you are making.\",\"parameters\":{\"type\":\"object\",\"properties\":{\"attached_card_id\":{\"type\":\"string\",\"const\":\"http://localhost:4201/user/lukes-workspace/ProductRequirementDocument/9f816882-17e0-473f-81f2-a37381874322\"},\"description\":{\"type\":\"string\"},\"appTitle\":{\"type\":\"string\"},\"moduleCode\":{\"type\":\"string\"}},\"required\":[\"attached_card_id\",\"description\",\"appTitle\",\"moduleCode\"]}}}],\"submode\":\"interact\"}}" + "data": "{\"attachedCardsEventIds\":[\"$VpJ0-QkjZZo5C2yVrgY2m9BtMSXyMJaRrfeSftTX5vU\"],\"context\":{\"openCardIds\":[\"http://localhost:4201/user/lukes-workspace/ProductRequirementDocument/9f816882-17e0-473f-81f2-a37381874322\"],\"tools\":[{\"type\":\"function\",\"function\":{\"name\":\"patchCard\",\"description\":\"Propose a patch to an existing card to change its contents. Any attributes specified will be fully replaced, return the minimum required to make the change. If a relationship field value is removed, set the self property of the specific item to null. When editing a relationship array, display the full array in the patch code. Ensure the description explains what change you are making.\",\"parameters\":{\"type\":\"object\",\"properties\":{\"description\":{\"type\":\"string\"},\"attributes\":{\"type\":\"object\",\"properties\":{\"cardId\":{\"type\":\"string\",\"const\":\"http://localhost:4201/user/lukes-workspace/ProductRequirementDocument/9f816882-17e0-473f-81f2-a37381874322\"},\"patch\":{\"type\":\"object\",\"properties\":{\"attributes\":{\"type\":\"object\",\"properties\":{\"appTitle\":{\"type\":\"string\"},\"shortDescription\":{\"type\":\"string\"},\"thumbnail\":{\"type\":\"object\",\"properties\":{\"altText\":{\"type\":\"string\"},\"height\":{\"type\":\"number\"},\"width\":{\"type\":\"number\"},\"base64\":{\"type\":\"string\"}}},\"prompt\":{\"type\":\"string\"},\"overview\":{\"type\":\"string\"},\"schema\":{\"type\":\"string\"},\"layoutAndNavigation\":{\"type\":\"string\"},\"moduleURL\":{\"type\":\"string\"},\"thumbnailURL\":{\"type\":\"string\"}}},\"relationships\":{\"type\":\"object\",\"properties\":{\"appInstances\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"links\":{\"type\":\"object\",\"properties\":{\"self\":{\"type\":\"string\"}},\"required\":[\"self\"]}},\"required\":[\"links\"]}}},\"required\":[\"appInstances\"]}}}}}},\"required\":[\"attributes\",\"description\"]}}},{\"type\":\"function\",\"function\":{\"name\":\"searchCard\",\"description\":\"Propose a query to search for a card instance filtered by type. If a card was shared with you, always prioritise search based upon the card that was last shared. If you do not have information on card module and name, do the search using the `cardType` attribute.\",\"parameters\":{\"type\":\"object\",\"properties\":{\"description\":{\"type\":\"string\"},\"attributes\":{\"type\":\"object\",\"properties\":{\"title\":{\"type\":\"string\",\"description\":\"title of the card\"},\"cardType\":{\"type\":\"string\",\"description\":\"name of the card type\"}},\"required\":[\"cardType\"]}}},\"required\":[\"attributes\",\"description\"]}}],\"submode\":\"interact\"}}" }, "origin_server_ts": 1733266550275, "unsigned": { diff --git a/packages/ai-bot/tests/resources/chats/added-skill.json b/packages/ai-bot/tests/resources/chats/added-skill.json index 8e5b99db1d..6e1d490291 100644 --- a/packages/ai-bot/tests/resources/chats/added-skill.json +++ b/packages/ai-bot/tests/resources/chats/added-skill.json @@ -289,7 +289,7 @@ "format": "app.boxel.card", "body": "card fragment 1 of 1", "formatted_body": "card fragment 1 of 1", - "data": "{\"cardFragment\":\"{\\\"data\\\":{\\\"type\\\":\\\"card\\\",\\\"id\\\":\\\"https://cardstack.com/base/SkillCard/card-editing\\\",\\\"attributes\\\":{\\\"instructions\\\":\\\"- If the user wants the data they see edited, AND the patchCard function is available, you MUST use the \\\\\\\"patchCard\\\\\\\" function to make the change.\\\\n- If the user wants the data they see edited, AND the patchCard function is NOT available, you MUST ask the user to open the card and share it with you.\\\\n- If you do not call patchCard, the user will not see the change.\\\\n- You can ONLY modify cards shared with you. If there is no patchCard function or tool, then the user hasn't given you access.\\\\n- NEVER tell the user to use patchCard; you should always do it for them.\\\\n- If the user wants to search for a card instance, AND the \\\\\\\"searchCard\\\\\\\" function is available, you MUST use the \\\\\\\"searchCard\\\\\\\" function to find the card instance.\\\\nOnly recommend one searchCard function at a time.\\\\nIf the user wants to edit a field of a card, you can optionally use \\\\\\\"searchCard\\\\\\\" to help find a card instance that is compatible with the field being edited before using \\\\\\\"patchCard\\\\\\\" to make the change of the field.\\\\n You MUST confirm with the user the correct choice of card instance that he intends to use based upon the results of the search.\\\\n- If the user wants to generate an app module, AND the \\\\\\\"generateAppModule\\\\\\\" function is available, you MUST use the \\\\\\\"generateAppModule\\\\\\\" function to create the card source.\\\",\\\"title\\\":\\\"Card Editing\\\",\\\"description\\\":null,\\\"thumbnailURL\\\":null},\\\"meta\\\":{\\\"adoptsFrom\\\":{\\\"module\\\":\\\"https://cardstack.com/base/skill-card\\\",\\\"name\\\":\\\"SkillCard\\\"}}}}\",\"index\":0,\"totalParts\":1}" + "data": "{\"cardFragment\":\"{\\\"data\\\":{\\\"type\\\":\\\"card\\\",\\\"id\\\":\\\"https://cardstack.com/base/SkillCard/card-editing\\\",\\\"attributes\\\":{\\\"instructions\\\":\\\"- If the user wants the data they see edited, AND the patchCard function is available, you MUST use the \\\\\\\"patchCard\\\\\\\" function to make the change.\\\\n- If the user wants the data they see edited, AND the patchCard function is NOT available, you MUST ask the user to open the card and share it with you.\\\\n- If you do not call patchCard, the user will not see the change.\\\\n- You can ONLY modify cards shared with you. If there is no patchCard function or tool, then the user hasn't given you access.\\\\n- NEVER tell the user to use patchCard; you should always do it for them.\\\\n- If the user wants to search for a card instance, AND the \\\\\\\"searchCard\\\\\\\" function is available, you MUST use the \\\\\\\"searchCard\\\\\\\" function to find the card instance.\\\\nOnly recommend one searchCard function at a time.\\\\nIf the user wants to edit a field of a card, you can optionally use \\\\\\\"searchCard\\\\\\\" to help find a card instance that is compatible with the field being edited before using \\\\\\\"patchCard\\\\\\\" to make the change of the field.\\\\n You MUST confirm with the user the correct choice of card instance that he intends to use based upon the results of the search.\\\",\\\"title\\\":\\\"Card Editing\\\",\\\"description\\\":null,\\\"thumbnailURL\\\":null},\\\"meta\\\":{\\\"adoptsFrom\\\":{\\\"module\\\":\\\"https://cardstack.com/base/skill-card\\\",\\\"name\\\":\\\"SkillCard\\\"}}}}\",\"index\":0,\"totalParts\":1}" }, "origin_server_ts": 1733197029613, "unsigned": { diff --git a/packages/ai-bot/tests/resources/chats/skill-card-no-id.json b/packages/ai-bot/tests/resources/chats/skill-card-no-id.json index 3e798a71ba..63ad392b9b 100644 --- a/packages/ai-bot/tests/resources/chats/skill-card-no-id.json +++ b/packages/ai-bot/tests/resources/chats/skill-card-no-id.json @@ -289,7 +289,7 @@ "format": "app.boxel.card", "body": "card fragment 1 of 1", "formatted_body": "card fragment 1 of 1", - "data": "{\"cardFragment\":\"{\\\"data\\\":{\\\"type\\\":\\\"card\\\",\\\"id\\\":\\\"https://cardstack.com/base/SkillCard/card-editing\\\",\\\"attributes\\\":{\\\"instructions\\\":\\\"- If the user wants the data they see edited, AND the patchCard function is available, you MUST use the \\\\\\\"patchCard\\\\\\\" function to make the change.\\\\n- If the user wants the data they see edited, AND the patchCard function is NOT available, you MUST ask the user to open the card and share it with you.\\\\n- If you do not call patchCard, the user will not see the change.\\\\n- You can ONLY modify cards shared with you. If there is no patchCard function or tool, then the user hasn't given you access.\\\\n- NEVER tell the user to use patchCard; you should always do it for them.\\\\n- If the user wants to search for a card instance, AND the \\\\\\\"searchCard\\\\\\\" function is available, you MUST use the \\\\\\\"searchCard\\\\\\\" function to find the card instance.\\\\nOnly recommend one searchCard function at a time.\\\\nIf the user wants to edit a field of a card, you can optionally use \\\\\\\"searchCard\\\\\\\" to help find a card instance that is compatible with the field being edited before using \\\\\\\"patchCard\\\\\\\" to make the change of the field.\\\\n You MUST confirm with the user the correct choice of card instance that he intends to use based upon the results of the search.\\\\n- If the user wants to generate an app module, AND the \\\\\\\"generateAppModule\\\\\\\" function is available, you MUST use the \\\\\\\"generateAppModule\\\\\\\" function to create the card source.\\\",\\\"title\\\":\\\"Card Editing\\\",\\\"description\\\":null,\\\"thumbnailURL\\\":null},\\\"meta\\\":{\\\"adoptsFrom\\\":{\\\"module\\\":\\\"https://cardstack.com/base/skill-card\\\",\\\"name\\\":\\\"SkillCard\\\"}}}}\",\"index\":0,\"totalParts\":1}" + "data": "{\"cardFragment\":\"{\\\"data\\\":{\\\"type\\\":\\\"card\\\",\\\"id\\\":\\\"https://cardstack.com/base/SkillCard/card-editing\\\",\\\"attributes\\\":{\\\"instructions\\\":\\\"- If the user wants the data they see edited, AND the patchCard function is available, you MUST use the \\\\\\\"patchCard\\\\\\\" function to make the change.\\\\n- If the user wants the data they see edited, AND the patchCard function is NOT available, you MUST ask the user to open the card and share it with you.\\\\n- If you do not call patchCard, the user will not see the change.\\\\n- You can ONLY modify cards shared with you. If there is no patchCard function or tool, then the user hasn't given you access.\\\\n- NEVER tell the user to use patchCard; you should always do it for them.\\\\n- If the user wants to search for a card instance, AND the \\\\\\\"searchCard\\\\\\\" function is available, you MUST use the \\\\\\\"searchCard\\\\\\\" function to find the card instance.\\\\nOnly recommend one searchCard function at a time.\\\\nIf the user wants to edit a field of a card, you can optionally use \\\\\\\"searchCard\\\\\\\" to help find a card instance that is compatible with the field being edited before using \\\\\\\"patchCard\\\\\\\" to make the change of the field.\\\\n You MUST confirm with the user the correct choice of card instance that he intends to use based upon the results of the search.\\\",\\\"title\\\":\\\"Card Editing\\\",\\\"description\\\":null,\\\"thumbnailURL\\\":null},\\\"meta\\\":{\\\"adoptsFrom\\\":{\\\"module\\\":\\\"https://cardstack.com/base/skill-card\\\",\\\"name\\\":\\\"SkillCard\\\"}}}}\",\"index\":0,\"totalParts\":1}" }, "origin_server_ts": 1733664373065, "unsigned": { diff --git a/packages/ai-bot/tests/resources/chats/two-messages-with-same-skill-card.json b/packages/ai-bot/tests/resources/chats/two-messages-with-same-skill-card.json index bbf81d07df..08c79fa1db 100644 --- a/packages/ai-bot/tests/resources/chats/two-messages-with-same-skill-card.json +++ b/packages/ai-bot/tests/resources/chats/two-messages-with-same-skill-card.json @@ -175,7 +175,7 @@ "format": "app.boxel.card", "body": "card fragment 1 of 1", "formatted_body": "card fragment 1 of 1", - "data": "{\"cardFragment\":\"{\\\"data\\\":{\\\"type\\\":\\\"card\\\",\\\"id\\\":\\\"https://cardstack.com/base/SkillCard/card-editing\\\",\\\"attributes\\\":{\\\"instructions\\\":\\\"- If the user wants the data they see edited, AND the patchCard function is available, you MUST use the \\\\\\\"patchCard\\\\\\\" function to make the change.\\\\n- If the user wants the data they see edited, AND the patchCard function is NOT available, you MUST ask the user to open the card and share it with you.\\\\n- If you do not call patchCard, the user will not see the change.\\\\n- You can ONLY modify cards shared with you. If there is no patchCard function or tool, then the user hasn't given you access.\\\\n- NEVER tell the user to use patchCard; you should always do it for them.\\\\n- If the user wants to search for a card instance, AND the \\\\\\\"searchCard\\\\\\\" function is available, you MUST use the \\\\\\\"searchCard\\\\\\\" function to find the card instance.\\\\nOnly recommend one searchCard function at a time.\\\\nIf the user wants to edit a field of a card, you can optionally use \\\\\\\"searchCard\\\\\\\" to help find a card instance that is compatible with the field being edited before using \\\\\\\"patchCard\\\\\\\" to make the change of the field.\\\\n You MUST confirm with the user the correct choice of card instance that he intends to use based upon the results of the search.\\\\n- If the user wants to generate an app module, AND the \\\\\\\"generateAppModule\\\\\\\" function is available, you MUST use the \\\\\\\"generateAppModule\\\\\\\" function to create the card source.\\\",\\\"title\\\":\\\"Card Editing\\\",\\\"description\\\":null,\\\"thumbnailURL\\\":null},\\\"meta\\\":{\\\"adoptsFrom\\\":{\\\"module\\\":\\\"https://cardstack.com/base/skill-card\\\",\\\"name\\\":\\\"SkillCard\\\"}}}}\",\"index\":0,\"totalParts\":1}" + "data": "{\"cardFragment\":\"{\\\"data\\\":{\\\"type\\\":\\\"card\\\",\\\"id\\\":\\\"https://cardstack.com/base/SkillCard/card-editing\\\",\\\"attributes\\\":{\\\"instructions\\\":\\\"- If the user wants the data they see edited, AND the patchCard function is available, you MUST use the \\\\\\\"patchCard\\\\\\\" function to make the change.\\\\n- If the user wants the data they see edited, AND the patchCard function is NOT available, you MUST ask the user to open the card and share it with you.\\\\n- If you do not call patchCard, the user will not see the change.\\\\n- You can ONLY modify cards shared with you. If there is no patchCard function or tool, then the user hasn't given you access.\\\\n- NEVER tell the user to use patchCard; you should always do it for them.\\\\n- If the user wants to search for a card instance, AND the \\\\\\\"searchCard\\\\\\\" function is available, you MUST use the \\\\\\\"searchCard\\\\\\\" function to find the card instance.\\\\nOnly recommend one searchCard function at a time.\\\\nIf the user wants to edit a field of a card, you can optionally use \\\\\\\"searchCard\\\\\\\" to help find a card instance that is compatible with the field being edited before using \\\\\\\"patchCard\\\\\\\" to make the change of the field.\\\\n You MUST confirm with the user the correct choice of card instance that he intends to use based upon the results of the search.\\\",\\\"title\\\":\\\"Card Editing\\\",\\\"description\\\":null,\\\"thumbnailURL\\\":null},\\\"meta\\\":{\\\"adoptsFrom\\\":{\\\"module\\\":\\\"https://cardstack.com/base/skill-card\\\",\\\"name\\\":\\\"SkillCard\\\"}}}}\",\"index\":0,\"totalParts\":1}" }, "origin_server_ts": 1733664873533, "unsigned": { diff --git a/packages/base/SkillCard/card-editing.json b/packages/base/SkillCard/card-editing.json index 7775212220..3206bfd322 100644 --- a/packages/base/SkillCard/card-editing.json +++ b/packages/base/SkillCard/card-editing.json @@ -2,7 +2,7 @@ "data": { "type": "card", "attributes": { - "instructions": "- If the user wants the data they see edited, AND the patchCard function is available, you MUST use the \"patchCard\" function to make the change.\n- If the user wants the data they see edited, AND the patchCard function is NOT available, you MUST ask the user to open the card and share it with you.\n- If you do not call patchCard, the user will not see the change.\n- You can ONLY modify cards shared with you. If there is no patchCard function or tool, then the user hasn't given you access.\n- NEVER tell the user to use patchCard; you should always do it for them.\n- If the user wants to search for a card instance, AND the \"searchCard\" function is available, you MUST use the \"searchCard\" function to find the card instance.\nOnly recommend one searchCard function at a time.\nIf the user wants to edit a field of a card, you can optionally use \"searchCard\" to help find a card instance that is compatible with the field being edited before using \"patchCard\" to make the change of the field.\n You MUST confirm with the user the correct choice of card instance that he intends to use based upon the results of the search.\n- If the user wants to generate an app module, AND the \"generateAppModule\" function is available, you MUST use the \"generateAppModule\" function to create the card source.", + "instructions": "- If the user wants the data they see edited, AND the patchCard function is available, you MUST use the \"patchCard\" function to make the change.\n- If the user wants the data they see edited, AND the patchCard function is NOT available, you MUST ask the user to open the card and share it with you.\n- If you do not call patchCard, the user will not see the change.\n- You can ONLY modify cards shared with you. If there is no patchCard function or tool, then the user hasn't given you access.\n- NEVER tell the user to use patchCard; you should always do it for them.\n- If the user wants to search for a card instance, AND the \"searchCard\" function is available, you MUST use the \"searchCard\" function to find the card instance.\nOnly recommend one searchCard function at a time.\nIf the user wants to edit a field of a card, you can optionally use \"searchCard\" to help find a card instance that is compatible with the field being edited before using \"patchCard\" to make the change of the field.\n You MUST confirm with the user the correct choice of card instance that he intends to use based upon the results of the search.", "title": "Card Editing", "description": null, "thumbnailURL": null diff --git a/packages/base/command.gts b/packages/base/command.gts index 4503b1a040..e9d0f2d17c 100644 --- a/packages/base/command.gts +++ b/packages/base/command.gts @@ -114,11 +114,6 @@ export class GetBoxelUIStateResult extends CardDef { }; } -export class LegacyGenerateAppModuleResult extends CardDef { - @field moduleId = contains(StringField); - @field source = contains(StringField); -} - export class OpenAiAssistantRoomInput extends CardDef { @field roomId = contains(StringField); } diff --git a/packages/experiments-realm/Account/77976251-6bc8-4a8c-972f-f9d588e8434d.json b/packages/experiments-realm/Account/77976251-6bc8-4a8c-972f-f9d588e8434d.json index 7564bfd29b..b8c402613a 100644 --- a/packages/experiments-realm/Account/77976251-6bc8-4a8c-972f-f9d588e8434d.json +++ b/packages/experiments-realm/Account/77976251-6bc8-4a8c-972f-f9d588e8434d.json @@ -3,41 +3,39 @@ "type": "card", "attributes": { "shippingAddress": { - "addressLine1": null, + "addressLine1": "456 Pine Street", "addressLine2": null, - "city": null, - "state": null, - "postalCode": null, + "city": "Seattle", + "state": "WA", + "postalCode": "98101", "country": { - "name": null, - "code": null + "name": "United States", + "code": "US" }, "poBoxNumber": null }, "billingAddress": { - "addressLine1": null, + "addressLine1": "456 Pine Street", "addressLine2": null, - "city": null, - "state": null, - "postalCode": null, + "city": "Seattle", + "state": "WA", + "postalCode": "98101", "country": { - "name": null, - "code": null + "name": "United States", + "code": "US" }, "poBoxNumber": null }, "urgencyTag": { "index": 3, "label": "Expiring Soon", - "value": "expiring-soon", - "buttonText": "Create Account", "color": null, "colorScheme": { "foregroundColor": "#FBC02D", "backgroundColor": "#FFF9C4" } }, - "description": null, + "description": "Current client with website and social media package expiring in 30 days", "thumbnailURL": null }, "relationships": { @@ -48,7 +46,7 @@ }, "primaryContact": { "links": { - "self": null + "self": "../Customer/1274acf3-5b66-4373-89a2-fe8106c3d586" } }, "contacts": { @@ -64,4 +62,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/experiments-realm/Account/be0192c4-e566-40ee-8a57-f88f7ab37e53.json b/packages/experiments-realm/Account/be0192c4-e566-40ee-8a57-f88f7ab37e53.json new file mode 100644 index 0000000000..7100d4f3fb --- /dev/null +++ b/packages/experiments-realm/Account/be0192c4-e566-40ee-8a57-f88f7ab37e53.json @@ -0,0 +1,56 @@ +{ + "data": { + "type": "card", + "attributes": { + "shippingAddress": { + "addressLine1": "789 Athletic Avenue", + "addressLine2": "Building B", + "city": "Seattle", + "state": "WA", + "postalCode": "98102", + "country": { + "name": "United States", + "code": "US" + }, + "poBoxNumber": null + }, + "billingAddress": { + "addressLine1": "789 Athletic Avenue", + "addressLine2": "Building B", + "city": "Seattle", + "state": "WA", + "postalCode": "98102", + "country": { + "name": "United States", + "code": "US" + }, + "poBoxNumber": null + }, + "description": "Multi-location gym chain with comprehensive digital transformation needs", + "thumbnailURL": "https://picsum.photos/id/416/200/300" + }, + "relationships": { + "company": { + "links": { + "self": "../Company/9203c173-3420-44b3-863d-90defd7c57c8" + } + }, + "primaryContact": { + "links": { + "self": "../Customer/dddaeabf-1e95-480c-b158-0873e31fc66c" + } + }, + "contacts": { + "links": { + "self": null + } + } + }, + "meta": { + "adoptsFrom": { + "module": "../crm/account", + "name": "Account" + } + } + } +} \ No newline at end of file diff --git a/packages/experiments-realm/Account/bf437dc3-1f96-45e5-a057-3487c6a5c2f7.json b/packages/experiments-realm/Account/bf437dc3-1f96-45e5-a057-3487c6a5c2f7.json index 55b5115ff2..78917998eb 100644 --- a/packages/experiments-realm/Account/bf437dc3-1f96-45e5-a057-3487c6a5c2f7.json +++ b/packages/experiments-realm/Account/bf437dc3-1f96-45e5-a057-3487c6a5c2f7.json @@ -3,60 +3,55 @@ "type": "card", "attributes": { "shippingAddress": { - "addressLine1": null, - "addressLine2": null, - "city": null, - "state": null, - "postalCode": null, + "addressLine1": "220 Startup Avenue", + "addressLine2": "WeWork Floor 3", + "city": "Seattle", + "state": "WA", + "postalCode": "98104", "country": { - "name": null, - "code": null + "name": "United States", + "code": "US" }, "poBoxNumber": null }, "billingAddress": { - "addressLine1": null, - "addressLine2": null, - "city": null, - "state": null, - "postalCode": null, + "addressLine1": "220 Startup Avenue", + "addressLine2": "WeWork Floor 3", + "city": "Seattle", + "state": "WA", + "postalCode": "98104", "country": { - "name": null, - "code": null + "name": "United States", + "code": "US" }, "poBoxNumber": null }, "urgencyTag": { - "index": 1, - "label": "Renewal Due Soon", + "index": 4, + "label": "Follow-Up Required", "color": null, "colorScheme": { - "foregroundColor": "#F57C00", - "backgroundColor": "#FFF3E0" + "foregroundColor": "#1976D2", + "backgroundColor": "#E3F2FD" } }, - "description": null, + "description": "Potential startup client interested in digital marketing services", "thumbnailURL": null }, "relationships": { "company": { "links": { - "self": "../Company/9203c173-3420-44b3-863d-90defd7c57c8" + "self": "../Company/eb6a7c2d-6c94-4e42-aa01-c5823fb5af9a" } }, "primaryContact": { "links": { - "self": "../Contact/a01fc5c9-d70d-4b9c-aae4-384cf2b79b25" + "self": "../Customer/dddaeabf-1e95-480c-b158-0873e31fc66c" } }, - "contacts.0": { + "contacts": { "links": { - "self": "../Customer/0e5aec99-798b-4417-9426-a338432e0ee5" - } - }, - "contacts.1": { - "links": { - "self": "../Lead/9d7b2f20-c7da-4ddc-8e77-b75d88c97b48" + "self": null } } }, diff --git a/packages/experiments-realm/Account/c78762d3-9ab5-4f62-9370-d0b6a0261b08.json b/packages/experiments-realm/Account/c78762d3-9ab5-4f62-9370-d0b6a0261b08.json new file mode 100644 index 0000000000..484ecce38c --- /dev/null +++ b/packages/experiments-realm/Account/c78762d3-9ab5-4f62-9370-d0b6a0261b08.json @@ -0,0 +1,65 @@ +{ + "data": { + "type": "card", + "attributes": { + "shippingAddress": { + "addressLine1": "234 Veterinary Lane", + "addressLine2": null, + "city": "Seattle", + "state": "WA", + "postalCode": "98103", + "country": { + "name": "United States", + "code": "US" + }, + "poBoxNumber": null + }, + "billingAddress": { + "addressLine1": "234 Veterinary Lane", + "addressLine2": null, + "city": "Seattle", + "state": "WA", + "postalCode": "98103", + "country": { + "name": "United States", + "code": "US" + }, + "poBoxNumber": null + }, + "urgencyTag": { + "index": 5, + "label": "Pending Contract", + "color": null, + "colorScheme": { + "foregroundColor": "#512DA8", + "backgroundColor": "#EDE7F6" + } + }, + "description": "Proposal sent for website redesign and booking system integration", + "thumbnailURL": null + }, + "relationships": { + "company": { + "links": { + "self": "../Company/e1856419-27b0-4ce3-98fe-759d21c7144f" + } + }, + "primaryContact": { + "links": { + "self": "../Customer/0c71bda7-f4d8-451a-97cb-567a8fa31763" + } + }, + "contacts": { + "links": { + "self": null + } + } + }, + "meta": { + "adoptsFrom": { + "module": "../crm/account", + "name": "Account" + } + } + } +} \ No newline at end of file diff --git a/packages/experiments-realm/Company/05326db9-ea5c-4f20-b516-ac3f2282e973.json b/packages/experiments-realm/Company/05326db9-ea5c-4f20-b516-ac3f2282e973.json deleted file mode 100644 index 4d2fc40ed8..0000000000 --- a/packages/experiments-realm/Company/05326db9-ea5c-4f20-b516-ac3f2282e973.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "data": { - "type": "card", - "attributes": { - "name": "TechNova Solutions", - "logoUrl": "https://picsum.photos/id/237/200/300", - "website": "technovasolution.com", - "location": { - "streetAddress": null, - "city": "London", - "region": null, - "postalCode": null, - "poBoxNumber": null, - "country": "Uk" - }, - "description": null, - "thumbnailURL": null - }, - "meta": { - "adoptsFrom": { - "module": "../crm/company", - "name": "Company" - } - } - } -} \ No newline at end of file diff --git a/packages/experiments-realm/Company/141f3e15-cfd5-4b61-bd4c-37ea31dbeeab.json b/packages/experiments-realm/Company/141f3e15-cfd5-4b61-bd4c-37ea31dbeeab.json index 4c8482cd0c..31959018d6 100644 --- a/packages/experiments-realm/Company/141f3e15-cfd5-4b61-bd4c-37ea31dbeeab.json +++ b/packages/experiments-realm/Company/141f3e15-cfd5-4b61-bd4c-37ea31dbeeab.json @@ -2,25 +2,25 @@ "data": { "type": "card", "attributes": { - "name": "Cardstack Studio Malaysia", - "industry": "Computer Programming", + "name": "Sweet Tooth Bakery", + "industry": "Food & Beverage", "headquartersAddress": { - "addressLine1": "Lot 3A-01A, Level 3A", - "addressLine2": " Glo Damansara Shopping Mall", - "city": "Kuala Lumpur", - "state": null, - "postalCode": "60000", + "addressLine1": "456 Pine Street", + "addressLine2": null, + "city": "Seattle", + "state": "WA", + "postalCode": "98101", "country": { - "name": "Malaysia", - "code": "MY" + "name": "United States", + "code": "US" }, "poBoxNumber": null }, - "phone": 60102345234, - "website": "https://cardstack.com/", + "phone": 12065551234, + "website": "https://sweettoothseattle.com", "stockSymbol": null, - "description": null, - "thumbnailURL": null + "description": "Family-owned bakery specializing in custom cakes and artisanal pastries. Looking to expand online ordering and social media presence.", + "thumbnailURL": "https://example.com/sweet-tooth-logo.png" }, "meta": { "adoptsFrom": { diff --git a/packages/experiments-realm/Company/9203c173-3420-44b3-863d-90defd7c57c8.json b/packages/experiments-realm/Company/9203c173-3420-44b3-863d-90defd7c57c8.json index f4799e6d58..84b957bb91 100644 --- a/packages/experiments-realm/Company/9203c173-3420-44b3-863d-90defd7c57c8.json +++ b/packages/experiments-realm/Company/9203c173-3420-44b3-863d-90defd7c57c8.json @@ -2,25 +2,25 @@ "data": { "type": "card", "attributes": { - "name": "Innovative Tech Solutions", - "industry": "Technology", + "name": "Fitness First Gym", + "industry": "Health & Fitness", "headquartersAddress": { - "addressLine1": "123 Innovation Drive", - "addressLine2": "Suite 400", - "city": "San Francisco", - "state": "California", - "postalCode": "94105", + "addressLine1": "789 Athletic Avenue", + "addressLine2": "Building B", + "city": "Seattle", + "state": "WA", + "postalCode": "98102", "country": { "name": "United States", "code": "US" }, "poBoxNumber": null }, - "phone": 14155552671, - "website": "https://innovativetechsolutions.com/", - "stockSymbol": "ITS", - "description": "A leading provider of cutting-edge AI and cloud solutions for enterprises worldwide.", - "thumbnailURL": "https://picsum.photos/id/500/200/300" + "phone": 12065555678, + "website": "https://fitnessfirstgym.com", + "stockSymbol": null, + "description": "Modern fitness center with 3 locations. Needs help with membership campaigns and class scheduling system.", + "thumbnailURL": "https://example.com/fitness-first-logo.png" }, "meta": { "adoptsFrom": { diff --git a/packages/experiments-realm/Company/b92a3376-a258-4000-9e1f-ce21213c355b.json b/packages/experiments-realm/Company/b92a3376-a258-4000-9e1f-ce21213c355b.json new file mode 100644 index 0000000000..94fb6b43e0 --- /dev/null +++ b/packages/experiments-realm/Company/b92a3376-a258-4000-9e1f-ce21213c355b.json @@ -0,0 +1,32 @@ +{ + "data": { + "type": "card", + "attributes": { + "name": "Green Thumb Garden Center", + "industry": "Retail - Garden & Nursery", + "headquartersAddress": { + "addressLine1": "567 Garden Way", + "addressLine2": null, + "city": "Bellevue", + "state": "WA", + "postalCode": "98004", + "country": { + "name": "United States", + "code": "US" + }, + "poBoxNumber": null + }, + "phone": 14255553456, + "website": "https://greenthumbgarden.com", + "stockSymbol": null, + "description": "Garden center and nursery wanting to launch seasonal marketing campaigns and e-commerce platform.", + "thumbnailURL": "https://example.com/green-thumb-logo.png" + }, + "meta": { + "adoptsFrom": { + "module": "../crm/company", + "name": "Company" + } + } + } +} \ No newline at end of file diff --git a/packages/experiments-realm/Company/e1856419-27b0-4ce3-98fe-759d21c7144f.json b/packages/experiments-realm/Company/e1856419-27b0-4ce3-98fe-759d21c7144f.json index 8eb9a9d14a..5ef881afa5 100644 --- a/packages/experiments-realm/Company/e1856419-27b0-4ce3-98fe-759d21c7144f.json +++ b/packages/experiments-realm/Company/e1856419-27b0-4ce3-98fe-759d21c7144f.json @@ -2,25 +2,25 @@ "data": { "type": "card", "attributes": { - "name": "Tech Innovators Japan", - "industry": "Technology", + "name": "Paws Pet Clinic", + "industry": "Veterinary Services", "headquartersAddress": { - "addressLine1": "2-1-1 Otemachi", - "addressLine2": "Chiyoda-ku", - "city": "Tokyo", - "state": null, - "postalCode": "100-0004", + "addressLine1": "234 Veterinary Lane", + "addressLine2": null, + "city": "Seattle", + "state": "WA", + "postalCode": "98103", "country": { - "name": "Japan", - "code": "JP" + "name": "United States", + "code": "US" }, "poBoxNumber": null }, - "phone": 81312345678, - "website": "https://techinnovators.jp/", - "stockSymbol": "", - "description": "", - "thumbnailURL": "" + "phone": 12065559012, + "website": "https://pawspetclinic.com", + "stockSymbol": null, + "description": "Veterinary clinic seeking to improve online appointment booking and pet owner communication systems.", + "thumbnailURL": "https://example.com/paws-clinic-logo.png" }, "meta": { "adoptsFrom": { diff --git a/packages/experiments-realm/Company/eb6a7c2d-6c94-4e42-aa01-c5823fb5af9a.json b/packages/experiments-realm/Company/eb6a7c2d-6c94-4e42-aa01-c5823fb5af9a.json new file mode 100644 index 0000000000..8169b77e00 --- /dev/null +++ b/packages/experiments-realm/Company/eb6a7c2d-6c94-4e42-aa01-c5823fb5af9a.json @@ -0,0 +1,32 @@ +{ + "data": { + "type": "card", + "attributes": { + "name": "TechFlow Solutions", + "industry": "Software & Technology", + "headquartersAddress": { + "addressLine1": "220 Startup Avenue", + "addressLine2": "WeWork Floor 3", + "city": "Seattle", + "state": "WA", + "postalCode": "98104", + "country": { + "name": "United States", + "code": "US" + }, + "poBoxNumber": null + }, + "phone": 12065554444, + "website": "https://techflow.io", + "stockSymbol": null, + "description": "Early-stage startup developing productivity tools for remote teams. Looking to improve their market presence and lead generation through digital marketing.", + "thumbnailURL": "https://example.com/techflow-logo.png" + }, + "meta": { + "adoptsFrom": { + "module": "../crm/company", + "name": "Company" + } + } + } +} \ No newline at end of file diff --git a/packages/experiments-realm/Customer/0c71bda7-f4d8-451a-97cb-567a8fa31763.json b/packages/experiments-realm/Customer/0c71bda7-f4d8-451a-97cb-567a8fa31763.json new file mode 100644 index 0000000000..e5693caa21 --- /dev/null +++ b/packages/experiments-realm/Customer/0c71bda7-f4d8-451a-97cb-567a8fa31763.json @@ -0,0 +1,68 @@ +{ + "data": { + "type": "card", + "attributes": { + "firstName": "Emily", + "lastName": "Chen", + "position": "Head Veterinarian", + "department": "Medical", + "primaryEmail": "dr.chen@pawspetclinic.com", + "secondaryEmail": "emilychen.vet@gmail.com", + "phoneMobile": { + "phoneNumber": { + "number": "2065553210", + "countryCode": "1" + }, + "type": { + "index": 0, + "label": "Mobile", + "color": null, + "colorScheme": { + "foregroundColor": null, + "backgroundColor": null + } + } + }, + "phoneOffice": { + "phoneNumber": { + "number": "2065559012", + "countryCode": "1" + }, + "type": { + "index": 2, + "label": "Work", + "color": null, + "colorScheme": { + "foregroundColor": null, + "backgroundColor": null + } + } + }, + "socialLinks": [ + { + "label": "LinkedIn", + "value": "linkedin.com/in/dr-emily-chen-vet" + }, + { + "label": "X", + "value": "@DrEmilyPaws" + } + ], + "description": "Owner and lead veterinarian at Paws Pet Clinic", + "thumbnailURL": "https://images.pexels.com/photos/774909/pexels-photo-774909.jpeg" + }, + "relationships": { + "company": { + "links": { + "self": "../Company/e1856419-27b0-4ce3-98fe-759d21c7144f" + } + } + }, + "meta": { + "adoptsFrom": { + "module": "../crm/customer", + "name": "Customer" + } + } + } +} \ No newline at end of file diff --git a/packages/experiments-realm/Customer/0e5aec99-798b-4417-9426-a338432e0ee5.json b/packages/experiments-realm/Customer/0e5aec99-798b-4417-9426-a338432e0ee5.json deleted file mode 100644 index 75f0060db3..0000000000 --- a/packages/experiments-realm/Customer/0e5aec99-798b-4417-9426-a338432e0ee5.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "data": { - "type": "card", - "attributes": { - "firstName": "Elma", - "lastName": "Odsey", - "position": "Head of Recruitment", - "department": "app", - "primaryEmail": "elma@gmail.com", - "secondaryEmail": "elmaodsey@gmail.com", - "phoneMobile": { - "type": "mobile", - "country": 6, - "area": 10, - "number": 3810923 - }, - "phoneOffice": { - "type": "office", - "country": 615, - "area": 724, - "number": 3789 - }, - "socialLinks": [ - { - "label": "LinkedIn", - "value": "https://www.google.com/" - }, - { - "label": "X", - "value": "https://www.google.com/" - } - ], - "description": null, - "thumbnailURL": "https://images.pexels.com/photos/1624229/pexels-photo-1624229.jpeg?auto=compress&cs=tinysrgb&w=300&h=300&dpr=2" - }, - "relationships": { - "company": { - "links": { - "self": "../Company/9203c173-3420-44b3-863d-90defd7c57c8" - } - } - }, - "meta": { - "adoptsFrom": { - "module": "../crm/customer", - "name": "Customer" - } - } - } -} diff --git a/packages/experiments-realm/Customer/1274acf3-5b66-4373-89a2-fe8106c3d586.json b/packages/experiments-realm/Customer/1274acf3-5b66-4373-89a2-fe8106c3d586.json new file mode 100644 index 0000000000..9ea1fa452e --- /dev/null +++ b/packages/experiments-realm/Customer/1274acf3-5b66-4373-89a2-fe8106c3d586.json @@ -0,0 +1,68 @@ +{ + "data": { + "type": "card", + "attributes": { + "firstName": "Sarah", + "lastName": "Baker", + "position": "Owner", + "department": "Management", + "primaryEmail": "sarah@sweettoothseattle.com", + "secondaryEmail": "sarahbaker.personal@gmail.com", + "phoneMobile": { + "phoneNumber": { + "number": "2065557890", + "countryCode": "1" + }, + "type": { + "index": 0, + "label": "Mobile", + "color": null, + "colorScheme": { + "foregroundColor": null, + "backgroundColor": null + } + } + }, + "phoneOffice": { + "phoneNumber": { + "number": "2065551234", + "countryCode": "1" + }, + "type": { + "index": 1, + "label": "Office", + "color": null, + "colorScheme": { + "foregroundColor": null, + "backgroundColor": null + } + } + }, + "socialLinks": [ + { + "label": "LinkedIn", + "value": "linkedin.com" + }, + { + "label": "X", + "value": "x.com" + } + ], + "description": "Owner and head pastry chef at Sweet Tooth Bakery", + "thumbnailURL": "https://images.pexels.com/photos/415829/pexels-photo-415829.jpeg" + }, + "relationships": { + "company": { + "links": { + "self": "../Company/141f3e15-cfd5-4b61-bd4c-37ea31dbeeab" + } + } + }, + "meta": { + "adoptsFrom": { + "module": "../crm/customer", + "name": "Customer" + } + } + } +} \ No newline at end of file diff --git a/packages/experiments-realm/Customer/67e87a6c-00d0-4c48-9318-f0c96daa4cae.json b/packages/experiments-realm/Customer/67e87a6c-00d0-4c48-9318-f0c96daa4cae.json deleted file mode 100644 index d89c891f6b..0000000000 --- a/packages/experiments-realm/Customer/67e87a6c-00d0-4c48-9318-f0c96daa4cae.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "data": { - "type": "card", - "attributes": { - "firstName": "Sophia", - "lastName": "Nguyen", - "position": "Sale Manager", - "department": "app", - "primaryEmail": "sophia@gmail.com", - "secondaryEmail": "sophiaNguyen@gmail.com", - "phoneMobile": { - "type": "mobile", - "country": 1, - "area": 510, - "number": 5550145 - }, - "phoneOffice": { - "type": "office", - "country": 1, - "area": 510, - "number": 5552345 - }, - "socialLinks": [ - { - "label": "LinkedIn", - "value": "https://www.google.com/" - }, - { - "label": "X", - "value": "https://www.google.com/" - } - ], - "description": null, - "thumbnailURL": "https://images.pexels.com/photos/4974417/pexels-photo-4974417.jpeg?auto=compress&cs=tinysrgb&w=300&h=300&dpr=2" - }, - "relationships": { - "company": { - "links": { - "self": "../Company/9203c173-3420-44b3-863d-90defd7c57c8" - } - } - }, - "meta": { - "adoptsFrom": { - "module": "../crm/customer", - "name": "Customer" - } - } - } -} diff --git a/packages/experiments-realm/Customer/dddaeabf-1e95-480c-b158-0873e31fc66c.json b/packages/experiments-realm/Customer/dddaeabf-1e95-480c-b158-0873e31fc66c.json new file mode 100644 index 0000000000..f4cf0f7d2b --- /dev/null +++ b/packages/experiments-realm/Customer/dddaeabf-1e95-480c-b158-0873e31fc66c.json @@ -0,0 +1,68 @@ +{ + "data": { + "type": "card", + "attributes": { + "firstName": "Mike", + "lastName": "Johnson", + "position": "General Manager", + "department": "Operations", + "primaryEmail": "mike.j@fitnessfirstgym.com", + "secondaryEmail": "mikej.fitness@gmail.com", + "phoneMobile": { + "phoneNumber": { + "number": "2065559876", + "countryCode": "1" + }, + "type": { + "index": 0, + "label": "Mobile", + "color": null, + "colorScheme": { + "foregroundColor": null, + "backgroundColor": null + } + } + }, + "phoneOffice": { + "phoneNumber": { + "number": "2065555678", + "countryCode": "1" + }, + "type": { + "index": 1, + "label": "Office", + "color": null, + "colorScheme": { + "foregroundColor": null, + "backgroundColor": null + } + } + }, + "socialLinks": [ + { + "label": "LinkedIn", + "value": "linkedin.com/in/mike-johnson-fitness" + }, + { + "label": "X", + "value": "x.com" + } + ], + "description": "Manages all three Fitness First locations", + "thumbnailURL": "https://images.pexels.com/photos/220453/pexels-photo-220453.jpeg" + }, + "relationships": { + "company": { + "links": { + "self": "../Company/9203c173-3420-44b3-863d-90defd7c57c8" + } + } + }, + "meta": { + "adoptsFrom": { + "module": "../crm/customer", + "name": "Customer" + } + } + } +} \ No newline at end of file diff --git a/packages/experiments-realm/Deal/4fdd3053-14f1-4800-827f-d3e2a5c44ae8.json b/packages/experiments-realm/Deal/4fdd3053-14f1-4800-827f-d3e2a5c44ae8.json index 4da602d5bb..9f37d8cb7c 100644 --- a/packages/experiments-realm/Deal/4fdd3053-14f1-4800-827f-d3e2a5c44ae8.json +++ b/packages/experiments-realm/Deal/4fdd3053-14f1-4800-827f-d3e2a5c44ae8.json @@ -2,7 +2,7 @@ "data": { "type": "card", "attributes": { - "name": "Demo Deal Name", + "name": "TechFlow Digital Marketing Package", "status": { "index": 1, "label": "Proposal", @@ -13,69 +13,69 @@ } }, "priority": { - "index": 2, - "label": "High", - "color": "#FFF3E0", + "index": 1, + "label": "Medium Priority", + "color": null, "colorScheme": { "foregroundColor": "#000000", - "backgroundColor": "#FFF3E0" + "backgroundColor": "#FFF0B3" } }, - "closeDate": "2024-12-18", + "closeDate": "2024-04-30", "currentValue": { - "amount": 20000, + "amount": 15000, "currency": { "code": "USD" } }, "predictedRevenue": { - "amount": 300000, + "amount": 180000, "currency": { - "code": null + "code": "USD" } }, - "healthScore": 80, - "notes": "Finalize venue contract and confirm catering options to lock in current pricing", + "healthScore": 75, + "notes": "Startup needs complete digital presence setup. Initial meeting showed strong interest in SEO and content marketing. Budget confirmed by CEO.", "valueBreakdown": [ { - "name": "Venue Rental", + "name": "Website Optimization", "value": { - "amount": 100000, + "amount": 40000, "currency": { - "code": null + "code": "USD" } } }, { - "name": "Catering", + "name": "SEO Package", "value": { - "amount": 75000, + "amount": 60000, "currency": { "code": "USD" } } }, { - "name": "AV Equiipment", + "name": "Content Marketing", "value": { "amount": 50000, "currency": { - "code": null + "code": "USD" } } }, { - "name": "Staff and Management", + "name": "Social Media Management", "value": { - "amount": 25000, + "amount": 30000, "currency": { - "code": null + "code": "USD" } } } ], - "description": null, - "thumbnailURL": "https://picsum.photos/id/500/200/300" + "description": "", + "thumbnailURL": "https://picsum.photos/id/3/200/300" }, "relationships": { "account": { @@ -95,7 +95,7 @@ }, "stakeholders.0": { "links": { - "self": "../Customer/0e5aec99-798b-4417-9426-a338432e0ee5" + "self": "../Lead/4e70a791-dd4e-4b39-99a1-bb8070392437" } } }, diff --git a/packages/experiments-realm/Deal/50b65110-8335-4391-84ec-28cc9c0f22b3.json b/packages/experiments-realm/Deal/50b65110-8335-4391-84ec-28cc9c0f22b3.json index 5516b1dc1f..8771d7aac7 100644 --- a/packages/experiments-realm/Deal/50b65110-8335-4391-84ec-28cc9c0f22b3.json +++ b/packages/experiments-realm/Deal/50b65110-8335-4391-84ec-28cc9c0f22b3.json @@ -2,48 +2,76 @@ "data": { "type": "card", "attributes": { - "name": "", + "name": "Paws Pet Clinic Website & Booking System", "status": { - "index": 1, - "label": "Proposal", + "index": 2, + "label": "Negotiation", "color": null, "colorScheme": { "foregroundColor": "#000000", - "backgroundColor": "var(--boxel-lilac)" + "backgroundColor": "#FFF3E0" } }, "priority": { - "index": null, - "label": null, + "index": 2, + "label": "High Priority", "color": null, "colorScheme": { - "foregroundColor": null, - "backgroundColor": null + "foregroundColor": "#000000", + "backgroundColor": "#FFE0B2" } }, - "closeDate": null, + "closeDate": "2024-05-30", "currentValue": { - "amount": 100000, + "amount": 45000, "currency": { "code": "USD" } }, "predictedRevenue": { - "amount": null, + "amount": 120000, "currency": { - "code": null + "code": "USD" } }, - "healthScore": null, - "notes": "", - "valueBreakdown": [], - "description": null, - "thumbnailURL": null + "healthScore": 80, + "notes": "Veterinary clinic needs modern booking system integration and website redesign. Multiple stakeholders involved in decision making.", + "valueBreakdown": [ + { + "name": "Website Redesign", + "value": { + "amount": 35000, + "currency": { + "code": "USD" + } + } + }, + { + "name": "Booking System Integration", + "value": { + "amount": 45000, + "currency": { + "code": "USD" + } + } + }, + { + "name": "Mobile App Development", + "value": { + "amount": 40000, + "currency": { + "code": "USD" + } + } + } + ], + "description": "", + "thumbnailURL": "https://picsum.photos/id/169/200/300" }, "relationships": { "account": { "links": { - "self": null + "self": "../Account/c78762d3-9ab5-4f62-9370-d0b6a0261b08" } }, "document": { @@ -53,12 +81,12 @@ }, "primaryStakeholder": { "links": { - "self": null + "self": "../Lead/1dbcc3e8-fe3c-4c4a-ba66-ff7d637a7358" } }, - "stakeholders": { + "stakeholders.0": { "links": { - "self": null + "self": "../Lead/9d7b2f20-c7da-4ddc-8e77-b75d88c97b48" } } }, diff --git a/packages/experiments-realm/Deal/f0d769bd-e347-4203-9a96-89332cfba0e2.json b/packages/experiments-realm/Deal/f0d769bd-e347-4203-9a96-89332cfba0e2.json index c6c44d92f7..7bcc0641ae 100644 --- a/packages/experiments-realm/Deal/f0d769bd-e347-4203-9a96-89332cfba0e2.json +++ b/packages/experiments-realm/Deal/f0d769bd-e347-4203-9a96-89332cfba0e2.json @@ -2,7 +2,7 @@ "data": { "type": "card", "attributes": { - "name": "", + "name": "Fitness First Membership Campaign & Scheduling System", "status": { "index": 3, "label": "Closed Won", @@ -13,37 +13,65 @@ } }, "priority": { - "index": null, - "label": null, + "index": 2, + "label": "High Priority", "color": null, "colorScheme": { - "foregroundColor": null, - "backgroundColor": null + "foregroundColor": "#000000", + "backgroundColor": "#FFE0B2" } }, - "closeDate": null, + "closeDate": "2024-03-15", "currentValue": { - "amount": null, + "amount": 85000, "currency": { - "code": null + "code": "USD" } }, "predictedRevenue": { - "amount": null, + "amount": 250000, "currency": { - "code": null + "code": "USD" } }, - "healthScore": null, - "notes": null, - "valueBreakdown": [], - "description": null, - "thumbnailURL": null + "healthScore": 90, + "notes": "Multi-location gym chain needs comprehensive digital solution. Project includes membership campaign system, class scheduling platform, and mobile app integration. Strong potential for recurring revenue.", + "valueBreakdown": [ + { + "name": "Membership Campaign System", + "value": { + "amount": 45000, + "currency": { + "code": "USD" + } + } + }, + { + "name": "Class Scheduling Platform", + "value": { + "amount": 30000, + "currency": { + "code": "USD" + } + } + }, + { + "name": "Mobile App Integration", + "value": { + "amount": 10000, + "currency": { + "code": "USD" + } + } + } + ], + "description": "", + "thumbnailURL": "https://picsum.photos/id/416/200/300" }, "relationships": { "account": { "links": { - "self": null + "self": "../Account/be0192c4-e566-40ee-8a57-f88f7ab37e53" } }, "document": { @@ -53,12 +81,12 @@ }, "primaryStakeholder": { "links": { - "self": null + "self": "../Customer/dddaeabf-1e95-480c-b158-0873e31fc66c" } }, - "stakeholders": { + "stakeholders.0": { "links": { - "self": null + "self": "../Customer/dddaeabf-1e95-480c-b158-0873e31fc66c" } } }, diff --git a/packages/experiments-realm/Lead/4e70a791-dd4e-4b39-99a1-bb8070392437.json b/packages/experiments-realm/Lead/4e70a791-dd4e-4b39-99a1-bb8070392437.json new file mode 100644 index 0000000000..e908433be9 --- /dev/null +++ b/packages/experiments-realm/Lead/4e70a791-dd4e-4b39-99a1-bb8070392437.json @@ -0,0 +1,69 @@ +{ + "data": { + "type": "card", + "attributes": { + "firstName": "John", + "lastName": "Smith", + "position": "Marketing Manager", + "department": "Marketing", + "primaryEmail": "john.smith@newstartup.com", + "secondaryEmail": null, + "phoneMobile": { + "phoneNumber": { + "number": "2065551111", + "countryCode": "1" + }, + "type": { + "index": 0, + "label": "Mobile" + } + }, + "phoneOffice": { + "phoneNumber": { + "number": null, + "countryCode": null + }, + "type": { + "index": null, + "label": null + } + }, + "socialLinks": [ + { + "label": "LinkedIn", + "value": "linkedin.com/in/johnsmith" + }, + { + "label": "X", + "value": "@johnsmith" + } + ], + "statusTag": { + "lightColor": "#93C5FD", + "darkColor": "#3B82F6", + "index": null, + "label": "Lead", + "color": null, + "colorScheme": { + "foregroundColor": null, + "backgroundColor": null + } + }, + "description": "Showed interest through website contact form", + "thumbnailURL": "https://images.pexels.com/photos/2379004/pexels-photo-2379004.jpeg" + }, + "relationships": { + "company": { + "links": { + "self": "../Company/eb6a7c2d-6c94-4e42-aa01-c5823fb5af9a" + } + } + }, + "meta": { + "adoptsFrom": { + "module": "../crm/lead", + "name": "Lead" + } + } + } +} \ No newline at end of file diff --git a/packages/experiments-realm/Representative/880c1d41-2563-43da-999d-ef577fa3eac9.json b/packages/experiments-realm/Representative/880c1d41-2563-43da-999d-ef577fa3eac9.json new file mode 100644 index 0000000000..8d5d87ecda --- /dev/null +++ b/packages/experiments-realm/Representative/880c1d41-2563-43da-999d-ef577fa3eac9.json @@ -0,0 +1,54 @@ +{ + "data": { + "type": "card", + "attributes": { + "firstName": "Alex", + "lastName": "Martinez", + "position": "Account Manager", + "department": "Sales", + "primaryEmail": "alex.m@ourcompany.com", + "secondaryEmail": null, + "phoneMobile": { + "phoneNumber": { + "number": "2065553333", + "countryCode": "1" + }, + "type": { + "index": 0, + "label": "Mobile" + } + }, + "phoneOffice": { + "phoneNumber": { + "number": null, + "countryCode": null + }, + "type": { + "index": null, + "label": null + } + }, + "socialLinks": [ + { + "label": "LinkedIn", + "value": "linkedin.com/in/alexmartinez" + } + ], + "description": "Manages accounts in the Seattle region", + "thumbnailURL": "https://images.pexels.com/photos/2379005/pexels-photo-2379005.jpeg" + }, + "relationships": { + "company": { + "links": { + "self": null + } + } + }, + "meta": { + "adoptsFrom": { + "module": "../crm/representative", + "name": "Representative" + } + } + } +} \ No newline at end of file diff --git a/packages/host/app/resources/room.ts b/packages/host/app/resources/room.ts index 478e6262df..ed8c2dcd76 100644 --- a/packages/host/app/resources/room.ts +++ b/packages/host/app/resources/room.ts @@ -141,6 +141,10 @@ export class RoomResource extends Resource