Ignore a saved conversation that doesn't have the expected shape
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 84/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- typescript
Piste de recherche
Commencez par load() dans packages/widget/src/storage.ts, puis vérifiez comment init() dans packages/widget/src/widget.ts gère l’absence d’une conversation. Ajoutez des tests de stockage pour les structures et les messages invalides, ainsi qu’un test du widget pour {} ; l’issue indique le comportement attendu et les commandes. Le travail est terminé lorsque les données invalides sont supprimées, que les messages valides sont conservés, que le widget démarre avec son message de bienvenue et que le build, le typecheck, les tests et le changeset demandés sont achevés.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
The widget restores the last conversation from localStorage (the chatcops_conversation key, or chatcops_conversation_<siteId>). ConversationStorage.load() returns whatever JSON.parse gives, cast to StoredConversation (packages/widget/src/storage.ts, line 27), and init() uses it as it is (packages/widget/src/widget.ts, lines 185 to 191). When the key holds valid JSON of another shape, for example left by an older version or by another script on the same site, things break. Checked in Chrome with the widget built from dev:
{}or[]:init()throws aTypeError(messages is not iterable). The chat still opens, but without the welcome message, and withChatCops.init()the error reaches the page's own code.{"id":"x","messages":[{"foo":1}],"updatedAt":1}: no error, but the chat shows an empty message bubble.
What to do
Check the shape in load(). Return the conversation only when it has a string id and a messages array, and drop messages that don't have a role of user or assistant and string content. Anything else counts as no saved conversation: remove the key and start fresh.
Where to look
packages/widget/src/storage.ts(load, lines 23 to 31)packages/widget/src/widget.ts(lines 184 to 193)packages/widget/tests/storage.test.tsandwidget.test.ts
Acceptance criteria
-
load()returnsnulland removes the key when the stored value isn't an object with a stringidand amessagesarray - Messages without a
userorassistantrole or without stringcontentare dropped - With
{}or[]stored, the widget starts with its welcome message and no error - Tests in
storage.test.tsfor each case, and one inwidget.test.tsthatinit()doesn't throw with{}stored - Changeset for
@chatcops/widget(patch) -
pnpm -r build,pnpm -r typecheckandpnpm testpass
Want to work on this? Comment below and I'll assign it to you. Please take one issue at a time, branch off dev, and open your PR against dev with Closes #172. Setup notes (pnpm, build before test) are in CONTRIBUTING.md.
- Langage dominant
- TypeScript
- Étoiles
- 13
- Forks
- 7
- Merge moyen
- 3 h 41 min
- PR mergées (30 j)
- 155
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de codercops/chatcops
-
Document the pre-chat formPeut-être pris @masyarakatai l’a pris il y a 6 jours. Ouvertedocumentation good first issue hacktoberfest widget
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
codercops/chatcops#70 · 5 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
docs: update the providers page for openai-compatible, registerProvider and provider importsPeut-être pris @prakashNalla l’a pris il y a 1 jour. Ouvertedocumentation good first issue hacktoberfest website
Difficulté 3/5 1-2 jours Accessibilité débutants 76/100
codercops/chatcops#291 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
docs: add a protocol reference page for custom clientsPeut-être pris @kachamsiddarth l’a pris il y a 1 jour. Ouvertedocumentation good first issue hacktoberfest website
codercops/chatcops#286 · 2 commentaires · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
Create @chatcops/store-cloudflare (D1, KV and a Durable Object counter)Peut-être pris @bhushan4work l’a pris il y a 1 jour. Ouverteenhancement hacktoberfest help wanted server
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
codercops/chatcops#249 · 2 commentaires · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
Create @chatcops/store-sqlite, a store for single-server setupsPeut-être pris @srikar-naidu l’a pris il y a 1 jour. Ouverteenhancement hacktoberfest help wanted server
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
codercops/chatcops#247 · 3 commentaires · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de codercops/chatcops
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
maniator/verticopolis#1303 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 73/100
components-web-app/docs#297 ·
-
listFeatures/getFeatureExamples never return Kotlin examples for Android or server Kotlin SDKsOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
appwrite/mcp-for-docs#23 · 1 commentaire ·
-
`@vanilla-extract/turbopack-plugin`: "getImageSize is not a function" with Next.js 16.4.x when a `.css.ts` file imports an imagePeut-être pris @aevarOrigo l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
vanilla-extract-css/vanilla-extract#1799 · 1 commentaire ·
-
native
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
prime-radiant-inc/evener#4839 ·
Les mainteneurs répondent en général sous 1 jour