{"id":41308,"plugin_id":"plugin_asdk_app_69f34601480881919e50c661b9f70084","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-24T12:58:38.782Z","digest":"1d9c4d57b18cfb7618df71a873996dac6ad955e540b1b4bb5b0db4d7e2dec35d","against":null,"payload":{"description":"Build, publish, update, or extend a MiniUp web app from generated files, uploaded project files, uploaded data, or an existing MiniUp site, including hosted data, Table APIs, and server-side Functions when needed.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":459}],"name":"miniup-app-lifecycle","skill_md_contents":"---\nname: miniup-app-lifecycle\ndescription: Build, publish, update, or extend a MiniUp web app from generated files, uploaded project files, uploaded data, or an existing MiniUp site, including hosted data, Table APIs, and server-side Functions when needed.\n---\n\nApply this workflow only to a user-requested MiniUp publish, update, or resource-management task. General questions, file analysis, calculations, and code-only requests do not authorize hosting. Clarify ambiguous publishing intent before writes.\n\n\n# MiniUp app lifecycle\n\nUse this skill only when the user asks to build, publish, update, or extend an app with MiniUp. Do not activate it for general coding, spreadsheet analysis without publishing intent, email or messaging, weather or search, GitHub operations, or unrelated hosting questions.\n\n## Choose the workflow\n\n- For generated HTML or project files, prefer complete-file staging followed by the normal publish workflow. Use a project for modular or multi-file apps. Do not base64-encode or chunk files when direct file handling fits.\n- For an uploaded project, ZIP, or assets, use MiniUp's direct uploaded-file or project path and preserve its directory structure.\n- For uploaded tabular or geospatial data plus an app request, prefer `create_app_from_uploaded_data_file`. Let MiniUp host and query large data instead of embedding it in HTML. Publish ArcGIS-compatible access only when relevant or requested.\n- For an existing MiniUp app, resolve the Site and inspect its current details and content first. Update that same Site and preserve its URL unless the user requests a new app.\n- Use Tables and Table APIs when the user explicitly requests a table API (including public read-only inventory with seed records), editable records, CRUD, or database-like behavior. For public read-only tables, set `apiScopes=[\"GET\"]`, `requireReadKey=false`, and pass the requested rows in `seedRecords`. Use `site.siteId` from the new publish result. A hosted dataset is preferable for read-only uploaded data without an explicit table API request.\n- Use Functions for backend logic, API endpoints, server-side computation, integrations, or authenticated Site Function behavior. Normally call `create_function`, then `test_function`, then `publish_function`. Read the new ID from `result.function.id`; verify `result.status` and `result.body` from the preview against the requested behavior before publishing. A completed tool call alone is not a successful preview. Publication returns `result.endpoint` and `result.docsUrl`. Link the Site or change access only according to user intent, and never publish after a failed preview.\n\n## Reproducible creation and attachments\n\n- Staged file references are temporary and consumed by publication. For an independent new publish, stage fresh files. For a timeout retry, reuse the original requestId. If MiniUp returns `staged_file_unavailable`, restage the original complete files; do not fabricate a reference.\n- Each new app gets a new `requestId`; retry the same operation with the same ID. Omit site slugs unless requested. Each new Function needs a fresh unique slug; do not reuse `hello-world` across independent requests.\n- Download reviewer fixtures and attach them to the conversation as files. A public fixture link is not a ChatGPT attachment download URL. Pass the real host-provided `download_url` and `file_id`; never invent attachment references. If a file was not handed off, request the attachment rather than claiming publication.\n- For a requested ArcGIS map, pass `appKind=\"map\"`, `publishArcgis=true`, and `enableArcgis=true`. Return the exact map and ArcGIS URLs from the result.\n\n## Current app capabilities\n\nReuse compatible existing Tables, datasets, and Functions before creating more resources. Published eligible Tables and hosted datasets automatically reconcile app Agent Actions; current app discovery is available at `/.well-known/miniup.json` and `/openapi.json` on the published app. App-specific MCP and browser WebMCP are distinct from this account management connection. Bridge pairing/download management, custom domains, revision restore, and enabling consequential Function actions remain first-party dashboard workflows, not tools in this account MCP. Never invent tool names or claim those operations were performed.\n\n## Safety\n\n- Never request, reveal, return, or fabricate saved Function secrets or API keys. Secret-bound editing, testing, and deployment must remain in MiniUp's secure first-party management flow; preserve `secure_management_required` failures.\n- The ChatGPT connection creates and manages non-paid Functions only. Payment configuration and catalog listing are not supported here. Do not pass x402 fields or `listed`, and preserve `paid_function_management_required` errors for existing paid Functions. Payment functionality remains in MiniUp's first-party product; do not initiate purchases or payment setup from this connection.\n- Delete, overwrite, revoke, and access-changing actions require clear user intent. Never delete resources merely to clean up, and respect destructive annotations and host confirmations.\n- Return useful public URLs and endpoints supplied by MiniUp. Do not expose internal storage paths, owner identifiers, tokens, hashes, signed storage URLs, or secret material.\n\nIn the final response, briefly state what was actually created or changed and include useful public URLs or endpoints returned by the tools.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}