Tamin'ny herinandro vitsivitsy lasa izay, OpenAI dia nanolotra Apps ho an'ny ChatGPT. Araka ny hitanao etsy ambany, manome fahafahana ny orinasa hametraka ny vokatra ao amin'ny chat mba hanampy amin'ny fametrahana ny fangatahan'ny mpampiasa. Ny fampiharana dia azo ampiharina amin'ny alàlan'ny fanehoan-kevitra mazava na rehefa manapa-kevitra ny modely fa ny fampiharana dia ho mahasoa. So, what is a ChatGPT App? Ho an'ny mpanjifa, dia fomba hahazoana traikefa sy fahaiza-manaon'ny mpampiasa mahery vaika kokoa, mihoatra noho ny fetran'ny interface textual. Ho an'ny orinasam-pandraharahana, dia fomba ahafahan'ny mpampiasa ChatGPT mihoatra ny 800 tapitrisa amin'ny fotoana mety. Ho an'ny mpamorona, dia mpizara MCP sy fampiharana tranonkala izay mihazakazaka ao amin'ny iframe <= izany no momba izany isika eto! Ny Demo Ao amin'ity lahatsoratra ity, dia handeha amin'ny famoronana fampiharana tsotra, hita etsy ambany, amin'ny fampiasana azy ho ohatra mba hampisehoana ireo endri-javatra azo jerena. Zava-dehibe: Raha te-hiaraka ianao, dia mila mpandray anjara amin'ny ChatGPT ianao mba hahafahana mampiasa ny Mody Developer. Ny $ 20 / volana mpanjifa dia ampy. Raha te hanaraka anao ianao, Ny $ 20 / volana mpanjifa fisoratana anarana dia ampy. Important Note: you will need a paid ChatGPT subscription to enable Developer Mode Ny fivoaran'ny haavo Ity no fomba miasa amin'ny ambaratonga avo (ny fehezan-dalàna marina amin'ny dingana dia mety hiova kely): Voalohany, ny mpandrindra ny fampiharana dia manoratra azy ao amin'ny ChatGPT amin'ny alalan'ny Izany dia mampiasa ny app Ny Mipetraka ho , ary mamela modely toy ny ChatGPT hijery sy mifandray amin'ny serivisy hafa. Ary ny Mila mamorona app ChatGPT amin'ity dingana ity, providing a link to the MCP server (1) MCP Model Context Protocol tools resources ChatGPT learns and remembers what our app does and when it can be useful. Rehefa efa misy ny App ary ny mpampiasa dia manao toy ny "Make a quiz about Sam Altman", ChatGPT dia hanamarina raha misy App izay azo ampiasaina fa tsy ny valin'ny lahatsoratra mba hanome traikefa tsara kokoa ho an'ny mpampiasa . (2) (3) Raha hita ny App, ChatGPT dia mijery ny fandaharan'ny angon-drakitra ilain'ny App Ny App dia mila mahazo ny angon-drakitra ao amin'ny format JSON manaraka: (4) { questions: [ { question: "Where was Sam Altman born", options: ["San Francisco", ...], correctIndex: 2, ... }, ... ] } Izany dia antsoina hoe , ary handefa izany any amin'ny app . ChatGPT will generate quiz data exactly in this format toolInput (5) Ny App dia handaminana ny Ary dia hiteraka ChatGPT dia hamoaka ny HTML "resource" nomena ny fampiharana ao amin'ny varavarankely amin'ny chat, ary hanomboka izany amin'ny Ny daty Ary farany, ny mpampiasa dia hahita ny fampiharana ary afaka mifandray amin'izany . toolInput toolOutput toolOutput (6) (7) Ny fametrahana ny mpizara MCP Code repo ho an'ny ChatGPT fampiharana: . https://github.com/renal128/quizaurus-tutorial Misy tetikasa roa amin'izany: Ary . First, we will focus on izay mampiasa JavaScript tsotra ao amin'ny frontend mba hitazonana ny zavatra tsotra. quizaurus-plain quizaurus-react quizaurus-plain Ny code server rehetra dia ao amin'ity rakitra ity - eo ho eo amin'ny 140 andininy ny code! https://github.com/renal128/quizaurus-tutorial/blob/main/quizaurus-plain/src/server.ts Ny serivisy dia Misy safidy maro ahafahana mamorona mpizara MCP amin'ny fampiasana ny SDK misy eto: https://modelcontextprotocol.io/docs/sdk Eto, dia hampiasa ny . Ny fampiasana ny MCP SDK Ny code etsy ambany dia mampiseho ny fomba hametraka azy io: // Create an MCP server const mcpServer = new McpServer({ name: 'quizaurus-server', version: '0.0.1' }); // Add the tool that receives and validates questions, and starts a quiz mcpServer.registerTool( ... ); // Add a resource that contains the frontend code for rendering the widget mcpServer.registerResource( ... ); // Create an Express app const expressApp = express(); expressApp.use(express.json()); // Set up /mcp endpoint that will be handled by the MCP server expressApp.post('/mcp', async (req, res) => { const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined, enableJsonResponse: true }); res.on('close', () => { transport.close(); }); await mcpServer.connect(transport); await transport.handleRequest(req, res, req.body); }); const port = parseInt(process.env.PORT || '8000'); // Start the Express app expressApp.listen(port, () => { console.log(`MCP Server running on http://localhost:${port}/mcp`); }).on('error', error => { console.error('Server error:', error); process.exit(1); }); Ny lohahevitra fototra: Ny app Express dia mpizara ankapobeny izay mahazo fifandraisana (ohatra fangatahana HTTP) avy any ivelany (tsy avy amin'ny ChatGPT) Amin'ny fampiasana Express, dia manampy ny /mcp endpoint izay hanome ChatGPT ho adiresy ny MCP server (ohatra https://mysite.com/mcp) The handling of the endpoint is delegated to the MCP server, that runs within the Express app /mcp all of the MCP protocol that we need is handled within that endpoint by the MCP server mcpServer.registerTool(...) sy mcpServer.registerResource(...) dia izay hampiasainay amin'ny fampiharana ny app Quiz Ny fitaovana MCP Aoka isika hameno ny fahasamihafana amin'ny placeholder etsy ambony mba hiditra ao amin'ny “tool”. mcpServer.registerTool(…) Ny ChatGPT dia hamaky ny famaritana fitaovana rehefa manoratra ny fampiharana, ary avy eo, rehefa ilain'ny mpampiasa izany, ny ChatGPT dia hitarika ny fitaovana mba hanomboka fanadinana: // Add the tool that receives and validates questions, and starts a quiz mcpServer.registerTool( 'render-quiz', { title: 'Render Quiz', description: ` Use this when the user requests an interactive quiz. The tool expects to receive high-quality single-answer questions that match the schema in input/structuredContent: each item needs { question, options[], correctIndex, explanation }. Use 5–10 questions unless the user requests a specific number of questions. The questions will be shown to the user by the tool as an interactive quiz. Do not print the questions or answers in chat when you use this tool. Do not provide any sensitive or personal user information to this tool.`, _meta: { "openai/outputTemplate": "ui://widget/interactive-quiz.html", // <- hook to the resource }, inputSchema: { topic: z.string().describe("Quiz topic (e.g., 'US history')."), difficulty: z.enum(["easy", "medium", "hard"]).default("medium"), questions: z.array( z.object({ question: z.string(), options: z.array(z.string()).min(4).max(4), correctIndex: z.number().int(), explanation: z.string().optional(), }) ).min(1).max(40), }, }, async (toolInput) => { const { topic, difficulty, questions } = toolInput; // Here you can run any server-side logic to process the input from ChatGPT and // prepare toolOutput that would be fed into the frontend widget code. // E.g. you can receive search filters and return matching items. return { // Optional narration beneath the component content: [{ type: "text", text: `Starting a ${difficulty} quiz on ${topic}.` }], // `structuredContent` will be available as `toolOutput` in the frontend widget code structuredContent: { topic, difficulty, questions, }, // Private to the component; not visible to the model _meta: { "openai/locale": "en" }, }; } ); Ny ampahany ambony amin'ny code dia manome famaritana ny fitaovana - ChatGPT dia miankina amin'izany mba hahatakatra ny fotoana sy ny fomba hampiasa azy: Ny ChatGPT dia hampiasa izany mba hanapa-kevitra raha azo ampiharina amin'ny mpampiasa ny fitaovana. inputSchema dia fomba ahafahan'ny ChatGPT milaza marina ny angon-drakitra ilainy hanome ny fitaovana sy ny fomba tokony ho voarakitra azy. Araka ny hitanao etsy ambony, misy toro-hevitra sy fepetra voafetra izay ChatGPT dia afaka mampiasa mba hanomanana ny sarobidy marina (toolInput). outputSchema dia tsy hita eto, fa azonao atao ny manome azy mba hilaza amin'ny ChatGPT ny rafitra strukturedContent. Noho izany, amin'ny lafiny iray, ny fitaovana dia izay mamaritra ny ChatGPT App eto. Aoka isika hijery ireo sehatra roa hafa eto: _meta[“openai/outputTemplate”] dia ny fampahalalana ny loharanon'ny MCP izay hampiasa ny ChatGPT App mba hamoaka ny widget. async (toolInput) => { ... dia ny endri-javatra izay mahazo toolInput avy amin'ny ChatGPT ary mamokatra toolOutput izay ho azo jerena amin'ny widget. Ity no toerana ahafahantsika mihazakazaka ny logic amin'ny serivisy mba handaminana ny angon-drakitra. Amin'ity tranga ity, tsy mila fanodinana na inona na inona isika satria toolInput efa ahitana ny fampahalalana rehetra izay ilain'ny widget, noho izany ny endri-javatra dia miverina ny angon-drakitra mitovy amin'ny structuredContent izay ho azo jerena toy ny toolOutput amin'ny widget. Ny loharanom-baovao MCP Indreto ny fomba ahafantarantsika ny loharanon'ny MCP: // Add an MCP resource that contains frontend code for rendering the widget mcpServer.registerResource( 'interactive-quiz', "ui://widget/interactive-quiz.html", // must match `openai/outputTemplate` in the tool definition above {}, async (uri) => { // copy frontend script and css const quizaurusJs = await fs.readFile("./src/dist/QuizaurusWidget.js", "utf8"); const quizaurusCss = await fs.readFile("./src/dist/QuizaurusWidget.css", "utf8"); return { contents: [ { uri: uri.href, mimeType: "text/html+skybridge", // Below is the HTML code for the widget. // It defines a root div and injects our custom script from src/dist/QuizaurusWidget.js, // which finds the root div by its ID and renders the widget components in it. text: ` <div id="quizaurus-root" class="quizaurus-root"></div> <script type="module"> ${quizaurusJs} </script> <style> ${quizaurusCss} </style>` } ] } } ); Amin'ny ankapobeny, ny "resource" eto dia manome ny frontend (widget) ampahany amin'ny App. ui://widget/interactive-quiz.html dia ny Resource ID, ary tokony mifanaraka amin'ny _meta[“openai/outputTemplate”] ny famaritana fitaovana avy amin'ny fizarana teo aloha etsy ambony. provides HTML code of the widget contents the HTML here is very simple - we just define the root div and add that will find that root div by ID, create necessary elements (buttons, etc) and define the quiz app logic. We will look at the script in the next section below. quiz-app-root the custom script Ny famolavolana ny widget Widget fampiharana Aoka isika hijery haingana ny izay manatanteraka ny widget (ny ampahany hita ao amin'ny fampiharana): Ny fametrahana ny QuizaurusWidget.js // Find the root div defined by the MCP resource const root = document.querySelector('#quiz-app-root'); // create HTML elements inside the root div ... // try to initialize for widgetState to restore the quiz state in case the chat page gets reloaded const selectedAnswers = window.openai.widgetState?.selectedAnswers ?? {}; let currentQuestionIndex = window.openai.widgetState?.currentQuestionIndex ?? 0; function refreshUI() { // Read questions from window.openai.toolOutput - this is the output of the tool defined in server.ts const questions = window.openai.toolOutput?.questions; // Initially the widget will be rendered with empty toolOutput. // It will be populated when ChatGPT receives toolOutput from our tool. if (!questions) { console.log("Questions have not yet been provided. Try again in a few sec.") return; } // Update UI according to the current state ... }; // when an answer button is clicked, we update the state and call refreshUI() optionButtons.forEach((b) => { b.onclick = (event) => { const selectedOption = event.target.textContent selectedAnswers[currentQuestionIndex] = selectedOption; // save and expose selected answers to ChatGPT window.openai.setWidgetState({ selectedAnswers, currentQuestionIndex }); refreshUI(); }; }); ... // at the end of the quiz, the user can click this button to review the answers with ChatGPT reviewResultsButton.onclick = () => { // send a prompt to ChatGPT, it will respond in the chat window.openai.sendFollowUpMessage({ prompt: "Review my answers and explain mistakes" }); reviewResultsButton.disabled = true; }; startQuizButton.onclick = refreshUI; refreshUI(); Fanamarihana: ity code ity dia hitarika amin'ny HTML izay voafaritra ao amin'ny MCP loharanom-baovao etsy ambony (ny Ny HTML sy ny script dia ho ao anatin'ny iframe ao amin'ny ChatGPT chat pejy. <script type="module">… ChatGPT mampiseho ny angon-drakitra sasany sy ny hooks amin'ny alalan'ny Global Object. Ity ny zavatra ampiasaintsika eto: window.openai window.openai.toolOutput dia ahitana ny fanontaniana angon-drakitra niverina amin'ny MCP fitaovana. Voalohany, ny HTML dia hiverina alohan'ny hiverina ny fitaovana toolOutput, ka window.openai.toolOutput dia tsy misy. window.openai.widgetState sy window.openai.setWidgetState() dia mamela antsika hanatsarana sy miditra amin'ny toe-javatra widget. Mety ho angon-drakitra rehetra tiantsika, na dia ny toro-hevitra dia ny hitazonana azy eo ambany 4000 token. Eto, dia mampiasa izany izahay mba hahatsiaro izay fanontaniana efa namaly ny mpampiasa, ka raha ny pejy dia naorina indray, ny widget dia hahatsiaro ny toe-javatra. window.openai.sendFollowUpMessage({prompt: “...”}) dia fomba hanome fangatahana amin'ny ChatGPT toy ny hoe ny mpampiasa no nanoratra azy, ary ny ChatGPT dia hanoratra ny valiny ao amin'ny chat. Azonao atao ny mahita fahafahana bebe kokoa ao amin'ny fanadihadiana OpenAI eto: https://developers.openai.com/apps-sdk/build/custom-ux Ny fametrahana izany rehetra izany Tonga ny fotoana hanandrana izany! Ny fampahatsiahivana haingana dia ilainao ny fisoratana anarana amin'ny ChatGPT amin'ny alàlan'ny fametrahana ny fomba mpamorona. Clone this repo [Download the code] https://github.com/renal128/quizaurus-tutorial There are 2 projects in this repo, a minimalistic one, described above, and a slicker-looking React one. We’ll focus on the first one for now. Open a terminal, navigate to the repo directory and run the following commands: [Starting the server] cd quizaurus-plain install NodeJS if you don’t have it https://nodejs.org/en/download/ to install dependencies defined in package.json npm install to start the Express app with MCP server - npm start keep it running [ ] Expose your local server to the web Create a free ngrok account: https://ngrok.com/ Open a (the other one with the Express app should keep running separately) new terminal Install ngrok: https://ngrok.com/docs/getting-started#1-install-the-ngrok-agent-cli on MacOS brew install ngrok Connect ngrok on your laptop to your ngrok account by configuring it with your auth token: https://ngrok.com/docs/getting-started#2-connect-your-account Start ngrok: ngrok http 8000 You should see something like this in the bottom of the output: Forwarding: https://xxxxx-xxxxxxx-xxxxxxxxx.ngrok-free ngrok created a tunnel from your laptop to a public server, so that your local server is available to everyone on the internet, including ChatGPT. Again, , don’t close the terminal keep it running - this is the part that r , $20/month, otherwise you may not see developer mode available. [Enable Developer Mode on ChatGPT] equires a paid customer subscription Go to ChatGPT website => Settings => Apps & Connectors => Advanced settings Enable the “Developer mode” toggle [Add the app] Go back to “Apps & Connectors” and click “Create” in the top-right corner Fill in the details as on the screenshot. For “MCP Server URL” use the URL that ngrok gave you in the terminal output and . add /mcp to it at the end Click on your newly added app You should see the MCP tool under Actions - now ChatGPT knows when and how to use the app. When you make changes to the code, sometimes , otherwise it can remain cached (sometimes I even delete and re-add the app due to avoid caching). you need to click Refresh to make ChatGPT pick up the changes [ ] Finally, we’re ready to test it! Test the app In the chat window you can nudge ChatGPT to use your app by selecting it under the “ ” button. In my experience, it’s not always necessary, but let’s do it anyway. Then try a prompt like “Make an interactive 3-question quiz about Sam Altman”. + You should see ChatGPT asking your approval to call the MCP tool with the displayed . I assume that it’s a feature for unapproved apps, and it won’t happen once the app is properly reviewed by OpenAI (although, as of Nov 2025 there’s no defined process to publish an app yet). So, just click “Confirm” and wait a few seconds. toolInput As I mentioned above, the widget gets rendered before is returned by our MCP server. This means that if you click “Start Quiz” too soon, it won’t do anything - try again a couple seconds later. (we will fix that with React in the next section below). When the data is ready, clicking “Start Quiz” should show the quiz! toolOutput Ny fampiasana ny React Eto ambony, dia nijery ny code izay mampiasa JavaScript tsotra. Ny tetikasa hafa ao amin'ny Repo mitovy, , mampiseho ny fomba fametrahana fampiharana ChatGPT amin'ny fampiasana React. Ny fiantraikan'ny Azonao atao ny mahita antontan-taratasy mahasoa avy amin'ny OpenAI eto: . https://developers.openai.com/apps-sdk/build/custom-ux/ Fanampiana amin'ny fanampiana amin'ny fanampiana Azonao atao ny mahita azy ireo eto, ny code dia kopia avy amin'ny antontan-taratasy: https://github.com/renal128/quizaurus-tutorial/blob/main/quizaurus-react/web/src/openAiHooks.ts Ny tena mahasoa dia izay ahafahanao misoratra anarana amin'ny fampiharana React amin'ny fanavaozana ao Tsarovy fa tao amin'ny fampiharana tsotra (non-React) etsy ambony, dia nanana olana izahay fa ny bokotra "Start Quiz" dia tsy nanao na inona na inona mandra-pahatongan'ny angon-drakitra? useToolOutput window.openai.toolOutput function App() { const toolOutput = useToolOutput() as QuizData | null; if (!toolOutput) { return ( <div className="quiz-container"> <p className="quiz-loading__text">Generating your quiz...</p> </div> ); } // otherwise render the quiz ... } React dia hamerina ny fampiharana avy hatrany ary haneho ny fanadinana fa tsy ny fitondran-tena. React ny router. Ny tantara navigation ny iframe izay mampiseho ny fampiharana dia mifandray amin'ny tantara navigation ny pejy, ka afaka mampiasa ny routing API toy ny React Router mba hanatanterahana navigation ao anatin'ny fampiharana. Ny tranga sy ny toetra hafa Fanamarihana: Ny fampiharana ny ChatGPT dia tsy tena maharitra amin'izao fotoana izao, satria tsy vita tanteraka ny endri-javatra, noho izany dia ara-drariny ny manantena fiovana tsy nambaran'ny API na bugs kely. https://developers.openai.com/apps-sdk Ahoana ary ahoana ny ChatGPT dia manapa-kevitra ny hampiseho ny fampiharana amin'ny mpampiasa The most important part is that your app’s metadata, such as the tool description, must feel relevant to the conversation. ChatGPT’s goal here is to provide the best UX to the user, so obviously if the app’s description is irrelevant to the prompt, the app won’t be shown. I’ve also seen ChatGPT asking the user to rate if the app was helpful or not, I suppose this feedback is also taken into account. App Metadata. Official recommendations: https://developers.openai.com/apps-sdk/guides/optimize-metadata The in order to be used. How would the user know to link an app? There are 2 ways: App Discovery. app needs to be linked/connected to the user’s account Manual - go to and find the app there. Settings => Apps & Connectors Contextual Suggestion - if the app is not connected, but is highly relevant in the conversation, ChatGPT may offer to connect it. I wasn’t able to make it work with my app, but I saw it working with pre-integrated apps like Zillow or Spotify: Mitondra fampiharana mifandray. Rehefa mifandray ny fampiharana, ChatGPT dia afaka mampiasa izany amin'ny fifanakalozan-kevitra raha ilaina. Ny mpampiasa dia afaka mampiasa izany amin'ny alàlan'ny fametrahana ny anaran'ny fampiharana ao amin'ny lahatsoratra, manindry @AppName na tsindrio ny bokotra + ary misafidy ny fampiharana ao amin'ny meny. Ny sehatra fanohanana Ny tranonkala - satria ampiasaina amin'ny alalan'ny iframe, ny tranonkala no sehatra mora indrindra hanohanana ary tsy nanana olana loatra aho. Mobile app - raha mifandray ny fampiharana amin'ny aterineto ianao, dia tokony, afaka mahita azy amin'ny finday. Tsy afaka mamela ny fampiharana amin'ny finday aho - tsy nahavita ny fitaovana, fa rehefa nanomboka ny fampiharana amin'ny aterineto aho dia afaka mifandray amin'izany amin'ny finday. Ny fahamarinana Ny ChatGPT Apps dia manohana ny OAuth 2.1: https://developers.openai.com/apps-sdk/build/auth Ity lohahevitra ity dia lehibe, aoka aho hilaza raha mahasoa ny manoratra lahatsoratra manokana momba izany! Mitondra fangatahana amin'ny tambajotra Indro i Gələcək Gün [AZ] milaza amin'ny antsipiriany ny faharavana sasany Ny hoe: Miara-miasa amin'ny mpiara-miasa amin'ny OpenAI ianao raha mila sehatra manokana ao amin'ny lisitry ny fahazoan-dalana. " Ny loharanom-baovao Standard fetch requests are allowed only when they comply with the CSP Ao amin'ny toerana iray hafa ( ) dia manolotra ny fametrahana Object ao amin'ny famaritana loharanon-karena mba ahafahana mamela ny sehatra: Eto dia _meta _meta: { ... /* Assigns a subdomain for the HTML. When set, the HTML is rendered within `chatgpt-com.web-sandbox.oaiusercontent.com` It's also used to configure the base url for external links. */ "openai/widgetDomain": 'https://chatgpt.com', /* Required to make external network requests from the HTML code. Also used to validate `openai.openExternal()` requests. */ 'openai/widgetCSP': { // Maps to `connect-src` rule in the iframe CSP connect_domains: ['https://chatgpt.com'], // Maps to style-src, style-src-elem, img-src, font-src, media-src etc. in the iframe CSP resource_domains: ['https://*.oaistatic.com'], } } Ny zavatra hafa azonao ampiasaina dia ny Ny widget fampiharana anao (frontend) dia afaka mampiasa izany mba hividy fitaovana ao amin'ny mpizara MCP - manome ny anaran'ny fitaovana MCP sy ny fitaovanaInput angon-drakitra ary mahazo ny fitaovana BackOutput: window.openai.callTool await window.openai?.callTool("my_tool_name", { "param_name": "param_value" }); Ny endrika hafa amin'ny frontend Jereo ity antontan-taratasy ity ho an'ny zavatra azo jerena amin'ny code frontend amin'ny alàlan'ny Ny : window.openai https://developers.openai.com/apps-sdk/build/custom-ux Azonao atao ny miditra ao amin'ny sehatra manaraka (ohatra dia hilaza aminao raha amin'izao fotoana izao ny ChatGPT dia ao amin'ny fomba maizina na maizina): window.openai.theme theme: Theme; userAgent: UserAgent; locale: string; // layout maxHeight: number; displayMode: DisplayMode; safeArea: SafeArea; // state toolInput: ToolInput; toolOutput: ToolOutput | null; toolResponseMetadata: ToolResponseMetadata | null; widgetState: WidgetState | null; Toy izany koa, azonao atao ny mampiasa ny antso manaraka (ohatra mba hahatonga ny fampiharana ho feno efijery): await window.openai?.requestDisplayMode({ mode: "fullscreen" }); /** Calls a tool on your MCP. Returns the full response. */ callTool: ( name: string, args: Record<string, unknown> ) => Promise<CallToolResponse>; /** Triggers a followup turn in the ChatGPT conversation */ sendFollowUpMessage: (args: { prompt: string }) => Promise<void>; /** Opens an external link, redirects web page or mobile app */ openExternal(payload: { href: string }): void; /** For transitioning an app from inline to fullscreen or pip */ requestDisplayMode: (args: { mode: DisplayMode }) => Promise<{ /** * The granted display mode. The host may reject the request. * For mobile, PiP is always coerced to fullscreen. */ mode: DisplayMode; }>; /** Update widget state */ setWidgetState: (state: WidgetState) => Promise<void>; Misaotra anareo ! Izany rehetra izany, misaotra anao noho ny famakiana sy ny tsara indrindra amin'ny zavatra rehetra izay miorina!