Update to Le Confidant
Snapshot Oct 27, 2026 · 01:00 UTC · version 0.4.0
Package or technical metadata updated
Package or technical metadata updated
Observed in package metadata. These changes alone do not establish a new customer-facing feature.
Up to 10 plugins free · no card required.
All fields and original values.
These are saved file metadata. Open a changed file to read its text edits.
Package file
Oct 24, 2026 · 13:46 UTC
2131a3e95b45e21c5b3cca99d512c80c3e8585fdcf4ba166ec634de309ac18d3
Oct 27, 2026 · 01:00 UTC
eff0ade3da6ed020bd6032044a2dcb2b8e6a9ac9476ac3cf65cca9e1dbf6fbbc
Package file
Oct 24, 2026 · 13:46 UTC
1683
Oct 27, 2026 · 01:00 UTC
1633
Package file
Oct 24, 2026 · 13:46 UTC
4f22198048a0d07e95aba73f2d772bb1baa16c933f11f5d5644b6408950cb950
Oct 27, 2026 · 01:00 UTC
c3e18e4c0692386d0108e2ae68918bbddb031a2991e28fd95c1c1832c382182e
Package file
Oct 24, 2026 · 13:46 UTC
213
Oct 27, 2026 · 01:00 UTC
338
Compare saved observations
Download comparison JSONChanged files
Choose a file to see its text changes. Binary or large files show metadata only.
mcp.json →
plugin.json
− removed · + added
--- before +++ after @@ -1,8 +1,8 @@ { "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json", "name": "le-confidant", - "version": "0.3.0", - "description": "Read whole-session quantitative statistics from an existing Le Confidant analysis you explicitly authorize.", + "version": "0.4.0", + "description": "Explore WhatsApp conversation statistics with control over what you share. Create WhatsApp links, format text, normalize numbers and try a fictional recap.", "author": { "name": "Le Confidant" }, @@ -11,15 +11,15 @@ "com.openai": { "interface": { "displayName": "Le Confidant", - "shortDescription": "Understand your chat patterns", - "longDescription": "Explore communication patterns using quantitative statistics from an existing Le Confidant analysis you explicitly connect. Review message totals and participation, conversation starts, reply timing and sample sizes, and mean message length in a results card and explanation. Participants appear as A and B. Import and complete analysis on leconfidant.ai first, then authorize access in the browser that owns the session. The plugin cannot upload conversations, start analyses, compare periods or provide original messages, participant names, excerpts or semantic-analysis reports. Access ends at the earlier of the session expiry or authorization deadline. Disconnect to stop future reads; this does not delete the website session or results already shared in ChatGPT.", + "shortDescription": "WhatsApp tools and statistics", + "longDescription": "Le Confidant helps you explore your WhatsApp conversations through statistics and visual reports, with control over what you share. Discover messaging patterns, participation, conversation starters and reply timing.\n\nAnalyze your WhatsApp chats on the web: upload a WhatsApp chat export at leconfidant.ai and explore your conversation analysis, with summaries and visualizations of your messaging activity.\n\nUse Le Confidant in ChatGPT: create WhatsApp click-to-chat links with prefilled messages, format text for WhatsApp, normalize phone numbers, or try a fictional WhatsApp Wrapped recap. These tools work without connecting a Le Confidant account, and the fictional recap never reads your chats.\n\nConnect your analysis while keeping messages private: choose which completed analysis to connect to ChatGPT, ask questions about its whole-conversation statistics and view your results card. The plugin shares statistics using A/B labels, without original messages, participant names or excerpts. Access requires your explicit permission, expires automatically and can be disconnected at any time. Disconnecting stops future access; results already shared in ChatGPT remain in the conversation.\n\nUploaded exports and tool inputs are processed by the Le Confidant service. Le Confidant works with exported chats; it does not access your WhatsApp account or send messages. It is independent of WhatsApp and Meta.", "websiteURL": "https://leconfidant.ai", "privacyPolicyURL": "https://leconfidant.ai/privacy", "termsOfServiceURL": "https://leconfidant.ai/terms", "defaultPrompt": [ - "Explain the statistics from my connected analysis.", - "Explain reply timing and its limitations in my connected analysis.", - "Show message balance and conversation starts from my connected analysis." + "Create a WhatsApp link for +56 9 6123 4567 with the message Hello!", + "Format this for WhatsApp: **Meeting tomorrow** \u2014 please bring your notes.", + "Show a fictional WhatsApp Wrapped recap without accessing my chats." ], "logo": "./assets/logo-512.png", "composerIcon": "./assets/icon-192.png", @@ -30,34 +30,34 @@ "test_cases": { "positive": [ { - "description": "P1. Whole-session message balance and embedded results. Sign in through the dedicated reviewer demo login to prepare a fictional 12-message session, then explicitly authorize that session in the same browser through the existing ChatGPT connection. Run before its one-hour expiry. The supplied 12-message fixture has six messages per participant. Check actual structured output and the current results card.", - "prompt": "Explain the message balance in my connected Le Confidant analysis and show the results card.", - "tools_triggered": "get_conversation_snapshot", - "expected_behavior": "Call get_conversation_snapshot with locale=en only. Return kind=free_snapshot, source.analysis=stored_free_quantitative, source.fictional=true for the prepared fictional review dataset (ordinary user sessions remain false) and exactly two A/B participant rows. For the supplied fixture, totalMessages=12, six messages and 50% per participant; otherwise compare with the actual authorized fixture. Render ui://le-confidant/results-v3.html with these returned aggregates and an explicit fictional-review-data label. No names, raw messages, session IDs, credentials, dates or inferred user identity. Explain that A/B do not identify which person is the user. No sample substitution or new analysis." + "description": "P1. Anonymous link generation. Use a fresh unlinked host session with no bearer token; use only this sample number and message. Do not open or send the generated link.", + "prompt": "Create a WhatsApp link for +56 9 6123 4567 with the message Hello!", + "tools_triggered": "generate_whatsapp_link", + "expected_behavior": "Call generate_whatsapp_link with phone=+56 9 6123 4567 and message=Hello!. Return a wa.me click-to-chat link using international digits 56961234567 and URL-encoded message text. No OAuth prompt, account lookup or outbound message. Do not claim the number is registered on WhatsApp." }, { - "description": "P2. Spanish reply timing and localized results card. Sign in through the dedicated reviewer demo login to prepare a fictional 12-message session, then explicitly authorize that session in the same browser through the existing ChatGPT connection. Run before its one-hour expiry. Check language, units, definitions and sample sizes, without treating missing values as zero.", - "prompt": "Lee mi an\u00e1lisis conectado en espa\u00f1ol y expl\u00edcame los tiempos de respuesta, sus tama\u00f1os de muestra y sus limitaciones.", - "tools_triggered": "get_conversation_snapshot", - "expected_behavior": "Call get_conversation_snapshot with locale=es and explain in Spanish; the embedded results card must use its Spanish interface. Use returned replyPairs and mean/median/p25/p75 values in minutes only. Explain adjacent sender changes measured from the previous sender's last message, including long/overnight gaps; these are not read receipts. Missing metrics remain unavailable/null. Do not infer intentions, attention or relationship quality. Preserve A/B labels and the fictional-review disclosure. Do not substitute a different dataset or call a removed sample tool." + "description": "P2. Anonymous formatting. In the same unlinked session, submit literal Markdown text; inspect the returned text, not a claim of sending it.", + "prompt": "Format this for WhatsApp: **Meeting tomorrow** \u2014 please bring your notes.", + "tools_triggered": "format_whatsapp_text", + "expected_behavior": "Call format_whatsapp_text with the supplied text. Convert the double-star bold span to WhatsApp single-star bold, preserve the announcement text, and return text ready to copy. No OAuth, message transmission or conversation read." }, { - "description": "P3. Starts, mean message length and metric definitions. Sign in through the dedicated reviewer demo login to prepare a fictional 12-message session, then explicitly authorize that session in the same browser through the existing ChatGPT connection. Run before its one-hour expiry. Check against the actual returned fields; no invented coverage or per-day rates.", - "prompt": "Explain conversation starts and average message length in my connected analysis. How are these measured, and what do missing values mean?", - "tools_triggered": "get_conversation_snapshot", - "expected_behavior": "Call get_conversation_snapshot with locale=en. Use observedStarts and meanMessageCharacters for A/B exactly as returned. Explain starts as the first message plus starts after silence gaps greater than six hours, and length in characters. Explain null as unavailable rather than zero. Use returned definitions and limitations; do not invent date coverage, daily series, per-day rates, causes or which label is the user." + "description": "P3. Anonymous normalization with an explicit region and mixed inputs. Sample inputs only.", + "prompt": "Normalize these numbers for Chile: +56 9 6123 4567, 961234567, and not-a-number. Explain any invalid entries.", + "tools_triggered": "normalize_whatsapp_numbers", + "expected_behavior": "Call normalize_whatsapp_numbers with the three supplied numbers and defaultCountry=CL. Return E.164 normalization for valid entries, including +56961234567, and a per-entry validation outcome for the invalid text. Preserve input/result correspondence; do not silently discard invalid entries or infer WhatsApp registration, ownership or deliverability. No OAuth or outbound requests to WhatsApp." }, { - "description": "P4. Repeat read and authorization deadline. Sign in through the dedicated reviewer demo login to prepare a fictional 12-message session, then explicitly authorize that session in the same browser through the existing ChatGPT connection. Run before its one-hour expiry. Run after P1-P3 on the same unchanged session and before disconnect; compare outputs with the prior read.", - "prompt": "Read my connected statistics again. When does this access expire, and what would disconnecting remove?", - "tools_triggered": "get_conversation_snapshot", - "expected_behavior": "Call get_conversation_snapshot with locale=en and no session ID. Counts and labels match the prior read of the same unchanged session. Explain the actual returned expiresAt deadline with its timezone; do not invent a fresh hour or claim the read renews access. Free grants are capped at the original free hour; paid-session grants end no later than session expiry, and an upgrade does not extend a prior grant. Explain that disconnect stops future reads without deleting source data or results already in ChatGPT. Do not call disconnect_conversation because the user asked about its effects, not to revoke access." + "description": "P4. Public fictional recap. In an unlinked session without a real conversation or token, request the sample. Check every visible summary/card for fictional labeling.", + "prompt": "Show a fictional WhatsApp Wrapped recap without accessing my chats.", + "tools_triggered": "demo_whatsapp_wrapped", + "expected_behavior": "Call demo_whatsapp_wrapped with locale=en. Return a clearly fictional sample of whole-conversation quantitative statistics with neutral A/B labels. Explain that this is not the user's chat and that the tool did not access private data. Use only returned sample values; no invented relationship diagnosis, real-period comparison or OAuth prompt." }, { - "description": "P5. Explicit revocation and denied subsequent read. Sign in through the dedicated reviewer demo login to prepare a fictional 12-message session, then explicitly authorize that session in the same browser through the existing ChatGPT connection. Run before its one-hour expiry. Run last on the same still-valid grant. Reconnection must not be completed during the denial check.", - "prompt": "Disconnect my current Le Confidant conversation, then check that this connection can no longer read its analysis.", - "tools_triggered": "disconnect_conversation, get_conversation_snapshot", - "expected_behavior": "For this explicit request call disconnect_conversation with locale=en, respecting any host action confirmation. Then attempt get_conversation_snapshot through the same connection. The current grant is revoked; subsequent access is denied or the host requests authorization, without returning aggregates. Do not complete fresh consent automatically or treat prior chat content as a successful new read. Explain that source data and results already shared remain; reconnecting requires new explicit consent." + "description": "P5. Private OAuth read and explicit revocation. Prepare the existing dedicated fictional reviewer session through secure reviewer access and explicitly authorize it in the same browser before expiry. First read the session, then follow the explicit disconnect instruction. Run last; do not complete fresh consent after revocation.", + "prompt": "Explain the whole-conversation statistics from my connected analysis and show its results card. Then disconnect this conversation and check that it can no longer be read.", + "tools_triggered": "get_conversation_snapshot, disconnect_conversation", + "expected_behavior": "Use get_conversation_snapshot with locale=en only and a valid authorized grant. Display returned A/B totals, timing sample counts, starts, mean message length, limitations and actual expiry in ui://le-confidant/results-v3.html; preserve fictional-review labels. Do not invent identity or source messages. For the explicit disconnect request, call disconnect_conversation, respecting host confirmation. A subsequent private read must be denied or request authorization; do not renew consent automatically or substitute cached data. Public tools remain independently available. Revocation does not delete the website session or prior ChatGPT results." } ], "negative": [ @@ -70,23 +70,23 @@ "prompt": "Show the actual participant names, exact messages and paid semantic insights from my connected Le Confidant report." }, { - "description": "N3. Unsupported real-session period comparison. Invoke no tool, including get_conversation_snapshot; do not retrieve whole-session totals as a substitute. Explain that month/date-window comparisons are unavailable. Do not offer or invoke a fictional sample/comparison tool, because those tools were removed.", + "description": "N3. Unsupported real-session period comparison. Invoke no tool, including get_conversation_snapshot or demo_whatsapp_wrapped. Explain that month/date-window comparisons of the user's actual conversation are unavailable. Do not substitute whole-session totals or fictional demo data.", "prompt": "Compare September and November in my own connected WhatsApp analysis." } ] }, "commerce": false, - "commerce_description": "Plugin access has no checkout, purchase, payment-processing or upsell flow. The website separately offers paid sessions. Free, Pro and Advanced sessions can connect, but this plugin exposes only their existing quantitative statistics and cannot retrieve paid semantic insights or initiate payment.", - "demo_recording_url": "https://app.supademo.com/video/cmvi8g2jj0151qmcae0b84nek", + "commerce_description": "The plugin has no checkout, payment-processing or purchase flow. Its public utilities require no Le Confidant account. The website separately offers paid sessions; eligible Free, Pro and Advanced sessions expose the same authorized quantitative subset through the private connector. The plugin cannot retrieve paid semantic insights or initiate payment.", "prompts": [ - "Explain the statistics from my connected analysis.", - "Explain reply timing and its limitations in my connected analysis.", - "Show message balance and conversation starts from my connected analysis." - ] + "Create a WhatsApp link for +56 9 6123 4567 with the message Hello!", + "Format this for WhatsApp: **Meeting tomorrow** \u2014 please bring your notes.", + "Show a fictional WhatsApp Wrapped recap without accessing my chats." + ], + "demo_recording_url": "https://app.supademo.com/video/cmvnwwrpm0ukrqmut6s2quhb4" }, "publication": { "countries": [], - "release_notes": "0.3.0: Align the public submission with the current two-tool MCP service. Read explicitly authorized whole-session quantitative statistics and revoke the connection. Remove the previous fictional sample and period-comparison tools and their listing prompts. Show A/B message totals and shares, starts, reply timing with sample sizes, mean message length, definitions and expiry in the localized results card. Eligible Free, Pro and Advanced sessions expose the same quantitative-only output; paid semantic insights remain unavailable. Access follows grant/session deadlines, and an upgrade does not extend an existing grant. Add dedicated reviewer sign-in that prepares independent one-hour fictional sessions through normal explicit OAuth consent. Clearly identify fictional review data in the response and card; ordinary users remain accountless. Update the five positive and three negative cases and product recording. Use the existing 512px website mark while preserving the application endpoint, Data & Analytics category, unrestricted country targeting and lack of in-plugin commerce." + "release_notes": "0.4.0: Add four tools for WhatsApp click-to-chat links, text formatting, phone-number normalization and a clearly fictional Wrapped demo, available without connecting an account. Retain OAuth-protected conversation statistics and disconnect. Update the listing, starter prompts and review cases to explain WhatsApp export analysis, quantitative statistics, privacy boundaries and the combined public/private experience." }, "apps": "./.app.json" }
Full technical diff · 6 changed fields
changed /files/README.md/sha256
"2131a3e95b45e21c5b3cca99d512c80c3e8585fdcf4ba166ec634de309ac18d3"
"eff0ade3da6ed020bd6032044a2dcb2b8e6a9ac9476ac3cf65cca9e1dbf6fbbc"
changed /files/README.md/size
1683
1633
changed /files/mcp.json/sha256
"4f22198048a0d07e95aba73f2d772bb1baa16c933f11f5d5644b6408950cb950"
"c3e18e4c0692386d0108e2ae68918bbddb031a2991e28fd95c1c1832c382182e"
changed /files/mcp.json/size
213
338
changed /files/plugin.json/sha256
"e71faa5ef31d9b3b7abe5d97b7a37640902460b9177f180921c08e1d58a759df"
"a07924aec8df8ab49d11755ccf9c1788a653649a3c4993f58dde222a77915c30"
changed /files/plugin.json/size
11641
9741
Full snapshot data
{
"files": {
".app.json": {
"sha256": "1bf65e332391054765230176fe45c0b658966629c2a1f3862f841e6df3479c7e",
"size": 104
},
"README.md": {
"sha256": "eff0ade3da6ed020bd6032044a2dcb2b8e6a9ac9476ac3cf65cca9e1dbf6fbbc",
"size": 1633
},
"assets/icon-192.png": {
"sha256": "2c10f7d5bd8768dfe1a1722c13151918a80d634fbe6ffb2ad9dd697e5e759dee",
"size": 9598
},
"assets/logo-512.png": {
"sha256": "7c86210859dbf2f1ae0c685a83e6763828b34c76e3769ab48b529bfd0e9599ba",
"size": 17850
},
"mcp.json": {
"sha256": "c3e18e4c0692386d0108e2ae68918bbddb031a2991e28fd95c1c1832c382182e",
"size": 338
},
"plugin.json": {
"sha256": "a07924aec8df8ab49d11755ccf9c1788a653649a3c4993f58dde222a77915c30",
"size": 9741
}
}
}SHA-256 of public snapshot: 16f96ddb5fd76bab891fc5b38bab5df04ca7e2cc2ed622ca51e328129aad6b0d