diff --git a/apps/web/messages/en.json b/apps/web/messages/en.json new file mode 100644 index 00000000..cc844066 --- /dev/null +++ b/apps/web/messages/en.json @@ -0,0 +1,3905 @@ +{ + "ui": { + "m797b4f031eac": "Authentication Error", + "m0c953ab32c60": "Something went wrong.", + "md8b8392e2c54": "Try again", + "m40c55c136901": "Back to Login", + "m3ccd9d6586ef": "Something went wrong. Please try again.", + "m7732287944e2": "Check your email", + "m9c2fe02045e2": "If an account exists for", + "mcb46c5c12546": ", we've sent password reset instructions to your inbox.", + "me0a32889eacc": "Didn't receive the email? Check your spam folder or", + "m5b5dedee32c5": "try again", + "m71fe31ccd37c": "Back to sign in", + "mafd25fdf17c7": "Forgot your password?", + "m6cc4c62eef9a": "No worries. Enter your email and we'll send you reset instructions.", + "mf2488fd4ef4a": "Email address", + "m53e6cdc30765": "you@example.com", + "m286a3af7348e": "Sending...", + "m2e217636019b": "Send reset instructions", + "m9e605fcf232b": "Natural-language app generation · Internal testing platform", + "mb5f64aac226f": "By continuing, you agree to our", + "m4afa55bf7aec": "Terms of Service", + "m6201111b83a0": "and", + "m506ff3946215": "Privacy Policy", + "m3c8432b0c6a7": "Verification failed. Please try again.", + "m4fcf29ae7ef2": "You're on the list", + "mb6824cc8a91e": "Two-factor authentication", + "md9708dace524": "Enter the 6-digit code from your authenticator app, or a recovery code.", + "m3ee75029c70e": "Verification code", + "m3dd86d618eaf": "123456 or recovery-code", + "m2ec1ac7d45e8": "Verifying...", + "mf6778950d77c": "Verify and continue", + "m54f9715d07d2": "Sign in to your account", + "m7b9db77e0178": "Continue with GitHub", + "mcce937e89144": "Continue with Google", + "me3324559f7c8": "Or continue with email", + "m969ccbd3cf63": "Email", + "me7cf3ef4f17c": "Password", + "m30c1d8d3e912": "Forgot password?", + "mc06bf9670174": "Enter your password", + "ma60a56c584b3": "Hide password", + "m6aeaa6a53d09": "Show password", + "mf93267aa11e8": "Remember me", + "m1f96f5d016bd": "Signing in...", + "mbfd402b2f6f3": "Sign in", + "m1b545b23fae3": "Don't have an account?", + "m5e2b8e96503d": "Sign up", + "m8d6cea2517ff": "Weak", + "mf7b19afcde96": "Fair", + "mc939327ca16d": "Good", + "m30a04fdcb6bb": "Strong", + "m977f3b2676a9": "At least 8 characters", + "m3354e2819414": "Uppercase letter", + "m168d366549bb": "Lowercase letter", + "mbd82cf16699b": "Number", + "m7f7cd67bcf4d": "Invalid reset link", + "m039dc4816602": "This password reset link is invalid or has expired. Please request a new one.", + "m76897da9593b": "Request new reset link", + "ma702a922e26a": "Password reset successful", + "m2da2987c9882": "Your password has been updated. You can now sign in with your new password.", + "m6c6e178ad2a8": "Passwords do not match.", + "m9283b095813b": "Password is too weak. Use at least 8 characters with uppercase, lowercase, and numbers.", + "m6ee6d9db4278": "Set new password", + "m4986b95da4ef": "Your new password must be different from your previous password.", + "m3dd9df4441fb": "New password", + "m563306418abb": "Password strength:", + "mbf000421aeb3": "Confirm new password", + "m210dfc7e4536": "Re-enter your password", + "mb6eb82cd3300": "Passwords do not match", + "m49665aad0be4": "Passwords match", + "mdaef019f06a4": "Resetting password...", + "me0edfeb3a71a": "Reset password", + "m958e4ccf2953": "Please enter a valid email address.", + "m702463b34cf3": "You must agree to the Terms of Service and Privacy Policy.", + "mfe2ea40e0f39": "Already approved?", + "m9e709348f582": "Create your account", + "mb896d16d300e": "Or sign up with email", + "me09b37bcc4f3": "Name (optional)", + "m2c6b2e253c01": "Your name", + "mb00f7e3ae5e8": "Please enter a valid email address", + "mc292210c4416": "Confirm Password", + "m26a58d002b08": "I agree to the", + "m7dd3701aa3f1": "Creating account...", + "m798ca2ce18bf": "Create account", + "me77fea936d3e": "Already have an account?", + "m920d04ec14fe": "Special character", + "mf99582ef73f9": "Min Plan:", + "ma8761df2126c": "Min Role:", + "m02069e79e45e": "No AI configured", + "m16211dd296cf": "Copilot:", + "mb764cdc0eab7": "Unknown", + "m84aebc69a1bf": "Configured", + "m08b041935798": "You", + "m11421ee1e11a": "Manage credits", + "mf69d5d4b63d8": "Configure AI for this user", + "m069d73bcfc70": "Reset AI allocation", + "m190a5016e300": "Configure AI for", + "med249d417dcd": "GitHub Copilot", + "m0382e4dec018": "Custom Provider", + "mc2186fe04eb9": "Both configurations are saved. The selected tab is what this user will use.", + "m7e1b0d5641f2": "Account", + "m733f239a2734": "Default (gh CLI)", + "m5e2c614c23f0": "Model", + "m472590ae974d": "Provider", + "m73d8f90051f2": "Select a provider...", + "m1509f561f241": "Save", + "m19766ed6ccb2": "Cancel", + "mdc20e9fe650d": "Credits for", + "m3aa3d40a8fc9": "Daily used:", + "mcd1a8b01e9d5": "Monthly used:", + "mca3f6461f437": "Rollover:", + "m4c6dc26beeab": "Daily Credits", + "ma67991ce2664": "Monthly Credits", + "m527b050da083": "Rollover Credits", + "mebccf6ab3710": "Save Credits", + "m69be897d8b96": "Save credits and reset daily/monthly usage to 0", + "mfa615f22bd26": "Save & Reset Usage", + "m011bea484f1a": "Generate missing project thumbnails and view the generation log.", + "m49286f33b674": "Generating...", + "m2cc28dc8a83e": "Generate Missing Thumbnails", + "m0e9161011702": "Refresh", + "m612e74a217ea": "Total projects:", + "m9fd84954bfa5": "| Missing:", + "m284913d5c772": "| Queued:", + "mef5ade58332c": "Generation Log", + "m87d05cd08817": "entries", + "m9db084956346": "No thumbnail generation logs yet. Click \"Generate Missing Thumbnails\" to start.", + "mf785c3ce1d58": "ms", + "mdad5476f0b47": "No session data available", + "m942087cc2d41": "Retry", + "m9187cc2ac5a3": "engines", + "m3bcf9f2bf072": "RSS", + "mbb30cbe2f9b8": "Heap", + "md63ab4711473": "Uptime", + "m6f68db105f37": "Stopping...", + "m507eb972faea": "Stop All Engines", + "m656692907162": "Auto-refreshes every 5 seconds. Each engine is a per-project Copilot CLI subprocess.", + "mda292c238881": "Active Engines", + "m0830217a2761": "No active Copilot engines. Sessions start when users interact with AI in the editor.", + "m34cfcaf1a12e": "Unknown Project", + "m286ea6c1b524": "visual-edit", + "m4fb62348858c": "idle", + "md5aa1b5cf70c": "Active requests", + "m96879611650f": "active", + "m6fa3cbf451b2": "Sessions", + "mbd717b467075": "sess", + "ma0355426abfc": "Engine age", + "m013f54400c82": "age", + "m2b3ef6712d86": "Time since last use", + "mee72959b9b18": "Kill", + "m55e91685e997": "All plans", + "m1421f18c6968": "Any role", + "mc8ef8e3669b8": "Platform admin access required", + "m76900f1bfd16": "Back", + "m7888e95b8274": "Audit search", + "m12ed94f936df": "Conversation transcript", + "mb512d97e7cbf": "User", + "m5e23ec6a300d": "Mode", + "m87bb59ba2f92": "Workspace", + "m985959785319": "Project", + "m3a5ecca188c0": "Updated", + "mcb9ac5c561da": "Session ID", + "m7967e089a7b9": "User ID", + "me511470b21a9": "Project ID", + "medd50d9670fd": "This session has no recorded messages.", + "ma20d12c5e9c4": "Thinking", + "mda5122dc0f97": "Tool calls", + "m53924ef96c74": "Admin action log", + "m8be6bc851681": "Every search and view performed on the audit surface, with viewer identity, timestamps, and request metadata.", + "mecbb48b41cda": "Actor ID", + "m75666699b77d": "uuid", + "m64cff1319d2f": "Action", + "m2b505597daa7": "Any", + "m218197693424": "From", + "mf4b06ef6d3c8": "To", + "m49c266baaaa7": "Search", + "mdaee7606b339": "Reset", + "m167e90e23758": "No admin actions recorded yet.", + "mcf9c7aa24a26": "When", + "m449995c4fe8f": "Actor", + "m978354db0c00": "Target", + "m45989de49fb7": "Details", + "mbf5505174a73": "IP", + "m0a478cd08199": "user:", + "m046a8c1e8583": "ws:", + "m2bcb43cbc8f6": "view", + "mc1c224b03cd9": "Admin", + "mc5f53e63dd72": "Prompt & conversation audit", + "m7dd571d2abd1": "History of admin actions taken on the audit surface", + "m5140d737735a": "Search every AI conversation on the platform. Every search and view you perform is recorded for compliance.", + "m86dae2ac1261": "Audit log is not yet enabled on this platform", + "m538730c93ca5": "Could not load audit data", + "m04d7b4833927": "Messages", + "m4fe279f28f2e": "Messages (7d)", + "mc2fe00210b4b": "Distinct users", + "m889d892993c3": "Workspace ID", + "m772edfbcc7c0": "Message contains", + "m777808dfda80": "prompt or response substring", + "m38de3e06f728": "No conversations match the current filters.", + "mae593d094c83": "Workspace / Project", + "m97e9c34ed7b1": "Last excerpt", + "m1b731e8d1d02": "U:", + "m6a699d31f54d": "A:", + "m7d80edc9d957": "Platform admin required", + "m97ba1d394fab": "Back to Dashboard", + "m345c74235673": "Back to Admin", + "m33b35626c9b1": "Chat Sessions (", + "m686504a87fa2": "Every AI conversation across the platform — for training, audit, abuse review.", + "mc75cb8839a7d": "Filtered to project", + "m26b30b0dda16": "Read-only audit view.", + "mbd579d1b9e08": "Message content is auto-redacted (passwords, JWTs, API keys, hex blobs, DB URLs). Every thread you open is recorded in the admin audit log with your name + timestamp.", + "m64ea47b2620b": "Filter by project name or user email…", + "m6c73e4289d05": "All modes", + "m31e06f7d89fe": "chat", + "md4f0bc5a29de": "agent", + "m06475633ed3e": "Last activity", + "mecbc89cd37a0": "Started", + "mba3bbbe10d8b": "Loading…", + "ma86136ba5f55": "No chat sessions match your filter.", + "med077f3d8125": "Open", + "md604310a789a": "Showing", + "m28391d3bc64e": "of", + "m5373c7f8a5a6": "Thread", + "m7e3df8eb742b": "(no project)", + "mabc45c2d4dfa": "· mode=", + "mf5cccfb73751": "messages", + "m0966c6f72dff": "Loading thread…", + "m5675154535cf": "This session has no messages.", + "mf9d35d43770d": "tools", + "mc7099deab135": "show less", + "m2d370b60770a": "show more", + "m6ee16429668c": "thinking", + "maf80ef6e1b7b": "DNS for Published Sites", + "ma4a4e1e0f891": "Each publish either gets its own Cloudflare CNAME, or rides on a wildcard CNAME we set up for you.", + "mb5c120b316c2": "Saved", + "m15257e76d8b7": "Zone:", + "mb5d0581437a1": "The cloudflared OAuth token has DNS:Edit scope but not SSL/Certificates:Read — we can't see ACM packs. If you have ACM, tick the override below to bypass detection.", + "m909527f31f42": "ACM enabled", + "m928677dc6340": "No ACM", + "m5b864fc4ab0a": "ACM status unknown", + "m22ec906ac415": "Publish domain:", + "m31beffd97934": "Could not load Cloudflare zone diagnostics:", + "m43df7d535730": "Per-publish CNAME", + "m21b111cbfe6e": "Default", + "maa78e0c0518a": "Every publish calls the Cloudflare API to create one CNAME per subdomain. Lets multiple doable servers coexist under the same zone using", + "me3bf2573a4eb": "hostnames covered by Universal SSL. Requires", + "m4aa9bfd2f175": ", and", + "me9176867f7e5": "Wildcard CNAME (auto-configured)", + "m57ef4e97d348": "Skip the per-publish API call — all publishes resolve via one wildcard CNAME pointing to your tunnel. We'll create the record on your zone with the Cloudflare token from", + "m7ccbaa60f66e": "cloudflared tunnel login", + "mb658dae9f083": "Free plan + apex:", + "mcc76294d4e4d": "works out of the box (Universal SSL).", + "m4aa1e5a605fe": "Free plan + multi-level:", + "m3851601b3b92": "needs Advanced Certificate Manager.", + "mcd8a3129e318": "Paid ACM:", + "mf291848f2272": "pick any", + "md86688fc2849": "and tick the override below if our token can't see your ACM packs.", + "m40b2d2ad3953": "Wildcard hostname", + "m44ce242131b7": "I have Advanced Certificate Manager", + "m80c26ba6333c": "on this zone. Auto-detection can't read ACM status with the tunnel OAuth token, so tick this if you've already enabled ACM and want to create a multi-level wildcard.", + "mb66afe5b6cff": "Configuring…", + "m3c2e2a5ed0a6": "Re-verify wildcard", + "m1bc6bb749521": "Auto-configure wildcard", + "md70b9e24bca2": "Created", + "mfe00b67b6dd1": "Confirmed", + "ma57a35df4997": "No wildcard CNAME currently active on this zone.", + "m814ec0e86a15": "Publishes will fail until you auto-configure one above, or switch back to per-publish mode.", + "m6b83c8641fdd": "Existing wildcards on", + "mf86010479825": "this zone", + "me2d0a54968ea": "Delete", + "m5f3c225bebaf": "? Publishes pointing to it stop resolving.", + "meebdd24a77d9": "Confirm", + "m59a554090fa8": "Cloudflare API token (optional)", + "m7a6291807fd2": "No CF token configured", + "m9d7e5930b618": "ACM scope OK", + "m05ed7296fabd": "KEK mismatch.", + "m3415a638725c": "The stored token can't be decrypted under the current", + "m5232ea6ee716": "(likely a backup restore with a stale", + "me9cbb0224c4a": ".env", + "m424dce5579ac": "). The cert.pem fallback is keeping DNS ops working, but ACM detection is degraded. Re-paste the token below, or click", + "m6d43eea1425f": "Remove override", + "m19bbb37f3390": "to drop the stale row.", + "m0ff414871969": "Strictly optional.", + "m400f4a7dbcab": "DNS auto-configure, wildcard create/delete, and per-publish CNAMEs all work fine with the cert.pem token from", + "mc37157e872ba": "alone. Adding a custom token only unlocks accurate ACM detection so the badge above can flip from", + "m663ea1bfffe5": "to", + "m7175517a370b": "or", + "maf2af17db2e3": "Open Cloudflare API Tokens", + "me50f8444b261": "→ Create Token → Create Custom Token. Add exactly these zone permissions:", + "ma22535feec3f": "Zone → DNS →", + "m464c4ffd019e": "Edit", + "m45d6695511a2": "Zone → Zone →", + "m9b9a8d05a7ec": "Read", + "m3445cc97290d": "Zone → SSL and Certificates →", + "ma9072dfe385f": "Scope to your specific zone (", + "m1aa082f6a5fb": ") under \"Zone Resources\". Then paste the token here.", + "m5d2b8d876c7b": "Paste a Cloudflare API token…", + "m15f022806509": "Verify & save", + "medf0c1a56db5": "Heads up:", + "m559aead08264": "A", + "meb5d4f10d2dc": "CNAME can point to exactly one tunnel — running multiple doable servers on the same zone requires Cloudflare Advanced Certificate Manager so each environment can have its own multi-level wildcard (e.g.", + "m3890d1e97509": "*.staging.", + "m286dacb3bc0d": "*.prod.", + "mb68bb848e767": "No setting persisted yet — using the per-publish default.", + "m5e363bb50eb4": "Selecting an option or auto-configuring wildcard will save it for future publishes.", + "m00d60e31a4e6": "Run", + "mc865b85f4331": "migration 081_platform_settings.sql", + "me69dbe11cb9e": "against the DB.", + "m5273ecff6b01": "Remove email configuration? The system will fall back to environment variable settings.", + "m4f7838402f37": "Verified", + "m151339072593": "Not verified", + "m65bb4278c2cc": "Send Test Email", + "m74c26c5e8d57": "Verify Connection", + "m70fed393a3cc": "Change Provider", + "mc3812fc4acb8": "Remove", + "mf244f7a73ebd": "Update Email Provider", + "mc5f480423459": "Configure Email Provider", + "mc7011f116d0f": "SMTP", + "m1f94843777ae": "Resend", + "m0845280d68c2": "Gmail (OAuth)", + "mdd66a6eaff88": "Gmail, SendGrid, Mailgun, SES, and 20+ providers", + "mdaa443b13dd6": "Modern email API with great deliverability", + "ma9b34e6fd3c3": "One-click Google account connection", + "m85c6eb592a2a": "Connect your Google account with one click. This uses OAuth so your password is never shared. Only the", + "m29148528a8fc": "permission is requested.", + "m368e840b0cc8": "Connect Google Account", + "m0e66373f45dc": "Label", + "me4d3910563ab": "Production SMTP", + "m759130d7fc14": "Resend Production", + "m60643eae6376": "From Address", + "md677190e0a99": "Service", + "m4e66fa8cee03": "SMTP Host", + "m72e9a59f5a1d": "Port", + "me3b89e9d33f8": "Username", + "mb4c9a289323b": "user@example.com", + "m23189d55f697": "API Key", + "m46178dee9cff": "re_••••••••", + "meecc5bafc07f": "Save & Encrypt", + "m10ec54738634": "No email provider configured in the database", + "mfada2a086738": "Using environment variable fallback (if configured)", + "m5f918cc7c852": "All credentials are encrypted at rest using AES-256. The email queue retries failed sends with exponential backoff (up to 5 attempts). After exhausting retries, emails move to the dead-letter queue for manual review.", + "mc9a6c4608630": "dead letter", + "mf9903f858272": "Delete this email permanently?", + "m783fc0ebef47": "Email Queue", + "mbe6eb1fc3b05": "Collapse", + "m5a23444828db": "Manage", + "m331551b0de41": "Pending", + "mc8e3e92a62ec": "Processing", + "mc16bc82bf1f0": "Sent", + "m031a8f0f659d": "Failed", + "m04fb719b1cde": "Dead Letter", + "m5da8f7fbc29d": "Back to list", + "mc934cc71493d": "Attempt", + "m2b5fc5c94f64": "To:", + "mdc45d36f35e8": "From:", + "m22d435a37118": "Created:", + "m45ad42321fbd": "Sent:", + "m80c26311aad8": "Next retry:", + "m3c8938774eb8": "Template:", + "m324b134f57c7": "Preview", + "m92f2897724bf": "Email preview", + "m411a20914eca": "All emails", + "m11239872d178": "total", + "me1a333b41aa3": "clear filter", + "m3f777aa4a1cb": "Retry all failed", + "ma3eb7f944a37": "Retry all dead", + "m96e54d635a8a": "Purge all", + "mc7fa7d546e56": "No emails", + "m0c14d42e2264": "in queue", + "m1ac7d61d1d29": "attempts", + "md1bf045bb524": "View details", + "m0a30a815d67d": "Page", + "m3b440ddee6d9": "text-embedding-3-small / large. $0.02/1M tokens, 1536–3072 dims.", + "m398f99a184e4": "gemini-embedding-001 via Gemini's OpenAI-compatible /v1 endpoint.", + "m3f31d32ea02c": "Any /v1/embeddings endpoint — Ollama, vLLM, Voyage proxy, etc.", + "mb502bc92ca52": "Provider, base URL, model and API key are all required.", + "m754105abcad5": "Platform Embedding Model", + "m49daa94be922": "Set once — every workspace inherits this for chatbots, semantic search and RAG. End users of generated apps never see this UI; they just prompt the AI to build a chatbot.", + "m3f0534d325cf": "Not configured — calls to /__doable/ai/embed will return EMBEDDING_NOT_CONFIGURED", + "m4e901c79aad0": "Pick provider", + "m70589413a3c9": "Base URL", + "m16f0ee47f993": "API key", + "m36d2f296e03d": "Get a key", + "m2cedc28e7ad3": "Leave blank to keep current key (replace any to update)", + "m8358f1f0a95b": "Paste API key", + "m24e3c122d5d5": "Embedding model", + "m2ff59c750e8c": "Validates with a probe call before persisting.", + "mc1c1009d3f37": "Update", + "m8173aef43b62": "Failed to load framework settings", + "m6e965b82ee17": "At least one framework must remain enabled", + "m738142c05652": "Framework settings saved", + "m8533d75f3b23": "Failed to save framework settings", + "m7e4fc34d106a": "Project Frameworks", + "m5d80ea82266b": "Control which project types users can create. Disabled frameworks won't appear in the project creation dialog.", + "md09b4dd6265a": "Set as default", + "madd484d5ccdd": "Changes take effect immediately. Existing projects using a disabled framework will continue to work, but new projects cannot be created with it.", + "mea8b2988df0c": "User MFA status", + "m81e16ce413fa": "MFA is optional and user-controlled. Use the reset action only when a user has lost access to both their authenticator app and recovery codes.", + "m655e733ea610": "Enrolled", + "m830ec7f812f9": "Last used", + "m48f6a8d5688b": "Recovery", + "m4610a52aa1b6": "No users have enabled MFA yet.", + "m6497e4b3d7be": "never", + "m360f84035942": "left", + "mc55448c334fc": "Reset MFA for", + "m835b4199c8c2": "This will remove all MFA factors and recovery codes for this user, and sign them out of every active session. They will be able to sign in with just their password until they enroll again.", + "mfb047bd7d215": "Reset MFA", + "mb9765c3871ca": "Marketplace moderation", + "meb6573bdbe5b": "Review listings flagged for moderator approval and respond to community reports.", + "m3e1654beab97": "Review queue", + "mdacca3cba3f3": "Reports", + "m85d179563e9c": "No listings awaiting review", + "mdc7143e7d6df": "Open listing in new tab", + "ma7e2d26e8d15": "by", + "m0bb917d86bec": "· v", + "meb1a0e0e6bac": "· submitted", + "m07297fa94a99": "Needs review", + "m66d0f523a379": "Skills", + "m4228aeb07c41": "Rules", + "mdcb3e1c00e79": "Knowledge", + "mc3d2e79ebdd0": "Connectors", + "m79e3c0331286": "Permissions:", + "m446bbdda220c": "Optional decision note (sent to publisher on rejection)…", + "ma40e2f67ddae": "Approve & publish", + "mab604a360777": "Reject", + "m2acf0b3e07b3": "No open reports", + "m0190c9bb81aa": "Take action", + "m48845bff334a": "Dismiss", + "md134ca025a6c": "Access Denied", + "m272f3eef01bd": "Platform admin access required.", + "ma46f4c289a70": "System Administration", + "m85ed75299aaf": "Manage platform features, users, AI tools, and access controls", + "md7e6c3063aad": "All projects (drafts + published) with framework, owner, chat activity", + "m04e2a9728af7": "Projects", + "mc86961c75b53": "Published apps + live dev servers — CPU, memory, uptime, controls", + "m109311589787": "Runtime", + "m85372234e297": "All AI chat sessions (redacted, audit-logged) — for training & abuse review", + "m460b3a7da007": "Chat", + "m331d30a9c97f": "Prompt & conversation audit (enterprise)", + "mbb6aea287396": "Audit", + "m03e21e122ec4": "Marketplace moderation queue & reports", + "m126d4415445d": "Moderation", + "mc60c04dc77f9": "Feature Flags", + "m020965a2f08f": "DNS", + "m5c2b06176d6c": "Signups", + "m38fe011e7777": "Users & AI", + "m090512d93fcc": "Integrations", + "mdfe8b2f0de26": "Plans", + "mcc42ea8d0096": "AI Tools", + "md39ce05308e4": "MFA", + "mf82d646665fe": "Thumbnails", + "m696b91224a68": "Toggle features on/off globally. Set minimum plan or workspace role requirements.", + "mdac229190454": "No feature flags configured.", + "m61875526f372": "Plan Limits", + "m23ec9af2fc5e": "Plan Defaults", + "m860ec100606b": "Embedding Model", + "m0e570ca6fabe": "Source", + "mdc937b598926": "None", + "m088fec4f79e8": "Copilot Account", + "mbfbcd87c086c": "Select account…", + "m54cc5b27fcd0": "No Copilot accounts found. Add one in AI Settings first.", + "m8b4e8774ddf6": "Default Model", + "m89cd67acb3e2": "— Type custom model ID —", + "m7365642e8162": "Select provider…", + "m29a012962f7b": "No custom providers found. Add one in AI Settings first.", + "mc439b30a5a39": "Select model…", + "m97c8cb747f57": "Discovering models…", + "mc248b4fca911": "Type model ID", + "mfbd4230d6570": "Select a provider first", + "mdcd910c427ac": "No default AI model will be configured for new", + "m47707749925e": "workspaces. Users will need to set up their own AI connection.", + "mc7175090497c": "Failed to load plan defaults", + "me3881d18c2ee": "Failed to save defaults", + "m504db17a8299": "Failed to apply defaults to existing workspaces", + "m1e7edaca7665": "Loading plan defaults…", + "m9761afad12f1": "Set the default AI model and provider for each plan tier. New workspaces will automatically inherit these settings.", + "m1631852a1dd6": "No default configured", + "m6defafa2caa6": "Configure", + "mb3cdb2ee304a": "Apply this default to all existing workspaces on this plan", + "md426d64284d0": "Apply to Existing", + "m49f5b0e488cf": "Copilot", + "m7d4737cf36c4": "Provider / Account", + "m0c79a9c22284": "Applied", + "mba02b5e676dd": "defaults to", + "m6e8d79980fba": "workspaces", + "mc9916805d229": "workspace(s) skipped — already had AI configured. Use “overwrite” to force-apply.", + "me467ab264fa4": "Overwrite existing workspace AI settings when applying to existing", + "m9d53ba64c960": "How Plan Defaults Work", + "m675b6a1fb67a": "When a new user signs up, their workspace inherits the default for their plan tier.", + "ma7c4da9b12bf": "The Copilot account or provider is cloned into the user's workspace automatically.", + "m2727451375f9": "Users can override the default in their own AI Settings.", + "m7c1a7e4ce440": "Use “Apply to Existing” to retroactively push defaults to workspaces that don't have AI configured yet.", + "mf411a1fb6275": "Free", + "m957b0b874524": "Pro", + "m76f68a75f01e": "Business", + "m3fbe5ed156f1": "Enterprise", + "ma7dc3ade6c61": "Configure limits for each plan tier. Changes take effect immediately for all users on that plan. Set values to override defaults, or reset to use hardcoded defaults.", + "m17be9dde3193": "CUSTOMIZED", + "mb38c74ea2a19": "Max Projects", + "m3bc5afa4e311": "Max Members", + "m3c24f14134d7": "Max File Size", + "m6170ab945256": "Custom Domains", + "m94c116ee118a": "Analytics", + "med8a65c84235": "Priority Support", + "mba34a96f2969": "Last updated:", + "m507095b0ba27": "(MB)", + "m32d2b72aecde": "All Projects (", + "meb2d37934688": "Every project on the platform — drafts, published, and live runtime — with framework, owner, chat activity.", + "mb91054149468": "Filter by name, slug, owner email, framework, workspace…", + "m83b12c2216ef": "Clear", + "m2eb1788f3f5a": "Owner / Workspace", + "m192eb4525aab": "Framework", + "m920e413c7d41": "Status", + "m225d29f6201e": "Listen", + "ma3724e34d284": "No projects match your filter.", + "m46b6115e1e4d": "View chat sessions for this project", + "mf2d1742393d2": "This page shows runtime state for every project on the host.", + "mf65833fab74d": "Published apps & live editor dev servers — CPU, memory, uptime, controls.", + "ma9d344473c8b": "Auto-refresh on", + "m9dc9e60adf42": "Auto-refresh off", + "m94de423b6747": "Dev Servers", + "mcbbabb53c8fc": "Published Apps", + "m82cebc347bb4": "Total servers", + "m3032763b0e67": "Alive", + "m5fa7aac5375c": "Ready", + "m99401166672d": "Total RAM", + "m3f302a2a7158": "PID", + "mc3963aedaac6": "Memory", + "m416bc49a5c83": "No active dev servers.", + "m28a3a5e81d1e": "dead", + "mb24d6d33736e": "ready", + "m59dbf36d9930": "starting", + "m06f2446a1105": "Terminate this Vite process", + "m2c3494258f6c": "Source: in-memory", + "m8e3dc1afbc3e": "servers", + "m2229c690c65f": "map in", + "mb259d30710fa": "dev-server-core.ts", + "m742f573e6634": ". Memory is RSS from", + "m0b10c8adc253": ". Ports allocated from", + "mc9b3c38247f7": "Total", + "mf4ccae29e1bb": "Running", + "m1a4f630ac1b6": "Stopped", + "m464361940b84": "Filter by project, owner, framework, port\\u2026", + "mf189411452ed": "All states", + "m387c1f0e1c9e": "Sandbox user", + "ma3b50c476732": "State", + "mdb9a4c7d4c19": "CPU", + "mbcdf701c4dfb": "Last active", + "m502030bdb117": "No published apps yet.", + "m99f356256417": "Runtime rows appear here when a user clicks", + "m859390eb495b": "Publish", + "m353936be1dbe": ". To see ALL projects (including drafts), open", + "mcbe106c6fba4": "No instances match your filter.", + "m2053dbbf6ec7": "static", + "mad9c6fddb8fb": "View systemd journal logs (secrets auto-redacted)", + "mdde8c9582576": "Egress policy + recent build-proxy activity", + "m3c680169fdc4": "systemctl restart", + "mc12a1b553e6e": "systemctl stop \\u2014 terminate the running process", + "m995dbe2ca647": "Metrics source: systemd cgroups via", + "mf382acc27de3": ". Sandbox user is the per-project Linux UID created by", + "mb40e7512f994": "setupProjectUser()", + "m7853de766b41": "Egress for", + "m67a8c8843967": "Loading egress data…", + "m7c7c805550f8": "Egress allow-list (systemd", + "m7cd8ca3fea8a": "IPAddressAllow", + "m6b6e726dce43": "None configured. App can reach", + "m49960de5880e": "localhost", + "m32f43b3318b2": "only — all other outbound TCP is blocked by", + "m63eab693a29d": "IPAddressDeny=any", + "m183b8997cefc": "Build-time proxy (Squid)", + "mf2d421e5379b": "(disabled)", + "m9f427d2117d5": "No recent build-proxy activity captured.", + "m33b93476cf59": "Time", + "m52a0f9b65b27": "Method", + "me7a241debad5": "URL", + "m4d8000301fcc": "Bytes", + "m19e4421f6156": "Recent egress denials (journal, last hour)", + "mdf3172baceb0": "No deny events. (No outbound attempts blocked, or systemd's BPF firewall isn't logging at this level.)", + "m57d8bda76491": "Systemd unit:", + "md2397cca5c54": ". Egress policy is enforced at the cgroup level by systemd's", + "m5bbfd2fd41b4": "+ per-project", + "m22f5e9be30f7": "IPAddressAllow=...", + "me2076f16ff16": "Logs for", + "ma193d83320ed": "Secrets auto-redacted (passwords, JWTs, API keys, hex blobs, DB URLs). Every view is recorded in the admin audit log.", + "m8dcfdc43bd51": "Filter lines\\u2026", + "m066fb3529387": "Last 100", + "m6204633096ca": "Last 200", + "md015488899f8": "Last 500", + "m76bc7da847f2": "Last 1000", + "mb64ac05f17e6": "Live", + "mca7981b46ecf": "Off", + "macccfcdfcffe": "Copy all visible lines", + "me21f935f11d7": "Copy", + "me1842662a549": "Loading logs…", + "mab209a3ee8d0": "No log lines found.", + "m5ea44c3961f1": "lines", + "m0c7fcf412c36": "fetched", + "m37ebafac1092": "journalctl -u", + "m3eec7bbb66da": "Signup approval", + "m8e5609da435c": "When on, new signups go to a pending queue and cannot log in until you approve them. Existing accounts are unaffected.", + "mcbb30992f47c": "Require approval for new signups", + "mca2eb2c419d9": "Message shown to pending signups", + "m12342a6de5db": "Doable is invite-only right now...", + "m48d24bbb292a": "Shown on the signup screen after a new user submits, and on the login screen if they try to sign in while pending.", + "mf9bfa3dc7c8f": "Discard changes", + "mdc85af8f2b1d": "Saving...", + "m7f3a3b142814": "Save settings", + "m0405f4b67edd": "Pending approvals", + "m94536c9b8727": "No one is waiting for approval right now.", + "mb14b800ede91": "· signed up", + "m6007acbe30b2": "Approve", + "m05a2d7332eb9": "Deny", + "m211d0bb8cf4f": "Block", + "mfd8ed7176725": "Recently denied", + "m69d5d5622939": "These users were denied. They can't log in. Approve to grant access.", + "md6cc5e773801": "Blocked email addresses", + "m4c9bc4985ffa": "These emails can never sign up — not even via GitHub or Google. Unblock to allow signup again.", + "mb710c25ac7b7": "No blocked emails.", + "m6973dddd3ef9": "blocked", + "m712da63171e0": "Unblock", + "me763f2c1fa3e": "Configure which tools are available in each AI mode.", + "m6292878baa70": "Strategize", + "mca5b9330ac54": "(plan mode) typically uses read-only tools for analysis.", + "mbdd254b65baa": "Build", + "md3d5d45f1a0f": "mode has full file creation and editing tools. Changes take effect on new sessions within 60 seconds.", + "m0b7baf9fb836": "Delete mode", + "me71867e5aabf": "No tools configured — will use hardcoded defaults", + "m526e0087cc3f": "Description", + "m222b29abe076": "Doable Tools", + "m2b6ebbf5c88e": "SDK Built-in Tools", + "m812deedf2c67": "Strategize mode with write tools enabled may cause unintended file modifications.", + "m35322b5bb5a2": "Save Changes", + "mf57e3e0261a3": "tools selected", + "mc39caad8b315": "Mode name (e.g. review, debug)", + "m9fd728c66c9a": "Add", + "m49e8496ae12f": "Add New Mode", + "m22252a139c6a": "Back to search", + "m0489e4a2ca0d": "Trace not found", + "m276010d68dda": "Trace search", + "m4fc52a3c4c55": "Duration", + "mb3393bfb2a55": "Spans", + "mcb702378f315": "Errors", + "m604dce445e32": "Services", + "m681615e94f41": "Linked chat trace:", + "m0bc8506e4d85": "session:", + "md776d0b395c6": "Flame graph", + "m8229bdcc60d8": "All logs", + "mf01563f471a8": "Span detail", + "m107c08e85745": "Click a span in the flame graph to inspect.", + "m8219340f90cf": "No correlated logs.", + "md4903171322c": "Trace flame graph", + "m426b31c2ac95": "No traces match these filters.", + "m846211dee5c5": "Root span", + "mc4cbbc62b684": "Trace ID", + "mca00fccfb408": "error", + "mc071cf5f5ed6": "running", + "mf77d1bb58da8": "timeout", + "m2689367b205c": "ok", + "mfdac5dd749e1": "Root span name contains", + "m4b0ed88f7d99": "Attributes", + "m8d14f6e72de8": "Events", + "mb4fe3d529dee": "Exception", + "mea2100dc89ae": "Logs", + "m08863725c9d1": "kind:", + "me92e1c5195b2": "status:", + "ma304cd723646": "duration:", + "m36fdcc2069a7": "No logs for this span", + "mf1b4db36f908": "attributes", + "m16f4238962d7": "Search traces across services. Click a row to open the flame graph.", + "m9a815bd80853": "Enforced", + "m5126956fae89": "User · Copilot", + "m68dea4bdcd64": "User · Custom", + "m3b4383786e6b": "User override", + "mdaa1ddf84077": "WS default · Copilot", + "m6d149e5af3d3": "WS default · Custom", + "mda3706ee462a": "Workspace default", + "m0286249762f7": "Auto", + "m3bbfba0ec78f": "Auto-select", + "mef26da36dc29": "· no override", + "m868430976481": "No credits", + "m11fd3c84c2e5": "No source set", + "m69c81094e14e": "Copilot ·", + "m2ccc863d9382": "default account", + "m39fcda80bcbe": "Custom ·", + "m5c4c1964340a": "provider", + "m44dd5f163cba": "Role:", + "mc6c28dbbbd62": "Plan:", + "m4de05f38c64b": "Active Model", + "m01580cdc2633": "AI Model & Source", + "m2a6b24ad2872": "Credits", + "mef00c4881b86": "Currently Active", + "m11a931060dad": "Model:", + "mb35ca060d549": "Auto-select (no model set)", + "mc707ee4ecc24": "Source:", + "mea320b358837": "Subscription:", + "maaf36296577f": "Workspace enforcement is ON — this user cannot choose their own model.", + "mc8b45bcfb05e": "Resolution: Enforcement → User override → Workspace default → Auto-select", + "m5196192141c2": "Set Override Source", + "mf3090488d3bd": "No specific account (auto)", + "m87e09fc5cccf": "(custom)", + "ma236626facf1": "Auto (provider default)", + "md1f6ee835fff": "Select a provider to load its models.", + "m0953e0d5167d": "Reset to Defaults", + "mb36c2611dcdf": "Daily", + "mf83916135509": "used", + "m9b11f6b707d2": "Monthly", + "m283148958c53": "Rollover", + "mb0a1f428ffe3": "bonus credits", + "ma1a5936d3b0f": "Max", + "m175288c4eab8": "Bulk Edit Users", + "m04f8996da763": "user", + "m043a718774c5": "s", + "mf9641eb1f0d7": "Set AI Model & Source", + "m987811a8b0dd": "Replaces user's current override", + "mad184ce4ccd5": "Select a model...", + "m22aabd44c092": "Add Additional Quota", + "me8e43497c4f8": "Adds to each user's existing credits", + "m14c88bdc459b": "+ Daily", + "m6a6260fe12df": "+ Monthly", + "me98944151c8b": "+ Rollover", + "m5e3c350d16ce": "These amounts are", + "m279b8a60f444": "added", + "m0ff6fa1d4a25": "to each selected user's current totals (not replaced).", + "m4833e4160024": "Set Platform Role", + "m93df67719eaa": "Replaces each user's role", + "mdb4ba1f73d7a": "You're in the selection. Deselect yourself before changing roles in bulk — you can't change your own platform role.", + "maaddf0ef0547": "Set Workspace Plan", + "m752bc4378dc7": "Replaces each user's plan", + "m7c676eb1dbf8": "Applying to", + "mc7bb319b4e98": "users…", + "maab0d28eb783": "Apply to", + "mbeb0e209e98e": "Search users...", + "m08e774c5bacc": "All sources", + "m4a2fae93bd0c": "Copilot only", + "me658e7e5ff30": "Custom only", + "md7cbbb688b2e": "selected", + "m31c247d8ed4f": "Bulk Edit", + "m1fc9a387654d": "Select all", + "mbea867d1de69": "Role / Plan", + "m4999c6c6c7ba": "Subscription", + "maf435cdb859d": "Credits (Daily)", + "m9ef43b24ae01": "Manage user", + "m3ccbd64ae664": "No users match your search.", + "mce0171e51b07": "No users found.", + "md47dbbe2a22a": "Enforced = admin-locked model", + "md51606728956": "User · Copilot/Custom = personal override", + "m1ccbb4b01d71": "WS default = inheriting workspace setting", + "mc606591861bf": "Auto-select = no model configured anywhere", + "mbef9d2f4e0d1": "Connecting your GitHub account...", + "m3c57932bbc0a": "GitHub Copilot connected! Switch back to the setup wizard tab — it will pick this up automatically.", + "m24b5b4f1f9d1": "GitHub account connected! You can close this window.", + "md8fd001856d3": "GitHub account connected! Redirecting...", + "m267d859433fb": "Back to AI Settings", + "m54b20dda3acc": "Loading billing...", + "m65e4c127d235": "Unable to load billing", + "m1d8543fe41fb": "Please sign in to manage your subscription and credits.", + "mb59e0c1cc1e1": "Back to dashboard", + "m3ac8bbca9a74": "Billing", + "m6dd093cb38fa": "Manage your subscription, credits, and usage.", + "m6de44edb3c0f": "Subscription updated successfully!", + "me4873d5586db": "Checkout was canceled. No changes were made.", + "mcada2bd2464a": "Credits added successfully!", + "m2db046678b9c": "Dismiss error", + "mcbc4ef9225a0": "Manage Subscription", + "mb9e490645dd2": "Buy 100 Credits", + "m360487bbf13d": "Unable to load plans. Please try again later.", + "mde568b51fde5": "Usage History", + "me53e5ce92da3": "No usage recorded yet.", + "mede4cc5b110e": "Credit usage will appear here once you start using AI features.", + "m99c40ab40592": "Date", + "m89ebfb7a88ca": "Auto-detect", + "me697cc1e45af": "Attach files", + "m44abdc1c36d4": "Strategize first, then do the work", + "m32269bae4ea3": "Start working immediately", + "m104ab9213e28": "Work", + "m3d591e826d54": "Stop recording", + "m8748f23993a8": "Voice input", + "md5f6a9a87d9a": "Voice input isn't supported in this browser. Try Chrome or Edge.", + "m3ae25abdc079": "Pick framework explicitly, or let the server detect from your prompt", + "m2ef42ec21d93": "Published", + "mebf12ef47cf5": "Draft", + "m3b951ebd7c96": "Creating", + "m54a0e8c17ebb": "Error", + "mea1d0f038bbd": "Open in editor", + "m3064d79a295c": "Rename", + "m02cdaabfca80": "Duplicate", + "m91d631e150a3": "Move to folder", + "m318e826a7516": "Unstar", + "me357d396871d": "Star", + "m9c0b617e79e9": "Delete project", + "m935c9c7c903b": "Are you sure you want to delete “", + "m093fda19d66c": "”? This action cannot be undone.", + "m2577c0f557b2": "projects", + "m3a57bb9fb3bf": "Are you sure you want to delete", + "me75b917774a9": "selected project", + "m30f98589bee4": "? This action cannot be undone.", + "m244210e48437": "project", + "m2a0478eef536": "Rename project", + "m25498193b898": "Project name", + "m5d4f07e7b76d": "Choose a folder for this project.", + "m467e5499c616": "Root (no folder)", + "m73f0f2fe2594": "No folders yet. Create one in the sidebar.", + "m5c62e091b8c0": "P", + "m7d749dd1be58": "Update Discover listing", + "m826ae2f380ce": "Share to Discover", + "ma25513c7e0f6": "U", + "m068bd449d0fc": "Shared to Discover", + "md4a33d5b78bc": "Discover", + "m8e445e8aa6d2": "Recently viewed", + "m069d9457befe": "My projects", + "m56b564b75c7f": "Templates", + "m723735c4aab6": "Browse all", + "mc59dd5a3c5a2": "Search projects...", + "m32b9b2c4de19": "All status", + "m07a2d579c3f0": "Starred", + "m47da4e5507b6": "Grid view", + "m5d8c3e1b635e": "List view", + "m3a78695388b3": "Home", + "mf9182f6f2dc8": "Created by me", + "m0fd8abc26061": "Shared with me", + "m33d7d4f209a3": "Starred Projects", + "m452ab89d46b7": "My Projects", + "m0b47e3bfdd0b": "Shared Projects", + "ma41eb2bf7245": "New project", + "med1573abda08": "Loading projects...", + "mdcd1d5223f73": "Name", + "m8b31692427de": "Loading templates...", + "m805cbc51a3bd": "No templates available.", + "m3043f9fa4d31": "This folder is empty", + "m742b048e3f6c": "Create a new project inside", + "m9d6325c835da": "this folder", + "m9f7058396947": ", or move existing projects here.", + "mf4894985b57b": "Create a project here", + "m3bda804adf31": "Add existing projects", + "m960acc933ef3": "No projects found", + "m76125d30fd2e": "No matching projects", + "mf83c80652286": "No projects yet", + "md3a0cd264f2b": "Try adjusting your filters.", + "m1ee259231d41": "Describe what you want to build in the chat above, or import an existing project from GitHub.", + "m383efa96431b": "Import from GitHub", + "mde22447d91bb": "Clear all filters", + "m47d2a515ef2f": "Loading...", + "mac8991ef0101": "Load more", + "m4c78a2e4f2e0": "All Templates", + "m15f2172d71d3": "Starters", + "ma53bcafb67d9": "Dashboards", + "mf5904cf7a123": "Marketing", + "m02d9be75b85e": "E-commerce", + "m47bd29075f8b": "Content", + "m845f9286400f": "Personal", + "mf42bca637cb3": "Productivity", + "ma1fffd50941f": "Start from a template to build your next project", + "m79760c54dced": "Search templates...", + "ma28860eb8c5f": "No templates in this category yet.", + "m99528001baf3": "Failed to load projects", + "mc533cafab69e": "Featured", + "m76298e6377d7": "Remixing...", + "mf84ed4375595": "Remix", + "m0225763cf88e": "What's the difference between Discover and Marketplace?", + "m8ebec9e72543": "Discover vs Marketplace", + "m05e14791da05": "Explore community projects and remix them into your own", + "ma52ace420f21": "All", + "ma3498f96dc20": "No community projects yet. Be the first to publish!", + "ma57b08a480b8": "Previous", + "m1ff57a29d7c9": "Next", + "mab827e3fe17d": "Something went wrong", + "m7053d12aceb5": "An unexpected error occurred.", + "m88af1e0546d8": "Discover vs Marketplace — Doable", + "mbff0e07c6ec2": "Understand the difference between Discover, Marketplace, and Deploy.", + "mb79cac926e0b": "Help", + "m5fec231901d2": "Doable has three places to share things with the world. Here's how they're different.", + "m4c236daafb44": "Deploy", + "m594d7b838c48": "Ships your project to a public URL.", + "m603a62ffbe2f": "• Sets the live URL anyone can visit", + "ma76d071191e2": "• Stays under your account", + "m382a6e093eb5": "• Other users", + "m9a43b6dac466": "cannot", + "m08294dbd26cb": "remix or install it", + "m76fb907d25ac": "Lists your", + "me5e9d2627c3d": "whole project", + "m8aeebc476b2c": "in the community feed.", + "mbe9bf84c4556": "• Other users can browse and remix", + "m860ac51ed697": "• Remixes copy your code into their workspace", + "m2d7246a61a35": "• Free, no review needed", + "mdcde2662beff": "List on Marketplace", + "m0e17c8169056": "Packages an", + "m24d59694d449": "AI environment", + "m3cf63ee57e32": "as an installable bundle.", + "m045c1a848d53": "• Skills + rules + knowledge + MCP connectors", + "m5aaf523bb26a": "• Installs into anyone's workspace", + "mfbcd25a5d8b6": "• Connector bundles need a quick review", + "m8e8eedc83b10": "Which should I use?", + "m4c4e436f9a45": "Glossary", + "m78977aa618ad": "A whole app or site you build in the editor — code, pages, components.", + "m9e471951a1b4": "Environment", + "mf6a4d1b58a05": "A bundle of AI configuration that augments your editor: skills (instructions), rules (always-on context), knowledge files, and MCP connectors.", + "mf4a96457c02c": "Copy of someone else's project into your account. You own the copy and can change anything.", + "m569ca49f4aaf": "Install", + "m851e3c8b2883": "Add a Marketplace environment to one of your workspaces. Installs are versioned, you can update or uninstall any time.", + "m2f5c692e4571": "MCP connector", + "m61a400bfad07": "A bridge that lets the AI use a third-party service (Slack, GitHub, your database, etc.) via the Model Context Protocol standard.", + "m3a2c4a012416": "Standards we follow", + "m2f58ddf9c271": "Marketplace bundles are interoperable. The same bundle installs in Doable and works in tools that follow these standards.", + "m9f4439ee1f60": "Anthropic Agent Skills", + "mb72c8beb0a91": "with frontmatter.", + "m97c8607c5e1f": "Model Context Protocol (MCP)", + "m8be65a02b4ba": "server config compatible with Claude Desktop and Cursor.", + "m02453bfe1123": "Cursor Rules", + "m0d879a085b16": ".mdc", + "m432ac09412ef": "rule files.", + "m63a299e79c0f": "Claude Code Plugins", + "mf4bf1b7070e1": "manifest layout.", + "mda587d5e486b": "Browse Discover", + "md319099fe005": "Browse Marketplace", + "mdd58287e4103": "List your environment", + "m91e99107670b": "Help Center — Doable", + "mf5f84112997e": "Guides and articles to help you get the most out of Doable.", + "m1d8b9ff9d6d5": "Understand the difference between Discover, Marketplace, and Deploy — and when to use each.", + "ma78cebc44214": "Help Center", + "mb40b3713b43d": "Open menu", + "mf7439d15c4d4": "Listing not found", + "m3fa15e399987": "It may have been removed or unpublished.", + "mf34634e647ca": "Back to Marketplace", + "mc608981d8d68": "Marketplace", + "m2c379af32973": "Verified publisher", + "mf8b32f4e92bd": "Installed", + "mb9b5eae4ef79": "Install to:", + "m30670d5071e3": "Installs to", + "m8621cdb8240d": "No workspace available", + "mc97ace4c8fef": "review", + "m1e142e6277b1": "install", + "m4efca0d10c5f": "About", + "m2527a18acbad": "No description provided.", + "m3a5dae10cecd": "What's new in v", + "m84cb7871b741": "Reviews", + "m1e1bb23a19c4": "No reviews yet.", + "m9f05cde557b1": "What's included", + "mb99cd7c6ce49": "Knowledge files", + "m0b7fa0586cbd": "MCP connectors", + "m0492fbeca82c": "Empty environment", + "mf188a8ab9b65": "Includes MCP connectors", + "ma56ef92e6a3c": "This bundle adds", + "mc60abc330016": "external tool connection", + "mc3a49eb654d1": ". You'll be asked to authorise each one separately after install.", + "m1331275bc537": "Tags", + "m41490494a9b2": "What is the Marketplace?", + "m8cf76fa99dc0": "Learn the difference between Discover (whole projects) and the Marketplace (AI environments).", + "m60fb40ded4de": "Report this listing", + "mc39059141ced": "In review", + "mbc96567e77ca": "Unlisted", + "maea4a04a8042": "Rejected", + "mdb849f91bd40": "My listings", + "m706a22635b66": "New listing", + "m38975ad4e835": "No listings yet", + "md1472eec2b9d": "Package one of your environments and share it with the community. Listings appear in the Marketplace and can be installed in any workspace.", + "m51c8f370595c": "Create your first listing", + "m4c94485e0c21": "v", + "mdcc839a4015c": "View", + "m7e6fefff0f0a": "Hidden", + "m829b028565e1": "Delete listing", + "m9e9d0b8dc878": "Delete this listing?", + "m01ad2f8a4375": "This removes it from the Marketplace immediately. Existing installs will keep working — they reference cloned environments, not the listing itself.", + "mcb28c6022792": "Pick environment", + "mfe0249338b6b": "Choose what to package", + "m93c044cba47e": "Listing details", + "m92663bbd94be": "Title, description, category", + "ma41a9666fd92": "Preview & permissions", + "m07cc0dcf1fdc": "What installers will see", + "m6f202f54a7b2": "List", + "mb3694f57177e": "Publish to the marketplace", + "m2c161ed3b030": "You need a workspace before listing on the marketplace.", + "mf085ee865703": "Go to dashboard", + "md23bd01fa099": "List on the Marketplace", + "m31fbef162594": "Continue", + "mb703ed71cc6c": "No environments to publish yet", + "mbce3b9cdff33": "Create a workspace environment first — environments bundle skills, rules, knowledge, and connectors together.", + "m2d3e8636f7a7": "Open environments", + "m842db8589b31": "Pick the environment to package", + "md5a1ec4dd9ca": "Only the contents of the selected environment will be published. Secrets and connector credentials are never included.", + "m772d235622ce": "Auto-created for a single project", + "m6622b55561f1": "Shared across the whole workspace", + "m377efcb322eb": "Personal to you", + "m77c326d54f45": "What installers will see in the Marketplace catalog.", + "m7e8cd2056da7": "Title", + "m68c603088166": "Beautiful, descriptive name", + "md15387ecc6c5": "Slug", + "mb20d2b525943": "lower-case-dashes-only", + "m70d9513334b5": "Used in the URL:", + "m85fe537ced97": "your-slug", + "mdd34d90aa090": "Only lowercase letters, numbers, and dashes.", + "m796aecd3d1a2": "Short description", + "m146680f1448d": "One sentence shown on cards", + "m1d34110d0dfe": "Long description (markdown)", + "mc89f8e2130ab": "What does this environment do? Who's it for? How is it set up?", + "m3802d349c57d": "react, ai, design (comma-separated, max 10)", + "m3f5b18d03635": "This is roughly what installers will see. Permissions are derived automatically from your environment.", + "mea556ed312a5": "Permissions installers will be asked to grant", + "m4ea753f216e9": "The exact permissions list is computed from your environment at install time. The previewer below shows the categories — installers always see the full breakdown before clicking Install.", + "med8a3216ae21": "Adds skills to the user's AI", + "m6e4d7cd86e31": "Adds rules that auto-attach to matching files", + "mbdafc8eb351a": "Adds knowledge files to the user's context", + "md393a2db5419": "If your env contains MCP connectors, they may require user-supplied credentials", + "m99486b443405": "Tip: After publishing, you can iterate quickly via Marketplace → My listings.", + "m53a432f3a896": "Listed on the Marketplace", + "mbd20cb6ea223": "Your environment is live. Anyone can find and install it.", + "m95a52dbf1d63": "Manage listings", + "m9d24337a3472": "View listing", + "m4a2405296122": "Ready to list?", + "m4ce6b8cf84df": "We'll create the listing as a draft and immediately publish it. You can unpublish or edit later from Marketplace → My listings.", + "m957d0bac698d": "Creating listing...", + "m5f51143bee08": "Publishing...", + "me98a25f307ad": "Draft created with ID", + "m234fcfaef3db": ". You can finish publishing from", + "m088ef026e24d": "No workspace found", + "m406c52c4c49c": "Perfect for exploring and personal projects.", + "m9df81b5e09ca": "3 projects", + "m0ca13fac6d64": "1 workspace member", + "m2595f73bafff": "5 AI credits / day", + "mf954c5f63cdb": "5 MB max file size", + "me4351f23dd28": "Custom domains", + "m6180b58ae02d": "Analytics dashboard", + "macea4b408437": "Priority support", + "m07cceb218b35": "For creators and small teams who want to ship faster.", + "m35b944672535": "25 projects", + "m870847bf57ee": "5 workspace members", + "mce1b0d3d449f": "50 AI credits / day + 500 / month", + "m1616cf4be43c": "25 MB max file size", + "md8d32463af03": "For growing teams that need scale and advanced controls.", + "m84e7d0f7e5d2": "100 projects", + "m575f3caebf79": "25 workspace members", + "m82adec1c04dd": "200 AI credits / day + 3,000 / month", + "me273cccad057": "100 MB max file size", + "m15df7c888dff": "Simple, transparent pricing", + "ma22d9d8a90f1": "Start free. Upgrade when you need more.", + "mad2ea9485094": "Most popular", + "m61e8d44ad423": "Get started", + "m7ec0261b8e8a": "Upgrade", + "mdfd7a6134114": "Need more?", + "m47aaf31b83d6": "Contact us", + "me6d381b51f0c": "for Enterprise pricing.", + "m7189e58be0db": "Project Settings", + "m9f9e2e63f6b3": "Manage your project configuration, integrations, and environments.", + "mf86b060c51f4": "Running instances", + "m811386e45e29": "Live runtime state across every published project in this workspace · poll", + "md961f2529930": "Select a workspace from the sidebar to see its running instances.", + "m9f0a4829ae1c": "Loading instances…", + "m28b4720f32ff": "No running instances yet. Publish a project to see it here.", + "mff11b41a9783": "Runtime metrics are collected on the production server (systemd + cgroup). In dev they show as \"unknown\" with empty memory/CPU values.", + "m51280dabfbc8": "fail", + "m2e60115bfe0c": "Add a code from your authenticator app on top of your password", + "m4da10f1fbb17": "Set up", + "m40d0c2ff1f2a": "New recovery codes", + "mb7e3e4aa4257": "Disable", + "mbeb6187632b4": "Set up two-factor authentication", + "m688a0b036688": "Scan the QR code with an authenticator app like 1Password, Authy, or Google Authenticator.", + "ma892ff9886ed": "MFA QR code", + "m3ea15b3e1ff9": "Or enter this code manually", + "m68bc30f3f6b1": "I've added it — next", + "m38f61733e73f": "Enter the 6-digit code from your app", + "meea2745e2867": "Verify", + "m25878b1ac5ff": "Save these recovery codes now.", + "m01457caf898e": "Each code can be used once if you lose access to your authenticator. We won't show them again.", + "md6eafe823591": "Download", + "m11a6767d5674": "Done", + "mc2d5063dd6db": "Disable two-factor authentication", + "m2a35f694ae08": "Confirm your password and a current code (or recovery code) to turn off MFA.", + "m72ed2bd767ce": "Current password", + "m745cbf0e10e7": "6-digit code or recovery code", + "m8adb8274a7c6": "Disable MFA", + "m49cc3d4c731f": "Regenerate recovery codes", + "md2d0d09966de": "Your existing recovery codes will stop working immediately.", + "m0d1fa0dfcc9e": "6-digit code", + "m3cdc25d9296b": "Generate new codes", + "md375b86349a7": "Save these now — we won't show them again.", + "m74a883a037bc": "Settings", + "me5d65e29b68f": "Manage your account preferences and security.", + "mb58fa4e0b18d": "Active Sessions", + "m263f51795417": "Devices where you are currently signed in", + "me0d1b68224bf": "Current", + "md696a35bdd18": "Profile", + "m2a4a3391ad17": "Your personal information", + "m2b7f6a84de91": "Display name", + "maf8cbab6829c": "Your display name", + "m4b0042d044fe": "Contact support to change your email address.", + "mdd0ae7a5cbcf": "Save changes", + "m8f6fb4eb7f42": "Security", + "m7f183b022e0c": "Password and authentication", + "m3f9c991f63a9": "Change password", + "m2cad078bc7dd": "Password updated successfully.", + "m3e2b5dfbc2a1": "Enter current password", + "m6bf1430d8550": "Re-enter new password", + "m0a4e0b71b7f3": "Updating...", + "mfe45b4014135": "Update password", + "m3907fa7f8072": "Appearance", + "m8fa7b13609e0": "Customize how Doable looks", + "mefb52e7172b7": "Theme", + "mdbcd5e7bb7a0": "Light", + "m60acc53f13a5": "Dark", + "m6725e7bbcd28": "System", + "mdb3183e39ef5": "Brand Color", + "m3c1c01b40585": "Danger Zone", + "m25f7dd8d5424": "Irreversible and destructive actions", + "ma2e20a335700": "Delete account", + "mf33e06dd2c9b": "Permanently delete your account and all associated data. This cannot be undone.", + "mc031bf992e17": "Delete Account", + "m123bce672d45": "This action is permanent and cannot be undone. All of your projects, data, and settings will be permanently deleted.", + "mbaaddf70fb5d": "Type", + "m65daeb378bde": "DELETE", + "m1b2a5036345d": "to confirm:", + "md4856f418bf3": "Type DELETE to confirm", + "m685ecb984ac2": "Deleting...", + "m21d5294717e2": "Delete my account", + "m6029d15003fe": "Doable defaults", + "mfd28ca1cbfba": "Workspace-wide runtime AI defaults for apps generated in this workspace. Projects inherit these unless they pin their own values in", + "m55f6925c7920": "Project Settings → Doable", + "m3c7c3432af8b": "Configure chat provider", + "m0e41a94afc0c": "Platform embedding model", + "m23e678a08bbe": "Default system prompt", + "m552e423045fc": "(none)", + "m385c57501bad": "none set", + "m92d12bf8f0a5": "Default embedding model", + "m5967f99c5703": "platform default", + "m4a5c75c9e81f": "Prepended to every chat call for projects in this workspace that don't have their own system prompt override.", + "mf8eddc053b2c": "Default thinking visibility", + "m281b63ba336e": "Always show", + "m8a4ef9b34729": "Hide (server-side strip)", + "mdfd2cac68175": "You're a member of this workspace but not an admin — these defaults are read-only for you.", + "ma91af2a1efd1": "Save defaults", + "m880e5d9d8e9a": "Workspace AI usage", + "m8a5a9466c8b4": "Aggregate of every project's runtime AI calls in this workspace (editor / builder calls are shown separately under", + "m6a99fc662f7c": "mode).", + "m2b065c7c9ce4": "Today", + "ma7c742643c7c": "7d", + "me3ba17e32240": "30d", + "me7601ca1178a": "Total tokens", + "mada27592c957": "Requests", + "m9ccba222f889": "Estimated cost", + "m551e877182dd": "By mode", + "m204a5eb2cd28": "Cost", + "mac1fe0f76734": "Top projects", + "ma039dfb9628b": "Tokens", + "me0707a236f1e": "(orphan)", + "m1890cc51ee20": "No default (let users choose)", + "mf64b3ff5bc6e": "React (Vite)", + "m49d550463542": "Default framework", + "m87946b3562a1": "Used when a creator doesn't pick a framework and the prompt doesn't clearly signal one. Defaults to React (Vite) when unset.", + "m19c17957c224": "Read-only — admin permission required.", + "m4b1b8aa3608a": "Owner", + "m7c968fb71f50": "Member", + "m678bfa6af48b": "Viewer", + "mc910d474dcd7": "General", + "mf5a378c34758": "Workspace name and description", + "mee9ff5054717": "What's this workspace for?", + "m84c7e2a050b5": "Your role:", + "me2204b3eaff6": "Team Members", + "me31ab643c44f": "member", + "mf728553b59c5": "Invite by email", + "m7fbfb94aeafa": "colleague@company.com", + "mb95d5f7c3973": "Generate invite link", + "mea61bc15688d": "Copied!", + "mdbf362d4f210": "Copy link", + "md1eb47c77576": "(you)", + "m9438e0ba8e63": "Remove member", + "m74d26f0e2e44": "Pending Invites", + "m62a2fed3d6e0": "pending", + "mf6725f3af08a": "Expires", + "m3e19d958e483": "Revoke invite", + "mf9d85ba811da": "Irreversible actions", + "mf1955b781545": "Deleting this workspace will permanently remove all projects, files, and data. This cannot be undone.", + "m55f033dbcb29": "Delete workspace", + "mdaab6af4973b": "This will permanently delete", + "m0869e4e92657": "and all its data. Type the workspace name to confirm.", + "m280b10c89cc4": "Delete permanently", + "m07437cd651be": "Environments", + "maab669a72882": "MCP Servers", + "m00e6f89be431": "Skills & Rules", + "mad94fce14ac2": "Doable", + "m3d65b4959a69": "No workspace found.", + "m8e25832407ee": "Workspace Settings", + "m2e1aa9f2f180": "Manage your workspace, team members, environments, and integrations.", + "m16e44882f450": "Bundle skills, rules, knowledge, and MCP connectors into reusable presets. Projects inherit the workspace default environment.", + "ma3ab5156a004": "Connect third-party services like Slack, Notion, GitHub, and more. Workspace-level integrations are available to all projects.", + "m55deb400b9f9": "Connect Model Context Protocol servers for custom tools and capabilities. Workspace-scoped connectors are available to all projects.", + "m035456671e98": "Manage reusable skills and rules that shape how the AI works. Workspace-level skills are inherited by all projects.", + "m12bbbbf8f137": "Knowledge Base", + "m82abc5221280": "Context files the AI reads before every interaction. Workspace knowledge is inherited by all projects. Projects can add their own overrides.", + "m91817495a78f": "Back to file list", + "meaece9d1a4a8": "Custom context file", + "m9c80e8331a86": "unsaved", + "m0c202c1c284e": "Revert changes", + "m4be89ed53733": "Save (Ctrl+S)", + "m28e18dc9db38": "Delete file", + "m1ce93dacbcf4": "chars", + "mfd65b5367e9e": "Loading knowledge base...", + "md4f8b86bd838": "These files are read by the AI before every interaction in this workspace. Click a file to edit it.", + "ma6979ff7fee1": "Add Knowledge File", + "mf50957f1c8cc": "New Knowledge File", + "mb2af5e64cae1": "File already exists.", + "m4759498ac2a7": "Create", + "m6b170f2de20f": "Internal Testing Scope | Doable", + "m2865af52a310": "Internal Testing Scope", + "md1e9cdd9f9e0": "Doable is provided for authorized internal members to test the natural-language application generation workflow.", + "m70795fb25c14": "Project and account data are stored in this deployment. When using AI, request content is sent to the model endpoint configured by the administrator. Please use test data.", + "mfd3d283506ca": "This page provides information about internal testing. Contact the platform administrator for access, data processing, or support information. License and copyright notices for open-source components are retained in LICENSE and NOTICE.md in the deployment source code.", + "m22d9879b3be5": "Contact Administrator | Doable", + "m367af5187c57": "Contact Administrator", + "mbee3f95fbd7c": "Cookie Policy | Doable", + "m52454d98091b": "Cookie Policy", + "m14744ba1fd1d": "Copyright and Open Source Notice | Doable", + "me2e0aaabb0df": "Copyright and Open Source Notice", + "m76c5505ff2e2": "Back to home", + "mee290b3ddbc8": "Cookie Policy", + "m997c65f3c315": "Acceptable Use", + "mc2ac011216f3": "DMCA", + "m2b5c3d26721a": "Contact", + "mc081a965e548": "Doable. All rights reserved. Internal testing platform.", + "m72366a549ad3": "Data Processing Statement | Doable", + "m8b2f1b153b79": "Data Processing Statement", + "mb7a1c461c394": "Internal Testing Guidelines | Doable", + "m92070588f1ac": "Internal Testing Guidelines", + "m1a1952532a59": "Authentication Failed", + "m04b7a0b6eb85": "This should only take a moment", + "m3d2ee2c69bee": "Preparing authentication...", + "m64ddd1020b45": "Signing you back in…", + "m54c2a2733940": "Brew Haven – A Coffee Shop Worth Finding", + "m027c61c1e5b2": "Handcrafted coffee, cozy atmosphere, and community at the heart of every cup. Visit Brew Haven today.", + "mdac866afb655": "Sustainably Sourced", + "m25cc22295e06": "Community First", + "m4656735e0b78": "Crafted with Care", + "ma56dda826249": "Brew Haven", + "mfdc2b75ad30f": "Find Us", + "m6b8521ba68ad": "Est. 2019 · Handcrafted Coffee", + "mfff0ae82fb8d": "Your perfect cup", + "m558ae13d7638": "awaits you.", + "m10fa41b20df4": "Slow mornings, bold espresso, and a corner that feels like yours. Brew Haven is the neighborhood coffee shop you've been looking for.", + "m32ebfb7c7532": "See Our Menu", + "m3fb76449c076": "Our Story", + "me54eb3b48e08": "A place to slow", + "md1bc8820eb83": "down and savor.", + "m5ffd2fdefce3": "Brew Haven started as a dream sketched on a napkin in 2019 — a neighborhood coffee shop that treated its beans, its baristas, and its guests with equal care. Today, we're proud to be a gathering place for writers, remote workers, first dates, and old friends.", + "m2b0ec859f42d": "We partner directly with family-owned farms across Ethiopia, Colombia, and Guatemala. Every roast is dialed in weekly, so what's in your cup is always at peak flavor.", + "me66580cc2323": "What We Serve", + "mb545da336b4d": "Our Menu", + "m4e18d19f9a89": "Seasonal. Fresh. Always made to order.", + "m7ef51b7808f3": "Kind Words", + "m21e4b2f51b39": "What Guests Say", + "m1033449b8c82": "Come See Us", + "m17509f6f7fd8": "Find Your Haven", + "ma53218c7a3a1": "We're nestled right in the heart of the neighborhood. Bring your laptop, your journal, or just yourself — there's always a warm seat and a perfect cup waiting.", + "m56ef8f20955f": "Address", + "mf1898d578fff": "142 Maple Street, Brooklyn, NY 11201", + "m21e8492938ab": "Hours", + "ma8a0f79afc28": "Mon – Fri: 7am – 7pm", + "m6e1828ded15a": "Sat – Sun: 8am – 6pm", + "m63dceb8800b2": "Phone", + "ma7e61d026fe0": "hello@brewhaven.coffee", + "m74ac8a852e7a": "142 Maple Street, Brooklyn", + "m43a6ffbfa175": "Open in Maps ↗", + "mf7f51cfa2de0": "Brew Haven. All rights reserved.", + "mbad57ef7837c": "Instagram", + "md41f5b4977ee": "Facebook", + "m5510cb0c913d": "Loading editor...", + "m0072e6b93494": "Design", + "mb977b950c1ae": "Cloud", + "mabc7e9892806": "Files", + "mc372fee9b456": "Speed", + "m55c03ce120c7": "Planning these actions:", + "m15a8b431558b": "Failed to start project", + "mbabe6dbcbd8f": "View install logs", + "m4504b2c82bef": "Copy logs", + "m1a5787cd1c50": "Taking longer than usual", + "mabee9029bf6d": "Previewing last saved version", + "mb99fa6c06150": "Preview unavailable", + "me1d5ea6491f6": "Loading Live Preview...", + "m0eb1ec38c2d7": "Getting ready...", + "m82b93630a921": "Starting...", + "m0e7696009337": "History", + "m041aefc44394": "Toggle sidebar", + "m340f463033e0": "Code", + "m76c7269afa9f": "More views", + "m69c404591e99": "Views", + "mc9e9cb30a945": "Unpin from toolbar", + "m637e9e5bb5ff": "Pin to toolbar", + "mf7e0c1af18fe": "Download project", + "mf930a196376c": "Duplicating...", + "mf8725da98b5a": "Duplicate project", + "m8c3970faabc3": "Copy project link", + "me9bef0b0f3c2": "Keyboard shortcuts", + "mc4c81576b2aa": "Click to navigate to a route", + "m9bd88f2485ac": "Desktop", + "m80da9e2ced28": "Tablet (768px)", + "m2758ecdf72f7": "Mobile (375px)", + "m5b529abadacc": "Refresh preview", + "me0af5c0bc245": "Open in new tab", + "m37fd4e355ba3": "Exit fullscreen", + "mc461dbb2bab7": "Fullscreen", + "m29887a5ff984": "Share", + "mff37e873810f": "Deploy to a public URL", + "m258150cb3ee4": "Start a conversation", + "m2d8d9afecd24": "Describe what you want to build and Doable will generate the code for you.", + "ma270fdec86fe": "Work mode — generates code", + "m0307fd10509e": "Strategize mode — creates plans only", + "me84bd14c0f46": "Show full prompt (", + "mf613e62f9414": "k chars)", + "m260f9f6f0261": "Thought process", + "mce4f8c390a73": "AI provider not connected", + "me1a9e2c7f9c5": "Connect a GitHub Copilot account or add a custom provider key in Settings → AI.", + "m45833b231c24": "Configure AI", + "m897f32e09bef": "Show raw SDK error (for debugging)", + "mc1e75128adb8": "Building...", + "m86f666cabb18": "Hide earlier steps", + "m0df6f1cad36c": "Show", + "m2a51d3547c23": "earlier", + "m3e64cc41cf8e": "step", + "mb7595e2a8639": "steps", + "m5a113737926c": "Good response", + "m5ffca88c1555": "Bad response", + "m457efe538b25": "Copy message", + "mf8d46c2570e7": "More actions", + "m9757ccd5ef12": "Edit message", + "m35da197a9e9c": "Revert to this point", + "m82218b943cdb": "Click to download", + "m53ece783f833": "New step", + "m1637236fa066": "Describe what this step does", + "maec142ee7062": "Back to Chat", + "m6ca7bd811152": "Stop Doable", + "m806670321baa": "5 credits remaining", + "md22feb61298b": "Add credits", + "mb04765eefcef": "Ask Doable...", + "m9fa4ffd4c58e": "Attach file (images, text, code, PDF)", + "m6f6d2f91972f": "Design View", + "md4cb298c2663": "Stop generation", + "mcae7d57bc067": "Stop", + "mf6f4688ff23d": "Send", + "m65190883f1fe": "Shift + Enter for new line", + "mc39d646f1076": "Explorer", + "m3d2301d732a7": "Failed to load", + "m60801b1a50bd": "Loading files...", + "mcb922b5840ae": "No files yet", + "m3ca461fea183": "Ask the AI to create some files", + "m51d3d0b1a3b5": "Close (Ctrl+W)", + "m26bfbd5c83f9": "No file selected", + "m712e79239f4a": "Hide minimap", + "m073549e7238a": "Show minimap", + "me9ddf97389a9": "Select a file from the explorer", + "mfde6d3caf5c9": "Click on any file to view its content", + "m97cbc435d6e8": "Ctrl+S to save", + "m71f5abb5edb0": "Ctrl+F to search", + "m6ee99fb19bf8": "Ctrl+H to replace", + "m5c8e7fa6580f": "Ctrl+W to close tab", + "m2f4e0b81ecfb": "Loading file...", + "ma3c43b2835a3": "Code will appear here as the AI generates files", + "meae2557ee98d": "Start a conversation in the Chat tab to generate your project", + "m12aa55074ad4": "App Preview", + "m01ff8705531c": "Auto-fix paused — the AI didn't edit any files on the last attempt.", + "mc2e1149badc5": "Open the chat to fix it manually, or click Reset Preview.", + "m569907da4f4a": "Will retry automatically in 2 minutes, or resume now.", + "m1d45fe5006a5": "Resume auto-fix", + "m420b6920da29": "Setting up workspace...", + "m6f17cf6ff57b": "Building from plan...", + "m41653c9c7085": "Building your app...", + "m2133e77f6691": "Installing dependencies", + "m26e9d5c2f091": "AI is writing code", + "m8e16d8fd15bd": "Share Project", + "mb7f251195db4": "Share your project with others or embed it on your website.", + "m724408ba0fe1": "Link sharing enabled", + "m5baec6fcbec2": "Private project", + "ma4e33656caa4": "Anyone with the link can join and collaborate", + "m2dc6333ea270": "Only invited collaborators can access", + "m9e0d56d0c3b1": "Collaboration Link", + "m4272978f92ad": "Copy collaboration link", + "m724e78a3254c": "Copy Link", + "m5f14f9e6d80f": "visitor", + "mfe9919df44cb": "visitors", + "m905dd6fd364c": "total views", + "m655e2cc98ce6": "People who viewed this project", + "m2396bf0b471b": "Unknown visitor", + "mf0e68ac26df2": "visit", + "mb944075326e4": "visits", + "m439c0bddcded": "Collaborators", + "m1b4064cc2957": "Collaborator", + "mf2c6e9b92fed": "Remove collaborator", + "mf87e73885684": "No collaborators yet", + "m0ddd45761e9e": "Share the link above to invite people", + "m865f0063ee77": "Enable link sharing to let others join", + "mc4269502c892": "Preview URL", + "m787406ddea2a": "Not available yet", + "mb26d1037f1c2": "Copy URL", + "m3e358110ed34": "Embed Code", + "mfb1eec41bf9a": "Preview not available yet", + "ma6185b1bac5a": "Copy embed code", + "m7d9eb7acb13e": "Close", + "m63eac3543445": "Deploy Project", + "m258e06a65649": "Push your project to a public URL.", + "m1b5e18d612ea": "Production deploy", + "m532eaabd9574": "Test", + "m5ad97435475e": "Preview deploy", + "m90f5b6aa4773": "Deploy to", + "m1653b4115030": "Building project...", + "m80113aa5faa0": "Deploying...", + "mbbfce3ca6d67": "This may take a moment. Please don't close this dialog.", + "mcfb9b21873ed": "Preparing files", + "m64629c4d29ff": "Building project", + "m8d32627e5f77": "Deploying to", + "mab8e18ef4ebe": "production", + "m5975cf1bba43": "preview", + "md94be7d9742f": "Live!", + "m7a0c1d6867ef": "Your project is now live at:", + "m3f3ade612f14": "Remove the live site and free the URL", + "m77cdc28c5085": "Taking down…", + "m8026481a3655": "Take down this site", + "m4a1fec6bb23f": "Deploy failed", + "mbe6c9b2e929b": "Something went wrong during deployment.", + "m796ae067cc65": "View build log", + "mb703dbfc031f": "Try to Fix", + "m862996056422": "Delete Project", + "m59cdaa26dd9d": "Keyboard Shortcuts", + "me198269c2a19": "An unexpected error occurred. Please try again.", + "m44dc4af8bac1": "Reference:", + "mfb9ef894175c": "Product", + "m5697d03daef4": "Features", + "mdfe95783edfe": "Pricing", + "mead07c84baac": "Changelog", + "me89b30aa1dc3": "Resources", + "mc205924de0fe": "Documentation", + "mf911e414cf6b": "GitHub", + "mbe91940b79f4": "Support", + "mde4743c87973": "Company", + "m54a57c3147c4": "Privacy", + "mede548996483": "Terms", + "m74d52f5a16af": "Tell AI what you want to do and Doable gets it done. From idea to deployed app in minutes.", + "mbcd18ead5fa8": "Twitter", + "mdd84425b72da": "LinkedIn", + "mc3d6834efdd6": "Doable. All rights reserved.", + "m141395eb3556": "Cookies", + "mc8d1a76ed3cd": "Accepting invite…", + "m590ca07bd607": "You're invited to a workspace", + "mf28e0103cd50": "Sign in or create an account to accept this invitation.", + "m5735019b4e98": "Invite accepted!", + "m3ce4ce5b4d78": "Redirecting you to your dashboard…", + "m689d821c3114": "Couldn't accept invite", + "ma469ab4ca4e5": "Page not found", + "m74b78a922b99": "The page you are looking for does not exist.", + "m900fe12faa26": "Solutions", + "mbb501d7877eb": "Community", + "mc189840cf7e2": "Log in", + "mdcf218cf7b95": "Dream it. Do it. Done.", + "m13b022d3d051": "Say it. Doable does it.", + "m3acf05570e85": "What do you want Doable to do?", + "m87fbe4fb79b1": "Attach file", + "m029320ad166c": "Screenshot", + "m3f51e8d0877b": "Teams who do more, do it with Doable", + "m463052e79d3a": "How you Do it with Doable", + "m5e6a3d274615": "Say what you want to do", + "m9a7bfe7eb8e4": "Describe your app, drop in screenshots, or share docs. Doable gets it.", + "m78241958361f": "Watch Doable doing it", + "m9f161010716d": "AI writes the code, builds the UI, and sets up the backend while you watch.", + "m80c9d1291916": "Done. Ship it.", + "m7d20496fb539": "One click deploy. Custom domains, SSL, and global CDN all done for you.", + "m09013f2de54b": "Everything you need to get it done", + "m08ebf324d047": "All the tools built in so you keep doing, not configuring. Doable handles the rest.", + "mf518cf7b4efe": "Lightning fast", + "m6bb152928b4a": "Secure by default", + "ma25c6b5b6afa": "Global CDN", + "m8c0b956e14ef": "Full code access", + "m0684cdd39443": "Ready to do this? Doable is.", + "md52657699508": "Thousands of makers are already doing it with Doable. Start for free. No credit card required.", + "maeea1a48193b": "Start doing for free", + "m1445799c033a": "Learn more", + "mfa23af167fb0": "Free forever for personal projects. Just do it with Doable.", + "m7013af4c42fe": "Setup", + "m8e6a6cca7aae": "Step", + "mcd6e6bf7671e": "Could not load plan defaults — you can configure them later in /admin/plans.", + "mf33e9463fe30": "No plan defaults configured. The provider you set in Step 3 should already be applied to all plans. If this list is empty, you can configure them later from", + "m5950cc6b345a": "AI model defaults per plan", + "m0d962a8ad91d": "The provider+model you chose in Step 3 was applied to all plans automatically. Optionally override the model for individual plans (e.g. a cheaper model on Free, a more capable one on Enterprise). You can change these any time in", + "mfa8ed0bdabdd": "Plan", + "m3840d9d29421": "Default model", + "m6786e7ae86aa": "Welcome to your Doable", + "mf198e3035cb0": "You are the platform owner on this install. This short setup walks you through connecting an AI provider, sign-in options, and plans & billing — so your team can sign up and start building. Every step is optional and revisitable from", + "m9619649d8dc1": "Workspace name", + "me2f59cbbd2e4": "Acme Corp's workspace", + "m56bf215a01f2": "This is the name shown to users on your install.", + "mbb59d7d5f7b2": "Use your existing Copilot subscription (OAuth, no key)", + "maf41ef1f8cc0": "Paste any /v1 base URL + key (Llamafile, vLLM, proxies, …)", + "m53542be919ee": "gpt-4o (OpenAI)", + "m7e85883aa362": "gpt-4o-mini (OpenAI, cheaper)", + "m447070f01035": "o3-mini (OpenAI reasoning)", + "m7f3c09e12c73": "claude-3.7-sonnet (Anthropic)", + "m442058677a76": "claude-sonnet-4 (Anthropic, latest)", + "maacb18706135": "gemini-2.0-flash (Google)", + "m1caaab8de684": "Auto (route per request)", + "m8b4adb3862ca": "Pick or type a model — chat needs one to know which engine to call.", + "me8579660f269": "Click \"Connect with GitHub\" first — Copilot needs a connected account before saving.", + "mb83bc0c87ee9": "Connect an AI provider", + "ma30e891162d9": "Pick one to start — you can add more in", + "mb36828d08414": "later.", + "mee84a5fafc6f": "Search providers (e.g. minimax, groq, ollama)", + "m2150d8df37e4": "Show all", + "m1e19bab29bc6": "providers", + "m6da70c62b13a": "popular shown)", + "mc892c6d3f9e5": "No providers match “", + "mad5c8b09c799": "”. Clear the search or toggle “Show all”.", + "mf2969201caf1": "free tier", + "ma9977b3804b1": "Tip: export any of 19 supported API key env vars (", + "m782f3b91aee9": ", …) before running", + "m9e8be70c89aa": "and the matching provider is pre-configured here. See", + "mf77ea2dcde80": "banner for the full list.", + "m3e6a04afff84": "Running a", + "mffa838f6509a": "local model", + "m28aa86db16fb": "? Search for", + "m76e3c7bfe641": "ollama", + "m7df09a7717ef": "lm studio", + "m3d30020b1863": ", or", + "mec8207a3dde6": "vllm", + "m910b571e2b50": "above — no API key needed, just point at", + "m9cf6151e1e52": "Doable does", + "m254bb97b57f1": "not", + "m9fe6e8f5bbda": "bundle, ship, or proxy any third-party AI keys — every key is BYOK (bring-your-own).", + "mb58eb52c8810": "Skip for now", + "m01dbdc1c993d": "(replace", + "m0344f8c6320b": "with your values)", + "md34c1f38253c": "Base URL:", + "me0beec38b884": "Get key", + "m202ee5a3741d": "This provider runs locally on your machine — no API key needed. Make sure the server is running at the URL above", + "me63dffe73660": "; see warnings below", + "mae563693e963": "Your API key", + "m089ef2b6dbb3": "Model ID", + "m09bf1d2d1f94": "(from provider's docs)", + "m119ac74a9f28": "GitHub Copilot uses OAuth — no API key is needed. Click below to authorize Doable against your existing Copilot subscription. A popup window opens; once you authorize on github.com, it closes automatically and we return here to pick the default model.", + "md3f403f42255": "Waiting for GitHub…", + "m6f2b4e53fd6b": "Connect with GitHub", + "mb9ae1344db09": "Connected as", + "m733e8e968cd4": ". Pick the default model below — you can change it any time in", + "m67969da753e5": "Default Copilot model", + "mf006797a8658": "Fetching the live list of models your Copilot subscription includes…", + "m97c6d58174ba": "Use this model as the default for every plan (Free, Pro, Business, Enterprise) and as the suggestions model. You can fine-tune per-plan and suggestions models later in", + "mcd51f8c88998": "Validating…", + "mb62d92c04b27": "Validate & Save", + "m397e0b042fa6": "text-embedding-3-small / large. Fast, widely supported, $0.02/1M tokens.", + "m8b641190411f": "gemini-embedding-001 / text-embedding-004 via Gemini's OpenAI-compatible API.", + "m21b98f239b59": "Any /v1/embeddings endpoint — Ollama, vLLM, Voyage, Cohere via proxy, etc.", + "mce4eb2f81438": "(optional — for chatbots, semantic search, RAG)", + "m10f5e9ac0df6": "Pick once — every workspace inherits this. Skip if you don't need RAG yet.", + "m5f37766b7475": "End-users of apps built on Doable will never see this — they just ask the AI to build a chatbot. The runtime calls this embedding provider to vectorise their documents. You can change it any time from", + "m1e84cbbeaece": "Validates the key with a probe call before saving.", + "mce770667e5f9": "Google", + "mf5d92316d71f": "Sign in with Google accounts", + "m4670389c9b26": "Sign-in + Copilot AI + repo push/pull — ONE OAuth App, register the parent URL below", + "mfe7ceb7816ed": "Supabase", + "m526606259ea3": "Lets users authorize Doable to provision Supabase projects on their behalf when the AI builds a backend-enabled app. Without this, users see a sign-in prompt mid-build.", + "m3c9e12e223c9": "Sign-in providers", + "m6590db953aef": "Let your users sign in with Google or GitHub. Register the callback URL in each provider's dashboard, then paste the credentials below.", + "m1a2303ede074": "Connect", + "mf5b92da3fdef": "1. Register this callback URL in the", + "mf6a4a7cf34d1": "developer console", + "m8d525e5f158b": "Copied", + "m293fc19e964c": "2. Paste your credentials", + "m8726db013948": "Client ID", + "mae21cf6d24b8": "Client Secret", + "m23e39291d613": "Saving…", + "mf412ebc3df40": "Save credentials", + "m1b24fc634466": "Credentials saved. Value masked for security.", + "me2e89b8e6f9f": "Sign-in providers are optional. You can configure them later in", + "md084947c92ce": "Plans & billing", + "m5664b564628f": "Pick which AI model each plan tier defaults to, then optionally wire up Stripe + signup policy. Everything here can be changed later in /admin.", + "ma5a084d23d5a": "When ON, new signups stay pending until an admin approves them in", + "m0092b9666213": ". When OFF (default), anyone with a valid email can sign up immediately.", + "m63225ccda962": "Could not save — try again or use /admin/signups", + "mac177037c161": "Stripe (paid plans)", + "m7131c5070086": "Paste your Stripe secret + webhook secret to enable Pro and Business plans.", + "ma88096f64ef5": "Optional — enable paid Pro/Business plans via Stripe.", + "me83d9f58b3d6": "Stripe secret key", + "m31535e99b294": "Your Stripe secret", + "m48c7cde4072b": "Webhook signing secret", + "m18424d99bfd7": "Your Stripe webhook signing secret", + "m7738cb3ae13c": "Price IDs for Pro/Business can be added in", + "m2de0ae2fa094": "Save Stripe", + "m2ba1d3dd28b6": "Want to fine-tune what each plan (free / pro / business / enterprise) can do? Set projects-per-user, daily credits, file size limits, custom domains, and more in", + "m8dc5b288dc5f": "— sensible defaults apply automatically until then.", + "mbc01ae77f37c": "Finish setup", + "m730e434e2c2a": "Cloudflare Tunnel", + "m9778b714611a": "We strongly recommend running Doable behind a Cloudflare Tunnel. Your server never exposes ports 80 or 443 to the public internet — all traffic enters through Cloudflare's edge, with built-in DDoS protection and TLS.", + "md1dcc908d054": "Cloudflare Tunnel active", + "mb41298f6a20c": "Cloudflare Tunnel not yet configured", + "m3e0bd76b4c80": "cloudflared binary:", + "ma51a6c19a1ff": "installed", + "me9363f76e114": "not installed", + "m6481edfe0a91": "tunnel config:", + "mffa63583dfa6": "missing", + "m261945c8a175": "cloudflared service:", + "m8322e87d2458": "stopped", + "m8892fc20f821": "public hostname:", + "mdd00d3d3e9f7": "Next steps", + "m8cda32203974": "Install cloudflared on the server:", + "m4a706dc0d33e": "curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cf.deb && sudo dpkg -i cf.deb", + "mf08fb302bec6": "Log in to Cloudflare and create a tunnel:", + "m5da4ed8525fa": "sudo cloudflared tunnel login", + "mffbc4b090a5e": "Then create + route the tunnel:", + "m0e01c001f314": "sudo cloudflared tunnel create doable && sudo cloudflared tunnel route dns doable yourdomain.com", + "md71e794ad243": "Start the cloudflared service:", + "m5a846462fa96": "sudo cloudflared service install && sudo systemctl enable --now cloudflared", + "m98f87e36b355": "Open Cloudflare dashboard", + "m81b5b9670350": "Re-check status", + "me892474b34b3": "All set — your install is reachable through Cloudflare without exposing any ports.", + "mfd45cb7aab11": "Skip and use direct ports?", + "ma3eca7bb4939": "Without Cloudflare your server will need ports 80 and 443 open to the public. You become directly responsible for DDoS handling, TLS cert renewal, and origin IP exposure. You can add Cloudflare later in", + "m5b0b0536f25e": "Skip Cloudflare anyway", + "mb1acabed067d": "Skip Cloudflare", + "m515d1a3dc956": "Waiting for tunnel…", + "mf68057ac59cf": "Task Tracker", + "mbfa0cab91d75": "Switch to light mode", + "mfc43ea9804c7": "Switch to dark mode", + "m64879f7d6b96": "plan", + "m1377264ba3b0": "Workspaces", + "m4b892277843c": "Create workspace", + "m5ebc59145b59": "Workspace settings", + "m01eb22153f34": "Credits today", + "m11dde17d6c3e": "Unlimited", + "m198a27bda7be": "(limit)", + "m4b87271b6b81": "All projects", + "m083fe88f924c": "Import project", + "m690dbe9dc099": "Recent", + "m091f4b8e2db6": "No recent projects", + "mc4d6bb200f4c": "Folders", + "m82b9e1ef0b40": "Create folder", + "m8a66376ee6fc": "No folders yet", + "macb320d7f3e3": "Upgrade to Pro", + "m382c1b0128ec": "Get unlimited projects and priority AI generation.", + "m2c414ee58a7e": "Upgrade now", + "m3e402e6d846c": "user@doable.dev", + "ma8e5e2c64f0c": "AI Settings", + "m8d59829c1e15": "Usage", + "m8b2b19860686": "System Admin", + "m48f0d3d397d4": "Sign out", + "mcee021f1b617": "My Team", + "m14d34edf50ef": "Folder name", + "m7249f19c9e4f": "Rename folder", + "m39f35f2d44d6": "Delete folder", + "me2c1d47c93ed": "”? Projects inside this folder will be moved to the root level.", + "mc409c66f71f2": "Official", + "m3b9c358f36f0": "file", + "m3d7db37d08f9": "files", + "mf68bbeba04a3": "by Doable", + "m351dd54e5327": "Use template", + "m7d8ab368210c": "Close preview", + "mee3aea9a74c3": "No active workspace selected. Please pick a workspace and try again.", + "m57bbe6daa81b": "Remix project", + "m1b8e9e6b07af": "By remixing a project, you will create a copy that you own.", + "m7d465fb9b931": "Purple", + "m275dbda9dedb": "Sunset", + "mfed12611d2d8": "Ocean", + "maf1ccb31304d": "Emerald", + "me10d850954a8": "Rose", + "m767cff7f960b": "Microphone permission is blocked for this site. Open the padlock icon → Site settings → Microphone → Allow, then try again.", + "mb5c308fbe72b": "Log filters", + "m81493812f8f2": "Loading filters...", + "mfc86c80c7edf": "No filters configured.", + "mfb9cf75606b4": "enabled", + "me520df698000": "Add filter", + "maad7b48f94b8": "deny-pattern", + "m761252ef4dca": "drop-pattern", + "m4288ade73ff9": "Pattern", + "m404879015b5e": "Replacement token", + "m913a8849b60d": "Adding...", + "m52493dd405b2": "AI Rules for Your Team", + "m1698475a0e4e": "Lock everyone in your workspace to a specific AI model — no one can change it", + "m40edcb0424d1": "Require everyone to use the same AI model", + "mce07e2d406c9": "When turned on, every workspace member uses the model you pick below. They won't be able to change it.", + "ma270c2ea38f8": "Provider Source", + "m173243930c8e": "Server Default", + "m7c5b75e762fd": "Uses the server's built-in GitHub authentication.", + "mfb4cbadb8b70": "No accounts connected yet. Go to the Connections tab to add one.", + "m9e09fe0c5e85": "No providers set up yet. Go to the Connections tab to add one.", + "m5f8a57b902c9": "Let Members Choose Their Model", + "mc8500c181a22": "Show or hide the model picker in the editor for workspace members", + "md0965f23e9a7": "Show model picker to workspace members", + "mea1cef6187f4": "When turned off, members won't see which model they're using. The workspace default (or enforced model) runs automatically in the background.", + "med9b760289e6": "Saved!", + "m06440082fecf": "Save Policy", + "mdc273117482b": "Connections", + "m278ba0d8ae8b": "Configure Model", + "mc3ceee351e98": "Access Control", + "ma3966fe9958a": "Access Restricted", + "me3a6b88175b6": "AI Settings has been disabled by a platform administrator.", + "m5658830ef02d": "Your access to AI Settings has been restricted by a platform administrator.", + "m2687891426b5": "You don't have permission to access AI Settings. Contact your administrator.", + "m57294990f283": "Configure which AI models power your workspace.", + "mdd51804e0d20": "Label (e.g. 'My personal account')", + "mdcd0e95a1c40": "Label (e.g. 'Team account')", + "m316ff94e7f22": "Paste your GitHub access token here", + "ma87169d1ad67": "GitHub AI Accounts", + "m4e74616e8a5a": "Connect GitHub accounts that have Copilot access. Personal accounts are visible only to you.", + "m81e8901975a6": "My personal accounts", + "m10fdee9039c4": "Only you can see these", + "m88d4ac742ef4": "Sign in with GitHub to connect a personal account", + "m22f6738880de": "Sign in with GitHub", + "m0cead0b1bbfb": "Add a personal account using a GitHub access token", + "m6f64f2fda498": "Add personal", + "ma6229eda29c2": "No personal accounts. Add one to use your own Copilot subscription privately.", + "mca24402563e9": "Workspace shared accounts", + "m81e613c508dc": "visible to all members", + "m37d3acac0058": "Sign in with GitHub to share a workspace account", + "m748e1e7d0514": "Add a workspace-shared account using a token", + "m9ed034e74290": "Add for workspace", + "m15792a7c8fdf": "No workspace-shared accounts. Add one to provide a Copilot account every member can use.", + "m9aaf2001e996": "No workspace-shared accounts available. Ask a workspace admin to share one.", + "mf7004e38eb59": "Share this provider with everyone in the workspace", + "m2ff8c705e102": "Make available to workspace", + "mab7d145d79e5": "Test connection & refresh models", + "m5234fbffc3e9": "Remove provider", + "m35877a8c182e": "Custom AI Providers", + "m6b813862d568": "Bring your own API keys for OpenAI, Anthropic, local models, and 50+ more. Personal providers are visible only to you.", + "m55c7becc0df9": "My personal providers", + "m12149a0e62fb": "No personal providers. Add your own API key for private use.", + "m73e4a838e4c2": "Workspace shared providers", + "m450b43b4e4a1": "No workspace providers. Add one to share an API key with every member.", + "m296b7ae87520": "No workspace providers available. Ask a workspace admin to share one.", + "m272a1179fcc5": "Workspace defaults", + "m72961734eed0": "admin-only — read-only for you", + "m8ead970fda1c": "Applied to new projects in this workspace. Each project can override these from the per-project Doable tab.", + "mac20a57bfde0": "Hide", + "m02bbdcb834ae": "Default system prompt for new projects", + "mb6928362a2cc": "(none — projects ship with no pinned prompt)", + "mafef567095e2": "Save workspace defaults", + "m4c23e9e18502": "Personal AI overrides", + "m8eb55745fa7e": "These apply to projects where you are the workspace owner. They override the workspace defaults but lose to explicit per-project settings.", + "mb0863c6bc9e4": "Thinking visibility", + "ma85fdf51c603": "Personal system prompt (optional)", + "m9fb002ae01d2": "(none — workspace default applies)", + "m265d57a355b8": "Save personal overrides", + "m6c9df66826e1": "Workspace usage rollup", + "m63b86b7a429f": "Pricing not configured", + "m5c39123805ff": "Prompt", + "m557fe004f344": "Completion", + "m6352380a7c9f": "No usage yet.", + "m03db3a45c3c1": "No usage data.", + "m66aeb8c46b2f": "Claude Sonnet 4", + "m9b816f4a6295": "GPT-4o", + "m4c43a229d244": "GPT-4o Mini", + "mcab28bc8feb2": "GPT-4.1", + "m7e1eb717e40b": "GPT-4.1 Mini", + "m2ea8e99cc4c2": "GPT-4.1 Nano", + "mdfc325305b0c": "o3-mini", + "m9056e3300ca8": "o4-mini", + "ma0089ee0749b": "Gemini 2.0 Flash", + "mc587c2601ccf": "Vision", + "m10d67f48de99": "Tool calling", + "m7381afd23bb9": "Last health check latency", + "ma424e33d9093": "Locked", + "m4b9a22bfe3cc": "Copilot Models", + "m8c31e6e72230": "Local", + "ma5ac4b64684f": "Manage AI Settings", + "m5a8d0b7bf5bc": "GitHub Copilot Accounts", + "me04ed13e7f98": "Connect GitHub accounts with Copilot subscriptions for AI model access.", + "m313ebbb894ad": "Connect via OAuth", + "m8717362cf4d4": "Add Token", + "m3cc8c4614ff9": "Label (e.g. 'Work Account')", + "m71e3980d749e": "GitHub Personal Access Token", + "m3d0d3f78acca": "Add Account", + "m19cd7039551d": "No GitHub accounts connected yet.", + "m4a24319d30be": "Connect a GitHub account with a Copilot subscription to use Copilot models.", + "m92340695899b": "Active", + "mfc20838c106a": "Remove as default", + "mae188faa0901": "Set default", + "m5bcf311b19d8": "Test connection", + "mfd35618c1920": "Remove account", + "m371b1434a262": "Both configurations are saved. Switching tabs only changes which one is active — your other tab's selection is kept.", + "m00aa6fbbbb45": "Connect GitHub Account", + "m4c6e2e6be505": "Uses the server's built-in GitHub authentication. Connect your own account for more control.", + "m0b0a0d2d7316": "No accounts connected.", + "m14d8260ff981": "Connect one", + "m6f4f0e79bd3a": "Add Provider", + "m00d0efcd9a96": "No providers configured.", + "mea779ba543fa": "Add your first provider", + "m802435241f0a": "Loading models...", + "m1274d7acbe2f": "[vision]", + "m11b29cd62933": "[tools]", + "ma48f39155dbc": "Type custom model ID...", + "mecaa1f1b910a": "Back to model list", + "mb1bdf63d93c3": "Auto (recommended)", + "m811e7c5206f3": "How model selection works", + "mbda2e3e6c900": "Enforcement", + "mf5cfe7d0fa62": "(Access Control tab) — if active, everyone uses the enforced model. No exceptions.", + "mdd85a853b978": "Personal Override", + "mfd1bdfb83444": "— each member can pick their own model. Overrides workspace defaults for that member only.", + "mb7c579774bdc": "Workspace Defaults", + "md3705a239c8b": "— the fallback for anyone who hasn't set a personal override.", + "m33f9cc7719c5": "Higher-numbered rules are only used when the one above isn't set.", + "m80c9fa2d52f6": "My Personal Override", + "md944d0946c11": "Override the workspace defaults below for yourself only — other members are not affected", + "m88f78ee1a74e": "An enforcement policy is active (see Access Control tab). Personal overrides are locked for all members.", + "mbc2701b02460": "Primary Model", + "m678335abff59": "Suggestion Model", + "mf3f3f1ffb3df": "Override which model generates quick-action suggestion chips after each AI response.", + "m03390cbe8c91": "Save My Override", + "mc138ea416a30": "Workspace Defaults — applies to all members", + "m7a5e21ee7739": "Primary Model — All Workspace Members", + "m51332a856ef0": "Default model for code generation, editing, and agent tasks for everyone you've invited to this workspace", + "m824d0cc2933d": "This is the main AI model used for chat, code generation, and editing. It applies to every member you've invited to this workspace — not all users on the platform. If a member has set a personal override (above), their override takes priority over this default.", + "mcd2a216a8873": "Suggestions Model — All Workspace Members", + "me5f651670aa6": "Lighter model for suggestion chips, used by everyone you've invited to this workspace (saves cost vs primary model)", + "m84717f285efb": "Suggestion chips are the quick-action buttons shown after each AI response. This model handles only those suggestions — a lighter, cheaper model works well here. Like the primary model, this applies to every member you've invited to this workspace, not all users on the platform.", + "mb227a038322a": "Save Configuration", + "mfe7f3371f597": "Set the workspace-level default model and provider for new sessions.", + "md933cadf6bcc": "Default (auto)", + "m0bce36498592": "GitHub Copilot Account", + "m62a75a117242": "None (use Copilot)", + "m12e24a38709a": "Save Defaults", + "m3b41ba9c7cb8": "No data", + "mec72420df5df": "requests", + "mc51e455b41df": "tokens", + "mbe7d2f314aa6": "No usage data yet", + "m245625010045": "Start using AI features to see your usage here.", + "m8ff37f00b925": "Today's Tokens", + "me367b5bddcb7": "This Month's Cost", + "m7740276a07c6": "Monthly Requests", + "m2263e21eea02": "Avg Response", + "mc64fe09035ae": "Credits Used", + "m140e92e21244": "Credit Usage", + "m643677360223": "This Month", + "m601068f46cf6": "By Project", + "mafed5886d257": "By Model", + "m9bf1562b3de9": "By Mode", + "md4b1ea5708dd": "Overview", + "mc2ec47508acd": "Copilot Subscriptions", + "ma0ff02ba4ff8": "Custom Providers", + "md17d2d78d76e": "Models", + "mdc80f077b5cd": "No platform-wide usage data yet", + "m79667786321b": "Platform-wide view — showing usage across all workspaces and users.", + "mcd41bf0d3e9a": "Total Tokens", + "mdfa5cc738da2": "Total Cost", + "m5639b9f1265e": "Active Users", + "m41d11f62a9e1": "All Users Ranked by Tokens", + "m308eddf16a19": "No users with usage data.", + "m897d0b58d207": "One row per GitHub Copilot subscription. Expand to see which users are assigned and which models each user called.", + "meb12564b0386": "No Copilot accounts configured.", + "m797df3bce3a6": "Custom Providers (BYOK)", + "m3fdb4c30e9cf": "Custom providers like OpenAI, Anthropic, Azure. Expand to see users and per-user model usage.", + "md4dc49276a77": "No custom providers configured.", + "m5e6b09a1d017": "Model Usage Breakdown", + "mb94242e1a9d2": "No model usage data.", + "maed7a1237429": "reqs", + "md2104f7ad311": "Usage breakdown —", + "m0eba3d4ee43f": "Owned by", + "m8c1603967eb0": "No owner record", + "me1d4e49fac0e": "no workspaces", + "m5a4f4a60e7f2": "added by", + "mb8d31e852725": "on", + "ma6423636974e": "Risk: rate-limiting, abuse-detection flags, or subscription suspension.", + "m2d84b1ff3652": "GitHub's terms restrict Copilot Individual licenses to a single person — licenses are tied to one GitHub account and are not shareable. Sharing can cause GitHub to throttle or revoke Copilot access for that account.", + "mefc75a421422": "What to do:", + "ma45dd9f0586a": "use one Copilot subscription per user, or move everyone to a Copilot Business / Enterprise plan with per-seat assignments. Consider adding each user's own GitHub Copilot account to Doable instead of reusing one.", + "m4fc92a5a044b": "Users on this", + "ma8fa7fd60893": "subscription", + "m9372c470eead": "model", + "m681bf81aba87": "Used by", + "m7f1e323b6272": "Healthy", + "ma8494c12f224": "Degraded", + "mb86d11af7918": "Down", + "m3a386d2bb69a": "OC", + "m8ee4a41352fe": "Validate connection", + "m30840caab959": "Test the connection to", + "m4ef6bbb83197": "to verify your configuration.", + "mc02977b07ec9": "Test Connection", + "m3d0032b7b274": "Testing connection...", + "m856dd8c8677b": "Connection successful", + "m7839136b0629": "Latency:", + "m0c56a4742a5d": "discovered", + "m596c52f1eb65": "Connection failed", + "m27c2ccd962c2": "Unknown error", + "m6a6222577c22": "Test Again", + "m9dba8266214f": "No models available. The provider will be saved without model selections.", + "mc73dec76ac2a": "models selected", + "md1ec69e64b96": "Select All", + "m5cd261bcc680": "Deselect All", + "m41ed52921661": "Gateway", + "m7a1de35a8e55": "Search providers...", + "m277b696272a8": "Custom OpenAI-compatible URL", + "m97eb364e9b60": "Paste any /v1 base URL + key — vLLM, LM Studio, LiteLLM, proxies, …", + "m6f07c7004956": "No providers match your search.", + "m8d6563bb5963": "My Provider", + "m242f0189b5f6": "Azure Resource Name", + "m1a6d8517d24e": "my-resource", + "m734fd77b3610": "URL:", + "m1b8a163d4269": "Default port:", + "m91d7321fb450": ". Make sure the server is running.", + "m960a4c077af3": "API Version", + "m365c8d2794f1": "2024-02-15-preview", + "m100903efdd81": "Enter API key", + "m02d7af705ed7": "Get API Key", + "m267fe5203a04": "No API key required. This provider runs locally on your machine.", + "md38cf7963f59": "Paste any /v1 base URL + key (vLLM, LM Studio, LiteLLM, proxies, …)", + "m2e7ec7c1f35a": "Add as:", + "m8abdb6e5e6d0": "Visible only to you", + "m4b09fb4ff780": "Pick at the start of the wizard", + "m6471564ca226": "Shared with all workspace members", + "ma70838995179": "locked for this run", + "m5f78463b1356": "Adding as personal — visible only to you.", + "m05c39c4c5b13": "Select Models", + "m35ba3f52321d": "Save Provider", + "ma3a4cc0143e0": "Daily Usage", + "meaad100ab411": "No usage data for this period", + "ma251c18205f1": "Cached", + "mc26ddab833c1": "Token Breakdown", + "m0f1ce9b3ff09": "No token data", + "mf9ef8f0b95bd": "Hourly Activity", + "m2498446ac8c1": "My Usage", + "m59bb73deeeaa": "Workspace Usage", + "mc78ffe195710": "Platform", + "mbed75b0c1b2f": "Track your AI usage, token consumption, and costs.", + "m3611335b3ccf": "Using workspace defaults", + "m47079ed2516e": "This overrides the workspace defaults for this user only.", + "m2736b56903dd": "Both configurations are kept. The selected tab is what this user will use.", + "m4969880d8a37": "Assign AI settings to individual workspace members. You can configure each user with a specific copilot account or custom provider, or use", + "m1c208a8418be": "\"Copy My Settings\"", + "m25e2b4ef6040": "to give selected users the same configuration you use. Users without a custom allocation will use the workspace defaults.", + "m260c635dcf53": "An enforcement policy is active. These per-user allocations will only take effect when enforcement is turned off (see Access Control tab).", + "m8350bb048b6c": "Copy My Settings to Selected", + "mcea4d2e010b8": "Clear selection", + "m14736a2eb9f4": "Role", + "m2ec14428b5e2": "AI Configuration", + "mff8059dc6752": "Actions", + "ma6ff9b8bd5ea": "Edit AI settings for this user", + "m5db73069088d": "Reset to workspace defaults", + "madb960c9b9a6": "No workspace members found.", + "m6443cc3d0272": "No workspace usage data yet", + "m37e751d178cb": "Total Requests", + "md699c569f9d4": "Top Token Consumers", + "mf6e82c3f136a": "No usage data yet.", + "m872f6fd896c2": "Member Usage by Model", + "m14372d93e069": "No member usage data.", + "m61e1ac1d02d4": "Copilot Account Usage", + "m7c9a8dfd7839": "Provider Distribution", + "m954730bd83e4": "No provider usage data.", + "m35261535449d": "Prompt:", + "m457f4957af84": "Output:", + "m3c59f26d9abb": "Thinking:", + "m8af31cd69803": "Models used", + "m15b876237e84": "total cost", + "m8edcc26c0f6c": "models", + "m751731b81544": "No credit information available. Subscribe to a plan to get started.", + "md404dbadbc77": "Daily credits reset:", + "mf24795f575e0": "Unlimited credits", + "mbe379a30f1aa": "credits", + "m6e69b59ed34d": "Yearly", + "m9e1006a43da5": "Most Popular", + "mfe3c2c8a9abb": "Billed $", + "m56f9c1ca9d9a": "Free forever", + "m5d85632008c5": "Current Plan", + "ma78948998b85": "Free Forever", + "mf1d05348723b": "Checkout URL not available. Please try again.", + "m9ff8cfaf7d94": "Network error. Please try again.", + "medf8ec0247bd": "Portal URL not available. Please try again.", + "m066030248f7d": "Top-up URL not available. Please try again.", + "m864c855e3d64": "Someone", + "mde1c270a252c": "is chatting with AI...", + "m7a3a94a8ca22": "Abort", + "mc64a468586ba": "is typing to AI", + "mf9cfdd08b6e9": "AI Message Queue", + "me6c70e380837": "Your message is #", + "m8801e11457f6": "Team Chat", + "mf6fc84c9f21c": "online", + "m15bcfd103b10": "is typing", + "m664c54e22aad": "Open team chat", + "m31fbe7ddde26": "Viewing preview", + "m4094848f0988": "In editor", + "mf42e0f66017d": "No messages yet", + "m9194a89a428a": "Start a conversation with your team", + "mfa51fd49abf6": "is", + "mba78973ddcf9": "are", + "m6860a5531303": "typing...", + "m2b9d1b8090b8": "Message your team...", + "mc01ee3929f11": "is editing this element", + "m31e8fa9e4bf8": "Add projects to", + "m62b78c2b59b4": "Select projects to move into this folder. You can move them back out at any time from each project's menu.", + "m6970a1ced73d": "Loading projects…", + "m5181f53d5ac4": "No other projects to add. Create one instead.", + "mc6de6f45c827": "Adding…", + "m592438d2f7e5": "Client-side SPA", + "m6c54b4820100": "Full-stack React", + "m15007f45f5c4": "Project name is required", + "mbe6da843fc7e": "Slug must be at least 3 characters", + "m23fc9a29fd37": "Create a new project", + "m7b33683eca2b": "Start from scratch, describe what you want, or pick a template.", + "m2c3d371cbfd3": "Blank", + "m7d4d9a991b60": "From prompt", + "m0575f29df888": "Template", + "med371e413e11": "My Awesome Project", + "m565a9f0e1060": "my-awesome-project", + "m0059798b7f70": "(optional)", + "m8d1023e94c37": "A brief description...", + "med3198efc923": "What do you want to build?", + "m907bf8ea9357": "Describe your application in detail...", + "m329a8ef36e36": "Choose a template", + "m3800ee7191b1": "Loading templates…", + "mfa67e4d0dae5": "Create project", + "mb712cf8eee5e": "elapsed", + "mc48d5bcd1d2f": "This may take a moment for large repositories", + "m59224914200e": "Failed to load repositories", + "m891e13c74feb": "Please select a repository", + "m2bfff12a9904": "Import an existing repository to continue working on it in Doable.", + "m15c7b7d5a4a5": "Connect your GitHub account", + "m09ff61a08ee2": "Authorize Doable to access your repositories.", + "m1e64930a3a1a": "Disconnect this GitHub account and connect a different one", + "mcb2b6a572a85": "Disconnecting…", + "mfedce010cffc": "Switch account", + "m303a84e178ea": "Search repositories...", + "m48db4a3d7dc5": "Loading repositories...", + "m48f8556088e8": "No repositories match your search", + "m94a1181cd13e": "No repositories found", + "mc63eb6720c6e": "Private", + "m591935b15b1c": "Public", + "m2cff9baabf56": "Import", + "mf2de45302208": "Toggle star", + "m2c1d2c6677db": "No starred projects", + "m637d919d4fb1": "No folders", + "md729947f3c97": "Start a Project", + "m6f1a5cfbc6fd": "Choose a template or start from scratch.", + "mdef70944c9bb": "Creating...", + "m6a0418f673c8": "Use Template", + "mbefbc5e8e1c4": "Code & version control", + "m107eab2a042f": "Team messaging", + "m1a8e1a99c191": "Email & communication", + "m879ebfba113e": "File storage", + "m4110a45c745c": "Notes & wikis", + "m4314193ddb26": "Issue tracking", + "m89cc44521ce7": "Design files", + "m329b3c4622ce": "Project management", + "m195cbdbccce0": "Set up your workspace", + "mb412190cfd38": "Every workspace needs an environment — it defines what your AI assistant knows and can do.", + "ma35abcd6dac9": "Icon", + "ma0d05f8dd473": "My Environment", + "m6b73191a0a4b": "Color", + "m59e693cdbc2c": "Skip setup", + "mdb3472beb3c9": "Create & Continue", + "m0ff84c22d1b0": "Add knowledge", + "m3b3485c34632": "Tell your AI what it should know about your projects. You can always add more later.", + "m0242da1500b9": "These instructions guide your AI assistant across all projects in this workspace.", + "m28d03596d24e": "Skip", + "m684b45158391": "Save & Continue", + "m3dbaf78b6b8a": "Connect tools", + "m781b23fb1692": "Connect external tools to supercharge your workflow. You can set these up anytime from Settings.", + "m70afa66df1c8": "Integrations can be connected from workspace settings at any time.", + "mf27331bdd8a0": "You're all set!", + "m80d8ebc8fa6c": "is ready to go. Start creating projects and let AI help you build.", + "mb6041d9436bb": "Go to workspace", + "md5cd65235324": "Select workspace", + "me549fa0ae7a3": "Start from environment", + "mc0bed36b3120": "Loading environments...", + "m832d1412f3d0": "No environments available. Create one from the editor.", + "mb06eaa3d0745": "None — start fresh", + "m39904ffb0bec": "Remove this project from Discover? Existing remixes are unaffected.", + "m872f87b9007d": "Lists your project in the community feed. Other users can browse it and remix it into their own workspace.", + "m58977daa09e5": "A clear, searchable title", + "mdc56cf81b49b": "What does this project do? Who's it for?", + "m44fbb35ee723": "Category (optional)", + "mbb2347c7cdf1": "Or type one...", + "m472690e4d34f": "dashboard, marketing, ecommerce...", + "m64338bbdf415": "Featured (admin)", + "m589eb982f160": "Surfaces this project at the top of Discover.", + "m43b968323075": "Unshare", + "md35ab3ec829a": "Sharing...", + "m81714949f5bf": "Live build", + "m50d3a1303616": "No errors yet.", + "m2d711642b726": "x", + "mdc676b428599": "resolved", + "meb00967e8d99": "Logs (", + "m93bc5d02dc2a": "collapse", + "md78de925a878": "expand", + "mf164850854d0": "No log output yet.", + "m8537fdb6a825": "Setting up files", + "m5b1ba0587995": "Installing packages", + "m3d113ab13bc5": "Starting dev server", + "mdaada33465ce": "Compiling code", + "m55b0de18996c": "Resolving routes", + "m6112b244a90e": "Bundling assets", + "m7351d83eae60": "Upload files from your device", + "m0dfcc29c9d86": "Attach project files", + "mf6a74a2716d9": "Stop generating", + "m93a26b1eaff9": "Send message", + "mc9be68719e1d": "Search project files...", + "m949d59b7ee8d": "No files found", + "m49a0053f3b0d": "Copy code", + "m455db8f88813": "Preparing workspace…", + "ma02f1cea3c1d": "Thinking…", + "m50e721e49c01": "w", + "m12e653369e8c": "Changes undone", + "m8bae6a75b72c": "Undoing...", + "mba06242948bf": "Undo changes", + "ma1d26b85bf20": "Cancel task", + "m3d200cad4544": "Toggle activity feed", + "m913a378e70f6": "Loading older messages…", + "mf17671d83db0": "Load older messages", + "mb372cfaaf9ec": "I just connected — continue", + "m22a597e126e9": "Build a SaaS landing page", + "md55dabb30f0e": "Create a kanban task board", + "mf9a6a1d642f6": "Make a recipe sharing app", + "m257cb1465b19": "Fix the login bug", + "mfc4ec189139e": "Add dark mode support", + "m3820cbb15bba": "Explain this codebase", + "m6bdb9bf5e7a8": "Start building with AI", + "m8796f7c34878": "Describe what you want to build and the AI will generate the code, files, and preview for you.", + "mdcba690a149c": "Ready — you can retry now", + "m0fd09defcac8": "Auto-retrying in", + "m5148c3e20576": "Retry now", + "m2e0b4a7d6c73": "Connection timed out", + "m06946279b9c4": "Rate limit reached", + "m93821eb7ce8c": "Authentication failed", + "m5bbaec596a83": "Build failed", + "m2a33d984de88": "Network error", + "m0ce1c98951b1": "AI model unavailable", + "m28c1cf45c572": "MCP UI resource has no HTML payload.", + "mc370f97f193f": "(AI will decide)", + "m86e0163433b6": "Or type your own...", + "m9ffeb4317918": "Type your answer...", + "m96fa9ca885cc": "Skip — let AI decide", + "m6908408b5441": "Answers submitted", + "mea08e5983f81": "Before we start…", + "m5fc4280582ee": "Skip all", + "m72d18ad29fe5": "Skip this question", + "m8f66990f74c5": "AI decides", + "mc13839cedce5": "Or type a custom answer…", + "m8666026a31fa": "Type your answer…", + "m3fee95da5ab6": "Simple", + "m5c42afc7a230": "Moderate", + "mcd75063b613d": "Complex", + "me45a4474b464": "Add a step", + "m102849138c54": "Start Building", + "m1e7f34ee8f77": "Refine", + "m87c5912f2cef": "Building", + "m858e4ba7a29f": "Pause", + "m9af278eb4ac2": "Skip this step", + "m41ffd8b76afc": "details", + "me1a1abcfc47a": "Files:", + "md4c76f463480": "Remove step", + "m819c15f77c30": "Completion:", + "mb23a6a8439c0": "unknown", + "mebe7c49b473c": "Tool calls:", + "ma6a37fc0b4a0": "Provider: local (no cost)", + "m5ccdcad4f2b9": "Token counts are estimated (provider did not report usage)", + "m2f3f0204c9f3": "Network error — please try again.", + "m93abcb2b4187": "Read-only mode.", + "m60dbd666da3f": "Upgrade to edit", + "m1e6652706391": "Select a file to view its code", + "m8adc599d8546": "Use the file explorer or chat with AI to generate files", + "m9685428d79d9": "Merge Conflicts", + "m625d8793292d": "There are conflicts between your local changes and", + "mcd0d99892495": "the remote repository", + "ma441beefe3cf": ". Choose how to resolve them.", + "mb0c6c3afc17f": "Conflicted files (", + "mfbba5c3b9950": "Keep my changes", + "mc585647746dd": "Discard remote changes and keep your local version", + "ma01851633d89": "Use remote changes", + "m99d422032993": "Discard your local changes and use the GitHub version", + "mcfca91950882": "Cancel merge", + "m5b1014ae15ea": "Resolving conflicts...", + "m37a5d6485e10": "Expand sidebar", + "m23db6247bb3d": "Connect to GitHub", + "m9b46af6166cc": "Push this project to a GitHub repository.", + "maf7620d9f184": "Authorize Doable to access your repositories so you can push and pull code.", + "m5fa0c70119e4": "Customize name & settings", + "m8726643dc521": "Repository Name", + "md18fa4795d7e": "A brief description", + "mb9b01a108d34": "Make repository public", + "m363fadad28c7": "Create & Connect", + "mb7a3cd401b23": "Importing...", + "mb60ed2e431d8": "Import Repository", + "m68928d6dcc94": "Restore Version", + "m1b5b909b9f38": "Roll back to a previous state", + "mb1d6b91b67c2": "at", + "m9d91673c9ae4": "Non-destructive restore", + "m221720161bb1": "A new version will be created from v", + "m1989a6d77ea8": ". Your current work and all previous versions will remain accessible.", + "mfa31c224c001": "Restoring...", + "md12014c8ba79": "Restore to v", + "m8ea29726a819": "Metrics unavailable:", + "m1829677248c3": "Loading runtime metrics…", + "m707165e9984b": "poll", + "mb80012851cf0": "modified", + "m1185f37d33b0": "deleted", + "m1db0d01fa6e5": "Previous file", + "m96a7485b66f1": "Next file", + "mfe86c67a9260": "Unified view", + "mad6a950b4620": "Unified", + "m493481bac50f": "Side by side view", + "m32afaa784333": "Split", + "me6c6415f27e4": "Loading diff...", + "mdb183e7f0849": "No diff data available", + "mc0c92fe4b0ba": "No changes between these versions", + "m98f257430806": "Changed Files (", + "mbcd433417df1": "Select a file to view changes", + "m6b02e0d363a4": "Added", + "mb48ff39c2e0f": "Deleted", + "me8ce5dcaf408": "Modified", + "m77752c14a10d": "Before (", + "md3986704d922": "After (", + "m051ea272009f": "(unsaved)", + "m6a44a6c83d3e": "Delete / Reset", + "m6bb4d95c616d": "Start writing...", + "m70ea1983c983": "Core", + "m6959b4159575": "Session", + "mcd74053c5481": "Architecture", + "m279b44d2ab4b": "Agents", + "m494ca78f7374": "Custom", + "m44dedd0f97fe": "New file", + "m63a3712feb5e": "% of budget", + "m51abd534e168": "Empty — click to edit", + "m14aae1602506": "running…", + "md67e2e944994": "changed", + "m5d347fd948b6": "command", + "m9bf5a24e4aa7": "operation", + "mb72f1b605b36": "Live Activity", + "m0dca88f7eda1": "Close activity feed", + "m6a5e118255c9": "Waiting for AI to start working…", + "m4329f638ead4": "Activity will appear here when the AI is working.", + "me22ce64b63f8": "Traffic Overview", + "m20b04a05df9d": "No traffic data available yet.", + "m68f7d7fbb52d": "Visitors", + "m337a271983f1": "Page Views", + "m74883614c4c7": "views", + "mad0526d8e5fd": "Built-in analytics", + "m247610f4dedd": "live", + "mad4899df2d12": "Close analytics", + "m3445e2d5305e": "Enable analytics for this project", + "m2da367cb7562": "Track visitors, page views, and engagement — privacy-friendly, no cookie banner needed.", + "m984af0dbfa87": "Analytics is disabled", + "mc9289da74d6c": "Enable analytics to track visitor counts, page views, session duration, traffic sources, device breakdown, and more. All data is collected in a privacy-friendly way — no cookies or consent banners required.", + "m0e6e1684b7c3": "Failed to load analytics", + "me2e18a767a2b": "No data yet", + "m8ee1be0e8129": "Analytics will appear once your published site receives visitors. Make sure your project is published and accessible.", + "m7549533568ca": "Total Visitors", + "mf15b55389725": "Avg. Session", + "m89cf5817dbd4": "Bounce Rate", + "mbff828f89976": "Browser Distribution", + "mffacb99d0209": "Operating System", + "ma02077a984ce": "Traffic Sources", + "meb742ebd27d8": "No referrer data available yet.", + "m7721e29d6e90": "Device Breakdown", + "m5bb8965c8903": "No device data available yet.", + "mc8235b5120b4": "No data available yet.", + "m278b8c933942": "Real-time", + "m2b3ff58fb8af": "active visitor", + "m118443b1d9ca": "right now", + "m75fe1f295a02": "Current pages:", + "mc784754ddde6": "Top Pages", + "ma861c3307af4": "No page data available yet.", + "mdfffe52cc101": "Unique Visitors", + "m5ee9c656643f": "Avg. Time", + "mb40edf4cb8e7": "Connect to Supabase", + "m4c26a7b1fa53": "Enter your Supabase project credentials to enable backend services.", + "m69adfd51438c": "Supabase Project URL", + "maa31989db88a": "Anon / Public Key", + "m532b9fc88b66": "eyJhbGciOiJIUzI1NiIs...", + "m8db5971dc587": "Service Role Key", + "m7e32a729b122": "Secret", + "m04a6bbf1d545": "Connection successful!", + "mcdfc82dc9257": "Connection failed. Check your credentials.", + "ma2f29836cda5": "Save & Connect", + "m389ab0c86a00": "Connected to Supabase", + "m0303e1824670": "Not connected", + "macfc5be785a9": "Disconnect", + "m32520e2069af": "Connect Supabase", + "mfa7fe67124e9": "Database", + "m66880d2d8216": "Authentication", + "ma69c4dece144": "Storage", + "m127c16f74a24": "Edge Functions", + "mcd0c018cfa88": "Powered by Supabase", + "m97757652c0e5": "Connect to Supabase to view your database tables.", + "me3fe2a3fe52c": "Tables", + "md98a034f5cb8": "tables", + "mbc51e9e65d79": "rows", + "m3fdc9a587693": "Column", + "mfa1d2db62d4d": "Null", + "m92022c2f45b6": "Primary Key", + "mfcab7fcc2b4c": "PK", + "mf91711645937": "YES", + "m23794d91c53a": "NO", + "m9a4f1370f2b7": "SQL Query", + "m1a0d7c23a18e": "SELECT * FROM users LIMIT 10;", + "m650da1678ad7": "Connect to Supabase to manage authentication.", + "m0ca3aa44a8c1": "Total Users", + "m333e0a1e2781": "G", + "ma7770c6daaa4": "GH", + "m5342e09f2729": "Enable", + "mc175fbea7096": "Recent Signups", + "m1eb20b09825a": "Connect to Supabase to manage file storage.", + "m2f89b69f7a4c": "Storage Usage", + "md9262e7fb868": "PUBLIC", + "m3abde3818904": "files -", + "m7bb6fd2091ef": "Drop files here or click to upload", + "mf5fea30a34e1": "Connect to Supabase to manage edge functions.", + "mac7c949f1211": "Inactive", + "me4640667fae5": "- Last invoked", + "mb608eeb53fcc": "Create New Function", + "m8ac767353080": "Read only", + "m14d6d2da837b": "Copy file content", + "m9de4149fb971": "Download file", + "m3dc96e8106e4": "Close code panel", + "mc3386867cbb1": "Search code", + "m068be1bc6ebc": "Browse the file tree on the left to open files", + "ma76f7d471f87": "Select parent", + "m77c87ed7c0af": "Select an element to edit it", + "m8e685d5409b3": "Hold", + "me2ee2909fe27": "Ctrl", + "m633e1dd1d4d6": "to select multiple elements", + "m1ce187c61e47": "Start selecting", + "m608252e9ddb1": "Click an element in the preview...", + "ma710c2b90913": "Unsaved changes", + "meb1a70e39274": "Discard", + "m1f7d6ab50546": "Send changes to AI for smarter code updates", + "md8387fae128c": "AI Save", + "md23b5dc62153": "New File", + "mc75ba8074400": "New Folder", + "m04470fc07c26": "Search files...", + "m7226287c91cd": "No files match your search", + "ma3429cba554f": "No files yet. Start chatting to generate code.", + "m0e0269180969": "Copy Path", + "m3cdcc3a85a71": "Create New File", + "m983dbe585e18": "File path (e.g. src/components/Button.tsx)", + "mb6b7279516a1": "Create New Folder", + "m7a2ed3474120": "Folder path (e.g. src/components)", + "me1e5fe2043bd": "Delete File", + "m7829a4b6e0b3": "Are you sure you want to delete:", + "m2eba52c01705": "Version History", + "med161bc0a0be": "Security Scanner", + "m8777cc91b15b": "Scan your project for dependency vulnerabilities, hardcoded secrets, code quality issues, and HTTPS configuration.", + "m2bb57667526c": "Run Security Scan", + "mb764be909067": "Your project security score", + "m21f1595b614f": "Fix", + "m87477e2696e7": "Move to .env", + "m4457f2d1aa4f": "CRITICAL", + "mb43e72eed048": "HIGH", + "m7c48dd672a68": "MEDIUM", + "m5fbdda1b8c72": "LOW", + "mbca2caf53068": "Scanning dependencies...", + "m41d7f825db92": "Checking for secrets...", + "m52cc629e49de": "Analyzing code quality...", + "mb0d4eed2228f": "Verifying HTTPS config...", + "mbd35a52d0ac8": "Scan complete", + "m2e41b118eb20": "Dependencies", + "ma234c42226b5": "Secrets Detection", + "m0008c1a1b7a5": "Code Quality", + "mccf1c9c05da6": "HTTPS / SSL", + "ma83820eba2a5": "Scanning...", + "m68ac7da5dfff": "Run scan", + "mcf47fe8237c0": "Scan Results", + "m10153f84a1c8": "Vulnerabilities", + "m1b43f94acafe": "Secrets Detected", + "m3e1ba5ec342d": "Code Quality Issues", + "mde8ae7761662": "All clear!", + "mf072d213cbba": "No security issues found in your project.", + "mfa5d797742e5": "Last scan:", + "m298d6c7549e4": "Duration:", + "m865c8a6db23e": "files scanned", + "m442aded87a55": "Performance", + "m41d00ea2b130": "Core Web Vitals", + "m890d34fffcde": "Target:", + "m59aec41109e1": "Additional Metrics", + "mc13d409105f9": "Bundle Analysis", + "m515e6ac17ff5": "Total Bundle Size", + "m0917e7be3804": "JS", + "mb581e46042cb": "CSS", + "m07239dbd2a1a": "HTML", + "mbe7e2f201293": "Images", + "m3680fcad01f4": "Fonts", + "mf97e9da0e3b8": "Other", + "m91ebac9663bc": "Largest Files", + "m9454dbf1e4d0": "Tree-shaking opportunity", + "ma2de31cf19d4": "The vendor bundle contains unused exports from large libraries. Consider importing only the specific modules you need (e.g.", + "md942f6488657": "import", + "mfed4caac2ea2": "debounce", + "mfb30b806509e": "from 'lodash/debounce'", + "mb4f06654cac0": "instead of importing the entire library).", + "m0738ee00b61b": "Recommendations", + "m6f61f46c23a6": "impact", + "mc4c09704090e": "Fix with AI", + "m317e174357cf": "Measured from your live preview (transfer-size based).", + "m4977a7e5bb36": "Running...", + "m954b8f823bf0": "Run audit", + "m892c84891df2": "Audit failed", + "m30ea74354efc": "Performance Audit", + "mb78a53daa655": "Analyze your page speed, transfer size, bundle breakdown, and get actionable recommendations to improve performance.", + "mc02130fa90ee": "Loading preview...", + "mcefd31dfd0ad": "AI generating...", + "m60c87cdbd995": "The preview server may not be running.", + "m36d3e7aaf364": "Project preview", + "mfabb1a3a78a9": "NotebookLM result", + "me392985826cd": "← Back to app", + "m6dad344b78d0": "notebooklm-result", + "md61b13d11a68": "Live Preview", + "m82e3c510c418": "Your app preview will appear here as the AI generates code.", + "me5c083cf41ff": "No preview available", + "m2490e88747ec": "Disable visual editing", + "m42b054ffc097": "Enable visual editing", + "m9046da16aea9": "Pages", + "maab31cde23ba": "Collapse sidebar", + "m7f2f1a589887": "No project selected.", + "m07be26265b47": "No workspace selected.", + "m37c5b8938bc5": "Delete file?", + "m7f5d26a5b27f": "? This cannot be undone.", + "m179fed85ec50": "Search files", + "mbb38e88c5b60": "No files matching “", + "m69846e7cc7e9": "Context files the AI reads before every interaction. Click to edit.", + "m9339d855212e": "Project Knowledge", + "m6209368d2532": "New Page Name", + "ma1e47d8a3aa5": "Create via AI", + "ma93d346c05cc": "Add a new page", + "m55dbb3629822": "Search pages...", + "md1c559bbc81c": "No pages match your search.", + "mf005c577d468": "No pages detected. Add files to src/pages/ to see them here.", + "m3660315a9af3": "page", + "mb96da48a63e7": "detected", + "me3cc57e193d6": "CURRENT", + "mb4836106f489": "Remove bookmark", + "mc36b1558cfd7": "Bookmark this version", + "md95082a2ee57": "Author", + "mdd167905de0d": "Version", + "ma76e13b98392": "Restore", + "m0e5d6873018e": "View diff", + "ma61b1b4716d0": "Loading versions...", + "mff76e0371906": "No versions yet", + "mbc861f24ac2a": "Versions are created automatically as the AI makes changes.", + "m3e8a959e4e2c": "No bookmarked versions", + "m4d34e4f09d03": "Click the bookmark icon on any version to save it.", + "m30aa5d0757f1": "Load older versions", + "mc17c33c93bf4": "remaining)", + "m7d4f4103009d": "Live public deployment", + "m453bcff7ec68": "Temporary preview link", + "mc38f4bf16403": "Deployment history", + "me83dea6df0d2": "No deployments yet", + "m6a0d63d84893": "This may take up to 60 seconds.", + "mb20c49843a17": "Build output", + "m84a0f15dccca": "Your project is now live.", + "mf9fd8a28cf11": "Build:", + "m18f6adeb80e8": "Deploy:", + "m18e872be2359": "Total:", + "m05081f14d114": "Deployment Failed", + "m9e8197ce9e5f": "Show sidebar", + "md1db29ebc76d": "Hide sidebar", + "m5da22fe4f7ac": "Synced", + "ma8f94e9869fa": "Ahead", + "ma2e92848319a": "Behind", + "mec67106c49d8": "Diverged", + "m04dfac3671b4": "Disconnected", + "m4027e5b24418": "Connect GitHub", + "m84bf6b1184cb": "Pushing...", + "m9756b83cda4b": "Pulling...", + "m0d6e4079e367": "main", + "md0b4034c6ca7": "ahead", + "mb1b886ce5f57": "behind", + "m02961f8382e4": "Remote has changes not in your local project. Pull first, or force push to overwrite.", + "mec1ed0e945e5": "Commit message...", + "m731ce7ed8089": "Push", + "m8de55a43460c": "Force push (overwrites remote)", + "mcfda1755ffb1": "Force", + "m4c5aa5fbf47d": "Push to GitHub", + "mc551ab2a742b": "Pull from GitHub", + "m93e20626bf9c": "1px", + "m747614001f01": "2px", + "m356601538da0": "4px", + "mb8b311b0f273": "Solid", + "m2fe14adec27a": "Dashed", + "mbe454f3c8084": "Dotted", + "m3b4bdff339e9": "Border", + "m3019947b6daf": "Width", + "m140bedbf9c3f": "none", + "m7e744141b40e": "Style", + "m6fe0661c82d1": "Radius", + "m33a3c91b44d2": "0px", + "m98b24440597d": "CSS Value", + "m4a73db4ba8bf": "#000000 or color name", + "m9b78ab17c13f": "Pick Color", + "m31e392d1c037": "Apply", + "m88c45d9e526c": "Colors", + "m4a69d0166046": "Text color", + "mea2b8a878841": "Background", + "m95110d74c4c0": "Row", + "me4bb9f1ece9a": "Start", + "md946067427e9": "Center", + "mf4db1e48476f": "End", + "ma33fbcf83f7b": "Stretch", + "ma511909161e1": "Layout", + "m88150308f8bc": "Display:", + "m0b2782bb65ba": "Layout controls are available for flex and grid elements.", + "m9c8a9579abe5": "Direction", + "mb1b1b4e5e8d7": "Align", + "mcb129306bc6f": "Gap", + "m1af851907331": "Size", + "m929260ad9b9e": "auto", + "mbfe2eca40179": "Height", + "md5cdfcf7ff75": "Top", + "m883361d5d682": "Right", + "m479ad21ac909": "Bottom", + "m58eb9032e3bb": "Left", + "m62a822a58309": "Spacing", + "mca0397ca2f65": "Collapse inputs", + "m0393049f5cd5": "Expand inputs", + "m2bf63d817630": "Margin", + "mee0d7af0bffd": "Padding", + "m71988c4d8e08": "Text", + "m4ec48e7f45fa": "Element text content...", + "ma159eaf43ba2": "xs", + "m5af308bec132": "sm", + "mcae662172fd4": "base", + "m0e6ba33f8bc8": "lg", + "m525a6f3c9ded": "xl", + "m996dfe781005": "2xl", + "m71f6ca0ae9aa": "3xl", + "m0aa558305207": "4xl", + "m244d4ab1edf8": "5xl", + "m6b27c18efbac": "Select weight", + "mb455784ab530": "Regular", + "m8e588cd18774": "Medium", + "md442655c0643": "Semibold", + "m94fee62e68e2": "Bold", + "ma7248eeb45eb": "Normal", + "m9bf37cb58a69": "Italic", + "meac0f9c3da59": "Align left", + "me55c76591fa2": "Align center", + "m8f4f8efcbee1": "Align right", + "mf3bd3473d7d8": "Justify", + "mcab94aba84f9": "Typography", + "m81d27ef6d503": "Weight", + "mb502cf4b47f7": "Hide resolved", + "m64d0005c6bd7": "Show resolved", + "m862c2324686b": "Cancel (Esc)", + "mc4d891e9a87e": "Add comment", + "m4be7d5adc649": "Click to place", + "m44f5e3fbec57": "Comment", + "md6efe4c67c0c": "Re-open comment", + "m4ea5c8c9b647": "Resolve comment", + "me43811a17028": "Delete comment", + "m5782b18687e6": "reply", + "mb994278263e7": "replies", + "m311c9f3dd66b": "Delete reply", + "m772fa553df6a": "Reply...", + "m625aafc3a9bd": "Send reply", + "m4dff58ab6888": "Leave a comment...", + "mebca7fbdafd1": "Save first", + "m9cf4ca8afcc9": "Send prompt", + "m9913b7a79909": "Select parent element", + "ma46e92d02960": "View source code", + "m3cd9611289bc": "Delete element", + "mb53cf804ed19": "Items available to all environments", + "m5f3c4f8580d3": "items", + "mcd57f659de82": "Workspace-level items automatically included in all projects unless overridden by a project environment.", + "m5ee3c4ff61db": "None — add workspace knowledge in Workspace Settings", + "me0091fce46a5": "Edit name, icon & color", + "m0d50fb123a7d": "No knowledge files", + "m10886554da51": "Set as Default", + "m5779f32fab00": "Clone", + "m3664895579f0": "Export", + "mf2e6c2fe7c8f": "Sure?", + "m85a39ab345d6": "Yes", + "m1ea442a134b2": "No", + "meaab52640429": "New Environment", + "m16ca11f9491f": "Full-stack environment with React, Tailwind, and Supabase tools", + "mc7b7e03505b2": "Edit Environment", + "m219febf3ba15": "Custom Instructions", + "m5bcdb2bd8bfb": "No custom instructions", + "m7827793844ed": "coding-standards.md", + "m2b90b67c3121": "# Instructions\\n\\nAlways...", + "m984c4c78759c": "Dock to sidebar", + "m9a43f5ec3be7": "Open as popup", + "mba392022c5f1": "No environment loaded", + "m02db55bac5e3": "Variables", + "m0678e31f762b": "Click to edit", + "mc6c094bc0054": "Empty", + "m2c04b392f1fc": "None configured", + "m557832355c85": "None selected", + "maa4836eb52a0": "in workspace. Create them in the", + "maae3f876be76": "panel first.", + "m2c83c00f0e83": "Add file", + "mf83c845cc1ea": "# Knowledge\n\nAdd context about your project...", + "m9af696f3aa74": "No knowledge files yet", + "m4ca85331d10a": "Add files to give your AI context about this project.", + "md5a90b8d8d51": "Active Environment", + "mc0bf75bd78bf": "Change", + "m1900aa145ca0": "Custom environment (loading...)", + "maa6da723475a": "Workspace Default", + "mdb587c5a8497": "Inheriting workspace skills, rules & connectors", + "m5c09316228a5": "Inherit all workspace items", + "me8c1818905f9": "No custom environments yet. Create one from Workspace Settings.", + "m21b6a798321a": "Development", + "m13a7c655a7d4": "Production", + "mf95fcf61a863": "Add Variable", + "m8e37953d23da": "Value", + "mf6cbe2f0c1f8": "Description (optional)", + "mabcdd1e169c4": "Secret (masked after save)", + "m0707c5d972a7": "Plaintext", + "m620e42933812": "No environment variables", + "m8a8a445f6560": "Variables are injected into dev server and builds", + "m2c4c151693e6": "New value (leave blank to keep)", + "m5416ad093f89": "Toggle value", + "mb1f8a17bcef8": "Inherited from workspace (", + "m46b2e93c2f9a": "inherited", + "ma6facd19ee0e": "Installed from Marketplace", + "m41f94479d2ae": "Marketplace listing", + "me450db4ac225": "· installed", + "me2109d543007": "· modified", + "m691120d9fa07": "Uninstall — removes the cloned environment from this workspace", + "mfe199528850a": "Uninstall", + "m401d6acec59d": "Environment Templates", + "mc2ad8271f5d3": "No templates available yet", + "m90db2ca3d0cf": "Templates will appear here once created by your team.", + "m18fdd549b2ed": "New", + "m5fa108ae963a": "Environments bundle workspace skills, rules, knowledge, and connectors into reusable presets. The", + "m37a8eec1ce19": "default", + "m97c8b61c1986": "environment includes all workspace items automatically.", + "mef0b6a88d698": "Create a custom environment to bundle a specific subset of your workspace items.", + "m08d23414ad6a": "Create Environment", + "md62395fd52cd": "New Integration", + "m12f67f8539c4": "Availability", + "mda2e5dc515b1": "Everyone", + "md0f62545074d": "This project", + "mbdc0857b99a9": "Only me", + "m22f5ebc3ad3f": "Server URL", + "m713166971d73": "Command", + "m697119e47b5f": "npx -y @modelcontextprotocol/server", + "m9443ff69463e": "Advanced options", + "m52a74e1ffc3f": "Connection Type", + "m5bfaa5648534": "Web service (HTTP streaming)", + "mfecfc188ba0f": "Web service (HTTP SSE)", + "m105f8fe557fe": "Bearer Token", + "m6946d3ffe03d": "sk-...", + "m3210f18682cf": "eyJhbGci...", + "me3b6e3d945fa": "Add Integration", + "m13e8b0b77ddf": "You'll be redirected to", + "m81c29589570e": "to authorize access. A popup window will open for you to sign in.", + "m5f04ae9ed6a8": "Connecting...", + "m11aaa14268df": "Sign in with", + "m8e1c7ba669b6": "Enter your API key", + "m1b216be66c84": "Enter username", + "m7014aff13517": "Enter password", + "m1339bddc2b28": "Select...", + "mc856c7eb1cf5": "Authentication Token", + "m0a3c8f8411d7": "Enter your authentication token", + "m86ea8896a440": "Connecting to", + "mdf0fe9e00d35": "Try Again", + "m72021eb70e91": "Connecting…", + "m22965568d22a": "Connected", + "me674447337e8": "Available", + "m4d4c2197d70e": "No description available.", + "m80d8688ffab9": "Search integrations...", + "m15840c0ad236": "Load more (", + "m19d5a194983c": "No integrations match your search", + "m5113ef230a14": "No integrations available", + "mff762330c43e": "Try adjusting your search or filters.", + "md431d4ccf029": "Native integrations will appear here once configured.", + "m539da25ea18e": "doesn't need configuration. Just enable it.", + "mce33c1c1d874": "Get your", + "me37c838fdfec": "OAuth client_id + client_secret", + "m631aada47dea": "credentials", + "m5561f8dd5d34": "from the provider's developer console, then paste them below.", + "me4a822d0504f": "Open provider console", + "mb14ea6eedba3": "Required scopes:", + "mf3170d57a386": "Client ID and Client Secret are required.", + "m380e05b0ebe3": "Set this Redirect URI in the provider console:", + "maa4c3d948aed": "Currently configured via", + "mf651fcd956f5": "env var. Saving here will override that with a DB-stored credential.", + "m97d0ee620b54": "Currently configured", + "md41bd6455eb9": ". Submitting will replace the existing credential.", + "m2651215b6513": "OAuth Client ID from provider console", + "mc02ed8192606": "OAuth Client Secret", + "m096b73624b09": "Saving", + "m8e171e87357e": "Save Credentials", + "m6596f82794f5": "Workspace-scoped non-OAuth credentials are not supported yet from this admin form.", + "m8e795a2f5a9d": "Authentication token", + "m731fe041ce28": "Select…", + "mb5005e90891c": "Secrets are encrypted at rest. Only platform admins can see configuration status.", + "md403c686f6a1": "Connecting", + "mb6d61aa7afb3": "isn’t enabled for this workspace yet. Ask a workspace admin to enable it under Settings → Integrations, then try again.", + "mfa1f0a72f5dd": "Active Connections", + "m639a40e82b9a": "Connection", + "m782eb73bb5de": "Connection is healthy", + "md597d662a8cb": "Confirm disconnect?", + "m98a28df264af": "Available Actions", + "m147abf3da84c": "Loading actions...", + "m72d95278c055": "No actions discovered for this integration yet.", + "m2c5b12ca6e17": "Add Another Connection", + "m27c785c6b5dd": "Email, calendar, docs, chat", + "m9c24f45a7ea9": "Dev", + "me5e4c2acbc94": "Source, tickets, errors, on-call", + "m684f8be4db83": "Email, CRM, payments, booking", + "mb7d43e0d3140": "None of this preset's integrations are in the catalog yet.", + "m4109e7a85cde": "Integrations enabled here apply", + "m1d618a102b46": "globally to all workspaces", + "mafa37747e942": "(existing and new). Users across the platform will see these integrations in their catalog.", + "m92c1cdfdf4cb": "Enabled", + "mb0e1cdb33429": "Configured (DB)", + "mec9969d40559": "Via Env Vars", + "m7df4aae6b90f": "Enabled, Needs Config", + "m0bfff22a132a": "integration(s)", + "m0802ec6bbfbe": "are enabled but missing credentials. Users won't be able to connect until credentials are configured. Click", + "m316bd5c5eaa7": "on a row below to fix.", + "m6f7d88ffe0fb": "are pre-configured via server environment variables (e.g.", + "m0b5b709a8e90": "OAUTH_*_CLIENT_ID", + "m3c32cf357690": "). These work automatically without manual OAuth setup here.", + "m679f443feccf": "Quick start:", + "meb92cc52a766": "integration", + "mb69d6f19b253": "Enabling", + "mfd308574e3ab": "Disabling", + "m673804025742": "Enable selected", + "m369711b52078": "Disable selected", + "mfe3b58f14752": "All Categories", + "m040a4f895460": "Env Vars", + "m7e841e94b722": "Needs Config", + "m416861c7e2c1": "ENV", + "mf86f18497bc0": "Platform credential configured", + "mcf3abc832664": "DB", + "m6f35ac236a3b": "Update credentials", + "m59294028b1f1": "Configure credentials", + "m09d16bdcb6bc": "No integrations match your filters.", + "m9f7ea773caac": "Workspace:", + "m38a5be91af79": "capability", + "m3fc0e5c4c484": "capabilities", + "mc3240e01116f": "Available Capabilities", + "m553c2d7780ec": "No capabilities discovered yet. Test the connection to discover what's available.", + "m1abf62f6c6fa": "Confirm Remove", + "mdae69e4430f4": "Custom MCP Connectors", + "mf246fd1ef9d3": "Loading integrations...", + "mddb8b49a27b2": "No integrations yet", + "mad38b13ff599": "Connect third-party services and AI tools to extend your project.", + "m93a65009a550": "Everyone in this workspace", + "mb4990c5afe4c": "Everyone on this project", + "m47a9fe7ce5bb": "Only me (personal)", + "m12a7bd86e0a4": "connected", + "m5f031beeecbd": "Pick an existing Supabase project from your organization, or let Doable create a brand-new one. Either way the API keys are wired up automatically.", + "me4235ebe6c96": "Loading your Supabase organizations...", + "m94e8135c911c": "US East (N. Virginia)", + "m7343272444cf": "US West (N. California)", + "mb044c25b22cd": "EU West (Ireland)", + "m7cfb6caecb63": "EU Central (Frankfurt)", + "m758f62cc9ed2": "Asia Pacific (Singapore)", + "m558498b37a96": "Asia Pacific (Tokyo)", + "m133697121a8e": "Asia Pacific (Mumbai)", + "m0ee739f054d6": "South America (São Paulo)", + "m98a3dcd2d736": "Sign in with Supabase so Doable can create projects on your behalf. You'll be redirected briefly to Supabase to authorize, then come right back here.", + "mecf5310c018f": "Waiting for Supabase…", + "m4cdc78922e43": "Sign in with Supabase", + "ma287cb8a7f05": "Pick a project — Doable will fetch its API keys and wire them into this app automatically.", + "m1eca6c02374e": "You don't have any Supabase projects yet — let's create your first one.", + "m18d9d57bec2a": "Supabase organization", + "md3a008ef1335": "Region", + "m115b93fedc63": "Connect existing project", + "m9f3df753a41a": "Create new", + "mdb1a21a0bc2e": "JSON", + "m7bc88ebb6d01": "Zip", + "m76a692132c70": "GitHub URL", + "mc2ae72317178": "Import from outside Doable", + "m3a7f5a60d97e": "Bring in an environment from a JSON manifest, Standards Zip, or public GitHub repo.", + "m18cd692efad9": "Paste a", + "m658a850d329e": "manifest. Anything that fails schema validation is rejected.", + "mf7573af38621": "Drop a Standards Zip here, or click to browse", + "m222e1ef4a020": "Compatible with Anthropic Skills, Cursor Rules, MCP, and Claude Code plugin layouts.", + "m55ec8dcd8925": "Public repos only. The import will tarball the path and decode it as a Standards Zip.", + "m1d965e7ab1cf": "Imports land as a draft environment in your workspace. They never run code or call external services until you authorise each connector individually.", + "m91bae713515c": "Imported.", + "m321f179c80ba": "Imported", + "m2621d6ab4311": "Import to workspace", + "m3db223d239a5": "You may be asked to provide credentials (API keys, OAuth)", + "m1c5802102833": "Install “", + "mf731842ea02e": "Review what this bundle will add to your workspace.", + "mdf498282bede": "Includes", + "m4a33eacd5fa6": "item", + "mb029f856acbb": "that need your attention.", + "mafce17e84a37": "This bundle is empty.", + "maf0184ed8833": "Install creates an isolated copy in your workspace. The original publisher cannot modify it after install.", + "mc683491047fc": "Installed.", + "mfe579e76f015": "Nothing to install — this bundle has no skills, rules, knowledge, or connectors.", + "m07ae7fd68456": "Installing...", + "mc741d1dfa9f5": "Install to workspace", + "mbcd8cc53f40e": "No description", + "m9c53c074d7ac": "skill", + "m7369949b47ef": "rule", + "m7322e503e2e3": "Import a bundle from JSON, a Standards Zip, or a public GitHub URL", + "m86794d6a910b": "Manage listings you've published", + "mb07a607c3b8d": "Package one of your environments and list it", + "m985b7ac97956": "Install AI environments — skills, rules, knowledge, and MCP connectors — created by the community.", + "m86d94cb27e98": "Search environments, skills, tags...", + "m76327dec9ae3": "Popular", + "ma941983250b0": "No listings found", + "m3becd866de1f": "Try a different search term", + "mc38607c4f2d3": "Be the first to publish an environment!", + "mba5285161ba6": "environment", + "mcd46fcfce46d": "Spam or low effort", + "mdce34cc99e59": "Malware / malicious behaviour", + "m8ea03160b2fd": "Broken or non-functional", + "m940bd85c865f": "Inappropriate content", + "mdbc94458ce4f": "Copyright / trademark violation", + "ma4d5cce85c7a": "Tell us what's wrong with “", + "mf560e7f3a325": "”. Reports are reviewed by moderators.", + "mf81ab834de5f": "Reason", + "mdcac920e005d": "Anything that helps moderators triage…", + "m9e23a4d76b1b": "Report received — thanks.", + "mb41fd589ad91": "Submit report", + "m811f66f2beb9": "Loading GitHub settings...", + "md3d6cd5328a1": "GitHub Integration", + "mf57a4f283920": "Connect your project to GitHub for version control and collaboration.", + "m992e5b297a53": "Force Push (overwrite remote)", + "m8212e6f6f430": "Not connected to GitHub", + "mebabde2d65a9": "Connect to push and pull code, track changes, and collaborate.", + "m5db99d7cbac2": "Use the GitHub button in the editor toolbar to connect this project.", + "mcdeacf620667": "Connected Repository", + "mb8a50d7f479c": "Branch:", + "m5f33f770d929": "Last synced:", + "m8c40e9b0c098": "Download the latest changes from the remote repository.", + "mb66d044181a0": "Pull", + "mbacf530d4a91": "Recent Sync History", + "m1d1a296c451c": "Disconnect Repository", + "m8d782fbb3ff6": "Removes the connection. Your code will not be deleted.", + "m7f0c2893110a": "Enter a valid URL to discover", + "m604fd1b2e29c": "Name is required", + "mbd6df736adbf": "Server URL is required for HTTP transports", + "m88c96d59e8c9": "Command is required for stdio transport", + "m2fdba7aa01af": "Add MCP Server", + "m810414c64a68": "Transport Type", + "mc4773c2e3148": "Server URL *", + "meee8aee46a70": "Discover server capabilities", + "m9c26a88a88fc": "Command *", + "me1e6ca97e71a": "npx -y @modelcontextprotocol/server-filesystem", + "m42057c1bd3ee": "Arguments (comma-separated)", + "m862fead051be": "Name *", + "mb334c83ff115": "My MCP Server", + "m7e02a31a539e": "Auto-detected:", + "m12e194e558e2": "What does this server provide?", + "mc9ca25454a8b": "Server requires:", + "mf5864652d5bf": "Token sent as Authorization: Bearer ...", + "m6e58dfc8e692": "Header Name", + "m1b06b0bb1e70": "X-API-Key (default)", + "m2d21ece0b57c": "Sent as the header value", + "mb96ed27eabea": "OAuth authorization available", + "m094661ea7645": "Authorization server:", + "ma694d6512292": "Connected successfully! You can close this form.", + "m349f82870358": "Waiting for authorization...", + "md82f54134beb": "Connect with OAuth", + "mf9db72ced1ee": "Access Token", + "m0e65e48637d3": "OAuth access token (manual entry)", + "ma8322c6de1b6": "Enter an access token manually, or enter the server URL above and click Discover to find the OAuth flow.", + "m4c9c57419990": "Client ID (optional)", + "m8e7141f4dfe7": "Client ID if required by the server", + "m1b6f8f11a2d7": "Some OAuth servers require a client ID. Leave empty if the server supports public clients.", + "m1124ecc667c5": "Environment Variables", + "m39acc1835cf0": "Optional. Passed to the stdio process via its environment.", + "m5ca24005b740": "KEY", + "mcd42404d52ad": "value", + "mda8993ec0654": "Add Server", + "mced5e64d4274": "Server not auto-detected", + "m1c3be50c7977": "You can still add it manually — fill in the details below.", + "m5d24f55e2c2f": "Server discovered", + "m2683cad48a14": "Name:", + "m9e3391e9bf07": "Homepage", + "mea93d6a262ec": "Tools", + "m5f2e66e65397": "Prompts", + "mef718e7031ce": "tools available:", + "m187897ce0afc": "more", + "m743c1043d543": "⚠ This server requires", + "mb9d906284539": "authentication", + "m2bcf7ca31bca": "🔗 OAuth endpoint discovered — use the \"Connect with OAuth\" button below to authorize", + "m8b38d0056b17": "OAuth metadata could not be auto-discovered. You can enter an access token manually below.", + "maaead4abf5d0": "Transport", + "me82e22633f85": "Args", + "m8eb3ea9bbde6": "Auth", + "mb073f6c68ef8": "Scope", + "m60cffa1d7158": "Tools (", + "mcbdf83b11de6": "Re-run the OAuth login to refresh this connection (keeps the same server and name)", + "mbf8a9eab9e7e": "Reconnect", + "mfb1e6fa55327": "Deactivate", + "m24433c70eba5": "Activate", + "ma7f54311a3e6": "Confirm Delete", + "mc419005e98b9": "Connect Model Context Protocol servers to give your AI assistant access to external tools and data.", + "mb3eacd33433b": "server", + "m201582247500": "configured", + "mad9662696670": "Loading MCP servers...", + "m013e6b9db9d2": "No MCP servers configured", + "m97bf0e1b8107": "MCP servers let your AI assistant use external tools like databases, APIs, file systems, and more.", + "mebef55227b69": "Add Your First Server", + "mb17dc3d5a74d": "Use the model configured in AI Settings for this workspace.", + "m572b0dfcf0a8": "Override for this project", + "m2b19d82e282b": "Pick a provider and model from your workspace catalog.", + "md8de930be069": "Loading providers…", + "mf8225de648cf": "Provider source", + "mfee405014d78": "Custom provider", + "m42b998374988": "Server default", + "mcc8b4624f765": "Loading models…", + "mc4985ffa6928": "Select a model…", + "m8ee47e5e4955": "Select a provider…", + "m81d707aca8c4": "No workspace providers configured. Add one in", + "m9606bfc49ee3": "Refresh model list", + "ma7d21d08d37b": "No models discovered yet. Click Refresh or check the provider in AI Settings.", + "me43fdd487cfb": "Select a provider first.", + "m454b4687ffb6": "Current saved override:", + "mad3e57500f14": "— pick a model above to update it.", + "m41bdb214d4a7": "Knowledge (.doable/)", + "m780a89408ef5": "Knowledge files guide the AI's behavior when editing your project. Each file serves a different purpose.", + "m7cf46d84e370": "files,", + "m75fba3b7fbcd": "% of budget used", + "m2cb221edd527": "Empty -- click to edit", + "m6250d5725dda": "Unsaved", + "mb3d19c7f1b7d": "Transfer Project", + "m01082fdad286": "Transfer this project to another workspace. The project will be moved along with all its files, settings, and deployment history.", + "mea0f15f9a0cb": "Destination workspace owner email", + "mc8cd3c642730": "owner@example.com", + "m136b84975307": "Permanently delete this project and all its deployments, files, and data. This action cannot be undone.", + "m1c335e92c86b": "Delete This Project", + "m0c88f5ee5691": "Are you absolutely sure?", + "mdbf2540da3b2": "and all associated data. Type the project name below to confirm.", + "m83918ed6bc4f": "to confirm", + "m666685f2f9a1": "I understand, delete this project", + "md36d7df3ead8": "Doable for this project", + "ma8b2040de78f": "When disabled, /__doable/ai/* returns 503 AI_DISABLED_FOR_PROJECT. Useful for paused projects or quota lockouts.", + "m75081b593d15": "Disabled", + "mc1ea40104894": "Thinking content visibility", + "me17f37e96ef7": "System prompt override", + "m3632ad92aaad": "Prepended to every runtime chat call. Visible to the model only — never echoed to the client. Up to 4 KB.", + "med644a4967f2": "chars (", + "md55648e6be99": "%) — extra content beyond the cap is truncated client-side.", + "mbc5b45ae7b60": "Reset to default", + "m9abc7b7a3843": "Chat model override", + "m32bd0666e5c1": "Overrides the workspace-resolved chat model for runtime chat in this project's generated app.", + "meee7a8fae13c": "Embedding model override (destructive)", + "m1dabae936e70": "Changing the embedding model permanently erases all existing embeddings for this project because pgvector column dimensions are fixed per model.", + "mc09f632874c2": "Current:", + "m65a0fa6b5d75": "(workspace/platform default)", + "m527d4fc6dd01": "Click below to walk through the destructive confirmation.", + "mc66ae680c148": "Change embedding model…", + "m1b5874862421": "Runtime token usage", + "me1c28d6e16c1": "Aggregates of ai_usage_log rows for this project, grouped by mode.", + "m9755c8d7d44a": "All time", + "meb6b42f54c42": "CSV", + "m79489561d9ef": "Top models", + "m18827ebcc4c9": "req ·", + "m1a7674eb4ee7": "tok", + "me40350c7ab5b": "Erase embeddings for this project?", + "m34584117f4bd": "Changing the embedding model will permanently", + "me0739214a7cf": "all existing embedding rows for this project (current model:", + "mb3ffbbff2d64": "(default)", + "m6befe4ab12fd": "rows across", + "m793a6e89fdd4": "table(s)).", + "m808fe16148a5": "New embedding model", + "mfc0510589f8e": "ERASE", + "m011d0e9f5ccf": "Erase embeddings & switch model", + "m38500dff72f5": "Waiting for DNS", + "ma7d4a9f301ed": "Verifying", + "mcb470ff16d18": "SSL Provisioning", + "m9f2c59a113db": "Removing", + "m4e08dbdaa06f": "Default Domain", + "m913d537a218d": "Your project is always accessible at its .doable.me subdomain.", + "maae50df57461": "Default URL", + "md6069fcf719f": ".doable.me", + "m1c8ac867f052": "Visit", + "mc1683eeb070b": "Custom Domain", + "m1b329de76913": "Serve your published site from your own domain name.", + "mfb1dfb5d89e8": "Pro+ Feature", + "m25a7608b4dc0": "Custom domains are available on the Pro plan and above. Upgrade your workspace to connect your own domain.", + "m0f09df73147a": "Add Domain", + "m16a49b5a4082": "No custom domains configured. Add one above to get started.", + "ma12655756209": "Configure DNS", + "m45037d12281e": "Add this CNAME record in your Cloudflare DNS dashboard with the proxy (orange cloud) enabled.", + "m76b26edb7557": "CNAME", + "m690b060136cb": "Copy target", + "m813b1a6dead6": "Your domain must be on Cloudflare DNS (free). The CNAME must be proxied (orange cloud ON). After adding the record, click Verify above.", + "m3eb998a330d2": "Domain Active — SSL and routing configured via Cloudflare", + "m8f74681f2b64": "HTTPS certificate managed by Cloudflare. Auto-renews.", + "m2ca4637a5b8a": "Project Details", + "m875ea40080d7": "Project Name", + "m51e38ecc92f5": "My Project", + "m154d24f40bd2": "A brief description of your project", + "m7448611d5f93": "Visibility", + "mb755ad205da1": "Anyone can view", + "m59a8280d96b0": "Only you can access", + "mb9f34f54a981": "Project Information", + "m041f49553f9c": "Read-only metadata about your project.", + "m048c7f2ef9aa": "Last Updated", + "m03fb44a5243d": "Project URL", + "m0c643a753e53": "GitHub Sync", + "m10d736b7b159": "Push and pull code changes to keep your project in sync.", + "m7585eaf776ab": "MCP & Integration Rate Limiting", + "m8853515ebeea": "Control how many MCP tool calls and integration requests this project can make per minute. Applies to all modes: preview, standalone, and published.", + "m2b4f1669370f": "Rate Limit Mode", + "md8081c667c73": "System Default", + "m419b966d9002": "600 calls/min for preview, 1200 calls/min for published apps with API keys", + "m9e8d2ff6c1a6": "Custom Limit", + "md3ab7b8e5c0b": "Set a specific calls-per-minute limit for this project", + "me1f5485a7544": "calls / minute", + "m86ce906b46f4": "Unlimited (No Rate Limiting)", + "mbd8347bfbf7f": "Disable rate limiting entirely. Use with caution — external MCP servers may still apply their own limits.", + "m9c870aa6e5e9": "How it works", + "m5a1c6983f6af": "Understanding the rate limiting architecture", + "mf4fcdd413746": "Rate limiting applies to all MCP tool calls and integration actions made by this project, regardless of how the app is accessed (editor preview, standalone URL, or published site).", + "m15e63fd45a68": "All requests flow through a", + "mb8cc693dc129": "single endpoint", + "m44f921f1d59b": "Preview & standalone: authenticated via short-lived JWT (15 min)", + "m3f11c69bb699": "Published apps: authenticated via project API key (dpk_*)", + "m603421410c77": "Rate limit is shared across all auth modes for this project", + "m3332b048bd97": "Save this key — it won't be shown again", + "m052f9bcf9ab8": "No API keys yet. Keys are auto-provisioned on first publish, or you can create one manually below.", + "m7c9bbe5ec9b3": "tool", + "meabc01f12ec3": "allowed", + "m81c151f98a19": "All tools", + "m89739b9d6a6d": "Any origin", + "me29abcb7ef37": "Revoke key", + "me1b30b3373a7": "Create Client Key", + "mac65db0ffaac": "Create Server Key", + "mc655f48b60f8": "Client keys", + "m8b8d2cce80de": "(dpk_c_*): For browser apps. Origin-bound, lower rate limits (600/min).", + "m9e0389f1fa44": "Server keys", + "mbb1bad10c001": "(dpk_s_*): For backend apps. No origin check, higher rate limits (1200/min).", + "m549886a83703": "Auto-provisioned:", + "mf8de3dbf5971": "When you publish, a client key is automatically created and scoped to exactly the MCP tools your app uses.", + "mc08f17eb9e11": "API Keys", + "m5fa4d2fe9af0": "Manage authentication keys for published apps. Auto-provisioned on first publish with tool-scoping and origin-binding.", + "m74dea5e67162": "Rate Limiting", + "m41efb3a9935a": "Control how many MCP tool calls and integration requests this project can make per minute.", + "mf7c5bd1cc1a7": "Live site accessible to all visitors", + "m306fdcf2ba87": "Test changes before publishing to production", + "m51469c906261": "Project Environment", + "m81373ef0c23e": "Override the workspace default environment for this project. The AI will use this environment's skills, rules, knowledge, and connectors.", + "m7ffa22adfe78": "No environments in this workspace yet. Create one from the Environments panel.", + "m0b6adee87205": "Use workspace default", + "mefb1406f94e5": "This project uses a custom environment override. The workspace default is bypassed.", + "m0aea45f48490": "Inheriting from workspace default. Select an environment above to override.", + "m4d1441671a98": "Environment Presets", + "m06ea1944254c": "Reusable bundles of skills, instructions, MCPs, and integrations applied to this workspace.", + "m0ad959ad8db9": "No environment presets", + "m9caadf97bbfd": "Create environment presets from the editor's Environments panel.", + "m870a8ffd98f4": "Deployment", + "m12b1050c1067": "Deployment environments for publishing your project.", + "m61cbf7fa57d1": "Last deployed:", + "m758e8416eb8a": "Project not found", + "mdc652adf2479": "The project may have been deleted or you don't have access.", + "m7ce8f8cb9bff": "Manage reusable skills and rules that shape how the AI works across your workspace.", + "m3a0f0a5401fb": "Skill content...", + "m2ef3fb262631": "Delete this skill?", + "m7fe2a91dd453": "New Skill", + "m149c130c15f6": "Describe what this skill teaches the AI...", + "m143db7e359b1": "No file patterns", + "md8ad616783ba": "File Patterns", + "m3c990110b4c4": "*.tsx, *.ts, src/**/*.js", + "m860e8e6eee39": "No file patterns — applies to all files", + "m28007b7f8f11": "Rule content...", + "m3a3de58afb86": "Delete this rule?", + "m3f82fe8e9de3": "New Rule", + "mbfd1311eba42": "(comma-separated, optional)", + "mf3bacf08ec15": "Describe the rule the AI should follow...", + "mf01ec050eca5": "Add Skill", + "m6d8b4a3d59cb": "Skills teach the AI specific capabilities or knowledge. They are included in the AI's context when working on your projects.", + "m476f61ba4fc4": "No skills yet. Add one to teach the AI new capabilities.", + "m968c3cb8fb70": "Add Rule", + "m0cadbcfb5f26": "Rules define constraints and conventions the AI must follow. File patterns control which files a rule applies to.", + "ma4fe917c1d4e": "No rules yet. Add one to set constraints for the AI.", + "m07b091a3fdc4": "Schema", + "m101f2ff3de22": "Rows", + "m80d2e18c7da9": "Queries", + "mfe0313c05643": "Migrations", + "m1a82ab93f701": "Database panes", + "m874caa6f7aeb": "Drop tables", + "m52171f6cf990": "Permanently delete a table and all its data. This cannot be undone.", + "m3361bd462810": "No tables to drop.", + "mc8af9ae37a48": "Drop", + "m53e3bd5e1031": "Drop table", + "mf65a3dd84895": "Reset database", + "m7eeaf76242de": "Drop ALL tables and start from an empty database. This cannot be undone.", + "m01be30bb4a27": "reset", + "me47560c7e215": "to drop every table:", + "m5aeb4bed9530": "Applied migration history for your database.", + "md1f962d75c7d": "No migrations yet", + "mab770d4f42dc": "Migrations appear here once the AI applies schema changes via the built-in database.", + "mcc149190687e": "Migration", + "ma91069147f9b": "Hash", + "m47a5180f7f62": "Database Overview", + "m5426a78b8f83": "A snapshot of your project database.", + "m309715f1d891": "No tables yet", + "m611a7763cad3": "Ask the AI to add some — it will create your schema automatically.", + "m24839d0c0477": "Total rows", + "m90b901a30c3f": "Indexes", + "md3ad1f1f8c9c": "Policies", + "m1810407f5ab7": "Quick actions", + "m5dd8131db13e": "Open Schema", + "m9d41abd72396": "Browse Rows", + "m826cea94aca7": "Run Query", + "m951088383385": "Run SELECT / INSERT / UPDATE / DELETE against your database. Queries respect row-level security.", + "mb1160f188a9b": "⌘/Ctrl + Enter", + "m634768dae147": "row", + "m6e2c568e0ce6": "Query OK — no rows returned.", + "m74234e98afe7": "null", + "m04fead47af96": "Fill at least one field before adding the row.", + "mff40ad964b14": "Browse, edit, delete, and export table data.", + "m98bded18778d": "rows)", + "m1868a8dd78ad": "Add row", + "m16cdb8681b4f": "rows total", + "me5a89270f6be": "Editing and deleting are disabled — this table has no single-column primary key to target rows by.", + "mf017b41bcee4": "New row in", + "md6b3a40516e9": "you (auto)", + "m5118ec56d3b0": "No data.", + "m18b77e44e689": "Delete?", + "mda00fa968bd8": "Confirm delete", + "m73912999faf4": "Prev", + "m18199d6c8031": "Tables, columns, indexes, and row-level security.", + "m5c38569007a8": "No tables found. Ask the AI to create your schema.", + "me0ae55a347ca": "RLS enabled", + "m6e348b8ef3df": "RLS off", + "m918e06828581": "Enable RLS", + "m16004c5e9d6f": "add a created_by / owner_id column to enable RLS", + "m53aade77cd69": "Columns", + "mf38d9950af4f": "Flags", + "me95b58867bd3": "NOT NULL", + "ma4aa5093c634": "Indexes (", + "m64636a121324": "UNIQUE", + "m615efc660a79": "Policies (", + "me7e9c0714998": "No policies —", + "meed09bdfc71e": "RLS is on but no policy grants access (rows are hidden).", + "md172b9c0a0d5": "this table is not row-level-secured.", + "m90d003ae66f9": "HTTP (Streamable)", + "m5e514b526a1a": "Connect to an HTTP-based MCP server with streaming support", + "mc3e6cbfe59d3": "Server-Sent Events (SSE)", + "m42dc7480db33": "Connect via HTTP with Server-Sent Events", + "m7097b2b3c5c0": "Built-in App", + "mc6ac2600776f": "Server-managed local process", + "m65104bc415b3": "Search skills...", + "m706bb2bf3ff7": "No matching skills", + "m436e37eab2b0": "No skills configured", + "m36bde66f289a": "manual", + "mda98d0c169dd": "(when to use this skill)", + "m248296cbb019": "Use when building React components with accessibility...", + "m99d204e6ce02": "Auto-invoke when prompt matches", + "m810167ab8526": "When to use this skill...", + "mf6456b82f5ee": "--- name: my-skill trigger: auto --- Skill content in markdown...", + "m6df1bb18a59a": "Skill", + "m6f3decdb03ee": "--- name: my-skill trigger: auto --- Skill content here...", + "mab6d0a8145e7": "No skills yet. Skills give your AI reusable capabilities.", + "m62845f31a2fe": "Rule", + "mef4255129890": "Always respond in a friendly tone.\\nNever include raw SQL in responses.", + "m76e4096cb2b5": "No rules yet. Rules guide how your AI behaves.", + "m8e8a0b88543c": "Invite Member", + "mf7fae87d68c7": "Send an invite to join this workspace.", + "m5c4b03a7e821": "colleague@example.com", + "mc1ad5dcf2e05": "Send Invite", + "m2b98b1945afc": "Remove Member", + "mda4b4fa5ee81": "Are you sure you want to remove", + "m72aa5b162eab": "from this workspace? They will lose access to all projects.", + "m60d18e42fd5a": "Removing...", + "me0447514873e": "Failed to load members", + "m0141903afec5": "People who have access to this workspace and its projects.", + "m1fd9ae1607aa": "Invite", + "md48b0edcb0fa": "Invites that have been sent but not yet accepted.", + "m3f63662d1610": "Invite Link", + "mee0ba29677dd": "Generate a shareable link to invite people to this workspace.", + "m826c272260db": "Invite link", + "m6ed21b0197a6": "Generate Link", + "mf49cda3a003c": "Transfer Ownership", + "m606c754332c6": "Transfer ownership of this workspace to another member. You will be demoted to admin.", + "m1a188a2a4288": "New owner email", + "m9efc82d7b54f": "Delete Workspace", + "m08e84f1f8c6f": "Permanently delete this workspace, all its projects, files, and member associations. This action cannot be undone.", + "mfbf65aeff09f": "Delete This Workspace", + "ma44014d57331": "to confirm.", + "m2aedfd1a09ce": "I understand, delete this workspace", + "mfb0b45908d60": "Workspace Details", + "m7df05adeeaad": "My Workspace", + "m93ecf5eb3e0f": "A brief description of your workspace", + "m9ab5abafdca9": "Workspace Information", + "me472493645c7": "Read-only metadata about your workspace.", + "m1044a4c056d0": "Members", + "mab3364cde0d3": "Your Role", + "m7ffac85d3272": "Too many login attempts.{v0}", + "mff0dc55e6c99": "Audit endpoint is unavailable (HTTP {v0})", + "m5b97efac769e": "Failed to delete {v0}", + "m00410e77ae85": "Using custom token ****{v0}", + "m00ace311c2f5": "Using cert.pem OAuth token ****{v0}", + "mac26c98b3c1e": "Retry all {v0} emails? They will be reset to pending.", + "mc5650b441394": "{v0} email(s) queued for retry.", + "ma02387e074cf": "Permanently delete ALL {v0} emails? This cannot be undone.", + "m4f5d6347279e": "{v0} email(s) deleted.", + "m24d7d02c9f3d": "Showing {v0}", + "m9f6801c068b5": "with status \"{v0}\"", + "m126345e8a598": "({v0}-dim vectors)", + "m8088d60a15ef": "Saved defaults for {v0} plan", + "m7a3979d63198": "Applied {v0} defaults to {v1}/{v2} workspaces", + "mdbc21a17d946": "Stop \"{v0}\"?\n\nThe app's systemd unit will be terminated. The user can restart it from their editor.", + "m7b63c6b376c6": "Kill dev server for \"{v0}\"?\n\nThe Vite process will be terminated. The user can restart it from their editor.", + "m26bf2485c847": "doable-app@{v0}.service", + "mc5ac96b52ed5": "Saved \"{v0}\" mode tools", + "mebee0e4886a2": "Delete the \"{v0}\" mode configuration? This will cause the mode to use hardcoded defaults.", + "mfa40d503407f": "Deleted \"{v0}\" mode", + "mb574068c50bc": "{v0} · {v1}\n{v2}ms · {v3}{v4}", + "m41b6c7dee5b4": "{v0}ms", + "m5bea7822d675": " +{v0} more", + "m84805b3f51e7": "Select {v0}", + "me4304a8372fd": "No projects match \"{v0}\". Try a different search.", + "m47f1f6a3b07b": "No templates matching \"{v0}\"", + "m39875f600860": "No projects matching \"{v0}\"", + "m260f4198369f": "Enabled · {v0} recovery code{v1} remaining", + "mf49697c96a5a": "Delete {v0}? This cannot be undone.", + "m6ca5d09b8d70": "# {v0}\n\nStart typing...", + "m973831b3382e": "Authentication error: {v0}", + "md1f8563597aa": "{v0} {v1} applied", + "m4dbb4ed0912c": "{v0} KB · ", + "m63e447794f82": "Auto-fix paused — the AI couldn't fix this error after {v0} attempts.", + "mbce09bb12e5f": "{v0}/editor/{v1}", + "ma126d644f0cc": "Could not save {v0} default — verify in /admin/plans after setup.", + "m3c6a40f73ae5": "{v0} models available on your Copilot subscription. Tune further from /admin/ai-settings any time.", + "m49a064002aec": "Configured: {v0} via {v1}", + "m160c02eb9e00": "present{v0}", + "m4ae2ea58575e": " · {v0} members", + "mce4bdf856850": "{v0} / {v1} used", + "m7844d8fc9afc": "{v0} preview", + "mbe78c16a8edb": "Preview of {v0}", + "m6935183f86c1": "Voice input couldn't start: {v0}", + "mf50339be8607": "{v0} workspaces: {v1}{v2}", + "m8cec5e9c2b80": "This Copilot subscription is being used by {v0} different users.", + "m61907559f648": "This GitHub account (@{v0}) was added by {v1} different people.", + "m22e9cebc83bd": "Settings copied to {v0} user{v1}", + "m0ef498fa44b4": "{v0} available", + "m6b463a0e3cd3": "{v0} credits remaining", + "m04302a14169c": "Upgrade to {v0}", + "meceda4cd02c0": "Editing {v0}", + "me2b3655a13a0": "Add{v0}", + "m54cbd4604c0c": "Disconnect {v0} and connect a different one?\n\n", + "ma192c0457880": "Tool call failed ({v0})", + "m608dd628c7c7": "mcp-app:{v0}", + "m08f7430195bd": "Delete {v0}? Default files will be reset.", + "md9339cc6a24b": "{v0} chars", + "md2b5e7506b51": "Version {v0}", + "m7e47e94daf7a": "My {v0} connection", + "m863f2ca6991c": "Enter {v0}", + "m9db2ba6d8968": "Connect {v0}", + "m086df81a91bb": " (Client ID: {v0})", + "ma575227918ad": "Paste your {v0} API key", + "m09ca41fb2c5d": "{v0} of {v1} {v2} operations failed. The list has been refreshed.", + "m85cabcf2a12c": "Select all in {v0}", + "mb59b1c094916": "Configured via: {v0}", + "m67c60b1e677c": "{v0} high-impact and ", + "m5db02c86ca3f": "{v0} characters", + "mdedcf827964d": "My {v0}", + "m4007ede786d8": "Members ({v0})", + "m5bed8dc6b0ed": "Pending Invites ({v0})", + "m535f5487c9f0": "Created {count, plural, one {# file} other {# files}}", + "m54eab0ff283f": "Edited {count, plural, one {# file} other {# files}}", + "me7f27e543c19": "Read {count, plural, one {# file} other {# files}}", + "mc33fa913a190": "Installed {count, plural, one {# package} other {# packages}}", + "m4eeb5480a729": "Searched {count, plural, one {# time} other {# times}}", + "m6e025ab4ef82": "Ran {count, plural, one {# command} other {# commands}}", + "md4e1aa013fee": "Explored project structure", + "m21cc30509578": "Planning", + "m29646fe2d127": "Creating plan", + "md4a85c25934d": "Tracking progress", + "mcfce761befa8": "Request failed", + "m4190475b5235": "Authentication failed. Please try again.", + "mb553ebbcba22": "Authentication code was missing. Please try again.", + "md89c7cc4ec4b": "No email address associated with your account. Please try again.", + "mcf838bcb6704": "Failed to fetch thumbnail logs:", + "m440bdfb3a851": "Failed to generate thumbnails:", + "m6a52dcd27169": "Failed to fetch copilot sessions:", + "mda6efefb0490": "Failed to load sessions", + "mf178a2552831": "Failed to terminate session:", + "mb268c0b17e63": "Failed to terminate all sessions:", + "ma7367485803a": "Failed to load conversation", + "m0eb0fd20a42b": "Failed to load action log", + "ma7375d496bde": "Failed to load audit data", + "ma4b404e83999": "Failed to load chat sessions", + "m73bfbe45ead3": "Failed to load thread", + "m128e6b89300b": "Failed to load DNS config", + "m29bbb7b7a04c": "Failed to load DNS diagnostics", + "mfa4f2f923b23": "Failed to save token", + "mf3d55812ba2e": "Failed to remove token", + "m2c07997249ab": "Failed to save", + "mb347c681bdec": "Failed to refresh diagnostics", + "m4706ef0b982f": "Failed to load email config:", + "m6eee736ebabe": "Failed to load queue stats:", + "m97f3dc1a00cb": "Failed to send test email.", + "mf625b14e1b2c": "Failed to delete", + "m0cfb2caf3808": "Failed to start Gmail OAuth", + "m5281a17d08d9": "Failed to load queue:", + "m0f48d9ed9216": "Failed to load email detail:", + "mada889964ab3": "Failed to load status", + "md2ac8dfbfab1": "Failed to load MFA users", + "m2638a84f756e": "Failed to reset MFA", + "m8c90edde06bd": "Failed to load AI allocations:", + "m62118d4494f6": "Failed to save AI settings", + "mff27059cb004": "Failed to reset AI settings", + "me4143613f121": "Failed to update role", + "meabb5c136be4": "Failed to update plan", + "m85a0de1739d3": "Failed to load plan defaults:", + "md67a86520b83": "Failed to save defaults:", + "mb7f9fa013618": "Failed to apply defaults:", + "md3774a9d3090": "Failed to fetch plan limits:", + "m31e1685470cc": "Failed to load plan limits", + "m2f114634718b": "Failed to save plan limits", + "m1e4e7c3efec4": "Failed to reset plan limits", + "med2139ca8746": "Failed to load runtime instances", + "m685f6c95f442": "Failed to load dev servers", + "m5aa7f04b86f9": "Failed to load egress data", + "m2515ea982cd0": "Failed to load logs", + "m1a70c04fc312": "Failed to load signups:", + "mce89884b1cdb": "Failed to load signups", + "m4924972f9587": "Failed to save settings", + "m177ebb036074": "Failed to load tool configs:", + "m557aa001b316": "Failed to save mode:", + "m1df9a58ef93c": "Failed to add mode:", + "md4ebc05d56d2": "Failed to delete mode:", + "m4ad82614b981": "Failed to load trace", + "m1bde77d27b5a": "No attributes", + "m2197f6207922": "No events", + "m7a711f215997": "No exception", + "mc86bcc9469d3": "Failed to load traces", + "me88e1a5f81d3": "Failed to save credits", + "m75592b03117e": "Failed to save GitHub account", + "mfe95f5923f3d": "Failed to fetch templates:", + "ma23127da31a7": "Failed to create project. Please try again.", + "m2495a96af0ae": "Failed to delete some projects", + "m6e260c2ad677": "Failed to load community data:", + "m609116050f8b": "Failed to discover projects:", + "m2c42b800f4f2": "Failed to remix:", + "m82e7362bb796": "Failed to remix. Please try again.", + "mc5bf66554c8f": "Failed to create listing", + "m7054480c7609": "Failed to load instances", + "mdd1a94ab79c0": "Failed to load MFA status:", + "mb0223f41bbad": "Failed to start enrollment", + "m615d3faf84b8": "Failed to disable MFA", + "m54ed946e0373": "Failed to regenerate recovery codes", + "mb689d74cef45": "Failed to save profile", + "m8f4894fcc9b3": "Failed to save profile:", + "m574f390356c7": "Failed to save profile.", + "m98548a295325": "Failed to change password", + "maa35c76bad68": "Failed to change password. Please try again.", + "m60e951281376": "Failed to load workspace AI extras", + "m59273bcdd9e5": "Failed to load workspace usage", + "m2805f0287fdb": "You are not a member of any workspace yet. Create one from the dashboard to continue.", + "m6ccebcddccab": "Failed to load workspace settings:", + "m2575461a4ce1": "Failed to update workspace:", + "mf14597dadd27": "Failed to send invite", + "ma36d7bf13293": "Failed to generate invite link:", + "m0b98a95233dd": "Failed to remove member:", + "m701d45a366f8": "Failed to change role:", + "m7b7440bf5872": "Failed to revoke invite:", + "mdab7736a5deb": "Failed to delete workspace:", + "m7a8439fc01b2": "Failed to load knowledge files", + "m0c041edb03b2": "Failed to create file:", + "m8310a0555402": "Authentication tokens were missing from the response.", + "mdaaba33e2963": "No email address is associated with your account.", + "md3d849a730c9": "Authentication tokens were missing.", + "m70bc1979e806": "Invalid JWT", + "m30aa69b29d9f": "An unknown error occurred.", + "m8ca83df14ee3": "Failed to fetch", + "mc382f7378c37": "Connection to AI failed — the server may be restarting. Please try again in a moment.", + "m4a7f23ba49c7": "No response stream received from the server.", + "m872423b25059": "Connection interrupted — the server may have restarted. Please send your message again.", + "mbeb845033bf7": "Failed to scaffold project", + "m07feb1207cae": "Failed to load files", + "me9b9dd4d2b1c": "Failed to load file", + "me1d8e8c18664": "This imported app uses Supabase. Connect your Supabase project so it can read and write real data — no manual .env editing needed.", + "m09ad32065f6f": "Failed to download project", + "m0b87cc7d93d2": "Please refine the plan based on my feedback.", + "m5b11c7d71bdc": "The publish/deploy failed with this error: ", + "m7fb831b82fd3": "This invite link is missing a token.", + "mbc7983bc3fda": "This invite is invalid, expired, or already used.", + "m626c6e175a78": "Connection timed out. If you completed OAuth on GitHub, reload this page and check /admin/ai-settings.", + "m51f74a42cc06": "No workspace yet. Reload the page and try again.", + "mfe32924b26f0": "Could not save. Try again.", + "m16efcd21d74f": "Could not save", + "m52a6ef302b8e": "Failed to create folder:", + "mcbd22b6cc368": "Failed to rename folder:", + "m5833eb5e8cd9": "Failed to delete folder:", + "m0a8d4fd66444": "Failed to create workspace", + "meee812e53de7": "Failed to remix project:", + "maf2035a41750": "Failed to load image", + "mea7d976ce045": "Failed to read file", + "mafaba68c1867": "Failed to process files:", + "m1a7cd149848a": "Failed to process images:", + "m3790b322709f": "Failed to load features", + "m6a8bcb8d2639": "Failed to load users", + "m51cc2811d054": "No microphone detected. Please plug in or enable a microphone and try again.", + "m683bdca05a39": "No response stream received.", + "md901d334eaee": "Connection to AI failed. The server may be restarting.", + "mbabb88c7fea9": "Failed to add account", + "m885e022949b4": "Failed to make provider available to workspace", + "ma08b22ea84b8": "This only changes the AI model for you. It overrides the workspace defaults below. Other workspace members will still use the workspace defaults unless they set their own override. If you don't set anything here, you'll also use the workspace defaults.", + "me21fa38b5758": "Failed to save provider", + "mc19db501d4d5": "Failed to load GitHub accounts:", + "m271110a8d8e9": "Failed to load providers:", + "m31812c8a3982": "Failed to load AI defaults:", + "m4a7d1fa983ed": "Failed to load user AI preferences:", + "m1bdc0c1294b1": "Failed to load models:", + "m9f7cbd819667": "Failed to load user allocations:", + "mfe1883f165bb": "Failed to load provider catalog", + "ma45a37ddcc32": "Connection test failed", + "m199ba4b7799e": "Failed to load usage summary:", + "me2e568f047d7": "Failed to load usage history:", + "m11521761e8d3": "Failed to load usage breakdown:", + "m98b998323671": "Failed to load workspace usage summary:", + "m01f10012cfac": "Failed to load workspace members usage:", + "m27267450b58d": "Failed to load workspace providers usage:", + "md5f7065f5590": "Failed to load hourly activity:", + "med310a04d2a6": "Failed to load token split:", + "m01d3102608d8": "Failed to load credits:", + "m09514d591e07": "Failed to load member model breakdown:", + "me36cf975f831": "Failed to load copilot account usage:", + "m2bfd1efce499": "Failed to load top consumers:", + "mb33f0b9ffefd": "Failed to load platform usage summary:", + "mbfc86ed12ce0": "Failed to load platform users:", + "me96aeec114fc": "Failed to load platform copilot accounts:", + "mdccd1f5ef168": "Failed to load platform custom providers:", + "m1798aab66965": "Failed to load platform models:", + "mcd51884893e0": "Failed to start checkout", + "m64a1feb5d37a": "Failed to open billing portal", + "m2bbab4a2c5d2": "Failed to start top-up checkout", + "mf9af667d451a": "Failed to load projects for folder:", + "m29269e5e9a31": "Failed to add projects to folder:", + "m518e6db15484": "Failed to create project", + "mb7668a581f59": "Failed to disconnect", + "m2c8a751cc59c": "This repository was already imported. Check your projects list.", + "mddeafa3a6bff": "Failed to load templates", + "mfec94ff32afa": "Failed to create environment", + "m775e5142a0b0": "The AI took too long to respond. Your work is safe.", + "m1ed48e13f504": "Could not authenticate with the AI provider. Check your API key.", + "m6519f92fc1e8": "The AI encountered errors during the build. It can try to fix them automatically.", + "macc567972bd9": "The selected model is not responding. Try switching to a different model.", + "m79d71120bff3": "This prompt is no longer active.", + "med2052a25624": "Failed to resolve conflicts", + "m02c981a0b3e5": "Failed to abort merge", + "m06fbbd1227cb": "Failed to switch account", + "m3ba5eb2c517c": "Failed to restore version", + "m0fff3eaed3ba": "Failed to load metrics", + "m11660a0100e7": "Failed to load context files", + "me5601bf24b32": "The new Supabase project is ready and the credentials are connected. Please continue building now — use the Supabase env vars per this project's framework conventions (see your env-var rules above), and keep SUPABASE_SERVICE_ROLE_KEY server-side only.", + "m92e733c93623": "The requested integration is now connected. Please continue and use its env vars and tools from the connected-integrations block.", + "m9fc4fcabe3ce": "No response body", + "m6488ad70750a": "This step is taking longer than usual…", + "m6d415794dcd0": "The plan has been approved. Please start building it now, step by step. Follow the plan in .doable/plan.md.", + "m6b89042219d2": "Failed to approve plan:", + "m5adf207f5d2f": "Failed to abandon plan:", + "mcad1033336ed": "Failed to get status", + "me7acfaa4d990": "Failed to load repos", + "m20065c697e90": "Failed to fetch file tree", + "m00d44a640200": "Failed to fetch file tree:", + "m7d36047f62cb": "Failed to read file:", + "ma11e2c2cca33": "Failed to save file", + "m8837dabd1b3f": "Failed to save file:", + "mfd7ee8c9b765": "Failed to create file", + "m4be7167b42f2": "Failed to delete file", + "m02f362d9d360": "Failed to delete file:", + "m3342fc6ab864": "Failed to toggle analytics:", + "m854ffc76dae2": "No vulnerabilities found", + "m6d74aa85ab11": "No hardcoded secrets found", + "m3796755a6d14": "No sensitive data found in source files", + "m5884884d4a46": "No security anti-patterns found", + "mc79f9389a95a": "Failed to save:", + "m6e99e5419d22": "Failed to create folder", + "mbba9caec6786": "Failed to rename file", + "m6b79e319f042": "Failed to move file", + "m23eba0b9be4d": "Failed to rename file:", + "mf46a9d658a25": "Failed to copy path to clipboard", + "m9086a92b0640": "Failed to create context file:", + "m12f902a8ad17": "Failed to load versions", + "mcc3b8b19aabe": "No version selected", + "m849d793bef40": "Failed to assign environment:", + "mb7d8d2c9a4b3": "Failed to load environments", + "m99af0e812303": "Failed to create", + "me8d8c2aa2455": "Failed to start OAuth flow", + "m54a5f040fdc6": "Failed to start enhanced auth", + "m81c865717d30": "Failed to save credentials", + "m2dd7d312a651": "Failed to load integrations", + "m8eb4917bbe54": "Failed to update", + "m88563d1f786d": "No auth needed", + "m81454f428d2e": "Failed to load catalog", + "m364e701ac186": "Failed to file report", + "mb498c7ef2e2b": "Failed to add server", + "mfb23f43b0848": "Connection test initiated", + "mf69e33af723e": "Could not discover this server's OAuth endpoints. Check the server URL is still reachable.", + "m8fd9698f6822": "Failed to start re-authentication", + "me0e158d1a1c5": "Failed to delete project", + "m25446f2f1d63": "Failed to load AI settings", + "m5fc4c4b3e470": "Failed to add domain", + "mfbc3b14bc5b6": "Failed to remove domain", + "ma4b17bc7db59": "You have unsaved changes", + "m3d99cc91be52": "Failed to load rate limit settings", + "m78bef06b934f": "Failed to load API keys", + "mac0faf623b6b": "Failed to create key", + "md3b8762758d8": "Failed to revoke key", + "m03ccf434d293": "Failed to set project environment:", + "mb84177fa1580": "Failed to load project", + "meacb01abdcf6": "Failed to get data token", + "m6c1e1de39441": "Failed to load schema", + "m9ed1f7cf0aba": "Failed to drop table", + "ma6013efaacd9": "Failed to reset database", + "m1a8dccc9e37f": "Failed to load migrations", + "md18e10549a59": "Failed to enable row-level security", + "m6938cc96576b": "Failed to load MCP servers", + "m6b8d7a31a410": "Failed to load skills & rules", + "m78f5005a18ba": "Failed to load skills", + "mac674f0b0e04": "Failed to revoke invite", + "mdf556f74a44f": "Failed to generate link", + "m978a1dc5401a": "Failed to copy to clipboard", + "m8a95759bc08a": "Failed to delete workspace", + "m12b33b8cab97": "No workspace selected", + "m1bfb9a169566": "GPT-5.5, GPT-5.4, GPT-4.1, o3, o4, and more — the full OpenAI lineup", + "ma57ba2df86e9": "Claude Opus 4.7, Sonnet 4.6, and Haiku 4.5 from Anthropic", + "m42f002bd954b": "Gemini 3.1 Pro, 3.5 Flash, 2.5 Pro and Flash via Google AI Studio", + "m7059e2430151": "OpenAI models hosted on Microsoft Azure (GPT-5.5, 5.4, 4.1, 4o)", + "m11a4f35f2288": "Foundation models via AWS Bedrock (Claude, Llama, etc.)", + "mf401c755a254": "Google Vertex AI with Gemini, Claude, and more", + "mef12689c0df3": "Access 200+ models from all providers through one API", + "m281caa6db5e3": "Open-source models with fast inference", + "m3fbb3a60d15a": "Blazing-fast inference for open-source models", + "mcbf219b50afc": "Smart routing across LLM providers for optimal cost/quality", + "m62c9cd419e85": "Curated, benchmarked AI models optimized for coding agents — pay as you go", + "m0d9934ad122e": "Low-cost open coding models — $5 first month, then $10/mo", + "m45ac1366f829": "Kimi K2.6 (262k ctx) — long-context autonomous agent model from Moonshot AI", + "m7e60fda55835": "Qwen 3.6 Plus (1M ctx) and other models via Alibaba DashScope", + "mdd88cf49f85c": "GLM models from Zhipu AI (Tsinghua-backed)", + "mad1621b95174": "ERNIE and other models via Baidu Qianfan", + "me5c0e7d030c2": "Doubao models from ByteDance's Volcengine", + "mea917b1e5993": "MiniMax M2.7 (205k ctx) and M2.5 — strong coding & agent models", + "m2f40080fde12": "Step models with strong reasoning capabilities", + "mc0fd27dd2462": "Yi series models from Kai-Fu Lee's 01.AI", + "mca46a1f353d1": "Hunyuan large language models from Tencent", + "m0789c34b7782": "Wafer-scale AI chips with ultra-fast inference", + "m90e31bb9ef46": "Jamba and Jurassic models from AI21 Labs", + "m1e3b881b6bf5": "Decentralized AI compute marketplace", + "m94e4ba89adce": "Serverless inference for popular open-source models", + "m162c0405e75f": "NVIDIA-optimized model inference microservices", + "mc02a911cc422": "Run AI models on Cloudflare's global edge network", + "m8c6e1ff78019": "European AI cloud with GPU infrastructure", + "md2520b053464": "French cloud provider with AI inference endpoints", + "mbb50ba53b742": "Budget-friendly AI inference platform", + "m1c9a4f83f2ba": "Serverless AI platform with per-model endpoints", + "mc62c862895c9": "European cloud with sovereign AI endpoints", + "m803f5c2de1fc": "Ultra-fast LPU inference — free tier with no credit card", + "m4a6191e28da1": "Mistral Large 3, Medium 3, Small 4, and Codestral 2508", + "m34fc1656f697": "Enterprise-focused RAG and command models", + "m279d41d16c35": "Grok 4.20 (2M ctx), Grok 4.3 (1M ctx), Grok 4.1 Fast and Grok 3 Mini from xAI", + "m61f057961dce": "DeepSeek V4 Pro & Flash — 1M ctx, open-weight MoE from China", + "mcb5d90692af1": "Search-augmented AI with real-time web access", + "me64591b66e23": "High-throughput AI inference on custom hardware", + "m98b29bed00e9": "Affordable GPU cloud for LLM and image generation", + "m7bbc04b4ac78": "Decentralized AI inference infrastructure", + "mf0219f5a51a9": "Run LLMs locally with one command — most popular local engine", + "m21b0f67360f6": "Desktop app to discover, download, and run local LLMs", + "m299c12786d97": "High-throughput LLM serving with PagedAttention", + "m176f619ac21e": "C/C++ LLM inference with minimal dependencies", + "m6f92db761337": "Open-source desktop AI assistant with local model support", + "m01dc4dbe696e": "Drop-in OpenAI replacement running locally with various backends", + "m244fded4e09a": "Privacy-first local AI — runs on consumer hardware", + "m230665563339": "No tool calling, no vision — most limited of primary engines", + "mdfdaf12a82f2": "Gradio web UI for running large language models", + "ma0b5c98fbd84": "Easy-to-use GGUF runner with built-in web UI", + "m45540635cd46": "Text Generation Inference by HuggingFace", + "m68cec3ffa8b3": "Self-hosted AI coding assistant", + "mb7d79c357b8f": "Single-file executable LLMs by Mozilla", + "m23445c5d1873": "Local AI engine from the Jan team — multi-engine support", + "m74a7ddeefd94": "Run LLMs as Docker containers with built-in GPU support", + "me098f8bee7f4": "Efficient LLM deployment toolkit from Shanghai AI Lab", + "md4909cab2e30": "Fast serving framework for large language and vision models", + "m5ce23da7d641": "ExLlamaV2-based API server for fast GPTQ/EXL2 inference", + "m13b1820c01c7": "Machine Learning Compilation for universal LLM deployment", + "mf24ad819b717": "High-performance inference engine (vLLM fork) for roleplay and creative use", + "m2a746b70859f": "Desktop AI chat app with local and cloud model support", + "mbeac9f3fa80a": "Self-hosted web UI for local and remote LLMs", + "mf0348548ae93": "Open-source ChatGPT-like UI supporting multiple providers", + "m906f3d903741": "OAuth authentication failed. Please try again.", + "mfd033bff00ba": "Access was denied. Please try again.", + "m84c480693ab2": "Your signup was not approved.", + "mc4da52bf3ef6": "AI settings saved", + "m569a3f9b4fa7": "AI settings reset", + "m2e9fd8e7d617": "Bulk applied to {v0} users — {v1}", + "m3d8ef18bd4f0": "{v0} → {v1}", + "m702238944012": "{v0} → {v1} plan", + "mff17b501efe0": "Credits updated for {v0}", + "ma7e0127349ec": "Failed to {v0} {v1}", + "m176685608555": "Unblocked {v0}", + "m8fc1d649fea0": "Failed to unblock {v0}", + "mab729c2f1cd7": "\"{v0}\" deleted", + "m2e5063f18b58": "Failed to delete \"{v0}\"", + "mcae3da3b84cd": "{v0} project{v1} deleted", + "m8281f2bca24e": "Couldn't load the Discover feed. Please try again.", + "mcd99493692c6": "Couldn't load projects. Please try again.", + "mad1c9c1a3f66": "Only workspace owners / admins can change workspace defaults.", + "me5f88a6a15eb": "Workspace AI defaults saved.", + "m96d8a2f81d45": "text-amber-400 bg-amber-500/10", + "meb2135781360": "text-blue-400 bg-blue-500/10", + "m80e515468102": "text-muted-foreground bg-muted", + "m29145bd2ff95": "Tech stack, conventions, domain terms", + "m267eae2e206e": "Rules for the AI to follow", + "m3bd961d29f18": "Brand voice and personality", + "m19c44fb9ed12": "Core values and mission", + "mf1022ee92088": "Persistent facts and preferences", + "m9c559d4d4f2c": "User context and background", + "mbf180e7a2452": "Project roadmap and milestones", + "mc44fbad1ceff": "Access was denied by the provider.", + "m0012375416df": "Authorization code was missing.", + "m0e2226b5235f": "Welcome", + "m5bbbe53187ad": "Sign-in", + "m84e1ec2c5bd3": "AI Provider", + "mf9191531404c": "Cloudflare", + "mad9ff7b7934e": "Plans & Billing", + "mfd72092904a8": "Choose Provider", + "m40611abbdda2": "Validate", + "mb20ee2a85fa5": "Planning…", + "mb68613d48751": "Waiting for your input", + "mc3ec64928d7d": "Reading files…", + "mfeee86f87fe7": "Writing code…", + "m2ff5dfc77241": "Running command…", + "mbea44ca44951": "Fixing issues…", + "m95de7a5b1f8f": "Installing packages…", + "m280d3efaadd1": "Running tests…", + "md53b790e544c": "Responding…", + "md353a99eb455": "Cancelled", + "mcf65fc4a78bc": "Loading page...", + "m566167b27677": "Analyzing performance...", + "m9b0245d6e807": "Checking accessibility...", + "m194254c2fabd": "Generating report...", + "m3981a2b9c1ef": "Communication", + "m85c1562cd9ce": "Developer Tools", + "m12f9e542a4a5": "CRM & Sales", + "ma4ca9a859b99": "Finance & Payments", + "m4edf08238dde": "AI & ML", + "m31423c3c9989": "Data & Storage", + "m8dfdbc2ef439": "Social Media", + "m572480ceef9b": "E-Commerce", + "m58a34ff5ee9e": "Project Management", + "med07c04922e0": "Customer Support", + "m15e68b1f4657": "HR", + "md909750b1bbb": "Automation", + "m05e43eb0f640": "Username & Password", + "m61bebbf883a8": "Web service", + "m04520ef10d76": "HTTP streaming", + "mb192572d71ea": "HTTP SSE", + "mb7b2963682a5": "Built-in app", + "m7fdfda5f50a4": "managed", + "mfe00af08cc4f": "Saved {v0}", + "m4dd069cac807": "Project deleted successfully", + "m2bc6b9b66cbf": "Transfer request sent. The recipient will receive an email to accept.", + "m04d2a1d27e3f": "Doable settings saved.", + "ma01bbf2233a1": "Type \"ERASE\" exactly to confirm.", + "mbed8e537b6cb": "Erased {v0} rows across {v1} table(s). Mode: {v2}.", + "m0880f7d59cd3": "Domain {v0} added. Configure your DNS records below.", + "m8884f64ece53": "{v0} is now active!", + "m186cc53091ad": "Domain removed", + "m5a8a5887401e": "Project settings saved", + "mdb4653c7fed7": "Rate limiting settings saved", + "mca702c65aac4": "API key created — copy it now, it won't be shown again", + "m697393c778b5": "Key revoked", + "me4dc2f78bb78": "Invite sent to {v0}", + "m6afe87e532b3": "{v0} has been removed", + "m958814af76e3": "Updated {v0}'s role to {v1}", + "m5aebb558ca6a": "Revoked invite for {v0}", + "m255cd0e91bb6": "Invite link generated", + "ma459ff6332b7": "Workspace deleted successfully", + "m6bdabff6ddfa": "Transfer request sent.", + "mdfbfb561815a": "Workspace settings saved", + "m945131b556b7": "Bring frontier AI into every enterprise. Empower every FDE.", + "mbe8ba6b03cc1": "Understand business needs. Build working applications. Take AI from demo to delivery.", + "m45855bb05ece": "I want to send my friend a working app.", + "m8870ef6e570f": "Deploy → share the URL.", + "m7b14e3ebcb54": "I want others to fork my project as a starting point.", + "m0697819879dd": "Share to Discover.", + "me4b4d937bb3c": "I built a useful set of skills + rules and want others to install them.", + "ma6855cfa2e04": "List on Marketplace.", + "m92add4e44710": "I want to charge for an AI environment I built.", + "mc1e189e00075": "List on Marketplace with a price (Stripe Connect required).", + "m11b39c93777e": "Agent", + "ma6e600a10fed": "Context", + "m64fce9d5ffd4": "e.g. Read-only planning tools", + "mbc1a02882357": "e.g. Always answer in concise bullet points. Never reveal internal pricing. If you don't know, say so.", + "m6976f80ee219": "e.g. Dashboard, Settings, Pricing", + "m0868745e457a": "e.g. My App", + "m11a59c70fe9f": "e.g. You always answer in haiku.", + "m81c1f9879c76": "e.g. React Best Practices", + "m593af471fb94": "e.g. TypeScript Conventions", + "m22d3c604d149": "e.g. claude-sonnet-4 (blank = auto)", + "mc6a41eb77538": "e.g. gpt-4o", + "m57bf75e785b4": "e.g. gpt-4o, claude-sonnet-4", + "m3d0e1a4bef76": "e.g. POST /chat", + "m10571c479770": "e.g. style-guide, api-docs", + "m8987aa914076": "e.g. MiniMax-M2.7, gpt-4o, claude-sonnet-4", + "m644d8dedb20f": "e.g. grok-3, qwen-turbo, llama-3.1-70b", + "m7f71b9ebafee": "e.g. mixtral-8x7b, llama-3.1-70b", + "mad3913747c59": "e.g. password=\\\\S+", + "m0d042ad55974": "e.g. claude-sonnet-4 (leave blank for auto)", + "mdeee27768716": "e.g. React + Supabase", + "m228e712922fb": "e.g. Notion, Slack, My API", + "m34496619eba6": "e.g. text-embedding-3-small or gemini-embedding-001", + "m80ef0ed787b1": "Custom OpenAI-compatible", + "mdc1249ded00f": "Step {current} of {total}", + "m86d376d01c97": "Show all {count} providers", + "m781978fa4c25": "({count} popular shown)", + "m3ca7d842d120": "Plan mode", + "me6c13915614a": "Build mode", + "me012cf0c64ea": "Let's make it Doable, {name}", + "mb48bddfa2484": "What's Doable today, {name}?", + "m69d3f0312d50": "Ready to get it done, {name}?", + "m8449d78cdc66": "Dream it. Do it, {name}", + "m79824f18e830": "What will you ship, {name}?", + "m4fc94bed6b66": "Describe the business workflow you want to build...", + "m5dd9c70d5861": "Build a SaaS landing page with pricing...", + "m082a69fe14eb": "Create a portfolio website with animations...", + "m8e15a147e1fa": "Design a task management app...", + "m5d8436b7898b": "Make an e-commerce store with checkout...", + "mb698b2eb1332": "Build a social media dashboard...", + "mce4fad2f76c1": "Create a recipe sharing platform...", + "m80ab5a32d5fa": "Design a fitness tracking app...", + "mc312e5c16367": "Build a blog with markdown support...", + "m2376d6697630": "Create a real-time chat application...", + "mb5d9619378c8": "Make an invoice management system...", + "m917131e15fce": "Preparing workspace...", + "mfe8383d5a335": "Creating project scaffold...", + "md30642dc738e": "Creating project files...", + "me232bcde0526": "Creating project files…", + "ma3277495f754": "Installing dependencies...", + "m9d7a7a4c4b38": "Starting dev server...", + "m723a6d7e4364": "Setting up your workspace...", + "ma2ccc3533bd6": "Preparing live preview...", + "m19e5fe04c9a2": "Getting things ready...", + "m4a7624b24100": "Starting the live preview so you can see changes instantly.", + "m01d89a8ad232": "AI is still working on your project...", + "m05222d08b282": "Preparing to build your presentation…", + "mb0eaeacb1b36": "Writing response...", + "mc898850137a8": "Connecting to AI…", + "m426613755962": "Analyzing your request…", + "m1a7f1e13e7ad": "Task cancelled", + "mb4739a4f0865": "Thinking...", + "m0149c7b12cba": "Resolving {package}… ({count} packages)", + "md5419b7b64cb": "Installed {count} packages", + "m5f2d69594194": "Installing packages… ({seconds}s)", + "mb708e0e2313c": "Downloading and linking packages… ({seconds}s)", + "m79c009d210ab": "Dependencies installed ({seconds}s)", + "m0e2c8a0f7968": "Loading preview… ({seconds}s)", + "m9335b34496db": "Downloading packages… ({seconds}s)", + "m322ee38b8f8f": "Installing dependencies… ({seconds}s)", + "me2a11607dd18": "Linking packages… ({seconds}s)", + "mb661a5695b24": "Almost there… ({seconds}s)", + "mfe98f42cd51a": "AI Chat", + "m5466ef4b84a5": "AI chat and code generation", + "me605122cbc04": "Configure AI models, providers, and enforcement", + "m7d6a0afa7884": "Click-to-edit visual editing in preview", + "mbac7a2b4b2a8": "Monaco code editor (Dev Mode)", + "md974b925781d": "Connect and sync projects with GitHub", + "m624629124403": "Publish / Deploy", + "mf2792c4a79d6": "Publish projects to doable.me or custom domains", + "m991a7731aca7": "Use your own domain for published apps", + "m5a479c403e5b": "Create projects from templates", + "mfddc1730af3e": "Built-in analytics for published apps", + "m92349d06fd0e": "Billing & Credits", + "me2dc79aa3ffc": "Manage subscriptions and credits", + "m3e42eb218756": "View and restore previous versions", + "m2e2d90970121": "Create and manage workspaces", + "m8ec6f568c9e2": "Invite and manage workspace members", + "m767b6b8b1593": "Configure integrations and MCP servers", + "m9e61318b08e7": "Security scanning and vulnerability management", + "maf48bcf0b951": "Frontend", + "mfa4bec978e4d": "Full-Stack", + "mc6629edc7478": "Disable {name}", + "mdd01fc045da3": "Enable {name}", + "m2a52bd3a58de": "workspace enforcement", + "mce28416a34d0": "user preference", + "m1d17f10c9a01": "workspace Copilot setting", + "m4c9f0ab64fff": "workspace custom provider", + "m356a31b41f9f": "workspace setting", + "m9062da45215a": "no model configured", + "m06bde129f751": "Custom provider (workspace default)", + "m404dd0fc90d3": "GitHub Copilot (workspace default)", + "mbc228f06a4ea": "Understanding your request...", + "m33e97951020d": "Reading file", + "m88efdc56ec01": "Creating file", + "m7fd76d274fb7": "Updating file", + "m1a446bee1668": "Removing file", + "m20c0b499fac0": "Renaming file", + "mbc9797766c2d": "Searching files", + "m53b7a62c2b78": "Scanning project structure", + "m2afb17673ff9": "Running command", + "mb1a6be4b5c00": "Deploying preview", + "mcba0c8fabef9": "Editing file", + "m91713a5d3c5b": "Writing file", + "md09a58e07d38": "Overwriting file", + "ma9a47efd4886": "Deleting file", + "m15d4ba596aa0": "Scanning directory", + "m3957258571ff": "Searching codebase", + "m4f27ff8a9cc5": "Finding files", + "md7ad4e191ef9": "Executing command", + "m5efc7bfe04a0": "Running shell", + "m6effe77ed662": "Running tests", + "m68e34b04db6e": "Running lint", + "me713536fedeb": "Type checking", + "m7dc0e0a3a1f5": "Updating plan", + "mdf26331fb78b": "Auto-fixing issue", + "m4e8b16c1f54b": "Retrying step", + "m5bb23468896b": "Designing your presentation slides…", + "m8ca687195aba": "Improve the styling", + "m7d95e21c9692": "Add responsive design", + "m534cb2034f7d": "Add more features", + "m6ea57583614b": "Fix any issues", + "mb80a37564fbb": "Query", + "me1338481990b": "Data Schema", + "mc3682617bf76": "Data Migrate", + "m3d60df7cd3a8": "ask clarification", + "mc7c1762aa46c": "Ask Clarification", + "m0ebb429fa86d": "task", + "m4bc74b21357c": "Task", + "mfaefbbbf05cb": "grep", + "m16970ed6824c": "Grep", + "m4fe2446c5d9a": "Reading {target}", + "m733d78fc0c8c": "Creating {target}", + "m2d680ebf7ad0": "Updating {target}", + "m58534c10200b": "Removing {target}", + "m2b8a5d29d7d1": "Renaming {target}", + "mb3712e7e124e": "Installing {target}", + "m460f508f8f46": "Editing {target}", + "m689db228e3c6": "Writing {target}", + "m12ce3689b195": "Overwriting {target}", + "maae90d6ab181": "Deleting {target}", + "mf9ed6916fef7": "Step {count} — {label}", + "mbb8ce4ef7aaa": "Applied {count} changes", + "mfd1514afd62f": "Here are my answers to your questions:\n\n{answers}", + "m6b7a91a49a2a": "Start building! Here's the approved plan:\n\n**{summary}**\n\n{steps}\n\nBuild each step in order. The full plan details are in .doable/plan.md.", + "mff52ef58a138": "Code Editor", + "m10d6e2392b1c": "Security Center", + "ma05f18eec8ce": "Visual Editor", + "mcff2a9d647e2": "Workspace Members", + "m5acc0da25133": "Found a preview issue — fixing it...", + "m2127e84f4092": "Fixing preview issue...", + "me118ae85bb67": "Adding new capabilities", + "m82ba2b5792a6": "Setting up your presentation", + "mb681b20c70f6": "Rendering your slide deck", + "m83f857a021fe": "Build ran into an issue — working on a fix", + "mc57a09e8f369": "Had trouble adding that package", + "m5477a72320eb": "Hit a snag — figuring it out", + "m679e84cac5ea": "Added to your project", + "m9cf6dbd76c0c": "Changes applied", + "m5ad3dbd1242a": "Got it", + "m313bf98ff918": "Project mapped out", + "m227a147b3240": "Search complete", + "m996f87b386e1": "Ready to use", + "md9e44c03b78d": "Build complete", + "m7e8ae4865e72": "Cleaned up", + "mc884daae36e7": "Live and ready", + "m59ccecd04642": "Issue encountered", + "m28628c237508": "Running: {target}", + "m62f328b65a01": "Refining {target}", + "m1e5628b48f6b": "Reviewing {target}", + "m7d0d333d12fa": "Searching for {target}", + "mf22270321c72": "Cleaning up {target}", + "m1154e06d2d21": "Running {target}", + "m186e66214b5a": "Adding {target} to your toolkit", + "m93f848de10fd": "Building your {context} — {target}", + "m6985ca1f4daa": "component", + "mab1620a8c2e3": "UI element", + "m2ad562319767": "feature", + "m57ffcc28d4b9": "utility", + "m90a7578caf87": "styles", + "m1dc5ae5b6817": "layout", + "mb7d64a922100": "configuration", + "mcaf9f906b16a": "documentation", + "m329430355fc1": "Here are my answers:\n{answers}", + "mae9d0d1aff24": "Loading project…", + "me081c4bfb49e": "Show {count} earlier steps", + "mb528a28640bd": "Show full prompt ({count}k chars)", + "m0c556fb76846": "Showing {count} of {total} projects", + "mc3aedd418ebf": "Delete {count} projects", + "m64af6de234a6": "Showing {start}–{end} of {total}", + "m652aceea790a": "Start fresh", + "m681b16c2176f": "AI generates", + "mf817b660ab75": "Pre-built", + "me22006500c10": "All workspace members", + "m96f64f836aa3": "Project members", + "ma0dff9932953": "AI helps you plan, then does the work", + "m7cbc9f73acfd": "AI writes code directly", + "m6496c935887f": "New line in chat", + "mf7dfc2c317b4": "Toggle code view", + "m87ab3cc0f01d": "Toggle preview", + "mcb2958c8aaca": "Deploy project", + "mc13ff73b9098": "Toggle fullscreen", + "mc8df66c5fe3f": "Close dialog", + "mbb0ee409a3fa": "Design a portfolio site", + "m99fb9cd2934b": "Preview failed to start.", + "me64576a3b265": "Preview failed to start (exit code {code}).", + "mc196e9373911": "Connecting to AI model...", + "m829805cc6c58": "Completed {count} actions", + "mcacdca0e9b99": "Plan finished", + "m9776f2e45ce3": "Executing plan", + "m311d1760445a": "Plan needs attention", + "mec71278eb553": "Plan paused", + "m5ee0169f4b8f": "Steps show reported results, not elapsed build time.", + "m1deff346b554": "No active run. Unreported steps remain unconfirmed.", + "m5776262a5788": "Could not approve plan. Please try again.", + "m8027f432a7fb": "Interface language", + "m0ea4ae59f939": "Choose the language used by platform menus and messages.", + "m40cad2173656": "This changes the platform interface only. AI replies and generated apps use their own instructions.", + "mc3a720f0c8bd": "Personal interface preferences", + "m6998dfbbd128": "Interface language does not change AI replies or generated apps.", + "m0beff060665e": "Connecting to AI...", + "me50a077692e0": "AI is writing code...", + "m619eec4a7c1f": "AI is analyzing the project...", + "mdb3aec359d8f": "Checking task progress", + "m35ea86212979": "Checking task progress...", + "ma5d341a5b0db": "Result not confirmed", + "me125680b1485": "Task stopped before completion", + "mefaddeef953d": "Task status could not be confirmed. Please resume the task or choose a model with tool calling support.", + "m87722fea3039": "The task made no new progress across repeated attempts. You can resume it without losing completed steps.", + "m30e9da875aed": "The task reached the continuation limit. Completed work is preserved; resume to continue.", + "me017a9daa432": "No completion result received", + "m5b9442561788": "Recorded {count} actions" + } +} diff --git a/apps/web/messages/index.json b/apps/web/messages/index.json new file mode 100644 index 00000000..7494c19b --- /dev/null +++ b/apps/web/messages/index.json @@ -0,0 +1,3903 @@ +{ + "Authentication Error": "m797b4f031eac", + "Something went wrong.": "m0c953ab32c60", + "Try again": "md8b8392e2c54", + "Back to Login": "m40c55c136901", + "Something went wrong. Please try again.": "m3ccd9d6586ef", + "Check your email": "m7732287944e2", + "If an account exists for": "m9c2fe02045e2", + ", we've sent password reset instructions to your inbox.": "mcb46c5c12546", + "Didn't receive the email? Check your spam folder or": "me0a32889eacc", + "try again": "m5b5dedee32c5", + "Back to sign in": "m71fe31ccd37c", + "Forgot your password?": "mafd25fdf17c7", + "No worries. Enter your email and we'll send you reset instructions.": "m6cc4c62eef9a", + "Email address": "mf2488fd4ef4a", + "you@example.com": "m53e6cdc30765", + "Sending...": "m286a3af7348e", + "Send reset instructions": "m2e217636019b", + "自然语言生成应用 · 内部测试平台": "m9e605fcf232b", + "By continuing, you agree to our": "mb5f64aac226f", + "Terms of Service": "m4afa55bf7aec", + "and": "m6201111b83a0", + "Privacy Policy": "m506ff3946215", + "Verification failed. Please try again.": "m3c8432b0c6a7", + "You're on the list": "m4fcf29ae7ef2", + "Two-factor authentication": "mb6824cc8a91e", + "Enter the 6-digit code from your authenticator app, or a recovery code.": "md9708dace524", + "Verification code": "m3ee75029c70e", + "123456 or recovery-code": "m3dd86d618eaf", + "Verifying...": "m2ec1ac7d45e8", + "Verify and continue": "mf6778950d77c", + "Sign in to your account": "m54f9715d07d2", + "Continue with GitHub": "m7b9db77e0178", + "Continue with Google": "mcce937e89144", + "Or continue with email": "me3324559f7c8", + "Email": "m969ccbd3cf63", + "Password": "me7cf3ef4f17c", + "Forgot password?": "m30c1d8d3e912", + "Enter your password": "mc06bf9670174", + "Hide password": "ma60a56c584b3", + "Show password": "m6aeaa6a53d09", + "Remember me": "mf93267aa11e8", + "Signing in...": "m1f96f5d016bd", + "Sign in": "mbfd402b2f6f3", + "Don't have an account?": "m1b545b23fae3", + "Sign up": "m5e2b8e96503d", + "Weak": "m8d6cea2517ff", + "Fair": "mf7b19afcde96", + "Good": "mc939327ca16d", + "Strong": "m30a04fdcb6bb", + "At least 8 characters": "m977f3b2676a9", + "Uppercase letter": "m3354e2819414", + "Lowercase letter": "m168d366549bb", + "Number": "mbd82cf16699b", + "Invalid reset link": "m7f7cd67bcf4d", + "This password reset link is invalid or has expired. Please request a new one.": "m039dc4816602", + "Request new reset link": "m76897da9593b", + "Password reset successful": "ma702a922e26a", + "Your password has been updated. You can now sign in with your new password.": "m2da2987c9882", + "Passwords do not match.": "m6c6e178ad2a8", + "Password is too weak. Use at least 8 characters with uppercase, lowercase, and numbers.": "m9283b095813b", + "Set new password": "m6ee6d9db4278", + "Your new password must be different from your previous password.": "m4986b95da4ef", + "New password": "m3dd9df4441fb", + "Password strength:": "m563306418abb", + "Confirm new password": "mbf000421aeb3", + "Re-enter your password": "m210dfc7e4536", + "Passwords do not match": "mb6eb82cd3300", + "Passwords match": "m49665aad0be4", + "Resetting password...": "mdaef019f06a4", + "Reset password": "me0edfeb3a71a", + "Please enter a valid email address.": "m958e4ccf2953", + "You must agree to the Terms of Service and Privacy Policy.": "m702463b34cf3", + "Already approved?": "mfe2ea40e0f39", + "Create your account": "m9e709348f582", + "Or sign up with email": "mb896d16d300e", + "Name (optional)": "me09b37bcc4f3", + "Your name": "m2c6b2e253c01", + "Please enter a valid email address": "mb00f7e3ae5e8", + "Confirm Password": "mc292210c4416", + "I agree to the": "m26a58d002b08", + "Creating account...": "m7dd3701aa3f1", + "Create account": "m798ca2ce18bf", + "Already have an account?": "me77fea936d3e", + "Special character": "m920d04ec14fe", + "Min Plan:": "mf99582ef73f9", + "Min Role:": "ma8761df2126c", + "No AI configured": "m02069e79e45e", + "Copilot:": "m16211dd296cf", + "Unknown": "mb764cdc0eab7", + "Configured": "m84aebc69a1bf", + "You": "m08b041935798", + "Manage credits": "m11421ee1e11a", + "Configure AI for this user": "mf69d5d4b63d8", + "Reset AI allocation": "m069d73bcfc70", + "Configure AI for": "m190a5016e300", + "GitHub Copilot": "med249d417dcd", + "Custom Provider": "m0382e4dec018", + "Both configurations are saved. The selected tab is what this user will use.": "mc2186fe04eb9", + "Account": "m7e1b0d5641f2", + "Default (gh CLI)": "m733f239a2734", + "Model": "m5e2c614c23f0", + "Provider": "m472590ae974d", + "Select a provider...": "m73d8f90051f2", + "Save": "m1509f561f241", + "Cancel": "m19766ed6ccb2", + "Credits for": "mdc20e9fe650d", + "Daily used:": "m3aa3d40a8fc9", + "Monthly used:": "mcd1a8b01e9d5", + "Rollover:": "mca3f6461f437", + "Daily Credits": "m4c6dc26beeab", + "Monthly Credits": "ma67991ce2664", + "Rollover Credits": "m527b050da083", + "Save Credits": "mebccf6ab3710", + "Save credits and reset daily/monthly usage to 0": "m69be897d8b96", + "Save & Reset Usage": "mfa615f22bd26", + "Generate missing project thumbnails and view the generation log.": "m011bea484f1a", + "Generating...": "m49286f33b674", + "Generate Missing Thumbnails": "m2cc28dc8a83e", + "Refresh": "m0e9161011702", + "Total projects:": "m612e74a217ea", + "| Missing:": "m9fd84954bfa5", + "| Queued:": "m284913d5c772", + "Generation Log": "mef5ade58332c", + "entries": "m87d05cd08817", + "No thumbnail generation logs yet. Click \"Generate Missing Thumbnails\" to start.": "m9db084956346", + "ms": "mf785c3ce1d58", + "No session data available": "mdad5476f0b47", + "Retry": "m942087cc2d41", + "engines": "m9187cc2ac5a3", + "RSS": "m3bcf9f2bf072", + "Heap": "mbb30cbe2f9b8", + "Uptime": "md63ab4711473", + "Stopping...": "m6f68db105f37", + "Stop All Engines": "m507eb972faea", + "Auto-refreshes every 5 seconds. Each engine is a per-project Copilot CLI subprocess.": "m656692907162", + "Active Engines": "mda292c238881", + "No active Copilot engines. Sessions start when users interact with AI in the editor.": "m0830217a2761", + "Unknown Project": "m34cfcaf1a12e", + "visual-edit": "m286ea6c1b524", + "idle": "m4fb62348858c", + "Active requests": "md5aa1b5cf70c", + "active": "m96879611650f", + "Sessions": "m6fa3cbf451b2", + "sess": "mbd717b467075", + "Engine age": "ma0355426abfc", + "age": "m013f54400c82", + "Time since last use": "m2b3ef6712d86", + "Kill": "mee72959b9b18", + "All plans": "m55e91685e997", + "Any role": "m1421f18c6968", + "Platform admin access required": "mc8ef8e3669b8", + "Back": "m76900f1bfd16", + "Audit search": "m7888e95b8274", + "Conversation transcript": "m12ed94f936df", + "User": "mb512d97e7cbf", + "Mode": "m5e23ec6a300d", + "Workspace": "m87bb59ba2f92", + "Project": "m985959785319", + "Updated": "m3a5ecca188c0", + "Session ID": "mcb9ac5c561da", + "User ID": "m7967e089a7b9", + "Project ID": "me511470b21a9", + "This session has no recorded messages.": "medd50d9670fd", + "Thinking": "ma20d12c5e9c4", + "Tool calls": "mda5122dc0f97", + "Admin action log": "m53924ef96c74", + "Every search and view performed on the audit surface, with viewer identity, timestamps, and request metadata.": "m8be6bc851681", + "Actor ID": "mecbb48b41cda", + "uuid": "m75666699b77d", + "Action": "m64cff1319d2f", + "Any": "m2b505597daa7", + "From": "m218197693424", + "To": "mf4b06ef6d3c8", + "Search": "m49c266baaaa7", + "Reset": "mdaee7606b339", + "No admin actions recorded yet.": "m167e90e23758", + "When": "mcf9c7aa24a26", + "Actor": "m449995c4fe8f", + "Target": "m978354db0c00", + "Details": "m45989de49fb7", + "IP": "mbf5505174a73", + "user:": "m0a478cd08199", + "ws:": "m046a8c1e8583", + "view": "m2bcb43cbc8f6", + "Admin": "mc1c224b03cd9", + "Prompt & conversation audit": "mc5f53e63dd72", + "History of admin actions taken on the audit surface": "m7dd571d2abd1", + "Search every AI conversation on the platform. Every search and view you perform is recorded for compliance.": "m5140d737735a", + "Audit log is not yet enabled on this platform": "m86dae2ac1261", + "Could not load audit data": "m538730c93ca5", + "Messages": "m04d7b4833927", + "Messages (7d)": "m4fe279f28f2e", + "Distinct users": "mc2fe00210b4b", + "Workspace ID": "m889d892993c3", + "Message contains": "m772edfbcc7c0", + "prompt or response substring": "m777808dfda80", + "No conversations match the current filters.": "m38de3e06f728", + "Workspace / Project": "mae593d094c83", + "Last excerpt": "m97e9c34ed7b1", + "U:": "m1b731e8d1d02", + "A:": "m6a699d31f54d", + "Platform admin required": "m7d80edc9d957", + "Back to Dashboard": "m97ba1d394fab", + "Back to Admin": "m345c74235673", + "Chat Sessions (": "m33b35626c9b1", + "Every AI conversation across the platform — for training, audit, abuse review.": "m686504a87fa2", + "Filtered to project": "mc75cb8839a7d", + "Read-only audit view.": "m26b30b0dda16", + "Message content is auto-redacted (passwords, JWTs, API keys, hex blobs, DB URLs). Every thread you open is recorded in the admin audit log with your name + timestamp.": "mbd579d1b9e08", + "Filter by project name or user email…": "m64ea47b2620b", + "All modes": "m6c73e4289d05", + "chat": "m31e06f7d89fe", + "agent": "md4f0bc5a29de", + "Last activity": "m06475633ed3e", + "Started": "mecbc89cd37a0", + "Loading…": "mba3bbbe10d8b", + "No chat sessions match your filter.": "ma86136ba5f55", + "Open": "med077f3d8125", + "Showing": "md604310a789a", + "of": "m28391d3bc64e", + "Thread": "m5373c7f8a5a6", + "(no project)": "m7e3df8eb742b", + "· mode=": "mabc45c2d4dfa", + "messages": "mf5cccfb73751", + "Loading thread…": "m0966c6f72dff", + "This session has no messages.": "m5675154535cf", + "tools": "mf9d35d43770d", + "show less": "mc7099deab135", + "show more": "m2d370b60770a", + "thinking": "m6ee16429668c", + "DNS for Published Sites": "maf80ef6e1b7b", + "Each publish either gets its own Cloudflare CNAME, or rides on a wildcard CNAME we set up for you.": "ma4a4e1e0f891", + "Saved": "mb5c120b316c2", + "Zone:": "m15257e76d8b7", + "The cloudflared OAuth token has DNS:Edit scope but not SSL/Certificates:Read — we can't see ACM packs. If you have ACM, tick the override below to bypass detection.": "mb5d0581437a1", + "ACM enabled": "m909527f31f42", + "No ACM": "m928677dc6340", + "ACM status unknown": "m5b864fc4ab0a", + "Publish domain:": "m22ec906ac415", + "Could not load Cloudflare zone diagnostics:": "m31beffd97934", + "Per-publish CNAME": "m43df7d535730", + "Default": "m21b111cbfe6e", + "Every publish calls the Cloudflare API to create one CNAME per subdomain. Lets multiple doable servers coexist under the same zone using": "maa78e0c0518a", + "hostnames covered by Universal SSL. Requires": "me3bf2573a4eb", + ", and": "m4aa9bfd2f175", + "Wildcard CNAME (auto-configured)": "me9176867f7e5", + "Skip the per-publish API call — all publishes resolve via one wildcard CNAME pointing to your tunnel. We'll create the record on your zone with the Cloudflare token from": "m57ef4e97d348", + "cloudflared tunnel login": "m7ccbaa60f66e", + "Free plan + apex:": "mb658dae9f083", + "works out of the box (Universal SSL).": "mcc76294d4e4d", + "Free plan + multi-level:": "m4aa1e5a605fe", + "needs Advanced Certificate Manager.": "m3851601b3b92", + "Paid ACM:": "mcd8a3129e318", + "pick any": "mf291848f2272", + "and tick the override below if our token can't see your ACM packs.": "md86688fc2849", + "Wildcard hostname": "m40b2d2ad3953", + "I have Advanced Certificate Manager": "m44ce242131b7", + "on this zone. Auto-detection can't read ACM status with the tunnel OAuth token, so tick this if you've already enabled ACM and want to create a multi-level wildcard.": "m80c26ba6333c", + "Configuring…": "mb66afe5b6cff", + "Re-verify wildcard": "m3c2e2a5ed0a6", + "Auto-configure wildcard": "m1bc6bb749521", + "Created": "md70b9e24bca2", + "Confirmed": "mfe00b67b6dd1", + "No wildcard CNAME currently active on this zone.": "ma57a35df4997", + "Publishes will fail until you auto-configure one above, or switch back to per-publish mode.": "m814ec0e86a15", + "Existing wildcards on": "m6b83c8641fdd", + "this zone": "mf86010479825", + "Delete": "me2d0a54968ea", + "? Publishes pointing to it stop resolving.": "m5f3c225bebaf", + "Confirm": "meebdd24a77d9", + "Cloudflare API token (optional)": "m59a554090fa8", + "No CF token configured": "m7a6291807fd2", + "ACM scope OK": "m9d7e5930b618", + "KEK mismatch.": "m05ed7296fabd", + "The stored token can't be decrypted under the current": "m3415a638725c", + "(likely a backup restore with a stale": "m5232ea6ee716", + ".env": "me9cbb0224c4a", + "). The cert.pem fallback is keeping DNS ops working, but ACM detection is degraded. Re-paste the token below, or click": "m424dce5579ac", + "Remove override": "m6d43eea1425f", + "to drop the stale row.": "m19bbb37f3390", + "Strictly optional.": "m0ff414871969", + "DNS auto-configure, wildcard create/delete, and per-publish CNAMEs all work fine with the cert.pem token from": "m400f4a7dbcab", + "alone. Adding a custom token only unlocks accurate ACM detection so the badge above can flip from": "mc37157e872ba", + "to": "m663ea1bfffe5", + "or": "m7175517a370b", + "Open Cloudflare API Tokens": "maf2af17db2e3", + "→ Create Token → Create Custom Token. Add exactly these zone permissions:": "me50f8444b261", + "Zone → DNS →": "ma22535feec3f", + "Edit": "m464c4ffd019e", + "Zone → Zone →": "m45d6695511a2", + "Read": "m9b9a8d05a7ec", + "Zone → SSL and Certificates →": "m3445cc97290d", + "Scope to your specific zone (": "ma9072dfe385f", + ") under \"Zone Resources\". Then paste the token here.": "m1aa082f6a5fb", + "Paste a Cloudflare API token…": "m5d2b8d876c7b", + "Verify & save": "m15f022806509", + "Heads up:": "medf0c1a56db5", + "A": "m559aead08264", + "CNAME can point to exactly one tunnel — running multiple doable servers on the same zone requires Cloudflare Advanced Certificate Manager so each environment can have its own multi-level wildcard (e.g.": "meb5d4f10d2dc", + "*.staging.": "m3890d1e97509", + "*.prod.": "m286dacb3bc0d", + "No setting persisted yet — using the per-publish default.": "mb68bb848e767", + "Selecting an option or auto-configuring wildcard will save it for future publishes.": "m5e363bb50eb4", + "Run": "m00d60e31a4e6", + "migration 081_platform_settings.sql": "mc865b85f4331", + "against the DB.": "me69dbe11cb9e", + "Remove email configuration? The system will fall back to environment variable settings.": "m5273ecff6b01", + "Verified": "m4f7838402f37", + "Not verified": "m151339072593", + "Send Test Email": "m65bb4278c2cc", + "Verify Connection": "m74c26c5e8d57", + "Change Provider": "m70fed393a3cc", + "Remove": "mc3812fc4acb8", + "Update Email Provider": "mf244f7a73ebd", + "Configure Email Provider": "mc5f480423459", + "SMTP": "mc7011f116d0f", + "Resend": "m1f94843777ae", + "Gmail (OAuth)": "m0845280d68c2", + "Gmail, SendGrid, Mailgun, SES, and 20+ providers": "mdd66a6eaff88", + "Modern email API with great deliverability": "mdaa443b13dd6", + "One-click Google account connection": "ma9b34e6fd3c3", + "Connect your Google account with one click. This uses OAuth so your password is never shared. Only the": "m85c6eb592a2a", + "permission is requested.": "m29148528a8fc", + "Connect Google Account": "m368e840b0cc8", + "Label": "m0e66373f45dc", + "Production SMTP": "me4d3910563ab", + "Resend Production": "m759130d7fc14", + "From Address": "m60643eae6376", + "Service": "md677190e0a99", + "SMTP Host": "m4e66fa8cee03", + "Port": "m72e9a59f5a1d", + "Username": "me3b89e9d33f8", + "user@example.com": "mb4c9a289323b", + "API Key": "m23189d55f697", + "re_••••••••": "m46178dee9cff", + "Save & Encrypt": "meecc5bafc07f", + "No email provider configured in the database": "m10ec54738634", + "Using environment variable fallback (if configured)": "mfada2a086738", + "All credentials are encrypted at rest using AES-256. The email queue retries failed sends with exponential backoff (up to 5 attempts). After exhausting retries, emails move to the dead-letter queue for manual review.": "m5f918cc7c852", + "dead letter": "mc9a6c4608630", + "Delete this email permanently?": "mf9903f858272", + "Email Queue": "m783fc0ebef47", + "Collapse": "mbe6eb1fc3b05", + "Manage": "m5a23444828db", + "Pending": "m331551b0de41", + "Processing": "mc8e3e92a62ec", + "Sent": "mc16bc82bf1f0", + "Failed": "m031a8f0f659d", + "Dead Letter": "m04fb719b1cde", + "Back to list": "m5da8f7fbc29d", + "Attempt": "mc934cc71493d", + "To:": "m2b5fc5c94f64", + "From:": "mdc45d36f35e8", + "Created:": "m22d435a37118", + "Sent:": "m45ad42321fbd", + "Next retry:": "m80c26311aad8", + "Template:": "m3c8938774eb8", + "Preview": "m324b134f57c7", + "Email preview": "m92f2897724bf", + "All emails": "m411a20914eca", + "total": "m11239872d178", + "clear filter": "me1a333b41aa3", + "Retry all failed": "m3f777aa4a1cb", + "Retry all dead": "ma3eb7f944a37", + "Purge all": "m96e54d635a8a", + "No emails": "mc7fa7d546e56", + "in queue": "m0c14d42e2264", + "attempts": "m1ac7d61d1d29", + "View details": "md1bf045bb524", + "Page": "m0a30a815d67d", + "text-embedding-3-small / large. $0.02/1M tokens, 1536–3072 dims.": "m3b440ddee6d9", + "gemini-embedding-001 via Gemini's OpenAI-compatible /v1 endpoint.": "m398f99a184e4", + "Any /v1/embeddings endpoint — Ollama, vLLM, Voyage proxy, etc.": "m3f31d32ea02c", + "Provider, base URL, model and API key are all required.": "mb502bc92ca52", + "Platform Embedding Model": "m754105abcad5", + "Set once — every workspace inherits this for chatbots, semantic search and RAG. End users of generated apps never see this UI; they just prompt the AI to build a chatbot.": "m49daa94be922", + "Not configured — calls to /__doable/ai/embed will return EMBEDDING_NOT_CONFIGURED": "m3f0534d325cf", + "Pick provider": "m4e901c79aad0", + "Base URL": "m70589413a3c9", + "API key": "m16f0ee47f993", + "Get a key": "m36d2f296e03d", + "Leave blank to keep current key (replace any to update)": "m2cedc28e7ad3", + "Paste API key": "m8358f1f0a95b", + "Embedding model": "m24e3c122d5d5", + "Validates with a probe call before persisting.": "m2ff59c750e8c", + "Update": "mc1c1009d3f37", + "Failed to load framework settings": "m8173aef43b62", + "At least one framework must remain enabled": "m6e965b82ee17", + "Framework settings saved": "m738142c05652", + "Failed to save framework settings": "m8533d75f3b23", + "Project Frameworks": "m7e4fc34d106a", + "Control which project types users can create. Disabled frameworks won't appear in the project creation dialog.": "m5d80ea82266b", + "Set as default": "md09b4dd6265a", + "Changes take effect immediately. Existing projects using a disabled framework will continue to work, but new projects cannot be created with it.": "madd484d5ccdd", + "User MFA status": "mea8b2988df0c", + "MFA is optional and user-controlled. Use the reset action only when a user has lost access to both their authenticator app and recovery codes.": "m81e16ce413fa", + "Enrolled": "m655e733ea610", + "Last used": "m830ec7f812f9", + "Recovery": "m48f6a8d5688b", + "No users have enabled MFA yet.": "m4610a52aa1b6", + "never": "m6497e4b3d7be", + "left": "m360f84035942", + "Reset MFA for": "mc55448c334fc", + "This will remove all MFA factors and recovery codes for this user, and sign them out of every active session. They will be able to sign in with just their password until they enroll again.": "m835b4199c8c2", + "Reset MFA": "mfb047bd7d215", + "Marketplace moderation": "mb9765c3871ca", + "Review listings flagged for moderator approval and respond to community reports.": "meb6573bdbe5b", + "Review queue": "m3e1654beab97", + "Reports": "mdacca3cba3f3", + "No listings awaiting review": "m85d179563e9c", + "Open listing in new tab": "mdc7143e7d6df", + "by": "ma7e2d26e8d15", + "· v": "m0bb917d86bec", + "· submitted": "meb1a0e0e6bac", + "Needs review": "m07297fa94a99", + "Skills": "m66d0f523a379", + "Rules": "m4228aeb07c41", + "Knowledge": "mdcb3e1c00e79", + "Connectors": "mc3d2e79ebdd0", + "Permissions:": "m79e3c0331286", + "Optional decision note (sent to publisher on rejection)…": "m446bbdda220c", + "Approve & publish": "ma40e2f67ddae", + "Reject": "mab604a360777", + "No open reports": "m2acf0b3e07b3", + "Take action": "m0190c9bb81aa", + "Dismiss": "m48845bff334a", + "Access Denied": "md134ca025a6c", + "Platform admin access required.": "m272f3eef01bd", + "System Administration": "ma46f4c289a70", + "Manage platform features, users, AI tools, and access controls": "m85ed75299aaf", + "All projects (drafts + published) with framework, owner, chat activity": "md7e6c3063aad", + "Projects": "m04e2a9728af7", + "Published apps + live dev servers — CPU, memory, uptime, controls": "mc86961c75b53", + "Runtime": "m109311589787", + "All AI chat sessions (redacted, audit-logged) — for training & abuse review": "m85372234e297", + "Chat": "m460b3a7da007", + "Prompt & conversation audit (enterprise)": "m331d30a9c97f", + "Audit": "mbb6aea287396", + "Marketplace moderation queue & reports": "m03e21e122ec4", + "Moderation": "m126d4415445d", + "Feature Flags": "mc60c04dc77f9", + "DNS": "m020965a2f08f", + "Signups": "m5c2b06176d6c", + "Users & AI": "m38fe011e7777", + "Integrations": "m090512d93fcc", + "Plans": "mdfe8b2f0de26", + "AI Tools": "mcc42ea8d0096", + "MFA": "md39ce05308e4", + "Thumbnails": "mf82d646665fe", + "Toggle features on/off globally. Set minimum plan or workspace role requirements.": "m696b91224a68", + "No feature flags configured.": "mdac229190454", + "Plan Limits": "m61875526f372", + "Plan Defaults": "m23ec9af2fc5e", + "Embedding Model": "m860ec100606b", + "Source": "m0e570ca6fabe", + "None": "mdc937b598926", + "Copilot Account": "m088fec4f79e8", + "Select account…": "mbfbcd87c086c", + "No Copilot accounts found. Add one in AI Settings first.": "m54cc5b27fcd0", + "Default Model": "m8b4e8774ddf6", + "— Type custom model ID —": "m89cd67acb3e2", + "Select provider…": "m7365642e8162", + "No custom providers found. Add one in AI Settings first.": "m29a012962f7b", + "Select model…": "mc439b30a5a39", + "Discovering models…": "m97c8cb747f57", + "Type model ID": "mc248b4fca911", + "Select a provider first": "mfbd4230d6570", + "No default AI model will be configured for new": "mdcd910c427ac", + "workspaces. Users will need to set up their own AI connection.": "m47707749925e", + "Failed to load plan defaults": "mc7175090497c", + "Failed to save defaults": "me3881d18c2ee", + "Failed to apply defaults to existing workspaces": "m504db17a8299", + "Loading plan defaults…": "m1e7edaca7665", + "Set the default AI model and provider for each plan tier. New workspaces will automatically inherit these settings.": "m9761afad12f1", + "No default configured": "m1631852a1dd6", + "Configure": "m6defafa2caa6", + "Apply this default to all existing workspaces on this plan": "mb3cdb2ee304a", + "Apply to Existing": "md426d64284d0", + "Copilot": "m49f5b0e488cf", + "Provider / Account": "m7d4737cf36c4", + "Applied": "m0c79a9c22284", + "defaults to": "mba02b5e676dd", + "workspaces": "m6e8d79980fba", + "workspace(s) skipped — already had AI configured. Use “overwrite” to force-apply.": "mc9916805d229", + "Overwrite existing workspace AI settings when applying to existing": "me467ab264fa4", + "How Plan Defaults Work": "m9d53ba64c960", + "When a new user signs up, their workspace inherits the default for their plan tier.": "m675b6a1fb67a", + "The Copilot account or provider is cloned into the user's workspace automatically.": "ma7c4da9b12bf", + "Users can override the default in their own AI Settings.": "m2727451375f9", + "Use “Apply to Existing” to retroactively push defaults to workspaces that don't have AI configured yet.": "m7c1a7e4ce440", + "Free": "mf411a1fb6275", + "Pro": "m957b0b874524", + "Business": "m76f68a75f01e", + "Enterprise": "m3fbe5ed156f1", + "Configure limits for each plan tier. Changes take effect immediately for all users on that plan. Set values to override defaults, or reset to use hardcoded defaults.": "ma7dc3ade6c61", + "CUSTOMIZED": "m17be9dde3193", + "Max Projects": "mb38c74ea2a19", + "Max Members": "m3bc5afa4e311", + "Max File Size": "m3c24f14134d7", + "Custom Domains": "m6170ab945256", + "Analytics": "m94c116ee118a", + "Priority Support": "med8a65c84235", + "Last updated:": "mba34a96f2969", + "(MB)": "m507095b0ba27", + "All Projects (": "m32d2b72aecde", + "Every project on the platform — drafts, published, and live runtime — with framework, owner, chat activity.": "meb2d37934688", + "Filter by name, slug, owner email, framework, workspace…": "mb91054149468", + "Clear": "m83b12c2216ef", + "Owner / Workspace": "m2eb1788f3f5a", + "Framework": "m192eb4525aab", + "Status": "m920e413c7d41", + "Listen": "m225d29f6201e", + "No projects match your filter.": "ma3724e34d284", + "View chat sessions for this project": "m46b6115e1e4d", + "This page shows runtime state for every project on the host.": "mf2d1742393d2", + "Published apps & live editor dev servers — CPU, memory, uptime, controls.": "mf65833fab74d", + "Auto-refresh on": "ma9d344473c8b", + "Auto-refresh off": "m9dc9e60adf42", + "Dev Servers": "m94de423b6747", + "Published Apps": "mcbbabb53c8fc", + "Total servers": "m82cebc347bb4", + "Alive": "m3032763b0e67", + "Ready": "m5fa7aac5375c", + "Total RAM": "m99401166672d", + "PID": "m3f302a2a7158", + "Memory": "mc3963aedaac6", + "No active dev servers.": "m416bc49a5c83", + "dead": "m28a3a5e81d1e", + "ready": "mb24d6d33736e", + "starting": "m59dbf36d9930", + "Terminate this Vite process": "m06f2446a1105", + "Source: in-memory": "m2c3494258f6c", + "servers": "m8e3dc1afbc3e", + "map in": "m2229c690c65f", + "dev-server-core.ts": "mb259d30710fa", + ". Memory is RSS from": "m742f573e6634", + ". Ports allocated from": "m0b10c8adc253", + "Total": "mc9b3c38247f7", + "Running": "mf4ccae29e1bb", + "Stopped": "m1a4f630ac1b6", + "Filter by project, owner, framework, port\\u2026": "m464361940b84", + "All states": "mf189411452ed", + "Sandbox user": "m387c1f0e1c9e", + "State": "ma3b50c476732", + "CPU": "mdb9a4c7d4c19", + "Last active": "mbcdf701c4dfb", + "No published apps yet.": "m502030bdb117", + "Runtime rows appear here when a user clicks": "m99f356256417", + "Publish": "m859390eb495b", + ". To see ALL projects (including drafts), open": "m353936be1dbe", + "No instances match your filter.": "mcbe106c6fba4", + "static": "m2053dbbf6ec7", + "View systemd journal logs (secrets auto-redacted)": "mad9c6fddb8fb", + "Egress policy + recent build-proxy activity": "mdde8c9582576", + "systemctl restart": "m3c680169fdc4", + "systemctl stop \\u2014 terminate the running process": "mc12a1b553e6e", + "Metrics source: systemd cgroups via": "m995dbe2ca647", + ". Sandbox user is the per-project Linux UID created by": "mf382acc27de3", + "setupProjectUser()": "mb40e7512f994", + "Egress for": "m7853de766b41", + "Loading egress data…": "m67a8c8843967", + "Egress allow-list (systemd": "m7c7c805550f8", + "IPAddressAllow": "m7cd8ca3fea8a", + "None configured. App can reach": "m6b6e726dce43", + "localhost": "m49960de5880e", + "only — all other outbound TCP is blocked by": "m32f43b3318b2", + "IPAddressDeny=any": "m63eab693a29d", + "Build-time proxy (Squid)": "m183b8997cefc", + "(disabled)": "mf2d421e5379b", + "No recent build-proxy activity captured.": "m9f427d2117d5", + "Time": "m33b93476cf59", + "Method": "m52a0f9b65b27", + "URL": "me7a241debad5", + "Bytes": "m4d8000301fcc", + "Recent egress denials (journal, last hour)": "m19e4421f6156", + "No deny events. (No outbound attempts blocked, or systemd's BPF firewall isn't logging at this level.)": "mdf3172baceb0", + "Systemd unit:": "m57d8bda76491", + ". Egress policy is enforced at the cgroup level by systemd's": "md2397cca5c54", + "+ per-project": "m5bbfd2fd41b4", + "IPAddressAllow=...": "m22f5e9be30f7", + "Logs for": "me2076f16ff16", + "Secrets auto-redacted (passwords, JWTs, API keys, hex blobs, DB URLs). Every view is recorded in the admin audit log.": "ma193d83320ed", + "Filter lines\\u2026": "m8dcfdc43bd51", + "Last 100": "m066fb3529387", + "Last 200": "m6204633096ca", + "Last 500": "md015488899f8", + "Last 1000": "m76bc7da847f2", + "Live": "mb64ac05f17e6", + "Off": "mca7981b46ecf", + "Copy all visible lines": "macccfcdfcffe", + "Copy": "me21f935f11d7", + "Loading logs…": "me1842662a549", + "No log lines found.": "mab209a3ee8d0", + "lines": "m5ea44c3961f1", + "fetched": "m0c7fcf412c36", + "journalctl -u": "m37ebafac1092", + "Signup approval": "m3eec7bbb66da", + "When on, new signups go to a pending queue and cannot log in until you approve them. Existing accounts are unaffected.": "m8e5609da435c", + "Require approval for new signups": "mcbb30992f47c", + "Message shown to pending signups": "mca2eb2c419d9", + "Doable is invite-only right now...": "m12342a6de5db", + "Shown on the signup screen after a new user submits, and on the login screen if they try to sign in while pending.": "m48d24bbb292a", + "Discard changes": "mf9bfa3dc7c8f", + "Saving...": "mdc85af8f2b1d", + "Save settings": "m7f3a3b142814", + "Pending approvals": "m0405f4b67edd", + "No one is waiting for approval right now.": "m94536c9b8727", + "· signed up": "mb14b800ede91", + "Approve": "m6007acbe30b2", + "Deny": "m05a2d7332eb9", + "Block": "m211d0bb8cf4f", + "Recently denied": "mfd8ed7176725", + "These users were denied. They can't log in. Approve to grant access.": "m69d5d5622939", + "Blocked email addresses": "md6cc5e773801", + "These emails can never sign up — not even via GitHub or Google. Unblock to allow signup again.": "m4c9bc4985ffa", + "No blocked emails.": "mb710c25ac7b7", + "blocked": "m6973dddd3ef9", + "Unblock": "m712da63171e0", + "Configure which tools are available in each AI mode.": "me763f2c1fa3e", + "Strategize": "m6292878baa70", + "(plan mode) typically uses read-only tools for analysis.": "mca5b9330ac54", + "Build": "mbdd254b65baa", + "mode has full file creation and editing tools. Changes take effect on new sessions within 60 seconds.": "md3d5d45f1a0f", + "Delete mode": "m0b7baf9fb836", + "No tools configured — will use hardcoded defaults": "me71867e5aabf", + "Description": "m526e0087cc3f", + "Doable Tools": "m222b29abe076", + "SDK Built-in Tools": "m2b6ebbf5c88e", + "Strategize mode with write tools enabled may cause unintended file modifications.": "m812deedf2c67", + "Save Changes": "m35322b5bb5a2", + "tools selected": "mf57e3e0261a3", + "Mode name (e.g. review, debug)": "mc39caad8b315", + "Add": "m9fd728c66c9a", + "Add New Mode": "m49e8496ae12f", + "Back to search": "m22252a139c6a", + "Trace not found": "m0489e4a2ca0d", + "Trace search": "m276010d68dda", + "Duration": "m4fc52a3c4c55", + "Spans": "mb3393bfb2a55", + "Errors": "mcb702378f315", + "Services": "m604dce445e32", + "Linked chat trace:": "m681615e94f41", + "session:": "m0bc8506e4d85", + "Flame graph": "md776d0b395c6", + "All logs": "m8229bdcc60d8", + "Span detail": "mf01563f471a8", + "Click a span in the flame graph to inspect.": "m107c08e85745", + "No correlated logs.": "m8219340f90cf", + "Trace flame graph": "md4903171322c", + "No traces match these filters.": "m426b31c2ac95", + "Root span": "m846211dee5c5", + "Trace ID": "mc4cbbc62b684", + "error": "mca00fccfb408", + "running": "mc071cf5f5ed6", + "timeout": "mf77d1bb58da8", + "ok": "m2689367b205c", + "Root span name contains": "mfdac5dd749e1", + "Attributes": "m4b0ed88f7d99", + "Events": "m8d14f6e72de8", + "Exception": "mb4fe3d529dee", + "Logs": "mea2100dc89ae", + "kind:": "m08863725c9d1", + "status:": "me92e1c5195b2", + "duration:": "ma304cd723646", + "No logs for this span": "m36fdcc2069a7", + "attributes": "mf1b4db36f908", + "Search traces across services. Click a row to open the flame graph.": "m16f4238962d7", + "Enforced": "m9a815bd80853", + "User · Copilot": "m5126956fae89", + "User · Custom": "m68dea4bdcd64", + "User override": "m3b4383786e6b", + "WS default · Copilot": "mdaa1ddf84077", + "WS default · Custom": "m6d149e5af3d3", + "Workspace default": "mda3706ee462a", + "Auto": "m0286249762f7", + "Auto-select": "m3bbfba0ec78f", + "· no override": "mef26da36dc29", + "No credits": "m868430976481", + "No source set": "m11fd3c84c2e5", + "Copilot ·": "m69c81094e14e", + "default account": "m2ccc863d9382", + "Custom ·": "m39fcda80bcbe", + "provider": "m5c4c1964340a", + "Role:": "m44dd5f163cba", + "Plan:": "mc6c28dbbbd62", + "Active Model": "m4de05f38c64b", + "AI Model & Source": "m01580cdc2633", + "Credits": "m2a6b24ad2872", + "Currently Active": "mef00c4881b86", + "Model:": "m11a931060dad", + "Auto-select (no model set)": "mb35ca060d549", + "Source:": "mc707ee4ecc24", + "Subscription:": "mea320b358837", + "Workspace enforcement is ON — this user cannot choose their own model.": "maaf36296577f", + "Resolution: Enforcement → User override → Workspace default → Auto-select": "mc8b45bcfb05e", + "Set Override Source": "m5196192141c2", + "No specific account (auto)": "mf3090488d3bd", + "(custom)": "m87e09fc5cccf", + "Auto (provider default)": "ma236626facf1", + "Select a provider to load its models.": "md1f6ee835fff", + "Reset to Defaults": "m0953e0d5167d", + "Daily": "mb36c2611dcdf", + "used": "mf83916135509", + "Monthly": "m9b11f6b707d2", + "Rollover": "m283148958c53", + "bonus credits": "mb0a1f428ffe3", + "Max": "ma1a5936d3b0f", + "Bulk Edit Users": "m175288c4eab8", + "user": "m04f8996da763", + "s": "m043a718774c5", + "Set AI Model & Source": "mf9641eb1f0d7", + "Replaces user's current override": "m987811a8b0dd", + "Select a model...": "mad184ce4ccd5", + "Add Additional Quota": "m22aabd44c092", + "Adds to each user's existing credits": "me8e43497c4f8", + "+ Daily": "m14c88bdc459b", + "+ Monthly": "m6a6260fe12df", + "+ Rollover": "me98944151c8b", + "These amounts are": "m5e3c350d16ce", + "added": "m279b8a60f444", + "to each selected user's current totals (not replaced).": "m0ff6fa1d4a25", + "Set Platform Role": "m4833e4160024", + "Replaces each user's role": "m93df67719eaa", + "You're in the selection. Deselect yourself before changing roles in bulk — you can't change your own platform role.": "mdb4ba1f73d7a", + "Set Workspace Plan": "maaddf0ef0547", + "Replaces each user's plan": "m752bc4378dc7", + "Applying to": "m7c676eb1dbf8", + "users…": "mc7bb319b4e98", + "Apply to": "maab0d28eb783", + "Search users...": "mbeb0e209e98e", + "All sources": "m08e774c5bacc", + "Copilot only": "m4a2fae93bd0c", + "Custom only": "me658e7e5ff30", + "selected": "md7cbbb688b2e", + "Bulk Edit": "m31c247d8ed4f", + "Select all": "m1fc9a387654d", + "Role / Plan": "mbea867d1de69", + "Subscription": "m4999c6c6c7ba", + "Credits (Daily)": "maf435cdb859d", + "Manage user": "m9ef43b24ae01", + "No users match your search.": "m3ccbd64ae664", + "No users found.": "mce0171e51b07", + "Enforced = admin-locked model": "md47dbbe2a22a", + "User · Copilot/Custom = personal override": "md51606728956", + "WS default = inheriting workspace setting": "m1ccbb4b01d71", + "Auto-select = no model configured anywhere": "mc606591861bf", + "Connecting your GitHub account...": "mbef9d2f4e0d1", + "GitHub Copilot connected! Switch back to the setup wizard tab — it will pick this up automatically.": "m3c57932bbc0a", + "GitHub account connected! You can close this window.": "m24b5b4f1f9d1", + "GitHub account connected! Redirecting...": "md8fd001856d3", + "Back to AI Settings": "m267d859433fb", + "Loading billing...": "m54b20dda3acc", + "Unable to load billing": "m65e4c127d235", + "Please sign in to manage your subscription and credits.": "m1d8543fe41fb", + "Back to dashboard": "mb59e0c1cc1e1", + "Billing": "m3ac8bbca9a74", + "Manage your subscription, credits, and usage.": "m6dd093cb38fa", + "Subscription updated successfully!": "m6de44edb3c0f", + "Checkout was canceled. No changes were made.": "me4873d5586db", + "Credits added successfully!": "mcada2bd2464a", + "Dismiss error": "m2db046678b9c", + "Manage Subscription": "mcbc4ef9225a0", + "Buy 100 Credits": "mb9e490645dd2", + "Unable to load plans. Please try again later.": "m360487bbf13d", + "Usage History": "mde568b51fde5", + "No usage recorded yet.": "me53e5ce92da3", + "Credit usage will appear here once you start using AI features.": "mede4cc5b110e", + "Date": "m99c40ab40592", + "Auto-detect": "m89ebfb7a88ca", + "Attach files": "me697cc1e45af", + "Strategize first, then do the work": "m44abdc1c36d4", + "Start working immediately": "m32269bae4ea3", + "Work": "m104ab9213e28", + "Stop recording": "m3d591e826d54", + "Voice input": "m8748f23993a8", + "Voice input isn't supported in this browser. Try Chrome or Edge.": "md5f6a9a87d9a", + "Pick framework explicitly, or let the server detect from your prompt": "m3ae25abdc079", + "Published": "m2ef42ec21d93", + "Draft": "mebf12ef47cf5", + "Creating": "m3b951ebd7c96", + "Error": "m54a0e8c17ebb", + "Open in editor": "mea1d0f038bbd", + "Rename": "m3064d79a295c", + "Duplicate": "m02cdaabfca80", + "Move to folder": "m91d631e150a3", + "Unstar": "m318e826a7516", + "Star": "me357d396871d", + "Delete project": "m9c0b617e79e9", + "Are you sure you want to delete “": "m935c9c7c903b", + "”? This action cannot be undone.": "m093fda19d66c", + "projects": "m2577c0f557b2", + "Are you sure you want to delete": "m3a57bb9fb3bf", + "selected project": "me75b917774a9", + "? This action cannot be undone.": "m30f98589bee4", + "project": "m244210e48437", + "Rename project": "m2a0478eef536", + "Project name": "m25498193b898", + "Choose a folder for this project.": "m5d4f07e7b76d", + "Root (no folder)": "m467e5499c616", + "No folders yet. Create one in the sidebar.": "m73f0f2fe2594", + "P": "m5c62e091b8c0", + "Update Discover listing": "m7d749dd1be58", + "Share to Discover": "m826ae2f380ce", + "U": "ma25513c7e0f6", + "Shared to Discover": "m068bd449d0fc", + "Discover": "md4a33d5b78bc", + "Recently viewed": "m8e445e8aa6d2", + "My projects": "m069d9457befe", + "Templates": "m56b564b75c7f", + "Browse all": "m723735c4aab6", + "Search projects...": "mc59dd5a3c5a2", + "All status": "m32b9b2c4de19", + "Starred": "m07a2d579c3f0", + "Grid view": "m47da4e5507b6", + "List view": "m5d8c3e1b635e", + "Home": "m3a78695388b3", + "Created by me": "mf9182f6f2dc8", + "Shared with me": "m0fd8abc26061", + "Starred Projects": "m33d7d4f209a3", + "My Projects": "m452ab89d46b7", + "Shared Projects": "m0b47e3bfdd0b", + "New project": "ma41eb2bf7245", + "Loading projects...": "med1573abda08", + "Name": "mdcd1d5223f73", + "Loading templates...": "m8b31692427de", + "No templates available.": "m805cbc51a3bd", + "This folder is empty": "m3043f9fa4d31", + "Create a new project inside": "m742b048e3f6c", + "this folder": "m9d6325c835da", + ", or move existing projects here.": "m9f7058396947", + "Create a project here": "mf4894985b57b", + "Add existing projects": "m3bda804adf31", + "No projects found": "m960acc933ef3", + "No matching projects": "m76125d30fd2e", + "No projects yet": "mf83c80652286", + "Try adjusting your filters.": "md3a0cd264f2b", + "Describe what you want to build in the chat above, or import an existing project from GitHub.": "m1ee259231d41", + "Import from GitHub": "m383efa96431b", + "Clear all filters": "mde22447d91bb", + "Loading...": "m47d2a515ef2f", + "Load more": "mac8991ef0101", + "All Templates": "m4c78a2e4f2e0", + "Starters": "m15f2172d71d3", + "Dashboards": "ma53bcafb67d9", + "Marketing": "mf5904cf7a123", + "E-commerce": "m02d9be75b85e", + "Content": "m47bd29075f8b", + "Personal": "m845f9286400f", + "Productivity": "mf42bca637cb3", + "Start from a template to build your next project": "ma1fffd50941f", + "Search templates...": "m79760c54dced", + "No templates in this category yet.": "ma28860eb8c5f", + "Failed to load projects": "m99528001baf3", + "Featured": "mc533cafab69e", + "Remixing...": "m76298e6377d7", + "Remix": "mf84ed4375595", + "What's the difference between Discover and Marketplace?": "m0225763cf88e", + "Discover vs Marketplace": "m8ebec9e72543", + "Explore community projects and remix them into your own": "m05e14791da05", + "All": "ma52ace420f21", + "No community projects yet. Be the first to publish!": "ma3498f96dc20", + "Previous": "ma57b08a480b8", + "Next": "m1ff57a29d7c9", + "Something went wrong": "mab827e3fe17d", + "An unexpected error occurred.": "m7053d12aceb5", + "Discover vs Marketplace — Doable": "m88af1e0546d8", + "Understand the difference between Discover, Marketplace, and Deploy.": "mbff0e07c6ec2", + "Help": "mb79cac926e0b", + "Doable has three places to share things with the world. Here's how they're different.": "m5fec231901d2", + "Deploy": "m4c236daafb44", + "Ships your project to a public URL.": "m594d7b838c48", + "• Sets the live URL anyone can visit": "m603a62ffbe2f", + "• Stays under your account": "ma76d071191e2", + "• Other users": "m382a6e093eb5", + "cannot": "m9a43b6dac466", + "remix or install it": "m08294dbd26cb", + "Lists your": "m76fb907d25ac", + "whole project": "me5e9d2627c3d", + "in the community feed.": "m8aeebc476b2c", + "• Other users can browse and remix": "mbe9bf84c4556", + "• Remixes copy your code into their workspace": "m860ac51ed697", + "• Free, no review needed": "m2d7246a61a35", + "List on Marketplace": "mdcde2662beff", + "Packages an": "m0e17c8169056", + "AI environment": "m24d59694d449", + "as an installable bundle.": "m3cf63ee57e32", + "• Skills + rules + knowledge + MCP connectors": "m045c1a848d53", + "• Installs into anyone's workspace": "m5aaf523bb26a", + "• Connector bundles need a quick review": "mfbcd25a5d8b6", + "Which should I use?": "m8e8eedc83b10", + "Glossary": "m4c4e436f9a45", + "A whole app or site you build in the editor — code, pages, components.": "m78977aa618ad", + "Environment": "m9e471951a1b4", + "A bundle of AI configuration that augments your editor: skills (instructions), rules (always-on context), knowledge files, and MCP connectors.": "mf6a4d1b58a05", + "Copy of someone else's project into your account. You own the copy and can change anything.": "mf4a96457c02c", + "Install": "m569ca49f4aaf", + "Add a Marketplace environment to one of your workspaces. Installs are versioned, you can update or uninstall any time.": "m851e3c8b2883", + "MCP connector": "m2f5c692e4571", + "A bridge that lets the AI use a third-party service (Slack, GitHub, your database, etc.) via the Model Context Protocol standard.": "m61a400bfad07", + "Standards we follow": "m3a2c4a012416", + "Marketplace bundles are interoperable. The same bundle installs in Doable and works in tools that follow these standards.": "m2f58ddf9c271", + "Anthropic Agent Skills": "m9f4439ee1f60", + "with frontmatter.": "mb72c8beb0a91", + "Model Context Protocol (MCP)": "m97c8607c5e1f", + "server config compatible with Claude Desktop and Cursor.": "m8be65a02b4ba", + "Cursor Rules": "m02453bfe1123", + ".mdc": "m0d879a085b16", + "rule files.": "m432ac09412ef", + "Claude Code Plugins": "m63a299e79c0f", + "manifest layout.": "mf4bf1b7070e1", + "Browse Discover": "mda587d5e486b", + "Browse Marketplace": "md319099fe005", + "List your environment": "mdd58287e4103", + "Help Center — Doable": "m91e99107670b", + "Guides and articles to help you get the most out of Doable.": "mf5f84112997e", + "Understand the difference between Discover, Marketplace, and Deploy — and when to use each.": "m1d8b9ff9d6d5", + "Help Center": "ma78cebc44214", + "Open menu": "mb40b3713b43d", + "Listing not found": "mf7439d15c4d4", + "It may have been removed or unpublished.": "m3fa15e399987", + "Back to Marketplace": "mf34634e647ca", + "Marketplace": "mc608981d8d68", + "Verified publisher": "m2c379af32973", + "Installed": "mf8b32f4e92bd", + "Install to:": "mb9b5eae4ef79", + "Installs to": "m30670d5071e3", + "No workspace available": "m8621cdb8240d", + "review": "mc97ace4c8fef", + "install": "m1e142e6277b1", + "About": "m4efca0d10c5f", + "No description provided.": "m2527a18acbad", + "What's new in v": "m3a5dae10cecd", + "Reviews": "m84cb7871b741", + "No reviews yet.": "m1e1bb23a19c4", + "What's included": "m9f05cde557b1", + "Knowledge files": "mb99cd7c6ce49", + "MCP connectors": "m0b7fa0586cbd", + "Empty environment": "m0492fbeca82c", + "Includes MCP connectors": "mf188a8ab9b65", + "This bundle adds": "ma56ef92e6a3c", + "external tool connection": "mc60abc330016", + ". You'll be asked to authorise each one separately after install.": "mc3a49eb654d1", + "Tags": "m1331275bc537", + "What is the Marketplace?": "m41490494a9b2", + "Learn the difference between Discover (whole projects) and the Marketplace (AI environments).": "m8cf76fa99dc0", + "Report this listing": "m60fb40ded4de", + "In review": "mc39059141ced", + "Unlisted": "mbc96567e77ca", + "Rejected": "maea4a04a8042", + "My listings": "mdb849f91bd40", + "New listing": "m706a22635b66", + "No listings yet": "m38975ad4e835", + "Package one of your environments and share it with the community. Listings appear in the Marketplace and can be installed in any workspace.": "md1472eec2b9d", + "Create your first listing": "m51c8f370595c", + "v": "m4c94485e0c21", + "View": "mdcc839a4015c", + "Hidden": "m7e6fefff0f0a", + "Delete listing": "m829b028565e1", + "Delete this listing?": "m9e9d0b8dc878", + "This removes it from the Marketplace immediately. Existing installs will keep working — they reference cloned environments, not the listing itself.": "m01ad2f8a4375", + "Pick environment": "mcb28c6022792", + "Choose what to package": "mfe0249338b6b", + "Listing details": "m93c044cba47e", + "Title, description, category": "m92663bbd94be", + "Preview & permissions": "ma41a9666fd92", + "What installers will see": "m07cc0dcf1fdc", + "List": "m6f202f54a7b2", + "Publish to the marketplace": "mb3694f57177e", + "You need a workspace before listing on the marketplace.": "m2c161ed3b030", + "Go to dashboard": "mf085ee865703", + "List on the Marketplace": "md23bd01fa099", + "Continue": "m31fbef162594", + "No environments to publish yet": "mb703ed71cc6c", + "Create a workspace environment first — environments bundle skills, rules, knowledge, and connectors together.": "mbce3b9cdff33", + "Open environments": "m2d3e8636f7a7", + "Pick the environment to package": "m842db8589b31", + "Only the contents of the selected environment will be published. Secrets and connector credentials are never included.": "md5a1ec4dd9ca", + "Auto-created for a single project": "m772d235622ce", + "Shared across the whole workspace": "m6622b55561f1", + "Personal to you": "m377efcb322eb", + "What installers will see in the Marketplace catalog.": "m77c326d54f45", + "Title": "m7e8cd2056da7", + "Beautiful, descriptive name": "m68c603088166", + "Slug": "md15387ecc6c5", + "lower-case-dashes-only": "mb20d2b525943", + "Used in the URL:": "m70d9513334b5", + "your-slug": "m85fe537ced97", + "Only lowercase letters, numbers, and dashes.": "mdd34d90aa090", + "Short description": "m796aecd3d1a2", + "One sentence shown on cards": "m146680f1448d", + "Long description (markdown)": "m1d34110d0dfe", + "What does this environment do? Who's it for? How is it set up?": "mc89f8e2130ab", + "react, ai, design (comma-separated, max 10)": "m3802d349c57d", + "This is roughly what installers will see. Permissions are derived automatically from your environment.": "m3f5b18d03635", + "Permissions installers will be asked to grant": "mea556ed312a5", + "The exact permissions list is computed from your environment at install time. The previewer below shows the categories — installers always see the full breakdown before clicking Install.": "m4ea753f216e9", + "Adds skills to the user's AI": "med8a3216ae21", + "Adds rules that auto-attach to matching files": "m6e4d7cd86e31", + "Adds knowledge files to the user's context": "mbdafc8eb351a", + "If your env contains MCP connectors, they may require user-supplied credentials": "md393a2db5419", + "Tip: After publishing, you can iterate quickly via Marketplace → My listings.": "m99486b443405", + "Listed on the Marketplace": "m53a432f3a896", + "Your environment is live. Anyone can find and install it.": "mbd20cb6ea223", + "Manage listings": "m95a52dbf1d63", + "View listing": "m9d24337a3472", + "Ready to list?": "m4a2405296122", + "We'll create the listing as a draft and immediately publish it. You can unpublish or edit later from Marketplace → My listings.": "m4ce6b8cf84df", + "Creating listing...": "m957d0bac698d", + "Publishing...": "m5f51143bee08", + "Draft created with ID": "me98a25f307ad", + ". You can finish publishing from": "m234fcfaef3db", + "No workspace found": "m088ef026e24d", + "Perfect for exploring and personal projects.": "m406c52c4c49c", + "3 projects": "m9df81b5e09ca", + "1 workspace member": "m0ca13fac6d64", + "5 AI credits / day": "m2595f73bafff", + "5 MB max file size": "mf954c5f63cdb", + "Custom domains": "me4351f23dd28", + "Analytics dashboard": "m6180b58ae02d", + "Priority support": "macea4b408437", + "For creators and small teams who want to ship faster.": "m07cceb218b35", + "25 projects": "m35b944672535", + "5 workspace members": "m870847bf57ee", + "50 AI credits / day + 500 / month": "mce1b0d3d449f", + "25 MB max file size": "m1616cf4be43c", + "For growing teams that need scale and advanced controls.": "md8d32463af03", + "100 projects": "m84e7d0f7e5d2", + "25 workspace members": "m575f3caebf79", + "200 AI credits / day + 3,000 / month": "m82adec1c04dd", + "100 MB max file size": "me273cccad057", + "Simple, transparent pricing": "m15df7c888dff", + "Start free. Upgrade when you need more.": "ma22d9d8a90f1", + "Most popular": "mad2ea9485094", + "Get started": "m61e8d44ad423", + "Upgrade": "m7ec0261b8e8a", + "Need more?": "mdfd7a6134114", + "Contact us": "m47aaf31b83d6", + "for Enterprise pricing.": "me6d381b51f0c", + "Project Settings": "m7189e58be0db", + "Manage your project configuration, integrations, and environments.": "m9f9e2e63f6b3", + "Running instances": "mf86b060c51f4", + "Live runtime state across every published project in this workspace · poll": "m811386e45e29", + "Select a workspace from the sidebar to see its running instances.": "md961f2529930", + "Loading instances…": "m9f0a4829ae1c", + "No running instances yet. Publish a project to see it here.": "m28b4720f32ff", + "Runtime metrics are collected on the production server (systemd + cgroup). In dev they show as \"unknown\" with empty memory/CPU values.": "mff11b41a9783", + "fail": "m51280dabfbc8", + "Add a code from your authenticator app on top of your password": "m2e60115bfe0c", + "Set up": "m4da10f1fbb17", + "New recovery codes": "m40d0c2ff1f2a", + "Disable": "mb7e3e4aa4257", + "Set up two-factor authentication": "mbeb6187632b4", + "Scan the QR code with an authenticator app like 1Password, Authy, or Google Authenticator.": "m688a0b036688", + "MFA QR code": "ma892ff9886ed", + "Or enter this code manually": "m3ea15b3e1ff9", + "I've added it — next": "m68bc30f3f6b1", + "Enter the 6-digit code from your app": "m38f61733e73f", + "Verify": "meea2745e2867", + "Save these recovery codes now.": "m25878b1ac5ff", + "Each code can be used once if you lose access to your authenticator. We won't show them again.": "m01457caf898e", + "Download": "md6eafe823591", + "Done": "m11a6767d5674", + "Disable two-factor authentication": "mc2d5063dd6db", + "Confirm your password and a current code (or recovery code) to turn off MFA.": "m2a35f694ae08", + "Current password": "m72ed2bd767ce", + "6-digit code or recovery code": "m745cbf0e10e7", + "Disable MFA": "m8adb8274a7c6", + "Regenerate recovery codes": "m49cc3d4c731f", + "Your existing recovery codes will stop working immediately.": "md2d0d09966de", + "6-digit code": "m0d1fa0dfcc9e", + "Generate new codes": "m3cdc25d9296b", + "Save these now — we won't show them again.": "md375b86349a7", + "Settings": "m74a883a037bc", + "Manage your account preferences and security.": "me5d65e29b68f", + "Active Sessions": "mb58fa4e0b18d", + "Devices where you are currently signed in": "m263f51795417", + "Current": "me0d1b68224bf", + "Profile": "md696a35bdd18", + "Your personal information": "m2a4a3391ad17", + "Display name": "m2b7f6a84de91", + "Your display name": "maf8cbab6829c", + "Contact support to change your email address.": "m4b0042d044fe", + "Save changes": "mdd0ae7a5cbcf", + "Security": "m8f6fb4eb7f42", + "Password and authentication": "m7f183b022e0c", + "Change password": "m3f9c991f63a9", + "Password updated successfully.": "m2cad078bc7dd", + "Enter current password": "m3e2b5dfbc2a1", + "Re-enter new password": "m6bf1430d8550", + "Updating...": "m0a4e0b71b7f3", + "Update password": "mfe45b4014135", + "Appearance": "m3907fa7f8072", + "Customize how Doable looks": "m8fa7b13609e0", + "Theme": "mefb52e7172b7", + "Light": "mdbcd5e7bb7a0", + "Dark": "m60acc53f13a5", + "System": "m6725e7bbcd28", + "Brand Color": "mdb3183e39ef5", + "Danger Zone": "m3c1c01b40585", + "Irreversible and destructive actions": "m25f7dd8d5424", + "Delete account": "ma2e20a335700", + "Permanently delete your account and all associated data. This cannot be undone.": "mf33e06dd2c9b", + "Delete Account": "mc031bf992e17", + "This action is permanent and cannot be undone. All of your projects, data, and settings will be permanently deleted.": "m123bce672d45", + "Type": "mbaaddf70fb5d", + "DELETE": "m65daeb378bde", + "to confirm:": "m1b2a5036345d", + "Type DELETE to confirm": "md4856f418bf3", + "Deleting...": "m685ecb984ac2", + "Delete my account": "m21d5294717e2", + "Doable defaults": "m6029d15003fe", + "Workspace-wide runtime AI defaults for apps generated in this workspace. Projects inherit these unless they pin their own values in": "mfd28ca1cbfba", + "Project Settings → Doable": "m55f6925c7920", + "Configure chat provider": "m3c7c3432af8b", + "Platform embedding model": "m0e41a94afc0c", + "Default system prompt": "m23e678a08bbe", + "(none)": "m552e423045fc", + "none set": "m385c57501bad", + "Default embedding model": "m92d12bf8f0a5", + "platform default": "m5967f99c5703", + "Prepended to every chat call for projects in this workspace that don't have their own system prompt override.": "m4a5c75c9e81f", + "Default thinking visibility": "mf8eddc053b2c", + "Always show": "m281b63ba336e", + "Hide (server-side strip)": "m8a4ef9b34729", + "You're a member of this workspace but not an admin — these defaults are read-only for you.": "mdfd2cac68175", + "Save defaults": "ma91af2a1efd1", + "Workspace AI usage": "m880e5d9d8e9a", + "Aggregate of every project's runtime AI calls in this workspace (editor / builder calls are shown separately under": "m8a5a9466c8b4", + "mode).": "m6a99fc662f7c", + "Today": "m2b065c7c9ce4", + "7d": "ma7c742643c7c", + "30d": "me3ba17e32240", + "Total tokens": "me7601ca1178a", + "Requests": "mada27592c957", + "Estimated cost": "m9ccba222f889", + "By mode": "m551e877182dd", + "Cost": "m204a5eb2cd28", + "Top projects": "mac1fe0f76734", + "Tokens": "ma039dfb9628b", + "(orphan)": "me0707a236f1e", + "No default (let users choose)": "m1890cc51ee20", + "React (Vite)": "mf64b3ff5bc6e", + "Default framework": "m49d550463542", + "Used when a creator doesn't pick a framework and the prompt doesn't clearly signal one. Defaults to React (Vite) when unset.": "m87946b3562a1", + "Read-only — admin permission required.": "m19c17957c224", + "Owner": "m4b1b8aa3608a", + "Member": "m7c968fb71f50", + "Viewer": "m678bfa6af48b", + "General": "mc910d474dcd7", + "Workspace name and description": "mf5a378c34758", + "What's this workspace for?": "mee9ff5054717", + "Your role:": "m84c7e2a050b5", + "Team Members": "me2204b3eaff6", + "member": "me31ab643c44f", + "Invite by email": "mf728553b59c5", + "colleague@company.com": "m7fbfb94aeafa", + "Generate invite link": "mb95d5f7c3973", + "Copied!": "mea61bc15688d", + "Copy link": "mdbf362d4f210", + "(you)": "md1eb47c77576", + "Remove member": "m9438e0ba8e63", + "Pending Invites": "m74d26f0e2e44", + "pending": "m62a2fed3d6e0", + "Expires": "mf6725f3af08a", + "Revoke invite": "m3e19d958e483", + "Irreversible actions": "mf9d85ba811da", + "Deleting this workspace will permanently remove all projects, files, and data. This cannot be undone.": "mf1955b781545", + "Delete workspace": "m55f033dbcb29", + "This will permanently delete": "mdaab6af4973b", + "and all its data. Type the workspace name to confirm.": "m0869e4e92657", + "Delete permanently": "m280b10c89cc4", + "Environments": "m07437cd651be", + "MCP Servers": "maab669a72882", + "Skills & Rules": "m00e6f89be431", + "Doable": "mad94fce14ac2", + "No workspace found.": "m3d65b4959a69", + "Workspace Settings": "m8e25832407ee", + "Manage your workspace, team members, environments, and integrations.": "m2e1aa9f2f180", + "Bundle skills, rules, knowledge, and MCP connectors into reusable presets. Projects inherit the workspace default environment.": "m16e44882f450", + "Connect third-party services like Slack, Notion, GitHub, and more. Workspace-level integrations are available to all projects.": "ma3ab5156a004", + "Connect Model Context Protocol servers for custom tools and capabilities. Workspace-scoped connectors are available to all projects.": "m55deb400b9f9", + "Manage reusable skills and rules that shape how the AI works. Workspace-level skills are inherited by all projects.": "m035456671e98", + "Knowledge Base": "m12bbbbf8f137", + "Context files the AI reads before every interaction. Workspace knowledge is inherited by all projects. Projects can add their own overrides.": "m82abc5221280", + "Back to file list": "m91817495a78f", + "Custom context file": "meaece9d1a4a8", + "unsaved": "m9c80e8331a86", + "Revert changes": "m0c202c1c284e", + "Save (Ctrl+S)": "m4be89ed53733", + "Delete file": "m28e18dc9db38", + "chars": "m1ce93dacbcf4", + "Loading knowledge base...": "mfd65b5367e9e", + "These files are read by the AI before every interaction in this workspace. Click a file to edit it.": "md4f8b86bd838", + "Add Knowledge File": "ma6979ff7fee1", + "New Knowledge File": "mf50957f1c8cc", + "File already exists.": "mb2af5e64cae1", + "Create": "m4759498ac2a7", + "内部测试范围 | Doable": "m6b170f2de20f", + "内部测试范围": "m2865af52a310", + "Doable供获授权的内部成员测试自然语言生成应用流程。": "md1e9cdd9f9e0", + "项目与账号数据存储于本部署;使用 AI 时,请求内容将发送至管理员配置的模型接口。请使用测试数据。": "m70795fb25c14", + "本页是内部测试说明。联系平台管理员获取访问、数据处理或支持信息。开源组件的许可证与版权声明保留于部署源码中的 LICENSE 和 NOTICE.md。": "mfd3d283506ca", + "联系管理员 | Doable": "m22d9879b3be5", + "联系管理员": "m367af5187c57", + "Cookie 说明 | Doable": "mbee3f95fbd7c", + "Cookie 说明": "m52454d98091b", + "版权与开源说明 | Doable": "m14744ba1fd1d", + "版权与开源说明": "me2e0aaabb0df", + "Back to home": "m76c5505ff2e2", + "Cookie Policy": "mee290b3ddbc8", + "Acceptable Use": "m997c65f3c315", + "DMCA": "mc2ac011216f3", + "Contact": "m2b5c3d26721a", + "Doable. All rights reserved. 内部测试平台。": "mc081a965e548", + "数据处理说明 | Doable": "m72366a549ad3", + "数据处理说明": "m8b2f1b153b79", + "内部测试使用说明 | Doable": "mb7a1c461c394", + "内部测试使用说明": "m92070588f1ac", + "Authentication Failed": "m1a1952532a59", + "This should only take a moment": "m04b7a0b6eb85", + "Preparing authentication...": "m3d2ee2c69bee", + "Signing you back in…": "m64ddd1020b45", + "Brew Haven – A Coffee Shop Worth Finding": "m54c2a2733940", + "Handcrafted coffee, cozy atmosphere, and community at the heart of every cup. Visit Brew Haven today.": "m027c61c1e5b2", + "Sustainably Sourced": "mdac866afb655", + "Community First": "m25cc22295e06", + "Crafted with Care": "m4656735e0b78", + "Brew Haven": "ma56dda826249", + "Find Us": "mfdc2b75ad30f", + "Est. 2019 · Handcrafted Coffee": "m6b8521ba68ad", + "Your perfect cup": "mfff0ae82fb8d", + "awaits you.": "m558ae13d7638", + "Slow mornings, bold espresso, and a corner that feels like yours. Brew Haven is the neighborhood coffee shop you've been looking for.": "m10fa41b20df4", + "See Our Menu": "m32ebfb7c7532", + "Our Story": "m3fb76449c076", + "A place to slow": "me54eb3b48e08", + "down and savor.": "md1bc8820eb83", + "Brew Haven started as a dream sketched on a napkin in 2019 — a neighborhood coffee shop that treated its beans, its baristas, and its guests with equal care. Today, we're proud to be a gathering place for writers, remote workers, first dates, and old friends.": "m5ffd2fdefce3", + "We partner directly with family-owned farms across Ethiopia, Colombia, and Guatemala. Every roast is dialed in weekly, so what's in your cup is always at peak flavor.": "m2b0ec859f42d", + "What We Serve": "me66580cc2323", + "Our Menu": "mb545da336b4d", + "Seasonal. Fresh. Always made to order.": "m4e18d19f9a89", + "Kind Words": "m7ef51b7808f3", + "What Guests Say": "m21e4b2f51b39", + "Come See Us": "m1033449b8c82", + "Find Your Haven": "m17509f6f7fd8", + "We're nestled right in the heart of the neighborhood. Bring your laptop, your journal, or just yourself — there's always a warm seat and a perfect cup waiting.": "ma53218c7a3a1", + "Address": "m56ef8f20955f", + "142 Maple Street, Brooklyn, NY 11201": "mf1898d578fff", + "Hours": "m21e8492938ab", + "Mon – Fri: 7am – 7pm": "ma8a0f79afc28", + "Sat – Sun: 8am – 6pm": "m6e1828ded15a", + "Phone": "m63dceb8800b2", + "hello@brewhaven.coffee": "ma7e61d026fe0", + "142 Maple Street, Brooklyn": "m74ac8a852e7a", + "Open in Maps ↗": "m43a6ffbfa175", + "Brew Haven. All rights reserved.": "mf7f51cfa2de0", + "Instagram": "mbad57ef7837c", + "Facebook": "md41f5b4977ee", + "Loading editor...": "m5510cb0c913d", + "Design": "m0072e6b93494", + "Cloud": "mb977b950c1ae", + "Files": "mabc7e9892806", + "Speed": "mc372fee9b456", + "Planning these actions:": "m55c03ce120c7", + "Failed to start project": "m15a8b431558b", + "View install logs": "mbabe6dbcbd8f", + "Copy logs": "m4504b2c82bef", + "Taking longer than usual": "m1a5787cd1c50", + "Previewing last saved version": "mabee9029bf6d", + "Preview unavailable": "mb99fa6c06150", + "Loading Live Preview...": "me1d5ea6491f6", + "Getting ready...": "m0eb1ec38c2d7", + "Starting...": "m82b93630a921", + "History": "m0e7696009337", + "Toggle sidebar": "m041aefc44394", + "Code": "m340f463033e0", + "More views": "m76c7269afa9f", + "Views": "m69c404591e99", + "Unpin from toolbar": "mc9e9cb30a945", + "Pin to toolbar": "m637e9e5bb5ff", + "Download project": "mf7e0c1af18fe", + "Duplicating...": "mf930a196376c", + "Duplicate project": "mf8725da98b5a", + "Copy project link": "m8c3970faabc3", + "Keyboard shortcuts": "me9bef0b0f3c2", + "Click to navigate to a route": "mc4c81576b2aa", + "Desktop": "m9bd88f2485ac", + "Tablet (768px)": "m80da9e2ced28", + "Mobile (375px)": "m2758ecdf72f7", + "Refresh preview": "m5b529abadacc", + "Open in new tab": "me0af5c0bc245", + "Exit fullscreen": "m37fd4e355ba3", + "Fullscreen": "mc461dbb2bab7", + "Share": "m29887a5ff984", + "Deploy to a public URL": "mff37e873810f", + "Start a conversation": "m258150cb3ee4", + "Describe what you want to build and Doable will generate the code for you.": "m2d8d9afecd24", + "Work mode — generates code": "ma270fdec86fe", + "Strategize mode — creates plans only": "m0307fd10509e", + "Show full prompt (": "me84bd14c0f46", + "k chars)": "mf613e62f9414", + "Thought process": "m260f9f6f0261", + "AI provider not connected": "mce4f8c390a73", + "Connect a GitHub Copilot account or add a custom provider key in Settings → AI.": "me1a9e2c7f9c5", + "Configure AI": "m45833b231c24", + "Show raw SDK error (for debugging)": "m897f32e09bef", + "Building...": "mc1e75128adb8", + "Hide earlier steps": "m86f666cabb18", + "Show": "m0df6f1cad36c", + "earlier": "m2a51d3547c23", + "step": "m3e64cc41cf8e", + "steps": "mb7595e2a8639", + "Good response": "m5a113737926c", + "Bad response": "m5ffca88c1555", + "Copy message": "m457efe538b25", + "More actions": "mf8d46c2570e7", + "Edit message": "m9757ccd5ef12", + "Revert to this point": "m35da197a9e9c", + "Click to download": "m82218b943cdb", + "New step": "m53ece783f833", + "Describe what this step does": "m1637236fa066", + "Back to Chat": "maec142ee7062", + "Stop Doable": "m6ca7bd811152", + "5 credits remaining": "m806670321baa", + "Add credits": "md22feb61298b", + "Ask Doable...": "mb04765eefcef", + "Attach file (images, text, code, PDF)": "m9fa4ffd4c58e", + "Design View": "m6f6d2f91972f", + "Stop generation": "md4cb298c2663", + "Stop": "mcae7d57bc067", + "Send": "mf6f4688ff23d", + "Shift + Enter for new line": "m65190883f1fe", + "Explorer": "mc39d646f1076", + "Failed to load": "m3d2301d732a7", + "Loading files...": "m60801b1a50bd", + "No files yet": "mcb922b5840ae", + "Ask the AI to create some files": "m3ca461fea183", + "Close (Ctrl+W)": "m51d3d0b1a3b5", + "No file selected": "m26bfbd5c83f9", + "Hide minimap": "m712e79239f4a", + "Show minimap": "m073549e7238a", + "Select a file from the explorer": "me9ddf97389a9", + "Click on any file to view its content": "mfde6d3caf5c9", + "Ctrl+S to save": "m97cbc435d6e8", + "Ctrl+F to search": "m71f5abb5edb0", + "Ctrl+H to replace": "m6ee99fb19bf8", + "Ctrl+W to close tab": "m5c8e7fa6580f", + "Loading file...": "m2f4e0b81ecfb", + "Code will appear here as the AI generates files": "ma3c43b2835a3", + "Start a conversation in the Chat tab to generate your project": "meae2557ee98d", + "App Preview": "m12aa55074ad4", + "Auto-fix paused — the AI didn't edit any files on the last attempt.": "m01ff8705531c", + "Open the chat to fix it manually, or click Reset Preview.": "mc2e1149badc5", + "Will retry automatically in 2 minutes, or resume now.": "m569907da4f4a", + "Resume auto-fix": "m1d45fe5006a5", + "Setting up workspace...": "m420b6920da29", + "Building from plan...": "m6f17cf6ff57b", + "Building your app...": "m41653c9c7085", + "Installing dependencies": "m2133e77f6691", + "AI is writing code": "m26e9d5c2f091", + "Share Project": "m8e16d8fd15bd", + "Share your project with others or embed it on your website.": "mb7f251195db4", + "Link sharing enabled": "m724408ba0fe1", + "Private project": "m5baec6fcbec2", + "Anyone with the link can join and collaborate": "ma4e33656caa4", + "Only invited collaborators can access": "m2dc6333ea270", + "Collaboration Link": "m9e0d56d0c3b1", + "Copy collaboration link": "m4272978f92ad", + "Copy Link": "m724e78a3254c", + "visitor": "m5f14f9e6d80f", + "visitors": "mfe9919df44cb", + "total views": "m905dd6fd364c", + "People who viewed this project": "m655e2cc98ce6", + "Unknown visitor": "m2396bf0b471b", + "visit": "mf0e68ac26df2", + "visits": "mb944075326e4", + "Collaborators": "m439c0bddcded", + "Collaborator": "m1b4064cc2957", + "Remove collaborator": "mf2c6e9b92fed", + "No collaborators yet": "mf87e73885684", + "Share the link above to invite people": "m0ddd45761e9e", + "Enable link sharing to let others join": "m865f0063ee77", + "Preview URL": "mc4269502c892", + "Not available yet": "m787406ddea2a", + "Copy URL": "mb26d1037f1c2", + "Embed Code": "m3e358110ed34", + "Preview not available yet": "mfb1eec41bf9a", + "Copy embed code": "ma6185b1bac5a", + "Close": "m7d9eb7acb13e", + "Deploy Project": "m63eac3543445", + "Push your project to a public URL.": "m258e06a65649", + "Production deploy": "m1b5e18d612ea", + "Test": "m532eaabd9574", + "Preview deploy": "m5ad97435475e", + "Deploy to": "m90f5b6aa4773", + "Building project...": "m1653b4115030", + "Deploying...": "m80113aa5faa0", + "This may take a moment. Please don't close this dialog.": "mbbfce3ca6d67", + "Preparing files": "mcfb9b21873ed", + "Building project": "m64629c4d29ff", + "Deploying to": "m8d32627e5f77", + "production": "mab8e18ef4ebe", + "preview": "m5975cf1bba43", + "Live!": "md94be7d9742f", + "Your project is now live at:": "m7a0c1d6867ef", + "Remove the live site and free the URL": "m3f3ade612f14", + "Taking down…": "m77cdc28c5085", + "Take down this site": "m8026481a3655", + "Deploy failed": "m4a1fec6bb23f", + "Something went wrong during deployment.": "mbe6c9b2e929b", + "View build log": "m796ae067cc65", + "Try to Fix": "mb703dbfc031f", + "Delete Project": "m862996056422", + "Keyboard Shortcuts": "m59cdaa26dd9d", + "An unexpected error occurred. Please try again.": "me198269c2a19", + "Reference:": "m44dc4af8bac1", + "Product": "mfb9ef894175c", + "Features": "m5697d03daef4", + "Pricing": "mdfe95783edfe", + "Changelog": "mead07c84baac", + "Resources": "me89b30aa1dc3", + "Documentation": "mc205924de0fe", + "GitHub": "mf911e414cf6b", + "Support": "mbe91940b79f4", + "Company": "mde4743c87973", + "Privacy": "m54a57c3147c4", + "Terms": "mede548996483", + "Tell AI what you want to do and Doable gets it done. From idea to deployed app in minutes.": "m74d52f5a16af", + "Twitter": "mbcd18ead5fa8", + "LinkedIn": "mdd84425b72da", + "Doable. All rights reserved.": "mc3d6834efdd6", + "Cookies": "m141395eb3556", + "Accepting invite…": "mc8d1a76ed3cd", + "You're invited to a workspace": "m590ca07bd607", + "Sign in or create an account to accept this invitation.": "mf28e0103cd50", + "Invite accepted!": "m5735019b4e98", + "Redirecting you to your dashboard…": "m3ce4ce5b4d78", + "Couldn't accept invite": "m689d821c3114", + "Page not found": "ma469ab4ca4e5", + "The page you are looking for does not exist.": "m74b78a922b99", + "Solutions": "m900fe12faa26", + "Community": "mbb501d7877eb", + "Log in": "mc189840cf7e2", + "Dream it. Do it. Done.": "mdcf218cf7b95", + "Say it. Doable does it.": "m13b022d3d051", + "What do you want Doable to do?": "m3acf05570e85", + "Attach file": "m87fbe4fb79b1", + "Screenshot": "m029320ad166c", + "Teams who do more, do it with Doable": "m3f51e8d0877b", + "How you Do it with Doable": "m463052e79d3a", + "Say what you want to do": "m5e6a3d274615", + "Describe your app, drop in screenshots, or share docs. Doable gets it.": "m9a7bfe7eb8e4", + "Watch Doable doing it": "m78241958361f", + "AI writes the code, builds the UI, and sets up the backend while you watch.": "m9f161010716d", + "Done. Ship it.": "m80c9d1291916", + "One click deploy. Custom domains, SSL, and global CDN all done for you.": "m7d20496fb539", + "Everything you need to get it done": "m09013f2de54b", + "All the tools built in so you keep doing, not configuring. Doable handles the rest.": "m08ebf324d047", + "Lightning fast": "mf518cf7b4efe", + "Secure by default": "m6bb152928b4a", + "Global CDN": "ma25c6b5b6afa", + "Full code access": "m8c0b956e14ef", + "Ready to do this? Doable is.": "m0684cdd39443", + "Thousands of makers are already doing it with Doable. Start for free. No credit card required.": "md52657699508", + "Start doing for free": "maeea1a48193b", + "Learn more": "m1445799c033a", + "Free forever for personal projects. Just do it with Doable.": "mfa23af167fb0", + "Setup": "m7013af4c42fe", + "Step": "m8e6a6cca7aae", + "Could not load plan defaults — you can configure them later in /admin/plans.": "mcd6e6bf7671e", + "No plan defaults configured. The provider you set in Step 3 should already be applied to all plans. If this list is empty, you can configure them later from": "mf33e9463fe30", + "AI model defaults per plan": "m5950cc6b345a", + "The provider+model you chose in Step 3 was applied to all plans automatically. Optionally override the model for individual plans (e.g. a cheaper model on Free, a more capable one on Enterprise). You can change these any time in": "m0d962a8ad91d", + "Plan": "mfa8ed0bdabdd", + "Default model": "m3840d9d29421", + "Welcome to your Doable": "m6786e7ae86aa", + "You are the platform owner on this install. This short setup walks you through connecting an AI provider, sign-in options, and plans & billing — so your team can sign up and start building. Every step is optional and revisitable from": "mf198e3035cb0", + "Workspace name": "m9619649d8dc1", + "Acme Corp's workspace": "me2f59cbbd2e4", + "This is the name shown to users on your install.": "m56bf215a01f2", + "Use your existing Copilot subscription (OAuth, no key)": "mbb59d7d5f7b2", + "Paste any /v1 base URL + key (Llamafile, vLLM, proxies, …)": "maf41ef1f8cc0", + "gpt-4o (OpenAI)": "m53542be919ee", + "gpt-4o-mini (OpenAI, cheaper)": "m7e85883aa362", + "o3-mini (OpenAI reasoning)": "m447070f01035", + "claude-3.7-sonnet (Anthropic)": "m7f3c09e12c73", + "claude-sonnet-4 (Anthropic, latest)": "m442058677a76", + "gemini-2.0-flash (Google)": "maacb18706135", + "Auto (route per request)": "m1caaab8de684", + "Pick or type a model — chat needs one to know which engine to call.": "m8b4adb3862ca", + "Click \"Connect with GitHub\" first — Copilot needs a connected account before saving.": "me8579660f269", + "Connect an AI provider": "mb83bc0c87ee9", + "Pick one to start — you can add more in": "ma30e891162d9", + "later.": "mb36828d08414", + "Search providers (e.g. minimax, groq, ollama)": "mee84a5fafc6f", + "Show all": "m2150d8df37e4", + "providers": "m1e19bab29bc6", + "popular shown)": "m6da70c62b13a", + "No providers match “": "mc892c6d3f9e5", + "”. Clear the search or toggle “Show all”.": "mad5c8b09c799", + "free tier": "mf2969201caf1", + "Tip: export any of 19 supported API key env vars (": "ma9977b3804b1", + ", …) before running": "m782f3b91aee9", + "and the matching provider is pre-configured here. See": "m9e8be70c89aa", + "banner for the full list.": "mf77ea2dcde80", + "Running a": "m3e6a04afff84", + "local model": "mffa838f6509a", + "? Search for": "m28aa86db16fb", + "ollama": "m76e3c7bfe641", + "lm studio": "m7df09a7717ef", + ", or": "m3d30020b1863", + "vllm": "mec8207a3dde6", + "above — no API key needed, just point at": "m910b571e2b50", + "Doable does": "m9cf6151e1e52", + "not": "m254bb97b57f1", + "bundle, ship, or proxy any third-party AI keys — every key is BYOK (bring-your-own).": "m9fe6e8f5bbda", + "Skip for now": "mb58eb52c8810", + "(replace": "m01dbdc1c993d", + "with your values)": "m0344f8c6320b", + "Base URL:": "md34c1f38253c", + "Get key": "me0beec38b884", + "This provider runs locally on your machine — no API key needed. Make sure the server is running at the URL above": "m202ee5a3741d", + "; see warnings below": "me63dffe73660", + "Your API key": "mae563693e963", + "Model ID": "m089ef2b6dbb3", + "(from provider's docs)": "m09bf1d2d1f94", + "GitHub Copilot uses OAuth — no API key is needed. Click below to authorize Doable against your existing Copilot subscription. A popup window opens; once you authorize on github.com, it closes automatically and we return here to pick the default model.": "m119ac74a9f28", + "Waiting for GitHub…": "md3f403f42255", + "Connect with GitHub": "m6f2b4e53fd6b", + "Connected as": "mb9ae1344db09", + ". Pick the default model below — you can change it any time in": "m733e8e968cd4", + "Default Copilot model": "m67969da753e5", + "Fetching the live list of models your Copilot subscription includes…": "mf006797a8658", + "Use this model as the default for every plan (Free, Pro, Business, Enterprise) and as the suggestions model. You can fine-tune per-plan and suggestions models later in": "m97c6d58174ba", + "Validating…": "mcd51f8c88998", + "Validate & Save": "mb62d92c04b27", + "text-embedding-3-small / large. Fast, widely supported, $0.02/1M tokens.": "m397e0b042fa6", + "gemini-embedding-001 / text-embedding-004 via Gemini's OpenAI-compatible API.": "m8b641190411f", + "Any /v1/embeddings endpoint — Ollama, vLLM, Voyage, Cohere via proxy, etc.": "m21b98f239b59", + "(optional — for chatbots, semantic search, RAG)": "mce4eb2f81438", + "Pick once — every workspace inherits this. Skip if you don't need RAG yet.": "m10f5e9ac0df6", + "End-users of apps built on Doable will never see this — they just ask the AI to build a chatbot. The runtime calls this embedding provider to vectorise their documents. You can change it any time from": "m5f37766b7475", + "Validates the key with a probe call before saving.": "m1e84cbbeaece", + "Google": "mce770667e5f9", + "Sign in with Google accounts": "mf5d92316d71f", + "Sign-in + Copilot AI + repo push/pull — ONE OAuth App, register the parent URL below": "m4670389c9b26", + "Supabase": "mfe7ceb7816ed", + "Lets users authorize Doable to provision Supabase projects on their behalf when the AI builds a backend-enabled app. Without this, users see a sign-in prompt mid-build.": "m526606259ea3", + "Sign-in providers": "m3c9e12e223c9", + "Let your users sign in with Google or GitHub. Register the callback URL in each provider's dashboard, then paste the credentials below.": "m6590db953aef", + "Connect": "m1a2303ede074", + "1. Register this callback URL in the": "mf5b92da3fdef", + "developer console": "mf6a4a7cf34d1", + "Copied": "m8d525e5f158b", + "2. Paste your credentials": "m293fc19e964c", + "Client ID": "m8726db013948", + "Client Secret": "mae21cf6d24b8", + "Saving…": "m23e39291d613", + "Save credentials": "mf412ebc3df40", + "Credentials saved. Value masked for security.": "m1b24fc634466", + "Sign-in providers are optional. You can configure them later in": "me2e89b8e6f9f", + "Plans & billing": "md084947c92ce", + "Pick which AI model each plan tier defaults to, then optionally wire up Stripe + signup policy. Everything here can be changed later in /admin.": "m5664b564628f", + "When ON, new signups stay pending until an admin approves them in": "ma5a084d23d5a", + ". When OFF (default), anyone with a valid email can sign up immediately.": "m0092b9666213", + "Could not save — try again or use /admin/signups": "m63225ccda962", + "Stripe (paid plans)": "mac177037c161", + "Paste your Stripe secret + webhook secret to enable Pro and Business plans.": "m7131c5070086", + "Optional — enable paid Pro/Business plans via Stripe.": "ma88096f64ef5", + "Stripe secret key": "me83d9f58b3d6", + "Your Stripe secret": "m31535e99b294", + "Webhook signing secret": "m48c7cde4072b", + "Your Stripe webhook signing secret": "m18424d99bfd7", + "Price IDs for Pro/Business can be added in": "m7738cb3ae13c", + "Save Stripe": "m2de0ae2fa094", + "Want to fine-tune what each plan (free / pro / business / enterprise) can do? Set projects-per-user, daily credits, file size limits, custom domains, and more in": "m2ba1d3dd28b6", + "— sensible defaults apply automatically until then.": "m8dc5b288dc5f", + "Finish setup": "mbc01ae77f37c", + "Cloudflare Tunnel": "m730e434e2c2a", + "We strongly recommend running Doable behind a Cloudflare Tunnel. Your server never exposes ports 80 or 443 to the public internet — all traffic enters through Cloudflare's edge, with built-in DDoS protection and TLS.": "m9778b714611a", + "Cloudflare Tunnel active": "md1dcc908d054", + "Cloudflare Tunnel not yet configured": "mb41298f6a20c", + "cloudflared binary:": "m3e0bd76b4c80", + "installed": "ma51a6c19a1ff", + "not installed": "me9363f76e114", + "tunnel config:": "m6481edfe0a91", + "missing": "mffa63583dfa6", + "cloudflared service:": "m261945c8a175", + "stopped": "m8322e87d2458", + "public hostname:": "m8892fc20f821", + "Next steps": "mdd00d3d3e9f7", + "Install cloudflared on the server:": "m8cda32203974", + "curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cf.deb && sudo dpkg -i cf.deb": "m4a706dc0d33e", + "Log in to Cloudflare and create a tunnel:": "mf08fb302bec6", + "sudo cloudflared tunnel login": "m5da4ed8525fa", + "Then create + route the tunnel:": "mffbc4b090a5e", + "sudo cloudflared tunnel create doable && sudo cloudflared tunnel route dns doable yourdomain.com": "m0e01c001f314", + "Start the cloudflared service:": "md71e794ad243", + "sudo cloudflared service install && sudo systemctl enable --now cloudflared": "m5a846462fa96", + "Open Cloudflare dashboard": "m98f87e36b355", + "Re-check status": "m81b5b9670350", + "All set — your install is reachable through Cloudflare without exposing any ports.": "me892474b34b3", + "Skip and use direct ports?": "mfd45cb7aab11", + "Without Cloudflare your server will need ports 80 and 443 open to the public. You become directly responsible for DDoS handling, TLS cert renewal, and origin IP exposure. You can add Cloudflare later in": "ma3eca7bb4939", + "Skip Cloudflare anyway": "m5b0b0536f25e", + "Skip Cloudflare": "mb1acabed067d", + "Waiting for tunnel…": "m515d1a3dc956", + "Task Tracker": "mf68057ac59cf", + "Switch to light mode": "mbfa0cab91d75", + "Switch to dark mode": "mfc43ea9804c7", + "plan": "m64879f7d6b96", + "Workspaces": "m1377264ba3b0", + "Create workspace": "m4b892277843c", + "Workspace settings": "m5ebc59145b59", + "Credits today": "m01eb22153f34", + "Unlimited": "m11dde17d6c3e", + "(limit)": "m198a27bda7be", + "All projects": "m4b87271b6b81", + "Import project": "m083fe88f924c", + "Recent": "m690dbe9dc099", + "No recent projects": "m091f4b8e2db6", + "Folders": "mc4d6bb200f4c", + "Create folder": "m82b9e1ef0b40", + "No folders yet": "m8a66376ee6fc", + "Upgrade to Pro": "macb320d7f3e3", + "Get unlimited projects and priority AI generation.": "m382c1b0128ec", + "Upgrade now": "m2c414ee58a7e", + "user@doable.dev": "m3e402e6d846c", + "AI Settings": "ma8e5e2c64f0c", + "Usage": "m8d59829c1e15", + "System Admin": "m8b2b19860686", + "Sign out": "m48f0d3d397d4", + "My Team": "mcee021f1b617", + "Folder name": "m14d34edf50ef", + "Rename folder": "m7249f19c9e4f", + "Delete folder": "m39f35f2d44d6", + "”? Projects inside this folder will be moved to the root level.": "me2c1d47c93ed", + "Official": "mc409c66f71f2", + "file": "m3b9c358f36f0", + "files": "m3d7db37d08f9", + "by Doable": "mf68bbeba04a3", + "Use template": "m351dd54e5327", + "Close preview": "m7d8ab368210c", + "No active workspace selected. Please pick a workspace and try again.": "mee3aea9a74c3", + "Remix project": "m57bbe6daa81b", + "By remixing a project, you will create a copy that you own.": "m1b8e9e6b07af", + "Purple": "m7d465fb9b931", + "Sunset": "m275dbda9dedb", + "Ocean": "mfed12611d2d8", + "Emerald": "maf1ccb31304d", + "Rose": "me10d850954a8", + "Microphone permission is blocked for this site. Open the padlock icon → Site settings → Microphone → Allow, then try again.": "m767cff7f960b", + "Log filters": "mb5c308fbe72b", + "Loading filters...": "m81493812f8f2", + "No filters configured.": "mfc86c80c7edf", + "enabled": "mfb9cf75606b4", + "Add filter": "me520df698000", + "deny-pattern": "maad7b48f94b8", + "drop-pattern": "m761252ef4dca", + "Pattern": "m4288ade73ff9", + "Replacement token": "m404879015b5e", + "Adding...": "m913a8849b60d", + "AI Rules for Your Team": "m52493dd405b2", + "Lock everyone in your workspace to a specific AI model — no one can change it": "m1698475a0e4e", + "Require everyone to use the same AI model": "m40edcb0424d1", + "When turned on, every workspace member uses the model you pick below. They won't be able to change it.": "mce07e2d406c9", + "Provider Source": "ma270c2ea38f8", + "Server Default": "m173243930c8e", + "Uses the server's built-in GitHub authentication.": "m7c5b75e762fd", + "No accounts connected yet. Go to the Connections tab to add one.": "mfb4cbadb8b70", + "No providers set up yet. Go to the Connections tab to add one.": "m9e09fe0c5e85", + "Let Members Choose Their Model": "m5f8a57b902c9", + "Show or hide the model picker in the editor for workspace members": "mc8500c181a22", + "Show model picker to workspace members": "md0965f23e9a7", + "When turned off, members won't see which model they're using. The workspace default (or enforced model) runs automatically in the background.": "mea1cef6187f4", + "Saved!": "med9b760289e6", + "Save Policy": "m06440082fecf", + "Connections": "mdc273117482b", + "Configure Model": "m278ba0d8ae8b", + "Access Control": "mc3ceee351e98", + "Access Restricted": "ma3966fe9958a", + "AI Settings has been disabled by a platform administrator.": "me3a6b88175b6", + "Your access to AI Settings has been restricted by a platform administrator.": "m5658830ef02d", + "You don't have permission to access AI Settings. Contact your administrator.": "m2687891426b5", + "Configure which AI models power your workspace.": "m57294990f283", + "Label (e.g. 'My personal account')": "mdd51804e0d20", + "Label (e.g. 'Team account')": "mdcd0e95a1c40", + "Paste your GitHub access token here": "m316ff94e7f22", + "GitHub AI Accounts": "ma87169d1ad67", + "Connect GitHub accounts that have Copilot access. Personal accounts are visible only to you.": "m4e74616e8a5a", + "My personal accounts": "m81e8901975a6", + "Only you can see these": "m10fdee9039c4", + "Sign in with GitHub to connect a personal account": "m88d4ac742ef4", + "Sign in with GitHub": "m22f6738880de", + "Add a personal account using a GitHub access token": "m0cead0b1bbfb", + "Add personal": "m6f64f2fda498", + "No personal accounts. Add one to use your own Copilot subscription privately.": "ma6229eda29c2", + "Workspace shared accounts": "mca24402563e9", + "visible to all members": "m81e613c508dc", + "Sign in with GitHub to share a workspace account": "m37d3acac0058", + "Add a workspace-shared account using a token": "m748e1e7d0514", + "Add for workspace": "m9ed034e74290", + "No workspace-shared accounts. Add one to provide a Copilot account every member can use.": "m15792a7c8fdf", + "No workspace-shared accounts available. Ask a workspace admin to share one.": "m9aaf2001e996", + "Share this provider with everyone in the workspace": "mf7004e38eb59", + "Make available to workspace": "m2ff8c705e102", + "Test connection & refresh models": "mab7d145d79e5", + "Remove provider": "m5234fbffc3e9", + "Custom AI Providers": "m35877a8c182e", + "Bring your own API keys for OpenAI, Anthropic, local models, and 50+ more. Personal providers are visible only to you.": "m6b813862d568", + "My personal providers": "m55c7becc0df9", + "No personal providers. Add your own API key for private use.": "m12149a0e62fb", + "Workspace shared providers": "m73e4a838e4c2", + "No workspace providers. Add one to share an API key with every member.": "m450b43b4e4a1", + "No workspace providers available. Ask a workspace admin to share one.": "m296b7ae87520", + "Workspace defaults": "m272a1179fcc5", + "admin-only — read-only for you": "m72961734eed0", + "Applied to new projects in this workspace. Each project can override these from the per-project Doable tab.": "m8ead970fda1c", + "Hide": "mac20a57bfde0", + "Default system prompt for new projects": "m02bbdcb834ae", + "(none — projects ship with no pinned prompt)": "mb6928362a2cc", + "Save workspace defaults": "mafef567095e2", + "Personal AI overrides": "m4c23e9e18502", + "These apply to projects where you are the workspace owner. They override the workspace defaults but lose to explicit per-project settings.": "m8eb55745fa7e", + "Thinking visibility": "mb0863c6bc9e4", + "Personal system prompt (optional)": "ma85fdf51c603", + "(none — workspace default applies)": "m9fb002ae01d2", + "Save personal overrides": "m265d57a355b8", + "Workspace usage rollup": "m6c9df66826e1", + "Pricing not configured": "m63b86b7a429f", + "Prompt": "m5c39123805ff", + "Completion": "m557fe004f344", + "No usage yet.": "m6352380a7c9f", + "No usage data.": "m03db3a45c3c1", + "Claude Sonnet 4": "m66aeb8c46b2f", + "GPT-4o": "m9b816f4a6295", + "GPT-4o Mini": "m4c43a229d244", + "GPT-4.1": "mcab28bc8feb2", + "GPT-4.1 Mini": "m7e1eb717e40b", + "GPT-4.1 Nano": "m2ea8e99cc4c2", + "o3-mini": "mdfc325305b0c", + "o4-mini": "m9056e3300ca8", + "Gemini 2.0 Flash": "ma0089ee0749b", + "Vision": "mc587c2601ccf", + "Tool calling": "m10d67f48de99", + "Last health check latency": "m7381afd23bb9", + "Locked": "ma424e33d9093", + "Copilot Models": "m4b9a22bfe3cc", + "Local": "m8c31e6e72230", + "Manage AI Settings": "ma5ac4b64684f", + "GitHub Copilot Accounts": "m5a8d0b7bf5bc", + "Connect GitHub accounts with Copilot subscriptions for AI model access.": "me04ed13e7f98", + "Connect via OAuth": "m313ebbb894ad", + "Add Token": "m8717362cf4d4", + "Label (e.g. 'Work Account')": "m3cc8c4614ff9", + "GitHub Personal Access Token": "m71e3980d749e", + "Add Account": "m3d0d3f78acca", + "No GitHub accounts connected yet.": "m19cd7039551d", + "Connect a GitHub account with a Copilot subscription to use Copilot models.": "m4a24319d30be", + "Active": "m92340695899b", + "Remove as default": "mfc20838c106a", + "Set default": "mae188faa0901", + "Test connection": "m5bcf311b19d8", + "Remove account": "mfd35618c1920", + "Both configurations are saved. Switching tabs only changes which one is active — your other tab's selection is kept.": "m371b1434a262", + "Connect GitHub Account": "m00aa6fbbbb45", + "Uses the server's built-in GitHub authentication. Connect your own account for more control.": "m4c6e2e6be505", + "No accounts connected.": "m0b0a0d2d7316", + "Connect one": "m14d8260ff981", + "Add Provider": "m6f4f0e79bd3a", + "No providers configured.": "m00d0efcd9a96", + "Add your first provider": "mea779ba543fa", + "Loading models...": "m802435241f0a", + "[vision]": "m1274d7acbe2f", + "[tools]": "m11b29cd62933", + "Type custom model ID...": "ma48f39155dbc", + "Back to model list": "mecaa1f1b910a", + "Auto (recommended)": "mb1bdf63d93c3", + "How model selection works": "m811e7c5206f3", + "Enforcement": "mbda2e3e6c900", + "(Access Control tab) — if active, everyone uses the enforced model. No exceptions.": "mf5cfe7d0fa62", + "Personal Override": "mdd85a853b978", + "— each member can pick their own model. Overrides workspace defaults for that member only.": "mfd1bdfb83444", + "Workspace Defaults": "mb7c579774bdc", + "— the fallback for anyone who hasn't set a personal override.": "md3705a239c8b", + "Higher-numbered rules are only used when the one above isn't set.": "m33f9cc7719c5", + "My Personal Override": "m80c9fa2d52f6", + "Override the workspace defaults below for yourself only — other members are not affected": "md944d0946c11", + "An enforcement policy is active (see Access Control tab). Personal overrides are locked for all members.": "m88f78ee1a74e", + "Primary Model": "mbc2701b02460", + "Suggestion Model": "m678335abff59", + "Override which model generates quick-action suggestion chips after each AI response.": "mf3f3f1ffb3df", + "Save My Override": "m03390cbe8c91", + "Workspace Defaults — applies to all members": "mc138ea416a30", + "Primary Model — All Workspace Members": "m7a5e21ee7739", + "Default model for code generation, editing, and agent tasks for everyone you've invited to this workspace": "m51332a856ef0", + "This is the main AI model used for chat, code generation, and editing. It applies to every member you've invited to this workspace — not all users on the platform. If a member has set a personal override (above), their override takes priority over this default.": "m824d0cc2933d", + "Suggestions Model — All Workspace Members": "mcd2a216a8873", + "Lighter model for suggestion chips, used by everyone you've invited to this workspace (saves cost vs primary model)": "me5f651670aa6", + "Suggestion chips are the quick-action buttons shown after each AI response. This model handles only those suggestions — a lighter, cheaper model works well here. Like the primary model, this applies to every member you've invited to this workspace, not all users on the platform.": "m84717f285efb", + "Save Configuration": "mb227a038322a", + "Set the workspace-level default model and provider for new sessions.": "mfe7f3371f597", + "Default (auto)": "md933cadf6bcc", + "GitHub Copilot Account": "m0bce36498592", + "None (use Copilot)": "m62a75a117242", + "Save Defaults": "m12e24a38709a", + "No data": "m3b41ba9c7cb8", + "requests": "mec72420df5df", + "tokens": "mc51e455b41df", + "No usage data yet": "mbe7d2f314aa6", + "Start using AI features to see your usage here.": "m245625010045", + "Today's Tokens": "m8ff37f00b925", + "This Month's Cost": "me367b5bddcb7", + "Monthly Requests": "m7740276a07c6", + "Avg Response": "m2263e21eea02", + "Credits Used": "mc64fe09035ae", + "Credit Usage": "m140e92e21244", + "This Month": "m643677360223", + "By Project": "m601068f46cf6", + "By Model": "mafed5886d257", + "By Mode": "m9bf1562b3de9", + "Overview": "md4b1ea5708dd", + "Copilot Subscriptions": "mc2ec47508acd", + "Custom Providers": "ma0ff02ba4ff8", + "Models": "md17d2d78d76e", + "No platform-wide usage data yet": "mdc80f077b5cd", + "Platform-wide view — showing usage across all workspaces and users.": "m79667786321b", + "Total Tokens": "mcd41bf0d3e9a", + "Total Cost": "mdfa5cc738da2", + "Active Users": "m5639b9f1265e", + "All Users Ranked by Tokens": "m41d11f62a9e1", + "No users with usage data.": "m308eddf16a19", + "One row per GitHub Copilot subscription. Expand to see which users are assigned and which models each user called.": "m897d0b58d207", + "No Copilot accounts configured.": "meb12564b0386", + "Custom Providers (BYOK)": "m797df3bce3a6", + "Custom providers like OpenAI, Anthropic, Azure. Expand to see users and per-user model usage.": "m3fdb4c30e9cf", + "No custom providers configured.": "md4dc49276a77", + "Model Usage Breakdown": "m5e6b09a1d017", + "No model usage data.": "mb94242e1a9d2", + "reqs": "maed7a1237429", + "Usage breakdown —": "md2104f7ad311", + "Owned by": "m0eba3d4ee43f", + "No owner record": "m8c1603967eb0", + "no workspaces": "me1d4e49fac0e", + "added by": "m5a4f4a60e7f2", + "on": "mb8d31e852725", + "Risk: rate-limiting, abuse-detection flags, or subscription suspension.": "ma6423636974e", + "GitHub's terms restrict Copilot Individual licenses to a single person — licenses are tied to one GitHub account and are not shareable. Sharing can cause GitHub to throttle or revoke Copilot access for that account.": "m2d84b1ff3652", + "What to do:": "mefc75a421422", + "use one Copilot subscription per user, or move everyone to a Copilot Business / Enterprise plan with per-seat assignments. Consider adding each user's own GitHub Copilot account to Doable instead of reusing one.": "ma45dd9f0586a", + "Users on this": "m4fc92a5a044b", + "subscription": "ma8fa7fd60893", + "model": "m9372c470eead", + "Used by": "m681bf81aba87", + "Healthy": "m7f1e323b6272", + "Degraded": "ma8494c12f224", + "Down": "mb86d11af7918", + "OC": "m3a386d2bb69a", + "Validate connection": "m8ee4a41352fe", + "Test the connection to": "m30840caab959", + "to verify your configuration.": "m4ef6bbb83197", + "Test Connection": "mc02977b07ec9", + "Testing connection...": "m3d0032b7b274", + "Connection successful": "m856dd8c8677b", + "Latency:": "m7839136b0629", + "discovered": "m0c56a4742a5d", + "Connection failed": "m596c52f1eb65", + "Unknown error": "m27c2ccd962c2", + "Test Again": "m6a6222577c22", + "No models available. The provider will be saved without model selections.": "m9dba8266214f", + "models selected": "mc73dec76ac2a", + "Select All": "md1ec69e64b96", + "Deselect All": "m5cd261bcc680", + "Gateway": "m41ed52921661", + "Search providers...": "m7a1de35a8e55", + "Custom OpenAI-compatible URL": "m277b696272a8", + "Paste any /v1 base URL + key — vLLM, LM Studio, LiteLLM, proxies, …": "m97eb364e9b60", + "No providers match your search.": "m6f07c7004956", + "My Provider": "m8d6563bb5963", + "Azure Resource Name": "m242f0189b5f6", + "my-resource": "m1a6d8517d24e", + "URL:": "m734fd77b3610", + "Default port:": "m1b8a163d4269", + ". Make sure the server is running.": "m91d7321fb450", + "API Version": "m960a4c077af3", + "2024-02-15-preview": "m365c8d2794f1", + "Enter API key": "m100903efdd81", + "Get API Key": "m02d7af705ed7", + "No API key required. This provider runs locally on your machine.": "m267fe5203a04", + "Paste any /v1 base URL + key (vLLM, LM Studio, LiteLLM, proxies, …)": "md38cf7963f59", + "Add as:": "m2e7ec7c1f35a", + "Visible only to you": "m8abdb6e5e6d0", + "Pick at the start of the wizard": "m4b09fb4ff780", + "Shared with all workspace members": "m6471564ca226", + "locked for this run": "ma70838995179", + "Adding as personal — visible only to you.": "m5f78463b1356", + "Select Models": "m05c39c4c5b13", + "Save Provider": "m35ba3f52321d", + "Daily Usage": "ma3a4cc0143e0", + "No usage data for this period": "meaad100ab411", + "Cached": "ma251c18205f1", + "Token Breakdown": "mc26ddab833c1", + "No token data": "m0f1ce9b3ff09", + "Hourly Activity": "mf9ef8f0b95bd", + "My Usage": "m2498446ac8c1", + "Workspace Usage": "m59bb73deeeaa", + "Platform": "mc78ffe195710", + "Track your AI usage, token consumption, and costs.": "mbed75b0c1b2f", + "Using workspace defaults": "m3611335b3ccf", + "This overrides the workspace defaults for this user only.": "m47079ed2516e", + "Both configurations are kept. The selected tab is what this user will use.": "m2736b56903dd", + "Assign AI settings to individual workspace members. You can configure each user with a specific copilot account or custom provider, or use": "m4969880d8a37", + "\"Copy My Settings\"": "m1c208a8418be", + "to give selected users the same configuration you use. Users without a custom allocation will use the workspace defaults.": "m25e2b4ef6040", + "An enforcement policy is active. These per-user allocations will only take effect when enforcement is turned off (see Access Control tab).": "m260c635dcf53", + "Copy My Settings to Selected": "m8350bb048b6c", + "Clear selection": "mcea4d2e010b8", + "Role": "m14736a2eb9f4", + "AI Configuration": "m2ec14428b5e2", + "Actions": "mff8059dc6752", + "Edit AI settings for this user": "ma6ff9b8bd5ea", + "Reset to workspace defaults": "m5db73069088d", + "No workspace members found.": "madb960c9b9a6", + "No workspace usage data yet": "m6443cc3d0272", + "Total Requests": "m37e751d178cb", + "Top Token Consumers": "md699c569f9d4", + "No usage data yet.": "mf6e82c3f136a", + "Member Usage by Model": "m872f6fd896c2", + "No member usage data.": "m14372d93e069", + "Copilot Account Usage": "m61e1ac1d02d4", + "Provider Distribution": "m7c9a8dfd7839", + "No provider usage data.": "m954730bd83e4", + "Prompt:": "m35261535449d", + "Output:": "m457f4957af84", + "Thinking:": "m3c59f26d9abb", + "Models used": "m8af31cd69803", + "total cost": "m15b876237e84", + "models": "m8edcc26c0f6c", + "No credit information available. Subscribe to a plan to get started.": "m751731b81544", + "Daily credits reset:": "md404dbadbc77", + "Unlimited credits": "mf24795f575e0", + "credits": "mbe379a30f1aa", + "Yearly": "m6e69b59ed34d", + "Most Popular": "m9e1006a43da5", + "Billed $": "mfe3c2c8a9abb", + "Free forever": "m56f9c1ca9d9a", + "Current Plan": "m5d85632008c5", + "Free Forever": "ma78948998b85", + "Checkout URL not available. Please try again.": "mf1d05348723b", + "Network error. Please try again.": "m9ff8cfaf7d94", + "Portal URL not available. Please try again.": "medf8ec0247bd", + "Top-up URL not available. Please try again.": "m066030248f7d", + "Someone": "m864c855e3d64", + "is chatting with AI...": "mde1c270a252c", + "Abort": "m7a3a94a8ca22", + "is typing to AI": "mc64a468586ba", + "AI Message Queue": "mf9cfdd08b6e9", + "Your message is #": "me6c70e380837", + "Team Chat": "m8801e11457f6", + "online": "mf6fc84c9f21c", + "is typing": "m15bcfd103b10", + "Open team chat": "m664c54e22aad", + "Viewing preview": "m31fbe7ddde26", + "In editor": "m4094848f0988", + "No messages yet": "mf42e0f66017d", + "Start a conversation with your team": "m9194a89a428a", + "is": "mfa51fd49abf6", + "are": "mba78973ddcf9", + "typing...": "m6860a5531303", + "Message your team...": "m2b9d1b8090b8", + "is editing this element": "mc01ee3929f11", + "Add projects to": "m31e8fa9e4bf8", + "Select projects to move into this folder. You can move them back out at any time from each project's menu.": "m62b78c2b59b4", + "Loading projects…": "m6970a1ced73d", + "No other projects to add. Create one instead.": "m5181f53d5ac4", + "Adding…": "mc6de6f45c827", + "Client-side SPA": "m592438d2f7e5", + "Full-stack React": "m6c54b4820100", + "Project name is required": "m15007f45f5c4", + "Slug must be at least 3 characters": "mbe6da843fc7e", + "Create a new project": "m23fc9a29fd37", + "Start from scratch, describe what you want, or pick a template.": "m7b33683eca2b", + "Blank": "m2c3d371cbfd3", + "From prompt": "m7d4d9a991b60", + "Template": "m0575f29df888", + "My Awesome Project": "med371e413e11", + "my-awesome-project": "m565a9f0e1060", + "(optional)": "m0059798b7f70", + "A brief description...": "m8d1023e94c37", + "What do you want to build?": "med3198efc923", + "Describe your application in detail...": "m907bf8ea9357", + "Choose a template": "m329a8ef36e36", + "Loading templates…": "m3800ee7191b1", + "Create project": "mfa67e4d0dae5", + "elapsed": "mb712cf8eee5e", + "This may take a moment for large repositories": "mc48d5bcd1d2f", + "Failed to load repositories": "m59224914200e", + "Please select a repository": "m891e13c74feb", + "Import an existing repository to continue working on it in Doable.": "m2bfff12a9904", + "Connect your GitHub account": "m15c7b7d5a4a5", + "Authorize Doable to access your repositories.": "m09ff61a08ee2", + "Disconnect this GitHub account and connect a different one": "m1e64930a3a1a", + "Disconnecting…": "mcb2b6a572a85", + "Switch account": "mfedce010cffc", + "Search repositories...": "m303a84e178ea", + "Loading repositories...": "m48db4a3d7dc5", + "No repositories match your search": "m48f8556088e8", + "No repositories found": "m94a1181cd13e", + "Private": "mc63eb6720c6e", + "Public": "m591935b15b1c", + "Import": "m2cff9baabf56", + "Toggle star": "mf2de45302208", + "No starred projects": "m2c1d2c6677db", + "No folders": "m637d919d4fb1", + "Start a Project": "md729947f3c97", + "Choose a template or start from scratch.": "m6f1a5cfbc6fd", + "Creating...": "mdef70944c9bb", + "Use Template": "m6a0418f673c8", + "Code & version control": "mbefbc5e8e1c4", + "Team messaging": "m107eab2a042f", + "Email & communication": "m1a8e1a99c191", + "File storage": "m879ebfba113e", + "Notes & wikis": "m4110a45c745c", + "Issue tracking": "m4314193ddb26", + "Design files": "m89cc44521ce7", + "Project management": "m329b3c4622ce", + "Set up your workspace": "m195cbdbccce0", + "Every workspace needs an environment — it defines what your AI assistant knows and can do.": "mb412190cfd38", + "Icon": "ma35abcd6dac9", + "My Environment": "ma0d05f8dd473", + "Color": "m6b73191a0a4b", + "Skip setup": "m59e693cdbc2c", + "Create & Continue": "mdb3472beb3c9", + "Add knowledge": "m0ff84c22d1b0", + "Tell your AI what it should know about your projects. You can always add more later.": "m3b3485c34632", + "These instructions guide your AI assistant across all projects in this workspace.": "m0242da1500b9", + "Skip": "m28d03596d24e", + "Save & Continue": "m684b45158391", + "Connect tools": "m3dbaf78b6b8a", + "Connect external tools to supercharge your workflow. You can set these up anytime from Settings.": "m781b23fb1692", + "Integrations can be connected from workspace settings at any time.": "m70afa66df1c8", + "You're all set!": "mf27331bdd8a0", + "is ready to go. Start creating projects and let AI help you build.": "m80d8ebc8fa6c", + "Go to workspace": "mb6041d9436bb", + "Select workspace": "md5cd65235324", + "Start from environment": "me549fa0ae7a3", + "Loading environments...": "mc0bed36b3120", + "No environments available. Create one from the editor.": "m832d1412f3d0", + "None — start fresh": "mb06eaa3d0745", + "Remove this project from Discover? Existing remixes are unaffected.": "m39904ffb0bec", + "Lists your project in the community feed. Other users can browse it and remix it into their own workspace.": "m872f87b9007d", + "A clear, searchable title": "m58977daa09e5", + "What does this project do? Who's it for?": "mdc56cf81b49b", + "Category (optional)": "m44fbb35ee723", + "Or type one...": "mbb2347c7cdf1", + "dashboard, marketing, ecommerce...": "m472690e4d34f", + "Featured (admin)": "m64338bbdf415", + "Surfaces this project at the top of Discover.": "m589eb982f160", + "Unshare": "m43b968323075", + "Sharing...": "md35ab3ec829a", + "Live build": "m81714949f5bf", + "No errors yet.": "m50d3a1303616", + "x": "m2d711642b726", + "resolved": "mdc676b428599", + "Logs (": "meb00967e8d99", + "collapse": "m93bc5d02dc2a", + "expand": "md78de925a878", + "No log output yet.": "mf164850854d0", + "Setting up files": "m8537fdb6a825", + "Installing packages": "m5b1ba0587995", + "Starting dev server": "m3d113ab13bc5", + "Compiling code": "mdaada33465ce", + "Resolving routes": "m55b0de18996c", + "Bundling assets": "m6112b244a90e", + "Upload files from your device": "m7351d83eae60", + "Attach project files": "m0dfcc29c9d86", + "Stop generating": "mf6a74a2716d9", + "Send message": "m93a26b1eaff9", + "Search project files...": "mc9be68719e1d", + "No files found": "m949d59b7ee8d", + "Copy code": "m49a0053f3b0d", + "Preparing workspace…": "m455db8f88813", + "Thinking…": "ma02f1cea3c1d", + "w": "m50e721e49c01", + "Changes undone": "m12e653369e8c", + "Undoing...": "m8bae6a75b72c", + "Undo changes": "mba06242948bf", + "Cancel task": "ma1d26b85bf20", + "Toggle activity feed": "m3d200cad4544", + "Loading older messages…": "m913a378e70f6", + "Load older messages": "mf17671d83db0", + "I just connected — continue": "mb372cfaaf9ec", + "Build a SaaS landing page": "m22a597e126e9", + "Create a kanban task board": "md55dabb30f0e", + "Make a recipe sharing app": "mf9a6a1d642f6", + "Fix the login bug": "m257cb1465b19", + "Add dark mode support": "mfc4ec189139e", + "Explain this codebase": "m3820cbb15bba", + "Start building with AI": "m6bdb9bf5e7a8", + "Describe what you want to build and the AI will generate the code, files, and preview for you.": "m8796f7c34878", + "Ready — you can retry now": "mdcba690a149c", + "Auto-retrying in": "m0fd09defcac8", + "Retry now": "m5148c3e20576", + "Connection timed out": "m2e0b4a7d6c73", + "Rate limit reached": "m06946279b9c4", + "Authentication failed": "m93821eb7ce8c", + "Build failed": "m5bbaec596a83", + "Network error": "m2a33d984de88", + "AI model unavailable": "m0ce1c98951b1", + "MCP UI resource has no HTML payload.": "m28c1cf45c572", + "(AI will decide)": "mc370f97f193f", + "Or type your own...": "m86e0163433b6", + "Type your answer...": "m9ffeb4317918", + "Skip — let AI decide": "m96fa9ca885cc", + "Answers submitted": "m6908408b5441", + "Before we start…": "mea08e5983f81", + "Skip all": "m5fc4280582ee", + "Skip this question": "m72d18ad29fe5", + "AI decides": "m8f66990f74c5", + "Or type a custom answer…": "mc13839cedce5", + "Type your answer…": "m8666026a31fa", + "Simple": "m3fee95da5ab6", + "Moderate": "m5c42afc7a230", + "Complex": "mcd75063b613d", + "Add a step": "me45a4474b464", + "Start Building": "m102849138c54", + "Refine": "m1e7f34ee8f77", + "Building": "m87c5912f2cef", + "Pause": "m858e4ba7a29f", + "Skip this step": "m9af278eb4ac2", + "details": "m41ffd8b76afc", + "Files:": "me1a1abcfc47a", + "Remove step": "md4c76f463480", + "Completion:": "m819c15f77c30", + "unknown": "mb23a6a8439c0", + "Tool calls:": "mebe7c49b473c", + "Provider: local (no cost)": "ma6a37fc0b4a0", + "Token counts are estimated (provider did not report usage)": "m5ccdcad4f2b9", + "Network error — please try again.": "m2f3f0204c9f3", + "Read-only mode.": "m93abcb2b4187", + "Upgrade to edit": "m60dbd666da3f", + "Select a file to view its code": "m1e6652706391", + "Use the file explorer or chat with AI to generate files": "m8adc599d8546", + "Merge Conflicts": "m9685428d79d9", + "There are conflicts between your local changes and": "m625d8793292d", + "the remote repository": "mcd0d99892495", + ". Choose how to resolve them.": "ma441beefe3cf", + "Conflicted files (": "mb0c6c3afc17f", + "Keep my changes": "mfbba5c3b9950", + "Discard remote changes and keep your local version": "mc585647746dd", + "Use remote changes": "ma01851633d89", + "Discard your local changes and use the GitHub version": "m99d422032993", + "Cancel merge": "mcfca91950882", + "Resolving conflicts...": "m5b1014ae15ea", + "Expand sidebar": "m37a5d6485e10", + "Connect to GitHub": "m23db6247bb3d", + "Push this project to a GitHub repository.": "m9b46af6166cc", + "Authorize Doable to access your repositories so you can push and pull code.": "maf7620d9f184", + "Customize name & settings": "m5fa0c70119e4", + "Repository Name": "m8726643dc521", + "A brief description": "md18fa4795d7e", + "Make repository public": "mb9b01a108d34", + "Create & Connect": "m363fadad28c7", + "Importing...": "mb7a3cd401b23", + "Import Repository": "mb60ed2e431d8", + "Restore Version": "m68928d6dcc94", + "Roll back to a previous state": "m1b5b909b9f38", + "at": "mb1d6b91b67c2", + "Non-destructive restore": "m9d91673c9ae4", + "A new version will be created from v": "m221720161bb1", + ". Your current work and all previous versions will remain accessible.": "m1989a6d77ea8", + "Restoring...": "mfa31c224c001", + "Restore to v": "md12014c8ba79", + "Metrics unavailable:": "m8ea29726a819", + "Loading runtime metrics…": "m1829677248c3", + "poll": "m707165e9984b", + "modified": "mb80012851cf0", + "deleted": "m1185f37d33b0", + "Previous file": "m1db0d01fa6e5", + "Next file": "m96a7485b66f1", + "Unified view": "mfe86c67a9260", + "Unified": "mad6a950b4620", + "Side by side view": "m493481bac50f", + "Split": "m32afaa784333", + "Loading diff...": "me6c6415f27e4", + "No diff data available": "mdb183e7f0849", + "No changes between these versions": "mc0c92fe4b0ba", + "Changed Files (": "m98f257430806", + "Select a file to view changes": "mbcd433417df1", + "Added": "m6b02e0d363a4", + "Deleted": "mb48ff39c2e0f", + "Modified": "me8ce5dcaf408", + "Before (": "m77752c14a10d", + "After (": "md3986704d922", + "(unsaved)": "m051ea272009f", + "Delete / Reset": "m6a44a6c83d3e", + "Start writing...": "m6bb4d95c616d", + "Core": "m70ea1983c983", + "Session": "m6959b4159575", + "Architecture": "mcd74053c5481", + "Agents": "m279b44d2ab4b", + "Custom": "m494ca78f7374", + "New file": "m44dedd0f97fe", + "% of budget": "m63a3712feb5e", + "Empty — click to edit": "m51abd534e168", + "running…": "m14aae1602506", + "changed": "md67e2e944994", + "command": "m5d347fd948b6", + "operation": "m9bf5a24e4aa7", + "Live Activity": "mb72f1b605b36", + "Close activity feed": "m0dca88f7eda1", + "Waiting for AI to start working…": "m6a5e118255c9", + "Activity will appear here when the AI is working.": "m4329f638ead4", + "Traffic Overview": "me22ce64b63f8", + "No traffic data available yet.": "m20b04a05df9d", + "Visitors": "m68f7d7fbb52d", + "Page Views": "m337a271983f1", + "views": "m74883614c4c7", + "Built-in analytics": "mad0526d8e5fd", + "live": "m247610f4dedd", + "Close analytics": "mad4899df2d12", + "Enable analytics for this project": "m3445e2d5305e", + "Track visitors, page views, and engagement — privacy-friendly, no cookie banner needed.": "m2da367cb7562", + "Analytics is disabled": "m984af0dbfa87", + "Enable analytics to track visitor counts, page views, session duration, traffic sources, device breakdown, and more. All data is collected in a privacy-friendly way — no cookies or consent banners required.": "mc9289da74d6c", + "Failed to load analytics": "m0e6e1684b7c3", + "No data yet": "me2e18a767a2b", + "Analytics will appear once your published site receives visitors. Make sure your project is published and accessible.": "m8ee1be0e8129", + "Total Visitors": "m7549533568ca", + "Avg. Session": "mf15b55389725", + "Bounce Rate": "m89cf5817dbd4", + "Browser Distribution": "mbff828f89976", + "Operating System": "mffacb99d0209", + "Traffic Sources": "ma02077a984ce", + "No referrer data available yet.": "meb742ebd27d8", + "Device Breakdown": "m7721e29d6e90", + "No device data available yet.": "m5bb8965c8903", + "No data available yet.": "mc8235b5120b4", + "Real-time": "m278b8c933942", + "active visitor": "m2b3ff58fb8af", + "right now": "m118443b1d9ca", + "Current pages:": "m75fe1f295a02", + "Top Pages": "mc784754ddde6", + "No page data available yet.": "ma861c3307af4", + "Unique Visitors": "mdfffe52cc101", + "Avg. Time": "m5ee9c656643f", + "Connect to Supabase": "mb40edf4cb8e7", + "Enter your Supabase project credentials to enable backend services.": "m4c26a7b1fa53", + "Supabase Project URL": "m69adfd51438c", + "Anon / Public Key": "maa31989db88a", + "eyJhbGciOiJIUzI1NiIs...": "m532b9fc88b66", + "Service Role Key": "m8db5971dc587", + "Secret": "m7e32a729b122", + "Connection successful!": "m04a6bbf1d545", + "Connection failed. Check your credentials.": "mcdfc82dc9257", + "Save & Connect": "ma2f29836cda5", + "Connected to Supabase": "m389ab0c86a00", + "Not connected": "m0303e1824670", + "Disconnect": "macfc5be785a9", + "Connect Supabase": "m32520e2069af", + "Database": "mfa7fe67124e9", + "Authentication": "m66880d2d8216", + "Storage": "ma69c4dece144", + "Edge Functions": "m127c16f74a24", + "Powered by Supabase": "mcd0c018cfa88", + "Connect to Supabase to view your database tables.": "m97757652c0e5", + "Tables": "me3fe2a3fe52c", + "tables": "md98a034f5cb8", + "rows": "mbc51e9e65d79", + "Column": "m3fdc9a587693", + "Null": "mfa1d2db62d4d", + "Primary Key": "m92022c2f45b6", + "PK": "mfcab7fcc2b4c", + "YES": "mf91711645937", + "NO": "m23794d91c53a", + "SQL Query": "m9a4f1370f2b7", + "SELECT * FROM users LIMIT 10;": "m1a0d7c23a18e", + "Connect to Supabase to manage authentication.": "m650da1678ad7", + "Total Users": "m0ca3aa44a8c1", + "G": "m333e0a1e2781", + "GH": "ma7770c6daaa4", + "Enable": "m5342e09f2729", + "Recent Signups": "mc175fbea7096", + "Connect to Supabase to manage file storage.": "m1eb20b09825a", + "Storage Usage": "m2f89b69f7a4c", + "PUBLIC": "md9262e7fb868", + "files -": "m3abde3818904", + "Drop files here or click to upload": "m7bb6fd2091ef", + "Connect to Supabase to manage edge functions.": "mf5fea30a34e1", + "Inactive": "mac7c949f1211", + "- Last invoked": "me4640667fae5", + "Create New Function": "mb608eeb53fcc", + "Read only": "m8ac767353080", + "Copy file content": "m14d6d2da837b", + "Download file": "m9de4149fb971", + "Close code panel": "m3dc96e8106e4", + "Search code": "mc3386867cbb1", + "Browse the file tree on the left to open files": "m068be1bc6ebc", + "Select parent": "ma76f7d471f87", + "Select an element to edit it": "m77c87ed7c0af", + "Hold": "m8e685d5409b3", + "Ctrl": "me2ee2909fe27", + "to select multiple elements": "m633e1dd1d4d6", + "Start selecting": "m1ce187c61e47", + "Click an element in the preview...": "m608252e9ddb1", + "Unsaved changes": "ma710c2b90913", + "Discard": "meb1a70e39274", + "Send changes to AI for smarter code updates": "m1f7d6ab50546", + "AI Save": "md8387fae128c", + "New File": "md23b5dc62153", + "New Folder": "mc75ba8074400", + "Search files...": "m04470fc07c26", + "No files match your search": "m7226287c91cd", + "No files yet. Start chatting to generate code.": "ma3429cba554f", + "Copy Path": "m0e0269180969", + "Create New File": "m3cdcc3a85a71", + "File path (e.g. src/components/Button.tsx)": "m983dbe585e18", + "Create New Folder": "mb6b7279516a1", + "Folder path (e.g. src/components)": "m7a2ed3474120", + "Delete File": "me1e5fe2043bd", + "Are you sure you want to delete:": "m7829a4b6e0b3", + "Version History": "m2eba52c01705", + "Security Scanner": "med161bc0a0be", + "Scan your project for dependency vulnerabilities, hardcoded secrets, code quality issues, and HTTPS configuration.": "m8777cc91b15b", + "Run Security Scan": "m2bb57667526c", + "Your project security score": "mb764be909067", + "Fix": "m21f1595b614f", + "Move to .env": "m87477e2696e7", + "CRITICAL": "m4457f2d1aa4f", + "HIGH": "mb43e72eed048", + "MEDIUM": "m7c48dd672a68", + "LOW": "m5fbdda1b8c72", + "Scanning dependencies...": "mbca2caf53068", + "Checking for secrets...": "m41d7f825db92", + "Analyzing code quality...": "m52cc629e49de", + "Verifying HTTPS config...": "mb0d4eed2228f", + "Scan complete": "mbd35a52d0ac8", + "Dependencies": "m2e41b118eb20", + "Secrets Detection": "ma234c42226b5", + "Code Quality": "m0008c1a1b7a5", + "HTTPS / SSL": "mccf1c9c05da6", + "Scanning...": "ma83820eba2a5", + "Run scan": "m68ac7da5dfff", + "Scan Results": "mcf47fe8237c0", + "Vulnerabilities": "m10153f84a1c8", + "Secrets Detected": "m1b43f94acafe", + "Code Quality Issues": "m3e1ba5ec342d", + "All clear!": "mde8ae7761662", + "No security issues found in your project.": "mf072d213cbba", + "Last scan:": "mfa5d797742e5", + "Duration:": "m298d6c7549e4", + "files scanned": "m865c8a6db23e", + "Performance": "m442aded87a55", + "Core Web Vitals": "m41d00ea2b130", + "Target:": "m890d34fffcde", + "Additional Metrics": "m59aec41109e1", + "Bundle Analysis": "mc13d409105f9", + "Total Bundle Size": "m515e6ac17ff5", + "JS": "m0917e7be3804", + "CSS": "mb581e46042cb", + "HTML": "m07239dbd2a1a", + "Images": "mbe7e2f201293", + "Fonts": "m3680fcad01f4", + "Other": "mf97e9da0e3b8", + "Largest Files": "m91ebac9663bc", + "Tree-shaking opportunity": "m9454dbf1e4d0", + "The vendor bundle contains unused exports from large libraries. Consider importing only the specific modules you need (e.g.": "ma2de31cf19d4", + "import": "md942f6488657", + "debounce": "mfed4caac2ea2", + "from 'lodash/debounce'": "mfb30b806509e", + "instead of importing the entire library).": "mb4f06654cac0", + "Recommendations": "m0738ee00b61b", + "impact": "m6f61f46c23a6", + "Fix with AI": "mc4c09704090e", + "Measured from your live preview (transfer-size based).": "m317e174357cf", + "Running...": "m4977a7e5bb36", + "Run audit": "m954b8f823bf0", + "Audit failed": "m892c84891df2", + "Performance Audit": "m30ea74354efc", + "Analyze your page speed, transfer size, bundle breakdown, and get actionable recommendations to improve performance.": "mb78a53daa655", + "Loading preview...": "mc02130fa90ee", + "AI generating...": "mcefd31dfd0ad", + "The preview server may not be running.": "m60c87cdbd995", + "Project preview": "m36d3e7aaf364", + "NotebookLM result": "mfabb1a3a78a9", + "← Back to app": "me392985826cd", + "notebooklm-result": "m6dad344b78d0", + "Live Preview": "md61b13d11a68", + "Your app preview will appear here as the AI generates code.": "m82e3c510c418", + "No preview available": "me5c083cf41ff", + "Disable visual editing": "m2490e88747ec", + "Enable visual editing": "m42b054ffc097", + "Pages": "m9046da16aea9", + "Collapse sidebar": "maab31cde23ba", + "No project selected.": "m7f2f1a589887", + "No workspace selected.": "m07be26265b47", + "Delete file?": "m37c5b8938bc5", + "? This cannot be undone.": "m7f5d26a5b27f", + "Search files": "m179fed85ec50", + "No files matching “": "mbb38e88c5b60", + "Context files the AI reads before every interaction. Click to edit.": "m69846e7cc7e9", + "Project Knowledge": "m9339d855212e", + "New Page Name": "m6209368d2532", + "Create via AI": "ma1e47d8a3aa5", + "Add a new page": "ma93d346c05cc", + "Search pages...": "m55dbb3629822", + "No pages match your search.": "md1c559bbc81c", + "No pages detected. Add files to src/pages/ to see them here.": "mf005c577d468", + "page": "m3660315a9af3", + "detected": "mb96da48a63e7", + "CURRENT": "me3cc57e193d6", + "Remove bookmark": "mb4836106f489", + "Bookmark this version": "mc36b1558cfd7", + "Author": "md95082a2ee57", + "Version": "mdd167905de0d", + "Restore": "ma76e13b98392", + "View diff": "m0e5d6873018e", + "Loading versions...": "ma61b1b4716d0", + "No versions yet": "mff76e0371906", + "Versions are created automatically as the AI makes changes.": "mbc861f24ac2a", + "No bookmarked versions": "m3e8a959e4e2c", + "Click the bookmark icon on any version to save it.": "m4d34e4f09d03", + "Load older versions": "m30aa5d0757f1", + "remaining)": "mc17c33c93bf4", + "Live public deployment": "m7d4f4103009d", + "Temporary preview link": "m453bcff7ec68", + "Deployment history": "mc38f4bf16403", + "No deployments yet": "me83dea6df0d2", + "This may take up to 60 seconds.": "m6a0d63d84893", + "Build output": "mb20c49843a17", + "Your project is now live.": "m84a0f15dccca", + "Build:": "mf9fd8a28cf11", + "Deploy:": "m18f6adeb80e8", + "Total:": "m18e872be2359", + "Deployment Failed": "m05081f14d114", + "Show sidebar": "m9e8197ce9e5f", + "Hide sidebar": "md1db29ebc76d", + "Synced": "m5da22fe4f7ac", + "Ahead": "ma8f94e9869fa", + "Behind": "ma2e92848319a", + "Diverged": "mec67106c49d8", + "Disconnected": "m04dfac3671b4", + "Connect GitHub": "m4027e5b24418", + "Pushing...": "m84bf6b1184cb", + "Pulling...": "m9756b83cda4b", + "main": "m0d6e4079e367", + "ahead": "md0b4034c6ca7", + "behind": "mb1b886ce5f57", + "Remote has changes not in your local project. Pull first, or force push to overwrite.": "m02961f8382e4", + "Commit message...": "mec1ed0e945e5", + "Push": "m731ce7ed8089", + "Force push (overwrites remote)": "m8de55a43460c", + "Force": "mcfda1755ffb1", + "Push to GitHub": "m4c5aa5fbf47d", + "Pull from GitHub": "mc551ab2a742b", + "1px": "m93e20626bf9c", + "2px": "m747614001f01", + "4px": "m356601538da0", + "Solid": "mb8b311b0f273", + "Dashed": "m2fe14adec27a", + "Dotted": "mbe454f3c8084", + "Border": "m3b4bdff339e9", + "Width": "m3019947b6daf", + "none": "m140bedbf9c3f", + "Style": "m7e744141b40e", + "Radius": "m6fe0661c82d1", + "0px": "m33a3c91b44d2", + "CSS Value": "m98b24440597d", + "#000000 or color name": "m4a73db4ba8bf", + "Pick Color": "m9b78ab17c13f", + "Apply": "m31e392d1c037", + "Colors": "m88c45d9e526c", + "Text color": "m4a69d0166046", + "Background": "mea2b8a878841", + "Row": "m95110d74c4c0", + "Start": "me4bb9f1ece9a", + "Center": "md946067427e9", + "End": "mf4db1e48476f", + "Stretch": "ma33fbcf83f7b", + "Layout": "ma511909161e1", + "Display:": "m88150308f8bc", + "Layout controls are available for flex and grid elements.": "m0b2782bb65ba", + "Direction": "m9c8a9579abe5", + "Align": "mb1b1b4e5e8d7", + "Gap": "mcb129306bc6f", + "Size": "m1af851907331", + "auto": "m929260ad9b9e", + "Height": "mbfe2eca40179", + "Top": "md5cdfcf7ff75", + "Right": "m883361d5d682", + "Bottom": "m479ad21ac909", + "Left": "m58eb9032e3bb", + "Spacing": "m62a822a58309", + "Collapse inputs": "mca0397ca2f65", + "Expand inputs": "m0393049f5cd5", + "Margin": "m2bf63d817630", + "Padding": "mee0d7af0bffd", + "Text": "m71988c4d8e08", + "Element text content...": "m4ec48e7f45fa", + "xs": "ma159eaf43ba2", + "sm": "m5af308bec132", + "base": "mcae662172fd4", + "lg": "m0e6ba33f8bc8", + "xl": "m525a6f3c9ded", + "2xl": "m996dfe781005", + "3xl": "m71f6ca0ae9aa", + "4xl": "m0aa558305207", + "5xl": "m244d4ab1edf8", + "Select weight": "m6b27c18efbac", + "Regular": "mb455784ab530", + "Medium": "m8e588cd18774", + "Semibold": "md442655c0643", + "Bold": "m94fee62e68e2", + "Normal": "ma7248eeb45eb", + "Italic": "m9bf37cb58a69", + "Align left": "meac0f9c3da59", + "Align center": "me55c76591fa2", + "Align right": "m8f4f8efcbee1", + "Justify": "mf3bd3473d7d8", + "Typography": "mcab94aba84f9", + "Weight": "m81d27ef6d503", + "Hide resolved": "mb502cf4b47f7", + "Show resolved": "m64d0005c6bd7", + "Cancel (Esc)": "m862c2324686b", + "Add comment": "mc4d891e9a87e", + "Click to place": "m4be7d5adc649", + "Comment": "m44f5e3fbec57", + "Re-open comment": "md6efe4c67c0c", + "Resolve comment": "m4ea5c8c9b647", + "Delete comment": "me43811a17028", + "reply": "m5782b18687e6", + "replies": "mb994278263e7", + "Delete reply": "m311c9f3dd66b", + "Reply...": "m772fa553df6a", + "Send reply": "m625aafc3a9bd", + "Leave a comment...": "m4dff58ab6888", + "Save first": "mebca7fbdafd1", + "Send prompt": "m9cf4ca8afcc9", + "Select parent element": "m9913b7a79909", + "View source code": "ma46e92d02960", + "Delete element": "m3cd9611289bc", + "Items available to all environments": "mb53cf804ed19", + "items": "m5f3c4f8580d3", + "Workspace-level items automatically included in all projects unless overridden by a project environment.": "mcd57f659de82", + "None — add workspace knowledge in Workspace Settings": "m5ee3c4ff61db", + "Edit name, icon & color": "me0091fce46a5", + "No knowledge files": "m0d50fb123a7d", + "Set as Default": "m10886554da51", + "Clone": "m5779f32fab00", + "Export": "m3664895579f0", + "Sure?": "mf2e6c2fe7c8f", + "Yes": "m85a39ab345d6", + "No": "m1ea442a134b2", + "New Environment": "meaab52640429", + "Full-stack environment with React, Tailwind, and Supabase tools": "m16ca11f9491f", + "Edit Environment": "mc7b7e03505b2", + "Custom Instructions": "m219febf3ba15", + "No custom instructions": "m5bcdb2bd8bfb", + "coding-standards.md": "m7827793844ed", + "# Instructions\\n\\nAlways...": "m2b90b67c3121", + "Dock to sidebar": "m984c4c78759c", + "Open as popup": "m9a43f5ec3be7", + "No environment loaded": "mba392022c5f1", + "Variables": "m02db55bac5e3", + "Click to edit": "m0678e31f762b", + "Empty": "mc6c094bc0054", + "None configured": "m2c04b392f1fc", + "None selected": "m557832355c85", + "in workspace. Create them in the": "maa4836eb52a0", + "panel first.": "maae3f876be76", + "Add file": "m2c83c00f0e83", + "# Knowledge\n\nAdd context about your project...": "mf83c845cc1ea", + "No knowledge files yet": "m9af696f3aa74", + "Add files to give your AI context about this project.": "m4ca85331d10a", + "Active Environment": "md5a90b8d8d51", + "Change": "mc0bf75bd78bf", + "Custom environment (loading...)": "m1900aa145ca0", + "Workspace Default": "maa6da723475a", + "Inheriting workspace skills, rules & connectors": "mdb587c5a8497", + "Inherit all workspace items": "m5c09316228a5", + "No custom environments yet. Create one from Workspace Settings.": "me8c1818905f9", + "Development": "m21b6a798321a", + "Production": "m13a7c655a7d4", + "Add Variable": "mf95fcf61a863", + "Value": "m8e37953d23da", + "Description (optional)": "mf6cbe2f0c1f8", + "Secret (masked after save)": "mabcdd1e169c4", + "Plaintext": "m0707c5d972a7", + "No environment variables": "m620e42933812", + "Variables are injected into dev server and builds": "m8a8a445f6560", + "New value (leave blank to keep)": "m2c4c151693e6", + "Toggle value": "m5416ad093f89", + "Inherited from workspace (": "mb1f8a17bcef8", + "inherited": "m46b2e93c2f9a", + "Installed from Marketplace": "ma6facd19ee0e", + "Marketplace listing": "m41f94479d2ae", + "· installed": "me450db4ac225", + "· modified": "me2109d543007", + "Uninstall — removes the cloned environment from this workspace": "m691120d9fa07", + "Uninstall": "mfe199528850a", + "Environment Templates": "m401d6acec59d", + "No templates available yet": "mc2ad8271f5d3", + "Templates will appear here once created by your team.": "m90db2ca3d0cf", + "New": "m18fdd549b2ed", + "Environments bundle workspace skills, rules, knowledge, and connectors into reusable presets. The": "m5fa108ae963a", + "default": "m37a8eec1ce19", + "environment includes all workspace items automatically.": "m97c8b61c1986", + "Create a custom environment to bundle a specific subset of your workspace items.": "mef0b6a88d698", + "Create Environment": "m08d23414ad6a", + "New Integration": "md62395fd52cd", + "Availability": "m12f67f8539c4", + "Everyone": "mda2e5dc515b1", + "This project": "md0f62545074d", + "Only me": "mbdc0857b99a9", + "Server URL": "m22f5ebc3ad3f", + "Command": "m713166971d73", + "npx -y @modelcontextprotocol/server": "m697119e47b5f", + "Advanced options": "m9443ff69463e", + "Connection Type": "m52a74e1ffc3f", + "Web service (HTTP streaming)": "m5bfaa5648534", + "Web service (HTTP SSE)": "mfecfc188ba0f", + "Bearer Token": "m105f8fe557fe", + "sk-...": "m6946d3ffe03d", + "eyJhbGci...": "m3210f18682cf", + "Add Integration": "me3b6e3d945fa", + "You'll be redirected to": "m13e8b0b77ddf", + "to authorize access. A popup window will open for you to sign in.": "m81c29589570e", + "Connecting...": "m5f04ae9ed6a8", + "Sign in with": "m11aaa14268df", + "Enter your API key": "m8e1c7ba669b6", + "Enter username": "m1b216be66c84", + "Enter password": "m7014aff13517", + "Select...": "m1339bddc2b28", + "Authentication Token": "mc856c7eb1cf5", + "Enter your authentication token": "m0a3c8f8411d7", + "Connecting to": "m86ea8896a440", + "Try Again": "mdf0fe9e00d35", + "Connecting…": "m72021eb70e91", + "Connected": "m22965568d22a", + "Available": "me674447337e8", + "No description available.": "m4d4c2197d70e", + "Search integrations...": "m80d8688ffab9", + "Load more (": "m15840c0ad236", + "No integrations match your search": "m19d5a194983c", + "No integrations available": "m5113ef230a14", + "Try adjusting your search or filters.": "mff762330c43e", + "Native integrations will appear here once configured.": "md431d4ccf029", + "doesn't need configuration. Just enable it.": "m539da25ea18e", + "Get your": "mce33c1c1d874", + "OAuth client_id + client_secret": "me37c838fdfec", + "credentials": "m631aada47dea", + "from the provider's developer console, then paste them below.": "m5561f8dd5d34", + "Open provider console": "me4a822d0504f", + "Required scopes:": "mb14ea6eedba3", + "Client ID and Client Secret are required.": "mf3170d57a386", + "Set this Redirect URI in the provider console:": "m380e05b0ebe3", + "Currently configured via": "maa4c3d948aed", + "env var. Saving here will override that with a DB-stored credential.": "mf651fcd956f5", + "Currently configured": "m97d0ee620b54", + ". Submitting will replace the existing credential.": "md41bd6455eb9", + "OAuth Client ID from provider console": "m2651215b6513", + "OAuth Client Secret": "mc02ed8192606", + "Saving": "m096b73624b09", + "Save Credentials": "m8e171e87357e", + "Workspace-scoped non-OAuth credentials are not supported yet from this admin form.": "m6596f82794f5", + "Authentication token": "m8e795a2f5a9d", + "Select…": "m731fe041ce28", + "Secrets are encrypted at rest. Only platform admins can see configuration status.": "mb5005e90891c", + "Connecting": "md403c686f6a1", + "isn’t enabled for this workspace yet. Ask a workspace admin to enable it under Settings → Integrations, then try again.": "mb6d61aa7afb3", + "Active Connections": "mfa1f0a72f5dd", + "Connection": "m639a40e82b9a", + "Connection is healthy": "m782eb73bb5de", + "Confirm disconnect?": "md597d662a8cb", + "Available Actions": "m98a28df264af", + "Loading actions...": "m147abf3da84c", + "No actions discovered for this integration yet.": "m72d95278c055", + "Add Another Connection": "m2c5b12ca6e17", + "Email, calendar, docs, chat": "m27c785c6b5dd", + "Dev": "m9c24f45a7ea9", + "Source, tickets, errors, on-call": "me5e4c2acbc94", + "Email, CRM, payments, booking": "m684f8be4db83", + "None of this preset's integrations are in the catalog yet.": "mb7d43e0d3140", + "Integrations enabled here apply": "m4109e7a85cde", + "globally to all workspaces": "m1d618a102b46", + "(existing and new). Users across the platform will see these integrations in their catalog.": "mafa37747e942", + "Enabled": "m92c1cdfdf4cb", + "Configured (DB)": "mb0e1cdb33429", + "Via Env Vars": "mec9969d40559", + "Enabled, Needs Config": "m7df4aae6b90f", + "integration(s)": "m0bfff22a132a", + "are enabled but missing credentials. Users won't be able to connect until credentials are configured. Click": "m0802ec6bbfbe", + "on a row below to fix.": "m316bd5c5eaa7", + "are pre-configured via server environment variables (e.g.": "m6f7d88ffe0fb", + "OAUTH_*_CLIENT_ID": "m0b5b709a8e90", + "). These work automatically without manual OAuth setup here.": "m3c32cf357690", + "Quick start:": "m679f443feccf", + "integration": "meb92cc52a766", + "Enabling": "mb69d6f19b253", + "Disabling": "mfd308574e3ab", + "Enable selected": "m673804025742", + "Disable selected": "m369711b52078", + "All Categories": "mfe3b58f14752", + "Env Vars": "m040a4f895460", + "Needs Config": "m7e841e94b722", + "ENV": "m416861c7e2c1", + "Platform credential configured": "mf86f18497bc0", + "DB": "mcf3abc832664", + "Update credentials": "m6f35ac236a3b", + "Configure credentials": "m59294028b1f1", + "No integrations match your filters.": "m09d16bdcb6bc", + "Workspace:": "m9f7ea773caac", + "capability": "m38a5be91af79", + "capabilities": "m3fc0e5c4c484", + "Available Capabilities": "mc3240e01116f", + "No capabilities discovered yet. Test the connection to discover what's available.": "m553c2d7780ec", + "Confirm Remove": "m1abf62f6c6fa", + "Custom MCP Connectors": "mdae69e4430f4", + "Loading integrations...": "mf246fd1ef9d3", + "No integrations yet": "mddb8b49a27b2", + "Connect third-party services and AI tools to extend your project.": "mad38b13ff599", + "Everyone in this workspace": "m93a65009a550", + "Everyone on this project": "mb4990c5afe4c", + "Only me (personal)": "m47a9fe7ce5bb", + "connected": "m12a7bd86e0a4", + "Pick an existing Supabase project from your organization, or let Doable create a brand-new one. Either way the API keys are wired up automatically.": "m5f031beeecbd", + "Loading your Supabase organizations...": "me4235ebe6c96", + "US East (N. Virginia)": "m94e8135c911c", + "US West (N. California)": "m7343272444cf", + "EU West (Ireland)": "mb044c25b22cd", + "EU Central (Frankfurt)": "m7cfb6caecb63", + "Asia Pacific (Singapore)": "m758f62cc9ed2", + "Asia Pacific (Tokyo)": "m558498b37a96", + "Asia Pacific (Mumbai)": "m133697121a8e", + "South America (São Paulo)": "m0ee739f054d6", + "Sign in with Supabase so Doable can create projects on your behalf. You'll be redirected briefly to Supabase to authorize, then come right back here.": "m98a3dcd2d736", + "Waiting for Supabase…": "mecf5310c018f", + "Sign in with Supabase": "m4cdc78922e43", + "Pick a project — Doable will fetch its API keys and wire them into this app automatically.": "ma287cb8a7f05", + "You don't have any Supabase projects yet — let's create your first one.": "m1eca6c02374e", + "Supabase organization": "m18d9d57bec2a", + "Region": "md3a008ef1335", + "Connect existing project": "m115b93fedc63", + "Create new": "m9f3df753a41a", + "JSON": "mdb1a21a0bc2e", + "Zip": "m7bc88ebb6d01", + "GitHub URL": "m76a692132c70", + "Import from outside Doable": "mc2ae72317178", + "Bring in an environment from a JSON manifest, Standards Zip, or public GitHub repo.": "m3a7f5a60d97e", + "Paste a": "m18cd692efad9", + "manifest. Anything that fails schema validation is rejected.": "m658a850d329e", + "Drop a Standards Zip here, or click to browse": "mf7573af38621", + "Compatible with Anthropic Skills, Cursor Rules, MCP, and Claude Code plugin layouts.": "m222e1ef4a020", + "Public repos only. The import will tarball the path and decode it as a Standards Zip.": "m55ec8dcd8925", + "Imports land as a draft environment in your workspace. They never run code or call external services until you authorise each connector individually.": "m1d965e7ab1cf", + "Imported.": "m91bae713515c", + "Imported": "m321f179c80ba", + "Import to workspace": "m2621d6ab4311", + "You may be asked to provide credentials (API keys, OAuth)": "m3db223d239a5", + "Install “": "m1c5802102833", + "Review what this bundle will add to your workspace.": "mf731842ea02e", + "Includes": "mdf498282bede", + "item": "m4a33eacd5fa6", + "that need your attention.": "mb029f856acbb", + "This bundle is empty.": "mafce17e84a37", + "Install creates an isolated copy in your workspace. The original publisher cannot modify it after install.": "maf0184ed8833", + "Installed.": "mc683491047fc", + "Nothing to install — this bundle has no skills, rules, knowledge, or connectors.": "mfe579e76f015", + "Installing...": "m07ae7fd68456", + "Install to workspace": "mc741d1dfa9f5", + "No description": "mbcd8cc53f40e", + "skill": "m9c53c074d7ac", + "rule": "m7369949b47ef", + "Import a bundle from JSON, a Standards Zip, or a public GitHub URL": "m7322e503e2e3", + "Manage listings you've published": "m86794d6a910b", + "Package one of your environments and list it": "mb07a607c3b8d", + "Install AI environments — skills, rules, knowledge, and MCP connectors — created by the community.": "m985b7ac97956", + "Search environments, skills, tags...": "m86d94cb27e98", + "Popular": "m76327dec9ae3", + "No listings found": "ma941983250b0", + "Try a different search term": "m3becd866de1f", + "Be the first to publish an environment!": "mc38607c4f2d3", + "environment": "mba5285161ba6", + "Spam or low effort": "mcd46fcfce46d", + "Malware / malicious behaviour": "mdce34cc99e59", + "Broken or non-functional": "m8ea03160b2fd", + "Inappropriate content": "m940bd85c865f", + "Copyright / trademark violation": "mdbc94458ce4f", + "Tell us what's wrong with “": "ma4d5cce85c7a", + "”. Reports are reviewed by moderators.": "mf560e7f3a325", + "Reason": "mf81ab834de5f", + "Anything that helps moderators triage…": "mdcac920e005d", + "Report received — thanks.": "m9e23a4d76b1b", + "Submit report": "mb41fd589ad91", + "Loading GitHub settings...": "m811f66f2beb9", + "GitHub Integration": "md3d6cd5328a1", + "Connect your project to GitHub for version control and collaboration.": "mf57a4f283920", + "Force Push (overwrite remote)": "m992e5b297a53", + "Not connected to GitHub": "m8212e6f6f430", + "Connect to push and pull code, track changes, and collaborate.": "mebabde2d65a9", + "Use the GitHub button in the editor toolbar to connect this project.": "m5db99d7cbac2", + "Connected Repository": "mcdeacf620667", + "Branch:": "mb8a50d7f479c", + "Last synced:": "m5f33f770d929", + "Download the latest changes from the remote repository.": "m8c40e9b0c098", + "Pull": "mb66d044181a0", + "Recent Sync History": "mbacf530d4a91", + "Disconnect Repository": "m1d1a296c451c", + "Removes the connection. Your code will not be deleted.": "m8d782fbb3ff6", + "Enter a valid URL to discover": "m7f0c2893110a", + "Name is required": "m604fd1b2e29c", + "Server URL is required for HTTP transports": "mbd6df736adbf", + "Command is required for stdio transport": "m88c96d59e8c9", + "Add MCP Server": "m2fdba7aa01af", + "Transport Type": "m810414c64a68", + "Server URL *": "mc4773c2e3148", + "Discover server capabilities": "meee8aee46a70", + "Command *": "m9c26a88a88fc", + "npx -y @modelcontextprotocol/server-filesystem": "me1e6ca97e71a", + "Arguments (comma-separated)": "m42057c1bd3ee", + "Name *": "m862fead051be", + "My MCP Server": "mb334c83ff115", + "Auto-detected:": "m7e02a31a539e", + "What does this server provide?": "m12e194e558e2", + "Server requires:": "mc9ca25454a8b", + "Token sent as Authorization: Bearer ...": "mf5864652d5bf", + "Header Name": "m6e58dfc8e692", + "X-API-Key (default)": "m1b06b0bb1e70", + "Sent as the header value": "m2d21ece0b57c", + "OAuth authorization available": "mb96ed27eabea", + "Authorization server:": "m094661ea7645", + "Connected successfully! You can close this form.": "ma694d6512292", + "Waiting for authorization...": "m349f82870358", + "Connect with OAuth": "md82f54134beb", + "Access Token": "mf9db72ced1ee", + "OAuth access token (manual entry)": "m0e65e48637d3", + "Enter an access token manually, or enter the server URL above and click Discover to find the OAuth flow.": "ma8322c6de1b6", + "Client ID (optional)": "m4c9c57419990", + "Client ID if required by the server": "m8e7141f4dfe7", + "Some OAuth servers require a client ID. Leave empty if the server supports public clients.": "m1b6f8f11a2d7", + "Environment Variables": "m1124ecc667c5", + "Optional. Passed to the stdio process via its environment.": "m39acc1835cf0", + "KEY": "m5ca24005b740", + "value": "mcd42404d52ad", + "Add Server": "mda8993ec0654", + "Server not auto-detected": "mced5e64d4274", + "You can still add it manually — fill in the details below.": "m1c3be50c7977", + "Server discovered": "m5d24f55e2c2f", + "Name:": "m2683cad48a14", + "Homepage": "m9e3391e9bf07", + "Tools": "mea93d6a262ec", + "Prompts": "m5f2e66e65397", + "tools available:": "mef718e7031ce", + "more": "m187897ce0afc", + "⚠ This server requires": "m743c1043d543", + "authentication": "mb9d906284539", + "🔗 OAuth endpoint discovered — use the \"Connect with OAuth\" button below to authorize": "m2bcf7ca31bca", + "OAuth metadata could not be auto-discovered. You can enter an access token manually below.": "m8b38d0056b17", + "Transport": "maaead4abf5d0", + "Args": "me82e22633f85", + "Auth": "m8eb3ea9bbde6", + "Scope": "mb073f6c68ef8", + "Tools (": "m60cffa1d7158", + "Re-run the OAuth login to refresh this connection (keeps the same server and name)": "mcbdf83b11de6", + "Reconnect": "mbf8a9eab9e7e", + "Deactivate": "mfb1e6fa55327", + "Activate": "m24433c70eba5", + "Confirm Delete": "ma7f54311a3e6", + "Connect Model Context Protocol servers to give your AI assistant access to external tools and data.": "mc419005e98b9", + "server": "mb3eacd33433b", + "configured": "m201582247500", + "Loading MCP servers...": "mad9662696670", + "No MCP servers configured": "m013e6b9db9d2", + "MCP servers let your AI assistant use external tools like databases, APIs, file systems, and more.": "m97bf0e1b8107", + "Add Your First Server": "mebef55227b69", + "Use the model configured in AI Settings for this workspace.": "mb17dc3d5a74d", + "Override for this project": "m572b0dfcf0a8", + "Pick a provider and model from your workspace catalog.": "m2b19d82e282b", + "Loading providers…": "md8de930be069", + "Provider source": "mf8225de648cf", + "Custom provider": "mfee405014d78", + "Server default": "m42b998374988", + "Loading models…": "mcc8b4624f765", + "Select a model…": "mc4985ffa6928", + "Select a provider…": "m8ee47e5e4955", + "No workspace providers configured. Add one in": "m81d707aca8c4", + "Refresh model list": "m9606bfc49ee3", + "No models discovered yet. Click Refresh or check the provider in AI Settings.": "ma7d21d08d37b", + "Select a provider first.": "me43fdd487cfb", + "Current saved override:": "m454b4687ffb6", + "— pick a model above to update it.": "mad3e57500f14", + "Knowledge (.doable/)": "m41bdb214d4a7", + "Knowledge files guide the AI's behavior when editing your project. Each file serves a different purpose.": "m780a89408ef5", + "files,": "m7cf46d84e370", + "% of budget used": "m75fba3b7fbcd", + "Empty -- click to edit": "m2cb221edd527", + "Unsaved": "m6250d5725dda", + "Transfer Project": "mb3d19c7f1b7d", + "Transfer this project to another workspace. The project will be moved along with all its files, settings, and deployment history.": "m01082fdad286", + "Destination workspace owner email": "mea0f15f9a0cb", + "owner@example.com": "mc8cd3c642730", + "Permanently delete this project and all its deployments, files, and data. This action cannot be undone.": "m136b84975307", + "Delete This Project": "m1c335e92c86b", + "Are you absolutely sure?": "m0c88f5ee5691", + "and all associated data. Type the project name below to confirm.": "mdbf2540da3b2", + "to confirm": "m83918ed6bc4f", + "I understand, delete this project": "m666685f2f9a1", + "Doable for this project": "md36d7df3ead8", + "When disabled, /__doable/ai/* returns 503 AI_DISABLED_FOR_PROJECT. Useful for paused projects or quota lockouts.": "ma8b2040de78f", + "Disabled": "m75081b593d15", + "Thinking content visibility": "mc1ea40104894", + "System prompt override": "me17f37e96ef7", + "Prepended to every runtime chat call. Visible to the model only — never echoed to the client. Up to 4 KB.": "m3632ad92aaad", + "chars (": "med644a4967f2", + "%) — extra content beyond the cap is truncated client-side.": "md55648e6be99", + "Reset to default": "mbc5b45ae7b60", + "Chat model override": "m9abc7b7a3843", + "Overrides the workspace-resolved chat model for runtime chat in this project's generated app.": "m32bd0666e5c1", + "Embedding model override (destructive)": "meee7a8fae13c", + "Changing the embedding model permanently erases all existing embeddings for this project because pgvector column dimensions are fixed per model.": "m1dabae936e70", + "Current:": "mc09f632874c2", + "(workspace/platform default)": "m65a0fa6b5d75", + "Click below to walk through the destructive confirmation.": "m527d4fc6dd01", + "Change embedding model…": "mc66ae680c148", + "Runtime token usage": "m1b5874862421", + "Aggregates of ai_usage_log rows for this project, grouped by mode.": "me1c28d6e16c1", + "All time": "m9755c8d7d44a", + "CSV": "meb6b42f54c42", + "Top models": "m79489561d9ef", + "req ·": "m18827ebcc4c9", + "tok": "m1a7674eb4ee7", + "Erase embeddings for this project?": "me40350c7ab5b", + "Changing the embedding model will permanently": "m34584117f4bd", + "all existing embedding rows for this project (current model:": "me0739214a7cf", + "(default)": "mb3ffbbff2d64", + "rows across": "m6befe4ab12fd", + "table(s)).": "m793a6e89fdd4", + "New embedding model": "m808fe16148a5", + "ERASE": "mfc0510589f8e", + "Erase embeddings & switch model": "m011d0e9f5ccf", + "Waiting for DNS": "m38500dff72f5", + "Verifying": "ma7d4a9f301ed", + "SSL Provisioning": "mcb470ff16d18", + "Removing": "m9f2c59a113db", + "Default Domain": "m4e08dbdaa06f", + "Your project is always accessible at its .doable.me subdomain.": "m913d537a218d", + "Default URL": "maae50df57461", + ".doable.me": "md6069fcf719f", + "Visit": "m1c8ac867f052", + "Custom Domain": "mc1683eeb070b", + "Serve your published site from your own domain name.": "m1b329de76913", + "Pro+ Feature": "mfb1dfb5d89e8", + "Custom domains are available on the Pro plan and above. Upgrade your workspace to connect your own domain.": "m25a7608b4dc0", + "Add Domain": "m0f09df73147a", + "No custom domains configured. Add one above to get started.": "m16a49b5a4082", + "Configure DNS": "ma12655756209", + "Add this CNAME record in your Cloudflare DNS dashboard with the proxy (orange cloud) enabled.": "m45037d12281e", + "CNAME": "m76b26edb7557", + "Copy target": "m690b060136cb", + "Your domain must be on Cloudflare DNS (free). The CNAME must be proxied (orange cloud ON). After adding the record, click Verify above.": "m813b1a6dead6", + "Domain Active — SSL and routing configured via Cloudflare": "m3eb998a330d2", + "HTTPS certificate managed by Cloudflare. Auto-renews.": "m8f74681f2b64", + "Project Details": "m2ca4637a5b8a", + "Project Name": "m875ea40080d7", + "My Project": "m51e38ecc92f5", + "A brief description of your project": "m154d24f40bd2", + "Visibility": "m7448611d5f93", + "Anyone can view": "mb755ad205da1", + "Only you can access": "m59a8280d96b0", + "Project Information": "mb9f34f54a981", + "Read-only metadata about your project.": "m041f49553f9c", + "Last Updated": "m048c7f2ef9aa", + "Project URL": "m03fb44a5243d", + "GitHub Sync": "m0c643a753e53", + "Push and pull code changes to keep your project in sync.": "m10d736b7b159", + "MCP & Integration Rate Limiting": "m7585eaf776ab", + "Control how many MCP tool calls and integration requests this project can make per minute. Applies to all modes: preview, standalone, and published.": "m8853515ebeea", + "Rate Limit Mode": "m2b4f1669370f", + "System Default": "md8081c667c73", + "600 calls/min for preview, 1200 calls/min for published apps with API keys": "m419b966d9002", + "Custom Limit": "m9e8d2ff6c1a6", + "Set a specific calls-per-minute limit for this project": "md3ab7b8e5c0b", + "calls / minute": "me1f5485a7544", + "Unlimited (No Rate Limiting)": "m86ce906b46f4", + "Disable rate limiting entirely. Use with caution — external MCP servers may still apply their own limits.": "mbd8347bfbf7f", + "How it works": "m9c870aa6e5e9", + "Understanding the rate limiting architecture": "m5a1c6983f6af", + "Rate limiting applies to all MCP tool calls and integration actions made by this project, regardless of how the app is accessed (editor preview, standalone URL, or published site).": "mf4fcdd413746", + "All requests flow through a": "m15e63fd45a68", + "single endpoint": "mb8cc693dc129", + "Preview & standalone: authenticated via short-lived JWT (15 min)": "m44f921f1d59b", + "Published apps: authenticated via project API key (dpk_*)": "m3f11c69bb699", + "Rate limit is shared across all auth modes for this project": "m603421410c77", + "Save this key — it won't be shown again": "m3332b048bd97", + "No API keys yet. Keys are auto-provisioned on first publish, or you can create one manually below.": "m052f9bcf9ab8", + "tool": "m7c9bbe5ec9b3", + "allowed": "meabc01f12ec3", + "All tools": "m81c151f98a19", + "Any origin": "m89739b9d6a6d", + "Revoke key": "me29abcb7ef37", + "Create Client Key": "me1b30b3373a7", + "Create Server Key": "mac65db0ffaac", + "Client keys": "mc655f48b60f8", + "(dpk_c_*): For browser apps. Origin-bound, lower rate limits (600/min).": "m8b8d2cce80de", + "Server keys": "m9e0389f1fa44", + "(dpk_s_*): For backend apps. No origin check, higher rate limits (1200/min).": "mbb1bad10c001", + "Auto-provisioned:": "m549886a83703", + "When you publish, a client key is automatically created and scoped to exactly the MCP tools your app uses.": "mf8de3dbf5971", + "API Keys": "mc08f17eb9e11", + "Manage authentication keys for published apps. Auto-provisioned on first publish with tool-scoping and origin-binding.": "m5fa4d2fe9af0", + "Rate Limiting": "m74dea5e67162", + "Control how many MCP tool calls and integration requests this project can make per minute.": "m41efb3a9935a", + "Live site accessible to all visitors": "mf7c5bd1cc1a7", + "Test changes before publishing to production": "m306fdcf2ba87", + "Project Environment": "m51469c906261", + "Override the workspace default environment for this project. The AI will use this environment's skills, rules, knowledge, and connectors.": "m81373ef0c23e", + "No environments in this workspace yet. Create one from the Environments panel.": "m7ffa22adfe78", + "Use workspace default": "m0b6adee87205", + "This project uses a custom environment override. The workspace default is bypassed.": "mefb1406f94e5", + "Inheriting from workspace default. Select an environment above to override.": "m0aea45f48490", + "Environment Presets": "m4d1441671a98", + "Reusable bundles of skills, instructions, MCPs, and integrations applied to this workspace.": "m06ea1944254c", + "No environment presets": "m0ad959ad8db9", + "Create environment presets from the editor's Environments panel.": "m9caadf97bbfd", + "Deployment": "m870a8ffd98f4", + "Deployment environments for publishing your project.": "m12b1050c1067", + "Last deployed:": "m61cbf7fa57d1", + "Project not found": "m758e8416eb8a", + "The project may have been deleted or you don't have access.": "mdc652adf2479", + "Manage reusable skills and rules that shape how the AI works across your workspace.": "m7ce8f8cb9bff", + "Skill content...": "m3a0f0a5401fb", + "Delete this skill?": "m2ef3fb262631", + "New Skill": "m7fe2a91dd453", + "Describe what this skill teaches the AI...": "m149c130c15f6", + "No file patterns": "m143db7e359b1", + "File Patterns": "md8ad616783ba", + "*.tsx, *.ts, src/**/*.js": "m3c990110b4c4", + "No file patterns — applies to all files": "m860e8e6eee39", + "Rule content...": "m28007b7f8f11", + "Delete this rule?": "m3a3de58afb86", + "New Rule": "m3f82fe8e9de3", + "(comma-separated, optional)": "mbfd1311eba42", + "Describe the rule the AI should follow...": "mf3bacf08ec15", + "Add Skill": "mf01ec050eca5", + "Skills teach the AI specific capabilities or knowledge. They are included in the AI's context when working on your projects.": "m6d8b4a3d59cb", + "No skills yet. Add one to teach the AI new capabilities.": "m476f61ba4fc4", + "Add Rule": "m968c3cb8fb70", + "Rules define constraints and conventions the AI must follow. File patterns control which files a rule applies to.": "m0cadbcfb5f26", + "No rules yet. Add one to set constraints for the AI.": "ma4fe917c1d4e", + "Schema": "m07b091a3fdc4", + "Rows": "m101f2ff3de22", + "Queries": "m80d2e18c7da9", + "Migrations": "mfe0313c05643", + "Database panes": "m1a82ab93f701", + "Drop tables": "m874caa6f7aeb", + "Permanently delete a table and all its data. This cannot be undone.": "m52171f6cf990", + "No tables to drop.": "m3361bd462810", + "Drop": "mc8af9ae37a48", + "Drop table": "m53e3bd5e1031", + "Reset database": "mf65a3dd84895", + "Drop ALL tables and start from an empty database. This cannot be undone.": "m7eeaf76242de", + "reset": "m01be30bb4a27", + "to drop every table:": "me47560c7e215", + "Applied migration history for your database.": "m5aeb4bed9530", + "No migrations yet": "md1f962d75c7d", + "Migrations appear here once the AI applies schema changes via the built-in database.": "mab770d4f42dc", + "Migration": "mcc149190687e", + "Hash": "ma91069147f9b", + "Database Overview": "m47a5180f7f62", + "A snapshot of your project database.": "m5426a78b8f83", + "No tables yet": "m309715f1d891", + "Ask the AI to add some — it will create your schema automatically.": "m611a7763cad3", + "Total rows": "m24839d0c0477", + "Indexes": "m90b901a30c3f", + "Policies": "md3ad1f1f8c9c", + "Quick actions": "m1810407f5ab7", + "Open Schema": "m5dd8131db13e", + "Browse Rows": "m9d41abd72396", + "Run Query": "m826cea94aca7", + "Run SELECT / INSERT / UPDATE / DELETE against your database. Queries respect row-level security.": "m951088383385", + "⌘/Ctrl + Enter": "mb1160f188a9b", + "row": "m634768dae147", + "Query OK — no rows returned.": "m6e2c568e0ce6", + "null": "m74234e98afe7", + "Fill at least one field before adding the row.": "m04fead47af96", + "Browse, edit, delete, and export table data.": "mff40ad964b14", + "rows)": "m98bded18778d", + "Add row": "m1868a8dd78ad", + "rows total": "m16cdb8681b4f", + "Editing and deleting are disabled — this table has no single-column primary key to target rows by.": "me5a89270f6be", + "New row in": "mf017b41bcee4", + "you (auto)": "md6b3a40516e9", + "No data.": "m5118ec56d3b0", + "Delete?": "m18b77e44e689", + "Confirm delete": "mda00fa968bd8", + "Prev": "m73912999faf4", + "Tables, columns, indexes, and row-level security.": "m18199d6c8031", + "No tables found. Ask the AI to create your schema.": "m5c38569007a8", + "RLS enabled": "me0ae55a347ca", + "RLS off": "m6e348b8ef3df", + "Enable RLS": "m918e06828581", + "add a created_by / owner_id column to enable RLS": "m16004c5e9d6f", + "Columns": "m53aade77cd69", + "Flags": "mf38d9950af4f", + "NOT NULL": "me95b58867bd3", + "Indexes (": "ma4aa5093c634", + "UNIQUE": "m64636a121324", + "Policies (": "m615efc660a79", + "No policies —": "me7e9c0714998", + "RLS is on but no policy grants access (rows are hidden).": "meed09bdfc71e", + "this table is not row-level-secured.": "md172b9c0a0d5", + "HTTP (Streamable)": "m90d003ae66f9", + "Connect to an HTTP-based MCP server with streaming support": "m5e514b526a1a", + "Server-Sent Events (SSE)": "mc3e6cbfe59d3", + "Connect via HTTP with Server-Sent Events": "m42dc7480db33", + "Built-in App": "m7097b2b3c5c0", + "Server-managed local process": "mc6ac2600776f", + "Search skills...": "m65104bc415b3", + "No matching skills": "m706bb2bf3ff7", + "No skills configured": "m436e37eab2b0", + "manual": "m36bde66f289a", + "(when to use this skill)": "mda98d0c169dd", + "Use when building React components with accessibility...": "m248296cbb019", + "Auto-invoke when prompt matches": "m99d204e6ce02", + "When to use this skill...": "m810167ab8526", + "--- name: my-skill trigger: auto --- Skill content in markdown...": "mf6456b82f5ee", + "Skill": "m6df1bb18a59a", + "--- name: my-skill trigger: auto --- Skill content here...": "m6f3decdb03ee", + "No skills yet. Skills give your AI reusable capabilities.": "mab6d0a8145e7", + "Rule": "m62845f31a2fe", + "Always respond in a friendly tone.\\nNever include raw SQL in responses.": "mef4255129890", + "No rules yet. Rules guide how your AI behaves.": "m76e4096cb2b5", + "Invite Member": "m8e8a0b88543c", + "Send an invite to join this workspace.": "mf7fae87d68c7", + "colleague@example.com": "m5c4b03a7e821", + "Send Invite": "mc1ad5dcf2e05", + "Remove Member": "m2b98b1945afc", + "Are you sure you want to remove": "mda4b4fa5ee81", + "from this workspace? They will lose access to all projects.": "m72aa5b162eab", + "Removing...": "m60d18e42fd5a", + "Failed to load members": "me0447514873e", + "People who have access to this workspace and its projects.": "m0141903afec5", + "Invite": "m1fd9ae1607aa", + "Invites that have been sent but not yet accepted.": "md48b0edcb0fa", + "Invite Link": "m3f63662d1610", + "Generate a shareable link to invite people to this workspace.": "mee0ba29677dd", + "Invite link": "m826c272260db", + "Generate Link": "m6ed21b0197a6", + "Transfer Ownership": "mf49cda3a003c", + "Transfer ownership of this workspace to another member. You will be demoted to admin.": "m606c754332c6", + "New owner email": "m1a188a2a4288", + "Delete Workspace": "m9efc82d7b54f", + "Permanently delete this workspace, all its projects, files, and member associations. This action cannot be undone.": "m08e84f1f8c6f", + "Delete This Workspace": "mfbf65aeff09f", + "to confirm.": "ma44014d57331", + "I understand, delete this workspace": "m2aedfd1a09ce", + "Workspace Details": "mfb0b45908d60", + "My Workspace": "m7df05adeeaad", + "A brief description of your workspace": "m93ecf5eb3e0f", + "Workspace Information": "m9ab5abafdca9", + "Read-only metadata about your workspace.": "me472493645c7", + "Members": "m1044a4c056d0", + "Your Role": "mab3364cde0d3", + "Too many login attempts.{v0}": "m7ffac85d3272", + "Audit endpoint is unavailable (HTTP {v0})": "mff0dc55e6c99", + "Failed to delete {v0}": "m5b97efac769e", + "Using custom token ****{v0}": "m00410e77ae85", + "Using cert.pem OAuth token ****{v0}": "m00ace311c2f5", + "Retry all {v0} emails? They will be reset to pending.": "mac26c98b3c1e", + "{v0} email(s) queued for retry.": "mc5650b441394", + "Permanently delete ALL {v0} emails? This cannot be undone.": "ma02387e074cf", + "{v0} email(s) deleted.": "m4f5d6347279e", + "Showing {v0}": "m24d7d02c9f3d", + "with status \"{v0}\"": "m9f6801c068b5", + "({v0}-dim vectors)": "m126345e8a598", + "Saved defaults for {v0} plan": "m8088d60a15ef", + "Applied {v0} defaults to {v1}/{v2} workspaces": "m7a3979d63198", + "Stop \"{v0}\"?\n\nThe app's systemd unit will be terminated. The user can restart it from their editor.": "mdbc21a17d946", + "Kill dev server for \"{v0}\"?\n\nThe Vite process will be terminated. The user can restart it from their editor.": "m7b63c6b376c6", + "doable-app@{v0}.service": "m26bf2485c847", + "Saved \"{v0}\" mode tools": "mc5ac96b52ed5", + "Delete the \"{v0}\" mode configuration? This will cause the mode to use hardcoded defaults.": "mebee0e4886a2", + "Deleted \"{v0}\" mode": "mfa40d503407f", + "{v0} · {v1}\n{v2}ms · {v3}{v4}": "mb574068c50bc", + "{v0}ms": "m41b6c7dee5b4", + " +{v0} more": "m5bea7822d675", + "Select {v0}": "m84805b3f51e7", + "No projects match \"{v0}\". Try a different search.": "me4304a8372fd", + "No templates matching \"{v0}\"": "m47f1f6a3b07b", + "No projects matching \"{v0}\"": "m39875f600860", + "Enabled · {v0} recovery code{v1} remaining": "m260f4198369f", + "Delete {v0}? This cannot be undone.": "mf49697c96a5a", + "# {v0}\n\nStart typing...": "m6ca5d09b8d70", + "Authentication error: {v0}": "m973831b3382e", + "{v0} {v1} applied": "md1f8563597aa", + "{v0} KB · ": "m4dbb4ed0912c", + "Auto-fix paused — the AI couldn't fix this error after {v0} attempts.": "m63e447794f82", + "{v0}/editor/{v1}": "mbce09bb12e5f", + "Could not save {v0} default — verify in /admin/plans after setup.": "ma126d644f0cc", + "{v0} models available on your Copilot subscription. Tune further from /admin/ai-settings any time.": "m3c6a40f73ae5", + "Configured: {v0} via {v1}": "m49a064002aec", + "present{v0}": "m160c02eb9e00", + " · {v0} members": "m4ae2ea58575e", + "{v0} / {v1} used": "mce4bdf856850", + "{v0} preview": "m7844d8fc9afc", + "Preview of {v0}": "mbe78c16a8edb", + "Voice input couldn't start: {v0}": "m6935183f86c1", + "{v0} workspaces: {v1}{v2}": "mf50339be8607", + "This Copilot subscription is being used by {v0} different users.": "m8cec5e9c2b80", + "This GitHub account (@{v0}) was added by {v1} different people.": "m61907559f648", + "Settings copied to {v0} user{v1}": "m22e9cebc83bd", + "{v0} available": "m0ef498fa44b4", + "{v0} credits remaining": "m6b463a0e3cd3", + "Upgrade to {v0}": "m04302a14169c", + "Editing {v0}": "meceda4cd02c0", + "Add{v0}": "me2b3655a13a0", + "Disconnect {v0} and connect a different one?\n\n": "m54cbd4604c0c", + "Tool call failed ({v0})": "ma192c0457880", + "mcp-app:{v0}": "m608dd628c7c7", + "Delete {v0}? Default files will be reset.": "m08f7430195bd", + "{v0} chars": "md9339cc6a24b", + "Version {v0}": "md2b5e7506b51", + "My {v0} connection": "m7e47e94daf7a", + "Enter {v0}": "m863f2ca6991c", + "Connect {v0}": "m9db2ba6d8968", + " (Client ID: {v0})": "m086df81a91bb", + "Paste your {v0} API key": "ma575227918ad", + "{v0} of {v1} {v2} operations failed. The list has been refreshed.": "m09ca41fb2c5d", + "Select all in {v0}": "m85cabcf2a12c", + "Configured via: {v0}": "mb59b1c094916", + "{v0} high-impact and ": "m67c60b1e677c", + "{v0} characters": "m5db02c86ca3f", + "My {v0}": "mdedcf827964d", + "Members ({v0})": "m4007ede786d8", + "Pending Invites ({v0})": "m5bed8dc6b0ed", + "Created {count, plural, one {# file} other {# files}}": "m535f5487c9f0", + "Edited {count, plural, one {# file} other {# files}}": "m54eab0ff283f", + "Read {count, plural, one {# file} other {# files}}": "me7f27e543c19", + "Installed {count, plural, one {# package} other {# packages}}": "mc33fa913a190", + "Searched {count, plural, one {# time} other {# times}}": "m4eeb5480a729", + "Ran {count, plural, one {# command} other {# commands}}": "m6e025ab4ef82", + "Explored project structure": "md4e1aa013fee", + "Planning": "m21cc30509578", + "Creating plan": "m29646fe2d127", + "Tracking progress": "md4a85c25934d", + "Request failed": "mcfce761befa8", + "Authentication failed. Please try again.": "m4190475b5235", + "Authentication code was missing. Please try again.": "mb553ebbcba22", + "No email address associated with your account. Please try again.": "md89c7cc4ec4b", + "Failed to fetch thumbnail logs:": "mcf838bcb6704", + "Failed to generate thumbnails:": "m440bdfb3a851", + "Failed to fetch copilot sessions:": "m6a52dcd27169", + "Failed to load sessions": "mda6efefb0490", + "Failed to terminate session:": "mf178a2552831", + "Failed to terminate all sessions:": "mb268c0b17e63", + "Failed to load conversation": "ma7367485803a", + "Failed to load action log": "m0eb0fd20a42b", + "Failed to load audit data": "ma7375d496bde", + "Failed to load chat sessions": "ma4b404e83999", + "Failed to load thread": "m73bfbe45ead3", + "Failed to load DNS config": "m128e6b89300b", + "Failed to load DNS diagnostics": "m29bbb7b7a04c", + "Failed to save token": "mfa4f2f923b23", + "Failed to remove token": "mf3d55812ba2e", + "Failed to save": "m2c07997249ab", + "Failed to refresh diagnostics": "mb347c681bdec", + "Failed to load email config:": "m4706ef0b982f", + "Failed to load queue stats:": "m6eee736ebabe", + "Failed to send test email.": "m97f3dc1a00cb", + "Failed to delete": "mf625b14e1b2c", + "Failed to start Gmail OAuth": "m0cfb2caf3808", + "Failed to load queue:": "m5281a17d08d9", + "Failed to load email detail:": "m0f48d9ed9216", + "Failed to load status": "mada889964ab3", + "Failed to load MFA users": "md2ac8dfbfab1", + "Failed to reset MFA": "m2638a84f756e", + "Failed to load AI allocations:": "m8c90edde06bd", + "Failed to save AI settings": "m62118d4494f6", + "Failed to reset AI settings": "mff27059cb004", + "Failed to update role": "me4143613f121", + "Failed to update plan": "meabb5c136be4", + "Failed to load plan defaults:": "m85a0de1739d3", + "Failed to save defaults:": "md67a86520b83", + "Failed to apply defaults:": "mb7f9fa013618", + "Failed to fetch plan limits:": "md3774a9d3090", + "Failed to load plan limits": "m31e1685470cc", + "Failed to save plan limits": "m2f114634718b", + "Failed to reset plan limits": "m1e4e7c3efec4", + "Failed to load runtime instances": "med2139ca8746", + "Failed to load dev servers": "m685f6c95f442", + "Failed to load egress data": "m5aa7f04b86f9", + "Failed to load logs": "m2515ea982cd0", + "Failed to load signups:": "m1a70c04fc312", + "Failed to load signups": "mce89884b1cdb", + "Failed to save settings": "m4924972f9587", + "Failed to load tool configs:": "m177ebb036074", + "Failed to save mode:": "m557aa001b316", + "Failed to add mode:": "m1df9a58ef93c", + "Failed to delete mode:": "md4ebc05d56d2", + "Failed to load trace": "m4ad82614b981", + "No attributes": "m1bde77d27b5a", + "No events": "m2197f6207922", + "No exception": "m7a711f215997", + "Failed to load traces": "mc86bcc9469d3", + "Failed to save credits": "me88e1a5f81d3", + "Failed to save GitHub account": "m75592b03117e", + "Failed to fetch templates:": "mfe95f5923f3d", + "Failed to create project. Please try again.": "ma23127da31a7", + "Failed to delete some projects": "m2495a96af0ae", + "Failed to load community data:": "m6e260c2ad677", + "Failed to discover projects:": "m609116050f8b", + "Failed to remix:": "m2c42b800f4f2", + "Failed to remix. Please try again.": "m82e7362bb796", + "Failed to create listing": "mc5bf66554c8f", + "Failed to load instances": "m7054480c7609", + "Failed to load MFA status:": "mdd1a94ab79c0", + "Failed to start enrollment": "mb0223f41bbad", + "Failed to disable MFA": "m615d3faf84b8", + "Failed to regenerate recovery codes": "m54ed946e0373", + "Failed to save profile": "mb689d74cef45", + "Failed to save profile:": "m8f4894fcc9b3", + "Failed to save profile.": "m574f390356c7", + "Failed to change password": "m98548a295325", + "Failed to change password. Please try again.": "maa35c76bad68", + "Failed to load workspace AI extras": "m60e951281376", + "Failed to load workspace usage": "m59273bcdd9e5", + "You are not a member of any workspace yet. Create one from the dashboard to continue.": "m2805f0287fdb", + "Failed to load workspace settings:": "m6ccebcddccab", + "Failed to update workspace:": "m2575461a4ce1", + "Failed to send invite": "mf14597dadd27", + "Failed to generate invite link:": "ma36d7bf13293", + "Failed to remove member:": "m0b98a95233dd", + "Failed to change role:": "m701d45a366f8", + "Failed to revoke invite:": "m7b7440bf5872", + "Failed to delete workspace:": "mdab7736a5deb", + "Failed to load knowledge files": "m7a8439fc01b2", + "Failed to create file:": "m0c041edb03b2", + "Authentication tokens were missing from the response.": "m8310a0555402", + "No email address is associated with your account.": "mdaaba33e2963", + "Authentication tokens were missing.": "md3d849a730c9", + "Invalid JWT": "m70bc1979e806", + "An unknown error occurred.": "m30aa69b29d9f", + "Failed to fetch": "m8ca83df14ee3", + "Connection to AI failed — the server may be restarting. Please try again in a moment.": "mc382f7378c37", + "No response stream received from the server.": "m4a7f23ba49c7", + "Connection interrupted — the server may have restarted. Please send your message again.": "m872423b25059", + "Failed to scaffold project": "mbeb845033bf7", + "Failed to load files": "m07feb1207cae", + "Failed to load file": "me9b9dd4d2b1c", + "This imported app uses Supabase. Connect your Supabase project so it can read and write real data — no manual .env editing needed.": "me1d8e8c18664", + "Failed to download project": "m09ad32065f6f", + "Please refine the plan based on my feedback.": "m0b87cc7d93d2", + "The publish/deploy failed with this error: ": "m5b11c7d71bdc", + "This invite link is missing a token.": "m7fb831b82fd3", + "This invite is invalid, expired, or already used.": "mbc7983bc3fda", + "Connection timed out. If you completed OAuth on GitHub, reload this page and check /admin/ai-settings.": "m626c6e175a78", + "No workspace yet. Reload the page and try again.": "m51f74a42cc06", + "Could not save. Try again.": "mfe32924b26f0", + "Could not save": "m16efcd21d74f", + "Failed to create folder:": "m52a6ef302b8e", + "Failed to rename folder:": "mcbd22b6cc368", + "Failed to delete folder:": "m5833eb5e8cd9", + "Failed to create workspace": "m0a8d4fd66444", + "Failed to remix project:": "meee812e53de7", + "Failed to load image": "maf2035a41750", + "Failed to read file": "mea7d976ce045", + "Failed to process files:": "mafaba68c1867", + "Failed to process images:": "m1a7cd149848a", + "Failed to load features": "m3790b322709f", + "Failed to load users": "m6a8bcb8d2639", + "No microphone detected. Please plug in or enable a microphone and try again.": "m51cc2811d054", + "No response stream received.": "m683bdca05a39", + "Connection to AI failed. The server may be restarting.": "md901d334eaee", + "Failed to add account": "mbabb88c7fea9", + "Failed to make provider available to workspace": "m885e022949b4", + "This only changes the AI model for you. It overrides the workspace defaults below. Other workspace members will still use the workspace defaults unless they set their own override. If you don't set anything here, you'll also use the workspace defaults.": "ma08b22ea84b8", + "Failed to save provider": "me21fa38b5758", + "Failed to load GitHub accounts:": "mc19db501d4d5", + "Failed to load providers:": "m271110a8d8e9", + "Failed to load AI defaults:": "m31812c8a3982", + "Failed to load user AI preferences:": "m4a7d1fa983ed", + "Failed to load models:": "m1bdc0c1294b1", + "Failed to load user allocations:": "m9f7cbd819667", + "Failed to load provider catalog": "mfe1883f165bb", + "Connection test failed": "ma45a37ddcc32", + "Failed to load usage summary:": "m199ba4b7799e", + "Failed to load usage history:": "me2e568f047d7", + "Failed to load usage breakdown:": "m11521761e8d3", + "Failed to load workspace usage summary:": "m98b998323671", + "Failed to load workspace members usage:": "m01f10012cfac", + "Failed to load workspace providers usage:": "m27267450b58d", + "Failed to load hourly activity:": "md5f7065f5590", + "Failed to load token split:": "med310a04d2a6", + "Failed to load credits:": "m01d3102608d8", + "Failed to load member model breakdown:": "m09514d591e07", + "Failed to load copilot account usage:": "me36cf975f831", + "Failed to load top consumers:": "m2bfd1efce499", + "Failed to load platform usage summary:": "mb33f0b9ffefd", + "Failed to load platform users:": "mbfc86ed12ce0", + "Failed to load platform copilot accounts:": "me96aeec114fc", + "Failed to load platform custom providers:": "mdccd1f5ef168", + "Failed to load platform models:": "m1798aab66965", + "Failed to start checkout": "mcd51884893e0", + "Failed to open billing portal": "m64a1feb5d37a", + "Failed to start top-up checkout": "m2bbab4a2c5d2", + "Failed to load projects for folder:": "mf9af667d451a", + "Failed to add projects to folder:": "m29269e5e9a31", + "Failed to create project": "m518e6db15484", + "Failed to disconnect": "mb7668a581f59", + "This repository was already imported. Check your projects list.": "m2c8a751cc59c", + "Failed to load templates": "mddeafa3a6bff", + "Failed to create environment": "mfec94ff32afa", + "The AI took too long to respond. Your work is safe.": "m775e5142a0b0", + "Could not authenticate with the AI provider. Check your API key.": "m1ed48e13f504", + "The AI encountered errors during the build. It can try to fix them automatically.": "m6519f92fc1e8", + "The selected model is not responding. Try switching to a different model.": "macc567972bd9", + "This prompt is no longer active.": "m79d71120bff3", + "Failed to resolve conflicts": "med2052a25624", + "Failed to abort merge": "m02c981a0b3e5", + "Failed to switch account": "m06fbbd1227cb", + "Failed to restore version": "m3ba5eb2c517c", + "Failed to load metrics": "m0fff3eaed3ba", + "Failed to load context files": "m11660a0100e7", + "The new Supabase project is ready and the credentials are connected. Please continue building now — use the Supabase env vars per this project's framework conventions (see your env-var rules above), and keep SUPABASE_SERVICE_ROLE_KEY server-side only.": "me5601bf24b32", + "The requested integration is now connected. Please continue and use its env vars and tools from the connected-integrations block.": "m92e733c93623", + "No response body": "m9fc4fcabe3ce", + "This step is taking longer than usual…": "m6488ad70750a", + "The plan has been approved. Please start building it now, step by step. Follow the plan in .doable/plan.md.": "m6d415794dcd0", + "Failed to approve plan:": "m6b89042219d2", + "Failed to abandon plan:": "m5adf207f5d2f", + "Failed to get status": "mcad1033336ed", + "Failed to load repos": "me7acfaa4d990", + "Failed to fetch file tree": "m20065c697e90", + "Failed to fetch file tree:": "m00d44a640200", + "Failed to read file:": "m7d36047f62cb", + "Failed to save file": "ma11e2c2cca33", + "Failed to save file:": "m8837dabd1b3f", + "Failed to create file": "mfd7ee8c9b765", + "Failed to delete file": "m4be7167b42f2", + "Failed to delete file:": "m02f362d9d360", + "Failed to toggle analytics:": "m3342fc6ab864", + "No vulnerabilities found": "m854ffc76dae2", + "No hardcoded secrets found": "m6d74aa85ab11", + "No sensitive data found in source files": "m3796755a6d14", + "No security anti-patterns found": "m5884884d4a46", + "Failed to save:": "mc79f9389a95a", + "Failed to create folder": "m6e99e5419d22", + "Failed to rename file": "mbba9caec6786", + "Failed to move file": "m6b79e319f042", + "Failed to rename file:": "m23eba0b9be4d", + "Failed to copy path to clipboard": "mf46a9d658a25", + "Failed to create context file:": "m9086a92b0640", + "Failed to load versions": "m12f902a8ad17", + "No version selected": "mcc3b8b19aabe", + "Failed to assign environment:": "m849d793bef40", + "Failed to load environments": "mb7d8d2c9a4b3", + "Failed to create": "m99af0e812303", + "Failed to start OAuth flow": "me8d8c2aa2455", + "Failed to start enhanced auth": "m54a5f040fdc6", + "Failed to save credentials": "m81c865717d30", + "Failed to load integrations": "m2dd7d312a651", + "Failed to update": "m8eb4917bbe54", + "No auth needed": "m88563d1f786d", + "Failed to load catalog": "m81454f428d2e", + "Failed to file report": "m364e701ac186", + "Failed to add server": "mb498c7ef2e2b", + "Connection test initiated": "mfb23f43b0848", + "Could not discover this server's OAuth endpoints. Check the server URL is still reachable.": "mf69e33af723e", + "Failed to start re-authentication": "m8fd9698f6822", + "Failed to delete project": "me0e158d1a1c5", + "Failed to load AI settings": "m25446f2f1d63", + "Failed to add domain": "m5fc4c4b3e470", + "Failed to remove domain": "mfbc3b14bc5b6", + "You have unsaved changes": "ma4b17bc7db59", + "Failed to load rate limit settings": "m3d99cc91be52", + "Failed to load API keys": "m78bef06b934f", + "Failed to create key": "mac0faf623b6b", + "Failed to revoke key": "md3b8762758d8", + "Failed to set project environment:": "m03ccf434d293", + "Failed to load project": "mb84177fa1580", + "Failed to get data token": "meacb01abdcf6", + "Failed to load schema": "m6c1e1de39441", + "Failed to drop table": "m9ed1f7cf0aba", + "Failed to reset database": "ma6013efaacd9", + "Failed to load migrations": "m1a8dccc9e37f", + "Failed to enable row-level security": "md18e10549a59", + "Failed to load MCP servers": "m6938cc96576b", + "Failed to load skills & rules": "m6b8d7a31a410", + "Failed to load skills": "m78f5005a18ba", + "Failed to revoke invite": "mac674f0b0e04", + "Failed to generate link": "mdf556f74a44f", + "Failed to copy to clipboard": "m978a1dc5401a", + "Failed to delete workspace": "m8a95759bc08a", + "No workspace selected": "m12b33b8cab97", + "GPT-5.5, GPT-5.4, GPT-4.1, o3, o4, and more — the full OpenAI lineup": "m1bfb9a169566", + "Claude Opus 4.7, Sonnet 4.6, and Haiku 4.5 from Anthropic": "ma57ba2df86e9", + "Gemini 3.1 Pro, 3.5 Flash, 2.5 Pro and Flash via Google AI Studio": "m42f002bd954b", + "OpenAI models hosted on Microsoft Azure (GPT-5.5, 5.4, 4.1, 4o)": "m7059e2430151", + "Foundation models via AWS Bedrock (Claude, Llama, etc.)": "m11a4f35f2288", + "Google Vertex AI with Gemini, Claude, and more": "mf401c755a254", + "Access 200+ models from all providers through one API": "mef12689c0df3", + "Open-source models with fast inference": "m281caa6db5e3", + "Blazing-fast inference for open-source models": "m3fbb3a60d15a", + "Smart routing across LLM providers for optimal cost/quality": "mcbf219b50afc", + "Curated, benchmarked AI models optimized for coding agents — pay as you go": "m62c9cd419e85", + "Low-cost open coding models — $5 first month, then $10/mo": "m0d9934ad122e", + "Kimi K2.6 (262k ctx) — long-context autonomous agent model from Moonshot AI": "m45ac1366f829", + "Qwen 3.6 Plus (1M ctx) and other models via Alibaba DashScope": "m7e60fda55835", + "GLM models from Zhipu AI (Tsinghua-backed)": "mdd88cf49f85c", + "ERNIE and other models via Baidu Qianfan": "mad1621b95174", + "Doubao models from ByteDance's Volcengine": "me5c0e7d030c2", + "MiniMax M2.7 (205k ctx) and M2.5 — strong coding & agent models": "mea917b1e5993", + "Step models with strong reasoning capabilities": "m2f40080fde12", + "Yi series models from Kai-Fu Lee's 01.AI": "mc0fd27dd2462", + "Hunyuan large language models from Tencent": "mca46a1f353d1", + "Wafer-scale AI chips with ultra-fast inference": "m0789c34b7782", + "Jamba and Jurassic models from AI21 Labs": "m90e31bb9ef46", + "Decentralized AI compute marketplace": "m1e3b881b6bf5", + "Serverless inference for popular open-source models": "m94e4ba89adce", + "NVIDIA-optimized model inference microservices": "m162c0405e75f", + "Run AI models on Cloudflare's global edge network": "mc02a911cc422", + "European AI cloud with GPU infrastructure": "m8c6e1ff78019", + "French cloud provider with AI inference endpoints": "md2520b053464", + "Budget-friendly AI inference platform": "mbb50ba53b742", + "Serverless AI platform with per-model endpoints": "m1c9a4f83f2ba", + "European cloud with sovereign AI endpoints": "mc62c862895c9", + "Ultra-fast LPU inference — free tier with no credit card": "m803f5c2de1fc", + "Mistral Large 3, Medium 3, Small 4, and Codestral 2508": "m4a6191e28da1", + "Enterprise-focused RAG and command models": "m34fc1656f697", + "Grok 4.20 (2M ctx), Grok 4.3 (1M ctx), Grok 4.1 Fast and Grok 3 Mini from xAI": "m279d41d16c35", + "DeepSeek V4 Pro & Flash — 1M ctx, open-weight MoE from China": "m61f057961dce", + "Search-augmented AI with real-time web access": "mcb5d90692af1", + "High-throughput AI inference on custom hardware": "me64591b66e23", + "Affordable GPU cloud for LLM and image generation": "m98b29bed00e9", + "Decentralized AI inference infrastructure": "m7bbc04b4ac78", + "Run LLMs locally with one command — most popular local engine": "mf0219f5a51a9", + "Desktop app to discover, download, and run local LLMs": "m21b0f67360f6", + "High-throughput LLM serving with PagedAttention": "m299c12786d97", + "C/C++ LLM inference with minimal dependencies": "m176f619ac21e", + "Open-source desktop AI assistant with local model support": "m6f92db761337", + "Drop-in OpenAI replacement running locally with various backends": "m01dc4dbe696e", + "Privacy-first local AI — runs on consumer hardware": "m244fded4e09a", + "No tool calling, no vision — most limited of primary engines": "m230665563339", + "Gradio web UI for running large language models": "mdfdaf12a82f2", + "Easy-to-use GGUF runner with built-in web UI": "ma0b5c98fbd84", + "Text Generation Inference by HuggingFace": "m45540635cd46", + "Self-hosted AI coding assistant": "m68cec3ffa8b3", + "Single-file executable LLMs by Mozilla": "mb7d79c357b8f", + "Local AI engine from the Jan team — multi-engine support": "m23445c5d1873", + "Run LLMs as Docker containers with built-in GPU support": "m74a7ddeefd94", + "Efficient LLM deployment toolkit from Shanghai AI Lab": "me098f8bee7f4", + "Fast serving framework for large language and vision models": "md4909cab2e30", + "ExLlamaV2-based API server for fast GPTQ/EXL2 inference": "m5ce23da7d641", + "Machine Learning Compilation for universal LLM deployment": "m13b1820c01c7", + "High-performance inference engine (vLLM fork) for roleplay and creative use": "mf24ad819b717", + "Desktop AI chat app with local and cloud model support": "m2a746b70859f", + "Self-hosted web UI for local and remote LLMs": "mbeac9f3fa80a", + "Open-source ChatGPT-like UI supporting multiple providers": "mf0348548ae93", + "OAuth authentication failed. Please try again.": "m906f3d903741", + "Access was denied. Please try again.": "mfd033bff00ba", + "Your signup was not approved.": "m84c480693ab2", + "AI settings saved": "mc4da52bf3ef6", + "AI settings reset": "m569a3f9b4fa7", + "Bulk applied to {v0} users — {v1}": "m2e9fd8e7d617", + "{v0} → {v1}": "m3d8ef18bd4f0", + "{v0} → {v1} plan": "m702238944012", + "Credits updated for {v0}": "mff17b501efe0", + "Failed to {v0} {v1}": "ma7e0127349ec", + "Unblocked {v0}": "m176685608555", + "Failed to unblock {v0}": "m8fc1d649fea0", + "\"{v0}\" deleted": "mab729c2f1cd7", + "Failed to delete \"{v0}\"": "m2e5063f18b58", + "{v0} project{v1} deleted": "mcae3da3b84cd", + "Couldn't load the Discover feed. Please try again.": "m8281f2bca24e", + "Couldn't load projects. Please try again.": "mcd99493692c6", + "Only workspace owners / admins can change workspace defaults.": "mad1c9c1a3f66", + "Workspace AI defaults saved.": "me5f88a6a15eb", + "text-amber-400 bg-amber-500/10": "m96d8a2f81d45", + "text-blue-400 bg-blue-500/10": "meb2135781360", + "text-muted-foreground bg-muted": "m80e515468102", + "Tech stack, conventions, domain terms": "m29145bd2ff95", + "Rules for the AI to follow": "m267eae2e206e", + "Brand voice and personality": "m3bd961d29f18", + "Core values and mission": "m19c44fb9ed12", + "Persistent facts and preferences": "mf1022ee92088", + "User context and background": "m9c559d4d4f2c", + "Project roadmap and milestones": "mbf180e7a2452", + "Access was denied by the provider.": "mc44fbad1ceff", + "Authorization code was missing.": "m0012375416df", + "Welcome": "m0e2226b5235f", + "Sign-in": "m5bbbe53187ad", + "AI Provider": "m84e1ec2c5bd3", + "Cloudflare": "mf9191531404c", + "Plans & Billing": "mad9ff7b7934e", + "Choose Provider": "mfd72092904a8", + "Validate": "m40611abbdda2", + "Planning…": "mb20ee2a85fa5", + "Waiting for your input": "mb68613d48751", + "Reading files…": "mc3ec64928d7d", + "Writing code…": "mfeee86f87fe7", + "Running command…": "m2ff5dfc77241", + "Fixing issues…": "mbea44ca44951", + "Installing packages…": "m95de7a5b1f8f", + "Running tests…": "m280d3efaadd1", + "Responding…": "md53b790e544c", + "Cancelled": "md353a99eb455", + "Loading page...": "mcf65fc4a78bc", + "Analyzing performance...": "m566167b27677", + "Checking accessibility...": "m9b0245d6e807", + "Generating report...": "m194254c2fabd", + "Communication": "m3981a2b9c1ef", + "Developer Tools": "m85c1562cd9ce", + "CRM & Sales": "m12f9e542a4a5", + "Finance & Payments": "ma4ca9a859b99", + "AI & ML": "m4edf08238dde", + "Data & Storage": "m31423c3c9989", + "Social Media": "m8dfdbc2ef439", + "E-Commerce": "m572480ceef9b", + "Project Management": "m58a34ff5ee9e", + "Customer Support": "med07c04922e0", + "HR": "m15e68b1f4657", + "Automation": "md909750b1bbb", + "Username & Password": "m05e43eb0f640", + "Web service": "m61bebbf883a8", + "HTTP streaming": "m04520ef10d76", + "HTTP SSE": "mb192572d71ea", + "Built-in app": "mb7b2963682a5", + "managed": "m7fdfda5f50a4", + "Saved {v0}": "mfe00af08cc4f", + "Project deleted successfully": "m4dd069cac807", + "Transfer request sent. The recipient will receive an email to accept.": "m2bc6b9b66cbf", + "Doable settings saved.": "m04d2a1d27e3f", + "Type \"ERASE\" exactly to confirm.": "ma01bbf2233a1", + "Erased {v0} rows across {v1} table(s). Mode: {v2}.": "mbed8e537b6cb", + "Domain {v0} added. Configure your DNS records below.": "m0880f7d59cd3", + "{v0} is now active!": "m8884f64ece53", + "Domain removed": "m186cc53091ad", + "Project settings saved": "m5a8a5887401e", + "Rate limiting settings saved": "mdb4653c7fed7", + "API key created — copy it now, it won't be shown again": "mca702c65aac4", + "Key revoked": "m697393c778b5", + "Invite sent to {v0}": "me4dc2f78bb78", + "{v0} has been removed": "m6afe87e532b3", + "Updated {v0}'s role to {v1}": "m958814af76e3", + "Revoked invite for {v0}": "m5aebb558ca6a", + "Invite link generated": "m255cd0e91bb6", + "Workspace deleted successfully": "ma459ff6332b7", + "Transfer request sent.": "m6bdabff6ddfa", + "Workspace settings saved": "mdfbfb561815a", + "Bring frontier AI into every enterprise. Empower every FDE.": "m945131b556b7", + "Understand business needs. Build working applications. Take AI from demo to delivery.": "mbe8ba6b03cc1", + "I want to send my friend a working app.": "m45855bb05ece", + "Deploy → share the URL.": "m8870ef6e570f", + "I want others to fork my project as a starting point.": "m7b14e3ebcb54", + "Share to Discover.": "m0697819879dd", + "I built a useful set of skills + rules and want others to install them.": "me4b4d937bb3c", + "List on Marketplace.": "ma6855cfa2e04", + "I want to charge for an AI environment I built.": "m92add4e44710", + "List on Marketplace with a price (Stripe Connect required).": "mc1e189e00075", + "Agent": "m11b39c93777e", + "Context": "ma6e600a10fed", + "e.g. Read-only planning tools": "m64fce9d5ffd4", + "e.g. Always answer in concise bullet points. Never reveal internal pricing. If you don't know, say so.": "mbc1a02882357", + "e.g. Dashboard, Settings, Pricing": "m6976f80ee219", + "e.g. My App": "m0868745e457a", + "e.g. You always answer in haiku.": "m11a59c70fe9f", + "e.g. React Best Practices": "m81c1f9879c76", + "e.g. TypeScript Conventions": "m593af471fb94", + "e.g. claude-sonnet-4 (blank = auto)": "m22d3c604d149", + "e.g. gpt-4o": "mc6a41eb77538", + "e.g. gpt-4o, claude-sonnet-4": "m57bf75e785b4", + "e.g. POST /chat": "m3d0e1a4bef76", + "e.g. style-guide, api-docs": "m10571c479770", + "e.g. MiniMax-M2.7, gpt-4o, claude-sonnet-4": "m8987aa914076", + "e.g. grok-3, qwen-turbo, llama-3.1-70b": "m644d8dedb20f", + "e.g. mixtral-8x7b, llama-3.1-70b": "m7f71b9ebafee", + "e.g. password=\\\\S+": "mad3913747c59", + "e.g. claude-sonnet-4 (leave blank for auto)": "m0d042ad55974", + "e.g. React + Supabase": "mdeee27768716", + "e.g. Notion, Slack, My API": "m228e712922fb", + "e.g. text-embedding-3-small or gemini-embedding-001": "m34496619eba6", + "Custom OpenAI-compatible": "m80ef0ed787b1", + "Step {current} of {total}": "mdc1249ded00f", + "Show all {count} providers": "m86d376d01c97", + "({count} popular shown)": "m781978fa4c25", + "Plan mode": "m3ca7d842d120", + "Build mode": "me6c13915614a", + "Let's make it Doable, {name}": "me012cf0c64ea", + "What's Doable today, {name}?": "mb48bddfa2484", + "Ready to get it done, {name}?": "m69d3f0312d50", + "Dream it. Do it, {name}": "m8449d78cdc66", + "What will you ship, {name}?": "m79824f18e830", + "Describe the business workflow you want to build...": "m4fc94bed6b66", + "Build a SaaS landing page with pricing...": "m5dd9c70d5861", + "Create a portfolio website with animations...": "m082a69fe14eb", + "Design a task management app...": "m8e15a147e1fa", + "Make an e-commerce store with checkout...": "m5d8436b7898b", + "Build a social media dashboard...": "mb698b2eb1332", + "Create a recipe sharing platform...": "mce4fad2f76c1", + "Design a fitness tracking app...": "m80ab5a32d5fa", + "Build a blog with markdown support...": "mc312e5c16367", + "Create a real-time chat application...": "m2376d6697630", + "Make an invoice management system...": "mb5d9619378c8", + "Preparing workspace...": "m917131e15fce", + "Creating project scaffold...": "mfe8383d5a335", + "Creating project files...": "md30642dc738e", + "Creating project files…": "me232bcde0526", + "Installing dependencies...": "ma3277495f754", + "Starting dev server...": "m9d7a7a4c4b38", + "Setting up your workspace...": "m723a6d7e4364", + "Preparing live preview...": "ma2ccc3533bd6", + "Getting things ready...": "m19e5fe04c9a2", + "Starting the live preview so you can see changes instantly.": "m4a7624b24100", + "AI is still working on your project...": "m01d89a8ad232", + "Preparing to build your presentation…": "m05222d08b282", + "Writing response...": "mb0eaeacb1b36", + "Connecting to AI…": "mc898850137a8", + "Analyzing your request…": "m426613755962", + "Task cancelled": "m1a7f1e13e7ad", + "Thinking...": "mb4739a4f0865", + "Resolving {package}… ({count} packages)": "m0149c7b12cba", + "Installed {count} packages": "md5419b7b64cb", + "Installing packages… ({seconds}s)": "m5f2d69594194", + "Downloading and linking packages… ({seconds}s)": "mb708e0e2313c", + "Dependencies installed ({seconds}s)": "m79c009d210ab", + "Loading preview… ({seconds}s)": "m0e2c8a0f7968", + "Downloading packages… ({seconds}s)": "m9335b34496db", + "Installing dependencies… ({seconds}s)": "m322ee38b8f8f", + "Linking packages… ({seconds}s)": "me2a11607dd18", + "Almost there… ({seconds}s)": "mb661a5695b24", + "AI Chat": "mfe98f42cd51a", + "AI chat and code generation": "m5466ef4b84a5", + "Configure AI models, providers, and enforcement": "me605122cbc04", + "Click-to-edit visual editing in preview": "m7d6a0afa7884", + "Monaco code editor (Dev Mode)": "mbac7a2b4b2a8", + "Connect and sync projects with GitHub": "md974b925781d", + "Publish / Deploy": "m624629124403", + "Publish projects to doable.me or custom domains": "mf2792c4a79d6", + "Use your own domain for published apps": "m991a7731aca7", + "Create projects from templates": "m5a479c403e5b", + "Built-in analytics for published apps": "mfddc1730af3e", + "Billing & Credits": "m92349d06fd0e", + "Manage subscriptions and credits": "me2dc79aa3ffc", + "View and restore previous versions": "m3e42eb218756", + "Create and manage workspaces": "m2e2d90970121", + "Invite and manage workspace members": "m8ec6f568c9e2", + "Configure integrations and MCP servers": "m767b6b8b1593", + "Security scanning and vulnerability management": "m9e61318b08e7", + "Frontend": "maf48bcf0b951", + "Full-Stack": "mfa4bec978e4d", + "Disable {name}": "mc6629edc7478", + "Enable {name}": "mdd01fc045da3", + "workspace enforcement": "m2a52bd3a58de", + "user preference": "mce28416a34d0", + "workspace Copilot setting": "m1d17f10c9a01", + "workspace custom provider": "m4c9f0ab64fff", + "workspace setting": "m356a31b41f9f", + "no model configured": "m9062da45215a", + "Custom provider (workspace default)": "m06bde129f751", + "GitHub Copilot (workspace default)": "m404dd0fc90d3", + "Understanding your request...": "mbc228f06a4ea", + "Reading file": "m33e97951020d", + "Creating file": "m88efdc56ec01", + "Updating file": "m7fd76d274fb7", + "Removing file": "m1a446bee1668", + "Renaming file": "m20c0b499fac0", + "Searching files": "mbc9797766c2d", + "Scanning project structure": "m53b7a62c2b78", + "Running command": "m2afb17673ff9", + "Deploying preview": "mb1a6be4b5c00", + "Editing file": "mcba0c8fabef9", + "Writing file": "m91713a5d3c5b", + "Overwriting file": "md09a58e07d38", + "Deleting file": "ma9a47efd4886", + "Scanning directory": "m15d4ba596aa0", + "Searching codebase": "m3957258571ff", + "Finding files": "m4f27ff8a9cc5", + "Executing command": "md7ad4e191ef9", + "Running shell": "m5efc7bfe04a0", + "Running tests": "m6effe77ed662", + "Running lint": "m68e34b04db6e", + "Type checking": "me713536fedeb", + "Updating plan": "m7dc0e0a3a1f5", + "Auto-fixing issue": "mdf26331fb78b", + "Retrying step": "m4e8b16c1f54b", + "Designing your presentation slides…": "m5bb23468896b", + "Improve the styling": "m8ca687195aba", + "Add responsive design": "m7d95e21c9692", + "Add more features": "m534cb2034f7d", + "Fix any issues": "m6ea57583614b", + "Query": "mb80a37564fbb", + "Data Schema": "me1338481990b", + "Data Migrate": "mc3682617bf76", + "ask clarification": "m3d60df7cd3a8", + "Ask Clarification": "mc7c1762aa46c", + "task": "m0ebb429fa86d", + "Task": "m4bc74b21357c", + "grep": "mfaefbbbf05cb", + "Grep": "m16970ed6824c", + "Reading {target}": "m4fe2446c5d9a", + "Creating {target}": "m733d78fc0c8c", + "Updating {target}": "m2d680ebf7ad0", + "Removing {target}": "m58534c10200b", + "Renaming {target}": "m2b8a5d29d7d1", + "Installing {target}": "mb3712e7e124e", + "Editing {target}": "m460f508f8f46", + "Writing {target}": "m689db228e3c6", + "Overwriting {target}": "m12ce3689b195", + "Deleting {target}": "maae90d6ab181", + "Step {count} — {label}": "mf9ed6916fef7", + "Applied {count} changes": "mbb8ce4ef7aaa", + "Here are my answers to your questions:\n\n{answers}": "mfd1514afd62f", + "Start building! Here's the approved plan:\n\n**{summary}**\n\n{steps}\n\nBuild each step in order. The full plan details are in .doable/plan.md.": "m6b7a91a49a2a", + "Code Editor": "mff52ef58a138", + "Security Center": "m10d6e2392b1c", + "Visual Editor": "ma05f18eec8ce", + "Workspace Members": "mcff2a9d647e2", + "Found a preview issue — fixing it...": "m5acc0da25133", + "Fixing preview issue...": "m2127e84f4092", + "Adding new capabilities": "me118ae85bb67", + "Setting up your presentation": "m82ba2b5792a6", + "Rendering your slide deck": "mb681b20c70f6", + "Build ran into an issue — working on a fix": "m83f857a021fe", + "Had trouble adding that package": "mc57a09e8f369", + "Hit a snag — figuring it out": "m5477a72320eb", + "Added to your project": "m679e84cac5ea", + "Changes applied": "m9cf6dbd76c0c", + "Got it": "m5ad3dbd1242a", + "Project mapped out": "m313bf98ff918", + "Search complete": "m227a147b3240", + "Ready to use": "m996f87b386e1", + "Build complete": "md9e44c03b78d", + "Cleaned up": "m7e8ae4865e72", + "Live and ready": "mc884daae36e7", + "Issue encountered": "m59ccecd04642", + "Running: {target}": "m28628c237508", + "Refining {target}": "m62f328b65a01", + "Reviewing {target}": "m1e5628b48f6b", + "Searching for {target}": "m7d0d333d12fa", + "Cleaning up {target}": "mf22270321c72", + "Running {target}": "m1154e06d2d21", + "Adding {target} to your toolkit": "m186e66214b5a", + "Building your {context} — {target}": "m93f848de10fd", + "component": "m6985ca1f4daa", + "UI element": "mab1620a8c2e3", + "feature": "m2ad562319767", + "utility": "m57ffcc28d4b9", + "styles": "m90a7578caf87", + "layout": "m1dc5ae5b6817", + "configuration": "mb7d64a922100", + "documentation": "mcaf9f906b16a", + "Here are my answers:\n{answers}": "m329430355fc1", + "Loading project…": "mae9d0d1aff24", + "Show {count} earlier steps": "me081c4bfb49e", + "Show full prompt ({count}k chars)": "mb528a28640bd", + "Showing {count} of {total} projects": "m0c556fb76846", + "Delete {count} projects": "mc3aedd418ebf", + "Showing {start}–{end} of {total}": "m64af6de234a6", + "Start fresh": "m652aceea790a", + "AI generates": "m681b16c2176f", + "Pre-built": "mf817b660ab75", + "All workspace members": "me22006500c10", + "Project members": "m96f64f836aa3", + "AI helps you plan, then does the work": "ma0dff9932953", + "AI writes code directly": "m7cbc9f73acfd", + "New line in chat": "m6496c935887f", + "Toggle code view": "mf7dfc2c317b4", + "Toggle preview": "m87ab3cc0f01d", + "Deploy project": "mcb2958c8aaca", + "Toggle fullscreen": "mc13ff73b9098", + "Close dialog": "mc8df66c5fe3f", + "Design a portfolio site": "mbb0ee409a3fa", + "Preview failed to start.": "m99fb9cd2934b", + "Preview failed to start (exit code {code}).": "me64576a3b265", + "Connecting to AI model...": "mc196e9373911", + "Completed {count} actions": "m829805cc6c58", + "Plan finished": "mcacdca0e9b99", + "Executing plan": "m9776f2e45ce3", + "Plan needs attention": "m311d1760445a", + "Plan paused": "mec71278eb553", + "Steps show reported results, not elapsed build time.": "m5ee0169f4b8f", + "No active run. Unreported steps remain unconfirmed.": "m1deff346b554", + "Could not approve plan. Please try again.": "m5776262a5788", + "Interface language": "m8027f432a7fb", + "Choose the language used by platform menus and messages.": "m0ea4ae59f939", + "This changes the platform interface only. AI replies and generated apps use their own instructions.": "m40cad2173656", + "Personal interface preferences": "mc3a720f0c8bd", + "Interface language does not change AI replies or generated apps.": "m6998dfbbd128", + "Connecting to AI...": "m0beff060665e", + "AI is writing code...": "me50a077692e0", + "AI is analyzing the project...": "m619eec4a7c1f", + "Checking task progress": "mdb3aec359d8f", + "Checking task progress...": "m35ea86212979", + "Result not confirmed": "ma5d341a5b0db", + "Task stopped before completion": "me125680b1485", + "Task status could not be confirmed. Please resume the task or choose a model with tool calling support.": "mefaddeef953d", + "The task made no new progress across repeated attempts. You can resume it without losing completed steps.": "m87722fea3039", + "The task reached the continuation limit. Completed work is preserved; resume to continue.": "m30e9da875aed", + "No completion result received": "me017a9daa432", + "Recorded {count} actions": "m5b9442561788" +} diff --git a/apps/web/messages/source.json b/apps/web/messages/source.json new file mode 100644 index 00000000..a4a3f3ef --- /dev/null +++ b/apps/web/messages/source.json @@ -0,0 +1,39435 @@ +{ + "m797b4f031eac": { + "source": "Authentication Error", + "locations": [ + { + "file": "app/(auth)/error.tsx", + "kind": "jsx" + } + ] + }, + "m0c953ab32c60": { + "source": "Something went wrong.", + "locations": [ + { + "file": "app/(auth)/error.tsx", + "kind": "expression" + } + ] + }, + "md8b8392e2c54": { + "source": "Try again", + "locations": [ + { + "file": "app/(auth)/error.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/error.tsx", + "kind": "jsx" + }, + { + "file": "app/auth/callback/page.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m40c55c136901": { + "source": "Back to Login", + "locations": [ + { + "file": "app/(auth)/error.tsx", + "kind": "jsx" + } + ] + }, + "m3ccd9d6586ef": { + "source": "Something went wrong. Please try again.", + "locations": [ + { + "file": "app/(auth)/forgot-password/page.tsx", + "kind": "feedback" + }, + { + "file": "app/(auth)/login/page.tsx", + "kind": "feedback" + }, + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "feedback" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "feedback" + } + ] + }, + "m7732287944e2": { + "source": "Check your email", + "locations": [ + { + "file": "app/(auth)/forgot-password/page.tsx", + "kind": "jsx" + } + ] + }, + "m9c2fe02045e2": { + "source": "If an account exists for", + "locations": [ + { + "file": "app/(auth)/forgot-password/page.tsx", + "kind": "jsx" + } + ] + }, + "mcb46c5c12546": { + "source": ", we've sent password reset instructions to your inbox.", + "locations": [ + { + "file": "app/(auth)/forgot-password/page.tsx", + "kind": "jsx" + } + ] + }, + "me0a32889eacc": { + "source": "Didn't receive the email? Check your spam folder or", + "locations": [ + { + "file": "app/(auth)/forgot-password/page.tsx", + "kind": "jsx" + } + ] + }, + "m5b5dedee32c5": { + "source": "try again", + "locations": [ + { + "file": "app/(auth)/forgot-password/page.tsx", + "kind": "jsx" + } + ] + }, + "m71fe31ccd37c": { + "source": "Back to sign in", + "locations": [ + { + "file": "app/(auth)/forgot-password/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(auth)/forgot-password/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(auth)/login/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(auth)/login/page.tsx", + "kind": "jsx" + } + ] + }, + "mafd25fdf17c7": { + "source": "Forgot your password?", + "locations": [ + { + "file": "app/(auth)/forgot-password/page.tsx", + "kind": "jsx" + } + ] + }, + "m6cc4c62eef9a": { + "source": "No worries. Enter your email and we'll send you reset instructions.", + "locations": [ + { + "file": "app/(auth)/forgot-password/page.tsx", + "kind": "jsx" + } + ] + }, + "mf2488fd4ef4a": { + "source": "Email address", + "locations": [ + { + "file": "app/(auth)/forgot-password/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/workspace/components/members-dialogs.tsx", + "kind": "jsx" + } + ] + }, + "m53e6cdc30765": { + "source": "you@example.com", + "locations": [ + { + "file": "app/(auth)/forgot-password/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(auth)/login/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "attribute" + } + ] + }, + "m286a3af7348e": { + "source": "Sending...", + "locations": [ + { + "file": "app/(auth)/forgot-password/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/marketplace/report-listing-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/workspace/components/members-dialogs.tsx", + "kind": "expression" + } + ] + }, + "m2e217636019b": { + "source": "Send reset instructions", + "locations": [ + { + "file": "app/(auth)/forgot-password/page.tsx", + "kind": "expression" + } + ] + }, + "m9e605fcf232b": { + "source": "自然语言生成应用 · 内部测试平台", + "locations": [ + { + "file": "app/(auth)/layout.tsx", + "kind": "jsx" + } + ] + }, + "mb5f64aac226f": { + "source": "By continuing, you agree to our", + "locations": [ + { + "file": "app/(auth)/layout.tsx", + "kind": "jsx" + } + ] + }, + "m4afa55bf7aec": { + "source": "Terms of Service", + "locations": [ + { + "file": "app/(auth)/layout.tsx", + "kind": "jsx" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(legal)/layout.tsx", + "kind": "jsx" + } + ] + }, + "m6201111b83a0": { + "source": "and", + "locations": [ + { + "file": "app/(auth)/layout.tsx", + "kind": "jsx" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m506ff3946215": { + "source": "Privacy Policy", + "locations": [ + { + "file": "app/(auth)/layout.tsx", + "kind": "jsx" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(legal)/layout.tsx", + "kind": "jsx" + } + ] + }, + "m3c8432b0c6a7": { + "source": "Verification failed. Please try again.", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "feedback" + } + ] + }, + "m4fcf29ae7ef2": { + "source": "You're on the list", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + } + ] + }, + "mb6824cc8a91e": { + "source": "Two-factor authentication", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + }, + { + "file": "app/auth/callback/page.tsx", + "kind": "jsx" + } + ] + }, + "md9708dace524": { + "source": "Enter the 6-digit code from your authenticator app, or a recovery code.", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "jsx" + }, + { + "file": "app/auth/callback/page.tsx", + "kind": "jsx" + } + ] + }, + "m3ee75029c70e": { + "source": "Verification code", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "jsx" + } + ] + }, + "m3dd86d618eaf": { + "source": "123456 or recovery-code", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "attribute" + }, + { + "file": "app/auth/callback/page.tsx", + "kind": "attribute" + } + ] + }, + "m2ec1ac7d45e8": { + "source": "Verifying...", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "jsx" + }, + { + "file": "app/auth/callback/page.tsx", + "kind": "jsx" + } + ] + }, + "mf6778950d77c": { + "source": "Verify and continue", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "expression" + }, + { + "file": "app/auth/callback/page.tsx", + "kind": "expression" + } + ] + }, + "m54f9715d07d2": { + "source": "Sign in to your account", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "jsx" + } + ] + }, + "m7b9db77e0178": { + "source": "Continue with GitHub", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + } + ] + }, + "mcce937e89144": { + "source": "Continue with Google", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + } + ] + }, + "me3324559f7c8": { + "source": "Or continue with email", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "jsx" + } + ] + }, + "m969ccbd3cf63": { + "source": "Email", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/audit/[sessionId]/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "data" + } + ] + }, + "me7cf3ef4f17c": { + "source": "Password", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "jsx" + } + ] + }, + "m30c1d8d3e912": { + "source": "Forgot password?", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "jsx" + } + ] + }, + "mc06bf9670174": { + "source": "Enter your password", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "attribute" + } + ] + }, + "ma60a56c584b3": { + "source": "Hide password", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "expression" + }, + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "expression" + }, + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "expression" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "expression" + } + ] + }, + "m6aeaa6a53d09": { + "source": "Show password", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "expression" + }, + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "expression" + }, + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "expression" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "expression" + } + ] + }, + "mf93267aa11e8": { + "source": "Remember me", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "jsx" + } + ] + }, + "m1f96f5d016bd": { + "source": "Signing in...", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "jsx" + } + ] + }, + "mbfd402b2f6f3": { + "source": "Sign in", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "expression" + }, + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + } + ] + }, + "m1b545b23fae3": { + "source": "Don't have an account?", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "jsx" + } + ] + }, + "m5e2b8e96503d": { + "source": "Sign up", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "jsx" + } + ] + }, + "m8d6cea2517ff": { + "source": "Weak", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "data" + }, + { + "file": "app/(auth)/signup/signup-utils.ts", + "kind": "data" + }, + { + "file": "app/(dashboard)/settings/settings-helpers.tsx", + "kind": "data" + } + ] + }, + "mf7b19afcde96": { + "source": "Fair", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "data" + }, + { + "file": "app/(auth)/signup/signup-utils.ts", + "kind": "data" + }, + { + "file": "app/(dashboard)/settings/settings-helpers.tsx", + "kind": "data" + } + ] + }, + "mc939327ca16d": { + "source": "Good", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "data" + }, + { + "file": "app/(auth)/signup/signup-utils.ts", + "kind": "data" + }, + { + "file": "app/(dashboard)/settings/settings-helpers.tsx", + "kind": "data" + } + ] + }, + "m30a04fdcb6bb": { + "source": "Strong", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "data" + }, + { + "file": "app/(auth)/signup/signup-utils.ts", + "kind": "data" + }, + { + "file": "app/(dashboard)/settings/settings-helpers.tsx", + "kind": "data" + } + ] + }, + "m977f3b2676a9": { + "source": "At least 8 characters", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "data" + }, + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(auth)/signup/signup-utils.ts", + "kind": "data" + } + ] + }, + "m3354e2819414": { + "source": "Uppercase letter", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "data" + }, + { + "file": "app/(auth)/signup/signup-utils.ts", + "kind": "data" + } + ] + }, + "m168d366549bb": { + "source": "Lowercase letter", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "data" + }, + { + "file": "app/(auth)/signup/signup-utils.ts", + "kind": "data" + } + ] + }, + "mbd82cf16699b": { + "source": "Number", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "data" + }, + { + "file": "app/(auth)/signup/signup-utils.ts", + "kind": "data" + } + ] + }, + "m7f7cd67bcf4d": { + "source": "Invalid reset link", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "jsx" + } + ] + }, + "m039dc4816602": { + "source": "This password reset link is invalid or has expired. Please request a new one.", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "jsx" + } + ] + }, + "m76897da9593b": { + "source": "Request new reset link", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "jsx" + } + ] + }, + "ma702a922e26a": { + "source": "Password reset successful", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "jsx" + } + ] + }, + "m2da2987c9882": { + "source": "Your password has been updated. You can now sign in with your new password.", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "jsx" + } + ] + }, + "m6c6e178ad2a8": { + "source": "Passwords do not match.", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "feedback" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "feedback" + } + ] + }, + "m9283b095813b": { + "source": "Password is too weak. Use at least 8 characters with uppercase, lowercase, and numbers.", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "feedback" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "feedback" + } + ] + }, + "m6ee6d9db4278": { + "source": "Set new password", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "jsx" + } + ] + }, + "m4986b95da4ef": { + "source": "Your new password must be different from your previous password.", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "jsx" + } + ] + }, + "m3dd9df4441fb": { + "source": "New password", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + } + ] + }, + "m563306418abb": { + "source": "Password strength:", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + } + ] + }, + "mbf000421aeb3": { + "source": "Confirm new password", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + } + ] + }, + "m210dfc7e4536": { + "source": "Re-enter your password", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "attribute" + } + ] + }, + "mb6eb82cd3300": { + "source": "Passwords do not match", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + } + ] + }, + "m49665aad0be4": { + "source": "Passwords match", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + } + ] + }, + "mdaef019f06a4": { + "source": "Resetting password...", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "jsx" + } + ] + }, + "me0edfeb3a71a": { + "source": "Reset password", + "locations": [ + { + "file": "app/(auth)/reset-password/page.tsx", + "kind": "expression" + } + ] + }, + "m958e4ccf2953": { + "source": "Please enter a valid email address.", + "locations": [ + { + "file": "app/(auth)/signup/page.tsx", + "kind": "feedback" + } + ] + }, + "m702463b34cf3": { + "source": "You must agree to the Terms of Service and Privacy Policy.", + "locations": [ + { + "file": "app/(auth)/signup/page.tsx", + "kind": "feedback" + } + ] + }, + "mfe2ea40e0f39": { + "source": "Already approved?", + "locations": [ + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + } + ] + }, + "m9e709348f582": { + "source": "Create your account", + "locations": [ + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + } + ] + }, + "mb896d16d300e": { + "source": "Or sign up with email", + "locations": [ + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + } + ] + }, + "me09b37bcc4f3": { + "source": "Name (optional)", + "locations": [ + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + } + ] + }, + "m2c6b2e253c01": { + "source": "Your name", + "locations": [ + { + "file": "app/(auth)/signup/page.tsx", + "kind": "attribute" + } + ] + }, + "mb00f7e3ae5e8": { + "source": "Please enter a valid email address", + "locations": [ + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + } + ] + }, + "mc292210c4416": { + "source": "Confirm Password", + "locations": [ + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + } + ] + }, + "m26a58d002b08": { + "source": "I agree to the", + "locations": [ + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + } + ] + }, + "m7dd3701aa3f1": { + "source": "Creating account...", + "locations": [ + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + } + ] + }, + "m798ca2ce18bf": { + "source": "Create account", + "locations": [ + { + "file": "app/(auth)/signup/page.tsx", + "kind": "expression" + }, + { + "file": "app/invite/[token]/page.tsx", + "kind": "jsx" + } + ] + }, + "me77fea936d3e": { + "source": "Already have an account?", + "locations": [ + { + "file": "app/(auth)/signup/page.tsx", + "kind": "jsx" + } + ] + }, + "m920d04ec14fe": { + "source": "Special character", + "locations": [ + { + "file": "app/(auth)/signup/signup-utils.ts", + "kind": "data" + } + ] + }, + "mf99582ef73f9": { + "source": "Min Plan:", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + } + ] + }, + "ma8761df2126c": { + "source": "Min Role:", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + } + ] + }, + "m02069e79e45e": { + "source": "No AI configured", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m16211dd296cf": { + "source": "Copilot:", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/user-allocation-edit-modal.tsx", + "kind": "jsx" + } + ] + }, + "mb764cdc0eab7": { + "source": "Unknown", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/provider-health-badge.tsx", + "kind": "data" + } + ] + }, + "m84aebc69a1bf": { + "source": "Configured", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "jsx" + } + ] + }, + "m08b041935798": { + "source": "You", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/collaboration/components/ai-chat-collab.tsx", + "kind": "expression" + } + ] + }, + "m11421ee1e11a": { + "source": "Manage credits", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "attribute" + } + ] + }, + "mf69d5d4b63d8": { + "source": "Configure AI for this user", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "attribute" + } + ] + }, + "m069d73bcfc70": { + "source": "Reset AI allocation", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "attribute" + } + ] + }, + "m190a5016e300": { + "source": "Configure AI for", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/user-allocation-edit-modal.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/user-allocations-tab.tsx", + "kind": "jsx" + } + ] + }, + "med249d417dcd": { + "source": "GitHub Copilot", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m0382e4dec018": { + "source": "Custom Provider", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc2186fe04eb9": { + "source": "Both configurations are saved. The selected tab is what this user will use.", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + } + ] + }, + "m7e1b0d5641f2": { + "source": "Account", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/access-control-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/user-allocation-edit-modal.tsx", + "kind": "jsx" + } + ] + }, + "m733f239a2734": { + "source": "Default (gh CLI)", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/model-defaults-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/user-allocation-edit-modal.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/user-allocations-tab.tsx", + "kind": "jsx" + } + ] + }, + "m5e2c614c23f0": { + "source": "Model", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m472590ae974d": { + "source": "Provider", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m73d8f90051f2": { + "source": "Select a provider...", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/access-control-tab.tsx", + "kind": "jsx" + } + ] + }, + "m1509f561f241": { + "source": "Save", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "jsx" + } + ] + }, + "m19766ed6ccb2": { + "source": "Cancel", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "mdc20e9fe650d": { + "source": "Credits for", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + } + ] + }, + "m3aa3d40a8fc9": { + "source": "Daily used:", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + } + ] + }, + "mcd1a8b01e9d5": { + "source": "Monthly used:", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + } + ] + }, + "mca3f6461f437": { + "source": "Rollover:", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + } + ] + }, + "m4c6dc26beeab": { + "source": "Daily Credits", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "ma67991ce2664": { + "source": "Monthly Credits", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m527b050da083": { + "source": "Rollover Credits", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/billing/components/credit-display.tsx", + "kind": "attribute" + } + ] + }, + "mebccf6ab3710": { + "source": "Save Credits", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m69be897d8b96": { + "source": "Save credits and reset daily/monthly usage to 0", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "attribute" + } + ] + }, + "mfa615f22bd26": { + "source": "Save & Reset Usage", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-components.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m011bea484f1a": { + "source": "Generate missing project thumbnails and view the generation log.", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "m49286f33b674": { + "source": "Generating...", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "m2cc28dc8a83e": { + "source": "Generate Missing Thumbnails", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "m0e9161011702": { + "source": "Refresh", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "jsx" + } + ] + }, + "m612e74a217ea": { + "source": "Total projects:", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "m9fd84954bfa5": { + "source": "| Missing:", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "m284913d5c772": { + "source": "| Queued:", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "mef5ade58332c": { + "source": "Generation Log", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "m87d05cd08817": { + "source": "entries", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "m9db084956346": { + "source": "No thumbnail generation logs yet. Click \"Generate Missing Thumbnails\" to start.", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "mf785c3ce1d58": { + "source": "ms", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/trace/_components/span-detail.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/provider-health-badge.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "jsx" + } + ] + }, + "mdad5476f0b47": { + "source": "No session data available", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "expression" + } + ] + }, + "m942087cc2d41": { + "source": "Retry", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "attribute" + } + ] + }, + "m9187cc2ac5a3": { + "source": "engines", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "m3bcf9f2bf072": { + "source": "RSS", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "mbb30cbe2f9b8": { + "source": "Heap", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "md63ab4711473": { + "source": "Uptime", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m6f68db105f37": { + "source": "Stopping...", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "m507eb972faea": { + "source": "Stop All Engines", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "m656692907162": { + "source": "Auto-refreshes every 5 seconds. Each engine is a per-project Copilot CLI subprocess.", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "mda292c238881": { + "source": "Active Engines", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "m0830217a2761": { + "source": "No active Copilot engines. Sessions start when users interact with AI in the editor.", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "m34cfcaf1a12e": { + "source": "Unknown Project", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "expression" + } + ] + }, + "m286ea6c1b524": { + "source": "visual-edit", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "expression" + } + ] + }, + "m4fb62348858c": { + "source": "idle", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "md5aa1b5cf70c": { + "source": "Active requests", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "attribute" + } + ] + }, + "m96879611650f": { + "source": "active", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + }, + { + "file": "modules/admin/log-filters/LogFiltersPanel.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/mcp-panel.tsx", + "kind": "jsx" + } + ] + }, + "m6fa3cbf451b2": { + "source": "Sessions", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + } + ] + }, + "mbd717b467075": { + "source": "sess", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "ma0355426abfc": { + "source": "Engine age", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "attribute" + } + ] + }, + "m013f54400c82": { + "source": "age", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "m2b3ef6712d86": { + "source": "Time since last use", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "attribute" + } + ] + }, + "mee72959b9b18": { + "source": "Kill", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-panels.tsx", + "kind": "jsx" + } + ] + }, + "m55e91685e997": { + "source": "All plans", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-shared.ts", + "kind": "data" + } + ] + }, + "m1421f18c6968": { + "source": "Any role", + "locations": [ + { + "file": "app/(dashboard)/admin/admin-shared.ts", + "kind": "data" + } + ] + }, + "mc8ef8e3669b8": { + "source": "Platform admin access required", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/[sessionId]/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "jsx" + } + ] + }, + "m76900f1bfd16": { + "source": "Back", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/[sessionId]/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "jsx" + } + ] + }, + "m7888e95b8274": { + "source": "Audit search", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/[sessionId]/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "jsx" + } + ] + }, + "m12ed94f936df": { + "source": "Conversation transcript", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/[sessionId]/page.tsx", + "kind": "jsx" + } + ] + }, + "mb512d97e7cbf": { + "source": "User", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/[sessionId]/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/mfa-panel.tsx", + "kind": "jsx" + } + ] + }, + "m5e23ec6a300d": { + "source": "Mode", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/[sessionId]/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m87bb59ba2f92": { + "source": "Workspace", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/[sessionId]/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/trace/[traceId]/page.tsx", + "kind": "attribute" + }, + { + "file": "modules/ai-settings/components/provider-wizard.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/context-files/context-panel-types.ts", + "kind": "data" + } + ] + }, + "m985959785319": { + "source": "Project", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/[sessionId]/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m3a5ecca188c0": { + "source": "Updated", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/[sessionId]/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "jsx" + } + ] + }, + "mcb9ac5c561da": { + "source": "Session ID", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/[sessionId]/page.tsx", + "kind": "attribute" + } + ] + }, + "m7967e089a7b9": { + "source": "User ID", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/[sessionId]/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/trace/_components/search-form.tsx", + "kind": "attribute" + } + ] + }, + "me511470b21a9": { + "source": "Project ID", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/[sessionId]/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "medd50d9670fd": { + "source": "This session has no recorded messages.", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/[sessionId]/page.tsx", + "kind": "jsx" + } + ] + }, + "ma20d12c5e9c4": { + "source": "Thinking", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/[sessionId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/usage-charts.tsx", + "kind": "data" + } + ] + }, + "mda5122dc0f97": { + "source": "Tool calls", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/[sessionId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m53924ef96c74": { + "source": "Admin action log", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "jsx" + } + ] + }, + "m8be6bc851681": { + "source": "Every search and view performed on the audit surface, with viewer identity, timestamps, and request metadata.", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "jsx" + } + ] + }, + "mecbb48b41cda": { + "source": "Actor ID", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "attribute" + } + ] + }, + "m75666699b77d": { + "source": "uuid", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "attribute" + } + ] + }, + "m64cff1319d2f": { + "source": "Action", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + } + ] + }, + "m2b505597daa7": { + "source": "Any", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/trace/_components/search-form.tsx", + "kind": "jsx" + } + ] + }, + "m218197693424": { + "source": "From", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/trace/_components/search-form.tsx", + "kind": "attribute" + } + ] + }, + "mf4b06ef6d3c8": { + "source": "To", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/trace/_components/search-form.tsx", + "kind": "attribute" + } + ] + }, + "m49c266baaaa7": { + "source": "Search", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + } + ] + }, + "mdaee7606b339": { + "source": "Reset", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/mfa-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "jsx" + } + ] + }, + "m167e90e23758": { + "source": "No admin actions recorded yet.", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "jsx" + } + ] + }, + "mcf9c7aa24a26": { + "source": "When", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "jsx" + } + ] + }, + "m449995c4fe8f": { + "source": "Actor", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "jsx" + } + ] + }, + "m978354db0c00": { + "source": "Target", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "jsx" + } + ] + }, + "m45989de49fb7": { + "source": "Details", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/sidebar/version-history-item.tsx", + "kind": "jsx" + }, + { + "file": "modules/marketplace/report-listing-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mbf5505174a73": { + "source": "IP", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "jsx" + } + ] + }, + "m0a478cd08199": { + "source": "user:", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "jsx" + } + ] + }, + "m046a8c1e8583": { + "source": "ws:", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "jsx" + } + ] + }, + "m2bcb43cbc8f6": { + "source": "view", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "jsx" + } + ] + }, + "mc1c224b03cd9": { + "source": "Admin", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/trace/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "data" + } + ] + }, + "mc5f53e63dd72": { + "source": "Prompt & conversation audit", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "jsx" + } + ] + }, + "m7dd571d2abd1": { + "source": "History of admin actions taken on the audit surface", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "attribute" + } + ] + }, + "m5140d737735a": { + "source": "Search every AI conversation on the platform. Every search and view you perform is recorded for compliance.", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "jsx" + } + ] + }, + "m86dae2ac1261": { + "source": "Audit log is not yet enabled on this platform", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "expression" + } + ] + }, + "m538730c93ca5": { + "source": "Could not load audit data", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "expression" + } + ] + }, + "m04d7b4833927": { + "source": "Messages", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + } + ] + }, + "m4fe279f28f2e": { + "source": "Messages (7d)", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "data" + } + ] + }, + "mc2fe00210b4b": { + "source": "Distinct users", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "data" + } + ] + }, + "m889d892993c3": { + "source": "Workspace ID", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/trace/_components/search-form.tsx", + "kind": "attribute" + }, + { + "file": "modules/workspace/components/workspace-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "m772edfbcc7c0": { + "source": "Message contains", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "attribute" + } + ] + }, + "m777808dfda80": { + "source": "prompt or response substring", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "attribute" + } + ] + }, + "m38de3e06f728": { + "source": "No conversations match the current filters.", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "jsx" + } + ] + }, + "mae593d094c83": { + "source": "Workspace / Project", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "jsx" + } + ] + }, + "m97e9c34ed7b1": { + "source": "Last excerpt", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "jsx" + } + ] + }, + "m1b731e8d1d02": { + "source": "U:", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "jsx" + } + ] + }, + "m6a699d31f54d": { + "source": "A:", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "jsx" + } + ] + }, + "m7d80edc9d957": { + "source": "Platform admin required", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m97ba1d394fab": { + "source": "Back to Dashboard", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + } + ] + }, + "m345c74235673": { + "source": "Back to Admin", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m33b35626c9b1": { + "source": "Chat Sessions (", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + } + ] + }, + "m686504a87fa2": { + "source": "Every AI conversation across the platform — for training, audit, abuse review.", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + } + ] + }, + "mc75cb8839a7d": { + "source": "Filtered to project", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + } + ] + }, + "m26b30b0dda16": { + "source": "Read-only audit view.", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + } + ] + }, + "mbd579d1b9e08": { + "source": "Message content is auto-redacted (passwords, JWTs, API keys, hex blobs, DB URLs). Every thread you open is recorded in the admin audit log with your name + timestamp.", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + } + ] + }, + "m64ea47b2620b": { + "source": "Filter by project name or user email…", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "attribute" + } + ] + }, + "m6c73e4289d05": { + "source": "All modes", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + } + ] + }, + "m31e06f7d89fe": { + "source": "chat", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + } + ] + }, + "md4f0bc5a29de": { + "source": "agent", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m06475633ed3e": { + "source": "Last activity", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + } + ] + }, + "mecbc89cd37a0": { + "source": "Started", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/trace/[traceId]/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/trace/_components/results-table.tsx", + "kind": "jsx" + } + ] + }, + "mba3bbbe10d8b": { + "source": "Loading…", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "ma86136ba5f55": { + "source": "No chat sessions match your filter.", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + } + ] + }, + "med077f3d8125": { + "source": "Open", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + } + ] + }, + "md604310a789a": { + "source": "Showing", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "jsx" + } + ] + }, + "m28391d3bc64e": { + "source": "of", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + } + ] + }, + "m5373c7f8a5a6": { + "source": "Thread", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + } + ] + }, + "m7e3df8eb742b": { + "source": "(no project)", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "expression" + } + ] + }, + "mabc45c2d4dfa": { + "source": "· mode=", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + } + ] + }, + "mf5cccfb73751": { + "source": "messages", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + } + ] + }, + "m0966c6f72dff": { + "source": "Loading thread…", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + } + ] + }, + "m5675154535cf": { + "source": "This session has no messages.", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + } + ] + }, + "mf9d35d43770d": { + "source": "tools", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc7099deab135": { + "source": "show less", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "expression" + } + ] + }, + "m2d370b60770a": { + "source": "show more", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "expression" + } + ] + }, + "m6ee16429668c": { + "source": "thinking", + "locations": [ + { + "file": "app/(dashboard)/admin/chat/page.tsx", + "kind": "jsx" + } + ] + }, + "maf80ef6e1b7b": { + "source": "DNS for Published Sites", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "ma4a4e1e0f891": { + "source": "Each publish either gets its own Cloudflare CNAME, or rides on a wildcard CNAME we set up for you.", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "mb5c120b316c2": { + "source": "Saved", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "expression" + } + ] + }, + "m15257e76d8b7": { + "source": "Zone:", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "mb5d0581437a1": { + "source": "The cloudflared OAuth token has DNS:Edit scope but not SSL/Certificates:Read — we can't see ACM packs. If you have ACM, tick the override below to bypass detection.", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "expression" + } + ] + }, + "m909527f31f42": { + "source": "ACM enabled", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m928677dc6340": { + "source": "No ACM", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m5b864fc4ab0a": { + "source": "ACM status unknown", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m22ec906ac415": { + "source": "Publish domain:", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m31beffd97934": { + "source": "Could not load Cloudflare zone diagnostics:", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m43df7d535730": { + "source": "Per-publish CNAME", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m21b111cbfe6e": { + "source": "Default", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/frameworks-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/github-accounts-tab.tsx", + "kind": "expression" + }, + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "jsx" + } + ] + }, + "maa78e0c0518a": { + "source": "Every publish calls the Cloudflare API to create one CNAME per subdomain. Lets multiple doable servers coexist under the same zone using", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "me3bf2573a4eb": { + "source": "hostnames covered by Universal SSL. Requires", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m4aa9bfd2f175": { + "source": ", and", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "me9176867f7e5": { + "source": "Wildcard CNAME (auto-configured)", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m57ef4e97d348": { + "source": "Skip the per-publish API call — all publishes resolve via one wildcard CNAME pointing to your tunnel. We'll create the record on your zone with the Cloudflare token from", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m7ccbaa60f66e": { + "source": "cloudflared tunnel login", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "mb658dae9f083": { + "source": "Free plan + apex:", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "mcc76294d4e4d": { + "source": "works out of the box (Universal SSL).", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m4aa1e5a605fe": { + "source": "Free plan + multi-level:", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m3851601b3b92": { + "source": "needs Advanced Certificate Manager.", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "mcd8a3129e318": { + "source": "Paid ACM:", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "mf291848f2272": { + "source": "pick any", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "md86688fc2849": { + "source": "and tick the override below if our token can't see your ACM packs.", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m40b2d2ad3953": { + "source": "Wildcard hostname", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m44ce242131b7": { + "source": "I have Advanced Certificate Manager", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m80c26ba6333c": { + "source": "on this zone. Auto-detection can't read ACM status with the tunnel OAuth token, so tick this if you've already enabled ACM and want to create a multi-level wildcard.", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "mb66afe5b6cff": { + "source": "Configuring…", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "expression" + } + ] + }, + "m3c2e2a5ed0a6": { + "source": "Re-verify wildcard", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "expression" + } + ] + }, + "m1bc6bb749521": { + "source": "Auto-configure wildcard", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "expression" + } + ] + }, + "md70b9e24bca2": { + "source": "Created", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/sidebar/version-history-item.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "mfe00b67b6dd1": { + "source": "Confirmed", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "expression" + } + ] + }, + "ma57a35df4997": { + "source": "No wildcard CNAME currently active on this zone.", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m814ec0e86a15": { + "source": "Publishes will fail until you auto-configure one above, or switch back to per-publish mode.", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m6b83c8641fdd": { + "source": "Existing wildcards on", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "mf86010479825": { + "source": "this zone", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "expression" + } + ] + }, + "me2d0a54968ea": { + "source": "Delete", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "attribute" + } + ] + }, + "m5f3c225bebaf": { + "source": "? Publishes pointing to it stop resolving.", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "meebdd24a77d9": { + "source": "Confirm", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/skills/skills-panel-components.tsx", + "kind": "jsx" + } + ] + }, + "m59a554090fa8": { + "source": "Cloudflare API token (optional)", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m7a6291807fd2": { + "source": "No CF token configured", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "expression" + } + ] + }, + "m9d7e5930b618": { + "source": "ACM scope OK", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m05ed7296fabd": { + "source": "KEK mismatch.", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m3415a638725c": { + "source": "The stored token can't be decrypted under the current", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m5232ea6ee716": { + "source": "(likely a backup restore with a stale", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "me9cbb0224c4a": { + "source": ".env", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m424dce5579ac": { + "source": "). The cert.pem fallback is keeping DNS ops working, but ACM detection is degraded. Re-paste the token below, or click", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m6d43eea1425f": { + "source": "Remove override", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m19bbb37f3390": { + "source": "to drop the stale row.", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m0ff414871969": { + "source": "Strictly optional.", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m400f4a7dbcab": { + "source": "DNS auto-configure, wildcard create/delete, and per-publish CNAMEs all work fine with the cert.pem token from", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc37157e872ba": { + "source": "alone. Adding a custom token only unlocks accurate ACM detection so the badge above can flip from", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m663ea1bfffe5": { + "source": "to", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m7175517a370b": { + "source": "or", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "maf2af17db2e3": { + "source": "Open Cloudflare API Tokens", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "me50f8444b261": { + "source": "→ Create Token → Create Custom Token. Add exactly these zone permissions:", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "ma22535feec3f": { + "source": "Zone → DNS →", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m464c4ffd019e": { + "source": "Edit", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/project-list.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/context-files/context-editor.tsx", + "kind": "attribute" + } + ] + }, + "m45d6695511a2": { + "source": "Zone → Zone →", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m9b9a8d05a7ec": { + "source": "Read", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m3445cc97290d": { + "source": "Zone → SSL and Certificates →", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "ma9072dfe385f": { + "source": "Scope to your specific zone (", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m1aa082f6a5fb": { + "source": ") under \"Zone Resources\". Then paste the token here.", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m5d2b8d876c7b": { + "source": "Paste a Cloudflare API token…", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "attribute" + } + ] + }, + "m15f022806509": { + "source": "Verify & save", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "medf0c1a56db5": { + "source": "Heads up:", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m559aead08264": { + "source": "A", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "meb5d4f10d2dc": { + "source": "CNAME can point to exactly one tunnel — running multiple doable servers on the same zone requires Cloudflare Advanced Certificate Manager so each environment can have its own multi-level wildcard (e.g.", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m3890d1e97509": { + "source": "*.staging.", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m286dacb3bc0d": { + "source": "*.prod.", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "mb68bb848e767": { + "source": "No setting persisted yet — using the per-publish default.", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m5e363bb50eb4": { + "source": "Selecting an option or auto-configuring wildcard will save it for future publishes.", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m00d60e31a4e6": { + "source": "Run", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/database/panes/queries-pane.tsx", + "kind": "jsx" + } + ] + }, + "mc865b85f4331": { + "source": "migration 081_platform_settings.sql", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "me69dbe11cb9e": { + "source": "against the DB.", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m5273ecff6b01": { + "source": "Remove email configuration? The system will fall back to environment variable settings.", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "feedback" + } + ] + }, + "m4f7838402f37": { + "source": "Verified", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "m151339072593": { + "source": "Not verified", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "m65bb4278c2cc": { + "source": "Send Test Email", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "m74c26c5e8d57": { + "source": "Verify Connection", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "m70fed393a3cc": { + "source": "Change Provider", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc3812fc4acb8": { + "source": "Remove", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "expression" + }, + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/chat/attachment-preview.tsx", + "kind": "attribute" + }, + { + "file": "modules/environments/env-shared.tsx", + "kind": "attribute" + } + ] + }, + "mf244f7a73ebd": { + "source": "Update Email Provider", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "expression" + } + ] + }, + "mc5f480423459": { + "source": "Configure Email Provider", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc7011f116d0f": { + "source": "SMTP", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "expression" + } + ] + }, + "m1f94843777ae": { + "source": "Resend", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "expression" + } + ] + }, + "m0845280d68c2": { + "source": "Gmail (OAuth)", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "expression" + } + ] + }, + "mdd66a6eaff88": { + "source": "Gmail, SendGrid, Mailgun, SES, and 20+ providers", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "expression" + } + ] + }, + "mdaa443b13dd6": { + "source": "Modern email API with great deliverability", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "expression" + } + ] + }, + "ma9b34e6fd3c3": { + "source": "One-click Google account connection", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "expression" + } + ] + }, + "m85c6eb592a2a": { + "source": "Connect your Google account with one click. This uses OAuth so your password is never shared. Only the", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "m29148528a8fc": { + "source": "permission is requested.", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "m368e840b0cc8": { + "source": "Connect Google Account", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "m0e66373f45dc": { + "source": "Label", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "jsx" + } + ] + }, + "me4d3910563ab": { + "source": "Production SMTP", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "expression" + } + ] + }, + "m759130d7fc14": { + "source": "Resend Production", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "expression" + } + ] + }, + "m60643eae6376": { + "source": "From Address", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "md677190e0a99": { + "source": "Service", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "m4e66fa8cee03": { + "source": "SMTP Host", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "m72e9a59f5a1d": { + "source": "Port", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "me3b89e9d33f8": { + "source": "Username", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "attribute" + } + ] + }, + "mb4c9a289323b": { + "source": "user@example.com", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "attribute" + } + ] + }, + "m23189d55f697": { + "source": "API Key", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "expression" + } + ] + }, + "m46178dee9cff": { + "source": "re_••••••••", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "attribute" + } + ] + }, + "meecc5bafc07f": { + "source": "Save & Encrypt", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "m10ec54738634": { + "source": "No email provider configured in the database", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "mfada2a086738": { + "source": "Using environment variable fallback (if configured)", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "expression" + } + ] + }, + "m5f918cc7c852": { + "source": "All credentials are encrypted at rest using AES-256. The email queue retries failed sends with exponential backoff (up to 5 attempts). After exhausting retries, emails move to the dead-letter queue for manual review.", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc9a6c4608630": { + "source": "dead letter", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "expression" + } + ] + }, + "mf9903f858272": { + "source": "Delete this email permanently?", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "feedback" + } + ] + }, + "m783fc0ebef47": { + "source": "Email Queue", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "mbe6eb1fc3b05": { + "source": "Collapse", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "expression" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/chat-message.tsx", + "kind": "jsx" + } + ] + }, + "m5a23444828db": { + "source": "Manage", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "expression" + }, + { + "file": "modules/integrations/integration-card.tsx", + "kind": "expression" + } + ] + }, + "m331551b0de41": { + "source": "Pending", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "data" + } + ] + }, + "mc8e3e92a62ec": { + "source": "Processing", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "data" + } + ] + }, + "mc16bc82bf1f0": { + "source": "Sent", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "data" + }, + { + "file": "modules/marketplace/report-listing-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m031a8f0f659d": { + "source": "Failed", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "data" + } + ] + }, + "m04fb719b1cde": { + "source": "Dead Letter", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "data" + } + ] + }, + "m5da8f7fbc29d": { + "source": "Back to list", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc934cc71493d": { + "source": "Attempt", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "m2b5fc5c94f64": { + "source": "To:", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "mdc45d36f35e8": { + "source": "From:", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "m22d435a37118": { + "source": "Created:", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "m45ad42321fbd": { + "source": "Sent:", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "m80c26311aad8": { + "source": "Next retry:", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "m3c8938774eb8": { + "source": "Template:", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "m324b134f57c7": { + "source": "Preview", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "data" + }, + { + "file": "modules/editor/context-files/context-editor.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/toolbar/editor-toolbar.tsx", + "kind": "data" + } + ] + }, + "m92f2897724bf": { + "source": "Email preview", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "attribute" + } + ] + }, + "m411a20914eca": { + "source": "All emails", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "expression" + } + ] + }, + "m11239872d178": { + "source": "total", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/usage-charts.tsx", + "kind": "jsx" + } + ] + }, + "me1a333b41aa3": { + "source": "clear filter", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "m3f777aa4a1cb": { + "source": "Retry all failed", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "ma3eb7f944a37": { + "source": "Retry all dead", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "m96e54d635a8a": { + "source": "Purge all", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc7fa7d546e56": { + "source": "No emails", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "m0c14d42e2264": { + "source": "in queue", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "expression" + }, + { + "file": "modules/collaboration/components/ai-chat-collab.tsx", + "kind": "jsx" + } + ] + }, + "m1ac7d61d1d29": { + "source": "attempts", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + } + ] + }, + "md1bf045bb524": { + "source": "View details", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "attribute" + } + ] + }, + "m0a30a815d67d": { + "source": "Page", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/discover/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/analytics-top-pages.tsx", + "kind": "data" + }, + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "jsx" + } + ] + }, + "m3b440ddee6d9": { + "source": "text-embedding-3-small / large. $0.02/1M tokens, 1536–3072 dims.", + "locations": [ + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "data" + } + ] + }, + "m398f99a184e4": { + "source": "gemini-embedding-001 via Gemini's OpenAI-compatible /v1 endpoint.", + "locations": [ + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "data" + } + ] + }, + "m3f31d32ea02c": { + "source": "Any /v1/embeddings endpoint — Ollama, vLLM, Voyage proxy, etc.", + "locations": [ + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "data" + } + ] + }, + "mb502bc92ca52": { + "source": "Provider, base URL, model and API key are all required.", + "locations": [ + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "feedback" + }, + { + "file": "app/setup/steps/Step2EmbeddingPanel.tsx", + "kind": "feedback" + } + ] + }, + "m754105abcad5": { + "source": "Platform Embedding Model", + "locations": [ + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "jsx" + } + ] + }, + "m49daa94be922": { + "source": "Set once — every workspace inherits this for chatbots, semantic search and RAG. End users of generated apps never see this UI; they just prompt the AI to build a chatbot.", + "locations": [ + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "jsx" + } + ] + }, + "m3f0534d325cf": { + "source": "Not configured — calls to /__doable/ai/embed will return EMBEDDING_NOT_CONFIGURED", + "locations": [ + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "jsx" + } + ] + }, + "m4e901c79aad0": { + "source": "Pick provider", + "locations": [ + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "jsx" + } + ] + }, + "m70589413a3c9": { + "source": "Base URL", + "locations": [ + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/Step2EmbeddingPanel.tsx", + "kind": "jsx" + } + ] + }, + "m16f0ee47f993": { + "source": "API key", + "locations": [ + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/Step2EmbeddingPanel.tsx", + "kind": "jsx" + } + ] + }, + "m36d2f296e03d": { + "source": "Get a key", + "locations": [ + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/Step2EmbeddingPanel.tsx", + "kind": "jsx" + } + ] + }, + "m2cedc28e7ad3": { + "source": "Leave blank to keep current key (replace any to update)", + "locations": [ + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "expression" + } + ] + }, + "m8358f1f0a95b": { + "source": "Paste API key", + "locations": [ + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "expression" + } + ] + }, + "m24e3c122d5d5": { + "source": "Embedding model", + "locations": [ + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/Step2EmbeddingPanel.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/Step2EmbeddingPanel.tsx", + "kind": "jsx" + } + ] + }, + "m2ff59c750e8c": { + "source": "Validates with a probe call before persisting.", + "locations": [ + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc1c1009d3f37": { + "source": "Update", + "locations": [ + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "expression" + }, + { + "file": "app/setup/steps/Step2EmbeddingPanel.tsx", + "kind": "expression" + }, + { + "file": "modules/environments/env-variables-tab.tsx", + "kind": "expression" + }, + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "expression" + } + ] + }, + "m8173aef43b62": { + "source": "Failed to load framework settings", + "locations": [ + { + "file": "app/(dashboard)/admin/frameworks-panel.tsx", + "kind": "feedback" + } + ] + }, + "m6e965b82ee17": { + "source": "At least one framework must remain enabled", + "locations": [ + { + "file": "app/(dashboard)/admin/frameworks-panel.tsx", + "kind": "feedback" + } + ] + }, + "m738142c05652": { + "source": "Framework settings saved", + "locations": [ + { + "file": "app/(dashboard)/admin/frameworks-panel.tsx", + "kind": "feedback" + } + ] + }, + "m8533d75f3b23": { + "source": "Failed to save framework settings", + "locations": [ + { + "file": "app/(dashboard)/admin/frameworks-panel.tsx", + "kind": "feedback" + } + ] + }, + "m7e4fc34d106a": { + "source": "Project Frameworks", + "locations": [ + { + "file": "app/(dashboard)/admin/frameworks-panel.tsx", + "kind": "jsx" + } + ] + }, + "m5d80ea82266b": { + "source": "Control which project types users can create. Disabled frameworks won't appear in the project creation dialog.", + "locations": [ + { + "file": "app/(dashboard)/admin/frameworks-panel.tsx", + "kind": "jsx" + } + ] + }, + "md09b4dd6265a": { + "source": "Set as default", + "locations": [ + { + "file": "app/(dashboard)/admin/frameworks-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/github-accounts-tab.tsx", + "kind": "expression" + } + ] + }, + "madd484d5ccdd": { + "source": "Changes take effect immediately. Existing projects using a disabled framework will continue to work, but new projects cannot be created with it.", + "locations": [ + { + "file": "app/(dashboard)/admin/frameworks-panel.tsx", + "kind": "jsx" + } + ] + }, + "mea8b2988df0c": { + "source": "User MFA status", + "locations": [ + { + "file": "app/(dashboard)/admin/mfa-panel.tsx", + "kind": "jsx" + } + ] + }, + "m81e16ce413fa": { + "source": "MFA is optional and user-controlled. Use the reset action only when a user has lost access to both their authenticator app and recovery codes.", + "locations": [ + { + "file": "app/(dashboard)/admin/mfa-panel.tsx", + "kind": "jsx" + } + ] + }, + "m655e733ea610": { + "source": "Enrolled", + "locations": [ + { + "file": "app/(dashboard)/admin/mfa-panel.tsx", + "kind": "jsx" + } + ] + }, + "m830ec7f812f9": { + "source": "Last used", + "locations": [ + { + "file": "app/(dashboard)/admin/mfa-panel.tsx", + "kind": "jsx" + } + ] + }, + "m48f6a8d5688b": { + "source": "Recovery", + "locations": [ + { + "file": "app/(dashboard)/admin/mfa-panel.tsx", + "kind": "jsx" + } + ] + }, + "m4610a52aa1b6": { + "source": "No users have enabled MFA yet.", + "locations": [ + { + "file": "app/(dashboard)/admin/mfa-panel.tsx", + "kind": "jsx" + } + ] + }, + "m6497e4b3d7be": { + "source": "never", + "locations": [ + { + "file": "app/(dashboard)/admin/mfa-panel.tsx", + "kind": "expression" + } + ] + }, + "m360f84035942": { + "source": "left", + "locations": [ + { + "file": "app/(dashboard)/admin/mfa-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc55448c334fc": { + "source": "Reset MFA for", + "locations": [ + { + "file": "app/(dashboard)/admin/mfa-panel.tsx", + "kind": "jsx" + } + ] + }, + "m835b4199c8c2": { + "source": "This will remove all MFA factors and recovery codes for this user, and sign them out of every active session. They will be able to sign in with just their password until they enroll again.", + "locations": [ + { + "file": "app/(dashboard)/admin/mfa-panel.tsx", + "kind": "jsx" + } + ] + }, + "mfb047bd7d215": { + "source": "Reset MFA", + "locations": [ + { + "file": "app/(dashboard)/admin/mfa-panel.tsx", + "kind": "jsx" + } + ] + }, + "mb9765c3871ca": { + "source": "Marketplace moderation", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "jsx" + } + ] + }, + "meb6573bdbe5b": { + "source": "Review listings flagged for moderator approval and respond to community reports.", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "jsx" + } + ] + }, + "m3e1654beab97": { + "source": "Review queue", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "data" + } + ] + }, + "mdacca3cba3f3": { + "source": "Reports", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "data" + } + ] + }, + "m85d179563e9c": { + "source": "No listings awaiting review", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "attribute" + } + ] + }, + "mdc7143e7d6df": { + "source": "Open listing in new tab", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "attribute" + } + ] + }, + "ma7e2d26e8d15": { + "source": "by", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "jsx" + } + ] + }, + "m0bb917d86bec": { + "source": "· v", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "meb1a0e0e6bac": { + "source": "· submitted", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "jsx" + } + ] + }, + "m07297fa94a99": { + "source": "Needs review", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "jsx" + } + ] + }, + "m66d0f523a379": { + "source": "Skills", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/sidebar/editor-sidebar.tsx", + "kind": "data" + }, + { + "file": "modules/environments/env-cards.tsx", + "kind": "attribute" + } + ] + }, + "m4228aeb07c41": { + "source": "Rules", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/environments/env-cards.tsx", + "kind": "attribute" + }, + { + "file": "modules/environments/env-cards.tsx", + "kind": "attribute" + } + ] + }, + "mdcb3e1c00e79": { + "source": "Knowledge", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "data" + }, + { + "file": "modules/editor/sidebar/editor-sidebar.tsx", + "kind": "data" + }, + { + "file": "modules/environments/env-cards.tsx", + "kind": "attribute" + } + ] + }, + "mc3d2e79ebdd0": { + "source": "Connectors", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "attribute" + }, + { + "file": "modules/environments/env-cards.tsx", + "kind": "attribute" + }, + { + "file": "modules/environments/env-cards.tsx", + "kind": "attribute" + } + ] + }, + "m79e3c0331286": { + "source": "Permissions:", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "jsx" + } + ] + }, + "m446bbdda220c": { + "source": "Optional decision note (sent to publisher on rejection)…", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "attribute" + } + ] + }, + "ma40e2f67ddae": { + "source": "Approve & publish", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "jsx" + } + ] + }, + "mab604a360777": { + "source": "Reject", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "jsx" + } + ] + }, + "m2acf0b3e07b3": { + "source": "No open reports", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "attribute" + } + ] + }, + "m0190c9bb81aa": { + "source": "Take action", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "jsx" + } + ] + }, + "m48845bff334a": { + "source": "Dismiss", + "locations": [ + { + "file": "app/(dashboard)/admin/moderation/page.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/chat/chat-panel.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/chat/error-recovery-card.tsx", + "kind": "jsx" + } + ] + }, + "md134ca025a6c": { + "source": "Access Denied", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "jsx" + } + ] + }, + "m272f3eef01bd": { + "source": "Platform admin access required.", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "jsx" + } + ] + }, + "ma46f4c289a70": { + "source": "System Administration", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "jsx" + } + ] + }, + "m85ed75299aaf": { + "source": "Manage platform features, users, AI tools, and access controls", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "jsx" + } + ] + }, + "md7e6c3063aad": { + "source": "All projects (drafts + published) with framework, owner, chat activity", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "attribute" + } + ] + }, + "m04e2a9728af7": { + "source": "Projects", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "attribute" + } + ] + }, + "mc86961c75b53": { + "source": "Published apps + live dev servers — CPU, memory, uptime, controls", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "attribute" + } + ] + }, + "m109311589787": { + "source": "Runtime", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m85372234e297": { + "source": "All AI chat sessions (redacted, audit-logged) — for training & abuse review", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "attribute" + } + ] + }, + "m460b3a7da007": { + "source": "Chat", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/collaboration/components/presence-bar.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/chat-panel.tsx", + "kind": "jsx" + } + ] + }, + "m331d30a9c97f": { + "source": "Prompt & conversation audit (enterprise)", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "attribute" + } + ] + }, + "mbb6aea287396": { + "source": "Audit", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "jsx" + } + ] + }, + "m03e21e122ec4": { + "source": "Marketplace moderation queue & reports", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "attribute" + } + ] + }, + "m126d4415445d": { + "source": "Moderation", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "jsx" + } + ] + }, + "mc60c04dc77f9": { + "source": "Feature Flags", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "data" + } + ] + }, + "m020965a2f08f": { + "source": "DNS", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "data" + } + ] + }, + "m5c2b06176d6c": { + "source": "Signups", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "data" + } + ] + }, + "m38fe011e7777": { + "source": "Users & AI", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "data" + } + ] + }, + "m090512d93fcc": { + "source": "Integrations", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "attribute" + }, + { + "file": "modules/environments/env-shared.tsx", + "kind": "data" + } + ] + }, + "mdfe8b2f0de26": { + "source": "Plans", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + } + ] + }, + "mcc42ea8d0096": { + "source": "AI Tools", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "data" + } + ] + }, + "md39ce05308e4": { + "source": "MFA", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "data" + } + ] + }, + "mf82d646665fe": { + "source": "Thumbnails", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "data" + } + ] + }, + "m696b91224a68": { + "source": "Toggle features on/off globally. Set minimum plan or workspace role requirements.", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "jsx" + } + ] + }, + "mdac229190454": { + "source": "No feature flags configured.", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "jsx" + } + ] + }, + "m61875526f372": { + "source": "Plan Limits", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "jsx" + } + ] + }, + "m23ec9af2fc5e": { + "source": "Plan Defaults", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "jsx" + } + ] + }, + "m860ec100606b": { + "source": "Embedding Model", + "locations": [ + { + "file": "app/(dashboard)/admin/page.tsx", + "kind": "jsx" + } + ] + }, + "m0e570ca6fabe": { + "source": "Source", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "mdc937b598926": { + "source": "None", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/visual-edit/property-panels/border-editor.tsx", + "kind": "data" + }, + { + "file": "modules/editor/visual-edit/property-panels/border-editor.tsx", + "kind": "data" + }, + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "jsx" + } + ] + }, + "m088fec4f79e8": { + "source": "Copilot Account", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "mbfbcd87c086c": { + "source": "Select account…", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "m54cc5b27fcd0": { + "source": "No Copilot accounts found. Add one in AI Settings first.", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "m8b4e8774ddf6": { + "source": "Default Model", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/model-defaults-tab.tsx", + "kind": "jsx" + } + ] + }, + "m89cd67acb3e2": { + "source": "— Type custom model ID —", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "m7365642e8162": { + "source": "Select provider…", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "m29a012962f7b": { + "source": "No custom providers found. Add one in AI Settings first.", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc439b30a5a39": { + "source": "Select model…", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "m97c8cb747f57": { + "source": "Discovering models…", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "expression" + } + ] + }, + "mc248b4fca911": { + "source": "Type model ID", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "expression" + } + ] + }, + "mfbd4230d6570": { + "source": "Select a provider first", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "expression" + }, + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "expression" + } + ] + }, + "mdcd910c427ac": { + "source": "No default AI model will be configured for new", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "m47707749925e": { + "source": "workspaces. Users will need to set up their own AI connection.", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc7175090497c": { + "source": "Failed to load plan defaults", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "feedback" + } + ] + }, + "me3881d18c2ee": { + "source": "Failed to save defaults", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "feedback" + } + ] + }, + "m504db17a8299": { + "source": "Failed to apply defaults to existing workspaces", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "feedback" + } + ] + }, + "m1e7edaca7665": { + "source": "Loading plan defaults…", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/PlanDefaultsInline.tsx", + "kind": "jsx" + } + ] + }, + "m9761afad12f1": { + "source": "Set the default AI model and provider for each plan tier. New workspaces will automatically inherit these settings.", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "m1631852a1dd6": { + "source": "No default configured", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "expression" + } + ] + }, + "m6defafa2caa6": { + "source": "Configure", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "expression" + } + ] + }, + "mb3cdb2ee304a": { + "source": "Apply this default to all existing workspaces on this plan", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "attribute" + } + ] + }, + "md426d64284d0": { + "source": "Apply to Existing", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "expression" + } + ] + }, + "m49f5b0e488cf": { + "source": "Copilot", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "m7d4737cf36c4": { + "source": "Provider / Account", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "m0c79a9c22284": { + "source": "Applied", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/database/panes/migrations-pane.tsx", + "kind": "jsx" + } + ] + }, + "mba02b5e676dd": { + "source": "defaults to", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "m6e8d79980fba": { + "source": "workspaces", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc9916805d229": { + "source": "workspace(s) skipped — already had AI configured. Use “overwrite” to force-apply.", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "me467ab264fa4": { + "source": "Overwrite existing workspace AI settings when applying to existing", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "m9d53ba64c960": { + "source": "How Plan Defaults Work", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "m675b6a1fb67a": { + "source": "When a new user signs up, their workspace inherits the default for their plan tier.", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "ma7c4da9b12bf": { + "source": "The Copilot account or provider is cloned into the user's workspace automatically.", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "m2727451375f9": { + "source": "Users can override the default in their own AI Settings.", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "m7c1a7e4ce440": { + "source": "Use “Apply to Existing” to retroactively push defaults to workspaces that don't have AI configured yet.", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "jsx" + } + ] + }, + "mf411a1fb6275": { + "source": "Free", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "data" + }, + { + "file": "modules/ai-settings/components/provider-card.tsx", + "kind": "jsx" + } + ] + }, + "m957b0b874524": { + "source": "Pro", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "data" + } + ] + }, + "m76f68a75f01e": { + "source": "Business", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "data" + } + ] + }, + "m3fbe5ed156f1": { + "source": "Enterprise", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "data" + } + ] + }, + "ma7dc3ade6c61": { + "source": "Configure limits for each plan tier. Changes take effect immediately for all users on that plan. Set values to override defaults, or reset to use hardcoded defaults.", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "jsx" + } + ] + }, + "m17be9dde3193": { + "source": "CUSTOMIZED", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "jsx" + } + ] + }, + "mb38c74ea2a19": { + "source": "Max Projects", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "attribute" + } + ] + }, + "m3bc5afa4e311": { + "source": "Max Members", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "attribute" + } + ] + }, + "m3c24f14134d7": { + "source": "Max File Size", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "attribute" + } + ] + }, + "m6170ab945256": { + "source": "Custom Domains", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "attribute" + } + ] + }, + "m94c116ee118a": { + "source": "Analytics", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "attribute" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "data" + }, + { + "file": "modules/editor/panels/analytics-panel.tsx", + "kind": "jsx" + } + ] + }, + "med8a65c84235": { + "source": "Priority Support", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "attribute" + } + ] + }, + "mba34a96f2969": { + "source": "Last updated:", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-context.tsx", + "kind": "jsx" + } + ] + }, + "m507095b0ba27": { + "source": "(MB)", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "jsx" + } + ] + }, + "m32d2b72aecde": { + "source": "All Projects (", + "locations": [ + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + } + ] + }, + "meb2d37934688": { + "source": "Every project on the platform — drafts, published, and live runtime — with framework, owner, chat activity.", + "locations": [ + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + } + ] + }, + "mb91054149468": { + "source": "Filter by name, slug, owner email, framework, workspace…", + "locations": [ + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "attribute" + } + ] + }, + "m83b12c2216ef": { + "source": "Clear", + "locations": [ + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-toolbar.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "m2eb1788f3f5a": { + "source": "Owner / Workspace", + "locations": [ + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m192eb4525aab": { + "source": "Framework", + "locations": [ + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m920e413c7d41": { + "source": "Status", + "locations": [ + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/trace/[traceId]/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/trace/_components/results-table.tsx", + "kind": "jsx" + } + ] + }, + "m225d29f6201e": { + "source": "Listen", + "locations": [ + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "ma3724e34d284": { + "source": "No projects match your filter.", + "locations": [ + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "jsx" + } + ] + }, + "m46b6115e1e4d": { + "source": "View chat sessions for this project", + "locations": [ + { + "file": "app/(dashboard)/admin/projects/page.tsx", + "kind": "attribute" + } + ] + }, + "mf2d1742393d2": { + "source": "This page shows runtime state for every project on the host.", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "mf65833fab74d": { + "source": "Published apps & live editor dev servers — CPU, memory, uptime, controls.", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "ma9d344473c8b": { + "source": "Auto-refresh on", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "expression" + } + ] + }, + "m9dc9e60adf42": { + "source": "Auto-refresh off", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "expression" + } + ] + }, + "m94de423b6747": { + "source": "Dev Servers", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "attribute" + } + ] + }, + "mcbbabb53c8fc": { + "source": "Published Apps", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "attribute" + } + ] + }, + "m82cebc347bb4": { + "source": "Total servers", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "attribute" + } + ] + }, + "m3032763b0e67": { + "source": "Alive", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "attribute" + } + ] + }, + "m5fa7aac5375c": { + "source": "Ready", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/build/store/build-store.ts", + "kind": "data" + } + ] + }, + "m99401166672d": { + "source": "Total RAM", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "attribute" + } + ] + }, + "m3f302a2a7158": { + "source": "PID", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "mc3963aedaac6": { + "source": "Memory", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/components/runtime-panel.tsx", + "kind": "jsx" + } + ] + }, + "m416bc49a5c83": { + "source": "No active dev servers.", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m28a3a5e81d1e": { + "source": "dead", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "mb24d6d33736e": { + "source": "ready", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m59dbf36d9930": { + "source": "starting", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m06f2446a1105": { + "source": "Terminate this Vite process", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "attribute" + } + ] + }, + "m2c3494258f6c": { + "source": "Source: in-memory", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m8e3dc1afbc3e": { + "source": "servers", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m2229c690c65f": { + "source": "map in", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "mb259d30710fa": { + "source": "dev-server-core.ts", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m742f573e6634": { + "source": ". Memory is RSS from", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m0b10c8adc253": { + "source": ". Ports allocated from", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "mc9b3c38247f7": { + "source": "Total", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "attribute" + }, + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "mf4ccae29e1bb": { + "source": "Running", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/plan/plan-step.tsx", + "kind": "jsx" + } + ] + }, + "m1a4f630ac1b6": { + "source": "Stopped", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m464361940b84": { + "source": "Filter by project, owner, framework, port\\u2026", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "attribute" + } + ] + }, + "mf189411452ed": { + "source": "All states", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m387c1f0e1c9e": { + "source": "Sandbox user", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "ma3b50c476732": { + "source": "State", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "mdb9a4c7d4c19": { + "source": "CPU", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/components/runtime-panel.tsx", + "kind": "jsx" + } + ] + }, + "mbcdf701c4dfb": { + "source": "Last active", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m502030bdb117": { + "source": "No published apps yet.", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m99f356256417": { + "source": "Runtime rows appear here when a user clicks", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m859390eb495b": { + "source": "Publish", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/marketplace/my-listings/page.tsx", + "kind": "jsx" + } + ] + }, + "m353936be1dbe": { + "source": ". To see ALL projects (including drafts), open", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "mcbe106c6fba4": { + "source": "No instances match your filter.", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "expression" + } + ] + }, + "m2053dbbf6ec7": { + "source": "static", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "mad9c6fddb8fb": { + "source": "View systemd journal logs (secrets auto-redacted)", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "attribute" + } + ] + }, + "mdde8c9582576": { + "source": "Egress policy + recent build-proxy activity", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "attribute" + } + ] + }, + "m3c680169fdc4": { + "source": "systemctl restart", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "attribute" + } + ] + }, + "mc12a1b553e6e": { + "source": "systemctl stop \\u2014 terminate the running process", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "attribute" + } + ] + }, + "m995dbe2ca647": { + "source": "Metrics source: systemd cgroups via", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "mf382acc27de3": { + "source": ". Sandbox user is the per-project Linux UID created by", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "mb40e7512f994": { + "source": "setupProjectUser()", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m7853de766b41": { + "source": "Egress for", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m67a8c8843967": { + "source": "Loading egress data…", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m7c7c805550f8": { + "source": "Egress allow-list (systemd", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m7cd8ca3fea8a": { + "source": "IPAddressAllow", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m6b6e726dce43": { + "source": "None configured. App can reach", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m49960de5880e": { + "source": "localhost", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m32f43b3318b2": { + "source": "only — all other outbound TCP is blocked by", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m63eab693a29d": { + "source": "IPAddressDeny=any", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m183b8997cefc": { + "source": "Build-time proxy (Squid)", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "mf2d421e5379b": { + "source": "(disabled)", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "expression" + } + ] + }, + "m9f427d2117d5": { + "source": "No recent build-proxy activity captured.", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m33b93476cf59": { + "source": "Time", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m52a0f9b65b27": { + "source": "Method", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "me7a241debad5": { + "source": "URL", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/mcp-connector-card.tsx", + "kind": "jsx" + } + ] + }, + "m4d8000301fcc": { + "source": "Bytes", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m19e4421f6156": { + "source": "Recent egress denials (journal, last hour)", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "mdf3172baceb0": { + "source": "No deny events. (No outbound attempts blocked, or systemd's BPF firewall isn't logging at this level.)", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m57d8bda76491": { + "source": "Systemd unit:", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "md2397cca5c54": { + "source": ". Egress policy is enforced at the cgroup level by systemd's", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m5bbfd2fd41b4": { + "source": "+ per-project", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m22f5e9be30f7": { + "source": "IPAddressAllow=...", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "me2076f16ff16": { + "source": "Logs for", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "ma193d83320ed": { + "source": "Secrets auto-redacted (passwords, JWTs, API keys, hex blobs, DB URLs). Every view is recorded in the admin audit log.", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m8dcfdc43bd51": { + "source": "Filter lines\\u2026", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "attribute" + } + ] + }, + "m066fb3529387": { + "source": "Last 100", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m6204633096ca": { + "source": "Last 200", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "md015488899f8": { + "source": "Last 500", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m76bc7da847f2": { + "source": "Last 1000", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "mb64ac05f17e6": { + "source": "Live", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/marketplace/my-listings/page.tsx", + "kind": "data" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "mca7981b46ecf": { + "source": "Off", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "expression" + } + ] + }, + "macccfcdfcffe": { + "source": "Copy all visible lines", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "attribute" + } + ] + }, + "me21f935f11d7": { + "source": "Copy", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "jsx" + } + ] + }, + "me1842662a549": { + "source": "Loading logs…", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "mab209a3ee8d0": { + "source": "No log lines found.", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "expression" + } + ] + }, + "m5ea44c3961f1": { + "source": "lines", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m0c7fcf412c36": { + "source": "fetched", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m37ebafac1092": { + "source": "journalctl -u", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m3eec7bbb66da": { + "source": "Signup approval", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "jsx" + } + ] + }, + "m8e5609da435c": { + "source": "When on, new signups go to a pending queue and cannot log in until you approve them. Existing accounts are unaffected.", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + } + ] + }, + "mcbb30992f47c": { + "source": "Require approval for new signups", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + } + ] + }, + "mca2eb2c419d9": { + "source": "Message shown to pending signups", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + } + ] + }, + "m12342a6de5db": { + "source": "Doable is invite-only right now...", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "attribute" + } + ] + }, + "m48d24bbb292a": { + "source": "Shown on the signup screen after a new user submits, and on the login screen if they try to sign in while pending.", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + } + ] + }, + "mf9bfa3dc7c8f": { + "source": "Discard changes", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + } + ] + }, + "mdc85af8f2b1d": { + "source": "Saving...", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/workspace-knowledge-editor.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/Step1Welcome.tsx", + "kind": "expression" + } + ] + }, + "m7f3a3b142814": { + "source": "Save settings", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "expression" + } + ] + }, + "m0405f4b67edd": { + "source": "Pending approvals", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + } + ] + }, + "m94536c9b8727": { + "source": "No one is waiting for approval right now.", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + } + ] + }, + "mb14b800ede91": { + "source": "· signed up", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + } + ] + }, + "m6007acbe30b2": { + "source": "Approve", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + } + ] + }, + "m05a2d7332eb9": { + "source": "Deny", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + } + ] + }, + "m211d0bb8cf4f": { + "source": "Block", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + } + ] + }, + "mfd8ed7176725": { + "source": "Recently denied", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + } + ] + }, + "m69d5d5622939": { + "source": "These users were denied. They can't log in. Approve to grant access.", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + } + ] + }, + "md6cc5e773801": { + "source": "Blocked email addresses", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + } + ] + }, + "m4c9bc4985ffa": { + "source": "These emails can never sign up — not even via GitHub or Google. Unblock to allow signup again.", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + } + ] + }, + "mb710c25ac7b7": { + "source": "No blocked emails.", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + } + ] + }, + "m6973dddd3ef9": { + "source": "blocked", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + } + ] + }, + "m712da63171e0": { + "source": "Unblock", + "locations": [ + { + "file": "app/(dashboard)/admin/signups-panel.tsx", + "kind": "jsx" + } + ] + }, + "me763f2c1fa3e": { + "source": "Configure which tools are available in each AI mode.", + "locations": [ + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m6292878baa70": { + "source": "Strategize", + "locations": [ + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-chat-input.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/mode-toggle.tsx", + "kind": "data" + } + ] + }, + "mca5b9330ac54": { + "source": "(plan mode) typically uses read-only tools for analysis.", + "locations": [ + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "mbdd254b65baa": { + "source": "Build", + "locations": [ + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "data" + } + ] + }, + "md3d5d45f1a0f": { + "source": "mode has full file creation and editing tools. Changes take effect on new sessions within 60 seconds.", + "locations": [ + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m0b7baf9fb836": { + "source": "Delete mode", + "locations": [ + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "attribute" + } + ] + }, + "me71867e5aabf": { + "source": "No tools configured — will use hardcoded defaults", + "locations": [ + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m526e0087cc3f": { + "source": "Description", + "locations": [ + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/discover/share-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m222b29abe076": { + "source": "Doable Tools", + "locations": [ + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m2b6ebbf5c88e": { + "source": "SDK Built-in Tools", + "locations": [ + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m812deedf2c67": { + "source": "Strategize mode with write tools enabled may cause unintended file modifications.", + "locations": [ + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m35322b5bb5a2": { + "source": "Save Changes", + "locations": [ + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "expression" + }, + { + "file": "modules/settings/components/project-settings-ratelimit.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "mf57e3e0261a3": { + "source": "tools selected", + "locations": [ + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc39caad8b315": { + "source": "Mode name (e.g. review, debug)", + "locations": [ + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "attribute" + } + ] + }, + "m9fd728c66c9a": { + "source": "Add", + "locations": [ + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/sidebar/knowledge-tab.tsx", + "kind": "jsx" + } + ] + }, + "m49e8496ae12f": { + "source": "Add New Mode", + "locations": [ + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "jsx" + } + ] + }, + "m22252a139c6a": { + "source": "Back to search", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/[traceId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m0489e4a2ca0d": { + "source": "Trace not found", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/[traceId]/page.tsx", + "kind": "expression" + } + ] + }, + "m276010d68dda": { + "source": "Trace search", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/[traceId]/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/trace/page.tsx", + "kind": "jsx" + } + ] + }, + "m4fc52a3c4c55": { + "source": "Duration", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/[traceId]/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/trace/_components/results-table.tsx", + "kind": "jsx" + } + ] + }, + "mb3393bfb2a55": { + "source": "Spans", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/[traceId]/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/trace/_components/results-table.tsx", + "kind": "jsx" + } + ] + }, + "mcb702378f315": { + "source": "Errors", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/[traceId]/page.tsx", + "kind": "attribute" + } + ] + }, + "m604dce445e32": { + "source": "Services", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/[traceId]/page.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/admin/trace/_components/results-table.tsx", + "kind": "jsx" + } + ] + }, + "m681615e94f41": { + "source": "Linked chat trace:", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/[traceId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m0bc8506e4d85": { + "source": "session:", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/[traceId]/page.tsx", + "kind": "jsx" + } + ] + }, + "md776d0b395c6": { + "source": "Flame graph", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/[traceId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m8229bdcc60d8": { + "source": "All logs", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/[traceId]/page.tsx", + "kind": "jsx" + } + ] + }, + "mf01563f471a8": { + "source": "Span detail", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/[traceId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m107c08e85745": { + "source": "Click a span in the flame graph to inspect.", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/[traceId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m8219340f90cf": { + "source": "No correlated logs.", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/[traceId]/page.tsx", + "kind": "jsx" + } + ] + }, + "md4903171322c": { + "source": "Trace flame graph", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/flame-graph.tsx", + "kind": "attribute" + } + ] + }, + "m426b31c2ac95": { + "source": "No traces match these filters.", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/results-table.tsx", + "kind": "jsx" + } + ] + }, + "m846211dee5c5": { + "source": "Root span", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/results-table.tsx", + "kind": "jsx" + } + ] + }, + "mc4cbbc62b684": { + "source": "Trace ID", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/results-table.tsx", + "kind": "jsx" + } + ] + }, + "mca00fccfb408": { + "source": "error", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/results-table.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/trace/_components/search-form.tsx", + "kind": "jsx" + } + ] + }, + "mc071cf5f5ed6": { + "source": "running", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/results-table.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/trace/_components/search-form.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/panels/activity-feed-panel.tsx", + "kind": "jsx" + } + ] + }, + "mf77d1bb58da8": { + "source": "timeout", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/results-table.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/trace/_components/search-form.tsx", + "kind": "jsx" + } + ] + }, + "m2689367b205c": { + "source": "ok", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/results-table.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/trace/_components/search-form.tsx", + "kind": "jsx" + } + ] + }, + "mfdac5dd749e1": { + "source": "Root span name contains", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/search-form.tsx", + "kind": "attribute" + } + ] + }, + "m4b0ed88f7d99": { + "source": "Attributes", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/span-detail.tsx", + "kind": "data" + } + ] + }, + "m8d14f6e72de8": { + "source": "Events", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/span-detail.tsx", + "kind": "data" + } + ] + }, + "mb4fe3d529dee": { + "source": "Exception", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/span-detail.tsx", + "kind": "data" + } + ] + }, + "mea2100dc89ae": { + "source": "Logs", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/span-detail.tsx", + "kind": "data" + } + ] + }, + "m08863725c9d1": { + "source": "kind:", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/span-detail.tsx", + "kind": "jsx" + } + ] + }, + "me92e1c5195b2": { + "source": "status:", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/span-detail.tsx", + "kind": "jsx" + } + ] + }, + "ma304cd723646": { + "source": "duration:", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/span-detail.tsx", + "kind": "jsx" + } + ] + }, + "m36fdcc2069a7": { + "source": "No logs for this span", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/span-detail.tsx", + "kind": "jsx" + } + ] + }, + "mf1b4db36f908": { + "source": "attributes", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/span-detail.tsx", + "kind": "jsx" + } + ] + }, + "m16f4238962d7": { + "source": "Search traces across services. Click a row to open the flame graph.", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/page.tsx", + "kind": "jsx" + } + ] + }, + "m9a815bd80853": { + "source": "Enforced", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "data" + } + ] + }, + "m5126956fae89": { + "source": "User · Copilot", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "data" + } + ] + }, + "m68dea4bdcd64": { + "source": "User · Custom", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "data" + } + ] + }, + "m3b4383786e6b": { + "source": "User override", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "data" + } + ] + }, + "mdaa1ddf84077": { + "source": "WS default · Copilot", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m6d149e5af3d3": { + "source": "WS default · Custom", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "mda3706ee462a": { + "source": "Workspace default", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "data" + } + ] + }, + "m0286249762f7": { + "source": "Auto", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "data" + }, + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "expression" + }, + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "expression" + } + ] + }, + "m3bbfba0ec78f": { + "source": "Auto-select", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "mef26da36dc29": { + "source": "· no override", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m868430976481": { + "source": "No credits", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m11fd3c84c2e5": { + "source": "No source set", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m69c81094e14e": { + "source": "Copilot ·", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m2ccc863d9382": { + "source": "default account", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "expression" + } + ] + }, + "m39fcda80bcbe": { + "source": "Custom ·", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m5c4c1964340a": { + "source": "provider", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "expression" + }, + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "expression" + } + ] + }, + "m44dd5f163cba": { + "source": "Role:", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc6c28dbbbd62": { + "source": "Plan:", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + } + ] + }, + "m4de05f38c64b": { + "source": "Active Model", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m01580cdc2633": { + "source": "AI Model & Source", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m2a6b24ad2872": { + "source": "Credits", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/billing/components/credit-display.tsx", + "kind": "jsx" + } + ] + }, + "mef00c4881b86": { + "source": "Currently Active", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m11a931060dad": { + "source": "Model:", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/token-counter.tsx", + "kind": "jsx" + } + ] + }, + "mb35ca060d549": { + "source": "Auto-select (no model set)", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "expression" + } + ] + }, + "mc707ee4ecc24": { + "source": "Source:", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "mea320b358837": { + "source": "Subscription:", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "maaf36296577f": { + "source": "Workspace enforcement is ON — this user cannot choose their own model.", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc8b45bcfb05e": { + "source": "Resolution: Enforcement → User override → Workspace default → Auto-select", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m5196192141c2": { + "source": "Set Override Source", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "mf3090488d3bd": { + "source": "No specific account (auto)", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m87e09fc5cccf": { + "source": "(custom)", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "ma236626facf1": { + "source": "Auto (provider default)", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "md1f6ee835fff": { + "source": "Select a provider to load its models.", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m0953e0d5167d": { + "source": "Reset to Defaults", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "mb36c2611dcdf": { + "source": "Daily", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/billing/components/credit-display.tsx", + "kind": "attribute" + } + ] + }, + "mf83916135509": { + "source": "used", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m9b11f6b707d2": { + "source": "Monthly", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/billing/components/credit-display.tsx", + "kind": "attribute" + }, + { + "file": "modules/billing/components/pricing-cards.tsx", + "kind": "jsx" + } + ] + }, + "m283148958c53": { + "source": "Rollover", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/billing/components/credit-display.tsx", + "kind": "attribute" + } + ] + }, + "mb0a1f428ffe3": { + "source": "bonus credits", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "ma1a5936d3b0f": { + "source": "Max", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m175288c4eab8": { + "source": "Bulk Edit Users", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m04f8996da763": { + "source": "user", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m043a718774c5": { + "source": "s", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "expression" + } + ] + }, + "mf9641eb1f0d7": { + "source": "Set AI Model & Source", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m987811a8b0dd": { + "source": "Replaces user's current override", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "mad184ce4ccd5": { + "source": "Select a model...", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "jsx" + } + ] + }, + "m22aabd44c092": { + "source": "Add Additional Quota", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "me8e43497c4f8": { + "source": "Adds to each user's existing credits", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m14c88bdc459b": { + "source": "+ Daily", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m6a6260fe12df": { + "source": "+ Monthly", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "me98944151c8b": { + "source": "+ Rollover", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m5e3c350d16ce": { + "source": "These amounts are", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m279b8a60f444": { + "source": "added", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/components/version-diff-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m0ff6fa1d4a25": { + "source": "to each selected user's current totals (not replaced).", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m4833e4160024": { + "source": "Set Platform Role", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m93df67719eaa": { + "source": "Replaces each user's role", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "mdb4ba1f73d7a": { + "source": "You're in the selection. Deselect yourself before changing roles in bulk — you can't change your own platform role.", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "maaddf0ef0547": { + "source": "Set Workspace Plan", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m752bc4378dc7": { + "source": "Replaces each user's plan", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m7c676eb1dbf8": { + "source": "Applying to", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc7bb319b4e98": { + "source": "users…", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "maab0d28eb783": { + "source": "Apply to", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "mbeb0e209e98e": { + "source": "Search users...", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "attribute" + } + ] + }, + "m08e774c5bacc": { + "source": "All sources", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m4a2fae93bd0c": { + "source": "Copilot only", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "me658e7e5ff30": { + "source": "Custom only", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "md7cbbb688b2e": { + "source": "selected", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-toolbar.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/user-allocations-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "m31c247d8ed4f": { + "source": "Bulk Edit", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m1fc9a387654d": { + "source": "Select all", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "attribute" + } + ] + }, + "mbea867d1de69": { + "source": "Role / Plan", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m4999c6c6c7ba": { + "source": "Subscription", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "maf435cdb859d": { + "source": "Credits (Daily)", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m9ef43b24ae01": { + "source": "Manage user", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "attribute" + } + ] + }, + "m3ccbd64ae664": { + "source": "No users match your search.", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "expression" + } + ] + }, + "mce0171e51b07": { + "source": "No users found.", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "expression" + } + ] + }, + "md47dbbe2a22a": { + "source": "Enforced = admin-locked model", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "md51606728956": { + "source": "User · Copilot/Custom = personal override", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "m1ccbb4b01d71": { + "source": "WS default = inheriting workspace setting", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc606591861bf": { + "source": "Auto-select = no model configured anywhere", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "jsx" + } + ] + }, + "mbef9d2f4e0d1": { + "source": "Connecting your GitHub account...", + "locations": [ + { + "file": "app/(dashboard)/ai-settings/callback/page.tsx", + "kind": "jsx" + } + ] + }, + "m3c57932bbc0a": { + "source": "GitHub Copilot connected! Switch back to the setup wizard tab — it will pick this up automatically.", + "locations": [ + { + "file": "app/(dashboard)/ai-settings/callback/page.tsx", + "kind": "expression" + } + ] + }, + "m24b5b4f1f9d1": { + "source": "GitHub account connected! You can close this window.", + "locations": [ + { + "file": "app/(dashboard)/ai-settings/callback/page.tsx", + "kind": "expression" + } + ] + }, + "md8fd001856d3": { + "source": "GitHub account connected! Redirecting...", + "locations": [ + { + "file": "app/(dashboard)/ai-settings/callback/page.tsx", + "kind": "expression" + } + ] + }, + "m267d859433fb": { + "source": "Back to AI Settings", + "locations": [ + { + "file": "app/(dashboard)/ai-settings/callback/page.tsx", + "kind": "jsx" + } + ] + }, + "m54b20dda3acc": { + "source": "Loading billing...", + "locations": [ + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + } + ] + }, + "m65e4c127d235": { + "source": "Unable to load billing", + "locations": [ + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + } + ] + }, + "m1d8543fe41fb": { + "source": "Please sign in to manage your subscription and credits.", + "locations": [ + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + } + ] + }, + "mb59e0c1cc1e1": { + "source": "Back to dashboard", + "locations": [ + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/settings/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + } + ] + }, + "m3ac8bbca9a74": { + "source": "Billing", + "locations": [ + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + } + ] + }, + "m6dd093cb38fa": { + "source": "Manage your subscription, credits, and usage.", + "locations": [ + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + } + ] + }, + "m6de44edb3c0f": { + "source": "Subscription updated successfully!", + "locations": [ + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + } + ] + }, + "me4873d5586db": { + "source": "Checkout was canceled. No changes were made.", + "locations": [ + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + } + ] + }, + "mcada2bd2464a": { + "source": "Credits added successfully!", + "locations": [ + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + } + ] + }, + "m2db046678b9c": { + "source": "Dismiss error", + "locations": [ + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "attribute" + } + ] + }, + "mcbc4ef9225a0": { + "source": "Manage Subscription", + "locations": [ + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + } + ] + }, + "mb9e490645dd2": { + "source": "Buy 100 Credits", + "locations": [ + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + } + ] + }, + "m360487bbf13d": { + "source": "Unable to load plans. Please try again later.", + "locations": [ + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + } + ] + }, + "mde568b51fde5": { + "source": "Usage History", + "locations": [ + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + } + ] + }, + "me53e5ce92da3": { + "source": "No usage recorded yet.", + "locations": [ + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + } + ] + }, + "mede4cc5b110e": { + "source": "Credit usage will appear here once you start using AI features.", + "locations": [ + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + } + ] + }, + "m99c40ab40592": { + "source": "Date", + "locations": [ + { + "file": "app/(dashboard)/billing/page.tsx", + "kind": "jsx" + } + ] + }, + "m89ebfb7a88ca": { + "source": "Auto-detect", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-chat-input.tsx", + "kind": "data" + } + ] + }, + "me697cc1e45af": { + "source": "Attach files", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-chat-input.tsx", + "kind": "attribute" + } + ] + }, + "m44abdc1c36d4": { + "source": "Strategize first, then do the work", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-chat-input.tsx", + "kind": "attribute" + } + ] + }, + "m32269bae4ea3": { + "source": "Start working immediately", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-chat-input.tsx", + "kind": "attribute" + } + ] + }, + "m104ab9213e28": { + "source": "Work", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-chat-input.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/mode-toggle.tsx", + "kind": "data" + } + ] + }, + "m3d591e826d54": { + "source": "Stop recording", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-chat-input.tsx", + "kind": "expression" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m8748f23993a8": { + "source": "Voice input", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-chat-input.tsx", + "kind": "expression" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + }, + { + "file": "app/page.tsx", + "kind": "attribute" + } + ] + }, + "md5f6a9a87d9a": { + "source": "Voice input isn't supported in this browser. Try Chrome or Edge.", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-chat-input.tsx", + "kind": "attribute" + } + ] + }, + "m3ae25abdc079": { + "source": "Pick framework explicitly, or let the server detect from your prompt", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-chat-input.tsx", + "kind": "attribute" + } + ] + }, + "m2ef42ec21d93": { + "source": "Published", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-constants.ts", + "kind": "data" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-toolbar.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/project-list.tsx", + "kind": "data" + } + ] + }, + "mebf12ef47cf5": { + "source": "Draft", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-constants.ts", + "kind": "data" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-toolbar.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/marketplace/my-listings/page.tsx", + "kind": "data" + }, + { + "file": "modules/dashboard/components/project-list.tsx", + "kind": "data" + } + ] + }, + "m3b951ebd7c96": { + "source": "Creating", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-constants.ts", + "kind": "data" + }, + { + "file": "modules/dashboard/components/project-list.tsx", + "kind": "data" + } + ] + }, + "m54a0e8c17ebb": { + "source": "Error", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-constants.ts", + "kind": "data" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-toolbar.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + }, + { + "file": "modules/dashboard/components/project-list.tsx", + "kind": "data" + } + ] + }, + "mea1d0f038bbd": { + "source": "Open in editor", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-context-menu.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-project-card.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-project-row.tsx", + "kind": "jsx" + } + ] + }, + "m3064d79a295c": { + "source": "Rename", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-context-menu.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-dialogs.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-project-card.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-project-row.tsx", + "kind": "jsx" + } + ] + }, + "m02cdaabfca80": { + "source": "Duplicate", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-context-menu.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-project-card.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-project-row.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/project-list.tsx", + "kind": "jsx" + } + ] + }, + "m91d631e150a3": { + "source": "Move to folder", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-context-menu.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-dialogs.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-toolbar.tsx", + "kind": "jsx" + } + ] + }, + "m318e826a7516": { + "source": "Unstar", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-context-menu.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-project-card.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-project-row.tsx", + "kind": "expression" + } + ] + }, + "me357d396871d": { + "source": "Star", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-context-menu.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-project-card.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-project-row.tsx", + "kind": "expression" + } + ] + }, + "m9c0b617e79e9": { + "source": "Delete project", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-dialogs.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m935c9c7c903b": { + "source": "Are you sure you want to delete “", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-dialogs.tsx", + "kind": "jsx" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + } + ] + }, + "m093fda19d66c": { + "source": "”? This action cannot be undone.", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-dialogs.tsx", + "kind": "jsx" + } + ] + }, + "m2577c0f557b2": { + "source": "projects", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-dialogs.tsx", + "kind": "jsx" + } + ] + }, + "m3a57bb9fb3bf": { + "source": "Are you sure you want to delete", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-dialogs.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/sidebar/file-tree-nodes.tsx", + "kind": "jsx" + } + ] + }, + "me75b917774a9": { + "source": "selected project", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-dialogs.tsx", + "kind": "jsx" + } + ] + }, + "m30f98589bee4": { + "source": "? This action cannot be undone.", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-dialogs.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m244210e48437": { + "source": "project", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-dialogs.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "jsx" + } + ] + }, + "m2a0478eef536": { + "source": "Rename project", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-dialogs.tsx", + "kind": "jsx" + } + ] + }, + "m25498193b898": { + "source": "Project name", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-dialogs.tsx", + "kind": "attribute" + }, + { + "file": "components/templates/use-template-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/supabase-provision-views.tsx", + "kind": "jsx" + } + ] + }, + "m5d4f07e7b76d": { + "source": "Choose a folder for this project.", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-dialogs.tsx", + "kind": "jsx" + } + ] + }, + "m467e5499c616": { + "source": "Root (no folder)", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-dialogs.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-toolbar.tsx", + "kind": "jsx" + } + ] + }, + "m73f0f2fe2594": { + "source": "No folders yet. Create one in the sidebar.", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-dialogs.tsx", + "kind": "jsx" + } + ] + }, + "m5c62e091b8c0": { + "source": "P", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-project-card.tsx", + "kind": "expression" + } + ] + }, + "m7d749dd1be58": { + "source": "Update Discover listing", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-project-card.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-project-row.tsx", + "kind": "expression" + }, + { + "file": "modules/discover/share-dialog.tsx", + "kind": "expression" + } + ] + }, + "m826ae2f380ce": { + "source": "Share to Discover", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-project-card.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-project-row.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/discover/share-dialog.tsx", + "kind": "expression" + } + ] + }, + "ma25513c7e0f6": { + "source": "U", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-project-card.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-project-row.tsx", + "kind": "expression" + } + ] + }, + "m068bd449d0fc": { + "source": "Shared to Discover", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-project-card.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-project-row.tsx", + "kind": "attribute" + } + ] + }, + "md4a33d5b78bc": { + "source": "Discover", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-project-card.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-project-row.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/discover/page.tsx", + "kind": "jsx" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "attribute" + } + ] + }, + "m8e445e8aa6d2": { + "source": "Recently viewed", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-toolbar.tsx", + "kind": "data" + } + ] + }, + "m069d9457befe": { + "source": "My projects", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-toolbar.tsx", + "kind": "data" + } + ] + }, + "m56b564b75c7f": { + "source": "Templates", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-toolbar.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/dashboard/templates/page.tsx", + "kind": "jsx" + }, + { + "file": "app/home-footer.tsx", + "kind": "data" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "attribute" + } + ] + }, + "m723735c4aab6": { + "source": "Browse all", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-toolbar.tsx", + "kind": "jsx" + } + ] + }, + "mc59dd5a3c5a2": { + "source": "Search projects...", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-toolbar.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/discover/page.tsx", + "kind": "attribute" + } + ] + }, + "m32b9b2c4de19": { + "source": "All status", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-toolbar.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/dashboard/dashboard-toolbar.tsx", + "kind": "jsx" + } + ] + }, + "m07a2d579c3f0": { + "source": "Starred", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-toolbar.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "expression" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "attribute" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + } + ] + }, + "m47da4e5507b6": { + "source": "Grid view", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-toolbar.tsx", + "kind": "attribute" + } + ] + }, + "m5d8c3e1b635e": { + "source": "List view", + "locations": [ + { + "file": "app/(dashboard)/dashboard/dashboard-toolbar.tsx", + "kind": "attribute" + } + ] + }, + "m3a78695388b3": { + "source": "Home", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "jsx" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/preview/preview-panel.tsx", + "kind": "data" + } + ] + }, + "mf9182f6f2dc8": { + "source": "Created by me", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "expression" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "attribute" + } + ] + }, + "m0fd8abc26061": { + "source": "Shared with me", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "expression" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "attribute" + } + ] + }, + "m33d7d4f209a3": { + "source": "Starred Projects", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "expression" + } + ] + }, + "m452ab89d46b7": { + "source": "My Projects", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "expression" + } + ] + }, + "m0b47e3bfdd0b": { + "source": "Shared Projects", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "expression" + } + ] + }, + "ma41eb2bf7245": { + "source": "New project", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "jsx" + } + ] + }, + "med1573abda08": { + "source": "Loading projects...", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/discover/page.tsx", + "kind": "jsx" + } + ] + }, + "mdcd1d5223f73": { + "source": "Name", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m8b31692427de": { + "source": "Loading templates...", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/dashboard/templates/page.tsx", + "kind": "jsx" + } + ] + }, + "m805cbc51a3bd": { + "source": "No templates available.", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m3043f9fa4d31": { + "source": "This folder is empty", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "jsx" + } + ] + }, + "m742b048e3f6c": { + "source": "Create a new project inside", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "jsx" + } + ] + }, + "m9d6325c835da": { + "source": "this folder", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "expression" + }, + { + "file": "modules/dashboard/components/add-projects-to-folder-dialog.tsx", + "kind": "expression" + } + ] + }, + "m9f7058396947": { + "source": ", or move existing projects here.", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "jsx" + } + ] + }, + "mf4894985b57b": { + "source": "Create a project here", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "jsx" + } + ] + }, + "m3bda804adf31": { + "source": "Add existing projects", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "jsx" + } + ] + }, + "m960acc933ef3": { + "source": "No projects found", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "expression" + } + ] + }, + "m76125d30fd2e": { + "source": "No matching projects", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "expression" + } + ] + }, + "mf83c80652286": { + "source": "No projects yet", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "expression" + }, + { + "file": "modules/dashboard/components/sidebar.tsx", + "kind": "jsx" + } + ] + }, + "md3a0cd264f2b": { + "source": "Try adjusting your filters.", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "expression" + } + ] + }, + "m1ee259231d41": { + "source": "Describe what you want to build in the chat above, or import an existing project from GitHub.", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "expression" + } + ] + }, + "m383efa96431b": { + "source": "Import from GitHub", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/components/import-github-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mde22447d91bb": { + "source": "Clear all filters", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "jsx" + } + ] + }, + "m47d2a515ef2f": { + "source": "Loading...", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "jsx" + }, + { + "file": "app/loading.tsx", + "kind": "jsx" + }, + { + "file": "components/auth-guard.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/context-files/context-panel.tsx", + "kind": "jsx" + } + ] + }, + "mac8991ef0101": { + "source": "Load more", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "expression" + } + ] + }, + "m4c78a2e4f2e0": { + "source": "All Templates", + "locations": [ + { + "file": "app/(dashboard)/dashboard/templates/page.tsx", + "kind": "data" + } + ] + }, + "m15f2172d71d3": { + "source": "Starters", + "locations": [ + { + "file": "app/(dashboard)/dashboard/templates/page.tsx", + "kind": "data" + }, + { + "file": "modules/dashboard/components/template-gallery.tsx", + "kind": "data" + } + ] + }, + "ma53bcafb67d9": { + "source": "Dashboards", + "locations": [ + { + "file": "app/(dashboard)/dashboard/templates/page.tsx", + "kind": "data" + }, + { + "file": "modules/dashboard/components/template-gallery.tsx", + "kind": "data" + } + ] + }, + "mf5904cf7a123": { + "source": "Marketing", + "locations": [ + { + "file": "app/(dashboard)/dashboard/templates/page.tsx", + "kind": "data" + }, + { + "file": "modules/dashboard/components/template-gallery.tsx", + "kind": "data" + }, + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "data" + } + ] + }, + "m02d9be75b85e": { + "source": "E-commerce", + "locations": [ + { + "file": "app/(dashboard)/dashboard/templates/page.tsx", + "kind": "data" + }, + { + "file": "modules/dashboard/components/template-gallery.tsx", + "kind": "data" + } + ] + }, + "m47bd29075f8b": { + "source": "Content", + "locations": [ + { + "file": "app/(dashboard)/dashboard/templates/page.tsx", + "kind": "data" + }, + { + "file": "modules/dashboard/components/template-gallery.tsx", + "kind": "data" + }, + { + "file": "modules/editor/visual-edit/property-panels/text-editor.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/skills-rules-cards.tsx", + "kind": "jsx" + } + ] + }, + "m845f9286400f": { + "source": "Personal", + "locations": [ + { + "file": "app/(dashboard)/dashboard/templates/page.tsx", + "kind": "data" + }, + { + "file": "modules/ai-settings/components/provider-wizard.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/template-gallery.tsx", + "kind": "data" + } + ] + }, + "mf42bca637cb3": { + "source": "Productivity", + "locations": [ + { + "file": "app/(dashboard)/dashboard/templates/page.tsx", + "kind": "data" + }, + { + "file": "modules/dashboard/components/template-gallery.tsx", + "kind": "data" + }, + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "data" + } + ] + }, + "ma1fffd50941f": { + "source": "Start from a template to build your next project", + "locations": [ + { + "file": "app/(dashboard)/dashboard/templates/page.tsx", + "kind": "jsx" + } + ] + }, + "m79760c54dced": { + "source": "Search templates...", + "locations": [ + { + "file": "app/(dashboard)/dashboard/templates/page.tsx", + "kind": "attribute" + }, + { + "file": "modules/dashboard/components/template-gallery.tsx", + "kind": "attribute" + } + ] + }, + "ma28860eb8c5f": { + "source": "No templates in this category yet.", + "locations": [ + { + "file": "app/(dashboard)/dashboard/templates/page.tsx", + "kind": "expression" + }, + { + "file": "modules/dashboard/components/template-gallery.tsx", + "kind": "jsx" + } + ] + }, + "m99528001baf3": { + "source": "Failed to load projects", + "locations": [ + { + "file": "app/(dashboard)/dashboard/use-dashboard.ts", + "kind": "feedback" + } + ] + }, + "mc533cafab69e": { + "source": "Featured", + "locations": [ + { + "file": "app/(dashboard)/discover/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/discover/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "jsx" + } + ] + }, + "m76298e6377d7": { + "source": "Remixing...", + "locations": [ + { + "file": "app/(dashboard)/discover/page.tsx", + "kind": "jsx" + }, + { + "file": "components/templates/use-template-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mf84ed4375595": { + "source": "Remix", + "locations": [ + { + "file": "app/(dashboard)/discover/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + }, + { + "file": "components/templates/use-template-dialog.tsx", + "kind": "expression" + } + ] + }, + "m0225763cf88e": { + "source": "What's the difference between Discover and Marketplace?", + "locations": [ + { + "file": "app/(dashboard)/discover/page.tsx", + "kind": "attribute" + }, + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "attribute" + } + ] + }, + "m8ebec9e72543": { + "source": "Discover vs Marketplace", + "locations": [ + { + "file": "app/(dashboard)/discover/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/help/page.tsx", + "kind": "data" + }, + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "jsx" + } + ] + }, + "m05e14791da05": { + "source": "Explore community projects and remix them into your own", + "locations": [ + { + "file": "app/(dashboard)/discover/page.tsx", + "kind": "jsx" + } + ] + }, + "ma52ace420f21": { + "source": "All", + "locations": [ + { + "file": "app/(dashboard)/discover/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "expression" + }, + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "expression" + }, + { + "file": "modules/dashboard/components/template-gallery.tsx", + "kind": "data" + } + ] + }, + "ma3498f96dc20": { + "source": "No community projects yet. Be the first to publish!", + "locations": [ + { + "file": "app/(dashboard)/discover/page.tsx", + "kind": "expression" + } + ] + }, + "ma57b08a480b8": { + "source": "Previous", + "locations": [ + { + "file": "app/(dashboard)/discover/page.tsx", + "kind": "jsx" + } + ] + }, + "m1ff57a29d7c9": { + "source": "Next", + "locations": [ + { + "file": "app/(dashboard)/discover/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "jsx" + } + ] + }, + "mab827e3fe17d": { + "source": "Something went wrong", + "locations": [ + { + "file": "app/(dashboard)/error.tsx", + "kind": "jsx" + }, + { + "file": "app/error.tsx", + "kind": "jsx" + }, + { + "file": "app/global-error.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/error-recovery-card.tsx", + "kind": "data" + } + ] + }, + "m7053d12aceb5": { + "source": "An unexpected error occurred.", + "locations": [ + { + "file": "app/(dashboard)/error.tsx", + "kind": "expression" + }, + { + "file": "app/global-error.tsx", + "kind": "expression" + } + ] + }, + "m88af1e0546d8": { + "source": "Discover vs Marketplace — Doable", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "data" + } + ] + }, + "mbff0e07c6ec2": { + "source": "Understand the difference between Discover, Marketplace, and Deploy.", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "data" + } + ] + }, + "mb79cac926e0b": { + "source": "Help", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/help/page.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "attribute" + } + ] + }, + "m5fec231901d2": { + "source": "Doable has three places to share things with the world. Here's how they're different.", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m4c236daafb44": { + "source": "Deploy", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "jsx" + } + ] + }, + "m594d7b838c48": { + "source": "Ships your project to a public URL.", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m603a62ffbe2f": { + "source": "• Sets the live URL anyone can visit", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "ma76d071191e2": { + "source": "• Stays under your account", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m382a6e093eb5": { + "source": "• Other users", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m9a43b6dac466": { + "source": "cannot", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m08294dbd26cb": { + "source": "remix or install it", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m76fb907d25ac": { + "source": "Lists your", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "me5e9d2627c3d": { + "source": "whole project", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m8aeebc476b2c": { + "source": "in the community feed.", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "mbe9bf84c4556": { + "source": "• Other users can browse and remix", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m860ac51ed697": { + "source": "• Remixes copy your code into their workspace", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m2d7246a61a35": { + "source": "• Free, no review needed", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "mdcde2662beff": { + "source": "List on Marketplace", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "jsx" + } + ] + }, + "m0e17c8169056": { + "source": "Packages an", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m24d59694d449": { + "source": "AI environment", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m3cf63ee57e32": { + "source": "as an installable bundle.", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m045c1a848d53": { + "source": "• Skills + rules + knowledge + MCP connectors", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m5aaf523bb26a": { + "source": "• Installs into anyone's workspace", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "mfbcd25a5d8b6": { + "source": "• Connector bundles need a quick review", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m8e8eedc83b10": { + "source": "Which should I use?", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m4c4e436f9a45": { + "source": "Glossary", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m78977aa618ad": { + "source": "A whole app or site you build in the editor — code, pages, components.", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m9e471951a1b4": { + "source": "Environment", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "data" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "jsx" + } + ] + }, + "mf6a4d1b58a05": { + "source": "A bundle of AI configuration that augments your editor: skills (instructions), rules (always-on context), knowledge files, and MCP connectors.", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "mf4a96457c02c": { + "source": "Copy of someone else's project into your account. You own the copy and can change anything.", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m569ca49f4aaf": { + "source": "Install", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "expression" + } + ] + }, + "m851e3c8b2883": { + "source": "Add a Marketplace environment to one of your workspaces. Installs are versioned, you can update or uninstall any time.", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m2f5c692e4571": { + "source": "MCP connector", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m61a400bfad07": { + "source": "A bridge that lets the AI use a third-party service (Slack, GitHub, your database, etc.) via the Model Context Protocol standard.", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m3a2c4a012416": { + "source": "Standards we follow", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m2f58ddf9c271": { + "source": "Marketplace bundles are interoperable. The same bundle installs in Doable and works in tools that follow these standards.", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m9f4439ee1f60": { + "source": "Anthropic Agent Skills", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "mb72c8beb0a91": { + "source": "with frontmatter.", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m97c8607c5e1f": { + "source": "Model Context Protocol (MCP)", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m8be65a02b4ba": { + "source": "server config compatible with Claude Desktop and Cursor.", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m02453bfe1123": { + "source": "Cursor Rules", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m0d879a085b16": { + "source": ".mdc", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m432ac09412ef": { + "source": "rule files.", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m63a299e79c0f": { + "source": "Claude Code Plugins", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "mf4bf1b7070e1": { + "source": "manifest layout.", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "mda587d5e486b": { + "source": "Browse Discover", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "md319099fe005": { + "source": "Browse Marketplace", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "mdd58287e4103": { + "source": "List your environment", + "locations": [ + { + "file": "app/(dashboard)/help/discover-vs-marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m91e99107670b": { + "source": "Help Center — Doable", + "locations": [ + { + "file": "app/(dashboard)/help/page.tsx", + "kind": "data" + } + ] + }, + "mf5f84112997e": { + "source": "Guides and articles to help you get the most out of Doable.", + "locations": [ + { + "file": "app/(dashboard)/help/page.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/help/page.tsx", + "kind": "jsx" + } + ] + }, + "m1d8b9ff9d6d5": { + "source": "Understand the difference between Discover, Marketplace, and Deploy — and when to use each.", + "locations": [ + { + "file": "app/(dashboard)/help/page.tsx", + "kind": "data" + } + ] + }, + "ma78cebc44214": { + "source": "Help Center", + "locations": [ + { + "file": "app/(dashboard)/help/page.tsx", + "kind": "jsx" + } + ] + }, + "mb40b3713b43d": { + "source": "Open menu", + "locations": [ + { + "file": "app/(dashboard)/layout.tsx", + "kind": "attribute" + } + ] + }, + "mf7439d15c4d4": { + "source": "Listing not found", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "m3fa15e399987": { + "source": "It may have been removed or unpublished.", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "mf34634e647ca": { + "source": "Back to Marketplace", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "mc608981d8d68": { + "source": "Marketplace", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/marketplace/my-listings/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "attribute" + } + ] + }, + "m2c379af32973": { + "source": "Verified publisher", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "attribute" + } + ] + }, + "mf8b32f4e92bd": { + "source": "Installed", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/marketplace/install-permission-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "expression" + } + ] + }, + "mb9b5eae4ef79": { + "source": "Install to:", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "m30670d5071e3": { + "source": "Installs to", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "m8621cdb8240d": { + "source": "No workspace available", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "mc97ace4c8fef": { + "source": "review", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "m1e142e6277b1": { + "source": "install", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/marketplace/my-listings/page.tsx", + "kind": "jsx" + } + ] + }, + "m4efca0d10c5f": { + "source": "About", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + }, + { + "file": "app/home-footer.tsx", + "kind": "data" + } + ] + }, + "m2527a18acbad": { + "source": "No description provided.", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "expression" + } + ] + }, + "m3a5dae10cecd": { + "source": "What's new in v", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "m84cb7871b741": { + "source": "Reviews", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "m1e1bb23a19c4": { + "source": "No reviews yet.", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "m9f05cde557b1": { + "source": "What's included", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "mb99cd7c6ce49": { + "source": "Knowledge files", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "m0b7fa0586cbd": { + "source": "MCP connectors", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "m0492fbeca82c": { + "source": "Empty environment", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "mf188a8ab9b65": { + "source": "Includes MCP connectors", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "ma56ef92e6a3c": { + "source": "This bundle adds", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "mc60abc330016": { + "source": "external tool connection", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "mc3a49eb654d1": { + "source": ". You'll be asked to authorise each one separately after install.", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "m1331275bc537": { + "source": "Tags", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m41490494a9b2": { + "source": "What is the Marketplace?", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "m8cf76fa99dc0": { + "source": "Learn the difference between Discover (whole projects) and the Marketplace (AI environments).", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + } + ] + }, + "m60fb40ded4de": { + "source": "Report this listing", + "locations": [ + { + "file": "app/(dashboard)/marketplace/[slug]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/marketplace/report-listing-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mc39059141ced": { + "source": "In review", + "locations": [ + { + "file": "app/(dashboard)/marketplace/my-listings/page.tsx", + "kind": "data" + } + ] + }, + "mbc96567e77ca": { + "source": "Unlisted", + "locations": [ + { + "file": "app/(dashboard)/marketplace/my-listings/page.tsx", + "kind": "data" + } + ] + }, + "maea4a04a8042": { + "source": "Rejected", + "locations": [ + { + "file": "app/(dashboard)/marketplace/my-listings/page.tsx", + "kind": "data" + } + ] + }, + "mdb849f91bd40": { + "source": "My listings", + "locations": [ + { + "file": "app/(dashboard)/marketplace/my-listings/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "jsx" + } + ] + }, + "m706a22635b66": { + "source": "New listing", + "locations": [ + { + "file": "app/(dashboard)/marketplace/my-listings/page.tsx", + "kind": "jsx" + } + ] + }, + "m38975ad4e835": { + "source": "No listings yet", + "locations": [ + { + "file": "app/(dashboard)/marketplace/my-listings/page.tsx", + "kind": "jsx" + } + ] + }, + "md1472eec2b9d": { + "source": "Package one of your environments and share it with the community. Listings appear in the Marketplace and can be installed in any workspace.", + "locations": [ + { + "file": "app/(dashboard)/marketplace/my-listings/page.tsx", + "kind": "jsx" + } + ] + }, + "m51c8f370595c": { + "source": "Create your first listing", + "locations": [ + { + "file": "app/(dashboard)/marketplace/my-listings/page.tsx", + "kind": "jsx" + } + ] + }, + "m4c94485e0c21": { + "source": "v", + "locations": [ + { + "file": "app/(dashboard)/marketplace/my-listings/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/components/restore-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/components/version-diff-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/components/version-diff-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mdcc839a4015c": { + "source": "View", + "locations": [ + { + "file": "app/(dashboard)/marketplace/my-listings/page.tsx", + "kind": "jsx" + } + ] + }, + "m7e6fefff0f0a": { + "source": "Hidden", + "locations": [ + { + "file": "app/(dashboard)/marketplace/my-listings/page.tsx", + "kind": "jsx" + } + ] + }, + "m829b028565e1": { + "source": "Delete listing", + "locations": [ + { + "file": "app/(dashboard)/marketplace/my-listings/page.tsx", + "kind": "attribute" + } + ] + }, + "m9e9d0b8dc878": { + "source": "Delete this listing?", + "locations": [ + { + "file": "app/(dashboard)/marketplace/my-listings/page.tsx", + "kind": "jsx" + } + ] + }, + "m01ad2f8a4375": { + "source": "This removes it from the Marketplace immediately. Existing installs will keep working — they reference cloned environments, not the listing itself.", + "locations": [ + { + "file": "app/(dashboard)/marketplace/my-listings/page.tsx", + "kind": "jsx" + } + ] + }, + "mcb28c6022792": { + "source": "Pick environment", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "data" + } + ] + }, + "mfe0249338b6b": { + "source": "Choose what to package", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "data" + } + ] + }, + "m93c044cba47e": { + "source": "Listing details", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m92663bbd94be": { + "source": "Title, description, category", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "data" + } + ] + }, + "ma41a9666fd92": { + "source": "Preview & permissions", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m07cc0dcf1fdc": { + "source": "What installers will see", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "data" + } + ] + }, + "m6f202f54a7b2": { + "source": "List", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "data" + } + ] + }, + "mb3694f57177e": { + "source": "Publish to the marketplace", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "data" + } + ] + }, + "m2c161ed3b030": { + "source": "You need a workspace before listing on the marketplace.", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "mf085ee865703": { + "source": "Go to dashboard", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "jsx" + }, + { + "file": "app/invite/[token]/page.tsx", + "kind": "jsx" + }, + { + "file": "app/invite/[token]/page.tsx", + "kind": "jsx" + } + ] + }, + "md23bd01fa099": { + "source": "List on the Marketplace", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m31fbef162594": { + "source": "Continue", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/Step1Welcome.tsx", + "kind": "expression" + }, + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "jsx" + } + ] + }, + "mb703ed71cc6c": { + "source": "No environments to publish yet", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "mbce3b9cdff33": { + "source": "Create a workspace environment first — environments bundle skills, rules, knowledge, and connectors together.", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m2d3e8636f7a7": { + "source": "Open environments", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m842db8589b31": { + "source": "Pick the environment to package", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "md5a1ec4dd9ca": { + "source": "Only the contents of the selected environment will be published. Secrets and connector credentials are never included.", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m772d235622ce": { + "source": "Auto-created for a single project", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "expression" + } + ] + }, + "m6622b55561f1": { + "source": "Shared across the whole workspace", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "expression" + } + ] + }, + "m377efcb322eb": { + "source": "Personal to you", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "expression" + } + ] + }, + "m77c326d54f45": { + "source": "What installers will see in the Marketplace catalog.", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m7e8cd2056da7": { + "source": "Title", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/discover/share-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m68c603088166": { + "source": "Beautiful, descriptive name", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "attribute" + } + ] + }, + "md15387ecc6c5": { + "source": "Slug", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/workspace/components/workspace-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "mb20d2b525943": { + "source": "lower-case-dashes-only", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "attribute" + } + ] + }, + "m70d9513334b5": { + "source": "Used in the URL:", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m85fe537ced97": { + "source": "your-slug", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "expression" + } + ] + }, + "mdd34d90aa090": { + "source": "Only lowercase letters, numbers, and dashes.", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m796aecd3d1a2": { + "source": "Short description", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m146680f1448d": { + "source": "One sentence shown on cards", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "attribute" + } + ] + }, + "m1d34110d0dfe": { + "source": "Long description (markdown)", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "mc89f8e2130ab": { + "source": "What does this environment do? Who's it for? How is it set up?", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "attribute" + } + ] + }, + "m3802d349c57d": { + "source": "react, ai, design (comma-separated, max 10)", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "attribute" + } + ] + }, + "m3f5b18d03635": { + "source": "This is roughly what installers will see. Permissions are derived automatically from your environment.", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "mea556ed312a5": { + "source": "Permissions installers will be asked to grant", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m4ea753f216e9": { + "source": "The exact permissions list is computed from your environment at install time. The previewer below shows the categories — installers always see the full breakdown before clicking Install.", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "med8a3216ae21": { + "source": "Adds skills to the user's AI", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m6e4d7cd86e31": { + "source": "Adds rules that auto-attach to matching files", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "mbdafc8eb351a": { + "source": "Adds knowledge files to the user's context", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "md393a2db5419": { + "source": "If your env contains MCP connectors, they may require user-supplied credentials", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m99486b443405": { + "source": "Tip: After publishing, you can iterate quickly via Marketplace → My listings.", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m53a432f3a896": { + "source": "Listed on the Marketplace", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "mbd20cb6ea223": { + "source": "Your environment is live. Anyone can find and install it.", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m95a52dbf1d63": { + "source": "Manage listings", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m9d24337a3472": { + "source": "View listing", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m4a2405296122": { + "source": "Ready to list?", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m4ce6b8cf84df": { + "source": "We'll create the listing as a draft and immediately publish it. You can unpublish or edit later from Marketplace → My listings.", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m957d0bac698d": { + "source": "Creating listing...", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m5f51143bee08": { + "source": "Publishing...", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "me98a25f307ad": { + "source": "Draft created with ID", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m234fcfaef3db": { + "source": ". You can finish publishing from", + "locations": [ + { + "file": "app/(dashboard)/marketplace/new/page.tsx", + "kind": "jsx" + } + ] + }, + "m088ef026e24d": { + "source": "No workspace found", + "locations": [ + { + "file": "app/(dashboard)/marketplace/page.tsx", + "kind": "jsx" + } + ] + }, + "m406c52c4c49c": { + "source": "Perfect for exploring and personal projects.", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + } + ] + }, + "m9df81b5e09ca": { + "source": "3 projects", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + } + ] + }, + "m0ca13fac6d64": { + "source": "1 workspace member", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + } + ] + }, + "m2595f73bafff": { + "source": "5 AI credits / day", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + } + ] + }, + "mf954c5f63cdb": { + "source": "5 MB max file size", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + } + ] + }, + "me4351f23dd28": { + "source": "Custom domains", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + } + ] + }, + "m6180b58ae02d": { + "source": "Analytics dashboard", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + } + ] + }, + "macea4b408437": { + "source": "Priority support", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + } + ] + }, + "m07cceb218b35": { + "source": "For creators and small teams who want to ship faster.", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + } + ] + }, + "m35b944672535": { + "source": "25 projects", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + } + ] + }, + "m870847bf57ee": { + "source": "5 workspace members", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + } + ] + }, + "mce1b0d3d449f": { + "source": "50 AI credits / day + 500 / month", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + } + ] + }, + "m1616cf4be43c": { + "source": "25 MB max file size", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + } + ] + }, + "md8d32463af03": { + "source": "For growing teams that need scale and advanced controls.", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + } + ] + }, + "m84e7d0f7e5d2": { + "source": "100 projects", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + } + ] + }, + "m575f3caebf79": { + "source": "25 workspace members", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + } + ] + }, + "m82adec1c04dd": { + "source": "200 AI credits / day + 3,000 / month", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + } + ] + }, + "me273cccad057": { + "source": "100 MB max file size", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "data" + } + ] + }, + "m15df7c888dff": { + "source": "Simple, transparent pricing", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "jsx" + } + ] + }, + "ma22d9d8a90f1": { + "source": "Start free. Upgrade when you need more.", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "jsx" + } + ] + }, + "mad2ea9485094": { + "source": "Most popular", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "jsx" + } + ] + }, + "m61e8d44ad423": { + "source": "Get started", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "expression" + }, + { + "file": "app/page.tsx", + "kind": "jsx" + } + ] + }, + "m7ec0261b8e8a": { + "source": "Upgrade", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "expression" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/code-panel.tsx", + "kind": "jsx" + } + ] + }, + "mdfd7a6134114": { + "source": "Need more?", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "jsx" + } + ] + }, + "m47aaf31b83d6": { + "source": "Contact us", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "jsx" + } + ] + }, + "me6d381b51f0c": { + "source": "for Enterprise pricing.", + "locations": [ + { + "file": "app/(dashboard)/pricing/page.tsx", + "kind": "jsx" + } + ] + }, + "m7189e58be0db": { + "source": "Project Settings", + "locations": [ + { + "file": "app/(dashboard)/projects/[id]/settings/page.tsx", + "kind": "jsx" + } + ] + }, + "m9f9e2e63f6b3": { + "source": "Manage your project configuration, integrations, and environments.", + "locations": [ + { + "file": "app/(dashboard)/projects/[id]/settings/page.tsx", + "kind": "jsx" + } + ] + }, + "mf86b060c51f4": { + "source": "Running instances", + "locations": [ + { + "file": "app/(dashboard)/runtime/page.tsx", + "kind": "jsx" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "attribute" + } + ] + }, + "m811386e45e29": { + "source": "Live runtime state across every published project in this workspace · poll", + "locations": [ + { + "file": "app/(dashboard)/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "md961f2529930": { + "source": "Select a workspace from the sidebar to see its running instances.", + "locations": [ + { + "file": "app/(dashboard)/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m9f0a4829ae1c": { + "source": "Loading instances…", + "locations": [ + { + "file": "app/(dashboard)/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m28b4720f32ff": { + "source": "No running instances yet. Publish a project to see it here.", + "locations": [ + { + "file": "app/(dashboard)/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "mff11b41a9783": { + "source": "Runtime metrics are collected on the production server (systemd + cgroup). In dev they show as \"unknown\" with empty memory/CPU values.", + "locations": [ + { + "file": "app/(dashboard)/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m51280dabfbc8": { + "source": "fail", + "locations": [ + { + "file": "app/(dashboard)/runtime/page.tsx", + "kind": "jsx" + } + ] + }, + "m2e60115bfe0c": { + "source": "Add a code from your authenticator app on top of your password", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "expression" + } + ] + }, + "m4da10f1fbb17": { + "source": "Set up", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + } + ] + }, + "m40d0c2ff1f2a": { + "source": "New recovery codes", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + } + ] + }, + "mb7e3e4aa4257": { + "source": "Disable", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "expression" + } + ] + }, + "mbeb6187632b4": { + "source": "Set up two-factor authentication", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + } + ] + }, + "m688a0b036688": { + "source": "Scan the QR code with an authenticator app like 1Password, Authy, or Google Authenticator.", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + } + ] + }, + "ma892ff9886ed": { + "source": "MFA QR code", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "attribute" + } + ] + }, + "m3ea15b3e1ff9": { + "source": "Or enter this code manually", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + } + ] + }, + "m68bc30f3f6b1": { + "source": "I've added it — next", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + } + ] + }, + "m38f61733e73f": { + "source": "Enter the 6-digit code from your app", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + } + ] + }, + "meea2745e2867": { + "source": "Verify", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "jsx" + } + ] + }, + "m25878b1ac5ff": { + "source": "Save these recovery codes now.", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + } + ] + }, + "m01457caf898e": { + "source": "Each code can be used once if you lose access to your authenticator. We won't show them again.", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + } + ] + }, + "md6eafe823591": { + "source": "Download", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m11a6767d5674": { + "source": "Done", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/chat/chat-input.tsx", + "kind": "jsx" + } + ] + }, + "mc2d5063dd6db": { + "source": "Disable two-factor authentication", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + } + ] + }, + "m2a35f694ae08": { + "source": "Confirm your password and a current code (or recovery code) to turn off MFA.", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + } + ] + }, + "m72ed2bd767ce": { + "source": "Current password", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + } + ] + }, + "m745cbf0e10e7": { + "source": "6-digit code or recovery code", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + } + ] + }, + "m8adb8274a7c6": { + "source": "Disable MFA", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + } + ] + }, + "m49cc3d4c731f": { + "source": "Regenerate recovery codes", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + } + ] + }, + "md2d0d09966de": { + "source": "Your existing recovery codes will stop working immediately.", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + } + ] + }, + "m0d1fa0dfcc9e": { + "source": "6-digit code", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + } + ] + }, + "m3cdc25d9296b": { + "source": "Generate new codes", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + } + ] + }, + "md375b86349a7": { + "source": "Save these now — we won't show them again.", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "jsx" + } + ] + }, + "m74a883a037bc": { + "source": "Settings", + "locations": [ + { + "file": "app/(dashboard)/settings/page.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/cloud-panel.tsx", + "kind": "jsx" + } + ] + }, + "me5d65e29b68f": { + "source": "Manage your account preferences and security.", + "locations": [ + { + "file": "app/(dashboard)/settings/page.tsx", + "kind": "jsx" + } + ] + }, + "mb58fa4e0b18d": { + "source": "Active Sessions", + "locations": [ + { + "file": "app/(dashboard)/settings/page.tsx", + "kind": "attribute" + } + ] + }, + "m263f51795417": { + "source": "Devices where you are currently signed in", + "locations": [ + { + "file": "app/(dashboard)/settings/page.tsx", + "kind": "attribute" + } + ] + }, + "me0d1b68224bf": { + "source": "Current", + "locations": [ + { + "file": "app/(dashboard)/settings/page.tsx", + "kind": "jsx" + } + ] + }, + "md696a35bdd18": { + "source": "Profile", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "attribute" + } + ] + }, + "m2a4a3391ad17": { + "source": "Your personal information", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "attribute" + } + ] + }, + "m2b7f6a84de91": { + "source": "Display name", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + } + ] + }, + "maf8cbab6829c": { + "source": "Your display name", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "attribute" + } + ] + }, + "m4b0042d044fe": { + "source": "Contact support to change your email address.", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + } + ] + }, + "mdd0ae7a5cbcf": { + "source": "Save changes", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "expression" + }, + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "expression" + }, + { + "file": "modules/discover/share-dialog.tsx", + "kind": "expression" + } + ] + }, + "m8f6fb4eb7f42": { + "source": "Security", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "attribute" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "data" + }, + { + "file": "modules/editor/panels/security-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-shared.tsx", + "kind": "data" + } + ] + }, + "m7f183b022e0c": { + "source": "Password and authentication", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "attribute" + } + ] + }, + "m3f9c991f63a9": { + "source": "Change password", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + } + ] + }, + "m2cad078bc7dd": { + "source": "Password updated successfully.", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + } + ] + }, + "m3e2b5dfbc2a1": { + "source": "Enter current password", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "attribute" + } + ] + }, + "m6bf1430d8550": { + "source": "Re-enter new password", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "attribute" + } + ] + }, + "m0a4e0b71b7f3": { + "source": "Updating...", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + }, + { + "file": "modules/discover/share-dialog.tsx", + "kind": "expression" + } + ] + }, + "mfe45b4014135": { + "source": "Update password", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "expression" + } + ] + }, + "m3907fa7f8072": { + "source": "Appearance", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "attribute" + } + ] + }, + "m8fa7b13609e0": { + "source": "Customize how Doable looks", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "attribute" + } + ] + }, + "mefb52e7172b7": { + "source": "Theme", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + } + ] + }, + "mdbcd5e7bb7a0": { + "source": "Light", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "data" + }, + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "m60acc53f13a5": { + "source": "Dark", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "data" + } + ] + }, + "m6725e7bbcd28": { + "source": "System", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "data" + } + ] + }, + "mdb3183e39ef5": { + "source": "Brand Color", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + } + ] + }, + "m3c1c01b40585": { + "source": "Danger Zone", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "attribute" + }, + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-shared.tsx", + "kind": "data" + }, + { + "file": "modules/settings/database/database-tab.tsx", + "kind": "data" + } + ] + }, + "m25f7dd8d5424": { + "source": "Irreversible and destructive actions", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "attribute" + } + ] + }, + "ma2e20a335700": { + "source": "Delete account", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + } + ] + }, + "mf33e06dd2c9b": { + "source": "Permanently delete your account and all associated data. This cannot be undone.", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + } + ] + }, + "mc031bf992e17": { + "source": "Delete Account", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + } + ] + }, + "m123bce672d45": { + "source": "This action is permanent and cannot be undone. All of your projects, data, and settings will be permanently deleted.", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + } + ] + }, + "mbaaddf70fb5d": { + "source": "Type", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-danger.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "m65daeb378bde": { + "source": "DELETE", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "m1b2a5036345d": { + "source": "to confirm:", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/database/panes/danger-pane.tsx", + "kind": "jsx" + } + ] + }, + "md4856f418bf3": { + "source": "Type DELETE to confirm", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "attribute" + } + ] + }, + "m685ecb984ac2": { + "source": "Deleting...", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/files-panel.tsx", + "kind": "expression" + }, + { + "file": "modules/settings/components/project-settings-danger.tsx", + "kind": "expression" + } + ] + }, + "m21d5294717e2": { + "source": "Delete my account", + "locations": [ + { + "file": "app/(dashboard)/settings/settings-sections.tsx", + "kind": "expression" + } + ] + }, + "m6029d15003fe": { + "source": "Doable defaults", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "mfd28ca1cbfba": { + "source": "Workspace-wide runtime AI defaults for apps generated in this workspace. Projects inherit these unless they pin their own values in", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m55f6925c7920": { + "source": "Project Settings → Doable", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m3c7c3432af8b": { + "source": "Configure chat provider", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m0e41a94afc0c": { + "source": "Platform embedding model", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m23e678a08bbe": { + "source": "Default system prompt", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m552e423045fc": { + "source": "(none)", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "expression" + } + ] + }, + "m385c57501bad": { + "source": "none set", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m92d12bf8f0a5": { + "source": "Default embedding model", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m5967f99c5703": { + "source": "platform default", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m4a5c75c9e81f": { + "source": "Prepended to every chat call for projects in this workspace that don't have their own system prompt override.", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "mf8eddc053b2c": { + "source": "Default thinking visibility", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m281b63ba336e": { + "source": "Always show", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "data" + }, + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "expression" + }, + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "expression" + } + ] + }, + "m8a4ef9b34729": { + "source": "Hide (server-side strip)", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "data" + } + ] + }, + "mdfd2cac68175": { + "source": "You're a member of this workspace but not an admin — these defaults are read-only for you.", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "ma91af2a1efd1": { + "source": "Save defaults", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m880e5d9d8e9a": { + "source": "Workspace AI usage", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m8a5a9466c8b4": { + "source": "Aggregate of every project's runtime AI calls in this workspace (editor / builder calls are shown separately under", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m6a99fc662f7c": { + "source": "mode).", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m2b065c7c9ce4": { + "source": "Today", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "expression" + }, + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "expression" + }, + { + "file": "modules/ai-settings/components/my-usage-tab.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "expression" + } + ] + }, + "ma7c742643c7c": { + "source": "7d", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "expression" + } + ] + }, + "me3ba17e32240": { + "source": "30d", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "expression" + } + ] + }, + "me7601ca1178a": { + "source": "Total tokens", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "mada27592c957": { + "source": "Requests", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m9ccba222f889": { + "source": "Estimated cost", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "m551e877182dd": { + "source": "By mode", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m204a5eb2cd28": { + "source": "Cost", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "mac1fe0f76734": { + "source": "Top projects", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "ma039dfb9628b": { + "source": "Tokens", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "me0707a236f1e": { + "source": "(orphan)", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "expression" + } + ] + }, + "m1890cc51ee20": { + "source": "No default (let users choose)", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "data" + } + ] + }, + "mf64b3ff5bc6e": { + "source": "React (Vite)", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "data" + } + ] + }, + "m49d550463542": { + "source": "Default framework", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + } + ] + }, + "m87946b3562a1": { + "source": "Used when a creator doesn't pick a framework and the prompt doesn't clearly signal one. Defaults to React (Vite) when unset.", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + } + ] + }, + "m19c17957c224": { + "source": "Read-only — admin permission required.", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + } + ] + }, + "m4b1b8aa3608a": { + "source": "Owner", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "data" + } + ] + }, + "m7c968fb71f50": { + "source": "Member", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + } + ] + }, + "m678bfa6af48b": { + "source": "Viewer", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + } + ] + }, + "mc910d474dcd7": { + "source": "General", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "data" + }, + { + "file": "modules/settings/components/project-settings-shared.tsx", + "kind": "data" + }, + { + "file": "modules/workspace/components/workspace-settings.tsx", + "kind": "data" + } + ] + }, + "mf5a378c34758": { + "source": "Workspace name and description", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + } + ] + }, + "mee9ff5054717": { + "source": "What's this workspace for?", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "attribute" + } + ] + }, + "m84c7e2a050b5": { + "source": "Your role:", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + } + ] + }, + "me2204b3eaff6": { + "source": "Team Members", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + } + ] + }, + "me31ab643c44f": { + "source": "member", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + } + ] + }, + "mf728553b59c5": { + "source": "Invite by email", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + } + ] + }, + "m7fbfb94aeafa": { + "source": "colleague@company.com", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "attribute" + } + ] + }, + "mb95d5f7c3973": { + "source": "Generate invite link", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + } + ] + }, + "mea61bc15688d": { + "source": "Copied!", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "expression" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "mdbf362d4f210": { + "source": "Copy link", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "expression" + } + ] + }, + "md1eb47c77576": { + "source": "(you)", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + } + ] + }, + "m9438e0ba8e63": { + "source": "Remove member", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "attribute" + }, + { + "file": "modules/workspace/components/members-rows.tsx", + "kind": "attribute" + } + ] + }, + "m74d26f0e2e44": { + "source": "Pending Invites", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + } + ] + }, + "m62a2fed3d6e0": { + "source": "pending", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/collaboration/components/ai-chat-collab.tsx", + "kind": "jsx" + } + ] + }, + "mf6725f3af08a": { + "source": "Expires", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/workspace/components/members-rows.tsx", + "kind": "jsx" + } + ] + }, + "m3e19d958e483": { + "source": "Revoke invite", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "attribute" + }, + { + "file": "modules/workspace/components/members-rows.tsx", + "kind": "attribute" + } + ] + }, + "mf9d85ba811da": { + "source": "Irreversible actions", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + } + ] + }, + "mf1955b781545": { + "source": "Deleting this workspace will permanently remove all projects, files, and data. This cannot be undone.", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + } + ] + }, + "m55f033dbcb29": { + "source": "Delete workspace", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + } + ] + }, + "mdaab6af4973b": { + "source": "This will permanently delete", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-danger.tsx", + "kind": "jsx" + } + ] + }, + "m0869e4e92657": { + "source": "and all its data. Type the workspace name to confirm.", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + } + ] + }, + "m280b10c89cc4": { + "source": "Delete permanently", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "jsx" + } + ] + }, + "m07437cd651be": { + "source": "Environments", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "attribute" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "attribute" + }, + { + "file": "modules/environments/environments-panel.tsx", + "kind": "jsx" + } + ] + }, + "maab669a72882": { + "source": "MCP Servers", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/components/mcp-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-shared.tsx", + "kind": "data" + } + ] + }, + "m00e6f89be431": { + "source": "Skills & Rules", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "data" + }, + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "attribute" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "data" + }, + { + "file": "modules/settings/components/project-settings-shared.tsx", + "kind": "data" + } + ] + }, + "mad94fce14ac2": { + "source": "Doable", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "data" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + }, + { + "file": "components/dashboard/footer.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/ai-settings-page.tsx", + "kind": "data" + } + ] + }, + "m3d65b4959a69": { + "source": "No workspace found.", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "expression" + } + ] + }, + "m8e25832407ee": { + "source": "Workspace Settings", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "jsx" + } + ] + }, + "m2e1aa9f2f180": { + "source": "Manage your workspace, team members, environments, and integrations.", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "jsx" + } + ] + }, + "m16e44882f450": { + "source": "Bundle skills, rules, knowledge, and MCP connectors into reusable presets. Projects inherit the workspace default environment.", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "attribute" + } + ] + }, + "ma3ab5156a004": { + "source": "Connect third-party services like Slack, Notion, GitHub, and more. Workspace-level integrations are available to all projects.", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "attribute" + } + ] + }, + "m55deb400b9f9": { + "source": "Connect Model Context Protocol servers for custom tools and capabilities. Workspace-scoped connectors are available to all projects.", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "attribute" + } + ] + }, + "m035456671e98": { + "source": "Manage reusable skills and rules that shape how the AI works. Workspace-level skills are inherited by all projects.", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "attribute" + } + ] + }, + "m12bbbbf8f137": { + "source": "Knowledge Base", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "attribute" + } + ] + }, + "m82abc5221280": { + "source": "Context files the AI reads before every interaction. Workspace knowledge is inherited by all projects. Projects can add their own overrides.", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/page.tsx", + "kind": "attribute" + } + ] + }, + "m91817495a78f": { + "source": "Back to file list", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/workspace-knowledge-editor.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/context-files/context-editor.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/sidebar/knowledge-tab-parts.tsx", + "kind": "attribute" + } + ] + }, + "meaece9d1a4a8": { + "source": "Custom context file", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/workspace-knowledge-editor.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/sidebar/knowledge-tab-parts.tsx", + "kind": "expression" + } + ] + }, + "m9c80e8331a86": { + "source": "unsaved", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/workspace-knowledge-editor.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/sidebar/knowledge-tab-parts.tsx", + "kind": "jsx" + } + ] + }, + "m0c202c1c284e": { + "source": "Revert changes", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/workspace-knowledge-editor.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/sidebar/knowledge-tab-parts.tsx", + "kind": "attribute" + } + ] + }, + "m4be89ed53733": { + "source": "Save (Ctrl+S)", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/workspace-knowledge-editor.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/context-files/context-editor.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/sidebar/knowledge-tab-parts.tsx", + "kind": "attribute" + } + ] + }, + "m28e18dc9db38": { + "source": "Delete file", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/workspace-knowledge-editor.tsx", + "kind": "attribute" + } + ] + }, + "m1ce93dacbcf4": { + "source": "chars", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/workspace-knowledge-editor.tsx", + "kind": "jsx" + }, + { + "file": "app/(dashboard)/workspace-settings/workspace-knowledge.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "mfd65b5367e9e": { + "source": "Loading knowledge base...", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/workspace-knowledge.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/sidebar/knowledge-tab.tsx", + "kind": "jsx" + } + ] + }, + "md4f8b86bd838": { + "source": "These files are read by the AI before every interaction in this workspace. Click a file to edit it.", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/workspace-knowledge.tsx", + "kind": "jsx" + } + ] + }, + "ma6979ff7fee1": { + "source": "Add Knowledge File", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/workspace-knowledge.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/sidebar/knowledge-tab.tsx", + "kind": "jsx" + } + ] + }, + "mf50957f1c8cc": { + "source": "New Knowledge File", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/workspace-knowledge.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/sidebar/knowledge-tab-parts.tsx", + "kind": "jsx" + } + ] + }, + "mb2af5e64cae1": { + "source": "File already exists.", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/workspace-knowledge.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/sidebar/knowledge-tab-parts.tsx", + "kind": "jsx" + } + ] + }, + "m4759498ac2a7": { + "source": "Create", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/workspace-knowledge.tsx", + "kind": "jsx" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/workspace-switcher.tsx", + "kind": "jsx" + } + ] + }, + "m6b170f2de20f": { + "source": "内部测试范围 | Doable", + "locations": [ + { + "file": "app/(legal)/acceptable-use/page.tsx", + "kind": "data" + } + ] + }, + "m2865af52a310": { + "source": "内部测试范围", + "locations": [ + { + "file": "app/(legal)/acceptable-use/page.tsx", + "kind": "jsx" + } + ] + }, + "md1e9cdd9f9e0": { + "source": "Doable供获授权的内部成员测试自然语言生成应用流程。", + "locations": [ + { + "file": "app/(legal)/acceptable-use/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(legal)/contact/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(legal)/cookies/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(legal)/dmca/page.tsx", + "kind": "jsx" + } + ] + }, + "m70795fb25c14": { + "source": "项目与账号数据存储于本部署;使用 AI 时,请求内容将发送至管理员配置的模型接口。请使用测试数据。", + "locations": [ + { + "file": "app/(legal)/acceptable-use/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(legal)/contact/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(legal)/cookies/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(legal)/dmca/page.tsx", + "kind": "jsx" + } + ] + }, + "mfd3d283506ca": { + "source": "本页是内部测试说明。联系平台管理员获取访问、数据处理或支持信息。开源组件的许可证与版权声明保留于部署源码中的 LICENSE 和 NOTICE.md。", + "locations": [ + { + "file": "app/(legal)/acceptable-use/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(legal)/contact/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(legal)/cookies/page.tsx", + "kind": "jsx" + }, + { + "file": "app/(legal)/dmca/page.tsx", + "kind": "jsx" + } + ] + }, + "m22d9879b3be5": { + "source": "联系管理员 | Doable", + "locations": [ + { + "file": "app/(legal)/contact/page.tsx", + "kind": "data" + } + ] + }, + "m367af5187c57": { + "source": "联系管理员", + "locations": [ + { + "file": "app/(legal)/contact/page.tsx", + "kind": "jsx" + } + ] + }, + "mbee3f95fbd7c": { + "source": "Cookie 说明 | Doable", + "locations": [ + { + "file": "app/(legal)/cookies/page.tsx", + "kind": "data" + } + ] + }, + "m52454d98091b": { + "source": "Cookie 说明", + "locations": [ + { + "file": "app/(legal)/cookies/page.tsx", + "kind": "jsx" + } + ] + }, + "m14744ba1fd1d": { + "source": "版权与开源说明 | Doable", + "locations": [ + { + "file": "app/(legal)/dmca/page.tsx", + "kind": "data" + } + ] + }, + "me2e0aaabb0df": { + "source": "版权与开源说明", + "locations": [ + { + "file": "app/(legal)/dmca/page.tsx", + "kind": "jsx" + } + ] + }, + "m76c5505ff2e2": { + "source": "Back to home", + "locations": [ + { + "file": "app/(legal)/layout.tsx", + "kind": "jsx" + } + ] + }, + "mee290b3ddbc8": { + "source": "Cookie Policy", + "locations": [ + { + "file": "app/(legal)/layout.tsx", + "kind": "jsx" + } + ] + }, + "m997c65f3c315": { + "source": "Acceptable Use", + "locations": [ + { + "file": "app/(legal)/layout.tsx", + "kind": "jsx" + }, + { + "file": "app/home-footer.tsx", + "kind": "jsx" + }, + { + "file": "components/dashboard/footer.tsx", + "kind": "jsx" + } + ] + }, + "mc2ac011216f3": { + "source": "DMCA", + "locations": [ + { + "file": "app/(legal)/layout.tsx", + "kind": "jsx" + }, + { + "file": "app/home-footer.tsx", + "kind": "jsx" + }, + { + "file": "components/dashboard/footer.tsx", + "kind": "jsx" + } + ] + }, + "m2b5c3d26721a": { + "source": "Contact", + "locations": [ + { + "file": "app/(legal)/layout.tsx", + "kind": "jsx" + }, + { + "file": "app/home-footer.tsx", + "kind": "data" + } + ] + }, + "mc081a965e548": { + "source": "Doable. All rights reserved. 内部测试平台。", + "locations": [ + { + "file": "app/(legal)/layout.tsx", + "kind": "jsx" + } + ] + }, + "m72366a549ad3": { + "source": "数据处理说明 | Doable", + "locations": [ + { + "file": "app/(legal)/privacy/page.tsx", + "kind": "data" + } + ] + }, + "m8b2f1b153b79": { + "source": "数据处理说明", + "locations": [ + { + "file": "app/(legal)/privacy/page.tsx", + "kind": "jsx" + } + ] + }, + "mb7a1c461c394": { + "source": "内部测试使用说明 | Doable", + "locations": [ + { + "file": "app/(legal)/terms/page.tsx", + "kind": "data" + } + ] + }, + "m92070588f1ac": { + "source": "内部测试使用说明", + "locations": [ + { + "file": "app/(legal)/terms/page.tsx", + "kind": "jsx" + } + ] + }, + "m1a1952532a59": { + "source": "Authentication Failed", + "locations": [ + { + "file": "app/auth/callback/page.tsx", + "kind": "jsx" + } + ] + }, + "m04b7a0b6eb85": { + "source": "This should only take a moment", + "locations": [ + { + "file": "app/auth/callback/page.tsx", + "kind": "jsx" + }, + { + "file": "app/auth/callback/page.tsx", + "kind": "jsx" + } + ] + }, + "m3d2ee2c69bee": { + "source": "Preparing authentication...", + "locations": [ + { + "file": "app/auth/callback/page.tsx", + "kind": "jsx" + } + ] + }, + "m64ddd1020b45": { + "source": "Signing you back in…", + "locations": [ + { + "file": "app/auth/refresh/page.tsx", + "kind": "jsx" + } + ] + }, + "m54c2a2733940": { + "source": "Brew Haven – A Coffee Shop Worth Finding", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "data" + } + ] + }, + "m027c61c1e5b2": { + "source": "Handcrafted coffee, cozy atmosphere, and community at the heart of every cup. Visit Brew Haven today.", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "data" + } + ] + }, + "mdac866afb655": { + "source": "Sustainably Sourced", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "data" + } + ] + }, + "m25cc22295e06": { + "source": "Community First", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "data" + } + ] + }, + "m4656735e0b78": { + "source": "Crafted with Care", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "data" + } + ] + }, + "ma56dda826249": { + "source": "Brew Haven", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + }, + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "mfdc2b75ad30f": { + "source": "Find Us", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "m6b8521ba68ad": { + "source": "Est. 2019 · Handcrafted Coffee", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "mfff0ae82fb8d": { + "source": "Your perfect cup", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "m558ae13d7638": { + "source": "awaits you.", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "m10fa41b20df4": { + "source": "Slow mornings, bold espresso, and a corner that feels like yours. Brew Haven is the neighborhood coffee shop you've been looking for.", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "m32ebfb7c7532": { + "source": "See Our Menu", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "m3fb76449c076": { + "source": "Our Story", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + }, + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "me54eb3b48e08": { + "source": "A place to slow", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "md1bc8820eb83": { + "source": "down and savor.", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "m5ffd2fdefce3": { + "source": "Brew Haven started as a dream sketched on a napkin in 2019 — a neighborhood coffee shop that treated its beans, its baristas, and its guests with equal care. Today, we're proud to be a gathering place for writers, remote workers, first dates, and old friends.", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "m2b0ec859f42d": { + "source": "We partner directly with family-owned farms across Ethiopia, Colombia, and Guatemala. Every roast is dialed in weekly, so what's in your cup is always at peak flavor.", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "me66580cc2323": { + "source": "What We Serve", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "mb545da336b4d": { + "source": "Our Menu", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "m4e18d19f9a89": { + "source": "Seasonal. Fresh. Always made to order.", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "m7ef51b7808f3": { + "source": "Kind Words", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "m21e4b2f51b39": { + "source": "What Guests Say", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "m1033449b8c82": { + "source": "Come See Us", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "m17509f6f7fd8": { + "source": "Find Your Haven", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "ma53218c7a3a1": { + "source": "We're nestled right in the heart of the neighborhood. Bring your laptop, your journal, or just yourself — there's always a warm seat and a perfect cup waiting.", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "m56ef8f20955f": { + "source": "Address", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "mf1898d578fff": { + "source": "142 Maple Street, Brooklyn, NY 11201", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "m21e8492938ab": { + "source": "Hours", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "ma8a0f79afc28": { + "source": "Mon – Fri: 7am – 7pm", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "m6e1828ded15a": { + "source": "Sat – Sun: 8am – 6pm", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "m63dceb8800b2": { + "source": "Phone", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "ma7e61d026fe0": { + "source": "hello@brewhaven.coffee", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "m74ac8a852e7a": { + "source": "142 Maple Street, Brooklyn", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "m43a6ffbfa175": { + "source": "Open in Maps ↗", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "mf7f51cfa2de0": { + "source": "Brew Haven. All rights reserved.", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "jsx" + } + ] + }, + "mbad57ef7837c": { + "source": "Instagram", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "data" + } + ] + }, + "md41f5b4977ee": { + "source": "Facebook", + "locations": [ + { + "file": "app/brew-haven/page.tsx", + "kind": "data" + } + ] + }, + "m5510cb0c913d": { + "source": "Loading editor...", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/code-editor/code-editor-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/code-editor/monaco-editor-wrapper.tsx", + "kind": "jsx" + } + ] + }, + "m0072e6b93494": { + "source": "Design", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "data" + }, + { + "file": "modules/editor/panels/design-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/design-panel.tsx", + "kind": "jsx" + } + ] + }, + "mb977b950c1ae": { + "source": "Cloud", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "data" + }, + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "data" + }, + { + "file": "modules/editor/panels/cloud-panel.tsx", + "kind": "jsx" + } + ] + }, + "mabc7e9892806": { + "source": "Files", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "data" + }, + { + "file": "modules/editor/chat/chat-input.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/files-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/sidebar/editor-sidebar.tsx", + "kind": "data" + } + ] + }, + "mc372fee9b456": { + "source": "Speed", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "data" + }, + { + "file": "modules/editor/panels/speed-panel.tsx", + "kind": "jsx" + } + ] + }, + "m55c03ce120c7": { + "source": "Planning these actions:", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m15a8b431558b": { + "source": "Failed to start project", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "mbabe6dbcbd8f": { + "source": "View install logs", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m4504b2c82bef": { + "source": "Copy logs", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m1a5787cd1c50": { + "source": "Taking longer than usual", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "mabee9029bf6d": { + "source": "Previewing last saved version", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "mb99fa6c06150": { + "source": "Preview unavailable", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/preview/preview-panel.tsx", + "kind": "jsx" + } + ] + }, + "me1d5ea6491f6": { + "source": "Loading Live Preview...", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m0eb1ec38c2d7": { + "source": "Getting ready...", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m82b93630a921": { + "source": "Starting...", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m0e7696009337": { + "source": "History", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "data" + }, + { + "file": "modules/editor/sidebar/editor-sidebar.tsx", + "kind": "data" + } + ] + }, + "m041aefc44394": { + "source": "Toggle sidebar", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "data" + } + ] + }, + "m340f463033e0": { + "source": "Code", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "data" + }, + { + "file": "modules/editor/panels/code-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/toolbar/editor-toolbar.tsx", + "kind": "data" + } + ] + }, + "m76c7269afa9f": { + "source": "More views", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + } + ] + }, + "m69c404591e99": { + "source": "Views", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/analytics-top-pages.tsx", + "kind": "data" + } + ] + }, + "mc9e9cb30a945": { + "source": "Unpin from toolbar", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m637e9e5bb5ff": { + "source": "Pin to toolbar", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "mf7e0c1af18fe": { + "source": "Download project", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "mf930a196376c": { + "source": "Duplicating...", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "mf8725da98b5a": { + "source": "Duplicate project", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m8c3970faabc3": { + "source": "Copy project link", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "me9bef0b0f3c2": { + "source": "Keyboard shortcuts", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "mc4c81576b2aa": { + "source": "Click to navigate to a route", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + } + ] + }, + "m9bd88f2485ac": { + "source": "Desktop", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "data" + }, + { + "file": "modules/editor/preview/preview-toolbar.tsx", + "kind": "data" + } + ] + }, + "m80da9e2ced28": { + "source": "Tablet (768px)", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "data" + }, + { + "file": "modules/editor/preview/preview-toolbar.tsx", + "kind": "data" + } + ] + }, + "m2758ecdf72f7": { + "source": "Mobile (375px)", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "data" + }, + { + "file": "modules/editor/preview/preview-toolbar.tsx", + "kind": "data" + } + ] + }, + "m5b529abadacc": { + "source": "Refresh preview", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/preview/preview-toolbar.tsx", + "kind": "attribute" + } + ] + }, + "me0af5c0bc245": { + "source": "Open in new tab", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/preview/preview-toolbar.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "attribute" + } + ] + }, + "m37fd4e355ba3": { + "source": "Exit fullscreen", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/preview/preview-toolbar.tsx", + "kind": "expression" + } + ] + }, + "mc461dbb2bab7": { + "source": "Fullscreen", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/preview/preview-toolbar.tsx", + "kind": "expression" + } + ] + }, + "m29887a5ff984": { + "source": "Share", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "mff37e873810f": { + "source": "Deploy to a public URL", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + } + ] + }, + "m258150cb3ee4": { + "source": "Start a conversation", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m2d8d9afecd24": { + "source": "Describe what you want to build and Doable will generate the code for you.", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "ma270fdec86fe": { + "source": "Work mode — generates code", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + } + ] + }, + "m0307fd10509e": { + "source": "Strategize mode — creates plans only", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + } + ] + }, + "me84bd14c0f46": { + "source": "Show full prompt (", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/chat-message.tsx", + "kind": "jsx" + } + ] + }, + "mf613e62f9414": { + "source": "k chars)", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/chat-message.tsx", + "kind": "jsx" + } + ] + }, + "m260f9f6f0261": { + "source": "Thought process", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/chat/chat-message.tsx", + "kind": "expression" + } + ] + }, + "mce4f8c390a73": { + "source": "AI provider not connected", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "me1a9e2c7f9c5": { + "source": "Connect a GitHub Copilot account or add a custom provider key in Settings → AI.", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m45833b231c24": { + "source": "Configure AI", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m897f32e09bef": { + "source": "Show raw SDK error (for debugging)", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "mc1e75128adb8": { + "source": "Building...", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m86f666cabb18": { + "source": "Hide earlier steps", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m0df6f1cad36c": { + "source": "Show", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/plan/plan-step.tsx", + "kind": "expression" + } + ] + }, + "m2a51d3547c23": { + "source": "earlier", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m3e64cc41cf8e": { + "source": "step", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/chat/plan/plan-card.tsx", + "kind": "jsx" + } + ] + }, + "mb7595e2a8639": { + "source": "steps", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/chat/plan/plan-progress.tsx", + "kind": "jsx" + } + ] + }, + "m5a113737926c": { + "source": "Good response", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + } + ] + }, + "m5ffca88c1555": { + "source": "Bad response", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + } + ] + }, + "m457efe538b25": { + "source": "Copy message", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + } + ] + }, + "mf8d46c2570e7": { + "source": "More actions", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + } + ] + }, + "m9757ccd5ef12": { + "source": "Edit message", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m35da197a9e9c": { + "source": "Revert to this point", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m82218b943cdb": { + "source": "Click to download", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m53ece783f833": { + "source": "New step", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "data" + }, + { + "file": "modules/editor/chat/chat-panel.tsx", + "kind": "data" + } + ] + }, + "m1637236fa066": { + "source": "Describe what this step does", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "data" + }, + { + "file": "modules/editor/chat/chat-panel.tsx", + "kind": "data" + } + ] + }, + "maec142ee7062": { + "source": "Back to Chat", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/design-panel.tsx", + "kind": "jsx" + } + ] + }, + "m6ca7bd811152": { + "source": "Stop Doable", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m806670321baa": { + "source": "5 credits remaining", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "md22feb61298b": { + "source": "Add credits", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "mb04765eefcef": { + "source": "Ask Doable...", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/visual-edit/visual-edit-toolbar.tsx", + "kind": "expression" + } + ] + }, + "m9fa4ffd4c58e": { + "source": "Attach file (images, text, code, PDF)", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + } + ] + }, + "m6f6d2f91972f": { + "source": "Design View", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/design-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/design-panel.tsx", + "kind": "jsx" + } + ] + }, + "md4cb298c2663": { + "source": "Stop generation", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + } + ] + }, + "mcae7d57bc067": { + "source": "Stop", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/chat-input.tsx", + "kind": "jsx" + } + ] + }, + "mf6f4688ff23d": { + "source": "Send", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/chat-input.tsx", + "kind": "jsx" + } + ] + }, + "m65190883f1fe": { + "source": "Shift + Enter for new line", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/chat-input.tsx", + "kind": "jsx" + } + ] + }, + "mc39d646f1076": { + "source": "Explorer", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/sidebar/file-tree.tsx", + "kind": "jsx" + } + ] + }, + "m3d2301d732a7": { + "source": "Failed to load", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m60801b1a50bd": { + "source": "Loading files...", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/code-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/files-panel.tsx", + "kind": "jsx" + } + ] + }, + "mcb922b5840ae": { + "source": "No files yet", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/code-panel.tsx", + "kind": "jsx" + } + ] + }, + "m3ca461fea183": { + "source": "Ask the AI to create some files", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m51d3d0b1a3b5": { + "source": "Close (Ctrl+W)", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/code-editor/code-editor-panel.tsx", + "kind": "attribute" + } + ] + }, + "m26bfbd5c83f9": { + "source": "No file selected", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m712e79239f4a": { + "source": "Hide minimap", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/code-editor/code-editor-panel.tsx", + "kind": "expression" + } + ] + }, + "m073549e7238a": { + "source": "Show minimap", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/code-editor/code-editor-panel.tsx", + "kind": "expression" + } + ] + }, + "me9ddf97389a9": { + "source": "Select a file from the explorer", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "mfde6d3caf5c9": { + "source": "Click on any file to view its content", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m97cbc435d6e8": { + "source": "Ctrl+S to save", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/code-editor/code-editor-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-context.tsx", + "kind": "jsx" + } + ] + }, + "m71f5abb5edb0": { + "source": "Ctrl+F to search", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/code-editor/code-editor-panel.tsx", + "kind": "jsx" + } + ] + }, + "m6ee99fb19bf8": { + "source": "Ctrl+H to replace", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/code-editor/code-editor-panel.tsx", + "kind": "jsx" + } + ] + }, + "m5c8e7fa6580f": { + "source": "Ctrl+W to close tab", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/code-editor/code-editor-panel.tsx", + "kind": "jsx" + } + ] + }, + "m2f4e0b81ecfb": { + "source": "Loading file...", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/code-panel.tsx", + "kind": "jsx" + } + ] + }, + "ma3c43b2835a3": { + "source": "Code will appear here as the AI generates files", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "meae2557ee98d": { + "source": "Start a conversation in the Chat tab to generate your project", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m12aa55074ad4": { + "source": "App Preview", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + } + ] + }, + "m01ff8705531c": { + "source": "Auto-fix paused — the AI didn't edit any files on the last attempt.", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "mc2e1149badc5": { + "source": "Open the chat to fix it manually, or click Reset Preview.", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m569907da4f4a": { + "source": "Will retry automatically in 2 minutes, or resume now.", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m1d45fe5006a5": { + "source": "Resume auto-fix", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m420b6920da29": { + "source": "Setting up workspace...", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m6f17cf6ff57b": { + "source": "Building from plan...", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m41653c9c7085": { + "source": "Building your app...", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m2133e77f6691": { + "source": "Installing dependencies", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m26e9d5c2f091": { + "source": "AI is writing code", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m8e16d8fd15bd": { + "source": "Share Project", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "mb7f251195db4": { + "source": "Share your project with others or embed it on your website.", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m724408ba0fe1": { + "source": "Link sharing enabled", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m5baec6fcbec2": { + "source": "Private project", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "ma4e33656caa4": { + "source": "Anyone with the link can join and collaborate", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m2dc6333ea270": { + "source": "Only invited collaborators can access", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m9e0d56d0c3b1": { + "source": "Collaboration Link", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m4272978f92ad": { + "source": "Copy collaboration link", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + } + ] + }, + "m724e78a3254c": { + "source": "Copy Link", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m5f14f9e6d80f": { + "source": "visitor", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/panels/analytics-sections.tsx", + "kind": "jsx" + } + ] + }, + "mfe9919df44cb": { + "source": "visitors", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/panels/analytics-charts.tsx", + "kind": "expression" + } + ] + }, + "m905dd6fd364c": { + "source": "total views", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m655e2cc98ce6": { + "source": "People who viewed this project", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m2396bf0b471b": { + "source": "Unknown visitor", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "mf0e68ac26df2": { + "source": "visit", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "mb944075326e4": { + "source": "visits", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m439c0bddcded": { + "source": "Collaborators", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m1b4064cc2957": { + "source": "Collaborator", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "mf2c6e9b92fed": { + "source": "Remove collaborator", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + } + ] + }, + "mf87e73885684": { + "source": "No collaborators yet", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m0ddd45761e9e": { + "source": "Share the link above to invite people", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m865f0063ee77": { + "source": "Enable link sharing to let others join", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "mc4269502c892": { + "source": "Preview URL", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m787406ddea2a": { + "source": "Not available yet", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "mb26d1037f1c2": { + "source": "Copy URL", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "attribute" + } + ] + }, + "m3e358110ed34": { + "source": "Embed Code", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "mfb1eec41bf9a": { + "source": "Preview not available yet", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "ma6185b1bac5a": { + "source": "Copy embed code", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + } + ] + }, + "m7d9eb7acb13e": { + "source": "Close", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "components/templates/use-template-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/provider-wizard.tsx", + "kind": "attribute" + } + ] + }, + "m63eac3543445": { + "source": "Deploy Project", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m258e06a65649": { + "source": "Push your project to a public URL.", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "jsx" + } + ] + }, + "m1b5e18d612ea": { + "source": "Production deploy", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m532eaabd9574": { + "source": "Test", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + }, + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "expression" + } + ] + }, + "m5ad97435475e": { + "source": "Preview deploy", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m90f5b6aa4773": { + "source": "Deploy to", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "jsx" + } + ] + }, + "m1653b4115030": { + "source": "Building project...", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "expression" + } + ] + }, + "m80113aa5faa0": { + "source": "Deploying...", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "expression" + } + ] + }, + "mbbfce3ca6d67": { + "source": "This may take a moment. Please don't close this dialog.", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "mcfb9b21873ed": { + "source": "Preparing files", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m64629c4d29ff": { + "source": "Building project", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m8d32627e5f77": { + "source": "Deploying to", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "mab8e18ef4ebe": { + "source": "production", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m5975cf1bba43": { + "source": "preview", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "md94be7d9742f": { + "source": "Live!", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "jsx" + } + ] + }, + "m7a0c1d6867ef": { + "source": "Your project is now live at:", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m3f3ade612f14": { + "source": "Remove the live site and free the URL", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "attribute" + } + ] + }, + "m77cdc28c5085": { + "source": "Taking down…", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m8026481a3655": { + "source": "Take down this site", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "m4a1fec6bb23f": { + "source": "Deploy failed", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "mbe6c9b2e929b": { + "source": "Something went wrong during deployment.", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m796ae067cc65": { + "source": "View build log", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "mb703dbfc031f": { + "source": "Try to Fix", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "jsx" + } + ] + }, + "m862996056422": { + "source": "Delete Project", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-danger.tsx", + "kind": "jsx" + } + ] + }, + "m59cdaa26dd9d": { + "source": "Keyboard Shortcuts", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "jsx" + } + ] + }, + "me198269c2a19": { + "source": "An unexpected error occurred. Please try again.", + "locations": [ + { + "file": "app/error.tsx", + "kind": "expression" + } + ] + }, + "m44dc4af8bac1": { + "source": "Reference:", + "locations": [ + { + "file": "app/global-error.tsx", + "kind": "jsx" + } + ] + }, + "mfb9ef894175c": { + "source": "Product", + "locations": [ + { + "file": "app/home-footer.tsx", + "kind": "data" + } + ] + }, + "m5697d03daef4": { + "source": "Features", + "locations": [ + { + "file": "app/home-footer.tsx", + "kind": "data" + } + ] + }, + "mdfe95783edfe": { + "source": "Pricing", + "locations": [ + { + "file": "app/home-footer.tsx", + "kind": "data" + }, + { + "file": "app/page.tsx", + "kind": "jsx" + } + ] + }, + "mead07c84baac": { + "source": "Changelog", + "locations": [ + { + "file": "app/home-footer.tsx", + "kind": "data" + } + ] + }, + "me89b30aa1dc3": { + "source": "Resources", + "locations": [ + { + "file": "app/home-footer.tsx", + "kind": "data" + }, + { + "file": "app/page.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "mc205924de0fe": { + "source": "Documentation", + "locations": [ + { + "file": "app/home-footer.tsx", + "kind": "data" + } + ] + }, + "mf911e414cf6b": { + "source": "GitHub", + "locations": [ + { + "file": "app/home-footer.tsx", + "kind": "data" + }, + { + "file": "app/home-footer.tsx", + "kind": "attribute" + }, + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "data" + }, + { + "file": "modules/editor/toolbar/editor-toolbar.tsx", + "kind": "attribute" + } + ] + }, + "mbe91940b79f4": { + "source": "Support", + "locations": [ + { + "file": "app/home-footer.tsx", + "kind": "data" + } + ] + }, + "mde4743c87973": { + "source": "Company", + "locations": [ + { + "file": "app/home-footer.tsx", + "kind": "data" + } + ] + }, + "m54a57c3147c4": { + "source": "Privacy", + "locations": [ + { + "file": "app/home-footer.tsx", + "kind": "data" + }, + { + "file": "app/home-footer.tsx", + "kind": "jsx" + }, + { + "file": "components/dashboard/footer.tsx", + "kind": "jsx" + } + ] + }, + "mede548996483": { + "source": "Terms", + "locations": [ + { + "file": "app/home-footer.tsx", + "kind": "data" + }, + { + "file": "app/home-footer.tsx", + "kind": "jsx" + }, + { + "file": "components/dashboard/footer.tsx", + "kind": "jsx" + } + ] + }, + "m74d52f5a16af": { + "source": "Tell AI what you want to do and Doable gets it done. From idea to deployed app in minutes.", + "locations": [ + { + "file": "app/home-footer.tsx", + "kind": "jsx" + } + ] + }, + "mbcd18ead5fa8": { + "source": "Twitter", + "locations": [ + { + "file": "app/home-footer.tsx", + "kind": "attribute" + } + ] + }, + "mdd84425b72da": { + "source": "LinkedIn", + "locations": [ + { + "file": "app/home-footer.tsx", + "kind": "attribute" + } + ] + }, + "mc3d6834efdd6": { + "source": "Doable. All rights reserved.", + "locations": [ + { + "file": "app/home-footer.tsx", + "kind": "jsx" + } + ] + }, + "m141395eb3556": { + "source": "Cookies", + "locations": [ + { + "file": "app/home-footer.tsx", + "kind": "jsx" + }, + { + "file": "components/dashboard/footer.tsx", + "kind": "jsx" + } + ] + }, + "mc8d1a76ed3cd": { + "source": "Accepting invite…", + "locations": [ + { + "file": "app/invite/[token]/page.tsx", + "kind": "expression" + } + ] + }, + "m590ca07bd607": { + "source": "You're invited to a workspace", + "locations": [ + { + "file": "app/invite/[token]/page.tsx", + "kind": "jsx" + } + ] + }, + "mf28e0103cd50": { + "source": "Sign in or create an account to accept this invitation.", + "locations": [ + { + "file": "app/invite/[token]/page.tsx", + "kind": "jsx" + } + ] + }, + "m5735019b4e98": { + "source": "Invite accepted!", + "locations": [ + { + "file": "app/invite/[token]/page.tsx", + "kind": "jsx" + } + ] + }, + "m3ce4ce5b4d78": { + "source": "Redirecting you to your dashboard…", + "locations": [ + { + "file": "app/invite/[token]/page.tsx", + "kind": "jsx" + } + ] + }, + "m689d821c3114": { + "source": "Couldn't accept invite", + "locations": [ + { + "file": "app/invite/[token]/page.tsx", + "kind": "jsx" + } + ] + }, + "ma469ab4ca4e5": { + "source": "Page not found", + "locations": [ + { + "file": "app/not-found.tsx", + "kind": "jsx" + } + ] + }, + "m74b78a922b99": { + "source": "The page you are looking for does not exist.", + "locations": [ + { + "file": "app/not-found.tsx", + "kind": "jsx" + } + ] + }, + "m900fe12faa26": { + "source": "Solutions", + "locations": [ + { + "file": "app/page.tsx", + "kind": "jsx" + } + ] + }, + "mbb501d7877eb": { + "source": "Community", + "locations": [ + { + "file": "app/page.tsx", + "kind": "jsx" + } + ] + }, + "mc189840cf7e2": { + "source": "Log in", + "locations": [ + { + "file": "app/page.tsx", + "kind": "jsx" + } + ] + }, + "mdcf218cf7b95": { + "source": "Dream it. Do it. Done.", + "locations": [ + { + "file": "app/page.tsx", + "kind": "jsx" + } + ] + }, + "m13b022d3d051": { + "source": "Say it. Doable does it.", + "locations": [ + { + "file": "app/page.tsx", + "kind": "jsx" + } + ] + }, + "m3acf05570e85": { + "source": "What do you want Doable to do?", + "locations": [ + { + "file": "app/page.tsx", + "kind": "attribute" + } + ] + }, + "m87fbe4fb79b1": { + "source": "Attach file", + "locations": [ + { + "file": "app/page.tsx", + "kind": "attribute" + } + ] + }, + "m029320ad166c": { + "source": "Screenshot", + "locations": [ + { + "file": "app/page.tsx", + "kind": "attribute" + } + ] + }, + "m3f51e8d0877b": { + "source": "Teams who do more, do it with Doable", + "locations": [ + { + "file": "app/page.tsx", + "kind": "jsx" + } + ] + }, + "m463052e79d3a": { + "source": "How you Do it with Doable", + "locations": [ + { + "file": "app/page.tsx", + "kind": "jsx" + } + ] + }, + "m5e6a3d274615": { + "source": "Say what you want to do", + "locations": [ + { + "file": "app/page.tsx", + "kind": "data" + } + ] + }, + "m9a7bfe7eb8e4": { + "source": "Describe your app, drop in screenshots, or share docs. Doable gets it.", + "locations": [ + { + "file": "app/page.tsx", + "kind": "data" + } + ] + }, + "m78241958361f": { + "source": "Watch Doable doing it", + "locations": [ + { + "file": "app/page.tsx", + "kind": "data" + } + ] + }, + "m9f161010716d": { + "source": "AI writes the code, builds the UI, and sets up the backend while you watch.", + "locations": [ + { + "file": "app/page.tsx", + "kind": "data" + } + ] + }, + "m80c9d1291916": { + "source": "Done. Ship it.", + "locations": [ + { + "file": "app/page.tsx", + "kind": "data" + } + ] + }, + "m7d20496fb539": { + "source": "One click deploy. Custom domains, SSL, and global CDN all done for you.", + "locations": [ + { + "file": "app/page.tsx", + "kind": "data" + } + ] + }, + "m09013f2de54b": { + "source": "Everything you need to get it done", + "locations": [ + { + "file": "app/page.tsx", + "kind": "jsx" + } + ] + }, + "m08ebf324d047": { + "source": "All the tools built in so you keep doing, not configuring. Doable handles the rest.", + "locations": [ + { + "file": "app/page.tsx", + "kind": "jsx" + } + ] + }, + "mf518cf7b4efe": { + "source": "Lightning fast", + "locations": [ + { + "file": "app/page.tsx", + "kind": "data" + } + ] + }, + "m6bb152928b4a": { + "source": "Secure by default", + "locations": [ + { + "file": "app/page.tsx", + "kind": "data" + } + ] + }, + "ma25c6b5b6afa": { + "source": "Global CDN", + "locations": [ + { + "file": "app/page.tsx", + "kind": "data" + } + ] + }, + "m8c0b956e14ef": { + "source": "Full code access", + "locations": [ + { + "file": "app/page.tsx", + "kind": "data" + } + ] + }, + "m0684cdd39443": { + "source": "Ready to do this? Doable is.", + "locations": [ + { + "file": "app/page.tsx", + "kind": "jsx" + } + ] + }, + "md52657699508": { + "source": "Thousands of makers are already doing it with Doable. Start for free. No credit card required.", + "locations": [ + { + "file": "app/page.tsx", + "kind": "jsx" + } + ] + }, + "maeea1a48193b": { + "source": "Start doing for free", + "locations": [ + { + "file": "app/page.tsx", + "kind": "jsx" + } + ] + }, + "m1445799c033a": { + "source": "Learn more", + "locations": [ + { + "file": "app/page.tsx", + "kind": "jsx" + } + ] + }, + "mfa23af167fb0": { + "source": "Free forever for personal projects. Just do it with Doable.", + "locations": [ + { + "file": "app/page.tsx", + "kind": "jsx" + } + ] + }, + "m7013af4c42fe": { + "source": "Setup", + "locations": [ + { + "file": "app/setup/WizardShell.tsx", + "kind": "jsx" + } + ] + }, + "m8e6a6cca7aae": { + "source": "Step", + "locations": [ + { + "file": "app/setup/WizardShell.tsx", + "kind": "jsx" + } + ] + }, + "mcd6e6bf7671e": { + "source": "Could not load plan defaults — you can configure them later in /admin/plans.", + "locations": [ + { + "file": "app/setup/steps/PlanDefaultsInline.tsx", + "kind": "feedback" + } + ] + }, + "mf33e9463fe30": { + "source": "No plan defaults configured. The provider you set in Step 3 should already be applied to all plans. If this list is empty, you can configure them later from", + "locations": [ + { + "file": "app/setup/steps/PlanDefaultsInline.tsx", + "kind": "jsx" + } + ] + }, + "m5950cc6b345a": { + "source": "AI model defaults per plan", + "locations": [ + { + "file": "app/setup/steps/PlanDefaultsInline.tsx", + "kind": "jsx" + } + ] + }, + "m0d962a8ad91d": { + "source": "The provider+model you chose in Step 3 was applied to all plans automatically. Optionally override the model for individual plans (e.g. a cheaper model on Free, a more capable one on Enterprise). You can change these any time in", + "locations": [ + { + "file": "app/setup/steps/PlanDefaultsInline.tsx", + "kind": "jsx" + } + ] + }, + "mfa8ed0bdabdd": { + "source": "Plan", + "locations": [ + { + "file": "app/setup/steps/PlanDefaultsInline.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/plan/plan-card.tsx", + "kind": "jsx" + }, + { + "file": "modules/workspace/components/workspace-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "m3840d9d29421": { + "source": "Default model", + "locations": [ + { + "file": "app/setup/steps/PlanDefaultsInline.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "m6786e7ae86aa": { + "source": "Welcome to your Doable", + "locations": [ + { + "file": "app/setup/steps/Step1Welcome.tsx", + "kind": "jsx" + } + ] + }, + "mf198e3035cb0": { + "source": "You are the platform owner on this install. This short setup walks you through connecting an AI provider, sign-in options, and plans & billing — so your team can sign up and start building. Every step is optional and revisitable from", + "locations": [ + { + "file": "app/setup/steps/Step1Welcome.tsx", + "kind": "jsx" + } + ] + }, + "m9619649d8dc1": { + "source": "Workspace name", + "locations": [ + { + "file": "app/setup/steps/Step1Welcome.tsx", + "kind": "jsx" + } + ] + }, + "me2f59cbbd2e4": { + "source": "Acme Corp's workspace", + "locations": [ + { + "file": "app/setup/steps/Step1Welcome.tsx", + "kind": "attribute" + } + ] + }, + "m56bf215a01f2": { + "source": "This is the name shown to users on your install.", + "locations": [ + { + "file": "app/setup/steps/Step1Welcome.tsx", + "kind": "jsx" + } + ] + }, + "mbb59d7d5f7b2": { + "source": "Use your existing Copilot subscription (OAuth, no key)", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "data" + } + ] + }, + "maf41ef1f8cc0": { + "source": "Paste any /v1 base URL + key (Llamafile, vLLM, proxies, …)", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "data" + } + ] + }, + "m53542be919ee": { + "source": "gpt-4o (OpenAI)", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "data" + } + ] + }, + "m7e85883aa362": { + "source": "gpt-4o-mini (OpenAI, cheaper)", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "data" + } + ] + }, + "m447070f01035": { + "source": "o3-mini (OpenAI reasoning)", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "data" + } + ] + }, + "m7f3c09e12c73": { + "source": "claude-3.7-sonnet (Anthropic)", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "data" + } + ] + }, + "m442058677a76": { + "source": "claude-sonnet-4 (Anthropic, latest)", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "data" + } + ] + }, + "maacb18706135": { + "source": "gemini-2.0-flash (Google)", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "data" + } + ] + }, + "m1caaab8de684": { + "source": "Auto (route per request)", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "data" + } + ] + }, + "m8b4adb3862ca": { + "source": "Pick or type a model — chat needs one to know which engine to call.", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "feedback" + } + ] + }, + "me8579660f269": { + "source": "Click \"Connect with GitHub\" first — Copilot needs a connected account before saving.", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "feedback" + } + ] + }, + "mb83bc0c87ee9": { + "source": "Connect an AI provider", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "ma30e891162d9": { + "source": "Pick one to start — you can add more in", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "mb36828d08414": { + "source": "later.", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "mee84a5fafc6f": { + "source": "Search providers (e.g. minimax, groq, ollama)", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "attribute" + } + ] + }, + "m2150d8df37e4": { + "source": "Show all", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "m1e19bab29bc6": { + "source": "providers", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "m6da70c62b13a": { + "source": "popular shown)", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "mc892c6d3f9e5": { + "source": "No providers match “", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "mad5c8b09c799": { + "source": "”. Clear the search or toggle “Show all”.", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "mf2969201caf1": { + "source": "free tier", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "ma9977b3804b1": { + "source": "Tip: export any of 19 supported API key env vars (", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "m782f3b91aee9": { + "source": ", …) before running", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "m9e8be70c89aa": { + "source": "and the matching provider is pre-configured here. See", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "mf77ea2dcde80": { + "source": "banner for the full list.", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "m3e6a04afff84": { + "source": "Running a", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "mffa838f6509a": { + "source": "local model", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "m28aa86db16fb": { + "source": "? Search for", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "m76e3c7bfe641": { + "source": "ollama", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "m7df09a7717ef": { + "source": "lm studio", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "m3d30020b1863": { + "source": ", or", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "mec8207a3dde6": { + "source": "vllm", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "m910b571e2b50": { + "source": "above — no API key needed, just point at", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "m9cf6151e1e52": { + "source": "Doable does", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "m254bb97b57f1": { + "source": "not", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "m9fe6e8f5bbda": { + "source": "bundle, ship, or proxy any third-party AI keys — every key is BYOK (bring-your-own).", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "mb58eb52c8810": { + "source": "Skip for now", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "jsx" + }, + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "jsx" + } + ] + }, + "m01dbdc1c993d": { + "source": "(replace", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "m0344f8c6320b": { + "source": "with your values)", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "md34c1f38253c": { + "source": "Base URL:", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "me0beec38b884": { + "source": "Get key", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "m202ee5a3741d": { + "source": "This provider runs locally on your machine — no API key needed. Make sure the server is running at the URL above", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "me63dffe73660": { + "source": "; see warnings below", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "expression" + } + ] + }, + "mae563693e963": { + "source": "Your API key", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "expression" + }, + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "attribute" + }, + { + "file": "app/setup/steps/Step2EmbeddingPanel.tsx", + "kind": "expression" + } + ] + }, + "m089ef2b6dbb3": { + "source": "Model ID", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "m09bf1d2d1f94": { + "source": "(from provider's docs)", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "m119ac74a9f28": { + "source": "GitHub Copilot uses OAuth — no API key is needed. Click below to authorize Doable against your existing Copilot subscription. A popup window opens; once you authorize on github.com, it closes automatically and we return here to pick the default model.", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "md3f403f42255": { + "source": "Waiting for GitHub…", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "expression" + } + ] + }, + "m6f2b4e53fd6b": { + "source": "Connect with GitHub", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "expression" + }, + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/components/github-connect-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/components/import-github-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mb9ae1344db09": { + "source": "Connected as", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/components/github-connect-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/components/import-github-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m733e8e968cd4": { + "source": ". Pick the default model below — you can change it any time in", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "m67969da753e5": { + "source": "Default Copilot model", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "mf006797a8658": { + "source": "Fetching the live list of models your Copilot subscription includes…", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "expression" + } + ] + }, + "m97c6d58174ba": { + "source": "Use this model as the default for every plan (Free, Pro, Business, Enterprise) and as the suggestions model. You can fine-tune per-plan and suggestions models later in", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "jsx" + } + ] + }, + "mcd51f8c88998": { + "source": "Validating…", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "expression" + } + ] + }, + "mb62d92c04b27": { + "source": "Validate & Save", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "expression" + } + ] + }, + "m397e0b042fa6": { + "source": "text-embedding-3-small / large. Fast, widely supported, $0.02/1M tokens.", + "locations": [ + { + "file": "app/setup/steps/Step2EmbeddingPanel.tsx", + "kind": "data" + } + ] + }, + "m8b641190411f": { + "source": "gemini-embedding-001 / text-embedding-004 via Gemini's OpenAI-compatible API.", + "locations": [ + { + "file": "app/setup/steps/Step2EmbeddingPanel.tsx", + "kind": "data" + } + ] + }, + "m21b98f239b59": { + "source": "Any /v1/embeddings endpoint — Ollama, vLLM, Voyage, Cohere via proxy, etc.", + "locations": [ + { + "file": "app/setup/steps/Step2EmbeddingPanel.tsx", + "kind": "data" + } + ] + }, + "mce4eb2f81438": { + "source": "(optional — for chatbots, semantic search, RAG)", + "locations": [ + { + "file": "app/setup/steps/Step2EmbeddingPanel.tsx", + "kind": "jsx" + } + ] + }, + "m10f5e9ac0df6": { + "source": "Pick once — every workspace inherits this. Skip if you don't need RAG yet.", + "locations": [ + { + "file": "app/setup/steps/Step2EmbeddingPanel.tsx", + "kind": "expression" + } + ] + }, + "m5f37766b7475": { + "source": "End-users of apps built on Doable will never see this — they just ask the AI to build a chatbot. The runtime calls this embedding provider to vectorise their documents. You can change it any time from", + "locations": [ + { + "file": "app/setup/steps/Step2EmbeddingPanel.tsx", + "kind": "jsx" + } + ] + }, + "m1e84cbbeaece": { + "source": "Validates the key with a probe call before saving.", + "locations": [ + { + "file": "app/setup/steps/Step2EmbeddingPanel.tsx", + "kind": "jsx" + } + ] + }, + "mce770667e5f9": { + "source": "Google", + "locations": [ + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "data" + } + ] + }, + "mf5d92316d71f": { + "source": "Sign in with Google accounts", + "locations": [ + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "data" + } + ] + }, + "m4670389c9b26": { + "source": "Sign-in + Copilot AI + repo push/pull — ONE OAuth App, register the parent URL below", + "locations": [ + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "data" + } + ] + }, + "mfe7ceb7816ed": { + "source": "Supabase", + "locations": [ + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "data" + } + ] + }, + "m526606259ea3": { + "source": "Lets users authorize Doable to provision Supabase projects on their behalf when the AI builds a backend-enabled app. Without this, users see a sign-in prompt mid-build.", + "locations": [ + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "data" + } + ] + }, + "m3c9e12e223c9": { + "source": "Sign-in providers", + "locations": [ + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "jsx" + } + ] + }, + "m6590db953aef": { + "source": "Let your users sign in with Google or GitHub. Register the callback URL in each provider's dashboard, then paste the credentials below.", + "locations": [ + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "jsx" + } + ] + }, + "m1a2303ede074": { + "source": "Connect", + "locations": [ + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/chat-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/chat-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "expression" + } + ] + }, + "mf5b92da3fdef": { + "source": "1. Register this callback URL in the", + "locations": [ + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "jsx" + } + ] + }, + "mf6a4a7cf34d1": { + "source": "developer console", + "locations": [ + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "jsx" + } + ] + }, + "m8d525e5f158b": { + "source": "Copied", + "locations": [ + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/code-editor/code-display.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + }, + { + "file": "modules/workspace/components/members-rows.tsx", + "kind": "jsx" + } + ] + }, + "m293fc19e964c": { + "source": "2. Paste your credentials", + "locations": [ + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "jsx" + } + ] + }, + "m8726db013948": { + "source": "Client ID", + "locations": [ + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "attribute" + }, + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + } + ] + }, + "mae21cf6d24b8": { + "source": "Client Secret", + "locations": [ + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "attribute" + }, + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + } + ] + }, + "m23e39291d613": { + "source": "Saving…", + "locations": [ + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "expression" + }, + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "expression" + } + ] + }, + "mf412ebc3df40": { + "source": "Save credentials", + "locations": [ + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "expression" + } + ] + }, + "m1b24fc634466": { + "source": "Credentials saved. Value masked for security.", + "locations": [ + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "jsx" + } + ] + }, + "me2e89b8e6f9f": { + "source": "Sign-in providers are optional. You can configure them later in", + "locations": [ + { + "file": "app/setup/steps/Step3SignInProviders.tsx", + "kind": "jsx" + } + ] + }, + "md084947c92ce": { + "source": "Plans & billing", + "locations": [ + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "jsx" + } + ] + }, + "m5664b564628f": { + "source": "Pick which AI model each plan tier defaults to, then optionally wire up Stripe + signup policy. Everything here can be changed later in /admin.", + "locations": [ + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "jsx" + } + ] + }, + "ma5a084d23d5a": { + "source": "When ON, new signups stay pending until an admin approves them in", + "locations": [ + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "jsx" + } + ] + }, + "m0092b9666213": { + "source": ". When OFF (default), anyone with a valid email can sign up immediately.", + "locations": [ + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "jsx" + } + ] + }, + "m63225ccda962": { + "source": "Could not save — try again or use /admin/signups", + "locations": [ + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "jsx" + } + ] + }, + "mac177037c161": { + "source": "Stripe (paid plans)", + "locations": [ + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "jsx" + } + ] + }, + "m7131c5070086": { + "source": "Paste your Stripe secret + webhook secret to enable Pro and Business plans.", + "locations": [ + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "expression" + } + ] + }, + "ma88096f64ef5": { + "source": "Optional — enable paid Pro/Business plans via Stripe.", + "locations": [ + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "expression" + } + ] + }, + "me83d9f58b3d6": { + "source": "Stripe secret key", + "locations": [ + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "jsx" + } + ] + }, + "m31535e99b294": { + "source": "Your Stripe secret", + "locations": [ + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "attribute" + } + ] + }, + "m48c7cde4072b": { + "source": "Webhook signing secret", + "locations": [ + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "jsx" + } + ] + }, + "m18424d99bfd7": { + "source": "Your Stripe webhook signing secret", + "locations": [ + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "attribute" + } + ] + }, + "m7738cb3ae13c": { + "source": "Price IDs for Pro/Business can be added in", + "locations": [ + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "jsx" + } + ] + }, + "m2de0ae2fa094": { + "source": "Save Stripe", + "locations": [ + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "expression" + } + ] + }, + "m2ba1d3dd28b6": { + "source": "Want to fine-tune what each plan (free / pro / business / enterprise) can do? Set projects-per-user, daily credits, file size limits, custom domains, and more in", + "locations": [ + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "jsx" + } + ] + }, + "m8dc5b288dc5f": { + "source": "— sensible defaults apply automatically until then.", + "locations": [ + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "jsx" + } + ] + }, + "mbc01ae77f37c": { + "source": "Finish setup", + "locations": [ + { + "file": "app/setup/steps/Step4Integrations.tsx", + "kind": "expression" + } + ] + }, + "m730e434e2c2a": { + "source": "Cloudflare Tunnel", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "m9778b714611a": { + "source": "We strongly recommend running Doable behind a Cloudflare Tunnel. Your server never exposes ports 80 or 443 to the public internet — all traffic enters through Cloudflare's edge, with built-in DDoS protection and TLS.", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "md1dcc908d054": { + "source": "Cloudflare Tunnel active", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "expression" + } + ] + }, + "mb41298f6a20c": { + "source": "Cloudflare Tunnel not yet configured", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "expression" + } + ] + }, + "m3e0bd76b4c80": { + "source": "cloudflared binary:", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "ma51a6c19a1ff": { + "source": "installed", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "expression" + } + ] + }, + "me9363f76e114": { + "source": "not installed", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "expression" + } + ] + }, + "m6481edfe0a91": { + "source": "tunnel config:", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "mffa63583dfa6": { + "source": "missing", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "expression" + } + ] + }, + "m261945c8a175": { + "source": "cloudflared service:", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "m8322e87d2458": { + "source": "stopped", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "expression" + } + ] + }, + "m8892fc20f821": { + "source": "public hostname:", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "mdd00d3d3e9f7": { + "source": "Next steps", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "m8cda32203974": { + "source": "Install cloudflared on the server:", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "m4a706dc0d33e": { + "source": "curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cf.deb && sudo dpkg -i cf.deb", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "mf08fb302bec6": { + "source": "Log in to Cloudflare and create a tunnel:", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "m5da4ed8525fa": { + "source": "sudo cloudflared tunnel login", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "mffbc4b090a5e": { + "source": "Then create + route the tunnel:", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "m0e01c001f314": { + "source": "sudo cloudflared tunnel create doable && sudo cloudflared tunnel route dns doable yourdomain.com", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "md71e794ad243": { + "source": "Start the cloudflared service:", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "m5a846462fa96": { + "source": "sudo cloudflared service install && sudo systemctl enable --now cloudflared", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "m98f87e36b355": { + "source": "Open Cloudflare dashboard", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "m81b5b9670350": { + "source": "Re-check status", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "me892474b34b3": { + "source": "All set — your install is reachable through Cloudflare without exposing any ports.", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "mfd45cb7aab11": { + "source": "Skip and use direct ports?", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "ma3eca7bb4939": { + "source": "Without Cloudflare your server will need ports 80 and 443 open to the public. You become directly responsible for DDoS handling, TLS cert renewal, and origin IP exposure. You can add Cloudflare later in", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "m5b0b0536f25e": { + "source": "Skip Cloudflare anyway", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "mb1acabed067d": { + "source": "Skip Cloudflare", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "jsx" + } + ] + }, + "m515d1a3dc956": { + "source": "Waiting for tunnel…", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "expression" + } + ] + }, + "mf68057ac59cf": { + "source": "Task Tracker", + "locations": [ + { + "file": "components/dashboard/header.tsx", + "kind": "jsx" + } + ] + }, + "mbfa0cab91d75": { + "source": "Switch to light mode", + "locations": [ + { + "file": "components/dashboard/header.tsx", + "kind": "expression" + } + ] + }, + "mfc43ea9804c7": { + "source": "Switch to dark mode", + "locations": [ + { + "file": "components/dashboard/header.tsx", + "kind": "expression" + } + ] + }, + "m64879f7d6b96": { + "source": "plan", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/my-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m1377264ba3b0": { + "source": "Workspaces", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "attribute" + }, + { + "file": "modules/dashboard/components/workspace-switcher.tsx", + "kind": "jsx" + } + ] + }, + "m4b892277843c": { + "source": "Create workspace", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/workspace-switcher.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/workspace-switcher.tsx", + "kind": "jsx" + } + ] + }, + "m5ebc59145b59": { + "source": "Workspace settings", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + } + ] + }, + "m01eb22153f34": { + "source": "Credits today", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + } + ] + }, + "m11dde17d6c3e": { + "source": "Unlimited", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "expression" + }, + { + "file": "modules/ai-settings/components/my-usage-tab.tsx", + "kind": "expression" + }, + { + "file": "modules/billing/components/credit-display.tsx", + "kind": "expression" + }, + { + "file": "modules/billing/components/credit-display.tsx", + "kind": "expression" + } + ] + }, + "m198a27bda7be": { + "source": "(limit)", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "expression" + } + ] + }, + "m4b87271b6b81": { + "source": "All projects", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "attribute" + } + ] + }, + "m083fe88f924c": { + "source": "Import project", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "attribute" + } + ] + }, + "m690dbe9dc099": { + "source": "Recent", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/sidebar.tsx", + "kind": "jsx" + } + ] + }, + "m091f4b8e2db6": { + "source": "No recent projects", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + } + ] + }, + "mc4d6bb200f4c": { + "source": "Folders", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/sidebar.tsx", + "kind": "jsx" + } + ] + }, + "m82b9e1ef0b40": { + "source": "Create folder", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "attribute" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/sidebar.tsx", + "kind": "attribute" + } + ] + }, + "m8a66376ee6fc": { + "source": "No folders yet", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + } + ] + }, + "macb320d7f3e3": { + "source": "Upgrade to Pro", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "jsx" + } + ] + }, + "m382c1b0128ec": { + "source": "Get unlimited projects and priority AI generation.", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + } + ] + }, + "m2c414ee58a7e": { + "source": "Upgrade now", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + } + ] + }, + "m3e402e6d846c": { + "source": "user@doable.dev", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "expression" + } + ] + }, + "ma8e5e2c64f0c": { + "source": "AI Settings", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/ai-settings-page.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "jsx" + } + ] + }, + "m8d59829c1e15": { + "source": "Usage", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/usage-page.tsx", + "kind": "jsx" + } + ] + }, + "m8b2b19860686": { + "source": "System Admin", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + } + ] + }, + "m48f0d3d397d4": { + "source": "Sign out", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + } + ] + }, + "mcee021f1b617": { + "source": "My Team", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "attribute" + }, + { + "file": "modules/dashboard/components/workspace-switcher.tsx", + "kind": "attribute" + } + ] + }, + "m14d34edf50ef": { + "source": "Folder name", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "attribute" + }, + { + "file": "components/dashboard/sidebar.tsx", + "kind": "attribute" + } + ] + }, + "m7249f19c9e4f": { + "source": "Rename folder", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + } + ] + }, + "m39f35f2d44d6": { + "source": "Delete folder", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + } + ] + }, + "me2c1d47c93ed": { + "source": "”? Projects inside this folder will be moved to the root level.", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "jsx" + } + ] + }, + "mc409c66f71f2": { + "source": "Official", + "locations": [ + { + "file": "components/templates/template-card.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/template-gallery.tsx", + "kind": "jsx" + } + ] + }, + "m3b9c358f36f0": { + "source": "file", + "locations": [ + { + "file": "components/templates/template-card.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/panels/activity-feed-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/sidebar/version-history-item.tsx", + "kind": "jsx" + }, + { + "file": "modules/environments/env-tabs.tsx", + "kind": "jsx" + } + ] + }, + "m3d7db37d08f9": { + "source": "files", + "locations": [ + { + "file": "components/templates/template-card.tsx", + "kind": "expression" + }, + { + "file": "modules/dashboard/components/template-gallery.tsx", + "kind": "jsx" + } + ] + }, + "mf68bbeba04a3": { + "source": "by Doable", + "locations": [ + { + "file": "components/templates/template-preview-modal.tsx", + "kind": "jsx" + } + ] + }, + "m351dd54e5327": { + "source": "Use template", + "locations": [ + { + "file": "components/templates/template-preview-modal.tsx", + "kind": "jsx" + } + ] + }, + "m7d8ab368210c": { + "source": "Close preview", + "locations": [ + { + "file": "components/templates/template-preview-modal.tsx", + "kind": "attribute" + } + ] + }, + "mee3aea9a74c3": { + "source": "No active workspace selected. Please pick a workspace and try again.", + "locations": [ + { + "file": "components/templates/use-template-dialog.tsx", + "kind": "feedback" + } + ] + }, + "m57bbe6daa81b": { + "source": "Remix project", + "locations": [ + { + "file": "components/templates/use-template-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m1b8e9e6b07af": { + "source": "By remixing a project, you will create a copy that you own.", + "locations": [ + { + "file": "components/templates/use-template-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m7d465fb9b931": { + "source": "Purple", + "locations": [ + { + "file": "hooks/use-brand-theme.ts", + "kind": "data" + } + ] + }, + "m275dbda9dedb": { + "source": "Sunset", + "locations": [ + { + "file": "hooks/use-brand-theme.ts", + "kind": "data" + } + ] + }, + "mfed12611d2d8": { + "source": "Ocean", + "locations": [ + { + "file": "hooks/use-brand-theme.ts", + "kind": "data" + } + ] + }, + "maf1ccb31304d": { + "source": "Emerald", + "locations": [ + { + "file": "hooks/use-brand-theme.ts", + "kind": "data" + } + ] + }, + "me10d850954a8": { + "source": "Rose", + "locations": [ + { + "file": "hooks/use-brand-theme.ts", + "kind": "data" + } + ] + }, + "m767cff7f960b": { + "source": "Microphone permission is blocked for this site. Open the padlock icon → Site settings → Microphone → Allow, then try again.", + "locations": [ + { + "file": "hooks/use-speech-recognition.ts", + "kind": "feedback" + } + ] + }, + "mb5c308fbe72b": { + "source": "Log filters", + "locations": [ + { + "file": "modules/admin/log-filters/LogFiltersPanel.tsx", + "kind": "jsx" + } + ] + }, + "m81493812f8f2": { + "source": "Loading filters...", + "locations": [ + { + "file": "modules/admin/log-filters/LogFiltersPanel.tsx", + "kind": "jsx" + } + ] + }, + "mfc86c80c7edf": { + "source": "No filters configured.", + "locations": [ + { + "file": "modules/admin/log-filters/LogFiltersPanel.tsx", + "kind": "jsx" + } + ] + }, + "mfb9cf75606b4": { + "source": "enabled", + "locations": [ + { + "file": "modules/admin/log-filters/LogFiltersPanel.tsx", + "kind": "jsx" + } + ] + }, + "me520df698000": { + "source": "Add filter", + "locations": [ + { + "file": "modules/admin/log-filters/LogFiltersPanel.tsx", + "kind": "jsx" + }, + { + "file": "modules/admin/log-filters/LogFiltersPanel.tsx", + "kind": "expression" + } + ] + }, + "maad7b48f94b8": { + "source": "deny-pattern", + "locations": [ + { + "file": "modules/admin/log-filters/LogFiltersPanel.tsx", + "kind": "jsx" + } + ] + }, + "m761252ef4dca": { + "source": "drop-pattern", + "locations": [ + { + "file": "modules/admin/log-filters/LogFiltersPanel.tsx", + "kind": "jsx" + } + ] + }, + "m4288ade73ff9": { + "source": "Pattern", + "locations": [ + { + "file": "modules/admin/log-filters/LogFiltersPanel.tsx", + "kind": "jsx" + } + ] + }, + "m404879015b5e": { + "source": "Replacement token", + "locations": [ + { + "file": "modules/admin/log-filters/LogFiltersPanel.tsx", + "kind": "jsx" + } + ] + }, + "m913a8849b60d": { + "source": "Adding...", + "locations": [ + { + "file": "modules/admin/log-filters/LogFiltersPanel.tsx", + "kind": "expression" + } + ] + }, + "m52493dd405b2": { + "source": "AI Rules for Your Team", + "locations": [ + { + "file": "modules/ai-settings/components/access-control-tab.tsx", + "kind": "jsx" + } + ] + }, + "m1698475a0e4e": { + "source": "Lock everyone in your workspace to a specific AI model — no one can change it", + "locations": [ + { + "file": "modules/ai-settings/components/access-control-tab.tsx", + "kind": "jsx" + } + ] + }, + "m40edcb0424d1": { + "source": "Require everyone to use the same AI model", + "locations": [ + { + "file": "modules/ai-settings/components/access-control-tab.tsx", + "kind": "jsx" + } + ] + }, + "mce07e2d406c9": { + "source": "When turned on, every workspace member uses the model you pick below. They won't be able to change it.", + "locations": [ + { + "file": "modules/ai-settings/components/access-control-tab.tsx", + "kind": "jsx" + } + ] + }, + "ma270c2ea38f8": { + "source": "Provider Source", + "locations": [ + { + "file": "modules/ai-settings/components/access-control-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/user-allocation-edit-modal.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/user-allocations-tab.tsx", + "kind": "jsx" + } + ] + }, + "m173243930c8e": { + "source": "Server Default", + "locations": [ + { + "file": "modules/ai-settings/components/access-control-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "jsx" + } + ] + }, + "m7c5b75e762fd": { + "source": "Uses the server's built-in GitHub authentication.", + "locations": [ + { + "file": "modules/ai-settings/components/access-control-tab.tsx", + "kind": "jsx" + } + ] + }, + "mfb4cbadb8b70": { + "source": "No accounts connected yet. Go to the Connections tab to add one.", + "locations": [ + { + "file": "modules/ai-settings/components/access-control-tab.tsx", + "kind": "jsx" + } + ] + }, + "m9e09fe0c5e85": { + "source": "No providers set up yet. Go to the Connections tab to add one.", + "locations": [ + { + "file": "modules/ai-settings/components/access-control-tab.tsx", + "kind": "jsx" + } + ] + }, + "m5f8a57b902c9": { + "source": "Let Members Choose Their Model", + "locations": [ + { + "file": "modules/ai-settings/components/access-control-tab.tsx", + "kind": "jsx" + } + ] + }, + "mc8500c181a22": { + "source": "Show or hide the model picker in the editor for workspace members", + "locations": [ + { + "file": "modules/ai-settings/components/access-control-tab.tsx", + "kind": "jsx" + } + ] + }, + "md0965f23e9a7": { + "source": "Show model picker to workspace members", + "locations": [ + { + "file": "modules/ai-settings/components/access-control-tab.tsx", + "kind": "jsx" + } + ] + }, + "mea1cef6187f4": { + "source": "When turned off, members won't see which model they're using. The workspace default (or enforced model) runs automatically in the background.", + "locations": [ + { + "file": "modules/ai-settings/components/access-control-tab.tsx", + "kind": "jsx" + } + ] + }, + "med9b760289e6": { + "source": "Saved!", + "locations": [ + { + "file": "modules/ai-settings/components/access-control-tab.tsx", + "kind": "expression" + }, + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "expression" + }, + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "expression" + }, + { + "file": "modules/ai-settings/components/model-defaults-tab.tsx", + "kind": "expression" + } + ] + }, + "m06440082fecf": { + "source": "Save Policy", + "locations": [ + { + "file": "modules/ai-settings/components/access-control-tab.tsx", + "kind": "expression" + } + ] + }, + "mdc273117482b": { + "source": "Connections", + "locations": [ + { + "file": "modules/ai-settings/components/ai-settings-page.tsx", + "kind": "data" + } + ] + }, + "m278ba0d8ae8b": { + "source": "Configure Model", + "locations": [ + { + "file": "modules/ai-settings/components/ai-settings-page.tsx", + "kind": "data" + } + ] + }, + "mc3ceee351e98": { + "source": "Access Control", + "locations": [ + { + "file": "modules/ai-settings/components/ai-settings-page.tsx", + "kind": "data" + } + ] + }, + "ma3966fe9958a": { + "source": "Access Restricted", + "locations": [ + { + "file": "modules/ai-settings/components/ai-settings-page.tsx", + "kind": "jsx" + } + ] + }, + "me3a6b88175b6": { + "source": "AI Settings has been disabled by a platform administrator.", + "locations": [ + { + "file": "modules/ai-settings/components/ai-settings-page.tsx", + "kind": "expression" + } + ] + }, + "m5658830ef02d": { + "source": "Your access to AI Settings has been restricted by a platform administrator.", + "locations": [ + { + "file": "modules/ai-settings/components/ai-settings-page.tsx", + "kind": "expression" + } + ] + }, + "m2687891426b5": { + "source": "You don't have permission to access AI Settings. Contact your administrator.", + "locations": [ + { + "file": "modules/ai-settings/components/ai-settings-page.tsx", + "kind": "expression" + } + ] + }, + "m57294990f283": { + "source": "Configure which AI models power your workspace.", + "locations": [ + { + "file": "modules/ai-settings/components/ai-settings-page.tsx", + "kind": "jsx" + } + ] + }, + "mdd51804e0d20": { + "source": "Label (e.g. 'My personal account')", + "locations": [ + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "expression" + } + ] + }, + "mdcd0e95a1c40": { + "source": "Label (e.g. 'Team account')", + "locations": [ + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "expression" + } + ] + }, + "m316ff94e7f22": { + "source": "Paste your GitHub access token here", + "locations": [ + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "attribute" + } + ] + }, + "ma87169d1ad67": { + "source": "GitHub AI Accounts", + "locations": [ + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "jsx" + } + ] + }, + "m4e74616e8a5a": { + "source": "Connect GitHub accounts that have Copilot access. Personal accounts are visible only to you.", + "locations": [ + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "jsx" + } + ] + }, + "m81e8901975a6": { + "source": "My personal accounts", + "locations": [ + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "jsx" + } + ] + }, + "m10fdee9039c4": { + "source": "Only you can see these", + "locations": [ + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "attribute" + }, + { + "file": "modules/ai-settings/components/custom-providers-tab.tsx", + "kind": "attribute" + } + ] + }, + "m88d4ac742ef4": { + "source": "Sign in with GitHub to connect a personal account", + "locations": [ + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "attribute" + } + ] + }, + "m22f6738880de": { + "source": "Sign in with GitHub", + "locations": [ + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "jsx" + } + ] + }, + "m0cead0b1bbfb": { + "source": "Add a personal account using a GitHub access token", + "locations": [ + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "attribute" + } + ] + }, + "m6f64f2fda498": { + "source": "Add personal", + "locations": [ + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/custom-providers-tab.tsx", + "kind": "jsx" + } + ] + }, + "ma6229eda29c2": { + "source": "No personal accounts. Add one to use your own Copilot subscription privately.", + "locations": [ + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "jsx" + } + ] + }, + "mca24402563e9": { + "source": "Workspace shared accounts", + "locations": [ + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "jsx" + } + ] + }, + "m81e613c508dc": { + "source": "visible to all members", + "locations": [ + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/custom-providers-tab.tsx", + "kind": "jsx" + } + ] + }, + "m37d3acac0058": { + "source": "Sign in with GitHub to share a workspace account", + "locations": [ + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "attribute" + } + ] + }, + "m748e1e7d0514": { + "source": "Add a workspace-shared account using a token", + "locations": [ + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "attribute" + } + ] + }, + "m9ed034e74290": { + "source": "Add for workspace", + "locations": [ + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/custom-providers-tab.tsx", + "kind": "jsx" + } + ] + }, + "m15792a7c8fdf": { + "source": "No workspace-shared accounts. Add one to provide a Copilot account every member can use.", + "locations": [ + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "expression" + } + ] + }, + "m9aaf2001e996": { + "source": "No workspace-shared accounts available. Ask a workspace admin to share one.", + "locations": [ + { + "file": "modules/ai-settings/components/connections-tab.tsx", + "kind": "expression" + } + ] + }, + "mf7004e38eb59": { + "source": "Share this provider with everyone in the workspace", + "locations": [ + { + "file": "modules/ai-settings/components/custom-providers-tab.tsx", + "kind": "attribute" + } + ] + }, + "m2ff8c705e102": { + "source": "Make available to workspace", + "locations": [ + { + "file": "modules/ai-settings/components/custom-providers-tab.tsx", + "kind": "jsx" + } + ] + }, + "mab7d145d79e5": { + "source": "Test connection & refresh models", + "locations": [ + { + "file": "modules/ai-settings/components/custom-providers-tab.tsx", + "kind": "attribute" + } + ] + }, + "m5234fbffc3e9": { + "source": "Remove provider", + "locations": [ + { + "file": "modules/ai-settings/components/custom-providers-tab.tsx", + "kind": "attribute" + } + ] + }, + "m35877a8c182e": { + "source": "Custom AI Providers", + "locations": [ + { + "file": "modules/ai-settings/components/custom-providers-tab.tsx", + "kind": "jsx" + } + ] + }, + "m6b813862d568": { + "source": "Bring your own API keys for OpenAI, Anthropic, local models, and 50+ more. Personal providers are visible only to you.", + "locations": [ + { + "file": "modules/ai-settings/components/custom-providers-tab.tsx", + "kind": "jsx" + } + ] + }, + "m55c7becc0df9": { + "source": "My personal providers", + "locations": [ + { + "file": "modules/ai-settings/components/custom-providers-tab.tsx", + "kind": "jsx" + } + ] + }, + "m12149a0e62fb": { + "source": "No personal providers. Add your own API key for private use.", + "locations": [ + { + "file": "modules/ai-settings/components/custom-providers-tab.tsx", + "kind": "jsx" + } + ] + }, + "m73e4a838e4c2": { + "source": "Workspace shared providers", + "locations": [ + { + "file": "modules/ai-settings/components/custom-providers-tab.tsx", + "kind": "jsx" + } + ] + }, + "m450b43b4e4a1": { + "source": "No workspace providers. Add one to share an API key with every member.", + "locations": [ + { + "file": "modules/ai-settings/components/custom-providers-tab.tsx", + "kind": "expression" + } + ] + }, + "m296b7ae87520": { + "source": "No workspace providers available. Ask a workspace admin to share one.", + "locations": [ + { + "file": "modules/ai-settings/components/custom-providers-tab.tsx", + "kind": "expression" + } + ] + }, + "m272a1179fcc5": { + "source": "Workspace defaults", + "locations": [ + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m72961734eed0": { + "source": "admin-only — read-only for you", + "locations": [ + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m8ead970fda1c": { + "source": "Applied to new projects in this workspace. Each project can override these from the per-project Doable tab.", + "locations": [ + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "mac20a57bfde0": { + "source": "Hide", + "locations": [ + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "expression" + }, + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/chat/plan/plan-step.tsx", + "kind": "expression" + } + ] + }, + "m02bbdcb834ae": { + "source": "Default system prompt for new projects", + "locations": [ + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "mb6928362a2cc": { + "source": "(none — projects ship with no pinned prompt)", + "locations": [ + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "attribute" + } + ] + }, + "mafef567095e2": { + "source": "Save workspace defaults", + "locations": [ + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m4c23e9e18502": { + "source": "Personal AI overrides", + "locations": [ + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m8eb55745fa7e": { + "source": "These apply to projects where you are the workspace owner. They override the workspace defaults but lose to explicit per-project settings.", + "locations": [ + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "mb0863c6bc9e4": { + "source": "Thinking visibility", + "locations": [ + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "ma85fdf51c603": { + "source": "Personal system prompt (optional)", + "locations": [ + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m9fb002ae01d2": { + "source": "(none — workspace default applies)", + "locations": [ + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "attribute" + } + ] + }, + "m265d57a355b8": { + "source": "Save personal overrides", + "locations": [ + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m6c9df66826e1": { + "source": "Workspace usage rollup", + "locations": [ + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + } + ] + }, + "m63b86b7a429f": { + "source": "Pricing not configured", + "locations": [ + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "m5c39123805ff": { + "source": "Prompt", + "locations": [ + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/usage-charts.tsx", + "kind": "data" + }, + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "m557fe004f344": { + "source": "Completion", + "locations": [ + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/usage-charts.tsx", + "kind": "data" + }, + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "m6352380a7c9f": { + "source": "No usage yet.", + "locations": [ + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "m03db3a45c3c1": { + "source": "No usage data.", + "locations": [ + { + "file": "modules/ai-settings/components/doable-ai-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "m66aeb8c46b2f": { + "source": "Claude Sonnet 4", + "locations": [ + { + "file": "modules/ai-settings/components/editor-model-selector.tsx", + "kind": "data" + }, + { + "file": "modules/ai-settings/components/model-config-hooks.ts", + "kind": "data" + } + ] + }, + "m9b816f4a6295": { + "source": "GPT-4o", + "locations": [ + { + "file": "modules/ai-settings/components/editor-model-selector.tsx", + "kind": "data" + }, + { + "file": "modules/ai-settings/components/model-config-hooks.ts", + "kind": "data" + } + ] + }, + "m4c43a229d244": { + "source": "GPT-4o Mini", + "locations": [ + { + "file": "modules/ai-settings/components/editor-model-selector.tsx", + "kind": "data" + }, + { + "file": "modules/ai-settings/components/model-config-hooks.ts", + "kind": "data" + } + ] + }, + "mcab28bc8feb2": { + "source": "GPT-4.1", + "locations": [ + { + "file": "modules/ai-settings/components/editor-model-selector.tsx", + "kind": "data" + }, + { + "file": "modules/ai-settings/components/model-config-hooks.ts", + "kind": "data" + } + ] + }, + "m7e1eb717e40b": { + "source": "GPT-4.1 Mini", + "locations": [ + { + "file": "modules/ai-settings/components/editor-model-selector.tsx", + "kind": "data" + }, + { + "file": "modules/ai-settings/components/model-config-hooks.ts", + "kind": "data" + } + ] + }, + "m2ea8e99cc4c2": { + "source": "GPT-4.1 Nano", + "locations": [ + { + "file": "modules/ai-settings/components/editor-model-selector.tsx", + "kind": "data" + }, + { + "file": "modules/ai-settings/components/model-config-hooks.ts", + "kind": "data" + } + ] + }, + "mdfc325305b0c": { + "source": "o3-mini", + "locations": [ + { + "file": "modules/ai-settings/components/editor-model-selector.tsx", + "kind": "data" + }, + { + "file": "modules/ai-settings/components/model-config-hooks.ts", + "kind": "data" + } + ] + }, + "m9056e3300ca8": { + "source": "o4-mini", + "locations": [ + { + "file": "modules/ai-settings/components/editor-model-selector.tsx", + "kind": "data" + }, + { + "file": "modules/ai-settings/components/model-config-hooks.ts", + "kind": "data" + } + ] + }, + "ma0089ee0749b": { + "source": "Gemini 2.0 Flash", + "locations": [ + { + "file": "modules/ai-settings/components/editor-model-selector.tsx", + "kind": "data" + }, + { + "file": "modules/ai-settings/components/model-config-hooks.ts", + "kind": "data" + } + ] + }, + "mc587c2601ccf": { + "source": "Vision", + "locations": [ + { + "file": "modules/ai-settings/components/editor-model-selector.tsx", + "kind": "attribute" + }, + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "data" + }, + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "attribute" + } + ] + }, + "m10d67f48de99": { + "source": "Tool calling", + "locations": [ + { + "file": "modules/ai-settings/components/editor-model-selector.tsx", + "kind": "attribute" + }, + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "data" + }, + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "attribute" + } + ] + }, + "m7381afd23bb9": { + "source": "Last health check latency", + "locations": [ + { + "file": "modules/ai-settings/components/editor-model-selector.tsx", + "kind": "attribute" + } + ] + }, + "ma424e33d9093": { + "source": "Locked", + "locations": [ + { + "file": "modules/ai-settings/components/editor-model-selector.tsx", + "kind": "expression" + } + ] + }, + "m4b9a22bfe3cc": { + "source": "Copilot Models", + "locations": [ + { + "file": "modules/ai-settings/components/editor-model-selector.tsx", + "kind": "jsx" + } + ] + }, + "m8c31e6e72230": { + "source": "Local", + "locations": [ + { + "file": "modules/ai-settings/components/editor-model-selector.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/provider-card.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "data" + } + ] + }, + "ma5ac4b64684f": { + "source": "Manage AI Settings", + "locations": [ + { + "file": "modules/ai-settings/components/editor-model-selector.tsx", + "kind": "jsx" + } + ] + }, + "m5a8d0b7bf5bc": { + "source": "GitHub Copilot Accounts", + "locations": [ + { + "file": "modules/ai-settings/components/github-accounts-tab.tsx", + "kind": "jsx" + } + ] + }, + "me04ed13e7f98": { + "source": "Connect GitHub accounts with Copilot subscriptions for AI model access.", + "locations": [ + { + "file": "modules/ai-settings/components/github-accounts-tab.tsx", + "kind": "jsx" + } + ] + }, + "m313ebbb894ad": { + "source": "Connect via OAuth", + "locations": [ + { + "file": "modules/ai-settings/components/github-accounts-tab.tsx", + "kind": "jsx" + } + ] + }, + "m8717362cf4d4": { + "source": "Add Token", + "locations": [ + { + "file": "modules/ai-settings/components/github-accounts-tab.tsx", + "kind": "jsx" + } + ] + }, + "m3cc8c4614ff9": { + "source": "Label (e.g. 'Work Account')", + "locations": [ + { + "file": "modules/ai-settings/components/github-accounts-tab.tsx", + "kind": "attribute" + } + ] + }, + "m71e3980d749e": { + "source": "GitHub Personal Access Token", + "locations": [ + { + "file": "modules/ai-settings/components/github-accounts-tab.tsx", + "kind": "attribute" + } + ] + }, + "m3d0d3f78acca": { + "source": "Add Account", + "locations": [ + { + "file": "modules/ai-settings/components/github-accounts-tab.tsx", + "kind": "jsx" + } + ] + }, + "m19cd7039551d": { + "source": "No GitHub accounts connected yet.", + "locations": [ + { + "file": "modules/ai-settings/components/github-accounts-tab.tsx", + "kind": "jsx" + } + ] + }, + "m4a24319d30be": { + "source": "Connect a GitHub account with a Copilot subscription to use Copilot models.", + "locations": [ + { + "file": "modules/ai-settings/components/github-accounts-tab.tsx", + "kind": "jsx" + } + ] + }, + "m92340695899b": { + "source": "Active", + "locations": [ + { + "file": "modules/ai-settings/components/github-accounts-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "expression" + }, + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "data" + } + ] + }, + "mfc20838c106a": { + "source": "Remove as default", + "locations": [ + { + "file": "modules/ai-settings/components/github-accounts-tab.tsx", + "kind": "expression" + } + ] + }, + "mae188faa0901": { + "source": "Set default", + "locations": [ + { + "file": "modules/ai-settings/components/github-accounts-tab.tsx", + "kind": "expression" + } + ] + }, + "m5bcf311b19d8": { + "source": "Test connection", + "locations": [ + { + "file": "modules/ai-settings/components/github-accounts-tab.tsx", + "kind": "attribute" + }, + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + } + ] + }, + "mfd35618c1920": { + "source": "Remove account", + "locations": [ + { + "file": "modules/ai-settings/components/github-accounts-tab.tsx", + "kind": "attribute" + } + ] + }, + "m371b1434a262": { + "source": "Both configurations are saved. Switching tabs only changes which one is active — your other tab's selection is kept.", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "jsx" + } + ] + }, + "m00aa6fbbbb45": { + "source": "Connect GitHub Account", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "attribute" + } + ] + }, + "m4c6e2e6be505": { + "source": "Uses the server's built-in GitHub authentication. Connect your own account for more control.", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "jsx" + } + ] + }, + "m0b0a0d2d7316": { + "source": "No accounts connected.", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "jsx" + } + ] + }, + "m14d8260ff981": { + "source": "Connect one", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "jsx" + } + ] + }, + "m6f4f0e79bd3a": { + "source": "Add Provider", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "attribute" + }, + { + "file": "modules/ai-settings/components/provider-wizard.tsx", + "kind": "jsx" + } + ] + }, + "m00d0efcd9a96": { + "source": "No providers configured.", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "jsx" + } + ] + }, + "mea779ba543fa": { + "source": "Add your first provider", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "jsx" + } + ] + }, + "m802435241f0a": { + "source": "Loading models...", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "jsx" + } + ] + }, + "m1274d7acbe2f": { + "source": "[vision]", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "expression" + }, + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "expression" + } + ] + }, + "m11b29cd62933": { + "source": "[tools]", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "expression" + }, + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "expression" + } + ] + }, + "ma48f39155dbc": { + "source": "Type custom model ID...", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "jsx" + } + ] + }, + "mecaa1f1b910a": { + "source": "Back to model list", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-fields.tsx", + "kind": "jsx" + } + ] + }, + "mb1bdf63d93c3": { + "source": "Auto (recommended)", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-hooks.ts", + "kind": "data" + }, + { + "file": "modules/ai-settings/components/model-config-hooks.ts", + "kind": "data" + } + ] + }, + "m811e7c5206f3": { + "source": "How model selection works", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "jsx" + } + ] + }, + "mbda2e3e6c900": { + "source": "Enforcement", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "jsx" + } + ] + }, + "mf5cfe7d0fa62": { + "source": "(Access Control tab) — if active, everyone uses the enforced model. No exceptions.", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "jsx" + } + ] + }, + "mdd85a853b978": { + "source": "Personal Override", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "jsx" + } + ] + }, + "mfd1bdfb83444": { + "source": "— each member can pick their own model. Overrides workspace defaults for that member only.", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "jsx" + } + ] + }, + "mb7c579774bdc": { + "source": "Workspace Defaults", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/environments/env-cards.tsx", + "kind": "jsx" + }, + { + "file": "modules/environments/env-tabs.tsx", + "kind": "jsx" + } + ] + }, + "md3705a239c8b": { + "source": "— the fallback for anyone who hasn't set a personal override.", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "jsx" + } + ] + }, + "m33f9cc7719c5": { + "source": "Higher-numbered rules are only used when the one above isn't set.", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "jsx" + } + ] + }, + "m80c9fa2d52f6": { + "source": "My Personal Override", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "jsx" + } + ] + }, + "md944d0946c11": { + "source": "Override the workspace defaults below for yourself only — other members are not affected", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "jsx" + } + ] + }, + "m88f78ee1a74e": { + "source": "An enforcement policy is active (see Access Control tab). Personal overrides are locked for all members.", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "jsx" + } + ] + }, + "mbc2701b02460": { + "source": "Primary Model", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "jsx" + } + ] + }, + "m678335abff59": { + "source": "Suggestion Model", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "jsx" + } + ] + }, + "mf3f3f1ffb3df": { + "source": "Override which model generates quick-action suggestion chips after each AI response.", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "jsx" + } + ] + }, + "m03390cbe8c91": { + "source": "Save My Override", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "expression" + } + ] + }, + "mc138ea416a30": { + "source": "Workspace Defaults — applies to all members", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "jsx" + } + ] + }, + "m7a5e21ee7739": { + "source": "Primary Model — All Workspace Members", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "attribute" + } + ] + }, + "m51332a856ef0": { + "source": "Default model for code generation, editing, and agent tasks for everyone you've invited to this workspace", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "attribute" + } + ] + }, + "m824d0cc2933d": { + "source": "This is the main AI model used for chat, code generation, and editing. It applies to every member you've invited to this workspace — not all users on the platform. If a member has set a personal override (above), their override takes priority over this default.", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "attribute" + } + ] + }, + "mcd2a216a8873": { + "source": "Suggestions Model — All Workspace Members", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "attribute" + } + ] + }, + "me5f651670aa6": { + "source": "Lighter model for suggestion chips, used by everyone you've invited to this workspace (saves cost vs primary model)", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "attribute" + } + ] + }, + "m84717f285efb": { + "source": "Suggestion chips are the quick-action buttons shown after each AI response. This model handles only those suggestions — a lighter, cheaper model works well here. Like the primary model, this applies to every member you've invited to this workspace, not all users on the platform.", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "attribute" + } + ] + }, + "mb227a038322a": { + "source": "Save Configuration", + "locations": [ + { + "file": "modules/ai-settings/components/model-config-tab.tsx", + "kind": "expression" + } + ] + }, + "mfe7f3371f597": { + "source": "Set the workspace-level default model and provider for new sessions.", + "locations": [ + { + "file": "modules/ai-settings/components/model-defaults-tab.tsx", + "kind": "jsx" + } + ] + }, + "md933cadf6bcc": { + "source": "Default (auto)", + "locations": [ + { + "file": "modules/ai-settings/components/model-defaults-tab.tsx", + "kind": "jsx" + } + ] + }, + "m0bce36498592": { + "source": "GitHub Copilot Account", + "locations": [ + { + "file": "modules/ai-settings/components/model-defaults-tab.tsx", + "kind": "jsx" + } + ] + }, + "m62a75a117242": { + "source": "None (use Copilot)", + "locations": [ + { + "file": "modules/ai-settings/components/model-defaults-tab.tsx", + "kind": "jsx" + } + ] + }, + "m12e24a38709a": { + "source": "Save Defaults", + "locations": [ + { + "file": "modules/ai-settings/components/model-defaults-tab.tsx", + "kind": "expression" + } + ] + }, + "m3b41ba9c7cb8": { + "source": "No data", + "locations": [ + { + "file": "modules/ai-settings/components/my-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "mec72420df5df": { + "source": "requests", + "locations": [ + { + "file": "modules/ai-settings/components/my-usage-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/usage-charts.tsx", + "kind": "jsx" + } + ] + }, + "mc51e455b41df": { + "source": "tokens", + "locations": [ + { + "file": "modules/ai-settings/components/my-usage-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/usage-charts.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/token-counter.tsx", + "kind": "jsx" + } + ] + }, + "mbe7d2f314aa6": { + "source": "No usage data yet", + "locations": [ + { + "file": "modules/ai-settings/components/my-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m245625010045": { + "source": "Start using AI features to see your usage here.", + "locations": [ + { + "file": "modules/ai-settings/components/my-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m8ff37f00b925": { + "source": "Today's Tokens", + "locations": [ + { + "file": "modules/ai-settings/components/my-usage-tab.tsx", + "kind": "attribute" + } + ] + }, + "me367b5bddcb7": { + "source": "This Month's Cost", + "locations": [ + { + "file": "modules/ai-settings/components/my-usage-tab.tsx", + "kind": "attribute" + } + ] + }, + "m7740276a07c6": { + "source": "Monthly Requests", + "locations": [ + { + "file": "modules/ai-settings/components/my-usage-tab.tsx", + "kind": "attribute" + } + ] + }, + "m2263e21eea02": { + "source": "Avg Response", + "locations": [ + { + "file": "modules/ai-settings/components/my-usage-tab.tsx", + "kind": "attribute" + }, + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "attribute" + } + ] + }, + "mc64fe09035ae": { + "source": "Credits Used", + "locations": [ + { + "file": "modules/ai-settings/components/my-usage-tab.tsx", + "kind": "attribute" + } + ] + }, + "m140e92e21244": { + "source": "Credit Usage", + "locations": [ + { + "file": "modules/ai-settings/components/my-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m643677360223": { + "source": "This Month", + "locations": [ + { + "file": "modules/ai-settings/components/my-usage-tab.tsx", + "kind": "attribute" + } + ] + }, + "m601068f46cf6": { + "source": "By Project", + "locations": [ + { + "file": "modules/ai-settings/components/my-usage-tab.tsx", + "kind": "attribute" + } + ] + }, + "mafed5886d257": { + "source": "By Model", + "locations": [ + { + "file": "modules/ai-settings/components/my-usage-tab.tsx", + "kind": "attribute" + } + ] + }, + "m9bf1562b3de9": { + "source": "By Mode", + "locations": [ + { + "file": "modules/ai-settings/components/my-usage-tab.tsx", + "kind": "attribute" + } + ] + }, + "md4b1ea5708dd": { + "source": "Overview", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "data" + }, + { + "file": "modules/settings/database/database-tab.tsx", + "kind": "data" + } + ] + }, + "mc2ec47508acd": { + "source": "Copilot Subscriptions", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "data" + }, + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "ma0ff02ba4ff8": { + "source": "Custom Providers", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "data" + } + ] + }, + "md17d2d78d76e": { + "source": "Models", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "data" + } + ] + }, + "mdc80f077b5cd": { + "source": "No platform-wide usage data yet", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m79667786321b": { + "source": "Platform-wide view — showing usage across all workspaces and users.", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "mcd41bf0d3e9a": { + "source": "Total Tokens", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "attribute" + }, + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "attribute" + } + ] + }, + "mdfa5cc738da2": { + "source": "Total Cost", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "attribute" + }, + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "attribute" + } + ] + }, + "m5639b9f1265e": { + "source": "Active Users", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "attribute" + } + ] + }, + "m41d11f62a9e1": { + "source": "All Users Ranked by Tokens", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m308eddf16a19": { + "source": "No users with usage data.", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m897d0b58d207": { + "source": "One row per GitHub Copilot subscription. Expand to see which users are assigned and which models each user called.", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "meb12564b0386": { + "source": "No Copilot accounts configured.", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m797df3bce3a6": { + "source": "Custom Providers (BYOK)", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m3fdb4c30e9cf": { + "source": "Custom providers like OpenAI, Anthropic, Azure. Expand to see users and per-user model usage.", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "md4dc49276a77": { + "source": "No custom providers configured.", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m5e6b09a1d017": { + "source": "Model Usage Breakdown", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "mb94242e1a9d2": { + "source": "No model usage data.", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "maed7a1237429": { + "source": "reqs", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "md2104f7ad311": { + "source": "Usage breakdown —", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m0eba3d4ee43f": { + "source": "Owned by", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m8c1603967eb0": { + "source": "No owner record", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "me1d4e49fac0e": { + "source": "no workspaces", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "expression" + } + ] + }, + "m5a4f4a60e7f2": { + "source": "added by", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "mb8d31e852725": { + "source": "on", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "ma6423636974e": { + "source": "Risk: rate-limiting, abuse-detection flags, or subscription suspension.", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m2d84b1ff3652": { + "source": "GitHub's terms restrict Copilot Individual licenses to a single person — licenses are tied to one GitHub account and are not shareable. Sharing can cause GitHub to throttle or revoke Copilot access for that account.", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "mefc75a421422": { + "source": "What to do:", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "ma45dd9f0586a": { + "source": "use one Copilot subscription per user, or move everyone to a Copilot Business / Enterprise plan with per-seat assignments. Consider adding each user's own GitHub Copilot account to Doable instead of reusing one.", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m4fc92a5a044b": { + "source": "Users on this", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "ma8fa7fd60893": { + "source": "subscription", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "expression" + } + ] + }, + "m9372c470eead": { + "source": "model", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "jsx" + } + ] + }, + "m681bf81aba87": { + "source": "Used by", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m7f1e323b6272": { + "source": "Healthy", + "locations": [ + { + "file": "modules/ai-settings/components/provider-health-badge.tsx", + "kind": "data" + } + ] + }, + "ma8494c12f224": { + "source": "Degraded", + "locations": [ + { + "file": "modules/ai-settings/components/provider-health-badge.tsx", + "kind": "data" + } + ] + }, + "mb86d11af7918": { + "source": "Down", + "locations": [ + { + "file": "modules/ai-settings/components/provider-health-badge.tsx", + "kind": "data" + } + ] + }, + "m3a386d2bb69a": { + "source": "OC", + "locations": [ + { + "file": "modules/ai-settings/components/provider-icons.tsx", + "kind": "jsx" + } + ] + }, + "m8ee4a41352fe": { + "source": "Validate connection", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "jsx" + } + ] + }, + "m30840caab959": { + "source": "Test the connection to", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "jsx" + } + ] + }, + "m4ef6bbb83197": { + "source": "to verify your configuration.", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "jsx" + } + ] + }, + "mc02977b07ec9": { + "source": "Test Connection", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/provider-wizard.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/cloud-connection-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integrations-panel-cards.tsx", + "kind": "jsx" + } + ] + }, + "m3d0032b7b274": { + "source": "Testing connection...", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "jsx" + } + ] + }, + "m856dd8c8677b": { + "source": "Connection successful", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "jsx" + } + ] + }, + "m7839136b0629": { + "source": "Latency:", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "jsx" + } + ] + }, + "m0c56a4742a5d": { + "source": "discovered", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "jsx" + } + ] + }, + "m596c52f1eb65": { + "source": "Connection failed", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integration-detail-sheet.tsx", + "kind": "expression" + } + ] + }, + "m27c2ccd962c2": { + "source": "Unknown error", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "expression" + } + ] + }, + "m6a6222577c22": { + "source": "Test Again", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "jsx" + } + ] + }, + "m9dba8266214f": { + "source": "No models available. The provider will be saved without model selections.", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "jsx" + } + ] + }, + "mc73dec76ac2a": { + "source": "models selected", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "jsx" + } + ] + }, + "md1ec69e64b96": { + "source": "Select All", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "jsx" + } + ] + }, + "m5cd261bcc680": { + "source": "Deselect All", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps-validate.tsx", + "kind": "jsx" + } + ] + }, + "m41ed52921661": { + "source": "Gateway", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "data" + } + ] + }, + "m7a1de35a8e55": { + "source": "Search providers...", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "attribute" + } + ] + }, + "m277b696272a8": { + "source": "Custom OpenAI-compatible URL", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "jsx" + } + ] + }, + "m97eb364e9b60": { + "source": "Paste any /v1 base URL + key — vLLM, LM Studio, LiteLLM, proxies, …", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "jsx" + } + ] + }, + "m6f07c7004956": { + "source": "No providers match your search.", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "jsx" + } + ] + }, + "m8d6563bb5963": { + "source": "My Provider", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "attribute" + } + ] + }, + "m242f0189b5f6": { + "source": "Azure Resource Name", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "jsx" + } + ] + }, + "m1a6d8517d24e": { + "source": "my-resource", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "attribute" + } + ] + }, + "m734fd77b3610": { + "source": "URL:", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "jsx" + } + ] + }, + "m1b8a163d4269": { + "source": "Default port:", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "jsx" + } + ] + }, + "m91d7321fb450": { + "source": ". Make sure the server is running.", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "jsx" + } + ] + }, + "m960a4c077af3": { + "source": "API Version", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "jsx" + } + ] + }, + "m365c8d2794f1": { + "source": "2024-02-15-preview", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "attribute" + } + ] + }, + "m100903efdd81": { + "source": "Enter API key", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "expression" + } + ] + }, + "m02d7af705ed7": { + "source": "Get API Key", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "jsx" + } + ] + }, + "m267fe5203a04": { + "source": "No API key required. This provider runs locally on your machine.", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-steps.tsx", + "kind": "jsx" + } + ] + }, + "md38cf7963f59": { + "source": "Paste any /v1 base URL + key (vLLM, LM Studio, LiteLLM, proxies, …)", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard-types.ts", + "kind": "data" + } + ] + }, + "m2e7ec7c1f35a": { + "source": "Add as:", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard.tsx", + "kind": "jsx" + } + ] + }, + "m8abdb6e5e6d0": { + "source": "Visible only to you", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard.tsx", + "kind": "expression" + } + ] + }, + "m4b09fb4ff780": { + "source": "Pick at the start of the wizard", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard.tsx", + "kind": "expression" + }, + { + "file": "modules/ai-settings/components/provider-wizard.tsx", + "kind": "expression" + } + ] + }, + "m6471564ca226": { + "source": "Shared with all workspace members", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard.tsx", + "kind": "expression" + } + ] + }, + "ma70838995179": { + "source": "locked for this run", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard.tsx", + "kind": "jsx" + } + ] + }, + "m5f78463b1356": { + "source": "Adding as personal — visible only to you.", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard.tsx", + "kind": "jsx" + } + ] + }, + "m05c39c4c5b13": { + "source": "Select Models", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard.tsx", + "kind": "jsx" + } + ] + }, + "m35ba3f52321d": { + "source": "Save Provider", + "locations": [ + { + "file": "modules/ai-settings/components/provider-wizard.tsx", + "kind": "jsx" + } + ] + }, + "ma3a4cc0143e0": { + "source": "Daily Usage", + "locations": [ + { + "file": "modules/ai-settings/components/usage-charts.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/usage-charts.tsx", + "kind": "jsx" + } + ] + }, + "meaad100ab411": { + "source": "No usage data for this period", + "locations": [ + { + "file": "modules/ai-settings/components/usage-charts.tsx", + "kind": "jsx" + } + ] + }, + "ma251c18205f1": { + "source": "Cached", + "locations": [ + { + "file": "modules/ai-settings/components/usage-charts.tsx", + "kind": "data" + } + ] + }, + "mc26ddab833c1": { + "source": "Token Breakdown", + "locations": [ + { + "file": "modules/ai-settings/components/usage-charts.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/usage-charts.tsx", + "kind": "jsx" + } + ] + }, + "m0f1ce9b3ff09": { + "source": "No token data", + "locations": [ + { + "file": "modules/ai-settings/components/usage-charts.tsx", + "kind": "jsx" + } + ] + }, + "mf9ef8f0b95bd": { + "source": "Hourly Activity", + "locations": [ + { + "file": "modules/ai-settings/components/usage-charts.tsx", + "kind": "jsx" + } + ] + }, + "m2498446ac8c1": { + "source": "My Usage", + "locations": [ + { + "file": "modules/ai-settings/components/usage-page.tsx", + "kind": "data" + } + ] + }, + "m59bb73deeeaa": { + "source": "Workspace Usage", + "locations": [ + { + "file": "modules/ai-settings/components/usage-page.tsx", + "kind": "data" + } + ] + }, + "mc78ffe195710": { + "source": "Platform", + "locations": [ + { + "file": "modules/ai-settings/components/usage-page.tsx", + "kind": "data" + } + ] + }, + "mbed75b0c1b2f": { + "source": "Track your AI usage, token consumption, and costs.", + "locations": [ + { + "file": "modules/ai-settings/components/usage-page.tsx", + "kind": "jsx" + } + ] + }, + "m3611335b3ccf": { + "source": "Using workspace defaults", + "locations": [ + { + "file": "modules/ai-settings/components/user-allocation-edit-modal.tsx", + "kind": "jsx" + } + ] + }, + "m47079ed2516e": { + "source": "This overrides the workspace defaults for this user only.", + "locations": [ + { + "file": "modules/ai-settings/components/user-allocation-edit-modal.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/user-allocations-tab.tsx", + "kind": "jsx" + } + ] + }, + "m2736b56903dd": { + "source": "Both configurations are kept. The selected tab is what this user will use.", + "locations": [ + { + "file": "modules/ai-settings/components/user-allocation-edit-modal.tsx", + "kind": "jsx" + }, + { + "file": "modules/ai-settings/components/user-allocations-tab.tsx", + "kind": "jsx" + } + ] + }, + "m4969880d8a37": { + "source": "Assign AI settings to individual workspace members. You can configure each user with a specific copilot account or custom provider, or use", + "locations": [ + { + "file": "modules/ai-settings/components/user-allocations-tab.tsx", + "kind": "jsx" + } + ] + }, + "m1c208a8418be": { + "source": "\"Copy My Settings\"", + "locations": [ + { + "file": "modules/ai-settings/components/user-allocations-tab.tsx", + "kind": "jsx" + } + ] + }, + "m25e2b4ef6040": { + "source": "to give selected users the same configuration you use. Users without a custom allocation will use the workspace defaults.", + "locations": [ + { + "file": "modules/ai-settings/components/user-allocations-tab.tsx", + "kind": "jsx" + } + ] + }, + "m260c635dcf53": { + "source": "An enforcement policy is active. These per-user allocations will only take effect when enforcement is turned off (see Access Control tab).", + "locations": [ + { + "file": "modules/ai-settings/components/user-allocations-tab.tsx", + "kind": "jsx" + } + ] + }, + "m8350bb048b6c": { + "source": "Copy My Settings to Selected", + "locations": [ + { + "file": "modules/ai-settings/components/user-allocations-tab.tsx", + "kind": "jsx" + } + ] + }, + "mcea4d2e010b8": { + "source": "Clear selection", + "locations": [ + { + "file": "modules/ai-settings/components/user-allocations-tab.tsx", + "kind": "jsx" + } + ] + }, + "m14736a2eb9f4": { + "source": "Role", + "locations": [ + { + "file": "modules/ai-settings/components/user-allocations-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/workspace/components/members-dialogs.tsx", + "kind": "jsx" + } + ] + }, + "m2ec14428b5e2": { + "source": "AI Configuration", + "locations": [ + { + "file": "modules/ai-settings/components/user-allocations-tab.tsx", + "kind": "jsx" + } + ] + }, + "mff8059dc6752": { + "source": "Actions", + "locations": [ + { + "file": "modules/ai-settings/components/user-allocations-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/project-list.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "jsx" + } + ] + }, + "ma6ff9b8bd5ea": { + "source": "Edit AI settings for this user", + "locations": [ + { + "file": "modules/ai-settings/components/user-allocations-tab.tsx", + "kind": "attribute" + } + ] + }, + "m5db73069088d": { + "source": "Reset to workspace defaults", + "locations": [ + { + "file": "modules/ai-settings/components/user-allocations-tab.tsx", + "kind": "attribute" + } + ] + }, + "madb960c9b9a6": { + "source": "No workspace members found.", + "locations": [ + { + "file": "modules/ai-settings/components/user-allocations-tab.tsx", + "kind": "jsx" + } + ] + }, + "m6443cc3d0272": { + "source": "No workspace usage data yet", + "locations": [ + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m37e751d178cb": { + "source": "Total Requests", + "locations": [ + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "attribute" + } + ] + }, + "md699c569f9d4": { + "source": "Top Token Consumers", + "locations": [ + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "mf6e82c3f136a": { + "source": "No usage data yet.", + "locations": [ + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m872f6fd896c2": { + "source": "Member Usage by Model", + "locations": [ + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m14372d93e069": { + "source": "No member usage data.", + "locations": [ + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m61e1ac1d02d4": { + "source": "Copilot Account Usage", + "locations": [ + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m7c9a8dfd7839": { + "source": "Provider Distribution", + "locations": [ + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m954730bd83e4": { + "source": "No provider usage data.", + "locations": [ + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m35261535449d": { + "source": "Prompt:", + "locations": [ + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/token-counter.tsx", + "kind": "jsx" + } + ] + }, + "m457f4957af84": { + "source": "Output:", + "locations": [ + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m3c59f26d9abb": { + "source": "Thinking:", + "locations": [ + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m8af31cd69803": { + "source": "Models used", + "locations": [ + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m15b876237e84": { + "source": "total cost", + "locations": [ + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m8edcc26c0f6c": { + "source": "models", + "locations": [ + { + "file": "modules/ai-settings/components/workspace-usage-tab.tsx", + "kind": "jsx" + } + ] + }, + "m751731b81544": { + "source": "No credit information available. Subscribe to a plan to get started.", + "locations": [ + { + "file": "modules/billing/components/credit-display.tsx", + "kind": "jsx" + } + ] + }, + "md404dbadbc77": { + "source": "Daily credits reset:", + "locations": [ + { + "file": "modules/billing/components/credit-display.tsx", + "kind": "jsx" + } + ] + }, + "mf24795f575e0": { + "source": "Unlimited credits", + "locations": [ + { + "file": "modules/billing/components/credit-display.tsx", + "kind": "expression" + } + ] + }, + "mbe379a30f1aa": { + "source": "credits", + "locations": [ + { + "file": "modules/billing/components/credit-display.tsx", + "kind": "jsx" + } + ] + }, + "m6e69b59ed34d": { + "source": "Yearly", + "locations": [ + { + "file": "modules/billing/components/pricing-cards.tsx", + "kind": "jsx" + } + ] + }, + "m9e1006a43da5": { + "source": "Most Popular", + "locations": [ + { + "file": "modules/billing/components/pricing-cards.tsx", + "kind": "jsx" + } + ] + }, + "mfe3c2c8a9abb": { + "source": "Billed $", + "locations": [ + { + "file": "modules/billing/components/pricing-cards.tsx", + "kind": "jsx" + } + ] + }, + "m56f9c1ca9d9a": { + "source": "Free forever", + "locations": [ + { + "file": "modules/billing/components/pricing-cards.tsx", + "kind": "jsx" + } + ] + }, + "m5d85632008c5": { + "source": "Current Plan", + "locations": [ + { + "file": "modules/billing/components/pricing-cards.tsx", + "kind": "expression" + } + ] + }, + "ma78948998b85": { + "source": "Free Forever", + "locations": [ + { + "file": "modules/billing/components/pricing-cards.tsx", + "kind": "expression" + } + ] + }, + "mf1d05348723b": { + "source": "Checkout URL not available. Please try again.", + "locations": [ + { + "file": "modules/billing/hooks/use-billing.ts", + "kind": "feedback" + } + ] + }, + "m9ff8cfaf7d94": { + "source": "Network error. Please try again.", + "locations": [ + { + "file": "modules/billing/hooks/use-billing.ts", + "kind": "feedback" + }, + { + "file": "modules/billing/hooks/use-billing.ts", + "kind": "feedback" + }, + { + "file": "modules/billing/hooks/use-billing.ts", + "kind": "feedback" + } + ] + }, + "medf8ec0247bd": { + "source": "Portal URL not available. Please try again.", + "locations": [ + { + "file": "modules/billing/hooks/use-billing.ts", + "kind": "feedback" + } + ] + }, + "m066030248f7d": { + "source": "Top-up URL not available. Please try again.", + "locations": [ + { + "file": "modules/billing/hooks/use-billing.ts", + "kind": "feedback" + } + ] + }, + "m864c855e3d64": { + "source": "Someone", + "locations": [ + { + "file": "modules/collaboration/components/activity-toast.tsx", + "kind": "expression" + } + ] + }, + "mde1c270a252c": { + "source": "is chatting with AI...", + "locations": [ + { + "file": "modules/collaboration/components/ai-chat-collab.tsx", + "kind": "jsx" + } + ] + }, + "m7a3a94a8ca22": { + "source": "Abort", + "locations": [ + { + "file": "modules/collaboration/components/ai-chat-collab.tsx", + "kind": "jsx" + } + ] + }, + "mc64a468586ba": { + "source": "is typing to AI", + "locations": [ + { + "file": "modules/collaboration/components/ai-chat-collab.tsx", + "kind": "jsx" + } + ] + }, + "mf9cfdd08b6e9": { + "source": "AI Message Queue", + "locations": [ + { + "file": "modules/collaboration/components/ai-chat-collab.tsx", + "kind": "jsx" + } + ] + }, + "me6c70e380837": { + "source": "Your message is #", + "locations": [ + { + "file": "modules/collaboration/components/ai-chat-collab.tsx", + "kind": "jsx" + } + ] + }, + "m8801e11457f6": { + "source": "Team Chat", + "locations": [ + { + "file": "modules/collaboration/components/chat-popout.tsx", + "kind": "jsx" + }, + { + "file": "modules/collaboration/components/team-chat-panel.tsx", + "kind": "jsx" + } + ] + }, + "mf6fc84c9f21c": { + "source": "online", + "locations": [ + { + "file": "modules/collaboration/components/chat-popout.tsx", + "kind": "jsx" + }, + { + "file": "modules/collaboration/components/presence-avatars.tsx", + "kind": "jsx" + }, + { + "file": "modules/collaboration/components/presence-bar.tsx", + "kind": "jsx" + }, + { + "file": "modules/collaboration/components/team-chat-panel.tsx", + "kind": "jsx" + } + ] + }, + "m15bcfd103b10": { + "source": "is typing", + "locations": [ + { + "file": "modules/collaboration/components/collab-chat-typing.tsx", + "kind": "jsx" + } + ] + }, + "m664c54e22aad": { + "source": "Open team chat", + "locations": [ + { + "file": "modules/collaboration/components/collab-header-items.tsx", + "kind": "attribute" + } + ] + }, + "m31fbe7ddde26": { + "source": "Viewing preview", + "locations": [ + { + "file": "modules/collaboration/components/presence-avatars.tsx", + "kind": "expression" + } + ] + }, + "m4094848f0988": { + "source": "In editor", + "locations": [ + { + "file": "modules/collaboration/components/presence-avatars.tsx", + "kind": "expression" + } + ] + }, + "mf42e0f66017d": { + "source": "No messages yet", + "locations": [ + { + "file": "modules/collaboration/components/team-chat-panel.tsx", + "kind": "jsx" + } + ] + }, + "m9194a89a428a": { + "source": "Start a conversation with your team", + "locations": [ + { + "file": "modules/collaboration/components/team-chat-panel.tsx", + "kind": "jsx" + } + ] + }, + "mfa51fd49abf6": { + "source": "is", + "locations": [ + { + "file": "modules/collaboration/components/team-chat-panel.tsx", + "kind": "expression" + } + ] + }, + "mba78973ddcf9": { + "source": "are", + "locations": [ + { + "file": "modules/collaboration/components/team-chat-panel.tsx", + "kind": "expression" + } + ] + }, + "m6860a5531303": { + "source": "typing...", + "locations": [ + { + "file": "modules/collaboration/components/team-chat-panel.tsx", + "kind": "jsx" + } + ] + }, + "m2b9d1b8090b8": { + "source": "Message your team...", + "locations": [ + { + "file": "modules/collaboration/components/team-chat-panel.tsx", + "kind": "attribute" + } + ] + }, + "mc01ee3929f11": { + "source": "is editing this element", + "locations": [ + { + "file": "modules/collaboration/components/visual-edit-collab.tsx", + "kind": "jsx" + } + ] + }, + "m31e8fa9e4bf8": { + "source": "Add projects to", + "locations": [ + { + "file": "modules/dashboard/components/add-projects-to-folder-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m62b78c2b59b4": { + "source": "Select projects to move into this folder. You can move them back out at any time from each project's menu.", + "locations": [ + { + "file": "modules/dashboard/components/add-projects-to-folder-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m6970a1ced73d": { + "source": "Loading projects…", + "locations": [ + { + "file": "modules/dashboard/components/add-projects-to-folder-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m5181f53d5ac4": { + "source": "No other projects to add. Create one instead.", + "locations": [ + { + "file": "modules/dashboard/components/add-projects-to-folder-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mc6de6f45c827": { + "source": "Adding…", + "locations": [ + { + "file": "modules/dashboard/components/add-projects-to-folder-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m592438d2f7e5": { + "source": "Client-side SPA", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "data" + } + ] + }, + "m6c54b4820100": { + "source": "Full-stack React", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "data" + } + ] + }, + "m15007f45f5c4": { + "source": "Project name is required", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "feedback" + } + ] + }, + "mbe6da843fc7e": { + "source": "Slug must be at least 3 characters", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "feedback" + } + ] + }, + "m23fc9a29fd37": { + "source": "Create a new project", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m7b33683eca2b": { + "source": "Start from scratch, describe what you want, or pick a template.", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m2c3d371cbfd3": { + "source": "Blank", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "data" + } + ] + }, + "m7d4d9a991b60": { + "source": "From prompt", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "data" + } + ] + }, + "m0575f29df888": { + "source": "Template", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "data" + }, + { + "file": "modules/environments/env-cards.tsx", + "kind": "jsx" + } + ] + }, + "med371e413e11": { + "source": "My Awesome Project", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "attribute" + } + ] + }, + "m565a9f0e1060": { + "source": "my-awesome-project", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "attribute" + } + ] + }, + "m0059798b7f70": { + "source": "(optional)", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/dashboard/components/workspace-switcher.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "jsx" + } + ] + }, + "m8d1023e94c37": { + "source": "A brief description...", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "attribute" + } + ] + }, + "med3198efc923": { + "source": "What do you want to build?", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m907bf8ea9357": { + "source": "Describe your application in detail...", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "attribute" + } + ] + }, + "m329a8ef36e36": { + "source": "Choose a template", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m3800ee7191b1": { + "source": "Loading templates…", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mfa67e4d0dae5": { + "source": "Create project", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/supabase-provision-dialog.tsx", + "kind": "expression" + } + ] + }, + "mb712cf8eee5e": { + "source": "elapsed", + "locations": [ + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mc48d5bcd1d2f": { + "source": "This may take a moment for large repositories", + "locations": [ + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m59224914200e": { + "source": "Failed to load repositories", + "locations": [ + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "feedback" + } + ] + }, + "m891e13c74feb": { + "source": "Please select a repository", + "locations": [ + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "feedback" + }, + { + "file": "modules/editor/components/import-github-dialog.tsx", + "kind": "feedback" + } + ] + }, + "m2bfff12a9904": { + "source": "Import an existing repository to continue working on it in Doable.", + "locations": [ + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/components/import-github-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m15c7b7d5a4a5": { + "source": "Connect your GitHub account", + "locations": [ + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/components/github-connect-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/components/import-github-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m09ff61a08ee2": { + "source": "Authorize Doable to access your repositories.", + "locations": [ + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/components/import-github-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m1e64930a3a1a": { + "source": "Disconnect this GitHub account and connect a different one", + "locations": [ + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/components/github-connect-dialog.tsx", + "kind": "attribute" + } + ] + }, + "mcb2b6a572a85": { + "source": "Disconnecting…", + "locations": [ + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/components/github-connect-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mfedce010cffc": { + "source": "Switch account", + "locations": [ + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/components/github-connect-dialog.tsx", + "kind": "expression" + } + ] + }, + "m303a84e178ea": { + "source": "Search repositories...", + "locations": [ + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/components/import-github-dialog.tsx", + "kind": "attribute" + } + ] + }, + "m48db4a3d7dc5": { + "source": "Loading repositories...", + "locations": [ + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/components/import-github-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m48f8556088e8": { + "source": "No repositories match your search", + "locations": [ + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/components/import-github-dialog.tsx", + "kind": "expression" + } + ] + }, + "m94a1181cd13e": { + "source": "No repositories found", + "locations": [ + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/components/import-github-dialog.tsx", + "kind": "expression" + } + ] + }, + "mc63eb6720c6e": { + "source": "Private", + "locations": [ + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/components/github-connect-dialog.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/components/import-github-dialog.tsx", + "kind": "expression" + }, + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "jsx" + } + ] + }, + "m591935b15b1c": { + "source": "Public", + "locations": [ + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/components/github-connect-dialog.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/components/import-github-dialog.tsx", + "kind": "expression" + }, + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "jsx" + } + ] + }, + "m2cff9baabf56": { + "source": "Import", + "locations": [ + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/environments/environments-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "jsx" + } + ] + }, + "mf2de45302208": { + "source": "Toggle star", + "locations": [ + { + "file": "modules/dashboard/components/project-list.tsx", + "kind": "attribute" + } + ] + }, + "m2c1d2c6677db": { + "source": "No starred projects", + "locations": [ + { + "file": "modules/dashboard/components/sidebar.tsx", + "kind": "jsx" + } + ] + }, + "m637d919d4fb1": { + "source": "No folders", + "locations": [ + { + "file": "modules/dashboard/components/sidebar.tsx", + "kind": "jsx" + } + ] + }, + "md729947f3c97": { + "source": "Start a Project", + "locations": [ + { + "file": "modules/dashboard/components/template-gallery.tsx", + "kind": "jsx" + } + ] + }, + "m6f1a5cfbc6fd": { + "source": "Choose a template or start from scratch.", + "locations": [ + { + "file": "modules/dashboard/components/template-gallery.tsx", + "kind": "jsx" + } + ] + }, + "mdef70944c9bb": { + "source": "Creating...", + "locations": [ + { + "file": "modules/dashboard/components/template-gallery.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/components/github-connect-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/files-panel.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/panels/files-panel.tsx", + "kind": "expression" + } + ] + }, + "m6a0418f673c8": { + "source": "Use Template", + "locations": [ + { + "file": "modules/dashboard/components/template-gallery.tsx", + "kind": "jsx" + }, + { + "file": "modules/environments/environments-panel.tsx", + "kind": "jsx" + } + ] + }, + "mbefbc5e8e1c4": { + "source": "Code & version control", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "data" + } + ] + }, + "m107eab2a042f": { + "source": "Team messaging", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "data" + } + ] + }, + "m1a8e1a99c191": { + "source": "Email & communication", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "data" + } + ] + }, + "m879ebfba113e": { + "source": "File storage", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "data" + } + ] + }, + "m4110a45c745c": { + "source": "Notes & wikis", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "data" + } + ] + }, + "m4314193ddb26": { + "source": "Issue tracking", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "data" + } + ] + }, + "m89cc44521ce7": { + "source": "Design files", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "data" + } + ] + }, + "m329b3c4622ce": { + "source": "Project management", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "data" + } + ] + }, + "m195cbdbccce0": { + "source": "Set up your workspace", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "jsx" + } + ] + }, + "mb412190cfd38": { + "source": "Every workspace needs an environment — it defines what your AI assistant knows and can do.", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "jsx" + } + ] + }, + "ma35abcd6dac9": { + "source": "Icon", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "jsx" + }, + { + "file": "modules/environments/env-forms.tsx", + "kind": "jsx" + } + ] + }, + "ma0d05f8dd473": { + "source": "My Environment", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "attribute" + } + ] + }, + "m6b73191a0a4b": { + "source": "Color", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/visual-edit/property-panels/border-editor.tsx", + "kind": "jsx" + }, + { + "file": "modules/environments/env-forms.tsx", + "kind": "jsx" + } + ] + }, + "m59e693cdbc2c": { + "source": "Skip setup", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "jsx" + } + ] + }, + "mdb3472beb3c9": { + "source": "Create & Continue", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "jsx" + } + ] + }, + "m0ff84c22d1b0": { + "source": "Add knowledge", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "jsx" + } + ] + }, + "m3b3485c34632": { + "source": "Tell your AI what it should know about your projects. You can always add more later.", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "jsx" + } + ] + }, + "m0242da1500b9": { + "source": "These instructions guide your AI assistant across all projects in this workspace.", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "jsx" + } + ] + }, + "m28d03596d24e": { + "source": "Skip", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/plan/clarification-flow.tsx", + "kind": "jsx" + } + ] + }, + "m684b45158391": { + "source": "Save & Continue", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "jsx" + } + ] + }, + "m3dbaf78b6b8a": { + "source": "Connect tools", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "jsx" + } + ] + }, + "m781b23fb1692": { + "source": "Connect external tools to supercharge your workflow. You can set these up anytime from Settings.", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "jsx" + } + ] + }, + "m70afa66df1c8": { + "source": "Integrations can be connected from workspace settings at any time.", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "jsx" + } + ] + }, + "mf27331bdd8a0": { + "source": "You're all set!", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "jsx" + } + ] + }, + "m80d8ebc8fa6c": { + "source": "is ready to go. Start creating projects and let AI help you build.", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "jsx" + } + ] + }, + "mb6041d9436bb": { + "source": "Go to workspace", + "locations": [ + { + "file": "modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "jsx" + } + ] + }, + "md5cd65235324": { + "source": "Select workspace", + "locations": [ + { + "file": "modules/dashboard/components/workspace-switcher.tsx", + "kind": "expression" + } + ] + }, + "me549fa0ae7a3": { + "source": "Start from environment", + "locations": [ + { + "file": "modules/dashboard/components/workspace-switcher.tsx", + "kind": "jsx" + } + ] + }, + "mc0bed36b3120": { + "source": "Loading environments...", + "locations": [ + { + "file": "modules/dashboard/components/workspace-switcher.tsx", + "kind": "jsx" + } + ] + }, + "m832d1412f3d0": { + "source": "No environments available. Create one from the editor.", + "locations": [ + { + "file": "modules/dashboard/components/workspace-switcher.tsx", + "kind": "jsx" + } + ] + }, + "mb06eaa3d0745": { + "source": "None — start fresh", + "locations": [ + { + "file": "modules/dashboard/components/workspace-switcher.tsx", + "kind": "jsx" + } + ] + }, + "m39904ffb0bec": { + "source": "Remove this project from Discover? Existing remixes are unaffected.", + "locations": [ + { + "file": "modules/discover/share-dialog.tsx", + "kind": "feedback" + } + ] + }, + "m872f87b9007d": { + "source": "Lists your project in the community feed. Other users can browse it and remix it into their own workspace.", + "locations": [ + { + "file": "modules/discover/share-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m58977daa09e5": { + "source": "A clear, searchable title", + "locations": [ + { + "file": "modules/discover/share-dialog.tsx", + "kind": "attribute" + } + ] + }, + "mdc56cf81b49b": { + "source": "What does this project do? Who's it for?", + "locations": [ + { + "file": "modules/discover/share-dialog.tsx", + "kind": "attribute" + } + ] + }, + "m44fbb35ee723": { + "source": "Category (optional)", + "locations": [ + { + "file": "modules/discover/share-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mbb2347c7cdf1": { + "source": "Or type one...", + "locations": [ + { + "file": "modules/discover/share-dialog.tsx", + "kind": "attribute" + } + ] + }, + "m472690e4d34f": { + "source": "dashboard, marketing, ecommerce...", + "locations": [ + { + "file": "modules/discover/share-dialog.tsx", + "kind": "attribute" + } + ] + }, + "m64338bbdf415": { + "source": "Featured (admin)", + "locations": [ + { + "file": "modules/discover/share-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m589eb982f160": { + "source": "Surfaces this project at the top of Discover.", + "locations": [ + { + "file": "modules/discover/share-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m43b968323075": { + "source": "Unshare", + "locations": [ + { + "file": "modules/discover/share-dialog.tsx", + "kind": "jsx" + } + ] + }, + "md35ab3ec829a": { + "source": "Sharing...", + "locations": [ + { + "file": "modules/discover/share-dialog.tsx", + "kind": "expression" + } + ] + }, + "m81714949f5bf": { + "source": "Live build", + "locations": [ + { + "file": "modules/editor/build/BuildPanel.tsx", + "kind": "jsx" + } + ] + }, + "m50d3a1303616": { + "source": "No errors yet.", + "locations": [ + { + "file": "modules/editor/build/HighlightsRail.tsx", + "kind": "jsx" + } + ] + }, + "m2d711642b726": { + "source": "x", + "locations": [ + { + "file": "modules/editor/build/HighlightsRail.tsx", + "kind": "jsx" + } + ] + }, + "mdc676b428599": { + "source": "resolved", + "locations": [ + { + "file": "modules/editor/build/HighlightsRail.tsx", + "kind": "jsx" + } + ] + }, + "meb00967e8d99": { + "source": "Logs (", + "locations": [ + { + "file": "modules/editor/build/LogTail.tsx", + "kind": "jsx" + } + ] + }, + "m93bc5d02dc2a": { + "source": "collapse", + "locations": [ + { + "file": "modules/editor/build/LogTail.tsx", + "kind": "expression" + } + ] + }, + "md78de925a878": { + "source": "expand", + "locations": [ + { + "file": "modules/editor/build/LogTail.tsx", + "kind": "expression" + } + ] + }, + "mf164850854d0": { + "source": "No log output yet.", + "locations": [ + { + "file": "modules/editor/build/LogTail.tsx", + "kind": "jsx" + } + ] + }, + "m8537fdb6a825": { + "source": "Setting up files", + "locations": [ + { + "file": "modules/editor/build/store/build-store.ts", + "kind": "data" + } + ] + }, + "m5b1ba0587995": { + "source": "Installing packages", + "locations": [ + { + "file": "modules/editor/build/store/build-store.ts", + "kind": "data" + } + ] + }, + "m3d113ab13bc5": { + "source": "Starting dev server", + "locations": [ + { + "file": "modules/editor/build/store/build-store.ts", + "kind": "data" + } + ] + }, + "mdaada33465ce": { + "source": "Compiling code", + "locations": [ + { + "file": "modules/editor/build/store/build-store.ts", + "kind": "data" + } + ] + }, + "m55b0de18996c": { + "source": "Resolving routes", + "locations": [ + { + "file": "modules/editor/build/store/build-store.ts", + "kind": "data" + } + ] + }, + "m6112b244a90e": { + "source": "Bundling assets", + "locations": [ + { + "file": "modules/editor/build/store/build-store.ts", + "kind": "data" + } + ] + }, + "m7351d83eae60": { + "source": "Upload files from your device", + "locations": [ + { + "file": "modules/editor/chat/chat-input.tsx", + "kind": "attribute" + } + ] + }, + "m0dfcc29c9d86": { + "source": "Attach project files", + "locations": [ + { + "file": "modules/editor/chat/chat-input.tsx", + "kind": "attribute" + } + ] + }, + "mf6a74a2716d9": { + "source": "Stop generating", + "locations": [ + { + "file": "modules/editor/chat/chat-input.tsx", + "kind": "attribute" + } + ] + }, + "m93a26b1eaff9": { + "source": "Send message", + "locations": [ + { + "file": "modules/editor/chat/chat-input.tsx", + "kind": "attribute" + } + ] + }, + "mc9be68719e1d": { + "source": "Search project files...", + "locations": [ + { + "file": "modules/editor/chat/chat-input.tsx", + "kind": "attribute" + } + ] + }, + "m949d59b7ee8d": { + "source": "No files found", + "locations": [ + { + "file": "modules/editor/chat/chat-input.tsx", + "kind": "jsx" + } + ] + }, + "m49a0053f3b0d": { + "source": "Copy code", + "locations": [ + { + "file": "modules/editor/chat/chat-message-helpers.tsx", + "kind": "attribute" + } + ] + }, + "m455db8f88813": { + "source": "Preparing workspace…", + "locations": [ + { + "file": "modules/editor/chat/chat-message.tsx", + "kind": "jsx" + } + ] + }, + "ma02f1cea3c1d": { + "source": "Thinking…", + "locations": [ + { + "file": "modules/editor/chat/chat-message.tsx", + "kind": "expression" + } + ] + }, + "m50e721e49c01": { + "source": "w", + "locations": [ + { + "file": "modules/editor/chat/chat-message.tsx", + "kind": "jsx" + } + ] + }, + "m12e653369e8c": { + "source": "Changes undone", + "locations": [ + { + "file": "modules/editor/chat/chat-message.tsx", + "kind": "jsx" + } + ] + }, + "m8bae6a75b72c": { + "source": "Undoing...", + "locations": [ + { + "file": "modules/editor/chat/chat-message.tsx", + "kind": "expression" + } + ] + }, + "mba06242948bf": { + "source": "Undo changes", + "locations": [ + { + "file": "modules/editor/chat/chat-message.tsx", + "kind": "expression" + } + ] + }, + "ma1d26b85bf20": { + "source": "Cancel task", + "locations": [ + { + "file": "modules/editor/chat/chat-panel.tsx", + "kind": "attribute" + } + ] + }, + "m3d200cad4544": { + "source": "Toggle activity feed", + "locations": [ + { + "file": "modules/editor/chat/chat-panel.tsx", + "kind": "attribute" + } + ] + }, + "m913a378e70f6": { + "source": "Loading older messages…", + "locations": [ + { + "file": "modules/editor/chat/chat-panel.tsx", + "kind": "jsx" + } + ] + }, + "mf17671d83db0": { + "source": "Load older messages", + "locations": [ + { + "file": "modules/editor/chat/chat-panel.tsx", + "kind": "jsx" + } + ] + }, + "mb372cfaaf9ec": { + "source": "I just connected — continue", + "locations": [ + { + "file": "modules/editor/chat/chat-panel.tsx", + "kind": "jsx" + } + ] + }, + "m22a597e126e9": { + "source": "Build a SaaS landing page", + "locations": [ + { + "file": "modules/editor/chat/chat-panel.tsx", + "kind": "data" + } + ] + }, + "md55dabb30f0e": { + "source": "Create a kanban task board", + "locations": [ + { + "file": "modules/editor/chat/chat-panel.tsx", + "kind": "data" + } + ] + }, + "mf9a6a1d642f6": { + "source": "Make a recipe sharing app", + "locations": [ + { + "file": "modules/editor/chat/chat-panel.tsx", + "kind": "data" + } + ] + }, + "m257cb1465b19": { + "source": "Fix the login bug", + "locations": [ + { + "file": "modules/editor/chat/chat-panel.tsx", + "kind": "data" + } + ] + }, + "mfc4ec189139e": { + "source": "Add dark mode support", + "locations": [ + { + "file": "modules/editor/chat/chat-panel.tsx", + "kind": "data" + } + ] + }, + "m3820cbb15bba": { + "source": "Explain this codebase", + "locations": [ + { + "file": "modules/editor/chat/chat-panel.tsx", + "kind": "data" + } + ] + }, + "m6bdb9bf5e7a8": { + "source": "Start building with AI", + "locations": [ + { + "file": "modules/editor/chat/chat-panel.tsx", + "kind": "jsx" + } + ] + }, + "m8796f7c34878": { + "source": "Describe what you want to build and the AI will generate the code, files, and preview for you.", + "locations": [ + { + "file": "modules/editor/chat/chat-panel.tsx", + "kind": "jsx" + } + ] + }, + "mdcba690a149c": { + "source": "Ready — you can retry now", + "locations": [ + { + "file": "modules/editor/chat/error-recovery-card.tsx", + "kind": "jsx" + } + ] + }, + "m0fd09defcac8": { + "source": "Auto-retrying in", + "locations": [ + { + "file": "modules/editor/chat/error-recovery-card.tsx", + "kind": "jsx" + } + ] + }, + "m5148c3e20576": { + "source": "Retry now", + "locations": [ + { + "file": "modules/editor/chat/error-recovery-card.tsx", + "kind": "jsx" + } + ] + }, + "m2e0b4a7d6c73": { + "source": "Connection timed out", + "locations": [ + { + "file": "modules/editor/chat/error-recovery-card.tsx", + "kind": "data" + } + ] + }, + "m06946279b9c4": { + "source": "Rate limit reached", + "locations": [ + { + "file": "modules/editor/chat/error-recovery-card.tsx", + "kind": "data" + } + ] + }, + "m93821eb7ce8c": { + "source": "Authentication failed", + "locations": [ + { + "file": "modules/editor/chat/error-recovery-card.tsx", + "kind": "data" + } + ] + }, + "m5bbaec596a83": { + "source": "Build failed", + "locations": [ + { + "file": "modules/editor/chat/error-recovery-card.tsx", + "kind": "data" + } + ] + }, + "m2a33d984de88": { + "source": "Network error", + "locations": [ + { + "file": "modules/editor/chat/error-recovery-card.tsx", + "kind": "data" + } + ] + }, + "m0ce1c98951b1": { + "source": "AI model unavailable", + "locations": [ + { + "file": "modules/editor/chat/error-recovery-card.tsx", + "kind": "data" + } + ] + }, + "m28c1cf45c572": { + "source": "MCP UI resource has no HTML payload.", + "locations": [ + { + "file": "modules/editor/chat/mcp-ui-resource.tsx", + "kind": "jsx" + } + ] + }, + "mc370f97f193f": { + "source": "(AI will decide)", + "locations": [ + { + "file": "modules/editor/chat/plan/clarification-card.tsx", + "kind": "expression" + } + ] + }, + "m86e0163433b6": { + "source": "Or type your own...", + "locations": [ + { + "file": "modules/editor/chat/plan/clarification-card.tsx", + "kind": "attribute" + } + ] + }, + "m9ffeb4317918": { + "source": "Type your answer...", + "locations": [ + { + "file": "modules/editor/chat/plan/clarification-card.tsx", + "kind": "expression" + } + ] + }, + "m96fa9ca885cc": { + "source": "Skip — let AI decide", + "locations": [ + { + "file": "modules/editor/chat/plan/clarification-card.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/plan/inline-clarification.tsx", + "kind": "jsx" + } + ] + }, + "m6908408b5441": { + "source": "Answers submitted", + "locations": [ + { + "file": "modules/editor/chat/plan/clarification-flow.tsx", + "kind": "jsx" + } + ] + }, + "mea08e5983f81": { + "source": "Before we start…", + "locations": [ + { + "file": "modules/editor/chat/plan/clarification-flow.tsx", + "kind": "jsx" + } + ] + }, + "m5fc4280582ee": { + "source": "Skip all", + "locations": [ + { + "file": "modules/editor/chat/plan/clarification-flow.tsx", + "kind": "jsx" + } + ] + }, + "m72d18ad29fe5": { + "source": "Skip this question", + "locations": [ + { + "file": "modules/editor/chat/plan/clarification-flow.tsx", + "kind": "jsx" + } + ] + }, + "m8f66990f74c5": { + "source": "AI decides", + "locations": [ + { + "file": "modules/editor/chat/plan/inline-clarification.tsx", + "kind": "expression" + } + ] + }, + "mc13839cedce5": { + "source": "Or type a custom answer…", + "locations": [ + { + "file": "modules/editor/chat/plan/inline-clarification.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/chat/user-input-card.tsx", + "kind": "expression" + } + ] + }, + "m8666026a31fa": { + "source": "Type your answer…", + "locations": [ + { + "file": "modules/editor/chat/plan/inline-clarification.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/chat/user-input-card.tsx", + "kind": "expression" + } + ] + }, + "m3fee95da5ab6": { + "source": "Simple", + "locations": [ + { + "file": "modules/editor/chat/plan/plan-card.tsx", + "kind": "data" + } + ] + }, + "m5c42afc7a230": { + "source": "Moderate", + "locations": [ + { + "file": "modules/editor/chat/plan/plan-card.tsx", + "kind": "data" + } + ] + }, + "mcd75063b613d": { + "source": "Complex", + "locations": [ + { + "file": "modules/editor/chat/plan/plan-card.tsx", + "kind": "data" + } + ] + }, + "me45a4474b464": { + "source": "Add a step", + "locations": [ + { + "file": "modules/editor/chat/plan/plan-card.tsx", + "kind": "jsx" + } + ] + }, + "m102849138c54": { + "source": "Start Building", + "locations": [ + { + "file": "modules/editor/chat/plan/plan-card.tsx", + "kind": "jsx" + } + ] + }, + "m1e7f34ee8f77": { + "source": "Refine", + "locations": [ + { + "file": "modules/editor/chat/plan/plan-card.tsx", + "kind": "jsx" + } + ] + }, + "m87c5912f2cef": { + "source": "Building", + "locations": [ + { + "file": "modules/editor/chat/plan/plan-progress.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/chat/plan/plan-progress.tsx", + "kind": "jsx" + } + ] + }, + "m858e4ba7a29f": { + "source": "Pause", + "locations": [ + { + "file": "modules/editor/chat/plan/plan-progress.tsx", + "kind": "jsx" + } + ] + }, + "m9af278eb4ac2": { + "source": "Skip this step", + "locations": [ + { + "file": "modules/editor/chat/plan/plan-progress.tsx", + "kind": "attribute" + } + ] + }, + "m41ffd8b76afc": { + "source": "details", + "locations": [ + { + "file": "modules/editor/chat/plan/plan-step.tsx", + "kind": "jsx" + } + ] + }, + "me1a1abcfc47a": { + "source": "Files:", + "locations": [ + { + "file": "modules/editor/chat/plan/plan-step.tsx", + "kind": "jsx" + } + ] + }, + "md4c76f463480": { + "source": "Remove step", + "locations": [ + { + "file": "modules/editor/chat/plan/plan-step.tsx", + "kind": "attribute" + } + ] + }, + "m819c15f77c30": { + "source": "Completion:", + "locations": [ + { + "file": "modules/editor/chat/token-counter.tsx", + "kind": "jsx" + } + ] + }, + "mb23a6a8439c0": { + "source": "unknown", + "locations": [ + { + "file": "modules/editor/chat/token-counter.tsx", + "kind": "expression" + } + ] + }, + "mebe7c49b473c": { + "source": "Tool calls:", + "locations": [ + { + "file": "modules/editor/chat/token-counter.tsx", + "kind": "jsx" + } + ] + }, + "ma6a37fc0b4a0": { + "source": "Provider: local (no cost)", + "locations": [ + { + "file": "modules/editor/chat/token-counter.tsx", + "kind": "jsx" + } + ] + }, + "m5ccdcad4f2b9": { + "source": "Token counts are estimated (provider did not report usage)", + "locations": [ + { + "file": "modules/editor/chat/token-counter.tsx", + "kind": "jsx" + } + ] + }, + "m2f3f0204c9f3": { + "source": "Network error — please try again.", + "locations": [ + { + "file": "modules/editor/chat/user-input-card.tsx", + "kind": "feedback" + } + ] + }, + "m93abcb2b4187": { + "source": "Read-only mode.", + "locations": [ + { + "file": "modules/editor/code-editor/code-editor-panel.tsx", + "kind": "jsx" + } + ] + }, + "m60dbd666da3f": { + "source": "Upgrade to edit", + "locations": [ + { + "file": "modules/editor/code-editor/code-editor-panel.tsx", + "kind": "jsx" + } + ] + }, + "m1e6652706391": { + "source": "Select a file to view its code", + "locations": [ + { + "file": "modules/editor/code-editor/code-editor-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/code-panel.tsx", + "kind": "jsx" + } + ] + }, + "m8adc599d8546": { + "source": "Use the file explorer or chat with AI to generate files", + "locations": [ + { + "file": "modules/editor/code-editor/code-editor-panel.tsx", + "kind": "jsx" + } + ] + }, + "m9685428d79d9": { + "source": "Merge Conflicts", + "locations": [ + { + "file": "modules/editor/components/conflict-resolution-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m625d8793292d": { + "source": "There are conflicts between your local changes and", + "locations": [ + { + "file": "modules/editor/components/conflict-resolution-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mcd0d99892495": { + "source": "the remote repository", + "locations": [ + { + "file": "modules/editor/components/conflict-resolution-dialog.tsx", + "kind": "expression" + } + ] + }, + "ma441beefe3cf": { + "source": ". Choose how to resolve them.", + "locations": [ + { + "file": "modules/editor/components/conflict-resolution-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mb0c6c3afc17f": { + "source": "Conflicted files (", + "locations": [ + { + "file": "modules/editor/components/conflict-resolution-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mfbba5c3b9950": { + "source": "Keep my changes", + "locations": [ + { + "file": "modules/editor/components/conflict-resolution-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mc585647746dd": { + "source": "Discard remote changes and keep your local version", + "locations": [ + { + "file": "modules/editor/components/conflict-resolution-dialog.tsx", + "kind": "jsx" + } + ] + }, + "ma01851633d89": { + "source": "Use remote changes", + "locations": [ + { + "file": "modules/editor/components/conflict-resolution-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m99d422032993": { + "source": "Discard your local changes and use the GitHub version", + "locations": [ + { + "file": "modules/editor/components/conflict-resolution-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mcfca91950882": { + "source": "Cancel merge", + "locations": [ + { + "file": "modules/editor/components/conflict-resolution-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m5b1014ae15ea": { + "source": "Resolving conflicts...", + "locations": [ + { + "file": "modules/editor/components/conflict-resolution-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m37a5d6485e10": { + "source": "Expand sidebar", + "locations": [ + { + "file": "modules/editor/components/editor-layout.tsx", + "kind": "attribute" + } + ] + }, + "m23db6247bb3d": { + "source": "Connect to GitHub", + "locations": [ + { + "file": "modules/editor/components/github-connect-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m9b46af6166cc": { + "source": "Push this project to a GitHub repository.", + "locations": [ + { + "file": "modules/editor/components/github-connect-dialog.tsx", + "kind": "jsx" + } + ] + }, + "maf7620d9f184": { + "source": "Authorize Doable to access your repositories so you can push and pull code.", + "locations": [ + { + "file": "modules/editor/components/github-connect-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m5fa0c70119e4": { + "source": "Customize name & settings", + "locations": [ + { + "file": "modules/editor/components/github-connect-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m8726643dc521": { + "source": "Repository Name", + "locations": [ + { + "file": "modules/editor/components/github-connect-dialog.tsx", + "kind": "jsx" + } + ] + }, + "md18fa4795d7e": { + "source": "A brief description", + "locations": [ + { + "file": "modules/editor/components/github-connect-dialog.tsx", + "kind": "attribute" + } + ] + }, + "mb9b01a108d34": { + "source": "Make repository public", + "locations": [ + { + "file": "modules/editor/components/github-connect-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m363fadad28c7": { + "source": "Create & Connect", + "locations": [ + { + "file": "modules/editor/components/github-connect-dialog.tsx", + "kind": "expression" + } + ] + }, + "mb7a3cd401b23": { + "source": "Importing...", + "locations": [ + { + "file": "modules/editor/components/import-github-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/marketplace/import-bundle-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mb60ed2e431d8": { + "source": "Import Repository", + "locations": [ + { + "file": "modules/editor/components/import-github-dialog.tsx", + "kind": "expression" + } + ] + }, + "m68928d6dcc94": { + "source": "Restore Version", + "locations": [ + { + "file": "modules/editor/components/restore-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m1b5b909b9f38": { + "source": "Roll back to a previous state", + "locations": [ + { + "file": "modules/editor/components/restore-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mb1d6b91b67c2": { + "source": "at", + "locations": [ + { + "file": "modules/editor/components/restore-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m9d91673c9ae4": { + "source": "Non-destructive restore", + "locations": [ + { + "file": "modules/editor/components/restore-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m221720161bb1": { + "source": "A new version will be created from v", + "locations": [ + { + "file": "modules/editor/components/restore-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m1989a6d77ea8": { + "source": ". Your current work and all previous versions will remain accessible.", + "locations": [ + { + "file": "modules/editor/components/restore-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mfa31c224c001": { + "source": "Restoring...", + "locations": [ + { + "file": "modules/editor/components/restore-dialog.tsx", + "kind": "jsx" + } + ] + }, + "md12014c8ba79": { + "source": "Restore to v", + "locations": [ + { + "file": "modules/editor/components/restore-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m8ea29726a819": { + "source": "Metrics unavailable:", + "locations": [ + { + "file": "modules/editor/components/runtime-panel.tsx", + "kind": "jsx" + } + ] + }, + "m1829677248c3": { + "source": "Loading runtime metrics…", + "locations": [ + { + "file": "modules/editor/components/runtime-panel.tsx", + "kind": "jsx" + } + ] + }, + "m707165e9984b": { + "source": "poll", + "locations": [ + { + "file": "modules/editor/components/runtime-panel.tsx", + "kind": "jsx" + } + ] + }, + "mb80012851cf0": { + "source": "modified", + "locations": [ + { + "file": "modules/editor/components/version-diff-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m1185f37d33b0": { + "source": "deleted", + "locations": [ + { + "file": "modules/editor/components/version-diff-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m1db0d01fa6e5": { + "source": "Previous file", + "locations": [ + { + "file": "modules/editor/components/version-diff-dialog.tsx", + "kind": "attribute" + } + ] + }, + "m96a7485b66f1": { + "source": "Next file", + "locations": [ + { + "file": "modules/editor/components/version-diff-dialog.tsx", + "kind": "attribute" + } + ] + }, + "mfe86c67a9260": { + "source": "Unified view", + "locations": [ + { + "file": "modules/editor/components/version-diff-dialog.tsx", + "kind": "attribute" + } + ] + }, + "mad6a950b4620": { + "source": "Unified", + "locations": [ + { + "file": "modules/editor/components/version-diff-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m493481bac50f": { + "source": "Side by side view", + "locations": [ + { + "file": "modules/editor/components/version-diff-dialog.tsx", + "kind": "attribute" + } + ] + }, + "m32afaa784333": { + "source": "Split", + "locations": [ + { + "file": "modules/editor/components/version-diff-dialog.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/toolbar/editor-toolbar.tsx", + "kind": "data" + } + ] + }, + "me6c6415f27e4": { + "source": "Loading diff...", + "locations": [ + { + "file": "modules/editor/components/version-diff-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mdb183e7f0849": { + "source": "No diff data available", + "locations": [ + { + "file": "modules/editor/components/version-diff-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mc0c92fe4b0ba": { + "source": "No changes between these versions", + "locations": [ + { + "file": "modules/editor/components/version-diff-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m98f257430806": { + "source": "Changed Files (", + "locations": [ + { + "file": "modules/editor/components/version-diff-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mbcd433417df1": { + "source": "Select a file to view changes", + "locations": [ + { + "file": "modules/editor/components/version-diff-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m6b02e0d363a4": { + "source": "Added", + "locations": [ + { + "file": "modules/editor/components/version-diff-engine.ts", + "kind": "data" + } + ] + }, + "mb48ff39c2e0f": { + "source": "Deleted", + "locations": [ + { + "file": "modules/editor/components/version-diff-engine.ts", + "kind": "data" + } + ] + }, + "me8ce5dcaf408": { + "source": "Modified", + "locations": [ + { + "file": "modules/editor/components/version-diff-engine.ts", + "kind": "data" + } + ] + }, + "m77752c14a10d": { + "source": "Before (", + "locations": [ + { + "file": "modules/editor/components/version-diff-views.tsx", + "kind": "jsx" + } + ] + }, + "md3986704d922": { + "source": "After (", + "locations": [ + { + "file": "modules/editor/components/version-diff-views.tsx", + "kind": "jsx" + } + ] + }, + "m051ea272009f": { + "source": "(unsaved)", + "locations": [ + { + "file": "modules/editor/context-files/context-editor.tsx", + "kind": "jsx" + } + ] + }, + "m6a44a6c83d3e": { + "source": "Delete / Reset", + "locations": [ + { + "file": "modules/editor/context-files/context-editor.tsx", + "kind": "attribute" + } + ] + }, + "m6bb4d95c616d": { + "source": "Start writing...", + "locations": [ + { + "file": "modules/editor/context-files/context-editor.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/components/project-settings-context.tsx", + "kind": "attribute" + } + ] + }, + "m70ea1983c983": { + "source": "Core", + "locations": [ + { + "file": "modules/editor/context-files/context-panel-types.ts", + "kind": "data" + } + ] + }, + "m6959b4159575": { + "source": "Session", + "locations": [ + { + "file": "modules/editor/context-files/context-panel-types.ts", + "kind": "data" + } + ] + }, + "mcd74053c5481": { + "source": "Architecture", + "locations": [ + { + "file": "modules/editor/context-files/context-panel-types.ts", + "kind": "data" + } + ] + }, + "m279b44d2ab4b": { + "source": "Agents", + "locations": [ + { + "file": "modules/editor/context-files/context-panel-types.ts", + "kind": "data" + } + ] + }, + "m494ca78f7374": { + "source": "Custom", + "locations": [ + { + "file": "modules/editor/context-files/context-panel-types.ts", + "kind": "data" + } + ] + }, + "m44dedd0f97fe": { + "source": "New file", + "locations": [ + { + "file": "modules/editor/context-files/context-panel.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/sidebar/file-tree.tsx", + "kind": "attribute" + } + ] + }, + "m63a3712feb5e": { + "source": "% of budget", + "locations": [ + { + "file": "modules/editor/context-files/context-panel.tsx", + "kind": "jsx" + } + ] + }, + "m51abd534e168": { + "source": "Empty — click to edit", + "locations": [ + { + "file": "modules/editor/context-files/context-panel.tsx", + "kind": "expression" + } + ] + }, + "m14aae1602506": { + "source": "running…", + "locations": [ + { + "file": "modules/editor/panels/activity-feed-panel.tsx", + "kind": "expression" + } + ] + }, + "md67e2e944994": { + "source": "changed", + "locations": [ + { + "file": "modules/editor/panels/activity-feed-panel.tsx", + "kind": "jsx" + } + ] + }, + "m5d347fd948b6": { + "source": "command", + "locations": [ + { + "file": "modules/editor/panels/activity-feed-panel.tsx", + "kind": "jsx" + } + ] + }, + "m9bf5a24e4aa7": { + "source": "operation", + "locations": [ + { + "file": "modules/editor/panels/activity-feed-panel.tsx", + "kind": "jsx" + } + ] + }, + "mb72f1b605b36": { + "source": "Live Activity", + "locations": [ + { + "file": "modules/editor/panels/activity-feed-panel.tsx", + "kind": "jsx" + } + ] + }, + "m0dca88f7eda1": { + "source": "Close activity feed", + "locations": [ + { + "file": "modules/editor/panels/activity-feed-panel.tsx", + "kind": "attribute" + } + ] + }, + "m6a5e118255c9": { + "source": "Waiting for AI to start working…", + "locations": [ + { + "file": "modules/editor/panels/activity-feed-panel.tsx", + "kind": "expression" + } + ] + }, + "m4329f638ead4": { + "source": "Activity will appear here when the AI is working.", + "locations": [ + { + "file": "modules/editor/panels/activity-feed-panel.tsx", + "kind": "expression" + } + ] + }, + "me22ce64b63f8": { + "source": "Traffic Overview", + "locations": [ + { + "file": "modules/editor/panels/analytics-charts.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/analytics-charts.tsx", + "kind": "jsx" + } + ] + }, + "m20b04a05df9d": { + "source": "No traffic data available yet.", + "locations": [ + { + "file": "modules/editor/panels/analytics-charts.tsx", + "kind": "jsx" + } + ] + }, + "m68f7d7fbb52d": { + "source": "Visitors", + "locations": [ + { + "file": "modules/editor/panels/analytics-charts.tsx", + "kind": "jsx" + } + ] + }, + "m337a271983f1": { + "source": "Page Views", + "locations": [ + { + "file": "modules/editor/panels/analytics-charts.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/analytics-panel.tsx", + "kind": "attribute" + } + ] + }, + "m74883614c4c7": { + "source": "views", + "locations": [ + { + "file": "modules/editor/panels/analytics-charts.tsx", + "kind": "expression" + } + ] + }, + "mad0526d8e5fd": { + "source": "Built-in analytics", + "locations": [ + { + "file": "modules/editor/panels/analytics-panel.tsx", + "kind": "jsx" + } + ] + }, + "m247610f4dedd": { + "source": "live", + "locations": [ + { + "file": "modules/editor/panels/analytics-panel.tsx", + "kind": "jsx" + } + ] + }, + "mad4899df2d12": { + "source": "Close analytics", + "locations": [ + { + "file": "modules/editor/panels/analytics-panel.tsx", + "kind": "attribute" + } + ] + }, + "m3445e2d5305e": { + "source": "Enable analytics for this project", + "locations": [ + { + "file": "modules/editor/panels/analytics-panel.tsx", + "kind": "jsx" + } + ] + }, + "m2da367cb7562": { + "source": "Track visitors, page views, and engagement — privacy-friendly, no cookie banner needed.", + "locations": [ + { + "file": "modules/editor/panels/analytics-panel.tsx", + "kind": "jsx" + } + ] + }, + "m984af0dbfa87": { + "source": "Analytics is disabled", + "locations": [ + { + "file": "modules/editor/panels/analytics-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc9289da74d6c": { + "source": "Enable analytics to track visitor counts, page views, session duration, traffic sources, device breakdown, and more. All data is collected in a privacy-friendly way — no cookies or consent banners required.", + "locations": [ + { + "file": "modules/editor/panels/analytics-panel.tsx", + "kind": "jsx" + } + ] + }, + "m0e6e1684b7c3": { + "source": "Failed to load analytics", + "locations": [ + { + "file": "modules/editor/panels/analytics-panel.tsx", + "kind": "jsx" + } + ] + }, + "me2e18a767a2b": { + "source": "No data yet", + "locations": [ + { + "file": "modules/editor/panels/analytics-panel.tsx", + "kind": "jsx" + } + ] + }, + "m8ee1be0e8129": { + "source": "Analytics will appear once your published site receives visitors. Make sure your project is published and accessible.", + "locations": [ + { + "file": "modules/editor/panels/analytics-panel.tsx", + "kind": "jsx" + } + ] + }, + "m7549533568ca": { + "source": "Total Visitors", + "locations": [ + { + "file": "modules/editor/panels/analytics-panel.tsx", + "kind": "attribute" + } + ] + }, + "mf15b55389725": { + "source": "Avg. Session", + "locations": [ + { + "file": "modules/editor/panels/analytics-panel.tsx", + "kind": "attribute" + } + ] + }, + "m89cf5817dbd4": { + "source": "Bounce Rate", + "locations": [ + { + "file": "modules/editor/panels/analytics-panel.tsx", + "kind": "attribute" + } + ] + }, + "mbff828f89976": { + "source": "Browser Distribution", + "locations": [ + { + "file": "modules/editor/panels/analytics-panel.tsx", + "kind": "attribute" + } + ] + }, + "mffacb99d0209": { + "source": "Operating System", + "locations": [ + { + "file": "modules/editor/panels/analytics-panel.tsx", + "kind": "attribute" + } + ] + }, + "ma02077a984ce": { + "source": "Traffic Sources", + "locations": [ + { + "file": "modules/editor/panels/analytics-sections.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/analytics-sections.tsx", + "kind": "jsx" + } + ] + }, + "meb742ebd27d8": { + "source": "No referrer data available yet.", + "locations": [ + { + "file": "modules/editor/panels/analytics-sections.tsx", + "kind": "jsx" + } + ] + }, + "m7721e29d6e90": { + "source": "Device Breakdown", + "locations": [ + { + "file": "modules/editor/panels/analytics-sections.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/analytics-sections.tsx", + "kind": "jsx" + } + ] + }, + "m5bb8965c8903": { + "source": "No device data available yet.", + "locations": [ + { + "file": "modules/editor/panels/analytics-sections.tsx", + "kind": "jsx" + } + ] + }, + "mc8235b5120b4": { + "source": "No data available yet.", + "locations": [ + { + "file": "modules/editor/panels/analytics-sections.tsx", + "kind": "jsx" + } + ] + }, + "m278b8c933942": { + "source": "Real-time", + "locations": [ + { + "file": "modules/editor/panels/analytics-sections.tsx", + "kind": "jsx" + } + ] + }, + "m2b3ff58fb8af": { + "source": "active visitor", + "locations": [ + { + "file": "modules/editor/panels/analytics-sections.tsx", + "kind": "jsx" + } + ] + }, + "m118443b1d9ca": { + "source": "right now", + "locations": [ + { + "file": "modules/editor/panels/analytics-sections.tsx", + "kind": "jsx" + } + ] + }, + "m75fe1f295a02": { + "source": "Current pages:", + "locations": [ + { + "file": "modules/editor/panels/analytics-sections.tsx", + "kind": "jsx" + } + ] + }, + "mc784754ddde6": { + "source": "Top Pages", + "locations": [ + { + "file": "modules/editor/panels/analytics-top-pages.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/panels/analytics-top-pages.tsx", + "kind": "jsx" + } + ] + }, + "ma861c3307af4": { + "source": "No page data available yet.", + "locations": [ + { + "file": "modules/editor/panels/analytics-top-pages.tsx", + "kind": "jsx" + } + ] + }, + "mdfffe52cc101": { + "source": "Unique Visitors", + "locations": [ + { + "file": "modules/editor/panels/analytics-top-pages.tsx", + "kind": "data" + } + ] + }, + "m5ee9c656643f": { + "source": "Avg. Time", + "locations": [ + { + "file": "modules/editor/panels/analytics-top-pages.tsx", + "kind": "data" + } + ] + }, + "mb40edf4cb8e7": { + "source": "Connect to Supabase", + "locations": [ + { + "file": "modules/editor/panels/cloud-connection-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m4c26a7b1fa53": { + "source": "Enter your Supabase project credentials to enable backend services.", + "locations": [ + { + "file": "modules/editor/panels/cloud-connection-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m69adfd51438c": { + "source": "Supabase Project URL", + "locations": [ + { + "file": "modules/editor/panels/cloud-connection-dialog.tsx", + "kind": "jsx" + } + ] + }, + "maa31989db88a": { + "source": "Anon / Public Key", + "locations": [ + { + "file": "modules/editor/panels/cloud-connection-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m532b9fc88b66": { + "source": "eyJhbGciOiJIUzI1NiIs...", + "locations": [ + { + "file": "modules/editor/panels/cloud-connection-dialog.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/panels/cloud-connection-dialog.tsx", + "kind": "attribute" + } + ] + }, + "m8db5971dc587": { + "source": "Service Role Key", + "locations": [ + { + "file": "modules/editor/panels/cloud-connection-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m7e32a729b122": { + "source": "Secret", + "locations": [ + { + "file": "modules/editor/panels/cloud-connection-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m04a6bbf1d545": { + "source": "Connection successful!", + "locations": [ + { + "file": "modules/editor/panels/cloud-connection-dialog.tsx", + "kind": "expression" + } + ] + }, + "mcdfc82dc9257": { + "source": "Connection failed. Check your credentials.", + "locations": [ + { + "file": "modules/editor/panels/cloud-connection-dialog.tsx", + "kind": "expression" + } + ] + }, + "ma2f29836cda5": { + "source": "Save & Connect", + "locations": [ + { + "file": "modules/editor/panels/cloud-connection-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m389ab0c86a00": { + "source": "Connected to Supabase", + "locations": [ + { + "file": "modules/editor/panels/cloud-panel.tsx", + "kind": "expression" + } + ] + }, + "m0303e1824670": { + "source": "Not connected", + "locations": [ + { + "file": "modules/editor/panels/cloud-panel.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "data" + } + ] + }, + "macfc5be785a9": { + "source": "Disconnect", + "locations": [ + { + "file": "modules/editor/panels/cloud-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integration-detail-sheet.tsx", + "kind": "expression" + }, + { + "file": "modules/integrations/integrations-panel-cards.tsx", + "kind": "expression" + } + ] + }, + "m32520e2069af": { + "source": "Connect Supabase", + "locations": [ + { + "file": "modules/editor/panels/cloud-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/supabase-provision-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mfa7fe67124e9": { + "source": "Database", + "locations": [ + { + "file": "modules/editor/panels/cloud-panel.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/components/project-settings-shared.tsx", + "kind": "data" + } + ] + }, + "m66880d2d8216": { + "source": "Authentication", + "locations": [ + { + "file": "modules/editor/panels/cloud-panel.tsx", + "kind": "attribute" + }, + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "ma69c4dece144": { + "source": "Storage", + "locations": [ + { + "file": "modules/editor/panels/cloud-panel.tsx", + "kind": "attribute" + } + ] + }, + "m127c16f74a24": { + "source": "Edge Functions", + "locations": [ + { + "file": "modules/editor/panels/cloud-panel.tsx", + "kind": "attribute" + } + ] + }, + "mcd0c018cfa88": { + "source": "Powered by Supabase", + "locations": [ + { + "file": "modules/editor/panels/cloud-panel.tsx", + "kind": "jsx" + } + ] + }, + "m97757652c0e5": { + "source": "Connect to Supabase to view your database tables.", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + } + ] + }, + "me3fe2a3fe52c": { + "source": "Tables", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/database/panes/overview-pane.tsx", + "kind": "attribute" + } + ] + }, + "md98a034f5cb8": { + "source": "tables", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + } + ] + }, + "mbc51e9e65d79": { + "source": "rows", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/database/panes/danger-pane.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/database/panes/queries-pane.tsx", + "kind": "expression" + } + ] + }, + "m3fdc9a587693": { + "source": "Column", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/visual-edit/property-panels/layout-editor.tsx", + "kind": "data" + } + ] + }, + "mfa1d2db62d4d": { + "source": "Null", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + } + ] + }, + "m92022c2f45b6": { + "source": "Primary Key", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "attribute" + } + ] + }, + "mfcab7fcc2b4c": { + "source": "PK", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + } + ] + }, + "mf91711645937": { + "source": "YES", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "expression" + } + ] + }, + "m23794d91c53a": { + "source": "NO", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "expression" + } + ] + }, + "m9a4f1370f2b7": { + "source": "SQL Query", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + } + ] + }, + "m1a0d7c23a18e": { + "source": "SELECT * FROM users LIMIT 10;", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "attribute" + } + ] + }, + "m650da1678ad7": { + "source": "Connect to Supabase to manage authentication.", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + } + ] + }, + "m0ca3aa44a8c1": { + "source": "Total Users", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + } + ] + }, + "m333e0a1e2781": { + "source": "G", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + } + ] + }, + "ma7770c6daaa4": { + "source": "GH", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + } + ] + }, + "m5342e09f2729": { + "source": "Enable", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "expression" + }, + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "expression" + } + ] + }, + "mc175fbea7096": { + "source": "Recent Signups", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + } + ] + }, + "m1eb20b09825a": { + "source": "Connect to Supabase to manage file storage.", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + } + ] + }, + "m2f89b69f7a4c": { + "source": "Storage Usage", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + } + ] + }, + "md9262e7fb868": { + "source": "PUBLIC", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + } + ] + }, + "m3abde3818904": { + "source": "files -", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + } + ] + }, + "m7bb6fd2091ef": { + "source": "Drop files here or click to upload", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + } + ] + }, + "mf5fea30a34e1": { + "source": "Connect to Supabase to manage edge functions.", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + } + ] + }, + "mac7c949f1211": { + "source": "Inactive", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "expression" + } + ] + }, + "me4640667fae5": { + "source": "- Last invoked", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + } + ] + }, + "mb608eeb53fcc": { + "source": "Create New Function", + "locations": [ + { + "file": "modules/editor/panels/cloud-sections.tsx", + "kind": "jsx" + } + ] + }, + "m8ac767353080": { + "source": "Read only", + "locations": [ + { + "file": "modules/editor/panels/code-panel.tsx", + "kind": "jsx" + } + ] + }, + "m14d6d2da837b": { + "source": "Copy file content", + "locations": [ + { + "file": "modules/editor/panels/code-panel.tsx", + "kind": "attribute" + } + ] + }, + "m9de4149fb971": { + "source": "Download file", + "locations": [ + { + "file": "modules/editor/panels/code-panel.tsx", + "kind": "attribute" + } + ] + }, + "m3dc96e8106e4": { + "source": "Close code panel", + "locations": [ + { + "file": "modules/editor/panels/code-panel.tsx", + "kind": "attribute" + } + ] + }, + "mc3386867cbb1": { + "source": "Search code", + "locations": [ + { + "file": "modules/editor/panels/code-panel.tsx", + "kind": "attribute" + } + ] + }, + "m068be1bc6ebc": { + "source": "Browse the file tree on the left to open files", + "locations": [ + { + "file": "modules/editor/panels/code-panel.tsx", + "kind": "jsx" + } + ] + }, + "ma76f7d471f87": { + "source": "Select parent", + "locations": [ + { + "file": "modules/editor/panels/design-panel.tsx", + "kind": "jsx" + } + ] + }, + "m77c87ed7c0af": { + "source": "Select an element to edit it", + "locations": [ + { + "file": "modules/editor/panels/design-panel.tsx", + "kind": "jsx" + } + ] + }, + "m8e685d5409b3": { + "source": "Hold", + "locations": [ + { + "file": "modules/editor/panels/design-panel.tsx", + "kind": "jsx" + } + ] + }, + "me2ee2909fe27": { + "source": "Ctrl", + "locations": [ + { + "file": "modules/editor/panels/design-panel.tsx", + "kind": "jsx" + } + ] + }, + "m633e1dd1d4d6": { + "source": "to select multiple elements", + "locations": [ + { + "file": "modules/editor/panels/design-panel.tsx", + "kind": "jsx" + } + ] + }, + "m1ce187c61e47": { + "source": "Start selecting", + "locations": [ + { + "file": "modules/editor/panels/design-panel.tsx", + "kind": "jsx" + } + ] + }, + "m608252e9ddb1": { + "source": "Click an element in the preview...", + "locations": [ + { + "file": "modules/editor/panels/design-panel.tsx", + "kind": "jsx" + } + ] + }, + "ma710c2b90913": { + "source": "Unsaved changes", + "locations": [ + { + "file": "modules/editor/panels/design-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "meb1a70e39274": { + "source": "Discard", + "locations": [ + { + "file": "modules/editor/panels/design-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "m1f7d6ab50546": { + "source": "Send changes to AI for smarter code updates", + "locations": [ + { + "file": "modules/editor/panels/design-panel.tsx", + "kind": "attribute" + } + ] + }, + "md8387fae128c": { + "source": "AI Save", + "locations": [ + { + "file": "modules/editor/panels/design-panel.tsx", + "kind": "jsx" + } + ] + }, + "md23b5dc62153": { + "source": "New File", + "locations": [ + { + "file": "modules/editor/panels/files-panel.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/panels/files-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/sidebar/file-tree-nodes.tsx", + "kind": "data" + } + ] + }, + "mc75ba8074400": { + "source": "New Folder", + "locations": [ + { + "file": "modules/editor/panels/files-panel.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/panels/files-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/sidebar/file-tree-nodes.tsx", + "kind": "data" + } + ] + }, + "m04470fc07c26": { + "source": "Search files...", + "locations": [ + { + "file": "modules/editor/panels/files-panel.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/sidebar/file-tree.tsx", + "kind": "attribute" + } + ] + }, + "m7226287c91cd": { + "source": "No files match your search", + "locations": [ + { + "file": "modules/editor/panels/files-panel.tsx", + "kind": "expression" + } + ] + }, + "ma3429cba554f": { + "source": "No files yet. Start chatting to generate code.", + "locations": [ + { + "file": "modules/editor/panels/files-panel.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/sidebar/file-tree.tsx", + "kind": "jsx" + } + ] + }, + "m0e0269180969": { + "source": "Copy Path", + "locations": [ + { + "file": "modules/editor/panels/files-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/sidebar/file-tree-nodes.tsx", + "kind": "data" + } + ] + }, + "m3cdcc3a85a71": { + "source": "Create New File", + "locations": [ + { + "file": "modules/editor/panels/files-panel.tsx", + "kind": "jsx" + } + ] + }, + "m983dbe585e18": { + "source": "File path (e.g. src/components/Button.tsx)", + "locations": [ + { + "file": "modules/editor/panels/files-panel.tsx", + "kind": "jsx" + } + ] + }, + "mb6b7279516a1": { + "source": "Create New Folder", + "locations": [ + { + "file": "modules/editor/panels/files-panel.tsx", + "kind": "jsx" + } + ] + }, + "m7a2ed3474120": { + "source": "Folder path (e.g. src/components)", + "locations": [ + { + "file": "modules/editor/panels/files-panel.tsx", + "kind": "jsx" + } + ] + }, + "me1e5fe2043bd": { + "source": "Delete File", + "locations": [ + { + "file": "modules/editor/panels/files-panel.tsx", + "kind": "jsx" + } + ] + }, + "m7829a4b6e0b3": { + "source": "Are you sure you want to delete:", + "locations": [ + { + "file": "modules/editor/panels/files-panel.tsx", + "kind": "jsx" + } + ] + }, + "m2eba52c01705": { + "source": "Version History", + "locations": [ + { + "file": "modules/editor/panels/history-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/sidebar/version-history.tsx", + "kind": "jsx" + } + ] + }, + "med161bc0a0be": { + "source": "Security Scanner", + "locations": [ + { + "file": "modules/editor/panels/security-panel-components.tsx", + "kind": "jsx" + } + ] + }, + "m8777cc91b15b": { + "source": "Scan your project for dependency vulnerabilities, hardcoded secrets, code quality issues, and HTTPS configuration.", + "locations": [ + { + "file": "modules/editor/panels/security-panel-components.tsx", + "kind": "jsx" + } + ] + }, + "m2bb57667526c": { + "source": "Run Security Scan", + "locations": [ + { + "file": "modules/editor/panels/security-panel-components.tsx", + "kind": "jsx" + } + ] + }, + "mb764be909067": { + "source": "Your project security score", + "locations": [ + { + "file": "modules/editor/panels/security-panel-components.tsx", + "kind": "jsx" + } + ] + }, + "m21f1595b614f": { + "source": "Fix", + "locations": [ + { + "file": "modules/editor/panels/security-panel-components.tsx", + "kind": "jsx" + } + ] + }, + "m87477e2696e7": { + "source": "Move to .env", + "locations": [ + { + "file": "modules/editor/panels/security-panel-components.tsx", + "kind": "jsx" + } + ] + }, + "m4457f2d1aa4f": { + "source": "CRITICAL", + "locations": [ + { + "file": "modules/editor/panels/security-panel-types.ts", + "kind": "data" + } + ] + }, + "mb43e72eed048": { + "source": "HIGH", + "locations": [ + { + "file": "modules/editor/panels/security-panel-types.ts", + "kind": "data" + } + ] + }, + "m7c48dd672a68": { + "source": "MEDIUM", + "locations": [ + { + "file": "modules/editor/panels/security-panel-types.ts", + "kind": "data" + } + ] + }, + "m5fbdda1b8c72": { + "source": "LOW", + "locations": [ + { + "file": "modules/editor/panels/security-panel-types.ts", + "kind": "data" + } + ] + }, + "mbca2caf53068": { + "source": "Scanning dependencies...", + "locations": [ + { + "file": "modules/editor/panels/security-panel-types.ts", + "kind": "data" + } + ] + }, + "m41d7f825db92": { + "source": "Checking for secrets...", + "locations": [ + { + "file": "modules/editor/panels/security-panel-types.ts", + "kind": "data" + } + ] + }, + "m52cc629e49de": { + "source": "Analyzing code quality...", + "locations": [ + { + "file": "modules/editor/panels/security-panel-types.ts", + "kind": "data" + } + ] + }, + "mb0d4eed2228f": { + "source": "Verifying HTTPS config...", + "locations": [ + { + "file": "modules/editor/panels/security-panel-types.ts", + "kind": "data" + } + ] + }, + "mbd35a52d0ac8": { + "source": "Scan complete", + "locations": [ + { + "file": "modules/editor/panels/security-panel-types.ts", + "kind": "data" + } + ] + }, + "m2e41b118eb20": { + "source": "Dependencies", + "locations": [ + { + "file": "modules/editor/panels/security-panel-types.ts", + "kind": "data" + } + ] + }, + "ma234c42226b5": { + "source": "Secrets Detection", + "locations": [ + { + "file": "modules/editor/panels/security-panel-types.ts", + "kind": "data" + } + ] + }, + "m0008c1a1b7a5": { + "source": "Code Quality", + "locations": [ + { + "file": "modules/editor/panels/security-panel-types.ts", + "kind": "data" + } + ] + }, + "mccf1c9c05da6": { + "source": "HTTPS / SSL", + "locations": [ + { + "file": "modules/editor/panels/security-panel-types.ts", + "kind": "data" + } + ] + }, + "ma83820eba2a5": { + "source": "Scanning...", + "locations": [ + { + "file": "modules/editor/panels/security-panel.tsx", + "kind": "expression" + } + ] + }, + "m68ac7da5dfff": { + "source": "Run scan", + "locations": [ + { + "file": "modules/editor/panels/security-panel.tsx", + "kind": "expression" + } + ] + }, + "mcf47fe8237c0": { + "source": "Scan Results", + "locations": [ + { + "file": "modules/editor/panels/security-panel.tsx", + "kind": "jsx" + } + ] + }, + "m10153f84a1c8": { + "source": "Vulnerabilities", + "locations": [ + { + "file": "modules/editor/panels/security-panel.tsx", + "kind": "jsx" + } + ] + }, + "m1b43f94acafe": { + "source": "Secrets Detected", + "locations": [ + { + "file": "modules/editor/panels/security-panel.tsx", + "kind": "jsx" + } + ] + }, + "m3e1ba5ec342d": { + "source": "Code Quality Issues", + "locations": [ + { + "file": "modules/editor/panels/security-panel.tsx", + "kind": "jsx" + } + ] + }, + "mde8ae7761662": { + "source": "All clear!", + "locations": [ + { + "file": "modules/editor/panels/security-panel.tsx", + "kind": "jsx" + } + ] + }, + "mf072d213cbba": { + "source": "No security issues found in your project.", + "locations": [ + { + "file": "modules/editor/panels/security-panel.tsx", + "kind": "jsx" + } + ] + }, + "mfa5d797742e5": { + "source": "Last scan:", + "locations": [ + { + "file": "modules/editor/panels/security-panel.tsx", + "kind": "jsx" + } + ] + }, + "m298d6c7549e4": { + "source": "Duration:", + "locations": [ + { + "file": "modules/editor/panels/security-panel.tsx", + "kind": "jsx" + } + ] + }, + "m865c8a6db23e": { + "source": "files scanned", + "locations": [ + { + "file": "modules/editor/panels/security-panel.tsx", + "kind": "jsx" + } + ] + }, + "m442aded87a55": { + "source": "Performance", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "jsx" + } + ] + }, + "m41d00ea2b130": { + "source": "Core Web Vitals", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "jsx" + } + ] + }, + "m890d34fffcde": { + "source": "Target:", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "jsx" + } + ] + }, + "m59aec41109e1": { + "source": "Additional Metrics", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "jsx" + } + ] + }, + "mc13d409105f9": { + "source": "Bundle Analysis", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "jsx" + } + ] + }, + "m515e6ac17ff5": { + "source": "Total Bundle Size", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "jsx" + } + ] + }, + "m0917e7be3804": { + "source": "JS", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "data" + }, + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "data" + } + ] + }, + "mb581e46042cb": { + "source": "CSS", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "data" + }, + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "data" + } + ] + }, + "m07239dbd2a1a": { + "source": "HTML", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "data" + }, + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "data" + } + ] + }, + "mbe7e2f201293": { + "source": "Images", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "data" + }, + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "data" + } + ] + }, + "m3680fcad01f4": { + "source": "Fonts", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "data" + }, + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "data" + } + ] + }, + "mf97e9da0e3b8": { + "source": "Other", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "data" + }, + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "data" + }, + { + "file": "modules/marketplace/report-listing-dialog.tsx", + "kind": "data" + } + ] + }, + "m91ebac9663bc": { + "source": "Largest Files", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "jsx" + } + ] + }, + "m9454dbf1e4d0": { + "source": "Tree-shaking opportunity", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "jsx" + } + ] + }, + "ma2de31cf19d4": { + "source": "The vendor bundle contains unused exports from large libraries. Consider importing only the specific modules you need (e.g.", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "jsx" + } + ] + }, + "md942f6488657": { + "source": "import", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "jsx" + } + ] + }, + "mfed4caac2ea2": { + "source": "debounce", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "jsx" + } + ] + }, + "mfb30b806509e": { + "source": "from 'lodash/debounce'", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "jsx" + } + ] + }, + "mb4f06654cac0": { + "source": "instead of importing the entire library).", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "jsx" + } + ] + }, + "m0738ee00b61b": { + "source": "Recommendations", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "jsx" + } + ] + }, + "m6f61f46c23a6": { + "source": "impact", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "jsx" + } + ] + }, + "mc4c09704090e": { + "source": "Fix with AI", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "jsx" + } + ] + }, + "m317e174357cf": { + "source": "Measured from your live preview (transfer-size based).", + "locations": [ + { + "file": "modules/editor/panels/speed-panel-results.tsx", + "kind": "jsx" + } + ] + }, + "m4977a7e5bb36": { + "source": "Running...", + "locations": [ + { + "file": "modules/editor/panels/speed-panel.tsx", + "kind": "expression" + } + ] + }, + "m954b8f823bf0": { + "source": "Run audit", + "locations": [ + { + "file": "modules/editor/panels/speed-panel.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/panels/speed-panel.tsx", + "kind": "expression" + } + ] + }, + "m892c84891df2": { + "source": "Audit failed", + "locations": [ + { + "file": "modules/editor/panels/speed-panel.tsx", + "kind": "jsx" + } + ] + }, + "m30ea74354efc": { + "source": "Performance Audit", + "locations": [ + { + "file": "modules/editor/panels/speed-panel.tsx", + "kind": "jsx" + } + ] + }, + "mb78a53daa655": { + "source": "Analyze your page speed, transfer size, bundle breakdown, and get actionable recommendations to improve performance.", + "locations": [ + { + "file": "modules/editor/panels/speed-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc02130fa90ee": { + "source": "Loading preview...", + "locations": [ + { + "file": "modules/editor/preview/preview-panel.tsx", + "kind": "jsx" + } + ] + }, + "mcefd31dfd0ad": { + "source": "AI generating...", + "locations": [ + { + "file": "modules/editor/preview/preview-panel.tsx", + "kind": "jsx" + } + ] + }, + "m60c87cdbd995": { + "source": "The preview server may not be running.", + "locations": [ + { + "file": "modules/editor/preview/preview-panel.tsx", + "kind": "jsx" + } + ] + }, + "m36d3e7aaf364": { + "source": "Project preview", + "locations": [ + { + "file": "modules/editor/preview/preview-panel.tsx", + "kind": "attribute" + } + ] + }, + "mfabb1a3a78a9": { + "source": "NotebookLM result", + "locations": [ + { + "file": "modules/editor/preview/preview-panel.tsx", + "kind": "jsx" + } + ] + }, + "me392985826cd": { + "source": "← Back to app", + "locations": [ + { + "file": "modules/editor/preview/preview-panel.tsx", + "kind": "jsx" + } + ] + }, + "m6dad344b78d0": { + "source": "notebooklm-result", + "locations": [ + { + "file": "modules/editor/preview/preview-panel.tsx", + "kind": "attribute" + } + ] + }, + "md61b13d11a68": { + "source": "Live Preview", + "locations": [ + { + "file": "modules/editor/preview/preview-panel.tsx", + "kind": "jsx" + } + ] + }, + "m82e3c510c418": { + "source": "Your app preview will appear here as the AI generates code.", + "locations": [ + { + "file": "modules/editor/preview/preview-panel.tsx", + "kind": "jsx" + } + ] + }, + "me5c083cf41ff": { + "source": "No preview available", + "locations": [ + { + "file": "modules/editor/preview/preview-toolbar.tsx", + "kind": "expression" + } + ] + }, + "m2490e88747ec": { + "source": "Disable visual editing", + "locations": [ + { + "file": "modules/editor/preview/preview-toolbar.tsx", + "kind": "expression" + } + ] + }, + "m42b054ffc097": { + "source": "Enable visual editing", + "locations": [ + { + "file": "modules/editor/preview/preview-toolbar.tsx", + "kind": "expression" + } + ] + }, + "m9046da16aea9": { + "source": "Pages", + "locations": [ + { + "file": "modules/editor/sidebar/editor-sidebar.tsx", + "kind": "data" + }, + { + "file": "modules/editor/sidebar/pages-tab.tsx", + "kind": "jsx" + } + ] + }, + "maab31cde23ba": { + "source": "Collapse sidebar", + "locations": [ + { + "file": "modules/editor/sidebar/editor-sidebar.tsx", + "kind": "attribute" + } + ] + }, + "m7f2f1a589887": { + "source": "No project selected.", + "locations": [ + { + "file": "modules/editor/sidebar/editor-sidebar.tsx", + "kind": "jsx" + } + ] + }, + "m07be26265b47": { + "source": "No workspace selected.", + "locations": [ + { + "file": "modules/editor/sidebar/editor-sidebar.tsx", + "kind": "jsx" + } + ] + }, + "m37c5b8938bc5": { + "source": "Delete file?", + "locations": [ + { + "file": "modules/editor/sidebar/file-tree-nodes.tsx", + "kind": "jsx" + } + ] + }, + "m7f5d26a5b27f": { + "source": "? This cannot be undone.", + "locations": [ + { + "file": "modules/editor/sidebar/file-tree-nodes.tsx", + "kind": "jsx" + } + ] + }, + "m179fed85ec50": { + "source": "Search files", + "locations": [ + { + "file": "modules/editor/sidebar/file-tree.tsx", + "kind": "attribute" + } + ] + }, + "mbb38e88c5b60": { + "source": "No files matching “", + "locations": [ + { + "file": "modules/editor/sidebar/file-tree.tsx", + "kind": "jsx" + } + ] + }, + "m69846e7cc7e9": { + "source": "Context files the AI reads before every interaction. Click to edit.", + "locations": [ + { + "file": "modules/editor/sidebar/knowledge-tab.tsx", + "kind": "jsx" + } + ] + }, + "m9339d855212e": { + "source": "Project Knowledge", + "locations": [ + { + "file": "modules/editor/sidebar/knowledge-tab.tsx", + "kind": "jsx" + } + ] + }, + "m6209368d2532": { + "source": "New Page Name", + "locations": [ + { + "file": "modules/editor/sidebar/pages-tab.tsx", + "kind": "jsx" + } + ] + }, + "ma1e47d8a3aa5": { + "source": "Create via AI", + "locations": [ + { + "file": "modules/editor/sidebar/pages-tab.tsx", + "kind": "jsx" + } + ] + }, + "ma93d346c05cc": { + "source": "Add a new page", + "locations": [ + { + "file": "modules/editor/sidebar/pages-tab.tsx", + "kind": "attribute" + } + ] + }, + "m55dbb3629822": { + "source": "Search pages...", + "locations": [ + { + "file": "modules/editor/sidebar/pages-tab.tsx", + "kind": "attribute" + } + ] + }, + "md1c559bbc81c": { + "source": "No pages match your search.", + "locations": [ + { + "file": "modules/editor/sidebar/pages-tab.tsx", + "kind": "expression" + } + ] + }, + "mf005c577d468": { + "source": "No pages detected. Add files to src/pages/ to see them here.", + "locations": [ + { + "file": "modules/editor/sidebar/pages-tab.tsx", + "kind": "expression" + } + ] + }, + "m3660315a9af3": { + "source": "page", + "locations": [ + { + "file": "modules/editor/sidebar/pages-tab.tsx", + "kind": "jsx" + } + ] + }, + "mb96da48a63e7": { + "source": "detected", + "locations": [ + { + "file": "modules/editor/sidebar/pages-tab.tsx", + "kind": "jsx" + } + ] + }, + "me3cc57e193d6": { + "source": "CURRENT", + "locations": [ + { + "file": "modules/editor/sidebar/version-history-item.tsx", + "kind": "jsx" + } + ] + }, + "mb4836106f489": { + "source": "Remove bookmark", + "locations": [ + { + "file": "modules/editor/sidebar/version-history-item.tsx", + "kind": "expression" + } + ] + }, + "mc36b1558cfd7": { + "source": "Bookmark this version", + "locations": [ + { + "file": "modules/editor/sidebar/version-history-item.tsx", + "kind": "expression" + } + ] + }, + "md95082a2ee57": { + "source": "Author", + "locations": [ + { + "file": "modules/editor/sidebar/version-history-item.tsx", + "kind": "jsx" + } + ] + }, + "mdd167905de0d": { + "source": "Version", + "locations": [ + { + "file": "modules/editor/sidebar/version-history-item.tsx", + "kind": "jsx" + } + ] + }, + "ma76e13b98392": { + "source": "Restore", + "locations": [ + { + "file": "modules/editor/sidebar/version-history-item.tsx", + "kind": "jsx" + } + ] + }, + "m0e5d6873018e": { + "source": "View diff", + "locations": [ + { + "file": "modules/editor/sidebar/version-history-item.tsx", + "kind": "jsx" + } + ] + }, + "ma61b1b4716d0": { + "source": "Loading versions...", + "locations": [ + { + "file": "modules/editor/sidebar/version-history.tsx", + "kind": "jsx" + } + ] + }, + "mff76e0371906": { + "source": "No versions yet", + "locations": [ + { + "file": "modules/editor/sidebar/version-history.tsx", + "kind": "jsx" + } + ] + }, + "mbc861f24ac2a": { + "source": "Versions are created automatically as the AI makes changes.", + "locations": [ + { + "file": "modules/editor/sidebar/version-history.tsx", + "kind": "jsx" + } + ] + }, + "m3e8a959e4e2c": { + "source": "No bookmarked versions", + "locations": [ + { + "file": "modules/editor/sidebar/version-history.tsx", + "kind": "jsx" + } + ] + }, + "m4d34e4f09d03": { + "source": "Click the bookmark icon on any version to save it.", + "locations": [ + { + "file": "modules/editor/sidebar/version-history.tsx", + "kind": "jsx" + } + ] + }, + "m30aa5d0757f1": { + "source": "Load older versions", + "locations": [ + { + "file": "modules/editor/sidebar/version-history.tsx", + "kind": "jsx" + } + ] + }, + "mc17c33c93bf4": { + "source": "remaining)", + "locations": [ + { + "file": "modules/editor/sidebar/version-history.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integration-catalog.tsx", + "kind": "jsx" + } + ] + }, + "m7d4f4103009d": { + "source": "Live public deployment", + "locations": [ + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "expression" + } + ] + }, + "m453bcff7ec68": { + "source": "Temporary preview link", + "locations": [ + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "expression" + } + ] + }, + "mc38f4bf16403": { + "source": "Deployment history", + "locations": [ + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "jsx" + } + ] + }, + "me83dea6df0d2": { + "source": "No deployments yet", + "locations": [ + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "jsx" + } + ] + }, + "m6a0d63d84893": { + "source": "This may take up to 60 seconds.", + "locations": [ + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "jsx" + } + ] + }, + "mb20c49843a17": { + "source": "Build output", + "locations": [ + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "jsx" + } + ] + }, + "m84a0f15dccca": { + "source": "Your project is now live.", + "locations": [ + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "jsx" + } + ] + }, + "mf9fd8a28cf11": { + "source": "Build:", + "locations": [ + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "jsx" + } + ] + }, + "m18f6adeb80e8": { + "source": "Deploy:", + "locations": [ + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "jsx" + } + ] + }, + "m18e872be2359": { + "source": "Total:", + "locations": [ + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "jsx" + } + ] + }, + "m05081f14d114": { + "source": "Deployment Failed", + "locations": [ + { + "file": "modules/editor/toolbar/deploy-dialog-steps.tsx", + "kind": "jsx" + } + ] + }, + "m9e8197ce9e5f": { + "source": "Show sidebar", + "locations": [ + { + "file": "modules/editor/toolbar/editor-toolbar.tsx", + "kind": "expression" + } + ] + }, + "md1db29ebc76d": { + "source": "Hide sidebar", + "locations": [ + { + "file": "modules/editor/toolbar/editor-toolbar.tsx", + "kind": "expression" + } + ] + }, + "m5da22fe4f7ac": { + "source": "Synced", + "locations": [ + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "data" + } + ] + }, + "ma8f94e9869fa": { + "source": "Ahead", + "locations": [ + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "data" + } + ] + }, + "ma2e92848319a": { + "source": "Behind", + "locations": [ + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "data" + } + ] + }, + "mec67106c49d8": { + "source": "Diverged", + "locations": [ + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "data" + } + ] + }, + "m04dfac3671b4": { + "source": "Disconnected", + "locations": [ + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "data" + } + ] + }, + "m4027e5b24418": { + "source": "Connect GitHub", + "locations": [ + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "expression" + } + ] + }, + "m84bf6b1184cb": { + "source": "Pushing...", + "locations": [ + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "expression" + }, + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "expression" + } + ] + }, + "m9756b83cda4b": { + "source": "Pulling...", + "locations": [ + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "expression" + }, + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "expression" + } + ] + }, + "m0d6e4079e367": { + "source": "main", + "locations": [ + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "expression" + } + ] + }, + "md0b4034c6ca7": { + "source": "ahead", + "locations": [ + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "jsx" + } + ] + }, + "mb1b886ce5f57": { + "source": "behind", + "locations": [ + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "jsx" + } + ] + }, + "m02961f8382e4": { + "source": "Remote has changes not in your local project. Pull first, or force push to overwrite.", + "locations": [ + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "jsx" + } + ] + }, + "mec1ed0e945e5": { + "source": "Commit message...", + "locations": [ + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "attribute" + } + ] + }, + "m731ce7ed8089": { + "source": "Push", + "locations": [ + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "expression" + }, + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "expression" + } + ] + }, + "m8de55a43460c": { + "source": "Force push (overwrites remote)", + "locations": [ + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "attribute" + } + ] + }, + "mcfda1755ffb1": { + "source": "Force", + "locations": [ + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "jsx" + } + ] + }, + "m4c5aa5fbf47d": { + "source": "Push to GitHub", + "locations": [ + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "jsx" + } + ] + }, + "mc551ab2a742b": { + "source": "Pull from GitHub", + "locations": [ + { + "file": "modules/editor/toolbar/github-button.tsx", + "kind": "expression" + }, + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "jsx" + } + ] + }, + "m93e20626bf9c": { + "source": "1px", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/border-editor.tsx", + "kind": "data" + } + ] + }, + "m747614001f01": { + "source": "2px", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/border-editor.tsx", + "kind": "data" + } + ] + }, + "m356601538da0": { + "source": "4px", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/border-editor.tsx", + "kind": "data" + } + ] + }, + "mb8b311b0f273": { + "source": "Solid", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/border-editor.tsx", + "kind": "data" + } + ] + }, + "m2fe14adec27a": { + "source": "Dashed", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/border-editor.tsx", + "kind": "data" + } + ] + }, + "mbe454f3c8084": { + "source": "Dotted", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/border-editor.tsx", + "kind": "data" + } + ] + }, + "m3b4bdff339e9": { + "source": "Border", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/border-editor.tsx", + "kind": "jsx" + } + ] + }, + "m3019947b6daf": { + "source": "Width", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/border-editor.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/visual-edit/property-panels/size-editor.tsx", + "kind": "jsx" + } + ] + }, + "m140bedbf9c3f": { + "source": "none", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/border-editor.tsx", + "kind": "expression" + } + ] + }, + "m7e744141b40e": { + "source": "Style", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/border-editor.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "jsx" + } + ] + }, + "m6fe0661c82d1": { + "source": "Radius", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/border-editor.tsx", + "kind": "jsx" + } + ] + }, + "m33a3c91b44d2": { + "source": "0px", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/border-editor.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/visual-edit/property-panels/layout-editor.tsx", + "kind": "attribute" + } + ] + }, + "m98b24440597d": { + "source": "CSS Value", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/color-editor.tsx", + "kind": "jsx" + } + ] + }, + "m4a73db4ba8bf": { + "source": "#000000 or color name", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/color-editor.tsx", + "kind": "attribute" + } + ] + }, + "m9b78ab17c13f": { + "source": "Pick Color", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/color-editor.tsx", + "kind": "jsx" + } + ] + }, + "m31e392d1c037": { + "source": "Apply", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/color-editor.tsx", + "kind": "jsx" + } + ] + }, + "m88c45d9e526c": { + "source": "Colors", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/color-editor.tsx", + "kind": "jsx" + } + ] + }, + "m4a69d0166046": { + "source": "Text color", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/color-editor.tsx", + "kind": "attribute" + } + ] + }, + "mea2b8a878841": { + "source": "Background", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/color-editor.tsx", + "kind": "attribute" + } + ] + }, + "m95110d74c4c0": { + "source": "Row", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/layout-editor.tsx", + "kind": "data" + } + ] + }, + "me4bb9f1ece9a": { + "source": "Start", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/layout-editor.tsx", + "kind": "data" + } + ] + }, + "md946067427e9": { + "source": "Center", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/layout-editor.tsx", + "kind": "data" + } + ] + }, + "mf4db1e48476f": { + "source": "End", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/layout-editor.tsx", + "kind": "data" + } + ] + }, + "ma33fbcf83f7b": { + "source": "Stretch", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/layout-editor.tsx", + "kind": "data" + } + ] + }, + "ma511909161e1": { + "source": "Layout", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/layout-editor.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/visual-edit/property-panels/layout-editor.tsx", + "kind": "jsx" + } + ] + }, + "m88150308f8bc": { + "source": "Display:", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/layout-editor.tsx", + "kind": "jsx" + } + ] + }, + "m0b2782bb65ba": { + "source": "Layout controls are available for flex and grid elements.", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/layout-editor.tsx", + "kind": "jsx" + } + ] + }, + "m9c8a9579abe5": { + "source": "Direction", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/layout-editor.tsx", + "kind": "jsx" + } + ] + }, + "mb1b1b4e5e8d7": { + "source": "Align", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/layout-editor.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "jsx" + } + ] + }, + "mcb129306bc6f": { + "source": "Gap", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/layout-editor.tsx", + "kind": "jsx" + } + ] + }, + "m1af851907331": { + "source": "Size", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/size-editor.tsx", + "kind": "jsx" + }, + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "jsx" + } + ] + }, + "m929260ad9b9e": { + "source": "auto", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/size-editor.tsx", + "kind": "attribute" + }, + { + "file": "modules/editor/visual-edit/property-panels/size-editor.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "expression" + } + ] + }, + "mbfe2eca40179": { + "source": "Height", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/size-editor.tsx", + "kind": "jsx" + } + ] + }, + "md5cdfcf7ff75": { + "source": "Top", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/spacing-editor.tsx", + "kind": "attribute" + } + ] + }, + "m883361d5d682": { + "source": "Right", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/spacing-editor.tsx", + "kind": "attribute" + } + ] + }, + "m479ad21ac909": { + "source": "Bottom", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/spacing-editor.tsx", + "kind": "attribute" + } + ] + }, + "m58eb9032e3bb": { + "source": "Left", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/spacing-editor.tsx", + "kind": "attribute" + } + ] + }, + "m62a822a58309": { + "source": "Spacing", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/spacing-editor.tsx", + "kind": "jsx" + } + ] + }, + "mca0397ca2f65": { + "source": "Collapse inputs", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/spacing-editor.tsx", + "kind": "expression" + } + ] + }, + "m0393049f5cd5": { + "source": "Expand inputs", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/spacing-editor.tsx", + "kind": "expression" + } + ] + }, + "m2bf63d817630": { + "source": "Margin", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/spacing-editor.tsx", + "kind": "attribute" + } + ] + }, + "mee0d7af0bffd": { + "source": "Padding", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/spacing-editor.tsx", + "kind": "attribute" + } + ] + }, + "m71988c4d8e08": { + "source": "Text", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/text-editor.tsx", + "kind": "jsx" + } + ] + }, + "m4ec48e7f45fa": { + "source": "Element text content...", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/text-editor.tsx", + "kind": "attribute" + } + ] + }, + "ma159eaf43ba2": { + "source": "xs", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "m5af308bec132": { + "source": "sm", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "mcae662172fd4": { + "source": "base", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "m0e6ba33f8bc8": { + "source": "lg", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "m525a6f3c9ded": { + "source": "xl", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "m996dfe781005": { + "source": "2xl", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "m71f6ca0ae9aa": { + "source": "3xl", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "m0aa558305207": { + "source": "4xl", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "m244d4ab1edf8": { + "source": "5xl", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "m6b27c18efbac": { + "source": "Select weight", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "mb455784ab530": { + "source": "Regular", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "m8e588cd18774": { + "source": "Medium", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "md442655c0643": { + "source": "Semibold", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "m94fee62e68e2": { + "source": "Bold", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "ma7248eeb45eb": { + "source": "Normal", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "m9bf37cb58a69": { + "source": "Italic", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "meac0f9c3da59": { + "source": "Align left", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "me55c76591fa2": { + "source": "Align center", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "m8f4f8efcbee1": { + "source": "Align right", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "mf3bd3473d7d8": { + "source": "Justify", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "data" + } + ] + }, + "mcab94aba84f9": { + "source": "Typography", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "jsx" + } + ] + }, + "m81d27ef6d503": { + "source": "Weight", + "locations": [ + { + "file": "modules/editor/visual-edit/property-panels/typography-editor.tsx", + "kind": "jsx" + } + ] + }, + "mb502cf4b47f7": { + "source": "Hide resolved", + "locations": [ + { + "file": "modules/editor/visual-edit/sticky-notes/design-comments-layer.tsx", + "kind": "expression" + } + ] + }, + "m64d0005c6bd7": { + "source": "Show resolved", + "locations": [ + { + "file": "modules/editor/visual-edit/sticky-notes/design-comments-layer.tsx", + "kind": "expression" + } + ] + }, + "m862c2324686b": { + "source": "Cancel (Esc)", + "locations": [ + { + "file": "modules/editor/visual-edit/sticky-notes/design-comments-layer.tsx", + "kind": "expression" + } + ] + }, + "mc4d891e9a87e": { + "source": "Add comment", + "locations": [ + { + "file": "modules/editor/visual-edit/sticky-notes/design-comments-layer.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/visual-edit/sticky-notes/design-comments.tsx", + "kind": "jsx" + } + ] + }, + "m4be7d5adc649": { + "source": "Click to place", + "locations": [ + { + "file": "modules/editor/visual-edit/sticky-notes/design-comments-layer.tsx", + "kind": "expression" + } + ] + }, + "m44f5e3fbec57": { + "source": "Comment", + "locations": [ + { + "file": "modules/editor/visual-edit/sticky-notes/design-comments-layer.tsx", + "kind": "expression" + }, + { + "file": "modules/editor/visual-edit/sticky-notes/design-comments.tsx", + "kind": "jsx" + } + ] + }, + "md6efe4c67c0c": { + "source": "Re-open comment", + "locations": [ + { + "file": "modules/editor/visual-edit/sticky-notes/design-comments.tsx", + "kind": "attribute" + } + ] + }, + "m4ea5c8c9b647": { + "source": "Resolve comment", + "locations": [ + { + "file": "modules/editor/visual-edit/sticky-notes/design-comments.tsx", + "kind": "attribute" + } + ] + }, + "me43811a17028": { + "source": "Delete comment", + "locations": [ + { + "file": "modules/editor/visual-edit/sticky-notes/design-comments.tsx", + "kind": "attribute" + } + ] + }, + "m5782b18687e6": { + "source": "reply", + "locations": [ + { + "file": "modules/editor/visual-edit/sticky-notes/design-comments.tsx", + "kind": "expression" + } + ] + }, + "mb994278263e7": { + "source": "replies", + "locations": [ + { + "file": "modules/editor/visual-edit/sticky-notes/design-comments.tsx", + "kind": "expression" + } + ] + }, + "m311c9f3dd66b": { + "source": "Delete reply", + "locations": [ + { + "file": "modules/editor/visual-edit/sticky-notes/design-comments.tsx", + "kind": "attribute" + } + ] + }, + "m772fa553df6a": { + "source": "Reply...", + "locations": [ + { + "file": "modules/editor/visual-edit/sticky-notes/design-comments.tsx", + "kind": "attribute" + } + ] + }, + "m625aafc3a9bd": { + "source": "Send reply", + "locations": [ + { + "file": "modules/editor/visual-edit/sticky-notes/design-comments.tsx", + "kind": "attribute" + } + ] + }, + "m4dff58ab6888": { + "source": "Leave a comment...", + "locations": [ + { + "file": "modules/editor/visual-edit/sticky-notes/design-comments.tsx", + "kind": "attribute" + } + ] + }, + "mebca7fbdafd1": { + "source": "Save first", + "locations": [ + { + "file": "modules/editor/visual-edit/visual-edit-toolbar.tsx", + "kind": "expression" + } + ] + }, + "m9cf4ca8afcc9": { + "source": "Send prompt", + "locations": [ + { + "file": "modules/editor/visual-edit/visual-edit-toolbar.tsx", + "kind": "attribute" + } + ] + }, + "m9913b7a79909": { + "source": "Select parent element", + "locations": [ + { + "file": "modules/editor/visual-edit/visual-edit-toolbar.tsx", + "kind": "attribute" + } + ] + }, + "ma46e92d02960": { + "source": "View source code", + "locations": [ + { + "file": "modules/editor/visual-edit/visual-edit-toolbar.tsx", + "kind": "attribute" + } + ] + }, + "m3cd9611289bc": { + "source": "Delete element", + "locations": [ + { + "file": "modules/editor/visual-edit/visual-edit-toolbar.tsx", + "kind": "attribute" + } + ] + }, + "mb53cf804ed19": { + "source": "Items available to all environments", + "locations": [ + { + "file": "modules/environments/env-cards.tsx", + "kind": "jsx" + } + ] + }, + "m5f3c4f8580d3": { + "source": "items", + "locations": [ + { + "file": "modules/environments/env-cards.tsx", + "kind": "jsx" + }, + { + "file": "modules/environments/env-cards.tsx", + "kind": "jsx" + } + ] + }, + "mcd57f659de82": { + "source": "Workspace-level items automatically included in all projects unless overridden by a project environment.", + "locations": [ + { + "file": "modules/environments/env-cards.tsx", + "kind": "jsx" + } + ] + }, + "m5ee3c4ff61db": { + "source": "None — add workspace knowledge in Workspace Settings", + "locations": [ + { + "file": "modules/environments/env-cards.tsx", + "kind": "attribute" + } + ] + }, + "me0091fce46a5": { + "source": "Edit name, icon & color", + "locations": [ + { + "file": "modules/environments/env-cards.tsx", + "kind": "jsx" + } + ] + }, + "m0d50fb123a7d": { + "source": "No knowledge files", + "locations": [ + { + "file": "modules/environments/env-cards.tsx", + "kind": "attribute" + } + ] + }, + "m10886554da51": { + "source": "Set as Default", + "locations": [ + { + "file": "modules/environments/env-cards.tsx", + "kind": "jsx" + } + ] + }, + "m5779f32fab00": { + "source": "Clone", + "locations": [ + { + "file": "modules/environments/env-cards.tsx", + "kind": "jsx" + } + ] + }, + "m3664895579f0": { + "source": "Export", + "locations": [ + { + "file": "modules/environments/env-cards.tsx", + "kind": "jsx" + } + ] + }, + "mf2e6c2fe7c8f": { + "source": "Sure?", + "locations": [ + { + "file": "modules/environments/env-cards.tsx", + "kind": "jsx" + } + ] + }, + "m85a39ab345d6": { + "source": "Yes", + "locations": [ + { + "file": "modules/environments/env-cards.tsx", + "kind": "jsx" + } + ] + }, + "m1ea442a134b2": { + "source": "No", + "locations": [ + { + "file": "modules/environments/env-cards.tsx", + "kind": "jsx" + }, + { + "file": "modules/environments/env-shared.tsx", + "kind": "jsx" + } + ] + }, + "meaab52640429": { + "source": "New Environment", + "locations": [ + { + "file": "modules/environments/env-forms.tsx", + "kind": "jsx" + } + ] + }, + "m16ca11f9491f": { + "source": "Full-stack environment with React, Tailwind, and Supabase tools", + "locations": [ + { + "file": "modules/environments/env-forms.tsx", + "kind": "attribute" + } + ] + }, + "mc7b7e03505b2": { + "source": "Edit Environment", + "locations": [ + { + "file": "modules/environments/env-forms.tsx", + "kind": "jsx" + } + ] + }, + "m219febf3ba15": { + "source": "Custom Instructions", + "locations": [ + { + "file": "modules/environments/env-forms.tsx", + "kind": "jsx" + } + ] + }, + "m5bcdb2bd8bfb": { + "source": "No custom instructions", + "locations": [ + { + "file": "modules/environments/env-forms.tsx", + "kind": "jsx" + } + ] + }, + "m7827793844ed": { + "source": "coding-standards.md", + "locations": [ + { + "file": "modules/environments/env-forms.tsx", + "kind": "attribute" + } + ] + }, + "m2b90b67c3121": { + "source": "# Instructions\\n\\nAlways...", + "locations": [ + { + "file": "modules/environments/env-forms.tsx", + "kind": "attribute" + } + ] + }, + "m984c4c78759c": { + "source": "Dock to sidebar", + "locations": [ + { + "file": "modules/environments/env-project-view.tsx", + "kind": "expression" + } + ] + }, + "m9a43f5ec3be7": { + "source": "Open as popup", + "locations": [ + { + "file": "modules/environments/env-project-view.tsx", + "kind": "expression" + } + ] + }, + "mba392022c5f1": { + "source": "No environment loaded", + "locations": [ + { + "file": "modules/environments/env-project-view.tsx", + "kind": "jsx" + } + ] + }, + "m02db55bac5e3": { + "source": "Variables", + "locations": [ + { + "file": "modules/environments/env-shared.tsx", + "kind": "data" + } + ] + }, + "m0678e31f762b": { + "source": "Click to edit", + "locations": [ + { + "file": "modules/environments/env-shared.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/components/skills-rules-cards.tsx", + "kind": "attribute" + } + ] + }, + "mc6c094bc0054": { + "source": "Empty", + "locations": [ + { + "file": "modules/environments/env-shared.tsx", + "kind": "expression" + }, + { + "file": "modules/settings/components/skills-rules-cards.tsx", + "kind": "expression" + } + ] + }, + "m2c04b392f1fc": { + "source": "None configured", + "locations": [ + { + "file": "modules/environments/env-shared.tsx", + "kind": "expression" + } + ] + }, + "m557832355c85": { + "source": "None selected", + "locations": [ + { + "file": "modules/environments/env-shared.tsx", + "kind": "jsx" + } + ] + }, + "maa4836eb52a0": { + "source": "in workspace. Create them in the", + "locations": [ + { + "file": "modules/environments/env-shared.tsx", + "kind": "jsx" + } + ] + }, + "maae3f876be76": { + "source": "panel first.", + "locations": [ + { + "file": "modules/environments/env-shared.tsx", + "kind": "jsx" + } + ] + }, + "m2c83c00f0e83": { + "source": "Add file", + "locations": [ + { + "file": "modules/environments/env-tabs.tsx", + "kind": "expression" + } + ] + }, + "mf83c845cc1ea": { + "source": "# Knowledge\n\nAdd context about your project...", + "locations": [ + { + "file": "modules/environments/env-tabs.tsx", + "kind": "attribute" + } + ] + }, + "m9af696f3aa74": { + "source": "No knowledge files yet", + "locations": [ + { + "file": "modules/environments/env-tabs.tsx", + "kind": "jsx" + } + ] + }, + "m4ca85331d10a": { + "source": "Add files to give your AI context about this project.", + "locations": [ + { + "file": "modules/environments/env-tabs.tsx", + "kind": "jsx" + } + ] + }, + "md5a90b8d8d51": { + "source": "Active Environment", + "locations": [ + { + "file": "modules/environments/env-tabs.tsx", + "kind": "jsx" + } + ] + }, + "mc0bf75bd78bf": { + "source": "Change", + "locations": [ + { + "file": "modules/environments/env-tabs.tsx", + "kind": "expression" + } + ] + }, + "m1900aa145ca0": { + "source": "Custom environment (loading...)", + "locations": [ + { + "file": "modules/environments/env-tabs.tsx", + "kind": "jsx" + } + ] + }, + "maa6da723475a": { + "source": "Workspace Default", + "locations": [ + { + "file": "modules/environments/env-tabs.tsx", + "kind": "jsx" + }, + { + "file": "modules/environments/env-tabs.tsx", + "kind": "jsx" + } + ] + }, + "mdb587c5a8497": { + "source": "Inheriting workspace skills, rules & connectors", + "locations": [ + { + "file": "modules/environments/env-tabs.tsx", + "kind": "jsx" + } + ] + }, + "m5c09316228a5": { + "source": "Inherit all workspace items", + "locations": [ + { + "file": "modules/environments/env-tabs.tsx", + "kind": "jsx" + } + ] + }, + "me8c1818905f9": { + "source": "No custom environments yet. Create one from Workspace Settings.", + "locations": [ + { + "file": "modules/environments/env-tabs.tsx", + "kind": "jsx" + } + ] + }, + "m21b6a798321a": { + "source": "Development", + "locations": [ + { + "file": "modules/environments/env-variables-tab.tsx", + "kind": "data" + } + ] + }, + "m13a7c655a7d4": { + "source": "Production", + "locations": [ + { + "file": "modules/environments/env-variables-tab.tsx", + "kind": "data" + } + ] + }, + "mf95fcf61a863": { + "source": "Add Variable", + "locations": [ + { + "file": "modules/environments/env-variables-tab.tsx", + "kind": "jsx" + } + ] + }, + "m8e37953d23da": { + "source": "Value", + "locations": [ + { + "file": "modules/environments/env-variables-tab.tsx", + "kind": "attribute" + } + ] + }, + "mf6cbe2f0c1f8": { + "source": "Description (optional)", + "locations": [ + { + "file": "modules/environments/env-variables-tab.tsx", + "kind": "attribute" + } + ] + }, + "mabcdd1e169c4": { + "source": "Secret (masked after save)", + "locations": [ + { + "file": "modules/environments/env-variables-tab.tsx", + "kind": "expression" + } + ] + }, + "m0707c5d972a7": { + "source": "Plaintext", + "locations": [ + { + "file": "modules/environments/env-variables-tab.tsx", + "kind": "expression" + } + ] + }, + "m620e42933812": { + "source": "No environment variables", + "locations": [ + { + "file": "modules/environments/env-variables-tab.tsx", + "kind": "jsx" + } + ] + }, + "m8a8a445f6560": { + "source": "Variables are injected into dev server and builds", + "locations": [ + { + "file": "modules/environments/env-variables-tab.tsx", + "kind": "jsx" + } + ] + }, + "m2c4c151693e6": { + "source": "New value (leave blank to keep)", + "locations": [ + { + "file": "modules/environments/env-variables-tab.tsx", + "kind": "attribute" + } + ] + }, + "m5416ad093f89": { + "source": "Toggle value", + "locations": [ + { + "file": "modules/environments/env-variables-tab.tsx", + "kind": "attribute" + } + ] + }, + "mb1f8a17bcef8": { + "source": "Inherited from workspace (", + "locations": [ + { + "file": "modules/environments/env-variables-tab.tsx", + "kind": "jsx" + } + ] + }, + "m46b2e93c2f9a": { + "source": "inherited", + "locations": [ + { + "file": "modules/environments/env-variables-tab.tsx", + "kind": "jsx" + } + ] + }, + "ma6facd19ee0e": { + "source": "Installed from Marketplace", + "locations": [ + { + "file": "modules/environments/environments-panel.tsx", + "kind": "jsx" + } + ] + }, + "m41f94479d2ae": { + "source": "Marketplace listing", + "locations": [ + { + "file": "modules/environments/environments-panel.tsx", + "kind": "expression" + } + ] + }, + "me450db4ac225": { + "source": "· installed", + "locations": [ + { + "file": "modules/environments/environments-panel.tsx", + "kind": "jsx" + } + ] + }, + "me2109d543007": { + "source": "· modified", + "locations": [ + { + "file": "modules/environments/environments-panel.tsx", + "kind": "jsx" + } + ] + }, + "m691120d9fa07": { + "source": "Uninstall — removes the cloned environment from this workspace", + "locations": [ + { + "file": "modules/environments/environments-panel.tsx", + "kind": "attribute" + } + ] + }, + "mfe199528850a": { + "source": "Uninstall", + "locations": [ + { + "file": "modules/environments/environments-panel.tsx", + "kind": "jsx" + } + ] + }, + "m401d6acec59d": { + "source": "Environment Templates", + "locations": [ + { + "file": "modules/environments/environments-panel.tsx", + "kind": "jsx" + } + ] + }, + "mc2ad8271f5d3": { + "source": "No templates available yet", + "locations": [ + { + "file": "modules/environments/environments-panel.tsx", + "kind": "jsx" + } + ] + }, + "m90db2ca3d0cf": { + "source": "Templates will appear here once created by your team.", + "locations": [ + { + "file": "modules/environments/environments-panel.tsx", + "kind": "jsx" + } + ] + }, + "m18fdd549b2ed": { + "source": "New", + "locations": [ + { + "file": "modules/environments/environments-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/skills/skills-panel-components.tsx", + "kind": "jsx" + } + ] + }, + "m5fa108ae963a": { + "source": "Environments bundle workspace skills, rules, knowledge, and connectors into reusable presets. The", + "locations": [ + { + "file": "modules/environments/environments-panel.tsx", + "kind": "jsx" + } + ] + }, + "m37a8eec1ce19": { + "source": "default", + "locations": [ + { + "file": "modules/environments/environments-panel.tsx", + "kind": "jsx" + } + ] + }, + "m97c8b61c1986": { + "source": "environment includes all workspace items automatically.", + "locations": [ + { + "file": "modules/environments/environments-panel.tsx", + "kind": "jsx" + } + ] + }, + "mef0b6a88d698": { + "source": "Create a custom environment to bundle a specific subset of your workspace items.", + "locations": [ + { + "file": "modules/environments/environments-panel.tsx", + "kind": "jsx" + } + ] + }, + "m08d23414ad6a": { + "source": "Create Environment", + "locations": [ + { + "file": "modules/environments/environments-panel.tsx", + "kind": "jsx" + } + ] + }, + "md62395fd52cd": { + "source": "New Integration", + "locations": [ + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "jsx" + } + ] + }, + "m12f67f8539c4": { + "source": "Availability", + "locations": [ + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "jsx" + } + ] + }, + "mda2e5dc515b1": { + "source": "Everyone", + "locations": [ + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "data" + } + ] + }, + "md0f62545074d": { + "source": "This project", + "locations": [ + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "data" + } + ] + }, + "mbdc0857b99a9": { + "source": "Only me", + "locations": [ + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "data" + } + ] + }, + "m22f5ebc3ad3f": { + "source": "Server URL", + "locations": [ + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "jsx" + } + ] + }, + "m713166971d73": { + "source": "Command", + "locations": [ + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/mcp-connector-card.tsx", + "kind": "jsx" + } + ] + }, + "m697119e47b5f": { + "source": "npx -y @modelcontextprotocol/server", + "locations": [ + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "attribute" + } + ] + }, + "m9443ff69463e": { + "source": "Advanced options", + "locations": [ + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "jsx" + } + ] + }, + "m52a74e1ffc3f": { + "source": "Connection Type", + "locations": [ + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "jsx" + } + ] + }, + "m5bfaa5648534": { + "source": "Web service (HTTP streaming)", + "locations": [ + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "jsx" + } + ] + }, + "mfecfc188ba0f": { + "source": "Web service (HTTP SSE)", + "locations": [ + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "jsx" + } + ] + }, + "m105f8fe557fe": { + "source": "Bearer Token", + "locations": [ + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "expression" + }, + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m6946d3ffe03d": { + "source": "sk-...", + "locations": [ + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "expression" + } + ] + }, + "m3210f18682cf": { + "source": "eyJhbGci...", + "locations": [ + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "expression" + } + ] + }, + "me3b6e3d945fa": { + "source": "Add Integration", + "locations": [ + { + "file": "modules/integrations/add-integration-form.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integrations-panel.tsx", + "kind": "jsx" + } + ] + }, + "m13e8b0b77ddf": { + "source": "You'll be redirected to", + "locations": [ + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "jsx" + } + ] + }, + "m81c29589570e": { + "source": "to authorize access. A popup window will open for you to sign in.", + "locations": [ + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "jsx" + } + ] + }, + "m5f04ae9ed6a8": { + "source": "Connecting...", + "locations": [ + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "jsx" + } + ] + }, + "m11aaa14268df": { + "source": "Sign in with", + "locations": [ + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "jsx" + } + ] + }, + "m8e1c7ba669b6": { + "source": "Enter your API key", + "locations": [ + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "attribute" + } + ] + }, + "m1b216be66c84": { + "source": "Enter username", + "locations": [ + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "attribute" + } + ] + }, + "m7014aff13517": { + "source": "Enter password", + "locations": [ + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "attribute" + } + ] + }, + "m1339bddc2b28": { + "source": "Select...", + "locations": [ + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "jsx" + } + ] + }, + "mc856c7eb1cf5": { + "source": "Authentication Token", + "locations": [ + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + } + ] + }, + "m0a3c8f8411d7": { + "source": "Enter your authentication token", + "locations": [ + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "attribute" + } + ] + }, + "m86ea8896a440": { + "source": "Connecting to", + "locations": [ + { + "file": "modules/integrations/connect-flow.tsx", + "kind": "jsx" + } + ] + }, + "mdf0fe9e00d35": { + "source": "Try Again", + "locations": [ + { + "file": "modules/integrations/connect-flow.tsx", + "kind": "jsx" + } + ] + }, + "m72021eb70e91": { + "source": "Connecting…", + "locations": [ + { + "file": "modules/integrations/connect-flow.tsx", + "kind": "expression" + } + ] + }, + "m22965568d22a": { + "source": "Connected", + "locations": [ + { + "file": "modules/integrations/integration-card.tsx", + "kind": "expression" + }, + { + "file": "modules/integrations/integration-catalog.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integration-detail-sheet.tsx", + "kind": "jsx" + } + ] + }, + "me674447337e8": { + "source": "Available", + "locations": [ + { + "file": "modules/integrations/integration-card.tsx", + "kind": "expression" + }, + { + "file": "modules/integrations/integration-catalog.tsx", + "kind": "jsx" + } + ] + }, + "m4d4c2197d70e": { + "source": "No description available.", + "locations": [ + { + "file": "modules/integrations/integration-card.tsx", + "kind": "expression" + }, + { + "file": "modules/integrations/integration-detail-sheet.tsx", + "kind": "expression" + } + ] + }, + "m80d8688ffab9": { + "source": "Search integrations...", + "locations": [ + { + "file": "modules/integrations/integration-catalog.tsx", + "kind": "attribute" + }, + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "attribute" + } + ] + }, + "m15840c0ad236": { + "source": "Load more (", + "locations": [ + { + "file": "modules/integrations/integration-catalog.tsx", + "kind": "jsx" + } + ] + }, + "m19d5a194983c": { + "source": "No integrations match your search", + "locations": [ + { + "file": "modules/integrations/integration-catalog.tsx", + "kind": "expression" + } + ] + }, + "m5113ef230a14": { + "source": "No integrations available", + "locations": [ + { + "file": "modules/integrations/integration-catalog.tsx", + "kind": "expression" + } + ] + }, + "mff762330c43e": { + "source": "Try adjusting your search or filters.", + "locations": [ + { + "file": "modules/integrations/integration-catalog.tsx", + "kind": "expression" + } + ] + }, + "md431d4ccf029": { + "source": "Native integrations will appear here once configured.", + "locations": [ + { + "file": "modules/integrations/integration-catalog.tsx", + "kind": "expression" + } + ] + }, + "m539da25ea18e": { + "source": "doesn't need configuration. Just enable it.", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + } + ] + }, + "mce33c1c1d874": { + "source": "Get your", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + } + ] + }, + "me37c838fdfec": { + "source": "OAuth client_id + client_secret", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "expression" + } + ] + }, + "m631aada47dea": { + "source": "credentials", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "expression" + } + ] + }, + "m5561f8dd5d34": { + "source": "from the provider's developer console, then paste them below.", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + } + ] + }, + "me4a822d0504f": { + "source": "Open provider console", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + } + ] + }, + "mb14ea6eedba3": { + "source": "Required scopes:", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + } + ] + }, + "mf3170d57a386": { + "source": "Client ID and Client Secret are required.", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "feedback" + } + ] + }, + "m380e05b0ebe3": { + "source": "Set this Redirect URI in the provider console:", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + } + ] + }, + "maa4c3d948aed": { + "source": "Currently configured via", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + } + ] + }, + "mf651fcd956f5": { + "source": "env var. Saving here will override that with a DB-stored credential.", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + } + ] + }, + "m97d0ee620b54": { + "source": "Currently configured", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + } + ] + }, + "md41bd6455eb9": { + "source": ". Submitting will replace the existing credential.", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + } + ] + }, + "m2651215b6513": { + "source": "OAuth Client ID from provider console", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "attribute" + } + ] + }, + "mc02ed8192606": { + "source": "OAuth Client Secret", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "attribute" + } + ] + }, + "m096b73624b09": { + "source": "Saving", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + } + ] + }, + "m8e171e87357e": { + "source": "Save Credentials", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + } + ] + }, + "m6596f82794f5": { + "source": "Workspace-scoped non-OAuth credentials are not supported yet from this admin form.", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "feedback" + } + ] + }, + "m8e795a2f5a9d": { + "source": "Authentication token", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "attribute" + } + ] + }, + "m731fe041ce28": { + "source": "Select…", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + } + ] + }, + "mb5005e90891c": { + "source": "Secrets are encrypted at rest. Only platform admins can see configuration status.", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "jsx" + } + ] + }, + "md403c686f6a1": { + "source": "Connecting", + "locations": [ + { + "file": "modules/integrations/integration-connect-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mb6d61aa7afb3": { + "source": "isn’t enabled for this workspace yet. Ask a workspace admin to enable it under Settings → Integrations, then try again.", + "locations": [ + { + "file": "modules/integrations/integration-connect-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mfa1f0a72f5dd": { + "source": "Active Connections", + "locations": [ + { + "file": "modules/integrations/integration-detail-sheet.tsx", + "kind": "jsx" + } + ] + }, + "m639a40e82b9a": { + "source": "Connection", + "locations": [ + { + "file": "modules/integrations/integration-detail-sheet.tsx", + "kind": "expression" + } + ] + }, + "m782eb73bb5de": { + "source": "Connection is healthy", + "locations": [ + { + "file": "modules/integrations/integration-detail-sheet.tsx", + "kind": "expression" + } + ] + }, + "md597d662a8cb": { + "source": "Confirm disconnect?", + "locations": [ + { + "file": "modules/integrations/integration-detail-sheet.tsx", + "kind": "expression" + } + ] + }, + "m98a28df264af": { + "source": "Available Actions", + "locations": [ + { + "file": "modules/integrations/integration-detail-sheet.tsx", + "kind": "jsx" + } + ] + }, + "m147abf3da84c": { + "source": "Loading actions...", + "locations": [ + { + "file": "modules/integrations/integration-detail-sheet.tsx", + "kind": "jsx" + } + ] + }, + "m72d95278c055": { + "source": "No actions discovered for this integration yet.", + "locations": [ + { + "file": "modules/integrations/integration-detail-sheet.tsx", + "kind": "jsx" + } + ] + }, + "m2c5b12ca6e17": { + "source": "Add Another Connection", + "locations": [ + { + "file": "modules/integrations/integration-detail-sheet.tsx", + "kind": "jsx" + } + ] + }, + "m27c785c6b5dd": { + "source": "Email, calendar, docs, chat", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "data" + } + ] + }, + "m9c24f45a7ea9": { + "source": "Dev", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "data" + } + ] + }, + "me5e4c2acbc94": { + "source": "Source, tickets, errors, on-call", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "data" + } + ] + }, + "m684f8be4db83": { + "source": "Email, CRM, payments, booking", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "data" + } + ] + }, + "mb7d43e0d3140": { + "source": "None of this preset's integrations are in the catalog yet.", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "feedback" + } + ] + }, + "m4109e7a85cde": { + "source": "Integrations enabled here apply", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "m1d618a102b46": { + "source": "globally to all workspaces", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "mafa37747e942": { + "source": "(existing and new). Users across the platform will see these integrations in their catalog.", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "m92c1cdfdf4cb": { + "source": "Enabled", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "expression" + }, + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "expression" + }, + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "expression" + } + ] + }, + "mb0e1cdb33429": { + "source": "Configured (DB)", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "mec9969d40559": { + "source": "Via Env Vars", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "m7df4aae6b90f": { + "source": "Enabled, Needs Config", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "m0bfff22a132a": { + "source": "integration(s)", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "m0802ec6bbfbe": { + "source": "are enabled but missing credentials. Users won't be able to connect until credentials are configured. Click", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "m316bd5c5eaa7": { + "source": "on a row below to fix.", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "m6f7d88ffe0fb": { + "source": "are pre-configured via server environment variables (e.g.", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "m0b5b709a8e90": { + "source": "OAUTH_*_CLIENT_ID", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "m3c32cf357690": { + "source": "). These work automatically without manual OAuth setup here.", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "m679f443feccf": { + "source": "Quick start:", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "meb92cc52a766": { + "source": "integration", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/integrations/integrations-panel.tsx", + "kind": "jsx" + } + ] + }, + "mb69d6f19b253": { + "source": "Enabling", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "expression" + } + ] + }, + "mfd308574e3ab": { + "source": "Disabling", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "expression" + } + ] + }, + "m673804025742": { + "source": "Enable selected", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "expression" + } + ] + }, + "m369711b52078": { + "source": "Disable selected", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "expression" + } + ] + }, + "mfe3b58f14752": { + "source": "All Categories", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "m040a4f895460": { + "source": "Env Vars", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "expression" + } + ] + }, + "m7e841e94b722": { + "source": "Needs Config", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "expression" + } + ] + }, + "m416861c7e2c1": { + "source": "ENV", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "mf86f18497bc0": { + "source": "Platform credential configured", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "attribute" + } + ] + }, + "mcf3abc832664": { + "source": "DB", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "m6f35ac236a3b": { + "source": "Update credentials", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "expression" + } + ] + }, + "m59294028b1f1": { + "source": "Configure credentials", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "expression" + } + ] + }, + "m09d16bdcb6bc": { + "source": "No integrations match your filters.", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "m9f7ea773caac": { + "source": "Workspace:", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "jsx" + } + ] + }, + "m38a5be91af79": { + "source": "capability", + "locations": [ + { + "file": "modules/integrations/integrations-panel-cards.tsx", + "kind": "expression" + } + ] + }, + "m3fc0e5c4c484": { + "source": "capabilities", + "locations": [ + { + "file": "modules/integrations/integrations-panel-cards.tsx", + "kind": "expression" + } + ] + }, + "mc3240e01116f": { + "source": "Available Capabilities", + "locations": [ + { + "file": "modules/integrations/integrations-panel-cards.tsx", + "kind": "jsx" + } + ] + }, + "m553c2d7780ec": { + "source": "No capabilities discovered yet. Test the connection to discover what's available.", + "locations": [ + { + "file": "modules/integrations/integrations-panel-cards.tsx", + "kind": "jsx" + } + ] + }, + "m1abf62f6c6fa": { + "source": "Confirm Remove", + "locations": [ + { + "file": "modules/integrations/integrations-panel-cards.tsx", + "kind": "jsx" + } + ] + }, + "mdae69e4430f4": { + "source": "Custom MCP Connectors", + "locations": [ + { + "file": "modules/integrations/integrations-panel.tsx", + "kind": "jsx" + } + ] + }, + "mf246fd1ef9d3": { + "source": "Loading integrations...", + "locations": [ + { + "file": "modules/integrations/integrations-panel.tsx", + "kind": "jsx" + } + ] + }, + "mddb8b49a27b2": { + "source": "No integrations yet", + "locations": [ + { + "file": "modules/integrations/integrations-panel.tsx", + "kind": "jsx" + } + ] + }, + "mad38b13ff599": { + "source": "Connect third-party services and AI tools to extend your project.", + "locations": [ + { + "file": "modules/integrations/integrations-panel.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "m93a65009a550": { + "source": "Everyone in this workspace", + "locations": [ + { + "file": "modules/integrations/integrations-panel.tsx", + "kind": "attribute" + } + ] + }, + "mb4990c5afe4c": { + "source": "Everyone on this project", + "locations": [ + { + "file": "modules/integrations/integrations-panel.tsx", + "kind": "attribute" + } + ] + }, + "m47a9fe7ce5bb": { + "source": "Only me (personal)", + "locations": [ + { + "file": "modules/integrations/integrations-panel.tsx", + "kind": "attribute" + } + ] + }, + "m12a7bd86e0a4": { + "source": "connected", + "locations": [ + { + "file": "modules/integrations/integrations-panel.tsx", + "kind": "jsx" + } + ] + }, + "m5f031beeecbd": { + "source": "Pick an existing Supabase project from your organization, or let Doable create a brand-new one. Either way the API keys are wired up automatically.", + "locations": [ + { + "file": "modules/integrations/supabase-provision-dialog.tsx", + "kind": "expression" + } + ] + }, + "me4235ebe6c96": { + "source": "Loading your Supabase organizations...", + "locations": [ + { + "file": "modules/integrations/supabase-provision-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m94e8135c911c": { + "source": "US East (N. Virginia)", + "locations": [ + { + "file": "modules/integrations/supabase-provision-types.ts", + "kind": "data" + } + ] + }, + "m7343272444cf": { + "source": "US West (N. California)", + "locations": [ + { + "file": "modules/integrations/supabase-provision-types.ts", + "kind": "data" + } + ] + }, + "mb044c25b22cd": { + "source": "EU West (Ireland)", + "locations": [ + { + "file": "modules/integrations/supabase-provision-types.ts", + "kind": "data" + } + ] + }, + "m7cfb6caecb63": { + "source": "EU Central (Frankfurt)", + "locations": [ + { + "file": "modules/integrations/supabase-provision-types.ts", + "kind": "data" + } + ] + }, + "m758f62cc9ed2": { + "source": "Asia Pacific (Singapore)", + "locations": [ + { + "file": "modules/integrations/supabase-provision-types.ts", + "kind": "data" + } + ] + }, + "m558498b37a96": { + "source": "Asia Pacific (Tokyo)", + "locations": [ + { + "file": "modules/integrations/supabase-provision-types.ts", + "kind": "data" + } + ] + }, + "m133697121a8e": { + "source": "Asia Pacific (Mumbai)", + "locations": [ + { + "file": "modules/integrations/supabase-provision-types.ts", + "kind": "data" + } + ] + }, + "m0ee739f054d6": { + "source": "South America (São Paulo)", + "locations": [ + { + "file": "modules/integrations/supabase-provision-types.ts", + "kind": "data" + } + ] + }, + "m98a3dcd2d736": { + "source": "Sign in with Supabase so Doable can create projects on your behalf. You'll be redirected briefly to Supabase to authorize, then come right back here.", + "locations": [ + { + "file": "modules/integrations/supabase-provision-views.tsx", + "kind": "jsx" + } + ] + }, + "mecf5310c018f": { + "source": "Waiting for Supabase…", + "locations": [ + { + "file": "modules/integrations/supabase-provision-views.tsx", + "kind": "jsx" + } + ] + }, + "m4cdc78922e43": { + "source": "Sign in with Supabase", + "locations": [ + { + "file": "modules/integrations/supabase-provision-views.tsx", + "kind": "expression" + } + ] + }, + "ma287cb8a7f05": { + "source": "Pick a project — Doable will fetch its API keys and wire them into this app automatically.", + "locations": [ + { + "file": "modules/integrations/supabase-provision-views.tsx", + "kind": "jsx" + } + ] + }, + "m1eca6c02374e": { + "source": "You don't have any Supabase projects yet — let's create your first one.", + "locations": [ + { + "file": "modules/integrations/supabase-provision-views.tsx", + "kind": "jsx" + } + ] + }, + "m18d9d57bec2a": { + "source": "Supabase organization", + "locations": [ + { + "file": "modules/integrations/supabase-provision-views.tsx", + "kind": "jsx" + } + ] + }, + "md3a008ef1335": { + "source": "Region", + "locations": [ + { + "file": "modules/integrations/supabase-provision-views.tsx", + "kind": "jsx" + } + ] + }, + "m115b93fedc63": { + "source": "Connect existing project", + "locations": [ + { + "file": "modules/integrations/supabase-provision-views.tsx", + "kind": "jsx" + } + ] + }, + "m9f3df753a41a": { + "source": "Create new", + "locations": [ + { + "file": "modules/integrations/supabase-provision-views.tsx", + "kind": "jsx" + } + ] + }, + "mdb1a21a0bc2e": { + "source": "JSON", + "locations": [ + { + "file": "modules/marketplace/import-bundle-dialog.tsx", + "kind": "data" + }, + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "jsx" + } + ] + }, + "m7bc88ebb6d01": { + "source": "Zip", + "locations": [ + { + "file": "modules/marketplace/import-bundle-dialog.tsx", + "kind": "data" + } + ] + }, + "m76a692132c70": { + "source": "GitHub URL", + "locations": [ + { + "file": "modules/marketplace/import-bundle-dialog.tsx", + "kind": "data" + } + ] + }, + "mc2ae72317178": { + "source": "Import from outside Doable", + "locations": [ + { + "file": "modules/marketplace/import-bundle-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m3a7f5a60d97e": { + "source": "Bring in an environment from a JSON manifest, Standards Zip, or public GitHub repo.", + "locations": [ + { + "file": "modules/marketplace/import-bundle-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m18cd692efad9": { + "source": "Paste a", + "locations": [ + { + "file": "modules/marketplace/import-bundle-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m658a850d329e": { + "source": "manifest. Anything that fails schema validation is rejected.", + "locations": [ + { + "file": "modules/marketplace/import-bundle-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mf7573af38621": { + "source": "Drop a Standards Zip here, or click to browse", + "locations": [ + { + "file": "modules/marketplace/import-bundle-dialog.tsx", + "kind": "expression" + } + ] + }, + "m222e1ef4a020": { + "source": "Compatible with Anthropic Skills, Cursor Rules, MCP, and Claude Code plugin layouts.", + "locations": [ + { + "file": "modules/marketplace/import-bundle-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m55ec8dcd8925": { + "source": "Public repos only. The import will tarball the path and decode it as a Standards Zip.", + "locations": [ + { + "file": "modules/marketplace/import-bundle-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m1d965e7ab1cf": { + "source": "Imports land as a draft environment in your workspace. They never run code or call external services until you authorise each connector individually.", + "locations": [ + { + "file": "modules/marketplace/import-bundle-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m91bae713515c": { + "source": "Imported.", + "locations": [ + { + "file": "modules/marketplace/import-bundle-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m321f179c80ba": { + "source": "Imported", + "locations": [ + { + "file": "modules/marketplace/import-bundle-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m2621d6ab4311": { + "source": "Import to workspace", + "locations": [ + { + "file": "modules/marketplace/import-bundle-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m3db223d239a5": { + "source": "You may be asked to provide credentials (API keys, OAuth)", + "locations": [ + { + "file": "modules/marketplace/install-permission-dialog.tsx", + "kind": "data" + } + ] + }, + "m1c5802102833": { + "source": "Install “", + "locations": [ + { + "file": "modules/marketplace/install-permission-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mf731842ea02e": { + "source": "Review what this bundle will add to your workspace.", + "locations": [ + { + "file": "modules/marketplace/install-permission-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mdf498282bede": { + "source": "Includes", + "locations": [ + { + "file": "modules/marketplace/install-permission-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m4a33eacd5fa6": { + "source": "item", + "locations": [ + { + "file": "modules/marketplace/install-permission-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mb029f856acbb": { + "source": "that need your attention.", + "locations": [ + { + "file": "modules/marketplace/install-permission-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mafce17e84a37": { + "source": "This bundle is empty.", + "locations": [ + { + "file": "modules/marketplace/install-permission-dialog.tsx", + "kind": "jsx" + } + ] + }, + "maf0184ed8833": { + "source": "Install creates an isolated copy in your workspace. The original publisher cannot modify it after install.", + "locations": [ + { + "file": "modules/marketplace/install-permission-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mc683491047fc": { + "source": "Installed.", + "locations": [ + { + "file": "modules/marketplace/install-permission-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mfe579e76f015": { + "source": "Nothing to install — this bundle has no skills, rules, knowledge, or connectors.", + "locations": [ + { + "file": "modules/marketplace/install-permission-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m07ae7fd68456": { + "source": "Installing...", + "locations": [ + { + "file": "modules/marketplace/install-permission-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mc741d1dfa9f5": { + "source": "Install to workspace", + "locations": [ + { + "file": "modules/marketplace/install-permission-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mbcd8cc53f40e": { + "source": "No description", + "locations": [ + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "expression" + } + ] + }, + "m9c53c074d7ac": { + "source": "skill", + "locations": [ + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "jsx" + } + ] + }, + "m7369949b47ef": { + "source": "rule", + "locations": [ + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "jsx" + } + ] + }, + "m7322e503e2e3": { + "source": "Import a bundle from JSON, a Standards Zip, or a public GitHub URL", + "locations": [ + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "attribute" + } + ] + }, + "m86794d6a910b": { + "source": "Manage listings you've published", + "locations": [ + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "attribute" + } + ] + }, + "mb07a607c3b8d": { + "source": "Package one of your environments and list it", + "locations": [ + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "attribute" + } + ] + }, + "m985b7ac97956": { + "source": "Install AI environments — skills, rules, knowledge, and MCP connectors — created by the community.", + "locations": [ + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "jsx" + } + ] + }, + "m86d94cb27e98": { + "source": "Search environments, skills, tags...", + "locations": [ + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "attribute" + } + ] + }, + "m76327dec9ae3": { + "source": "Popular", + "locations": [ + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "jsx" + } + ] + }, + "ma941983250b0": { + "source": "No listings found", + "locations": [ + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "jsx" + } + ] + }, + "m3becd866de1f": { + "source": "Try a different search term", + "locations": [ + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "expression" + } + ] + }, + "mc38607c4f2d3": { + "source": "Be the first to publish an environment!", + "locations": [ + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "expression" + } + ] + }, + "mba5285161ba6": { + "source": "environment", + "locations": [ + { + "file": "modules/marketplace/marketplace-panel.tsx", + "kind": "jsx" + } + ] + }, + "mcd46fcfce46d": { + "source": "Spam or low effort", + "locations": [ + { + "file": "modules/marketplace/report-listing-dialog.tsx", + "kind": "data" + } + ] + }, + "mdce34cc99e59": { + "source": "Malware / malicious behaviour", + "locations": [ + { + "file": "modules/marketplace/report-listing-dialog.tsx", + "kind": "data" + } + ] + }, + "m8ea03160b2fd": { + "source": "Broken or non-functional", + "locations": [ + { + "file": "modules/marketplace/report-listing-dialog.tsx", + "kind": "data" + } + ] + }, + "m940bd85c865f": { + "source": "Inappropriate content", + "locations": [ + { + "file": "modules/marketplace/report-listing-dialog.tsx", + "kind": "data" + } + ] + }, + "mdbc94458ce4f": { + "source": "Copyright / trademark violation", + "locations": [ + { + "file": "modules/marketplace/report-listing-dialog.tsx", + "kind": "data" + } + ] + }, + "ma4d5cce85c7a": { + "source": "Tell us what's wrong with “", + "locations": [ + { + "file": "modules/marketplace/report-listing-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mf560e7f3a325": { + "source": "”. Reports are reviewed by moderators.", + "locations": [ + { + "file": "modules/marketplace/report-listing-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mf81ab834de5f": { + "source": "Reason", + "locations": [ + { + "file": "modules/marketplace/report-listing-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mdcac920e005d": { + "source": "Anything that helps moderators triage…", + "locations": [ + { + "file": "modules/marketplace/report-listing-dialog.tsx", + "kind": "attribute" + } + ] + }, + "m9e23a4d76b1b": { + "source": "Report received — thanks.", + "locations": [ + { + "file": "modules/marketplace/report-listing-dialog.tsx", + "kind": "jsx" + } + ] + }, + "mb41fd589ad91": { + "source": "Submit report", + "locations": [ + { + "file": "modules/marketplace/report-listing-dialog.tsx", + "kind": "jsx" + } + ] + }, + "m811f66f2beb9": { + "source": "Loading GitHub settings...", + "locations": [ + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "jsx" + } + ] + }, + "md3d6cd5328a1": { + "source": "GitHub Integration", + "locations": [ + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "jsx" + } + ] + }, + "mf57a4f283920": { + "source": "Connect your project to GitHub for version control and collaboration.", + "locations": [ + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "jsx" + } + ] + }, + "m992e5b297a53": { + "source": "Force Push (overwrite remote)", + "locations": [ + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "jsx" + } + ] + }, + "m8212e6f6f430": { + "source": "Not connected to GitHub", + "locations": [ + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "jsx" + } + ] + }, + "mebabde2d65a9": { + "source": "Connect to push and pull code, track changes, and collaborate.", + "locations": [ + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "jsx" + } + ] + }, + "m5db99d7cbac2": { + "source": "Use the GitHub button in the editor toolbar to connect this project.", + "locations": [ + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "jsx" + } + ] + }, + "mcdeacf620667": { + "source": "Connected Repository", + "locations": [ + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "jsx" + } + ] + }, + "mb8a50d7f479c": { + "source": "Branch:", + "locations": [ + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "jsx" + } + ] + }, + "m5f33f770d929": { + "source": "Last synced:", + "locations": [ + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "jsx" + } + ] + }, + "m8c40e9b0c098": { + "source": "Download the latest changes from the remote repository.", + "locations": [ + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "jsx" + } + ] + }, + "mb66d044181a0": { + "source": "Pull", + "locations": [ + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "expression" + } + ] + }, + "mbacf530d4a91": { + "source": "Recent Sync History", + "locations": [ + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "jsx" + } + ] + }, + "m1d1a296c451c": { + "source": "Disconnect Repository", + "locations": [ + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "jsx" + } + ] + }, + "m8d782fbb3ff6": { + "source": "Removes the connection. Your code will not be deleted.", + "locations": [ + { + "file": "modules/settings/components/github-settings.tsx", + "kind": "jsx" + } + ] + }, + "m7f0c2893110a": { + "source": "Enter a valid URL to discover", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "feedback" + } + ] + }, + "m604fd1b2e29c": { + "source": "Name is required", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "feedback" + } + ] + }, + "mbd6df736adbf": { + "source": "Server URL is required for HTTP transports", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "feedback" + } + ] + }, + "m88c96d59e8c9": { + "source": "Command is required for stdio transport", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "feedback" + } + ] + }, + "m2fdba7aa01af": { + "source": "Add MCP Server", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/mcp-panel.tsx", + "kind": "jsx" + } + ] + }, + "m810414c64a68": { + "source": "Transport Type", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "mc4773c2e3148": { + "source": "Server URL *", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "meee8aee46a70": { + "source": "Discover server capabilities", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "attribute" + } + ] + }, + "m9c26a88a88fc": { + "source": "Command *", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "me1e6ca97e71a": { + "source": "npx -y @modelcontextprotocol/server-filesystem", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "attribute" + } + ] + }, + "m42057c1bd3ee": { + "source": "Arguments (comma-separated)", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m862fead051be": { + "source": "Name *", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "mb334c83ff115": { + "source": "My MCP Server", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "attribute" + } + ] + }, + "m7e02a31a539e": { + "source": "Auto-detected:", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m12e194e558e2": { + "source": "What does this server provide?", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "attribute" + } + ] + }, + "mc9ca25454a8b": { + "source": "Server requires:", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "mf5864652d5bf": { + "source": "Token sent as Authorization: Bearer ...", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "attribute" + } + ] + }, + "m6e58dfc8e692": { + "source": "Header Name", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m1b06b0bb1e70": { + "source": "X-API-Key (default)", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "attribute" + } + ] + }, + "m2d21ece0b57c": { + "source": "Sent as the header value", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "attribute" + } + ] + }, + "mb96ed27eabea": { + "source": "OAuth authorization available", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m094661ea7645": { + "source": "Authorization server:", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "ma694d6512292": { + "source": "Connected successfully! You can close this form.", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m349f82870358": { + "source": "Waiting for authorization...", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "expression" + } + ] + }, + "md82f54134beb": { + "source": "Connect with OAuth", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "expression" + } + ] + }, + "mf9db72ced1ee": { + "source": "Access Token", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m0e65e48637d3": { + "source": "OAuth access token (manual entry)", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "attribute" + } + ] + }, + "ma8322c6de1b6": { + "source": "Enter an access token manually, or enter the server URL above and click Discover to find the OAuth flow.", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m4c9c57419990": { + "source": "Client ID (optional)", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m8e7141f4dfe7": { + "source": "Client ID if required by the server", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "attribute" + } + ] + }, + "m1b6f8f11a2d7": { + "source": "Some OAuth servers require a client ID. Leave empty if the server supports public clients.", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m1124ecc667c5": { + "source": "Environment Variables", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m39acc1835cf0": { + "source": "Optional. Passed to the stdio process via its environment.", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m5ca24005b740": { + "source": "KEY", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "attribute" + } + ] + }, + "mcd42404d52ad": { + "source": "value", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "attribute" + } + ] + }, + "mda8993ec0654": { + "source": "Add Server", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "mced5e64d4274": { + "source": "Server not auto-detected", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m1c3be50c7977": { + "source": "You can still add it manually — fill in the details below.", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "expression" + } + ] + }, + "m5d24f55e2c2f": { + "source": "Server discovered", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m2683cad48a14": { + "source": "Name:", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m9e3391e9bf07": { + "source": "Homepage", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "mea93d6a262ec": { + "source": "Tools", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m5f2e66e65397": { + "source": "Prompts", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "mef718e7031ce": { + "source": "tools available:", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m187897ce0afc": { + "source": "more", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m743c1043d543": { + "source": "⚠ This server requires", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "mb9d906284539": { + "source": "authentication", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m2bcf7ca31bca": { + "source": "🔗 OAuth endpoint discovered — use the \"Connect with OAuth\" button below to authorize", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "m8b38d0056b17": { + "source": "OAuth metadata could not be auto-discovered. You can enter an access token manually below.", + "locations": [ + { + "file": "modules/settings/components/mcp-add-server-form.tsx", + "kind": "jsx" + } + ] + }, + "maaead4abf5d0": { + "source": "Transport", + "locations": [ + { + "file": "modules/settings/components/mcp-connector-card.tsx", + "kind": "jsx" + } + ] + }, + "me82e22633f85": { + "source": "Args", + "locations": [ + { + "file": "modules/settings/components/mcp-connector-card.tsx", + "kind": "jsx" + } + ] + }, + "m8eb3ea9bbde6": { + "source": "Auth", + "locations": [ + { + "file": "modules/settings/components/mcp-connector-card.tsx", + "kind": "jsx" + } + ] + }, + "mb073f6c68ef8": { + "source": "Scope", + "locations": [ + { + "file": "modules/settings/components/mcp-connector-card.tsx", + "kind": "jsx" + }, + { + "file": "modules/skills/skills-panel-components.tsx", + "kind": "jsx" + } + ] + }, + "m60cffa1d7158": { + "source": "Tools (", + "locations": [ + { + "file": "modules/settings/components/mcp-connector-card.tsx", + "kind": "jsx" + } + ] + }, + "mcbdf83b11de6": { + "source": "Re-run the OAuth login to refresh this connection (keeps the same server and name)", + "locations": [ + { + "file": "modules/settings/components/mcp-connector-card.tsx", + "kind": "attribute" + } + ] + }, + "mbf8a9eab9e7e": { + "source": "Reconnect", + "locations": [ + { + "file": "modules/settings/components/mcp-connector-card.tsx", + "kind": "jsx" + } + ] + }, + "mfb1e6fa55327": { + "source": "Deactivate", + "locations": [ + { + "file": "modules/settings/components/mcp-connector-card.tsx", + "kind": "jsx" + } + ] + }, + "m24433c70eba5": { + "source": "Activate", + "locations": [ + { + "file": "modules/settings/components/mcp-connector-card.tsx", + "kind": "jsx" + } + ] + }, + "ma7f54311a3e6": { + "source": "Confirm Delete", + "locations": [ + { + "file": "modules/settings/components/mcp-connector-card.tsx", + "kind": "jsx" + } + ] + }, + "mc419005e98b9": { + "source": "Connect Model Context Protocol servers to give your AI assistant access to external tools and data.", + "locations": [ + { + "file": "modules/settings/components/mcp-panel.tsx", + "kind": "jsx" + } + ] + }, + "mb3eacd33433b": { + "source": "server", + "locations": [ + { + "file": "modules/settings/components/mcp-panel.tsx", + "kind": "jsx" + } + ] + }, + "m201582247500": { + "source": "configured", + "locations": [ + { + "file": "modules/settings/components/mcp-panel.tsx", + "kind": "jsx" + } + ] + }, + "mad9662696670": { + "source": "Loading MCP servers...", + "locations": [ + { + "file": "modules/settings/components/mcp-panel.tsx", + "kind": "jsx" + } + ] + }, + "m013e6b9db9d2": { + "source": "No MCP servers configured", + "locations": [ + { + "file": "modules/settings/components/mcp-panel.tsx", + "kind": "jsx" + } + ] + }, + "m97bf0e1b8107": { + "source": "MCP servers let your AI assistant use external tools like databases, APIs, file systems, and more.", + "locations": [ + { + "file": "modules/settings/components/mcp-panel.tsx", + "kind": "jsx" + } + ] + }, + "mebef55227b69": { + "source": "Add Your First Server", + "locations": [ + { + "file": "modules/settings/components/mcp-panel.tsx", + "kind": "jsx" + } + ] + }, + "mb17dc3d5a74d": { + "source": "Use the model configured in AI Settings for this workspace.", + "locations": [ + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "jsx" + } + ] + }, + "m572b0dfcf0a8": { + "source": "Override for this project", + "locations": [ + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "jsx" + } + ] + }, + "m2b19d82e282b": { + "source": "Pick a provider and model from your workspace catalog.", + "locations": [ + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "jsx" + } + ] + }, + "md8de930be069": { + "source": "Loading providers…", + "locations": [ + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "jsx" + } + ] + }, + "mf8225de648cf": { + "source": "Provider source", + "locations": [ + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "jsx" + } + ] + }, + "mfee405014d78": { + "source": "Custom provider", + "locations": [ + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "jsx" + } + ] + }, + "m42b998374988": { + "source": "Server default", + "locations": [ + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "jsx" + } + ] + }, + "mcc8b4624f765": { + "source": "Loading models…", + "locations": [ + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "jsx" + } + ] + }, + "mc4985ffa6928": { + "source": "Select a model…", + "locations": [ + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "jsx" + } + ] + }, + "m8ee47e5e4955": { + "source": "Select a provider…", + "locations": [ + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "jsx" + } + ] + }, + "m81d707aca8c4": { + "source": "No workspace providers configured. Add one in", + "locations": [ + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "jsx" + } + ] + }, + "m9606bfc49ee3": { + "source": "Refresh model list", + "locations": [ + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "attribute" + } + ] + }, + "ma7d21d08d37b": { + "source": "No models discovered yet. Click Refresh or check the provider in AI Settings.", + "locations": [ + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "expression" + } + ] + }, + "me43fdd487cfb": { + "source": "Select a provider first.", + "locations": [ + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "expression" + } + ] + }, + "m454b4687ffb6": { + "source": "Current saved override:", + "locations": [ + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "jsx" + } + ] + }, + "mad3e57500f14": { + "source": "— pick a model above to update it.", + "locations": [ + { + "file": "modules/settings/components/project-chat-model-picker.tsx", + "kind": "jsx" + } + ] + }, + "m41bdb214d4a7": { + "source": "Knowledge (.doable/)", + "locations": [ + { + "file": "modules/settings/components/project-settings-context.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/components/project-settings-context.tsx", + "kind": "attribute" + } + ] + }, + "m780a89408ef5": { + "source": "Knowledge files guide the AI's behavior when editing your project. Each file serves a different purpose.", + "locations": [ + { + "file": "modules/settings/components/project-settings-context.tsx", + "kind": "attribute" + } + ] + }, + "m7cf46d84e370": { + "source": "files,", + "locations": [ + { + "file": "modules/settings/components/project-settings-context.tsx", + "kind": "jsx" + } + ] + }, + "m75fba3b7fbcd": { + "source": "% of budget used", + "locations": [ + { + "file": "modules/settings/components/project-settings-context.tsx", + "kind": "jsx" + } + ] + }, + "m2cb221edd527": { + "source": "Empty -- click to edit", + "locations": [ + { + "file": "modules/settings/components/project-settings-context.tsx", + "kind": "expression" + }, + { + "file": "modules/skills/skills-panel-components.tsx", + "kind": "expression" + } + ] + }, + "m6250d5725dda": { + "source": "Unsaved", + "locations": [ + { + "file": "modules/settings/components/project-settings-context.tsx", + "kind": "jsx" + } + ] + }, + "mb3d19c7f1b7d": { + "source": "Transfer Project", + "locations": [ + { + "file": "modules/settings/components/project-settings-danger.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-danger.tsx", + "kind": "jsx" + } + ] + }, + "m01082fdad286": { + "source": "Transfer this project to another workspace. The project will be moved along with all its files, settings, and deployment history.", + "locations": [ + { + "file": "modules/settings/components/project-settings-danger.tsx", + "kind": "jsx" + } + ] + }, + "mea0f15f9a0cb": { + "source": "Destination workspace owner email", + "locations": [ + { + "file": "modules/settings/components/project-settings-danger.tsx", + "kind": "jsx" + } + ] + }, + "mc8cd3c642730": { + "source": "owner@example.com", + "locations": [ + { + "file": "modules/settings/components/project-settings-danger.tsx", + "kind": "attribute" + } + ] + }, + "m136b84975307": { + "source": "Permanently delete this project and all its deployments, files, and data. This action cannot be undone.", + "locations": [ + { + "file": "modules/settings/components/project-settings-danger.tsx", + "kind": "jsx" + } + ] + }, + "m1c335e92c86b": { + "source": "Delete This Project", + "locations": [ + { + "file": "modules/settings/components/project-settings-danger.tsx", + "kind": "jsx" + } + ] + }, + "m0c88f5ee5691": { + "source": "Are you absolutely sure?", + "locations": [ + { + "file": "modules/settings/components/project-settings-danger.tsx", + "kind": "jsx" + }, + { + "file": "modules/workspace/components/workspace-settings-danger.tsx", + "kind": "jsx" + } + ] + }, + "mdbf2540da3b2": { + "source": "and all associated data. Type the project name below to confirm.", + "locations": [ + { + "file": "modules/settings/components/project-settings-danger.tsx", + "kind": "jsx" + } + ] + }, + "m83918ed6bc4f": { + "source": "to confirm", + "locations": [ + { + "file": "modules/settings/components/project-settings-danger.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "m666685f2f9a1": { + "source": "I understand, delete this project", + "locations": [ + { + "file": "modules/settings/components/project-settings-danger.tsx", + "kind": "expression" + } + ] + }, + "md36d7df3ead8": { + "source": "Doable for this project", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "attribute" + } + ] + }, + "ma8b2040de78f": { + "source": "When disabled, /__doable/ai/* returns 503 AI_DISABLED_FOR_PROJECT. Useful for paused projects or quota lockouts.", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "attribute" + } + ] + }, + "m75081b593d15": { + "source": "Disabled", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "expression" + } + ] + }, + "mc1ea40104894": { + "source": "Thinking content visibility", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "attribute" + } + ] + }, + "me17f37e96ef7": { + "source": "System prompt override", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "attribute" + } + ] + }, + "m3632ad92aaad": { + "source": "Prepended to every runtime chat call. Visible to the model only — never echoed to the client. Up to 4 KB.", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "attribute" + } + ] + }, + "med644a4967f2": { + "source": "chars (", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "md55648e6be99": { + "source": "%) — extra content beyond the cap is truncated client-side.", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "mbc5b45ae7b60": { + "source": "Reset to default", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "m9abc7b7a3843": { + "source": "Chat model override", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "attribute" + } + ] + }, + "m32bd0666e5c1": { + "source": "Overrides the workspace-resolved chat model for runtime chat in this project's generated app.", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "attribute" + } + ] + }, + "meee7a8fae13c": { + "source": "Embedding model override (destructive)", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "attribute" + } + ] + }, + "m1dabae936e70": { + "source": "Changing the embedding model permanently erases all existing embeddings for this project because pgvector column dimensions are fixed per model.", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "attribute" + } + ] + }, + "mc09f632874c2": { + "source": "Current:", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "m65a0fa6b5d75": { + "source": "(workspace/platform default)", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "expression" + } + ] + }, + "m527d4fc6dd01": { + "source": "Click below to walk through the destructive confirmation.", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "mc66ae680c148": { + "source": "Change embedding model…", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "m1b5874862421": { + "source": "Runtime token usage", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "attribute" + } + ] + }, + "me1c28d6e16c1": { + "source": "Aggregates of ai_usage_log rows for this project, grouped by mode.", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "attribute" + } + ] + }, + "m9755c8d7d44a": { + "source": "All time", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "expression" + } + ] + }, + "meb6b42f54c42": { + "source": "CSV", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "jsx" + } + ] + }, + "m79489561d9ef": { + "source": "Top models", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "m18827ebcc4c9": { + "source": "req ·", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "m1a7674eb4ee7": { + "source": "tok", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "me40350c7ab5b": { + "source": "Erase embeddings for this project?", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "m34584117f4bd": { + "source": "Changing the embedding model will permanently", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "me0739214a7cf": { + "source": "all existing embedding rows for this project (current model:", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "mb3ffbbff2d64": { + "source": "(default)", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "expression" + } + ] + }, + "m6befe4ab12fd": { + "source": "rows across", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "m793a6e89fdd4": { + "source": "table(s)).", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "m808fe16148a5": { + "source": "New embedding model", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "mfc0510589f8e": { + "source": "ERASE", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "attribute" + } + ] + }, + "m011d0e9f5ccf": { + "source": "Erase embeddings & switch model", + "locations": [ + { + "file": "modules/settings/components/project-settings-doable-ai.tsx", + "kind": "jsx" + } + ] + }, + "m38500dff72f5": { + "source": "Waiting for DNS", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "data" + } + ] + }, + "ma7d4a9f301ed": { + "source": "Verifying", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "data" + } + ] + }, + "mcb470ff16d18": { + "source": "SSL Provisioning", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "data" + } + ] + }, + "m9f2c59a113db": { + "source": "Removing", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "data" + } + ] + }, + "m4e08dbdaa06f": { + "source": "Default Domain", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "attribute" + } + ] + }, + "m913d537a218d": { + "source": "Your project is always accessible at its .doable.me subdomain.", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "attribute" + } + ] + }, + "maae50df57461": { + "source": "Default URL", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "jsx" + } + ] + }, + "md6069fcf719f": { + "source": ".doable.me", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "jsx" + } + ] + }, + "m1c8ac867f052": { + "source": "Visit", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-tabs.tsx", + "kind": "jsx" + } + ] + }, + "mc1683eeb070b": { + "source": "Custom Domain", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/components/project-settings-shared.tsx", + "kind": "data" + } + ] + }, + "m1b329de76913": { + "source": "Serve your published site from your own domain name.", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "attribute" + } + ] + }, + "mfb1dfb5d89e8": { + "source": "Pro+ Feature", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "jsx" + } + ] + }, + "m25a7608b4dc0": { + "source": "Custom domains are available on the Pro plan and above. Upgrade your workspace to connect your own domain.", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "jsx" + } + ] + }, + "m0f09df73147a": { + "source": "Add Domain", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "jsx" + } + ] + }, + "m16a49b5a4082": { + "source": "No custom domains configured. Add one above to get started.", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "jsx" + } + ] + }, + "ma12655756209": { + "source": "Configure DNS", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "jsx" + } + ] + }, + "m45037d12281e": { + "source": "Add this CNAME record in your Cloudflare DNS dashboard with the proxy (orange cloud) enabled.", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "jsx" + } + ] + }, + "m76b26edb7557": { + "source": "CNAME", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "jsx" + } + ] + }, + "m690b060136cb": { + "source": "Copy target", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "attribute" + } + ] + }, + "m813b1a6dead6": { + "source": "Your domain must be on Cloudflare DNS (free). The CNAME must be proxied (orange cloud ON). After adding the record, click Verify above.", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "jsx" + } + ] + }, + "m3eb998a330d2": { + "source": "Domain Active — SSL and routing configured via Cloudflare", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "jsx" + } + ] + }, + "m8f74681f2b64": { + "source": "HTTPS certificate managed by Cloudflare. Auto-renews.", + "locations": [ + { + "file": "modules/settings/components/project-settings-domain.tsx", + "kind": "jsx" + } + ] + }, + "m2ca4637a5b8a": { + "source": "Project Details", + "locations": [ + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "m875ea40080d7": { + "source": "Project Name", + "locations": [ + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "jsx" + } + ] + }, + "m51e38ecc92f5": { + "source": "My Project", + "locations": [ + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "m154d24f40bd2": { + "source": "A brief description of your project", + "locations": [ + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "m7448611d5f93": { + "source": "Visibility", + "locations": [ + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "mb755ad205da1": { + "source": "Anyone can view", + "locations": [ + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "jsx" + } + ] + }, + "m59a8280d96b0": { + "source": "Only you can access", + "locations": [ + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "jsx" + } + ] + }, + "mb9f34f54a981": { + "source": "Project Information", + "locations": [ + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "m041f49553f9c": { + "source": "Read-only metadata about your project.", + "locations": [ + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "m048c7f2ef9aa": { + "source": "Last Updated", + "locations": [ + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "m03fb44a5243d": { + "source": "Project URL", + "locations": [ + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "m0c643a753e53": { + "source": "GitHub Sync", + "locations": [ + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "m10d736b7b159": { + "source": "Push and pull code changes to keep your project in sync.", + "locations": [ + { + "file": "modules/settings/components/project-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "m7585eaf776ab": { + "source": "MCP & Integration Rate Limiting", + "locations": [ + { + "file": "modules/settings/components/project-settings-ratelimit.tsx", + "kind": "attribute" + } + ] + }, + "m8853515ebeea": { + "source": "Control how many MCP tool calls and integration requests this project can make per minute. Applies to all modes: preview, standalone, and published.", + "locations": [ + { + "file": "modules/settings/components/project-settings-ratelimit.tsx", + "kind": "attribute" + } + ] + }, + "m2b4f1669370f": { + "source": "Rate Limit Mode", + "locations": [ + { + "file": "modules/settings/components/project-settings-ratelimit.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "md8081c667c73": { + "source": "System Default", + "locations": [ + { + "file": "modules/settings/components/project-settings-ratelimit.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "m419b966d9002": { + "source": "600 calls/min for preview, 1200 calls/min for published apps with API keys", + "locations": [ + { + "file": "modules/settings/components/project-settings-ratelimit.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "m9e8d2ff6c1a6": { + "source": "Custom Limit", + "locations": [ + { + "file": "modules/settings/components/project-settings-ratelimit.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "md3ab7b8e5c0b": { + "source": "Set a specific calls-per-minute limit for this project", + "locations": [ + { + "file": "modules/settings/components/project-settings-ratelimit.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "me1f5485a7544": { + "source": "calls / minute", + "locations": [ + { + "file": "modules/settings/components/project-settings-ratelimit.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "m86ce906b46f4": { + "source": "Unlimited (No Rate Limiting)", + "locations": [ + { + "file": "modules/settings/components/project-settings-ratelimit.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "mbd8347bfbf7f": { + "source": "Disable rate limiting entirely. Use with caution — external MCP servers may still apply their own limits.", + "locations": [ + { + "file": "modules/settings/components/project-settings-ratelimit.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "m9c870aa6e5e9": { + "source": "How it works", + "locations": [ + { + "file": "modules/settings/components/project-settings-ratelimit.tsx", + "kind": "attribute" + } + ] + }, + "m5a1c6983f6af": { + "source": "Understanding the rate limiting architecture", + "locations": [ + { + "file": "modules/settings/components/project-settings-ratelimit.tsx", + "kind": "attribute" + } + ] + }, + "mf4fcdd413746": { + "source": "Rate limiting applies to all MCP tool calls and integration actions made by this project, regardless of how the app is accessed (editor preview, standalone URL, or published site).", + "locations": [ + { + "file": "modules/settings/components/project-settings-ratelimit.tsx", + "kind": "jsx" + } + ] + }, + "m15e63fd45a68": { + "source": "All requests flow through a", + "locations": [ + { + "file": "modules/settings/components/project-settings-ratelimit.tsx", + "kind": "jsx" + } + ] + }, + "mb8cc693dc129": { + "source": "single endpoint", + "locations": [ + { + "file": "modules/settings/components/project-settings-ratelimit.tsx", + "kind": "jsx" + } + ] + }, + "m44f921f1d59b": { + "source": "Preview & standalone: authenticated via short-lived JWT (15 min)", + "locations": [ + { + "file": "modules/settings/components/project-settings-ratelimit.tsx", + "kind": "jsx" + } + ] + }, + "m3f11c69bb699": { + "source": "Published apps: authenticated via project API key (dpk_*)", + "locations": [ + { + "file": "modules/settings/components/project-settings-ratelimit.tsx", + "kind": "jsx" + } + ] + }, + "m603421410c77": { + "source": "Rate limit is shared across all auth modes for this project", + "locations": [ + { + "file": "modules/settings/components/project-settings-ratelimit.tsx", + "kind": "jsx" + } + ] + }, + "m3332b048bd97": { + "source": "Save this key — it won't be shown again", + "locations": [ + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "m052f9bcf9ab8": { + "source": "No API keys yet. Keys are auto-provisioned on first publish, or you can create one manually below.", + "locations": [ + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "m7c9bbe5ec9b3": { + "source": "tool", + "locations": [ + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "meabc01f12ec3": { + "source": "allowed", + "locations": [ + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "m81c151f98a19": { + "source": "All tools", + "locations": [ + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "m89739b9d6a6d": { + "source": "Any origin", + "locations": [ + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "me29abcb7ef37": { + "source": "Revoke key", + "locations": [ + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "attribute" + } + ] + }, + "me1b30b3373a7": { + "source": "Create Client Key", + "locations": [ + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "mac65db0ffaac": { + "source": "Create Server Key", + "locations": [ + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "mc655f48b60f8": { + "source": "Client keys", + "locations": [ + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "m8b8d2cce80de": { + "source": "(dpk_c_*): For browser apps. Origin-bound, lower rate limits (600/min).", + "locations": [ + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "m9e0389f1fa44": { + "source": "Server keys", + "locations": [ + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "mbb1bad10c001": { + "source": "(dpk_s_*): For backend apps. No origin check, higher rate limits (1200/min).", + "locations": [ + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "m549886a83703": { + "source": "Auto-provisioned:", + "locations": [ + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "mf8de3dbf5971": { + "source": "When you publish, a client key is automatically created and scoped to exactly the MCP tools your app uses.", + "locations": [ + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "jsx" + } + ] + }, + "mc08f17eb9e11": { + "source": "API Keys", + "locations": [ + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "attribute" + } + ] + }, + "m5fa4d2fe9af0": { + "source": "Manage authentication keys for published apps. Auto-provisioned on first publish with tool-scoping and origin-binding.", + "locations": [ + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "attribute" + } + ] + }, + "m74dea5e67162": { + "source": "Rate Limiting", + "locations": [ + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "attribute" + } + ] + }, + "m41efb3a9935a": { + "source": "Control how many MCP tool calls and integration requests this project can make per minute.", + "locations": [ + { + "file": "modules/settings/components/project-settings-security.tsx", + "kind": "attribute" + } + ] + }, + "mf7c5bd1cc1a7": { + "source": "Live site accessible to all visitors", + "locations": [ + { + "file": "modules/settings/components/project-settings-tabs.tsx", + "kind": "data" + } + ] + }, + "m306fdcf2ba87": { + "source": "Test changes before publishing to production", + "locations": [ + { + "file": "modules/settings/components/project-settings-tabs.tsx", + "kind": "data" + } + ] + }, + "m51469c906261": { + "source": "Project Environment", + "locations": [ + { + "file": "modules/settings/components/project-settings-tabs.tsx", + "kind": "attribute" + } + ] + }, + "m81373ef0c23e": { + "source": "Override the workspace default environment for this project. The AI will use this environment's skills, rules, knowledge, and connectors.", + "locations": [ + { + "file": "modules/settings/components/project-settings-tabs.tsx", + "kind": "attribute" + } + ] + }, + "m7ffa22adfe78": { + "source": "No environments in this workspace yet. Create one from the Environments panel.", + "locations": [ + { + "file": "modules/settings/components/project-settings-tabs.tsx", + "kind": "jsx" + } + ] + }, + "m0b6adee87205": { + "source": "Use workspace default", + "locations": [ + { + "file": "modules/settings/components/project-settings-tabs.tsx", + "kind": "jsx" + } + ] + }, + "mefb1406f94e5": { + "source": "This project uses a custom environment override. The workspace default is bypassed.", + "locations": [ + { + "file": "modules/settings/components/project-settings-tabs.tsx", + "kind": "jsx" + } + ] + }, + "m0aea45f48490": { + "source": "Inheriting from workspace default. Select an environment above to override.", + "locations": [ + { + "file": "modules/settings/components/project-settings-tabs.tsx", + "kind": "jsx" + } + ] + }, + "m4d1441671a98": { + "source": "Environment Presets", + "locations": [ + { + "file": "modules/settings/components/project-settings-tabs.tsx", + "kind": "attribute" + } + ] + }, + "m06ea1944254c": { + "source": "Reusable bundles of skills, instructions, MCPs, and integrations applied to this workspace.", + "locations": [ + { + "file": "modules/settings/components/project-settings-tabs.tsx", + "kind": "attribute" + } + ] + }, + "m0ad959ad8db9": { + "source": "No environment presets", + "locations": [ + { + "file": "modules/settings/components/project-settings-tabs.tsx", + "kind": "jsx" + } + ] + }, + "m9caadf97bbfd": { + "source": "Create environment presets from the editor's Environments panel.", + "locations": [ + { + "file": "modules/settings/components/project-settings-tabs.tsx", + "kind": "jsx" + } + ] + }, + "m870a8ffd98f4": { + "source": "Deployment", + "locations": [ + { + "file": "modules/settings/components/project-settings-tabs.tsx", + "kind": "attribute" + } + ] + }, + "m12b1050c1067": { + "source": "Deployment environments for publishing your project.", + "locations": [ + { + "file": "modules/settings/components/project-settings-tabs.tsx", + "kind": "attribute" + } + ] + }, + "m61cbf7fa57d1": { + "source": "Last deployed:", + "locations": [ + { + "file": "modules/settings/components/project-settings-tabs.tsx", + "kind": "jsx" + } + ] + }, + "m758e8416eb8a": { + "source": "Project not found", + "locations": [ + { + "file": "modules/settings/components/project-settings.tsx", + "kind": "jsx" + } + ] + }, + "mdc652adf2479": { + "source": "The project may have been deleted or you don't have access.", + "locations": [ + { + "file": "modules/settings/components/project-settings.tsx", + "kind": "jsx" + } + ] + }, + "m7ce8f8cb9bff": { + "source": "Manage reusable skills and rules that shape how the AI works across your workspace.", + "locations": [ + { + "file": "modules/settings/components/project-settings.tsx", + "kind": "attribute" + } + ] + }, + "m3a0f0a5401fb": { + "source": "Skill content...", + "locations": [ + { + "file": "modules/settings/components/skills-rules-cards.tsx", + "kind": "attribute" + } + ] + }, + "m2ef3fb262631": { + "source": "Delete this skill?", + "locations": [ + { + "file": "modules/settings/components/skills-rules-cards.tsx", + "kind": "jsx" + } + ] + }, + "m7fe2a91dd453": { + "source": "New Skill", + "locations": [ + { + "file": "modules/settings/components/skills-rules-cards.tsx", + "kind": "jsx" + } + ] + }, + "m149c130c15f6": { + "source": "Describe what this skill teaches the AI...", + "locations": [ + { + "file": "modules/settings/components/skills-rules-cards.tsx", + "kind": "attribute" + } + ] + }, + "m143db7e359b1": { + "source": "No file patterns", + "locations": [ + { + "file": "modules/settings/components/skills-rules-cards.tsx", + "kind": "jsx" + } + ] + }, + "md8ad616783ba": { + "source": "File Patterns", + "locations": [ + { + "file": "modules/settings/components/skills-rules-cards.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/components/skills-rules-cards.tsx", + "kind": "jsx" + } + ] + }, + "m3c990110b4c4": { + "source": "*.tsx, *.ts, src/**/*.js", + "locations": [ + { + "file": "modules/settings/components/skills-rules-cards.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/components/skills-rules-cards.tsx", + "kind": "attribute" + } + ] + }, + "m860e8e6eee39": { + "source": "No file patterns — applies to all files", + "locations": [ + { + "file": "modules/settings/components/skills-rules-cards.tsx", + "kind": "jsx" + } + ] + }, + "m28007b7f8f11": { + "source": "Rule content...", + "locations": [ + { + "file": "modules/settings/components/skills-rules-cards.tsx", + "kind": "attribute" + }, + { + "file": "modules/skills/skills-panel-components.tsx", + "kind": "expression" + } + ] + }, + "m3a3de58afb86": { + "source": "Delete this rule?", + "locations": [ + { + "file": "modules/settings/components/skills-rules-cards.tsx", + "kind": "jsx" + } + ] + }, + "m3f82fe8e9de3": { + "source": "New Rule", + "locations": [ + { + "file": "modules/settings/components/skills-rules-cards.tsx", + "kind": "jsx" + } + ] + }, + "mbfd1311eba42": { + "source": "(comma-separated, optional)", + "locations": [ + { + "file": "modules/settings/components/skills-rules-cards.tsx", + "kind": "jsx" + } + ] + }, + "mf3bacf08ec15": { + "source": "Describe the rule the AI should follow...", + "locations": [ + { + "file": "modules/settings/components/skills-rules-cards.tsx", + "kind": "attribute" + } + ] + }, + "mf01ec050eca5": { + "source": "Add Skill", + "locations": [ + { + "file": "modules/settings/components/skills-rules-panel.tsx", + "kind": "jsx" + } + ] + }, + "m6d8b4a3d59cb": { + "source": "Skills teach the AI specific capabilities or knowledge. They are included in the AI's context when working on your projects.", + "locations": [ + { + "file": "modules/settings/components/skills-rules-panel.tsx", + "kind": "jsx" + } + ] + }, + "m476f61ba4fc4": { + "source": "No skills yet. Add one to teach the AI new capabilities.", + "locations": [ + { + "file": "modules/settings/components/skills-rules-panel.tsx", + "kind": "jsx" + } + ] + }, + "m968c3cb8fb70": { + "source": "Add Rule", + "locations": [ + { + "file": "modules/settings/components/skills-rules-panel.tsx", + "kind": "jsx" + } + ] + }, + "m0cadbcfb5f26": { + "source": "Rules define constraints and conventions the AI must follow. File patterns control which files a rule applies to.", + "locations": [ + { + "file": "modules/settings/components/skills-rules-panel.tsx", + "kind": "jsx" + } + ] + }, + "ma4fe917c1d4e": { + "source": "No rules yet. Add one to set constraints for the AI.", + "locations": [ + { + "file": "modules/settings/components/skills-rules-panel.tsx", + "kind": "jsx" + } + ] + }, + "m07b091a3fdc4": { + "source": "Schema", + "locations": [ + { + "file": "modules/settings/database/database-tab.tsx", + "kind": "data" + }, + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "attribute" + } + ] + }, + "m101f2ff3de22": { + "source": "Rows", + "locations": [ + { + "file": "modules/settings/database/database-tab.tsx", + "kind": "data" + }, + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "attribute" + } + ] + }, + "m80d2e18c7da9": { + "source": "Queries", + "locations": [ + { + "file": "modules/settings/database/database-tab.tsx", + "kind": "data" + }, + { + "file": "modules/settings/database/panes/queries-pane.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/database/panes/queries-pane.tsx", + "kind": "attribute" + } + ] + }, + "mfe0313c05643": { + "source": "Migrations", + "locations": [ + { + "file": "modules/settings/database/database-tab.tsx", + "kind": "data" + }, + { + "file": "modules/settings/database/panes/migrations-pane.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/database/panes/migrations-pane.tsx", + "kind": "attribute" + } + ] + }, + "m1a82ab93f701": { + "source": "Database panes", + "locations": [ + { + "file": "modules/settings/database/database-tab.tsx", + "kind": "attribute" + } + ] + }, + "m874caa6f7aeb": { + "source": "Drop tables", + "locations": [ + { + "file": "modules/settings/database/panes/danger-pane.tsx", + "kind": "attribute" + } + ] + }, + "m52171f6cf990": { + "source": "Permanently delete a table and all its data. This cannot be undone.", + "locations": [ + { + "file": "modules/settings/database/panes/danger-pane.tsx", + "kind": "attribute" + } + ] + }, + "m3361bd462810": { + "source": "No tables to drop.", + "locations": [ + { + "file": "modules/settings/database/panes/danger-pane.tsx", + "kind": "jsx" + } + ] + }, + "mc8af9ae37a48": { + "source": "Drop", + "locations": [ + { + "file": "modules/settings/database/panes/danger-pane.tsx", + "kind": "jsx" + } + ] + }, + "m53e3bd5e1031": { + "source": "Drop table", + "locations": [ + { + "file": "modules/settings/database/panes/danger-pane.tsx", + "kind": "jsx" + } + ] + }, + "mf65a3dd84895": { + "source": "Reset database", + "locations": [ + { + "file": "modules/settings/database/panes/danger-pane.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/database/panes/danger-pane.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/database/panes/danger-pane.tsx", + "kind": "jsx" + } + ] + }, + "m7eeaf76242de": { + "source": "Drop ALL tables and start from an empty database. This cannot be undone.", + "locations": [ + { + "file": "modules/settings/database/panes/danger-pane.tsx", + "kind": "attribute" + } + ] + }, + "m01be30bb4a27": { + "source": "reset", + "locations": [ + { + "file": "modules/settings/database/panes/danger-pane.tsx", + "kind": "jsx" + } + ] + }, + "me47560c7e215": { + "source": "to drop every table:", + "locations": [ + { + "file": "modules/settings/database/panes/danger-pane.tsx", + "kind": "jsx" + } + ] + }, + "m5aeb4bed9530": { + "source": "Applied migration history for your database.", + "locations": [ + { + "file": "modules/settings/database/panes/migrations-pane.tsx", + "kind": "attribute" + } + ] + }, + "md1f962d75c7d": { + "source": "No migrations yet", + "locations": [ + { + "file": "modules/settings/database/panes/migrations-pane.tsx", + "kind": "jsx" + } + ] + }, + "mab770d4f42dc": { + "source": "Migrations appear here once the AI applies schema changes via the built-in database.", + "locations": [ + { + "file": "modules/settings/database/panes/migrations-pane.tsx", + "kind": "jsx" + } + ] + }, + "mcc149190687e": { + "source": "Migration", + "locations": [ + { + "file": "modules/settings/database/panes/migrations-pane.tsx", + "kind": "jsx" + } + ] + }, + "ma91069147f9b": { + "source": "Hash", + "locations": [ + { + "file": "modules/settings/database/panes/migrations-pane.tsx", + "kind": "jsx" + } + ] + }, + "m47a5180f7f62": { + "source": "Database Overview", + "locations": [ + { + "file": "modules/settings/database/panes/overview-pane.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/database/panes/overview-pane.tsx", + "kind": "attribute" + } + ] + }, + "m5426a78b8f83": { + "source": "A snapshot of your project database.", + "locations": [ + { + "file": "modules/settings/database/panes/overview-pane.tsx", + "kind": "attribute" + } + ] + }, + "m309715f1d891": { + "source": "No tables yet", + "locations": [ + { + "file": "modules/settings/database/panes/overview-pane.tsx", + "kind": "jsx" + } + ] + }, + "m611a7763cad3": { + "source": "Ask the AI to add some — it will create your schema automatically.", + "locations": [ + { + "file": "modules/settings/database/panes/overview-pane.tsx", + "kind": "jsx" + } + ] + }, + "m24839d0c0477": { + "source": "Total rows", + "locations": [ + { + "file": "modules/settings/database/panes/overview-pane.tsx", + "kind": "attribute" + } + ] + }, + "m90b901a30c3f": { + "source": "Indexes", + "locations": [ + { + "file": "modules/settings/database/panes/overview-pane.tsx", + "kind": "attribute" + } + ] + }, + "md3ad1f1f8c9c": { + "source": "Policies", + "locations": [ + { + "file": "modules/settings/database/panes/overview-pane.tsx", + "kind": "attribute" + } + ] + }, + "m1810407f5ab7": { + "source": "Quick actions", + "locations": [ + { + "file": "modules/settings/database/panes/overview-pane.tsx", + "kind": "attribute" + } + ] + }, + "m5dd8131db13e": { + "source": "Open Schema", + "locations": [ + { + "file": "modules/settings/database/panes/overview-pane.tsx", + "kind": "jsx" + } + ] + }, + "m9d41abd72396": { + "source": "Browse Rows", + "locations": [ + { + "file": "modules/settings/database/panes/overview-pane.tsx", + "kind": "jsx" + } + ] + }, + "m826cea94aca7": { + "source": "Run Query", + "locations": [ + { + "file": "modules/settings/database/panes/overview-pane.tsx", + "kind": "jsx" + } + ] + }, + "m951088383385": { + "source": "Run SELECT / INSERT / UPDATE / DELETE against your database. Queries respect row-level security.", + "locations": [ + { + "file": "modules/settings/database/panes/queries-pane.tsx", + "kind": "attribute" + } + ] + }, + "mb1160f188a9b": { + "source": "⌘/Ctrl + Enter", + "locations": [ + { + "file": "modules/settings/database/panes/queries-pane.tsx", + "kind": "jsx" + } + ] + }, + "m634768dae147": { + "source": "row", + "locations": [ + { + "file": "modules/settings/database/panes/queries-pane.tsx", + "kind": "expression" + } + ] + }, + "m6e2c568e0ce6": { + "source": "Query OK — no rows returned.", + "locations": [ + { + "file": "modules/settings/database/panes/queries-pane.tsx", + "kind": "jsx" + } + ] + }, + "m74234e98afe7": { + "source": "null", + "locations": [ + { + "file": "modules/settings/database/panes/queries-pane.tsx", + "kind": "jsx" + }, + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "jsx" + } + ] + }, + "m04fead47af96": { + "source": "Fill at least one field before adding the row.", + "locations": [ + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "feedback" + } + ] + }, + "mff40ad964b14": { + "source": "Browse, edit, delete, and export table data.", + "locations": [ + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "attribute" + } + ] + }, + "m98bded18778d": { + "source": "rows)", + "locations": [ + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "jsx" + } + ] + }, + "m1868a8dd78ad": { + "source": "Add row", + "locations": [ + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "jsx" + } + ] + }, + "m16cdb8681b4f": { + "source": "rows total", + "locations": [ + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "jsx" + } + ] + }, + "me5a89270f6be": { + "source": "Editing and deleting are disabled — this table has no single-column primary key to target rows by.", + "locations": [ + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "jsx" + } + ] + }, + "mf017b41bcee4": { + "source": "New row in", + "locations": [ + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "jsx" + } + ] + }, + "md6b3a40516e9": { + "source": "you (auto)", + "locations": [ + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "expression" + } + ] + }, + "m5118ec56d3b0": { + "source": "No data.", + "locations": [ + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "jsx" + } + ] + }, + "m18b77e44e689": { + "source": "Delete?", + "locations": [ + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "jsx" + } + ] + }, + "mda00fa968bd8": { + "source": "Confirm delete", + "locations": [ + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "attribute" + } + ] + }, + "m73912999faf4": { + "source": "Prev", + "locations": [ + { + "file": "modules/settings/database/panes/rows-pane.tsx", + "kind": "jsx" + } + ] + }, + "m18199d6c8031": { + "source": "Tables, columns, indexes, and row-level security.", + "locations": [ + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "attribute" + } + ] + }, + "m5c38569007a8": { + "source": "No tables found. Ask the AI to create your schema.", + "locations": [ + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "jsx" + } + ] + }, + "me0ae55a347ca": { + "source": "RLS enabled", + "locations": [ + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "jsx" + } + ] + }, + "m6e348b8ef3df": { + "source": "RLS off", + "locations": [ + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "attribute" + }, + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "jsx" + } + ] + }, + "m918e06828581": { + "source": "Enable RLS", + "locations": [ + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "jsx" + } + ] + }, + "m16004c5e9d6f": { + "source": "add a created_by / owner_id column to enable RLS", + "locations": [ + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "jsx" + } + ] + }, + "m53aade77cd69": { + "source": "Columns", + "locations": [ + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "jsx" + } + ] + }, + "mf38d9950af4f": { + "source": "Flags", + "locations": [ + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "jsx" + } + ] + }, + "me95b58867bd3": { + "source": "NOT NULL", + "locations": [ + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "jsx" + } + ] + }, + "ma4aa5093c634": { + "source": "Indexes (", + "locations": [ + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "jsx" + } + ] + }, + "m64636a121324": { + "source": "UNIQUE", + "locations": [ + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "jsx" + } + ] + }, + "m615efc660a79": { + "source": "Policies (", + "locations": [ + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "jsx" + } + ] + }, + "me7e9c0714998": { + "source": "No policies —", + "locations": [ + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "jsx" + } + ] + }, + "meed09bdfc71e": { + "source": "RLS is on but no policy grants access (rows are hidden).", + "locations": [ + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "expression" + } + ] + }, + "md172b9c0a0d5": { + "source": "this table is not row-level-secured.", + "locations": [ + { + "file": "modules/settings/database/panes/schema-pane.tsx", + "kind": "expression" + } + ] + }, + "m90d003ae66f9": { + "source": "HTTP (Streamable)", + "locations": [ + { + "file": "modules/settings/hooks/use-mcp-connectors.ts", + "kind": "data" + } + ] + }, + "m5e514b526a1a": { + "source": "Connect to an HTTP-based MCP server with streaming support", + "locations": [ + { + "file": "modules/settings/hooks/use-mcp-connectors.ts", + "kind": "data" + } + ] + }, + "mc3e6cbfe59d3": { + "source": "Server-Sent Events (SSE)", + "locations": [ + { + "file": "modules/settings/hooks/use-mcp-connectors.ts", + "kind": "data" + } + ] + }, + "m42dc7480db33": { + "source": "Connect via HTTP with Server-Sent Events", + "locations": [ + { + "file": "modules/settings/hooks/use-mcp-connectors.ts", + "kind": "data" + } + ] + }, + "m7097b2b3c5c0": { + "source": "Built-in App", + "locations": [ + { + "file": "modules/settings/hooks/use-mcp-connectors.ts", + "kind": "data" + } + ] + }, + "mc6ac2600776f": { + "source": "Server-managed local process", + "locations": [ + { + "file": "modules/settings/hooks/use-mcp-connectors.ts", + "kind": "data" + } + ] + }, + "m65104bc415b3": { + "source": "Search skills...", + "locations": [ + { + "file": "modules/skills/skill-picker.tsx", + "kind": "attribute" + } + ] + }, + "m706bb2bf3ff7": { + "source": "No matching skills", + "locations": [ + { + "file": "modules/skills/skill-picker.tsx", + "kind": "expression" + } + ] + }, + "m436e37eab2b0": { + "source": "No skills configured", + "locations": [ + { + "file": "modules/skills/skill-picker.tsx", + "kind": "expression" + } + ] + }, + "m36bde66f289a": { + "source": "manual", + "locations": [ + { + "file": "modules/skills/skill-picker.tsx", + "kind": "jsx" + }, + { + "file": "modules/skills/skills-panel-components.tsx", + "kind": "jsx" + } + ] + }, + "mda98d0c169dd": { + "source": "(when to use this skill)", + "locations": [ + { + "file": "modules/skills/skills-panel-components.tsx", + "kind": "jsx" + } + ] + }, + "m248296cbb019": { + "source": "Use when building React components with accessibility...", + "locations": [ + { + "file": "modules/skills/skills-panel-components.tsx", + "kind": "attribute" + } + ] + }, + "m99d204e6ce02": { + "source": "Auto-invoke when prompt matches", + "locations": [ + { + "file": "modules/skills/skills-panel-components.tsx", + "kind": "jsx" + }, + { + "file": "modules/skills/skills-panel-components.tsx", + "kind": "jsx" + } + ] + }, + "m810167ab8526": { + "source": "When to use this skill...", + "locations": [ + { + "file": "modules/skills/skills-panel-components.tsx", + "kind": "attribute" + } + ] + }, + "mf6456b82f5ee": { + "source": "--- name: my-skill trigger: auto --- Skill content in markdown...", + "locations": [ + { + "file": "modules/skills/skills-panel-components.tsx", + "kind": "expression" + } + ] + }, + "m6df1bb18a59a": { + "source": "Skill", + "locations": [ + { + "file": "modules/skills/skills-panel.tsx", + "kind": "attribute" + } + ] + }, + "m6f3decdb03ee": { + "source": "--- name: my-skill trigger: auto --- Skill content here...", + "locations": [ + { + "file": "modules/skills/skills-panel.tsx", + "kind": "expression" + } + ] + }, + "mab6d0a8145e7": { + "source": "No skills yet. Skills give your AI reusable capabilities.", + "locations": [ + { + "file": "modules/skills/skills-panel.tsx", + "kind": "jsx" + } + ] + }, + "m62845f31a2fe": { + "source": "Rule", + "locations": [ + { + "file": "modules/skills/skills-panel.tsx", + "kind": "attribute" + } + ] + }, + "mef4255129890": { + "source": "Always respond in a friendly tone.\\nNever include raw SQL in responses.", + "locations": [ + { + "file": "modules/skills/skills-panel.tsx", + "kind": "attribute" + } + ] + }, + "m76e4096cb2b5": { + "source": "No rules yet. Rules guide how your AI behaves.", + "locations": [ + { + "file": "modules/skills/skills-panel.tsx", + "kind": "jsx" + } + ] + }, + "m8e8a0b88543c": { + "source": "Invite Member", + "locations": [ + { + "file": "modules/workspace/components/members-dialogs.tsx", + "kind": "jsx" + } + ] + }, + "mf7fae87d68c7": { + "source": "Send an invite to join this workspace.", + "locations": [ + { + "file": "modules/workspace/components/members-dialogs.tsx", + "kind": "jsx" + } + ] + }, + "m5c4b03a7e821": { + "source": "colleague@example.com", + "locations": [ + { + "file": "modules/workspace/components/members-dialogs.tsx", + "kind": "attribute" + }, + { + "file": "modules/workspace/components/workspace-settings-danger.tsx", + "kind": "attribute" + } + ] + }, + "mc1ad5dcf2e05": { + "source": "Send Invite", + "locations": [ + { + "file": "modules/workspace/components/members-dialogs.tsx", + "kind": "expression" + } + ] + }, + "m2b98b1945afc": { + "source": "Remove Member", + "locations": [ + { + "file": "modules/workspace/components/members-dialogs.tsx", + "kind": "jsx" + } + ] + }, + "mda4b4fa5ee81": { + "source": "Are you sure you want to remove", + "locations": [ + { + "file": "modules/workspace/components/members-dialogs.tsx", + "kind": "jsx" + } + ] + }, + "m72aa5b162eab": { + "source": "from this workspace? They will lose access to all projects.", + "locations": [ + { + "file": "modules/workspace/components/members-dialogs.tsx", + "kind": "jsx" + } + ] + }, + "m60d18e42fd5a": { + "source": "Removing...", + "locations": [ + { + "file": "modules/workspace/components/members-dialogs.tsx", + "kind": "expression" + } + ] + }, + "me0447514873e": { + "source": "Failed to load members", + "locations": [ + { + "file": "modules/workspace/components/members-page.tsx", + "kind": "jsx" + } + ] + }, + "m0141903afec5": { + "source": "People who have access to this workspace and its projects.", + "locations": [ + { + "file": "modules/workspace/components/members-page.tsx", + "kind": "attribute" + } + ] + }, + "m1fd9ae1607aa": { + "source": "Invite", + "locations": [ + { + "file": "modules/workspace/components/members-page.tsx", + "kind": "jsx" + } + ] + }, + "md48b0edcb0fa": { + "source": "Invites that have been sent but not yet accepted.", + "locations": [ + { + "file": "modules/workspace/components/members-page.tsx", + "kind": "attribute" + } + ] + }, + "m3f63662d1610": { + "source": "Invite Link", + "locations": [ + { + "file": "modules/workspace/components/members-page.tsx", + "kind": "attribute" + } + ] + }, + "mee0ba29677dd": { + "source": "Generate a shareable link to invite people to this workspace.", + "locations": [ + { + "file": "modules/workspace/components/members-page.tsx", + "kind": "attribute" + } + ] + }, + "m826c272260db": { + "source": "Invite link", + "locations": [ + { + "file": "modules/workspace/components/members-rows.tsx", + "kind": "expression" + } + ] + }, + "m6ed21b0197a6": { + "source": "Generate Link", + "locations": [ + { + "file": "modules/workspace/components/members-rows.tsx", + "kind": "jsx" + } + ] + }, + "mf49cda3a003c": { + "source": "Transfer Ownership", + "locations": [ + { + "file": "modules/workspace/components/workspace-settings-danger.tsx", + "kind": "jsx" + }, + { + "file": "modules/workspace/components/workspace-settings-danger.tsx", + "kind": "jsx" + } + ] + }, + "m606c754332c6": { + "source": "Transfer ownership of this workspace to another member. You will be demoted to admin.", + "locations": [ + { + "file": "modules/workspace/components/workspace-settings-danger.tsx", + "kind": "jsx" + } + ] + }, + "m1a188a2a4288": { + "source": "New owner email", + "locations": [ + { + "file": "modules/workspace/components/workspace-settings-danger.tsx", + "kind": "jsx" + } + ] + }, + "m9efc82d7b54f": { + "source": "Delete Workspace", + "locations": [ + { + "file": "modules/workspace/components/workspace-settings-danger.tsx", + "kind": "jsx" + } + ] + }, + "m08e84f1f8c6f": { + "source": "Permanently delete this workspace, all its projects, files, and member associations. This action cannot be undone.", + "locations": [ + { + "file": "modules/workspace/components/workspace-settings-danger.tsx", + "kind": "jsx" + } + ] + }, + "mfbf65aeff09f": { + "source": "Delete This Workspace", + "locations": [ + { + "file": "modules/workspace/components/workspace-settings-danger.tsx", + "kind": "jsx" + } + ] + }, + "ma44014d57331": { + "source": "to confirm.", + "locations": [ + { + "file": "modules/workspace/components/workspace-settings-danger.tsx", + "kind": "jsx" + } + ] + }, + "m2aedfd1a09ce": { + "source": "I understand, delete this workspace", + "locations": [ + { + "file": "modules/workspace/components/workspace-settings-danger.tsx", + "kind": "expression" + } + ] + }, + "mfb0b45908d60": { + "source": "Workspace Details", + "locations": [ + { + "file": "modules/workspace/components/workspace-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "m7df05adeeaad": { + "source": "My Workspace", + "locations": [ + { + "file": "modules/workspace/components/workspace-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "m93ecf5eb3e0f": { + "source": "A brief description of your workspace", + "locations": [ + { + "file": "modules/workspace/components/workspace-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "m9ab5abafdca9": { + "source": "Workspace Information", + "locations": [ + { + "file": "modules/workspace/components/workspace-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "me472493645c7": { + "source": "Read-only metadata about your workspace.", + "locations": [ + { + "file": "modules/workspace/components/workspace-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "m1044a4c056d0": { + "source": "Members", + "locations": [ + { + "file": "modules/workspace/components/workspace-settings-general.tsx", + "kind": "attribute" + }, + { + "file": "modules/workspace/components/workspace-settings.tsx", + "kind": "data" + } + ] + }, + "mab3364cde0d3": { + "source": "Your Role", + "locations": [ + { + "file": "modules/workspace/components/workspace-settings-general.tsx", + "kind": "attribute" + } + ] + }, + "m7ffac85d3272": { + "source": "Too many login attempts.{v0}", + "locations": [ + { + "file": "app/(auth)/login/page.tsx", + "kind": "interpolation" + } + ] + }, + "mff0dc55e6c99": { + "source": "Audit endpoint is unavailable (HTTP {v0})", + "locations": [ + { + "file": "app/(dashboard)/admin/audit/page.tsx", + "kind": "interpolation" + } + ] + }, + "m5b97efac769e": { + "source": "Failed to delete {v0}", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "interpolation" + } + ] + }, + "m00410e77ae85": { + "source": "Using custom token ****{v0}", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "interpolation" + } + ] + }, + "m00ace311c2f5": { + "source": "Using cert.pem OAuth token ****{v0}", + "locations": [ + { + "file": "app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "interpolation" + } + ] + }, + "mac26c98b3c1e": { + "source": "Retry all {v0} emails? They will be reset to pending.", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "interpolation" + } + ] + }, + "mc5650b441394": { + "source": "{v0} email(s) queued for retry.", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "interpolation" + } + ] + }, + "ma02387e074cf": { + "source": "Permanently delete ALL {v0} emails? This cannot be undone.", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "interpolation" + } + ] + }, + "m4f5d6347279e": { + "source": "{v0} email(s) deleted.", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "interpolation" + } + ] + }, + "m24d7d02c9f3d": { + "source": "Showing {v0}", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "interpolation" + } + ] + }, + "m9f6801c068b5": { + "source": "with status \"{v0}\"", + "locations": [ + { + "file": "app/(dashboard)/admin/email-panel.tsx", + "kind": "interpolation" + } + ] + }, + "m126345e8a598": { + "source": "({v0}-dim vectors)", + "locations": [ + { + "file": "app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "interpolation" + } + ] + }, + "m8088d60a15ef": { + "source": "Saved defaults for {v0} plan", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "interpolation" + } + ] + }, + "m7a3979d63198": { + "source": "Applied {v0} defaults to {v1}/{v2} workspaces", + "locations": [ + { + "file": "app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "interpolation" + } + ] + }, + "mdbc21a17d946": { + "source": "Stop \"{v0}\"?\n\nThe app's systemd unit will be terminated. The user can restart it from their editor.", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "interpolation" + } + ] + }, + "m7b63c6b376c6": { + "source": "Kill dev server for \"{v0}\"?\n\nThe Vite process will be terminated. The user can restart it from their editor.", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "interpolation" + } + ] + }, + "m26bf2485c847": { + "source": "doable-app@{v0}.service", + "locations": [ + { + "file": "app/(dashboard)/admin/runtime/page.tsx", + "kind": "interpolation" + } + ] + }, + "mc5ac96b52ed5": { + "source": "Saved \"{v0}\" mode tools", + "locations": [ + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "interpolation" + } + ] + }, + "mebee0e4886a2": { + "source": "Delete the \"{v0}\" mode configuration? This will cause the mode to use hardcoded defaults.", + "locations": [ + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "interpolation" + } + ] + }, + "mfa40d503407f": { + "source": "Deleted \"{v0}\" mode", + "locations": [ + { + "file": "app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "interpolation" + } + ] + }, + "mb574068c50bc": { + "source": "{v0} · {v1}\n{v2}ms · {v3}{v4}", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/flame-graph.tsx", + "kind": "interpolation" + } + ] + }, + "m41b6c7dee5b4": { + "source": "{v0}ms", + "locations": [ + { + "file": "app/(dashboard)/admin/trace/_components/results-table.tsx", + "kind": "interpolation" + } + ] + }, + "m5bea7822d675": { + "source": " +{v0} more", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "interpolation" + } + ] + }, + "m84805b3f51e7": { + "source": "Select {v0}", + "locations": [ + { + "file": "app/(dashboard)/admin/user-management-panel.tsx", + "kind": "interpolation" + } + ] + }, + "me4304a8372fd": { + "source": "No projects match \"{v0}\". Try a different search.", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "interpolation" + } + ] + }, + "m47f1f6a3b07b": { + "source": "No templates matching \"{v0}\"", + "locations": [ + { + "file": "app/(dashboard)/dashboard/templates/page.tsx", + "kind": "interpolation" + } + ] + }, + "m39875f600860": { + "source": "No projects matching \"{v0}\"", + "locations": [ + { + "file": "app/(dashboard)/discover/page.tsx", + "kind": "interpolation" + } + ] + }, + "m260f4198369f": { + "source": "Enabled · {v0} recovery code{v1} remaining", + "locations": [ + { + "file": "app/(dashboard)/settings/mfa-section.tsx", + "kind": "interpolation" + } + ] + }, + "mf49697c96a5a": { + "source": "Delete {v0}? This cannot be undone.", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/workspace-knowledge-editor.tsx", + "kind": "interpolation" + } + ] + }, + "m6ca5d09b8d70": { + "source": "# {v0}\n\nStart typing...", + "locations": [ + { + "file": "app/(dashboard)/workspace-settings/workspace-knowledge-editor.tsx", + "kind": "interpolation" + } + ] + }, + "m973831b3382e": { + "source": "Authentication error: {v0}", + "locations": [ + { + "file": "app/auth/callback/page.tsx", + "kind": "interpolation" + } + ] + }, + "md1f8563597aa": { + "source": "{v0} {v1} applied", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "interpolation" + } + ] + }, + "m4dbb4ed0912c": { + "source": "{v0} KB · ", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "interpolation" + } + ] + }, + "m63e447794f82": { + "source": "Auto-fix paused — the AI couldn't fix this error after {v0} attempts.", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "interpolation" + } + ] + }, + "mbce09bb12e5f": { + "source": "{v0}/editor/{v1}", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "interpolation" + } + ] + }, + "ma126d644f0cc": { + "source": "Could not save {v0} default — verify in /admin/plans after setup.", + "locations": [ + { + "file": "app/setup/steps/PlanDefaultsInline.tsx", + "kind": "interpolation" + } + ] + }, + "m3c6a40f73ae5": { + "source": "{v0} models available on your Copilot subscription. Tune further from /admin/ai-settings any time.", + "locations": [ + { + "file": "app/setup/steps/Step2AIProvider.tsx", + "kind": "interpolation" + } + ] + }, + "m49a064002aec": { + "source": "Configured: {v0} via {v1}", + "locations": [ + { + "file": "app/setup/steps/Step2EmbeddingPanel.tsx", + "kind": "interpolation" + } + ] + }, + "m160c02eb9e00": { + "source": "present{v0}", + "locations": [ + { + "file": "app/setup/steps/StepCloudflare.tsx", + "kind": "interpolation" + } + ] + }, + "m4ae2ea58575e": { + "source": " · {v0} members", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "interpolation" + } + ] + }, + "mce4bdf856850": { + "source": "{v0} / {v1} used", + "locations": [ + { + "file": "components/dashboard/sidebar.tsx", + "kind": "interpolation" + } + ] + }, + "m7844d8fc9afc": { + "source": "{v0} preview", + "locations": [ + { + "file": "components/templates/template-card.tsx", + "kind": "interpolation" + } + ] + }, + "mbe78c16a8edb": { + "source": "Preview of {v0}", + "locations": [ + { + "file": "components/templates/template-preview-modal.tsx", + "kind": "interpolation" + } + ] + }, + "m6935183f86c1": { + "source": "Voice input couldn't start: {v0}", + "locations": [ + { + "file": "hooks/use-speech-recognition.ts", + "kind": "interpolation" + } + ] + }, + "mf50339be8607": { + "source": "{v0} workspaces: {v1}{v2}", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "interpolation" + } + ] + }, + "m8cec5e9c2b80": { + "source": "This Copilot subscription is being used by {v0} different users.", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "interpolation" + } + ] + }, + "m61907559f648": { + "source": "This GitHub account (@{v0}) was added by {v1} different people.", + "locations": [ + { + "file": "modules/ai-settings/components/platform-usage-tab.tsx", + "kind": "interpolation" + } + ] + }, + "m22e9cebc83bd": { + "source": "Settings copied to {v0} user{v1}", + "locations": [ + { + "file": "modules/ai-settings/components/user-allocations-tab.tsx", + "kind": "interpolation" + } + ] + }, + "m0ef498fa44b4": { + "source": "{v0} available", + "locations": [ + { + "file": "modules/billing/components/credit-display.tsx", + "kind": "interpolation" + } + ] + }, + "m6b463a0e3cd3": { + "source": "{v0} credits remaining", + "locations": [ + { + "file": "modules/billing/components/credit-display.tsx", + "kind": "interpolation" + } + ] + }, + "m04302a14169c": { + "source": "Upgrade to {v0}", + "locations": [ + { + "file": "modules/billing/components/pricing-cards.tsx", + "kind": "interpolation" + } + ] + }, + "meceda4cd02c0": { + "source": "Editing {v0}", + "locations": [ + { + "file": "modules/collaboration/components/presence-avatars.tsx", + "kind": "interpolation" + } + ] + }, + "me2b3655a13a0": { + "source": "Add{v0}", + "locations": [ + { + "file": "modules/dashboard/components/add-projects-to-folder-dialog.tsx", + "kind": "interpolation" + } + ] + }, + "m54cbd4604c0c": { + "source": "Disconnect {v0} and connect a different one?\n\n", + "locations": [ + { + "file": "modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "interpolation" + } + ] + }, + "ma192c0457880": { + "source": "Tool call failed ({v0})", + "locations": [ + { + "file": "modules/editor/chat/mcp-ui-resource.tsx", + "kind": "interpolation" + } + ] + }, + "m608dd628c7c7": { + "source": "mcp-app:{v0}", + "locations": [ + { + "file": "modules/editor/chat/mcp-ui-resource.tsx", + "kind": "interpolation" + } + ] + }, + "m08f7430195bd": { + "source": "Delete {v0}? Default files will be reset.", + "locations": [ + { + "file": "modules/editor/context-files/context-panel.tsx", + "kind": "interpolation" + } + ] + }, + "md9339cc6a24b": { + "source": "{v0} chars", + "locations": [ + { + "file": "modules/editor/context-files/context-panel.tsx", + "kind": "interpolation" + } + ] + }, + "md2b5e7506b51": { + "source": "Version {v0}", + "locations": [ + { + "file": "modules/editor/sidebar/version-history-item.tsx", + "kind": "interpolation" + } + ] + }, + "m7e47e94daf7a": { + "source": "My {v0} connection", + "locations": [ + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "interpolation" + } + ] + }, + "m863f2ca6991c": { + "source": "Enter {v0}", + "locations": [ + { + "file": "modules/integrations/connect-flow-forms.tsx", + "kind": "interpolation" + } + ] + }, + "m9db2ba6d8968": { + "source": "Connect {v0}", + "locations": [ + { + "file": "modules/integrations/connect-flow.tsx", + "kind": "interpolation" + } + ] + }, + "m086df81a91bb": { + "source": " (Client ID: {v0})", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "interpolation" + } + ] + }, + "ma575227918ad": { + "source": "Paste your {v0} API key", + "locations": [ + { + "file": "modules/integrations/integration-config-form.tsx", + "kind": "interpolation" + } + ] + }, + "m09ca41fb2c5d": { + "source": "{v0} of {v1} {v2} operations failed. The list has been refreshed.", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "interpolation" + } + ] + }, + "m85cabcf2a12c": { + "source": "Select all in {v0}", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "interpolation" + } + ] + }, + "mb59b1c094916": { + "source": "Configured via: {v0}", + "locations": [ + { + "file": "modules/integrations/integrations-admin-panel.tsx", + "kind": "interpolation" + } + ] + }, + "m67c60b1e677c": { + "source": "{v0} high-impact and ", + "locations": [ + { + "file": "modules/marketplace/install-permission-dialog.tsx", + "kind": "interpolation" + } + ] + }, + "m5db02c86ca3f": { + "source": "{v0} characters", + "locations": [ + { + "file": "modules/settings/components/project-settings-context.tsx", + "kind": "interpolation" + } + ] + }, + "mdedcf827964d": { + "source": "My {v0}", + "locations": [ + { + "file": "modules/skills/skills-panel-components.tsx", + "kind": "interpolation" + } + ] + }, + "m4007ede786d8": { + "source": "Members ({v0})", + "locations": [ + { + "file": "modules/workspace/components/members-page.tsx", + "kind": "interpolation" + } + ] + }, + "m5bed8dc6b0ed": { + "source": "Pending Invites ({v0})", + "locations": [ + { + "file": "modules/workspace/components/members-page.tsx", + "kind": "interpolation" + } + ] + }, + "m535f5487c9f0": { + "source": "Created {count, plural, one {# file} other {# files}}", + "locations": [ + { + "file": "modules/editor/chat/chat-message-helpers.tsx", + "kind": "icu" + } + ] + }, + "m54eab0ff283f": { + "source": "Edited {count, plural, one {# file} other {# files}}", + "locations": [ + { + "file": "modules/editor/chat/chat-message-helpers.tsx", + "kind": "icu" + } + ] + }, + "me7f27e543c19": { + "source": "Read {count, plural, one {# file} other {# files}}", + "locations": [ + { + "file": "modules/editor/chat/chat-message-helpers.tsx", + "kind": "icu" + } + ] + }, + "mc33fa913a190": { + "source": "Installed {count, plural, one {# package} other {# packages}}", + "locations": [ + { + "file": "modules/editor/chat/chat-message-helpers.tsx", + "kind": "icu" + } + ] + }, + "m4eeb5480a729": { + "source": "Searched {count, plural, one {# time} other {# times}}", + "locations": [ + { + "file": "modules/editor/chat/chat-message-helpers.tsx", + "kind": "icu" + } + ] + }, + "m6e025ab4ef82": { + "source": "Ran {count, plural, one {# command} other {# commands}}", + "locations": [ + { + "file": "modules/editor/chat/chat-message-helpers.tsx", + "kind": "icu" + } + ] + }, + "md4e1aa013fee": { + "source": "Explored project structure", + "locations": [ + { + "file": "modules/editor/chat/chat-message-helpers.tsx", + "kind": "icu" + } + ] + }, + "m21cc30509578": { + "source": "Planning", + "locations": [ + { + "file": "modules/editor/chat/chat-message-helpers.tsx", + "kind": "icu" + } + ] + }, + "m29646fe2d127": { + "source": "Creating plan", + "locations": [ + { + "file": "modules/editor/chat/chat-message-helpers.tsx", + "kind": "icu" + } + ] + }, + "md4a85c25934d": { + "source": "Tracking progress", + "locations": [ + { + "file": "modules/editor/chat/chat-message-helpers.tsx", + "kind": "icu" + } + ] + }, + "mcfce761befa8": { + "source": "Request failed", + "locations": [ + { + "file": "apps/web/src/app/(auth)/forgot-password/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m4190475b5235": { + "source": "Authentication failed. Please try again.", + "locations": [ + { + "file": "apps/web/src/app/(auth)/login/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mb553ebbcba22": { + "source": "Authentication code was missing. Please try again.", + "locations": [ + { + "file": "apps/web/src/app/(auth)/login/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "md89c7cc4ec4b": { + "source": "No email address associated with your account. Please try again.", + "locations": [ + { + "file": "apps/web/src/app/(auth)/login/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mcf838bcb6704": { + "source": "Failed to fetch thumbnail logs:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/admin-panels.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m440bdfb3a851": { + "source": "Failed to generate thumbnails:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/admin-panels.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m6a52dcd27169": { + "source": "Failed to fetch copilot sessions:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/admin-panels.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mda6efefb0490": { + "source": "Failed to load sessions", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/admin-panels.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mf178a2552831": { + "source": "Failed to terminate session:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/admin-panels.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mb268c0b17e63": { + "source": "Failed to terminate all sessions:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/admin-panels.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "ma7367485803a": { + "source": "Failed to load conversation", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/audit/[sessionId]/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m0eb0fd20a42b": { + "source": "Failed to load action log", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/audit/actions/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "ma7375d496bde": { + "source": "Failed to load audit data", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/audit/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "ma4b404e83999": { + "source": "Failed to load chat sessions", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/chat/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m73bfbe45ead3": { + "source": "Failed to load thread", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/chat/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m128e6b89300b": { + "source": "Failed to load DNS config", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m29bbb7b7a04c": { + "source": "Failed to load DNS diagnostics", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mfa4f2f923b23": { + "source": "Failed to save token", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mf3d55812ba2e": { + "source": "Failed to remove token", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m2c07997249ab": { + "source": "Failed to save", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mb347c681bdec": { + "source": "Failed to refresh diagnostics", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/dns-config-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m4706ef0b982f": { + "source": "Failed to load email config:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/email-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m6eee736ebabe": { + "source": "Failed to load queue stats:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/email-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m97f3dc1a00cb": { + "source": "Failed to send test email.", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/email-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mf625b14e1b2c": { + "source": "Failed to delete", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/email-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m0cfb2caf3808": { + "source": "Failed to start Gmail OAuth", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/email-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m5281a17d08d9": { + "source": "Failed to load queue:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/email-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m0f48d9ed9216": { + "source": "Failed to load email detail:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/email-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mada889964ab3": { + "source": "Failed to load status", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/embedding-provider-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "md2ac8dfbfab1": { + "source": "Failed to load MFA users", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/mfa-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m2638a84f756e": { + "source": "Failed to reset MFA", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/mfa-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m8c90edde06bd": { + "source": "Failed to load AI allocations:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m62118d4494f6": { + "source": "Failed to save AI settings", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mff27059cb004": { + "source": "Failed to reset AI settings", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "me4143613f121": { + "source": "Failed to update role", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "meabb5c136be4": { + "source": "Failed to update plan", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m85a0de1739d3": { + "source": "Failed to load plan defaults:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "md67a86520b83": { + "source": "Failed to save defaults:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mb7f9fa013618": { + "source": "Failed to apply defaults:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/plan-defaults-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "md3774a9d3090": { + "source": "Failed to fetch plan limits:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m31e1685470cc": { + "source": "Failed to load plan limits", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m2f114634718b": { + "source": "Failed to save plan limits", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m1e4e7c3efec4": { + "source": "Failed to reset plan limits", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/plan-limits-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "med2139ca8746": { + "source": "Failed to load runtime instances", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/runtime/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m685f6c95f442": { + "source": "Failed to load dev servers", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/runtime/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m5aa7f04b86f9": { + "source": "Failed to load egress data", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/runtime/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m2515ea982cd0": { + "source": "Failed to load logs", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/runtime/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m1a70c04fc312": { + "source": "Failed to load signups:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/signups-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mce89884b1cdb": { + "source": "Failed to load signups", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/signups-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m4924972f9587": { + "source": "Failed to save settings", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/signups-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m177ebb036074": { + "source": "Failed to load tool configs:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m557aa001b316": { + "source": "Failed to save mode:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m1df9a58ef93c": { + "source": "Failed to add mode:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "md4ebc05d56d2": { + "source": "Failed to delete mode:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/tools-config-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m4ad82614b981": { + "source": "Failed to load trace", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/trace/[traceId]/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m1bde77d27b5a": { + "source": "No attributes", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/trace/_components/span-detail.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m2197f6207922": { + "source": "No events", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/trace/_components/span-detail.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m7a711f215997": { + "source": "No exception", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/trace/_components/span-detail.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mc86bcc9469d3": { + "source": "Failed to load traces", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/trace/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "me88e1a5f81d3": { + "source": "Failed to save credits", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/user-management-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m75592b03117e": { + "source": "Failed to save GitHub account", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/ai-settings/callback/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mfe95f5923f3d": { + "source": "Failed to fetch templates:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/dashboard/templates/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "ma23127da31a7": { + "source": "Failed to create project. Please try again.", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/dashboard/use-dashboard.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m2495a96af0ae": { + "source": "Failed to delete some projects", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/dashboard/use-dashboard.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m6e260c2ad677": { + "source": "Failed to load community data:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/discover/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m609116050f8b": { + "source": "Failed to discover projects:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/discover/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m2c42b800f4f2": { + "source": "Failed to remix:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/discover/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m82e7362bb796": { + "source": "Failed to remix. Please try again.", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/discover/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mc5bf66554c8f": { + "source": "Failed to create listing", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/marketplace/new/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m7054480c7609": { + "source": "Failed to load instances", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/runtime/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mdd1a94ab79c0": { + "source": "Failed to load MFA status:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/settings/mfa-section.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mb0223f41bbad": { + "source": "Failed to start enrollment", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/settings/mfa-section.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m615d3faf84b8": { + "source": "Failed to disable MFA", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/settings/mfa-section.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m54ed946e0373": { + "source": "Failed to regenerate recovery codes", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/settings/mfa-section.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mb689d74cef45": { + "source": "Failed to save profile", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/settings/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m8f4894fcc9b3": { + "source": "Failed to save profile:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/settings/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m574f390356c7": { + "source": "Failed to save profile.", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/settings/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m98548a295325": { + "source": "Failed to change password", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/settings/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "maa35c76bad68": { + "source": "Failed to change password. Please try again.", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/settings/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m60e951281376": { + "source": "Failed to load workspace AI extras", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m59273bcdd9e5": { + "source": "Failed to load workspace usage", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m2805f0287fdb": { + "source": "You are not a member of any workspace yet. Create one from the dashboard to continue.", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m6ccebcddccab": { + "source": "Failed to load workspace settings:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m2575461a4ce1": { + "source": "Failed to update workspace:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mf14597dadd27": { + "source": "Failed to send invite", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "ma36d7bf13293": { + "source": "Failed to generate invite link:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m0b98a95233dd": { + "source": "Failed to remove member:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m701d45a366f8": { + "source": "Failed to change role:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m7b7440bf5872": { + "source": "Failed to revoke invite:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mdab7736a5deb": { + "source": "Failed to delete workspace:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m7a8439fc01b2": { + "source": "Failed to load knowledge files", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/workspace-knowledge.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m0c041edb03b2": { + "source": "Failed to create file:", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/workspace-knowledge.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m8310a0555402": { + "source": "Authentication tokens were missing from the response.", + "locations": [ + { + "file": "apps/web/src/app/auth/callback/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mdaaba33e2963": { + "source": "No email address is associated with your account.", + "locations": [ + { + "file": "apps/web/src/app/auth/callback/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "md3d849a730c9": { + "source": "Authentication tokens were missing.", + "locations": [ + { + "file": "apps/web/src/app/auth/callback/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m70bc1979e806": { + "source": "Invalid JWT", + "locations": [ + { + "file": "apps/web/src/app/auth/callback/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m30aa69b29d9f": { + "source": "An unknown error occurred.", + "locations": [ + { + "file": "apps/web/src/app/editor/[projectId]/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m8ca83df14ee3": { + "source": "Failed to fetch", + "locations": [ + { + "file": "apps/web/src/app/editor/[projectId]/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mc382f7378c37": { + "source": "Connection to AI failed — the server may be restarting. Please try again in a moment.", + "locations": [ + { + "file": "apps/web/src/app/editor/[projectId]/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m4a7f23ba49c7": { + "source": "No response stream received from the server.", + "locations": [ + { + "file": "apps/web/src/app/editor/[projectId]/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m872423b25059": { + "source": "Connection interrupted — the server may have restarted. Please send your message again.", + "locations": [ + { + "file": "apps/web/src/app/editor/[projectId]/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mbeb845033bf7": { + "source": "Failed to scaffold project", + "locations": [ + { + "file": "apps/web/src/app/editor/[projectId]/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m07feb1207cae": { + "source": "Failed to load files", + "locations": [ + { + "file": "apps/web/src/app/editor/[projectId]/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "me9b9dd4d2b1c": { + "source": "Failed to load file", + "locations": [ + { + "file": "apps/web/src/app/editor/[projectId]/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "me1d8e8c18664": { + "source": "This imported app uses Supabase. Connect your Supabase project so it can read and write real data — no manual .env editing needed.", + "locations": [ + { + "file": "apps/web/src/app/editor/[projectId]/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m09ad32065f6f": { + "source": "Failed to download project", + "locations": [ + { + "file": "apps/web/src/app/editor/[projectId]/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m0b87cc7d93d2": { + "source": "Please refine the plan based on my feedback.", + "locations": [ + { + "file": "apps/web/src/app/editor/[projectId]/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m5b11c7d71bdc": { + "source": "The publish/deploy failed with this error: ", + "locations": [ + { + "file": "apps/web/src/app/editor/[projectId]/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m7fb831b82fd3": { + "source": "This invite link is missing a token.", + "locations": [ + { + "file": "apps/web/src/app/invite/[token]/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mbc7983bc3fda": { + "source": "This invite is invalid, expired, or already used.", + "locations": [ + { + "file": "apps/web/src/app/invite/[token]/page.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m626c6e175a78": { + "source": "Connection timed out. If you completed OAuth on GitHub, reload this page and check /admin/ai-settings.", + "locations": [ + { + "file": "apps/web/src/app/setup/steps/Step2AIProvider.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m51f74a42cc06": { + "source": "No workspace yet. Reload the page and try again.", + "locations": [ + { + "file": "apps/web/src/app/setup/steps/Step2AIProvider.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mfe32924b26f0": { + "source": "Could not save. Try again.", + "locations": [ + { + "file": "apps/web/src/app/setup/steps/Step2AIProvider.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m16efcd21d74f": { + "source": "Could not save", + "locations": [ + { + "file": "apps/web/src/app/setup/steps/Step4Integrations.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m52a6ef302b8e": { + "source": "Failed to create folder:", + "locations": [ + { + "file": "apps/web/src/components/dashboard/sidebar.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mcbd22b6cc368": { + "source": "Failed to rename folder:", + "locations": [ + { + "file": "apps/web/src/components/dashboard/sidebar.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m5833eb5e8cd9": { + "source": "Failed to delete folder:", + "locations": [ + { + "file": "apps/web/src/components/dashboard/sidebar.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m0a8d4fd66444": { + "source": "Failed to create workspace", + "locations": [ + { + "file": "apps/web/src/components/dashboard/sidebar.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "meee812e53de7": { + "source": "Failed to remix project:", + "locations": [ + { + "file": "apps/web/src/components/templates/use-template-dialog.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "maf2035a41750": { + "source": "Failed to load image", + "locations": [ + { + "file": "apps/web/src/hooks/use-attachments.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mea7d976ce045": { + "source": "Failed to read file", + "locations": [ + { + "file": "apps/web/src/hooks/use-attachments.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mafaba68c1867": { + "source": "Failed to process files:", + "locations": [ + { + "file": "apps/web/src/hooks/use-attachments.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m1a7cd149848a": { + "source": "Failed to process images:", + "locations": [ + { + "file": "apps/web/src/hooks/use-image-attachments.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m3790b322709f": { + "source": "Failed to load features", + "locations": [ + { + "file": "apps/web/src/hooks/use-platform-admin.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m6a8bcb8d2639": { + "source": "Failed to load users", + "locations": [ + { + "file": "apps/web/src/hooks/use-platform-admin.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m51cc2811d054": { + "source": "No microphone detected. Please plug in or enable a microphone and try again.", + "locations": [ + { + "file": "apps/web/src/hooks/use-speech-recognition.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m683bdca05a39": { + "source": "No response stream received.", + "locations": [ + { + "file": "apps/web/src/lib/prompt-bridge.ts", + "kind": "feedback-or-preset" + } + ] + }, + "md901d334eaee": { + "source": "Connection to AI failed. The server may be restarting.", + "locations": [ + { + "file": "apps/web/src/lib/prompt-bridge.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mbabb88c7fea9": { + "source": "Failed to add account", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/components/connections-tab.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m885e022949b4": { + "source": "Failed to make provider available to workspace", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/components/custom-providers-tab.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "ma08b22ea84b8": { + "source": "This only changes the AI model for you. It overrides the workspace defaults below. Other workspace members will still use the workspace defaults unless they set their own override. If you don't set anything here, you'll also use the workspace defaults.", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/components/model-config-tab.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "me21fa38b5758": { + "source": "Failed to save provider", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/components/use-provider-wizard-models.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mc19db501d4d5": { + "source": "Failed to load GitHub accounts:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-ai-settings.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m271110a8d8e9": { + "source": "Failed to load providers:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-ai-settings.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m31812c8a3982": { + "source": "Failed to load AI defaults:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-ai-settings.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m4a7d1fa983ed": { + "source": "Failed to load user AI preferences:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-ai-settings.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m1bdc0c1294b1": { + "source": "Failed to load models:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-ai-settings.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m9f7cbd819667": { + "source": "Failed to load user allocations:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-ai-settings.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mfe1883f165bb": { + "source": "Failed to load provider catalog", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-provider-catalog.ts", + "kind": "feedback-or-preset" + } + ] + }, + "ma45a37ddcc32": { + "source": "Connection test failed", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-test-connection.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m199ba4b7799e": { + "source": "Failed to load usage summary:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-usage.ts", + "kind": "feedback-or-preset" + } + ] + }, + "me2e568f047d7": { + "source": "Failed to load usage history:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-usage.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m11521761e8d3": { + "source": "Failed to load usage breakdown:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-usage.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m98b998323671": { + "source": "Failed to load workspace usage summary:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-usage.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m01f10012cfac": { + "source": "Failed to load workspace members usage:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-usage.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m27267450b58d": { + "source": "Failed to load workspace providers usage:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-usage.ts", + "kind": "feedback-or-preset" + } + ] + }, + "md5f7065f5590": { + "source": "Failed to load hourly activity:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-usage.ts", + "kind": "feedback-or-preset" + } + ] + }, + "med310a04d2a6": { + "source": "Failed to load token split:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-usage.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m01d3102608d8": { + "source": "Failed to load credits:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-usage.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m09514d591e07": { + "source": "Failed to load member model breakdown:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-usage.ts", + "kind": "feedback-or-preset" + } + ] + }, + "me36cf975f831": { + "source": "Failed to load copilot account usage:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-usage.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m2bfd1efce499": { + "source": "Failed to load top consumers:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-usage.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mb33f0b9ffefd": { + "source": "Failed to load platform usage summary:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-usage.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mbfc86ed12ce0": { + "source": "Failed to load platform users:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-usage.ts", + "kind": "feedback-or-preset" + } + ] + }, + "me96aeec114fc": { + "source": "Failed to load platform copilot accounts:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-usage.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mdccd1f5ef168": { + "source": "Failed to load platform custom providers:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-usage.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m1798aab66965": { + "source": "Failed to load platform models:", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/hooks/use-usage.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mcd51884893e0": { + "source": "Failed to start checkout", + "locations": [ + { + "file": "apps/web/src/modules/billing/hooks/use-billing.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m64a1feb5d37a": { + "source": "Failed to open billing portal", + "locations": [ + { + "file": "apps/web/src/modules/billing/hooks/use-billing.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m2bbab4a2c5d2": { + "source": "Failed to start top-up checkout", + "locations": [ + { + "file": "apps/web/src/modules/billing/hooks/use-billing.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mf9af667d451a": { + "source": "Failed to load projects for folder:", + "locations": [ + { + "file": "apps/web/src/modules/dashboard/components/add-projects-to-folder-dialog.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m29269e5e9a31": { + "source": "Failed to add projects to folder:", + "locations": [ + { + "file": "apps/web/src/modules/dashboard/components/add-projects-to-folder-dialog.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m518e6db15484": { + "source": "Failed to create project", + "locations": [ + { + "file": "apps/web/src/modules/dashboard/components/create-project-dialog.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mb7668a581f59": { + "source": "Failed to disconnect", + "locations": [ + { + "file": "apps/web/src/modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m2c8a751cc59c": { + "source": "This repository was already imported. Check your projects list.", + "locations": [ + { + "file": "apps/web/src/modules/dashboard/components/import-github-project-dialog.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mddeafa3a6bff": { + "source": "Failed to load templates", + "locations": [ + { + "file": "apps/web/src/modules/dashboard/components/template-gallery.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mfec94ff32afa": { + "source": "Failed to create environment", + "locations": [ + { + "file": "apps/web/src/modules/dashboard/components/workspace-setup-wizard.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m775e5142a0b0": { + "source": "The AI took too long to respond. Your work is safe.", + "locations": [ + { + "file": "apps/web/src/modules/editor/chat/error-recovery-card.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m1ed48e13f504": { + "source": "Could not authenticate with the AI provider. Check your API key.", + "locations": [ + { + "file": "apps/web/src/modules/editor/chat/error-recovery-card.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m6519f92fc1e8": { + "source": "The AI encountered errors during the build. It can try to fix them automatically.", + "locations": [ + { + "file": "apps/web/src/modules/editor/chat/error-recovery-card.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "macc567972bd9": { + "source": "The selected model is not responding. Try switching to a different model.", + "locations": [ + { + "file": "apps/web/src/modules/editor/chat/error-recovery-card.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m79d71120bff3": { + "source": "This prompt is no longer active.", + "locations": [ + { + "file": "apps/web/src/modules/editor/chat/user-input-card.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "med2052a25624": { + "source": "Failed to resolve conflicts", + "locations": [ + { + "file": "apps/web/src/modules/editor/components/conflict-resolution-dialog.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m02c981a0b3e5": { + "source": "Failed to abort merge", + "locations": [ + { + "file": "apps/web/src/modules/editor/components/conflict-resolution-dialog.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m06fbbd1227cb": { + "source": "Failed to switch account", + "locations": [ + { + "file": "apps/web/src/modules/editor/components/github-connect-dialog.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m3ba5eb2c517c": { + "source": "Failed to restore version", + "locations": [ + { + "file": "apps/web/src/modules/editor/components/restore-dialog.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m0fff3eaed3ba": { + "source": "Failed to load metrics", + "locations": [ + { + "file": "apps/web/src/modules/editor/components/runtime-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m11660a0100e7": { + "source": "Failed to load context files", + "locations": [ + { + "file": "apps/web/src/modules/editor/context-files/context-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "me5601bf24b32": { + "source": "The new Supabase project is ready and the credentials are connected. Please continue building now — use the Supabase env vars per this project's framework conventions (see your env-var rules above), and keep SUPABASE_SERVICE_ROLE_KEY server-side only.", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-chat-lifecycle.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m92e733c93623": { + "source": "The requested integration is now connected. Please continue and use its env vars and tools from the connected-integrations block.", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-chat-lifecycle.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m9fc4fcabe3ce": { + "source": "No response body", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-chat.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m6488ad70750a": { + "source": "This step is taking longer than usual…", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-chat.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m6d415794dcd0": { + "source": "The plan has been approved. Please start building it now, step by step. Follow the plan in .doable/plan.md.", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-chat.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m6b89042219d2": { + "source": "Failed to approve plan:", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-chat.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m5adf207f5d2f": { + "source": "Failed to abandon plan:", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-chat.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mcad1033336ed": { + "source": "Failed to get status", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-github.ts", + "kind": "feedback-or-preset" + } + ] + }, + "me7acfaa4d990": { + "source": "Failed to load repos", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-github.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m20065c697e90": { + "source": "Failed to fetch file tree", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-project-files.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m00d44a640200": { + "source": "Failed to fetch file tree:", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-project-files.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m7d36047f62cb": { + "source": "Failed to read file:", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-project-files.ts", + "kind": "feedback-or-preset" + } + ] + }, + "ma11e2c2cca33": { + "source": "Failed to save file", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-project-files.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m8837dabd1b3f": { + "source": "Failed to save file:", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-project-files.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mfd7ee8c9b765": { + "source": "Failed to create file", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-project-files.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m4be7167b42f2": { + "source": "Failed to delete file", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-project-files.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m02f362d9d360": { + "source": "Failed to delete file:", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-project-files.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m3342fc6ab864": { + "source": "Failed to toggle analytics:", + "locations": [ + { + "file": "apps/web/src/modules/editor/panels/analytics-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m854ffc76dae2": { + "source": "No vulnerabilities found", + "locations": [ + { + "file": "apps/web/src/modules/editor/panels/security-panel-types.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m6d74aa85ab11": { + "source": "No hardcoded secrets found", + "locations": [ + { + "file": "apps/web/src/modules/editor/panels/security-panel-types.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m3796755a6d14": { + "source": "No sensitive data found in source files", + "locations": [ + { + "file": "apps/web/src/modules/editor/panels/security-panel-types.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m5884884d4a46": { + "source": "No security anti-patterns found", + "locations": [ + { + "file": "apps/web/src/modules/editor/panels/security-panel-types.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mc79f9389a95a": { + "source": "Failed to save:", + "locations": [ + { + "file": "apps/web/src/modules/editor/panels/use-code-panel.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m6e99e5419d22": { + "source": "Failed to create folder", + "locations": [ + { + "file": "apps/web/src/modules/editor/panels/use-files-panel.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mbba9caec6786": { + "source": "Failed to rename file", + "locations": [ + { + "file": "apps/web/src/modules/editor/panels/use-files-panel.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m6b79e319f042": { + "source": "Failed to move file", + "locations": [ + { + "file": "apps/web/src/modules/editor/panels/use-files-panel.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m23eba0b9be4d": { + "source": "Failed to rename file:", + "locations": [ + { + "file": "apps/web/src/modules/editor/sidebar/file-tree.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mf46a9d658a25": { + "source": "Failed to copy path to clipboard", + "locations": [ + { + "file": "apps/web/src/modules/editor/sidebar/file-tree.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m9086a92b0640": { + "source": "Failed to create context file:", + "locations": [ + { + "file": "apps/web/src/modules/editor/sidebar/knowledge-tab.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m12f902a8ad17": { + "source": "Failed to load versions", + "locations": [ + { + "file": "apps/web/src/modules/editor/sidebar/use-version-history.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mcc3b8b19aabe": { + "source": "No version selected", + "locations": [ + { + "file": "apps/web/src/modules/editor/sidebar/use-version-history.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m849d793bef40": { + "source": "Failed to assign environment:", + "locations": [ + { + "file": "apps/web/src/modules/environments/env-tabs.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mb7d8d2c9a4b3": { + "source": "Failed to load environments", + "locations": [ + { + "file": "apps/web/src/modules/environments/use-environments.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m99af0e812303": { + "source": "Failed to create", + "locations": [ + { + "file": "apps/web/src/modules/integrations/add-integration-form.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "me8d8c2aa2455": { + "source": "Failed to start OAuth flow", + "locations": [ + { + "file": "apps/web/src/modules/integrations/connect-flow-oauth.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m54a5f040fdc6": { + "source": "Failed to start enhanced auth", + "locations": [ + { + "file": "apps/web/src/modules/integrations/connect-flow-oauth.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m81c865717d30": { + "source": "Failed to save credentials", + "locations": [ + { + "file": "apps/web/src/modules/integrations/integration-config-form.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m2dd7d312a651": { + "source": "Failed to load integrations", + "locations": [ + { + "file": "apps/web/src/modules/integrations/integrations-admin-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m8eb4917bbe54": { + "source": "Failed to update", + "locations": [ + { + "file": "apps/web/src/modules/integrations/integrations-admin-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m88563d1f786d": { + "source": "No auth needed", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integration-catalog.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m81454f428d2e": { + "source": "Failed to load catalog", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integration-catalog.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m364e701ac186": { + "source": "Failed to file report", + "locations": [ + { + "file": "apps/web/src/modules/marketplace/report-listing-dialog.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mb498c7ef2e2b": { + "source": "Failed to add server", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/mcp-add-server-form.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mfb23f43b0848": { + "source": "Connection test initiated", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/mcp-connector-card.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mf69e33af723e": { + "source": "Could not discover this server's OAuth endpoints. Check the server URL is still reachable.", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/mcp-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m8fd9698f6822": { + "source": "Failed to start re-authentication", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/mcp-panel.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "me0e158d1a1c5": { + "source": "Failed to delete project", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-danger.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m25446f2f1d63": { + "source": "Failed to load AI settings", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-doable-ai.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m5fc4c4b3e470": { + "source": "Failed to add domain", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-domain.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mfbc3b14bc5b6": { + "source": "Failed to remove domain", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-domain.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "ma4b17bc7db59": { + "source": "You have unsaved changes", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-general.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m3d99cc91be52": { + "source": "Failed to load rate limit settings", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-ratelimit.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m78bef06b934f": { + "source": "Failed to load API keys", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-security.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mac0faf623b6b": { + "source": "Failed to create key", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-security.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "md3b8762758d8": { + "source": "Failed to revoke key", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-security.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m03ccf434d293": { + "source": "Failed to set project environment:", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-tabs.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mb84177fa1580": { + "source": "Failed to load project", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "meacb01abdcf6": { + "source": "Failed to get data token", + "locations": [ + { + "file": "apps/web/src/modules/settings/database/hooks/use-data-token.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m6c1e1de39441": { + "source": "Failed to load schema", + "locations": [ + { + "file": "apps/web/src/modules/settings/database/panes/danger-pane.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m9ed1f7cf0aba": { + "source": "Failed to drop table", + "locations": [ + { + "file": "apps/web/src/modules/settings/database/panes/danger-pane.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "ma6013efaacd9": { + "source": "Failed to reset database", + "locations": [ + { + "file": "apps/web/src/modules/settings/database/panes/danger-pane.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m1a8dccc9e37f": { + "source": "Failed to load migrations", + "locations": [ + { + "file": "apps/web/src/modules/settings/database/panes/migrations-pane.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "md18e10549a59": { + "source": "Failed to enable row-level security", + "locations": [ + { + "file": "apps/web/src/modules/settings/database/panes/schema-pane.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m6938cc96576b": { + "source": "Failed to load MCP servers", + "locations": [ + { + "file": "apps/web/src/modules/settings/hooks/use-mcp-connectors.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m6b8d7a31a410": { + "source": "Failed to load skills & rules", + "locations": [ + { + "file": "apps/web/src/modules/settings/hooks/use-skills-rules.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m78f5005a18ba": { + "source": "Failed to load skills", + "locations": [ + { + "file": "apps/web/src/modules/skills/use-skills.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mac674f0b0e04": { + "source": "Failed to revoke invite", + "locations": [ + { + "file": "apps/web/src/modules/workspace/components/members-rows.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "mdf556f74a44f": { + "source": "Failed to generate link", + "locations": [ + { + "file": "apps/web/src/modules/workspace/components/members-rows.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m978a1dc5401a": { + "source": "Failed to copy to clipboard", + "locations": [ + { + "file": "apps/web/src/modules/workspace/components/members-rows.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m8a95759bc08a": { + "source": "Failed to delete workspace", + "locations": [ + { + "file": "apps/web/src/modules/workspace/components/workspace-settings-danger.tsx", + "kind": "feedback-or-preset" + } + ] + }, + "m12b33b8cab97": { + "source": "No workspace selected", + "locations": [ + { + "file": "apps/web/src/modules/workspace/hooks/use-workspace-members.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m1bfb9a169566": { + "source": "GPT-5.5, GPT-5.4, GPT-4.1, o3, o4, and more — the full OpenAI lineup", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-major.ts", + "kind": "feedback-or-preset" + } + ] + }, + "ma57ba2df86e9": { + "source": "Claude Opus 4.7, Sonnet 4.6, and Haiku 4.5 from Anthropic", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-major.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m42f002bd954b": { + "source": "Gemini 3.1 Pro, 3.5 Flash, 2.5 Pro and Flash via Google AI Studio", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-major.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m7059e2430151": { + "source": "OpenAI models hosted on Microsoft Azure (GPT-5.5, 5.4, 4.1, 4o)", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-major.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m11a4f35f2288": { + "source": "Foundation models via AWS Bedrock (Claude, Llama, etc.)", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-major.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mf401c755a254": { + "source": "Google Vertex AI with Gemini, Claude, and more", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-major.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mef12689c0df3": { + "source": "Access 200+ models from all providers through one API", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-major.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m281caa6db5e3": { + "source": "Open-source models with fast inference", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-major.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m3fbb3a60d15a": { + "source": "Blazing-fast inference for open-source models", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-major.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mcbf219b50afc": { + "source": "Smart routing across LLM providers for optimal cost/quality", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-major.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m62c9cd419e85": { + "source": "Curated, benchmarked AI models optimized for coding agents — pay as you go", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-major.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m0d9934ad122e": { + "source": "Low-cost open coding models — $5 first month, then $10/mo", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-major.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m45ac1366f829": { + "source": "Kimi K2.6 (262k ctx) — long-context autonomous agent model from Moonshot AI", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m7e60fda55835": { + "source": "Qwen 3.6 Plus (1M ctx) and other models via Alibaba DashScope", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mdd88cf49f85c": { + "source": "GLM models from Zhipu AI (Tsinghua-backed)", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mad1621b95174": { + "source": "ERNIE and other models via Baidu Qianfan", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "me5c0e7d030c2": { + "source": "Doubao models from ByteDance's Volcengine", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mea917b1e5993": { + "source": "MiniMax M2.7 (205k ctx) and M2.5 — strong coding & agent models", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m2f40080fde12": { + "source": "Step models with strong reasoning capabilities", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mc0fd27dd2462": { + "source": "Yi series models from Kai-Fu Lee's 01.AI", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mca46a1f353d1": { + "source": "Hunyuan large language models from Tencent", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m0789c34b7782": { + "source": "Wafer-scale AI chips with ultra-fast inference", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m90e31bb9ef46": { + "source": "Jamba and Jurassic models from AI21 Labs", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m1e3b881b6bf5": { + "source": "Decentralized AI compute marketplace", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m94e4ba89adce": { + "source": "Serverless inference for popular open-source models", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m162c0405e75f": { + "source": "NVIDIA-optimized model inference microservices", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mc02a911cc422": { + "source": "Run AI models on Cloudflare's global edge network", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m8c6e1ff78019": { + "source": "European AI cloud with GPU infrastructure", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "md2520b053464": { + "source": "French cloud provider with AI inference endpoints", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mbb50ba53b742": { + "source": "Budget-friendly AI inference platform", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m1c9a4f83f2ba": { + "source": "Serverless AI platform with per-model endpoints", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mc62c862895c9": { + "source": "European cloud with sovereign AI endpoints", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-regional.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m803f5c2de1fc": { + "source": "Ultra-fast LPU inference — free tier with no credit card", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-special.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m4a6191e28da1": { + "source": "Mistral Large 3, Medium 3, Small 4, and Codestral 2508", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-special.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m34fc1656f697": { + "source": "Enterprise-focused RAG and command models", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-special.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m279d41d16c35": { + "source": "Grok 4.20 (2M ctx), Grok 4.3 (1M ctx), Grok 4.1 Fast and Grok 3 Mini from xAI", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-special.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m61f057961dce": { + "source": "DeepSeek V4 Pro & Flash — 1M ctx, open-weight MoE from China", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-special.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mcb5d90692af1": { + "source": "Search-augmented AI with real-time web access", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-special.ts", + "kind": "feedback-or-preset" + } + ] + }, + "me64591b66e23": { + "source": "High-throughput AI inference on custom hardware", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-special.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m98b29bed00e9": { + "source": "Affordable GPU cloud for LLM and image generation", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-special.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m7bbc04b4ac78": { + "source": "Decentralized AI inference infrastructure", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-cloud-special.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mf0219f5a51a9": { + "source": "Run LLMs locally with one command — most popular local engine", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m21b0f67360f6": { + "source": "Desktop app to discover, download, and run local LLMs", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m299c12786d97": { + "source": "High-throughput LLM serving with PagedAttention", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m176f619ac21e": { + "source": "C/C++ LLM inference with minimal dependencies", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m6f92db761337": { + "source": "Open-source desktop AI assistant with local model support", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m01dc4dbe696e": { + "source": "Drop-in OpenAI replacement running locally with various backends", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m244fded4e09a": { + "source": "Privacy-first local AI — runs on consumer hardware", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m230665563339": { + "source": "No tool calling, no vision — most limited of primary engines", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mdfdaf12a82f2": { + "source": "Gradio web UI for running large language models", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "ma0b5c98fbd84": { + "source": "Easy-to-use GGUF runner with built-in web UI", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m45540635cd46": { + "source": "Text Generation Inference by HuggingFace", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m68cec3ffa8b3": { + "source": "Self-hosted AI coding assistant", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mb7d79c357b8f": { + "source": "Single-file executable LLMs by Mozilla", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m23445c5d1873": { + "source": "Local AI engine from the Jan team — multi-engine support", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m74a7ddeefd94": { + "source": "Run LLMs as Docker containers with built-in GPU support", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "me098f8bee7f4": { + "source": "Efficient LLM deployment toolkit from Shanghai AI Lab", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "md4909cab2e30": { + "source": "Fast serving framework for large language and vision models", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m5ce23da7d641": { + "source": "ExLlamaV2-based API server for fast GPTQ/EXL2 inference", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m13b1820c01c7": { + "source": "Machine Learning Compilation for universal LLM deployment", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mf24ad819b717": { + "source": "High-performance inference engine (vLLM fork) for roleplay and creative use", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m2a746b70859f": { + "source": "Desktop AI chat app with local and cloud model support", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mbeac9f3fa80a": { + "source": "Self-hosted web UI for local and remote LLMs", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "mf0348548ae93": { + "source": "Open-source ChatGPT-like UI supporting multiple providers", + "locations": [ + { + "file": "packages/shared/src/ai/provider-data-local.ts", + "kind": "feedback-or-preset" + } + ] + }, + "m906f3d903741": { + "source": "OAuth authentication failed. Please try again.", + "locations": [ + { + "file": "apps/web/src/app/(auth)/login/page.tsx", + "kind": "deep-interface" + } + ] + }, + "mfd033bff00ba": { + "source": "Access was denied. Please try again.", + "locations": [ + { + "file": "apps/web/src/app/(auth)/login/page.tsx", + "kind": "deep-interface" + } + ] + }, + "m84c480693ab2": { + "source": "Your signup was not approved.", + "locations": [ + { + "file": "apps/web/src/app/(auth)/login/page.tsx", + "kind": "deep-interface" + } + ] + }, + "mc4da52bf3ef6": { + "source": "AI settings saved", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/page.tsx", + "kind": "deep-interface" + } + ] + }, + "m569a3f9b4fa7": { + "source": "AI settings reset", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/page.tsx", + "kind": "deep-interface" + } + ] + }, + "m2e9fd8e7d617": { + "source": "Bulk applied to {v0} users — {v1}", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/page.tsx", + "kind": "deep-interface" + } + ] + }, + "m3d8ef18bd4f0": { + "source": "{v0} → {v1}", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/page.tsx", + "kind": "deep-interface" + } + ] + }, + "m702238944012": { + "source": "{v0} → {v1} plan", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/page.tsx", + "kind": "deep-interface" + } + ] + }, + "mff17b501efe0": { + "source": "Credits updated for {v0}", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/page.tsx", + "kind": "deep-interface" + } + ] + }, + "ma7e0127349ec": { + "source": "Failed to {v0} {v1}", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/signups-panel.tsx", + "kind": "deep-interface" + } + ] + }, + "m176685608555": { + "source": "Unblocked {v0}", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/signups-panel.tsx", + "kind": "deep-interface" + } + ] + }, + "m8fc1d649fea0": { + "source": "Failed to unblock {v0}", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/admin/signups-panel.tsx", + "kind": "deep-interface" + } + ] + }, + "mab729c2f1cd7": { + "source": "\"{v0}\" deleted", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/dashboard/use-dashboard.ts", + "kind": "deep-interface" + } + ] + }, + "m2e5063f18b58": { + "source": "Failed to delete \"{v0}\"", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/dashboard/use-dashboard.ts", + "kind": "deep-interface" + } + ] + }, + "mcae3da3b84cd": { + "source": "{v0} project{v1} deleted", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/dashboard/use-dashboard.ts", + "kind": "deep-interface" + } + ] + }, + "m8281f2bca24e": { + "source": "Couldn't load the Discover feed. Please try again.", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/discover/page.tsx", + "kind": "deep-interface" + } + ] + }, + "mcd99493692c6": { + "source": "Couldn't load projects. Please try again.", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/discover/page.tsx", + "kind": "deep-interface" + } + ] + }, + "mad1c9c1a3f66": { + "source": "Only workspace owners / admins can change workspace defaults.", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "deep-interface" + } + ] + }, + "me5f88a6a15eb": { + "source": "Workspace AI defaults saved.", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/doable-ai-tab.tsx", + "kind": "deep-interface" + } + ] + }, + "m96d8a2f81d45": { + "source": "text-amber-400 bg-amber-500/10", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "deep-interface" + } + ] + }, + "meb2135781360": { + "source": "text-blue-400 bg-blue-500/10", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "deep-interface" + } + ] + }, + "m80e515468102": { + "source": "text-muted-foreground bg-muted", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/general-tab.tsx", + "kind": "deep-interface" + } + ] + }, + "m29145bd2ff95": { + "source": "Tech stack, conventions, domain terms", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/workspace-knowledge-editor.tsx", + "kind": "deep-interface" + } + ] + }, + "m267eae2e206e": { + "source": "Rules for the AI to follow", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/workspace-knowledge-editor.tsx", + "kind": "deep-interface" + } + ] + }, + "m3bd961d29f18": { + "source": "Brand voice and personality", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/workspace-knowledge-editor.tsx", + "kind": "deep-interface" + } + ] + }, + "m19c44fb9ed12": { + "source": "Core values and mission", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/workspace-knowledge-editor.tsx", + "kind": "deep-interface" + } + ] + }, + "mf1022ee92088": { + "source": "Persistent facts and preferences", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/workspace-knowledge-editor.tsx", + "kind": "deep-interface" + } + ] + }, + "m9c559d4d4f2c": { + "source": "User context and background", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/workspace-knowledge-editor.tsx", + "kind": "deep-interface" + } + ] + }, + "mbf180e7a2452": { + "source": "Project roadmap and milestones", + "locations": [ + { + "file": "apps/web/src/app/(dashboard)/workspace-settings/workspace-knowledge-editor.tsx", + "kind": "deep-interface" + } + ] + }, + "mc44fbad1ceff": { + "source": "Access was denied by the provider.", + "locations": [ + { + "file": "apps/web/src/app/auth/callback/page.tsx", + "kind": "deep-interface" + } + ] + }, + "m0012375416df": { + "source": "Authorization code was missing.", + "locations": [ + { + "file": "apps/web/src/app/auth/callback/page.tsx", + "kind": "deep-interface" + } + ] + }, + "m0e2226b5235f": { + "source": "Welcome", + "locations": [ + { + "file": "apps/web/src/app/setup/WizardShell.tsx", + "kind": "deep-interface" + } + ] + }, + "m5bbbe53187ad": { + "source": "Sign-in", + "locations": [ + { + "file": "apps/web/src/app/setup/WizardShell.tsx", + "kind": "deep-interface" + } + ] + }, + "m84e1ec2c5bd3": { + "source": "AI Provider", + "locations": [ + { + "file": "apps/web/src/app/setup/WizardShell.tsx", + "kind": "deep-interface" + } + ] + }, + "mf9191531404c": { + "source": "Cloudflare", + "locations": [ + { + "file": "apps/web/src/app/setup/WizardShell.tsx", + "kind": "deep-interface" + } + ] + }, + "mad9ff7b7934e": { + "source": "Plans & Billing", + "locations": [ + { + "file": "apps/web/src/app/setup/WizardShell.tsx", + "kind": "deep-interface" + } + ] + }, + "mfd72092904a8": { + "source": "Choose Provider", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/components/provider-wizard-types.ts", + "kind": "deep-interface" + } + ] + }, + "m40611abbdda2": { + "source": "Validate", + "locations": [ + { + "file": "apps/web/src/modules/ai-settings/components/provider-wizard-types.ts", + "kind": "deep-interface" + } + ] + }, + "mb20ee2a85fa5": { + "source": "Planning…", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-agent-progress.ts", + "kind": "deep-interface" + } + ] + }, + "mb68613d48751": { + "source": "Waiting for your input", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-agent-progress.ts", + "kind": "deep-interface" + } + ] + }, + "mc3ec64928d7d": { + "source": "Reading files…", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-agent-progress.ts", + "kind": "deep-interface" + } + ] + }, + "mfeee86f87fe7": { + "source": "Writing code…", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-agent-progress.ts", + "kind": "deep-interface" + } + ] + }, + "m2ff5dfc77241": { + "source": "Running command…", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-agent-progress.ts", + "kind": "deep-interface" + } + ] + }, + "mbea44ca44951": { + "source": "Fixing issues…", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-agent-progress.ts", + "kind": "deep-interface" + } + ] + }, + "m95de7a5b1f8f": { + "source": "Installing packages…", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-agent-progress.ts", + "kind": "deep-interface" + } + ] + }, + "m280d3efaadd1": { + "source": "Running tests…", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-agent-progress.ts", + "kind": "deep-interface" + } + ] + }, + "md53b790e544c": { + "source": "Responding…", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-agent-progress.ts", + "kind": "deep-interface" + } + ] + }, + "md353a99eb455": { + "source": "Cancelled", + "locations": [ + { + "file": "apps/web/src/modules/editor/hooks/use-agent-progress.ts", + "kind": "deep-interface" + } + ] + }, + "mcf65fc4a78bc": { + "source": "Loading page...", + "locations": [ + { + "file": "apps/web/src/modules/editor/panels/speed-panel-data.ts", + "kind": "deep-interface" + } + ] + }, + "m566167b27677": { + "source": "Analyzing performance...", + "locations": [ + { + "file": "apps/web/src/modules/editor/panels/speed-panel-data.ts", + "kind": "deep-interface" + } + ] + }, + "m9b0245d6e807": { + "source": "Checking accessibility...", + "locations": [ + { + "file": "apps/web/src/modules/editor/panels/speed-panel-data.ts", + "kind": "deep-interface" + } + ] + }, + "m194254c2fabd": { + "source": "Generating report...", + "locations": [ + { + "file": "apps/web/src/modules/editor/panels/speed-panel-data.ts", + "kind": "deep-interface" + } + ] + }, + "m3981a2b9c1ef": { + "source": "Communication", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integration-catalog.ts", + "kind": "deep-interface" + } + ] + }, + "m85c1562cd9ce": { + "source": "Developer Tools", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integration-catalog.ts", + "kind": "deep-interface" + } + ] + }, + "m12f9e542a4a5": { + "source": "CRM & Sales", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integration-catalog.ts", + "kind": "deep-interface" + } + ] + }, + "ma4ca9a859b99": { + "source": "Finance & Payments", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integration-catalog.ts", + "kind": "deep-interface" + } + ] + }, + "m4edf08238dde": { + "source": "AI & ML", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integration-catalog.ts", + "kind": "deep-interface" + } + ] + }, + "m31423c3c9989": { + "source": "Data & Storage", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integration-catalog.ts", + "kind": "deep-interface" + } + ] + }, + "m8dfdbc2ef439": { + "source": "Social Media", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integration-catalog.ts", + "kind": "deep-interface" + } + ] + }, + "m572480ceef9b": { + "source": "E-Commerce", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integration-catalog.ts", + "kind": "deep-interface" + } + ] + }, + "m58a34ff5ee9e": { + "source": "Project Management", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integration-catalog.ts", + "kind": "deep-interface" + } + ] + }, + "med07c04922e0": { + "source": "Customer Support", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integration-catalog.ts", + "kind": "deep-interface" + } + ] + }, + "m15e68b1f4657": { + "source": "HR", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integration-catalog.ts", + "kind": "deep-interface" + } + ] + }, + "md909750b1bbb": { + "source": "Automation", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integration-catalog.ts", + "kind": "deep-interface" + } + ] + }, + "m05e43eb0f640": { + "source": "Username & Password", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integration-catalog.ts", + "kind": "deep-interface" + } + ] + }, + "m61bebbf883a8": { + "source": "Web service", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integrations.ts", + "kind": "deep-interface" + } + ] + }, + "m04520ef10d76": { + "source": "HTTP streaming", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integrations.ts", + "kind": "deep-interface" + } + ] + }, + "mb192572d71ea": { + "source": "HTTP SSE", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integrations.ts", + "kind": "deep-interface" + } + ] + }, + "mb7b2963682a5": { + "source": "Built-in app", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integrations.ts", + "kind": "deep-interface" + } + ] + }, + "m7fdfda5f50a4": { + "source": "managed", + "locations": [ + { + "file": "apps/web/src/modules/integrations/use-integrations.ts", + "kind": "deep-interface" + } + ] + }, + "mfe00af08cc4f": { + "source": "Saved {v0}", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-context.tsx", + "kind": "deep-interface" + } + ] + }, + "m4dd069cac807": { + "source": "Project deleted successfully", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-danger.tsx", + "kind": "deep-interface" + } + ] + }, + "m2bc6b9b66cbf": { + "source": "Transfer request sent. The recipient will receive an email to accept.", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-danger.tsx", + "kind": "deep-interface" + } + ] + }, + "m04d2a1d27e3f": { + "source": "Doable settings saved.", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-doable-ai.tsx", + "kind": "deep-interface" + } + ] + }, + "ma01bbf2233a1": { + "source": "Type \"ERASE\" exactly to confirm.", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-doable-ai.tsx", + "kind": "deep-interface" + } + ] + }, + "mbed8e537b6cb": { + "source": "Erased {v0} rows across {v1} table(s). Mode: {v2}.", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-doable-ai.tsx", + "kind": "deep-interface" + } + ] + }, + "m0880f7d59cd3": { + "source": "Domain {v0} added. Configure your DNS records below.", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-domain.tsx", + "kind": "deep-interface" + } + ] + }, + "m8884f64ece53": { + "source": "{v0} is now active!", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-domain.tsx", + "kind": "deep-interface" + } + ] + }, + "m186cc53091ad": { + "source": "Domain removed", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-domain.tsx", + "kind": "deep-interface" + } + ] + }, + "m5a8a5887401e": { + "source": "Project settings saved", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-general.tsx", + "kind": "deep-interface" + } + ] + }, + "mdb4653c7fed7": { + "source": "Rate limiting settings saved", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-ratelimit.tsx", + "kind": "deep-interface" + } + ] + }, + "mca702c65aac4": { + "source": "API key created — copy it now, it won't be shown again", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-security.tsx", + "kind": "deep-interface" + } + ] + }, + "m697393c778b5": { + "source": "Key revoked", + "locations": [ + { + "file": "apps/web/src/modules/settings/components/project-settings-security.tsx", + "kind": "deep-interface" + } + ] + }, + "me4dc2f78bb78": { + "source": "Invite sent to {v0}", + "locations": [ + { + "file": "apps/web/src/modules/workspace/components/members-page.tsx", + "kind": "deep-interface" + } + ] + }, + "m6afe87e532b3": { + "source": "{v0} has been removed", + "locations": [ + { + "file": "apps/web/src/modules/workspace/components/members-page.tsx", + "kind": "deep-interface" + } + ] + }, + "m958814af76e3": { + "source": "Updated {v0}'s role to {v1}", + "locations": [ + { + "file": "apps/web/src/modules/workspace/components/members-rows.tsx", + "kind": "deep-interface" + } + ] + }, + "m5aebb558ca6a": { + "source": "Revoked invite for {v0}", + "locations": [ + { + "file": "apps/web/src/modules/workspace/components/members-rows.tsx", + "kind": "deep-interface" + } + ] + }, + "m255cd0e91bb6": { + "source": "Invite link generated", + "locations": [ + { + "file": "apps/web/src/modules/workspace/components/members-rows.tsx", + "kind": "deep-interface" + } + ] + }, + "ma459ff6332b7": { + "source": "Workspace deleted successfully", + "locations": [ + { + "file": "apps/web/src/modules/workspace/components/workspace-settings-danger.tsx", + "kind": "deep-interface" + } + ] + }, + "m6bdabff6ddfa": { + "source": "Transfer request sent.", + "locations": [ + { + "file": "apps/web/src/modules/workspace/components/workspace-settings-danger.tsx", + "kind": "deep-interface" + } + ] + }, + "mdfbfb561815a": { + "source": "Workspace settings saved", + "locations": [ + { + "file": "apps/web/src/modules/workspace/components/workspace-settings-general.tsx", + "kind": "deep-interface" + } + ] + }, + "m945131b556b7": { + "source": "Bring frontier AI into every enterprise. Empower every FDE.", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "mbe8ba6b03cc1": { + "source": "Understand business needs. Build working applications. Take AI from demo to delivery.", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m45855bb05ece": { + "source": "I want to send my friend a working app.", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m8870ef6e570f": { + "source": "Deploy → share the URL.", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m7b14e3ebcb54": { + "source": "I want others to fork my project as a starting point.", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m0697819879dd": { + "source": "Share to Discover.", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "me4b4d937bb3c": { + "source": "I built a useful set of skills + rules and want others to install them.", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "ma6855cfa2e04": { + "source": "List on Marketplace.", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m92add4e44710": { + "source": "I want to charge for an AI environment I built.", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "mc1e189e00075": { + "source": "List on Marketplace with a price (Stripe Connect required).", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m11b39c93777e": { + "source": "Agent", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "ma6e600a10fed": { + "source": "Context", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m64fce9d5ffd4": { + "source": "e.g. Read-only planning tools", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "mbc1a02882357": { + "source": "e.g. Always answer in concise bullet points. Never reveal internal pricing. If you don't know, say so.", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m6976f80ee219": { + "source": "e.g. Dashboard, Settings, Pricing", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m0868745e457a": { + "source": "e.g. My App", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m11a59c70fe9f": { + "source": "e.g. You always answer in haiku.", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m81c1f9879c76": { + "source": "e.g. React Best Practices", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m593af471fb94": { + "source": "e.g. TypeScript Conventions", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m22d3c604d149": { + "source": "e.g. claude-sonnet-4 (blank = auto)", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "mc6a41eb77538": { + "source": "e.g. gpt-4o", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m57bf75e785b4": { + "source": "e.g. gpt-4o, claude-sonnet-4", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m3d0e1a4bef76": { + "source": "e.g. POST /chat", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m10571c479770": { + "source": "e.g. style-guide, api-docs", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m8987aa914076": { + "source": "e.g. MiniMax-M2.7, gpt-4o, claude-sonnet-4", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m644d8dedb20f": { + "source": "e.g. grok-3, qwen-turbo, llama-3.1-70b", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m7f71b9ebafee": { + "source": "e.g. mixtral-8x7b, llama-3.1-70b", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "mad3913747c59": { + "source": "e.g. password=\\\\S+", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m0d042ad55974": { + "source": "e.g. claude-sonnet-4 (leave blank for auto)", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "mdeee27768716": { + "source": "e.g. React + Supabase", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m228e712922fb": { + "source": "e.g. Notion, Slack, My API", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m34496619eba6": { + "source": "e.g. text-embedding-3-small or gemini-embedding-001", + "locations": [ + { + "file": "manual review", + "kind": "reviewed" + } + ] + }, + "m80ef0ed787b1": { + "source": "Custom OpenAI-compatible", + "locations": [ + { + "file": "setup", + "kind": "reviewed" + } + ] + }, + "mdc1249ded00f": { + "source": "Step {current} of {total}", + "locations": [ + { + "file": "setup", + "kind": "reviewed" + } + ] + }, + "m86d376d01c97": { + "source": "Show all {count} providers", + "locations": [ + { + "file": "setup", + "kind": "reviewed" + } + ] + }, + "m781978fa4c25": { + "source": "({count} popular shown)", + "locations": [ + { + "file": "setup", + "kind": "reviewed" + } + ] + }, + "m3ca7d842d120": { + "source": "Plan mode", + "locations": [ + { + "file": "editor/admin modes", + "kind": "context" + } + ] + }, + "me6c13915614a": { + "source": "Build mode", + "locations": [ + { + "file": "editor/admin modes", + "kind": "context" + } + ] + }, + "me012cf0c64ea": { + "source": "Let's make it Doable, {name}", + "locations": [ + { + "file": "dashboard", + "kind": "interpolation" + } + ] + }, + "mb48bddfa2484": { + "source": "What's Doable today, {name}?", + "locations": [ + { + "file": "dashboard", + "kind": "interpolation" + } + ] + }, + "m69d3f0312d50": { + "source": "Ready to get it done, {name}?", + "locations": [ + { + "file": "dashboard", + "kind": "interpolation" + } + ] + }, + "m8449d78cdc66": { + "source": "Dream it. Do it, {name}", + "locations": [ + { + "file": "dashboard", + "kind": "interpolation" + } + ] + }, + "m79824f18e830": { + "source": "What will you ship, {name}?", + "locations": [ + { + "file": "dashboard", + "kind": "interpolation" + } + ] + }, + "m4fc94bed6b66": { + "source": "Describe the business workflow you want to build...", + "locations": [ + { + "file": "dashboard", + "kind": "reviewed" + } + ] + }, + "m5dd9c70d5861": { + "source": "Build a SaaS landing page with pricing...", + "locations": [ + { + "file": "dashboard", + "kind": "reviewed" + } + ] + }, + "m082a69fe14eb": { + "source": "Create a portfolio website with animations...", + "locations": [ + { + "file": "dashboard", + "kind": "reviewed" + } + ] + }, + "m8e15a147e1fa": { + "source": "Design a task management app...", + "locations": [ + { + "file": "dashboard", + "kind": "reviewed" + } + ] + }, + "m5d8436b7898b": { + "source": "Make an e-commerce store with checkout...", + "locations": [ + { + "file": "dashboard", + "kind": "reviewed" + } + ] + }, + "mb698b2eb1332": { + "source": "Build a social media dashboard...", + "locations": [ + { + "file": "dashboard", + "kind": "reviewed" + } + ] + }, + "mce4fad2f76c1": { + "source": "Create a recipe sharing platform...", + "locations": [ + { + "file": "dashboard", + "kind": "reviewed" + } + ] + }, + "m80ab5a32d5fa": { + "source": "Design a fitness tracking app...", + "locations": [ + { + "file": "dashboard", + "kind": "reviewed" + } + ] + }, + "mc312e5c16367": { + "source": "Build a blog with markdown support...", + "locations": [ + { + "file": "dashboard", + "kind": "reviewed" + } + ] + }, + "m2376d6697630": { + "source": "Create a real-time chat application...", + "locations": [ + { + "file": "dashboard", + "kind": "reviewed" + } + ] + }, + "mb5d9619378c8": { + "source": "Make an invoice management system...", + "locations": [ + { + "file": "dashboard", + "kind": "reviewed" + } + ] + }, + "m917131e15fce": { + "source": "Preparing workspace...", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "mfe8383d5a335": { + "source": "Creating project scaffold...", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "md30642dc738e": { + "source": "Creating project files...", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "me232bcde0526": { + "source": "Creating project files…", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "ma3277495f754": { + "source": "Installing dependencies...", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "m9d7a7a4c4b38": { + "source": "Starting dev server...", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "m723a6d7e4364": { + "source": "Setting up your workspace...", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "ma2ccc3533bd6": { + "source": "Preparing live preview...", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "m19e5fe04c9a2": { + "source": "Getting things ready...", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "m4a7624b24100": { + "source": "Starting the live preview so you can see changes instantly.", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "m01d89a8ad232": { + "source": "AI is still working on your project...", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "m05222d08b282": { + "source": "Preparing to build your presentation…", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "mb0eaeacb1b36": { + "source": "Writing response...", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "mc898850137a8": { + "source": "Connecting to AI…", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "m426613755962": { + "source": "Analyzing your request…", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "m1a7f1e13e7ad": { + "source": "Task cancelled", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "mb4739a4f0865": { + "source": "Thinking...", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "m0149c7b12cba": { + "source": "Resolving {package}… ({count} packages)", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "md5419b7b64cb": { + "source": "Installed {count} packages", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "m5f2d69594194": { + "source": "Installing packages… ({seconds}s)", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "mb708e0e2313c": { + "source": "Downloading and linking packages… ({seconds}s)", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "m79c009d210ab": { + "source": "Dependencies installed ({seconds}s)", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "m0e2c8a0f7968": { + "source": "Loading preview… ({seconds}s)", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "m9335b34496db": { + "source": "Downloading packages… ({seconds}s)", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "m322ee38b8f8f": { + "source": "Installing dependencies… ({seconds}s)", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "me2a11607dd18": { + "source": "Linking packages… ({seconds}s)", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "mb661a5695b24": { + "source": "Almost there… ({seconds}s)", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "runtime-status" + } + ] + }, + "mfe98f42cd51a": { + "source": "AI Chat", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "m5466ef4b84a5": { + "source": "AI chat and code generation", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "me605122cbc04": { + "source": "Configure AI models, providers, and enforcement", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "m7d6a0afa7884": { + "source": "Click-to-edit visual editing in preview", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "mbac7a2b4b2a8": { + "source": "Monaco code editor (Dev Mode)", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "md974b925781d": { + "source": "Connect and sync projects with GitHub", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "m624629124403": { + "source": "Publish / Deploy", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "mf2792c4a79d6": { + "source": "Publish projects to doable.me or custom domains", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "m991a7731aca7": { + "source": "Use your own domain for published apps", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "m5a479c403e5b": { + "source": "Create projects from templates", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "mfddc1730af3e": { + "source": "Built-in analytics for published apps", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "m92349d06fd0e": { + "source": "Billing & Credits", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "me2dc79aa3ffc": { + "source": "Manage subscriptions and credits", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "m3e42eb218756": { + "source": "View and restore previous versions", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "m2e2d90970121": { + "source": "Create and manage workspaces", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "m8ec6f568c9e2": { + "source": "Invite and manage workspace members", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "m767b6b8b1593": { + "source": "Configure integrations and MCP servers", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "m9e61318b08e7": { + "source": "Security scanning and vulnerability management", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "maf48bcf0b951": { + "source": "Frontend", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "mfa4bec978e4d": { + "source": "Full-Stack", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "mc6629edc7478": { + "source": "Disable {name}", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "mdd01fc045da3": { + "source": "Enable {name}", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "m2a52bd3a58de": { + "source": "workspace enforcement", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "mce28416a34d0": { + "source": "user preference", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "m1d17f10c9a01": { + "source": "workspace Copilot setting", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "m4c9f0ab64fff": { + "source": "workspace custom provider", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "m356a31b41f9f": { + "source": "workspace setting", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "m9062da45215a": { + "source": "no model configured", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "m06bde129f751": { + "source": "Custom provider (workspace default)", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "m404dd0fc90d3": { + "source": "GitHub Copilot (workspace default)", + "locations": [ + { + "file": "app/(dashboard)/admin", + "kind": "platform-metadata" + } + ] + }, + "mbc228f06a4ea": { + "source": "Understanding your request...", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m33e97951020d": { + "source": "Reading file", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m88efdc56ec01": { + "source": "Creating file", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m7fd76d274fb7": { + "source": "Updating file", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m1a446bee1668": { + "source": "Removing file", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m20c0b499fac0": { + "source": "Renaming file", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "mbc9797766c2d": { + "source": "Searching files", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m53b7a62c2b78": { + "source": "Scanning project structure", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m2afb17673ff9": { + "source": "Running command", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "mb1a6be4b5c00": { + "source": "Deploying preview", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "mcba0c8fabef9": { + "source": "Editing file", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m91713a5d3c5b": { + "source": "Writing file", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "md09a58e07d38": { + "source": "Overwriting file", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "ma9a47efd4886": { + "source": "Deleting file", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m15d4ba596aa0": { + "source": "Scanning directory", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m3957258571ff": { + "source": "Searching codebase", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m4f27ff8a9cc5": { + "source": "Finding files", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "md7ad4e191ef9": { + "source": "Executing command", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m5efc7bfe04a0": { + "source": "Running shell", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m6effe77ed662": { + "source": "Running tests", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m68e34b04db6e": { + "source": "Running lint", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "me713536fedeb": { + "source": "Type checking", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m7dc0e0a3a1f5": { + "source": "Updating plan", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "mdf26331fb78b": { + "source": "Auto-fixing issue", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m4e8b16c1f54b": { + "source": "Retrying step", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m5bb23468896b": { + "source": "Designing your presentation slides…", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m8ca687195aba": { + "source": "Improve the styling", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m7d95e21c9692": { + "source": "Add responsive design", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m534cb2034f7d": { + "source": "Add more features", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m6ea57583614b": { + "source": "Fix any issues", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "mb80a37564fbb": { + "source": "Query", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "me1338481990b": { + "source": "Data Schema", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "mc3682617bf76": { + "source": "Data Migrate", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m3d60df7cd3a8": { + "source": "ask clarification", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "mc7c1762aa46c": { + "source": "Ask Clarification", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m0ebb429fa86d": { + "source": "task", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m4bc74b21357c": { + "source": "Task", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "mfaefbbbf05cb": { + "source": "grep", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m16970ed6824c": { + "source": "Grep", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m4fe2446c5d9a": { + "source": "Reading {target}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "m733d78fc0c8c": { + "source": "Creating {target}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "m2d680ebf7ad0": { + "source": "Updating {target}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "m58534c10200b": { + "source": "Removing {target}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "m2b8a5d29d7d1": { + "source": "Renaming {target}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "mb3712e7e124e": { + "source": "Installing {target}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "m460f508f8f46": { + "source": "Editing {target}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "m689db228e3c6": { + "source": "Writing {target}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "m12ce3689b195": { + "source": "Overwriting {target}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "maae90d6ab181": { + "source": "Deleting {target}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "mf9ed6916fef7": { + "source": "Step {count} — {label}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "mbb8ce4ef7aaa": { + "source": "Applied {count} changes", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "mfd1514afd62f": { + "source": "Here are my answers to your questions:\n\n{answers}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "m6b7a91a49a2a": { + "source": "Start building! Here's the approved plan:\n\n**{summary}**\n\n{steps}\n\nBuild each step in order. The full plan details are in .doable/plan.md.", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "mff52ef58a138": { + "source": "Code Editor", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m10d6e2392b1c": { + "source": "Security Center", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "ma05f18eec8ce": { + "source": "Visual Editor", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "mcff2a9d647e2": { + "source": "Workspace Members", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m5acc0da25133": { + "source": "Found a preview issue — fixing it...", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m2127e84f4092": { + "source": "Fixing preview issue...", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "me118ae85bb67": { + "source": "Adding new capabilities", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m82ba2b5792a6": { + "source": "Setting up your presentation", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "mb681b20c70f6": { + "source": "Rendering your slide deck", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m83f857a021fe": { + "source": "Build ran into an issue — working on a fix", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "mc57a09e8f369": { + "source": "Had trouble adding that package", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m5477a72320eb": { + "source": "Hit a snag — figuring it out", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m679e84cac5ea": { + "source": "Added to your project", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m9cf6dbd76c0c": { + "source": "Changes applied", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m5ad3dbd1242a": { + "source": "Got it", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m313bf98ff918": { + "source": "Project mapped out", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m227a147b3240": { + "source": "Search complete", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m996f87b386e1": { + "source": "Ready to use", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "md9e44c03b78d": { + "source": "Build complete", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m7e8ae4865e72": { + "source": "Cleaned up", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "mc884daae36e7": { + "source": "Live and ready", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m59ccecd04642": { + "source": "Issue encountered", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m28628c237508": { + "source": "Running: {target}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "m62f328b65a01": { + "source": "Refining {target}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "m1e5628b48f6b": { + "source": "Reviewing {target}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "m7d0d333d12fa": { + "source": "Searching for {target}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "mf22270321c72": { + "source": "Cleaning up {target}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "m1154e06d2d21": { + "source": "Running {target}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "m186e66214b5a": { + "source": "Adding {target} to your toolkit", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "m93f848de10fd": { + "source": "Building your {context} — {target}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "m6985ca1f4daa": { + "source": "component", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "mab1620a8c2e3": { + "source": "UI element", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m2ad562319767": { + "source": "feature", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m57ffcc28d4b9": { + "source": "utility", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m90a7578caf87": { + "source": "styles", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m1dc5ae5b6817": { + "source": "layout", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "mb7d64a922100": { + "source": "configuration", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "mcaf9f906b16a": { + "source": "documentation", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m329430355fc1": { + "source": "Here are my answers:\n{answers}", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "mae9d0d1aff24": { + "source": "Loading project…", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "me081c4bfb49e": { + "source": "Show {count} earlier steps", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "icu" + } + ] + }, + "mb528a28640bd": { + "source": "Show full prompt ({count}k chars)", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "icu" + } + ] + }, + "m0c556fb76846": { + "source": "Showing {count} of {total} projects", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "icu" + } + ] + }, + "mc3aedd418ebf": { + "source": "Delete {count} projects", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "icu" + } + ] + }, + "m64af6de234a6": { + "source": "Showing {start}–{end} of {total}", + "locations": [ + { + "file": "app/(dashboard)/dashboard/page.tsx", + "kind": "icu" + } + ] + }, + "m652aceea790a": { + "source": "Start fresh", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "expression" + } + ] + }, + "m681b16c2176f": { + "source": "AI generates", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "expression" + } + ] + }, + "mf817b660ab75": { + "source": "Pre-built", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "expression" + } + ] + }, + "me22006500c10": { + "source": "All workspace members", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "expression" + } + ] + }, + "m96f64f836aa3": { + "source": "Project members", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "expression" + } + ] + }, + "ma0dff9932953": { + "source": "AI helps you plan, then does the work", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "expression" + } + ] + }, + "m7cbc9f73acfd": { + "source": "AI writes code directly", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "expression" + } + ] + }, + "m6496c935887f": { + "source": "New line in chat", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "expression" + } + ] + }, + "mf7dfc2c317b4": { + "source": "Toggle code view", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "expression" + } + ] + }, + "m87ab3cc0f01d": { + "source": "Toggle preview", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "expression" + } + ] + }, + "mcb2958c8aaca": { + "source": "Deploy project", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "expression" + } + ] + }, + "mc13ff73b9098": { + "source": "Toggle fullscreen", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "expression" + } + ] + }, + "mc8df66c5fe3f": { + "source": "Close dialog", + "locations": [ + { + "file": "modules/dashboard/components/create-project-dialog.tsx", + "kind": "expression" + } + ] + }, + "mbb0ee409a3fa": { + "source": "Design a portfolio site", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "m99fb9cd2934b": { + "source": "Preview failed to start.", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "expression" + } + ] + }, + "me64576a3b265": { + "source": "Preview failed to start (exit code {code}).", + "locations": [ + { + "file": "app/editor/[projectId]/page.tsx", + "kind": "icu" + } + ] + }, + "mc196e9373911": { + "source": "Connecting to AI model...", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "expression" + } + ] + }, + "m829805cc6c58": { + "source": "Completed {count} actions", + "locations": [ + { + "file": "i18n/progress.ts", + "kind": "icu" + } + ] + }, + "mcacdca0e9b99": { + "source": "Plan finished", + "locations": [ + { + "file": "modules/editor/chat/plan/plan-progress.tsx", + "kind": "expression" + } + ] + }, + "m9776f2e45ce3": { + "source": "Executing plan", + "locations": [ + { + "file": "modules/editor/chat/plan/plan-progress.tsx", + "kind": "expression" + } + ] + }, + "m311d1760445a": { + "source": "Plan needs attention", + "locations": [ + { + "file": "modules/editor/chat/plan/plan-progress.tsx", + "kind": "expression" + } + ] + }, + "mec71278eb553": { + "source": "Plan paused", + "locations": [ + { + "file": "modules/editor/chat/plan/plan-progress.tsx", + "kind": "expression" + } + ] + }, + "m5ee0169f4b8f": { + "source": "Steps show reported results, not elapsed build time.", + "locations": [ + { + "file": "modules/editor/chat/plan/plan-progress.tsx", + "kind": "expression" + } + ] + }, + "m1deff346b554": { + "source": "No active run. Unreported steps remain unconfirmed.", + "locations": [ + { + "file": "modules/editor/chat/plan/plan-progress.tsx", + "kind": "expression" + } + ] + }, + "m5776262a5788": { + "source": "Could not approve plan. Please try again.", + "locations": [ + { + "file": "modules/editor/chat/plan/plan-progress.tsx", + "kind": "expression" + } + ] + }, + "m8027f432a7fb": { + "source": "Interface language", + "locations": [ + { + "file": "app/(dashboard)/settings/page.tsx", + "kind": "expression" + } + ] + }, + "m0ea4ae59f939": { + "source": "Choose the language used by platform menus and messages.", + "locations": [ + { + "file": "app/(dashboard)/settings/page.tsx", + "kind": "expression" + } + ] + }, + "m40cad2173656": { + "source": "This changes the platform interface only. AI replies and generated apps use their own instructions.", + "locations": [ + { + "file": "app/(dashboard)/settings/page.tsx", + "kind": "expression" + } + ] + }, + "mc3a720f0c8bd": { + "source": "Personal interface preferences", + "locations": [ + { + "file": "app/(dashboard)/settings/page.tsx", + "kind": "expression" + } + ] + }, + "m6998dfbbd128": { + "source": "Interface language does not change AI replies or generated apps.", + "locations": [ + { + "file": "app/(dashboard)/settings/page.tsx", + "kind": "expression" + } + ] + }, + "m0beff060665e": { + "source": "Connecting to AI...", + "locations": [ + { + "file": "modules/editor/chat/tool-steps-card.tsx", + "kind": "dynamic-status" + } + ] + }, + "me50a077692e0": { + "source": "AI is writing code...", + "locations": [ + { + "file": "modules/editor/chat/tool-steps-card.tsx", + "kind": "dynamic-status" + } + ] + }, + "m619eec4a7c1f": { + "source": "AI is analyzing the project...", + "locations": [ + { + "file": "modules/editor/chat/tool-steps-card.tsx", + "kind": "dynamic-status" + } + ] + }, + "mdb3aec359d8f": { + "source": "Checking task progress", + "locations": [ + { + "file": "services/api/src/routes/chat/stream-recovery.ts", + "kind": "literal" + } + ] + }, + "m35ea86212979": { + "source": "Checking task progress...", + "locations": [ + { + "file": "services/api/src/routes/chat/stream-recovery.ts", + "kind": "literal" + } + ] + }, + "ma5d341a5b0db": { + "source": "Result not confirmed", + "locations": [ + { + "file": "services/api/src/routes/chat/stream-recovery.ts", + "kind": "literal" + } + ] + }, + "me125680b1485": { + "source": "Task stopped before completion", + "locations": [ + { + "file": "services/api/src/routes/chat/stream-recovery.ts", + "kind": "literal" + } + ] + }, + "mefaddeef953d": { + "source": "Task status could not be confirmed. Please resume the task or choose a model with tool calling support.", + "locations": [ + { + "file": "services/api/src/routes/chat/stream-recovery.ts", + "kind": "literal" + } + ] + }, + "m87722fea3039": { + "source": "The task made no new progress across repeated attempts. You can resume it without losing completed steps.", + "locations": [ + { + "file": "services/api/src/routes/chat/stream-recovery.ts", + "kind": "literal" + } + ] + }, + "m30e9da875aed": { + "source": "The task reached the continuation limit. Completed work is preserved; resume to continue.", + "locations": [ + { + "file": "services/api/src/routes/chat/stream-recovery.ts", + "kind": "literal" + } + ] + }, + "me017a9daa432": { + "source": "No completion result received", + "locations": [ + { + "file": "services/api/src/routes/chat/stream-recovery.ts", + "kind": "literal" + } + ] + }, + "m5b9442561788": { + "source": "Recorded {count} actions", + "locations": [ + { + "file": "apps/web/src/app/editor/[projectId]/page.tsx", + "kind": "icu" + } + ] + } +} diff --git a/apps/web/messages/zh-CN.json b/apps/web/messages/zh-CN.json new file mode 100644 index 00000000..89fd91b4 --- /dev/null +++ b/apps/web/messages/zh-CN.json @@ -0,0 +1,3905 @@ +{ + "ui": { + "m797b4f031eac": "身份验证错误", + "m0c953ab32c60": "出错了。", + "md8b8392e2c54": "重试", + "m40c55c136901": "返回登录", + "m3ccd9d6586ef": "发生错误,请重试。", + "m7732287944e2": "请查收邮件", + "m9c2fe02045e2": "如果该邮箱对应的账户存在", + "mcb46c5c12546": ",我们已将重置密码的说明发送到你的收件箱。", + "me0a32889eacc": "还没收到邮件?请检查垃圾邮件文件夹,或", + "m5b5dedee32c5": "重试", + "m71fe31ccd37c": "返回登录", + "mafd25fdf17c7": "忘记密码?", + "m6cc4c62eef9a": "不用担心。输入你的邮箱,我们会向你发送密码重置说明。", + "mf2488fd4ef4a": "邮箱地址", + "m53e6cdc30765": "you@example.com", + "m286a3af7348e": "发送中...", + "m2e217636019b": "发送重置说明", + "m9e605fcf232b": "自然语言生成应用 · 内部测试平台", + "mb5f64aac226f": "继续操作即表示你同意我们的", + "m4afa55bf7aec": "服务条款", + "m6201111b83a0": "和", + "m506ff3946215": "隐私政策", + "m3c8432b0c6a7": "验证失败,请重试。", + "m4fcf29ae7ef2": "你已在名单中", + "mb6824cc8a91e": "双因素身份验证", + "md9708dace524": "请输入身份验证器应用中的 6 位验证码,或恢复码。", + "m3ee75029c70e": "验证码", + "m3dd86d618eaf": "123456 或 recovery-code", + "m2ec1ac7d45e8": "验证中...", + "mf6778950d77c": "验证并继续", + "m54f9715d07d2": "登录你的账户", + "m7b9db77e0178": "使用 GitHub 继续", + "mcce937e89144": "使用 Google 继续", + "me3324559f7c8": "或使用邮箱继续", + "m969ccbd3cf63": "邮箱", + "me7cf3ef4f17c": "密码", + "m30c1d8d3e912": "忘记密码?", + "mc06bf9670174": "请输入你的密码", + "ma60a56c584b3": "隐藏密码", + "m6aeaa6a53d09": "显示密码", + "mf93267aa11e8": "记住我", + "m1f96f5d016bd": "登录中...", + "mbfd402b2f6f3": "登录", + "m1b545b23fae3": "还没有账户?", + "m5e2b8e96503d": "注册", + "m8d6cea2517ff": "弱", + "mf7b19afcde96": "一般", + "mc939327ca16d": "良好", + "m30a04fdcb6bb": "强", + "m977f3b2676a9": "至少 8 个字符", + "m3354e2819414": "大写字母", + "m168d366549bb": "小写字母", + "mbd82cf16699b": "数字", + "m7f7cd67bcf4d": "重置链接无效", + "m039dc4816602": "此密码重置链接无效或已过期。请重新请求密码重置链接。", + "m76897da9593b": "请求新的重置链接", + "ma702a922e26a": "密码重置成功", + "m2da2987c9882": "您的密码已更新。现在可以使用新密码登录。", + "m6c6e178ad2a8": "两次输入的密码不一致。", + "m9283b095813b": "密码强度太弱。请使用至少 8 个字符,并包含大写字母、小写字母和数字。", + "m6ee6d9db4278": "设置新密码", + "m4986b95da4ef": "新密码必须与之前的密码不同。", + "m3dd9df4441fb": "新密码", + "m563306418abb": "密码强度:", + "mbf000421aeb3": "确认新密码", + "m210dfc7e4536": "重新输入密码", + "mb6eb82cd3300": "两次输入的密码不一致", + "m49665aad0be4": "两次输入的密码一致", + "mdaef019f06a4": "正在重置密码...", + "me0edfeb3a71a": "重置密码", + "m958e4ccf2953": "请输入有效的电子邮件地址。", + "m702463b34cf3": "您必须同意《服务条款》和《隐私政策》。", + "mfe2ea40e0f39": "已经获批?", + "m9e709348f582": "创建您的账户", + "mb896d16d300e": "或使用电子邮件注册", + "me09b37bcc4f3": "姓名(可选)", + "m2c6b2e253c01": "您的姓名", + "mb00f7e3ae5e8": "请输入有效的电子邮件地址", + "mc292210c4416": "确认密码", + "m26a58d002b08": "我同意", + "m7dd3701aa3f1": "正在创建账户...", + "m798ca2ce18bf": "创建账户", + "me77fea936d3e": "已有账户?", + "m920d04ec14fe": "特殊字符", + "mf99582ef73f9": "最低方案:", + "ma8761df2126c": "最低角色:", + "m02069e79e45e": "未配置 AI", + "m16211dd296cf": "Copilot:", + "mb764cdc0eab7": "未知", + "m84aebc69a1bf": "已配置", + "m08b041935798": "您", + "m11421ee1e11a": "管理额度", + "mf69d5d4b63d8": "为该用户配置 AI", + "m069d73bcfc70": "重置 AI 分配", + "m190a5016e300": "为以下对象配置 AI:", + "med249d417dcd": "GitHub Copilot", + "m0382e4dec018": "自定义模型服务商", + "mc2186fe04eb9": "两种配置都已保存。该用户将使用当前选中的标签页配置。", + "m7e1b0d5641f2": "账户", + "m733f239a2734": "默认(gh CLI)", + "m5e2c614c23f0": "模型", + "m472590ae974d": "模型服务商", + "m73d8f90051f2": "选择模型服务商...", + "m1509f561f241": "保存", + "m19766ed6ccb2": "取消", + "mdc20e9fe650d": "额度归属:", + "m3aa3d40a8fc9": "每日已使用:", + "mcd1a8b01e9d5": "每月已使用:", + "mca3f6461f437": "结转:", + "m4c6dc26beeab": "每日额度", + "ma67991ce2664": "月度额度", + "m527b050da083": "结转额度", + "mebccf6ab3710": "保存额度", + "m69be897d8b96": "保存额度,并将每日/每月用量重置为 0", + "mfa615f22bd26": "保存并重置用量", + "m011bea484f1a": "生成缺失的项目缩略图并查看生成日志。", + "m49286f33b674": "生成中...", + "m2cc28dc8a83e": "生成缺失的缩略图", + "m0e9161011702": "刷新", + "m612e74a217ea": "项目总数:", + "m9fd84954bfa5": "| 缺失:", + "m284913d5c772": "| 排队中:", + "mef5ade58332c": "生成日志", + "m87d05cd08817": "条记录", + "m9db084956346": "尚无缩略图生成日志。点击“生成缺失的缩略图”开始。", + "mf785c3ce1d58": "毫秒", + "mdad5476f0b47": "没有可用的会话数据", + "m942087cc2d41": "重试", + "m9187cc2ac5a3": "个引擎", + "m3bcf9f2bf072": "RSS", + "mbb30cbe2f9b8": "堆内存", + "md63ab4711473": "运行时间", + "m6f68db105f37": "停止中...", + "m507eb972faea": "停止所有引擎", + "m656692907162": "每 5 秒自动刷新。每个引擎都是一个按项目运行的 Copilot CLI 子进程。", + "mda292c238881": "活动引擎", + "m0830217a2761": "没有活动的 Copilot 引擎。用户在编辑器中与 AI 交互时会启动会话。", + "m34cfcaf1a12e": "未知项目", + "m286ea6c1b524": "visual-edit", + "m4fb62348858c": "空闲", + "md5aa1b5cf70c": "活动请求", + "m96879611650f": "活动", + "m6fa3cbf451b2": "会话", + "mbd717b467075": "会话", + "ma0355426abfc": "引擎运行时长", + "m013f54400c82": "时长", + "m2b3ef6712d86": "距上次使用的时间", + "mee72959b9b18": "终止", + "m55e91685e997": "所有方案", + "m1421f18c6968": "任意角色", + "mc8ef8e3669b8": "需要平台管理员权限", + "m76900f1bfd16": "返回", + "m7888e95b8274": "审计搜索", + "m12ed94f936df": "对话记录", + "mb512d97e7cbf": "用户", + "m5e23ec6a300d": "模式", + "m87bb59ba2f92": "工作区", + "m985959785319": "项目", + "m3a5ecca188c0": "更新时间", + "mcb9ac5c561da": "会话 ID", + "m7967e089a7b9": "用户 ID", + "me511470b21a9": "项目 ID", + "medd50d9670fd": "此会话没有记录的消息。", + "ma20d12c5e9c4": "思考中", + "mda5122dc0f97": "工具调用", + "m53924ef96c74": "管理员操作日志", + "m8be6bc851681": "在审计页面执行的所有搜索和查看操作,包含查看者身份、时间戳和请求元数据。", + "mecbb48b41cda": "操作者 ID", + "m75666699b77d": "uuid", + "m64cff1319d2f": "操作", + "m2b505597daa7": "任意", + "m218197693424": "起始时间", + "mf4b06ef6d3c8": "结束时间", + "m49c266baaaa7": "搜索", + "mdaee7606b339": "重置", + "m167e90e23758": "尚未记录管理员操作。", + "mcf9c7aa24a26": "时间", + "m449995c4fe8f": "操作者", + "m978354db0c00": "目标", + "m45989de49fb7": "详情", + "mbf5505174a73": "IP", + "m0a478cd08199": "用户:", + "m046a8c1e8583": "工作区:", + "m2bcb43cbc8f6": "查看", + "mc1c224b03cd9": "管理员", + "mc5f53e63dd72": "提示词与对话审计", + "m7dd571d2abd1": "在审计页面执行的管理员操作历史记录", + "m5140d737735a": "搜索平台上的每一条 AI 对话。你执行的每次搜索和查看操作都会被记录,以满足合规要求。", + "m86dae2ac1261": "此平台尚未启用审计日志", + "m538730c93ca5": "无法加载审计数据", + "m04d7b4833927": "消息", + "m4fe279f28f2e": "消息(7 天)", + "mc2fe00210b4b": "不同用户数", + "m889d892993c3": "工作区 ID", + "m772edfbcc7c0": "消息包含", + "m777808dfda80": "提示词或响应的子字符串", + "m38de3e06f728": "没有对话匹配当前筛选条件。", + "mae593d094c83": "工作区 / 项目", + "m97e9c34ed7b1": "最近消息摘录", + "m1b731e8d1d02": "用户:", + "m6a699d31f54d": "助手:", + "m7d80edc9d957": "需要平台管理员权限", + "m97ba1d394fab": "返回控制台", + "m345c74235673": "返回管理员页面", + "m33b35626c9b1": "聊天会话(", + "m686504a87fa2": "平台上的所有 AI 对话,可用于训练、审计和滥用审查。", + "mc75cb8839a7d": "已筛选项目", + "m26b30b0dda16": "只读审计视图。", + "mbd579d1b9e08": "消息内容会自动脱敏(密码、JWT、API 密钥、十六进制数据块、数据库 URL)。你打开的每个对话线程都会记录在管理员审计日志中,并包含你的姓名和时间戳。", + "m64ea47b2620b": "按项目名称或用户邮箱筛选…", + "m6c73e4289d05": "所有模式", + "m31e06f7d89fe": "聊天", + "md4f0bc5a29de": "智能体", + "m06475633ed3e": "最近活动", + "mecbc89cd37a0": "开始时间", + "mba3bbbe10d8b": "加载中…", + "ma86136ba5f55": "没有聊天会话匹配当前筛选条件。", + "med077f3d8125": "打开", + "md604310a789a": "正在显示", + "m28391d3bc64e": "共", + "m5373c7f8a5a6": "线程", + "m7e3df8eb742b": "(无项目)", + "mabc45c2d4dfa": "· 模式=", + "mf5cccfb73751": "条消息", + "m0966c6f72dff": "正在加载线程…", + "m5675154535cf": "此会话没有消息。", + "mf9d35d43770d": "个工具", + "mc7099deab135": "收起", + "m2d370b60770a": "展开", + "m6ee16429668c": "思考中", + "maf80ef6e1b7b": "已发布站点的 DNS", + "ma4a4e1e0f891": "每次发布都会获得独立的 Cloudflare CNAME,或使用我们为你配置的通配符 CNAME。", + "mb5c120b316c2": "已保存", + "m15257e76d8b7": "区域:", + "mb5d0581437a1": "cloudflared OAuth Token 具有 DNS:Edit 权限,但没有 SSL/Certificates:Read 权限,因此我们无法查看 ACM 证书包。如果你使用了 ACM,请勾选下方的覆盖选项以跳过检测。", + "m909527f31f42": "已启用 ACM", + "m928677dc6340": "无 ACM", + "m5b864fc4ab0a": "ACM 状态未知", + "m22ec906ac415": "发布域名:", + "m31beffd97934": "无法加载 Cloudflare 区域诊断信息:", + "m43df7d535730": "每次发布使用 CNAME", + "m21b111cbfe6e": "默认", + "maa78e0c0518a": "每次发布都会调用 Cloudflare API,为每个子域名创建一个 CNAME。借助 Universal SSL,可以让同一区域下的多个可用服务器共存。需要", + "me3bf2573a4eb": "由 Universal SSL 覆盖的主机名。需要", + "m4aa9bfd2f175": ",以及", + "me9176867f7e5": "通配符 CNAME(自动配置)", + "m57ef4e97d348": "跳过每次发布时的 API 调用,所有发布都通过指向你的隧道的一个通配符 CNAME 解析。我们会使用以下位置的 Cloudflare Token,在你的区域中创建该记录:", + "m7ccbaa60f66e": "cloudflared tunnel login", + "mb658dae9f083": "免费方案 + 根域名:", + "mcc76294d4e4d": "开箱即用(Universal SSL)。", + "m4aa1e5a605fe": "免费方案 + 多级域名:", + "m3851601b3b92": "需要 Advanced Certificate Manager。", + "mcd8a3129e318": "付费 ACM:", + "mf291848f2272": "任选", + "md86688fc2849": "如果我们的 Token 无法查看你的 ACM 证书包,请勾选下方的覆盖选项。", + "m40b2d2ad3953": "通配符主机名", + "m44ce242131b7": "我已在此区域启用 Advanced Certificate Manager", + "m80c26ba6333c": "。自动检测无法使用隧道 OAuth Token 读取 ACM 状态。如果你已启用 ACM 并希望创建多级通配符,请勾选此项。", + "mb66afe5b6cff": "配置中…", + "m3c2e2a5ed0a6": "重新验证通配符", + "m1bc6bb749521": "自动配置通配符", + "md70b9e24bca2": "已创建", + "mfe00b67b6dd1": "已确认", + "ma57a35df4997": "此区域当前没有生效的通配符 CNAME。", + "m814ec0e86a15": "在上方自动配置通配符,或切换回每次发布模式之前,发布都将失败。", + "m6b83c8641fdd": "现有通配符,位于", + "mf86010479825": "此区域", + "me2d0a54968ea": "删除", + "m5f3c225bebaf": "?指向它的发布将停止解析。", + "meebdd24a77d9": "确认", + "m59a554090fa8": "Cloudflare API Token(可选)", + "m7a6291807fd2": "未配置 CF Token", + "m9d7e5930b618": "ACM 权限范围正常", + "m05ed7296fabd": "KEK 不匹配。", + "m3415a638725c": "存储的 Token 无法在当前", + "m5232ea6ee716": "(可能是使用了过期的", + "me9cbb0224c4a": ".env", + "m424dce5579ac": ")。cert.pem 备用令牌仍能让 DNS 操作正常运行,但 ACM 检测已降级。请在下方重新粘贴令牌,或点击", + "m6d43eea1425f": "移除覆盖设置", + "m19bbb37f3390": "以删除过期的记录。", + "m0ff414871969": "完全可选。", + "m400f4a7dbcab": "使用来自 cert.pem 的令牌时,DNS 自动配置、通配符创建/删除以及每次发布的 CNAME 均可正常运行,令牌来自", + "mc37157e872ba": "本身即可。添加自定义令牌后,才能准确检测 ACM,从而使上方徽章从", + "m663ea1bfffe5": "切换为", + "m7175517a370b": "或", + "maf2af17db2e3": "打开 Cloudflare API Tokens", + "me50f8444b261": "→ Create Token → Create Custom Token。仅添加以下区域权限:", + "ma22535feec3f": "Zone → DNS →", + "m464c4ffd019e": "Edit", + "m45d6695511a2": "Zone → Zone →", + "m9b9a8d05a7ec": "Read", + "m3445cc97290d": "Zone → SSL and Certificates →", + "ma9072dfe385f": "在“Zone Resources”下将范围限定为你的特定区域(", + "m1aa082f6a5fb": ")。然后将令牌粘贴到此处。", + "m5d2b8d876c7b": "粘贴 Cloudflare API 令牌…", + "m15f022806509": "验证并保存", + "medf0c1a56db5": "请注意:", + "m559aead08264": "一个", + "meb5d4f10d2dc": "CNAME 只能指向一个隧道;要在同一区域运行多个可用服务,需要使用 Cloudflare Advanced Certificate Manager,以便每个环境都能拥有自己的多级通配符(例如", + "m3890d1e97509": "*.staging.", + "m286dacb3bc0d": "*.prod.", + "mb68bb848e767": "尚未保存任何设置,正在使用每次发布的默认值。", + "m5e363bb50eb4": "选择一个选项或自动配置通配符后,该设置将保存并用于后续发布。", + "m00d60e31a4e6": "运行", + "mc865b85f4331": "migration 081_platform_settings.sql", + "me69dbe11cb9e": "以应用到数据库。", + "m5273ecff6b01": "移除电子邮件配置?系统将回退到环境变量设置。", + "m4f7838402f37": "已验证", + "m151339072593": "未验证", + "m65bb4278c2cc": "发送测试邮件", + "m74c26c5e8d57": "验证连接", + "m70fed393a3cc": "更换模型服务商", + "mc3812fc4acb8": "移除", + "mf244f7a73ebd": "更新电子邮件服务商", + "mc5f480423459": "配置电子邮件服务商", + "mc7011f116d0f": "SMTP", + "m1f94843777ae": "Resend", + "m0845280d68c2": "Gmail(OAuth)", + "mdd66a6eaff88": "Gmail、SendGrid、Mailgun、SES 以及 20 多个服务商", + "mdaa443b13dd6": "具备出色送达率的现代电子邮件 API", + "ma9b34e6fd3c3": "一键连接 Google 账户", + "m85c6eb592a2a": "只需点击一次即可连接你的 Google 账户。此连接使用 OAuth,因此不会共享你的密码。仅请求", + "m29148528a8fc": "所需的权限。", + "m368e840b0cc8": "连接 Google 账户", + "m0e66373f45dc": "标签", + "me4d3910563ab": "生产环境 SMTP", + "m759130d7fc14": "Resend 生产环境", + "m60643eae6376": "发件地址", + "md677190e0a99": "服务", + "m4e66fa8cee03": "SMTP 主机", + "m72e9a59f5a1d": "端口", + "me3b89e9d33f8": "用户名", + "mb4c9a289323b": "user@example.com", + "m23189d55f697": "API 密钥", + "m46178dee9cff": "re_••••••••", + "meecc5bafc07f": "保存并加密", + "m10ec54738634": "数据库中未配置模型服务商", + "mfada2a086738": "使用环境变量备用配置(如已配置)", + "m5f918cc7c852": "所有凭据在静态存储时均使用 AES-256 加密。邮件队列会采用指数退避策略重试发送失败的邮件,最多重试 5 次。重试次数耗尽后,邮件将移入死信队列,供人工审核。", + "mc9a6c4608630": "死信", + "mf9903f858272": "要永久删除这封邮件吗?", + "m783fc0ebef47": "邮件队列", + "mbe6eb1fc3b05": "收起", + "m5a23444828db": "管理", + "m331551b0de41": "待处理", + "mc8e3e92a62ec": "处理中", + "mc16bc82bf1f0": "已发送", + "m031a8f0f659d": "失败", + "m04fb719b1cde": "死信", + "m5da8f7fbc29d": "返回列表", + "mc934cc71493d": "尝试次数", + "m2b5fc5c94f64": "收件人:", + "mdc45d36f35e8": "发件人:", + "m22d435a37118": "创建时间:", + "m45ad42321fbd": "发送时间:", + "m80c26311aad8": "下次重试:", + "m3c8938774eb8": "模板:", + "m324b134f57c7": "预览", + "m92f2897724bf": "邮件预览", + "m411a20914eca": "所有邮件", + "m11239872d178": "总数", + "me1a333b41aa3": "清除筛选", + "m3f777aa4a1cb": "重试所有失败邮件", + "ma3eb7f944a37": "重试所有死信邮件", + "m96e54d635a8a": "全部清空", + "mc7fa7d546e56": "暂无邮件", + "m0c14d42e2264": "队列中", + "m1ac7d61d1d29": "次尝试", + "md1bf045bb524": "查看详情", + "m0a30a815d67d": "页", + "m3b440ddee6d9": "text-embedding-3-small / large。$0.02/100 万 Token,1536–3072 维。", + "m398f99a184e4": "通过 Gemini 的 OpenAI 兼容 /v1 端点调用 gemini-embedding-001。", + "m3f31d32ea02c": "任意 /v1/embeddings 端点,例如 Ollama、vLLM、Voyage 代理等。", + "mb502bc92ca52": "模型服务商、API 基础地址、模型和 API 密钥均为必填项。", + "m754105abcad5": "平台嵌入模型", + "m49daa94be922": "设置一次后,所有工作区都会继承此配置,用于聊天机器人、语义搜索和 RAG。生成应用的终端用户不会看到此界面,他们只需提示 AI 构建聊天机器人。", + "m3f0534d325cf": "尚未配置,对 /__doable/ai/embed 的调用将返回 EMBEDDING_NOT_CONFIGURED", + "m4e901c79aad0": "选择模型服务商", + "m70589413a3c9": "API 基础地址", + "m16f0ee47f993": "API 密钥", + "m36d2f296e03d": "获取密钥", + "m2cedc28e7ad3": "留空以保留当前密钥(输入任意内容即可更新)", + "m8358f1f0a95b": "粘贴 API 密钥", + "m24e3c122d5d5": "嵌入模型", + "m2ff59c750e8c": "持久化保存前会先通过探测调用进行验证。", + "mc1c1009d3f37": "更新", + "m8173aef43b62": "加载框架设置失败", + "m6e965b82ee17": "至少必须保留一个启用的框架", + "m738142c05652": "框架设置已保存", + "m8533d75f3b23": "保存框架设置失败", + "m7e4fc34d106a": "项目框架", + "m5d80ea82266b": "控制用户可以创建的项目类型。已禁用的框架不会显示在项目创建对话框中。", + "md09b4dd6265a": "设为默认", + "madd484d5ccdd": "更改会立即生效。使用已禁用框架的现有项目仍可继续运行,但无法使用该框架创建新项目。", + "mea8b2988df0c": "用户 MFA 状态", + "m81e16ce413fa": "MFA 为可选功能,由用户自行控制。仅当用户同时无法访问身份验证器应用和恢复代码时,才使用重置操作。", + "m655e733ea610": "已注册", + "m830ec7f812f9": "上次使用", + "m48f6a8d5688b": "恢复", + "m4610a52aa1b6": "还没有用户启用 MFA。", + "m6497e4b3d7be": "从未", + "m360f84035942": "剩余", + "mc55448c334fc": "重置此用户的 MFA", + "m835b4199c8c2": "这将移除此用户的所有 MFA 因素和恢复代码,并使其退出所有活动会话。在重新注册 MFA 前,用户只能使用密码登录。", + "mfb047bd7d215": "重置 MFA", + "mb9765c3871ca": "市场内容审核", + "meb6573bdbe5b": "审核标记为需要审核的商品信息,并回应社区举报。", + "m3e1654beab97": "审核队列", + "mdacca3cba3f3": "举报", + "m85d179563e9c": "没有待审核的商品信息", + "mdc7143e7d6df": "在新标签页中打开商品信息", + "ma7e2d26e8d15": "由", + "m0bb917d86bec": "· v", + "meb1a0e0e6bac": "· 提交于", + "m07297fa94a99": "需要审核", + "m66d0f523a379": "技能", + "m4228aeb07c41": "规则", + "mdcb3e1c00e79": "知识库", + "mc3d2e79ebdd0": "连接器", + "m79e3c0331286": "权限:", + "m446bbdda220c": "可选的处理备注(拒绝时会发送给发布者)…", + "ma40e2f67ddae": "批准并发布", + "mab604a360777": "拒绝", + "m2acf0b3e07b3": "没有未处理的举报", + "m0190c9bb81aa": "采取操作", + "m48845bff334a": "忽略", + "md134ca025a6c": "拒绝访问", + "m272f3eef01bd": "需要平台管理员权限。", + "ma46f4c289a70": "系统管理", + "m85ed75299aaf": "管理平台功能、用户、AI 工具和访问控制", + "md7e6c3063aad": "所有项目(草稿和已发布),包含框架、所有者和聊天活动信息", + "m04e2a9728af7": "项目", + "mc86961c75b53": "已发布的应用和运行中的开发服务器,可查看 CPU、内存、运行时长并进行控制", + "m109311589787": "运行环境", + "m85372234e297": "所有 AI 聊天会话(已脱敏并记录审计日志),用于训练和滥用审查", + "m460b3a7da007": "聊天", + "m331d30a9c97f": "提示词和对话审计(企业版)", + "mbb6aea287396": "审计", + "m03e21e122ec4": "市场内容审核队列和举报", + "m126d4415445d": "审核", + "mc60c04dc77f9": "功能开关", + "m020965a2f08f": "DNS", + "m5c2b06176d6c": "注册", + "m38fe011e7777": "用户与 AI", + "m090512d93fcc": "集成", + "mdfe8b2f0de26": "方案", + "mcc42ea8d0096": "AI 工具", + "md39ce05308e4": "多因素认证", + "mf82d646665fe": "缩略图", + "m696b91224a68": "全局开启或关闭功能。设置最低方案或工作区角色要求。", + "mdac229190454": "尚未配置功能开关。", + "m61875526f372": "方案限制", + "m23ec9af2fc5e": "方案默认设置", + "m860ec100606b": "嵌入模型", + "m0e570ca6fabe": "来源", + "mdc937b598926": "无", + "m088fec4f79e8": "Copilot 账户", + "mbfbcd87c086c": "选择账户…", + "m54cc5b27fcd0": "未找到 Copilot 账户。请先在 AI 设置中添加账户。", + "m8b4e8774ddf6": "默认模型", + "m89cd67acb3e2": "— 输入自定义模型 ID —", + "m7365642e8162": "选择模型服务商…", + "m29a012962f7b": "未找到自定义模型服务商。请先在 AI 设置中添加。", + "mc439b30a5a39": "选择模型…", + "m97c8cb747f57": "正在发现模型…", + "mc248b4fca911": "输入模型 ID", + "mfbd4230d6570": "请先选择模型服务商", + "mdcd910c427ac": "不会为新建的", + "m47707749925e": "工作区配置默认 AI 模型。用户需要自行设置 AI 连接。", + "mc7175090497c": "加载方案默认设置失败", + "me3881d18c2ee": "保存默认设置失败", + "m504db17a8299": "将默认设置应用到现有工作区失败", + "m1e7edaca7665": "正在加载方案默认设置…", + "m9761afad12f1": "为每个方案层级设置默认 AI 模型和模型服务商。新建工作区将自动继承这些设置。", + "m1631852a1dd6": "未配置默认设置", + "m6defafa2caa6": "配置", + "mb3cdb2ee304a": "将此默认设置应用到此方案下的所有现有工作区", + "md426d64284d0": "应用到现有工作区", + "m49f5b0e488cf": "Copilot", + "m7d4737cf36c4": "模型服务商 / 账户", + "m0c79a9c22284": "已应用", + "mba02b5e676dd": "默认应用到", + "m6e8d79980fba": "个工作区", + "mc9916805d229": "个工作区已跳过,原因是其中已有 AI 配置。使用“覆盖”可强制应用。", + "me467ab264fa4": "应用到现有工作区时覆盖现有工作区的 AI 设置", + "m9d53ba64c960": "方案默认设置的工作方式", + "m675b6a1fb67a": "新用户注册时,其工作区会继承所属方案层级的默认设置。", + "ma7c4da9b12bf": "Copilot 账户或模型服务商会自动复制到用户的工作区。", + "m2727451375f9": "用户可以在自己的 AI 设置中覆盖默认设置。", + "m7c1a7e4ce440": "使用“应用到现有工作区”将默认设置追溯应用到尚未配置 AI 的工作区。", + "mf411a1fb6275": "免费版", + "m957b0b874524": "专业版", + "m76f68a75f01e": "商业版", + "m3fbe5ed156f1": "企业版", + "ma7dc3ade6c61": "为每个方案层级配置限制。更改会立即对该方案下的所有用户生效。设置值以覆盖默认值,或重置为使用硬编码默认值。", + "m17be9dde3193": "自定义", + "mb38c74ea2a19": "项目上限", + "m3bc5afa4e311": "成员上限", + "m3c24f14134d7": "最大文件大小", + "m6170ab945256": "自定义域名", + "m94c116ee118a": "分析", + "med8a65c84235": "优先支持", + "mba34a96f2969": "最后更新:", + "m507095b0ba27": "(MB)", + "m32d2b72aecde": "所有项目(", + "meb2d37934688": "平台上的每个项目,包括草稿、已发布项目和运行中的运行环境,以及框架、所有者和聊天活动。", + "mb91054149468": "按名称、标识、所有者邮箱、框架、工作区筛选…", + "m83b12c2216ef": "清除", + "m2eb1788f3f5a": "所有者 / 工作区", + "m192eb4525aab": "框架", + "m920e413c7d41": "状态", + "m225d29f6201e": "监听", + "ma3724e34d284": "没有项目符合你的筛选条件。", + "m46b6115e1e4d": "查看此项目的聊天会话", + "mf2d1742393d2": "此页面显示主机上每个项目的运行环境状态。", + "mf65833fab74d": "已发布应用和实时编辑器开发服务器:CPU、内存、运行时长及控制项。", + "ma9d344473c8b": "自动刷新已开启", + "m9dc9e60adf42": "自动刷新已关闭", + "m94de423b6747": "开发服务器", + "mcbbabb53c8fc": "已发布应用", + "m82cebc347bb4": "服务器总数", + "m3032763b0e67": "存活", + "m5fa7aac5375c": "就绪", + "m99401166672d": "总内存", + "m3f302a2a7158": "PID", + "mc3963aedaac6": "内存", + "m416bc49a5c83": "没有活动中的开发服务器。", + "m28a3a5e81d1e": "已停止", + "mb24d6d33736e": "就绪", + "m59dbf36d9930": "启动中", + "m06f2446a1105": "终止此 Vite 进程", + "m2c3494258f6c": "来源:内存", + "m8e3dc1afbc3e": "服务器", + "m2229c690c65f": "映射于", + "mb259d30710fa": "dev-server-core.ts", + "m742f573e6634": "。内存为来自", + "m0b10c8adc253": "。端口分配自", + "mc9b3c38247f7": "总计", + "mf4ccae29e1bb": "运行中", + "m1a4f630ac1b6": "已停止", + "m464361940b84": "按项目、所有者、框架、端口筛选…", + "mf189411452ed": "所有状态", + "m387c1f0e1c9e": "沙箱用户", + "ma3b50c476732": "状态", + "mdb9a4c7d4c19": "CPU", + "mbcdf701c4dfb": "最后活动时间", + "m502030bdb117": "尚无已发布应用。", + "m99f356256417": "用户点击", + "m859390eb495b": "发布", + "m353936be1dbe": "。要查看所有项目(包括草稿),请打开", + "mcbe106c6fba4": "没有实例匹配当前筛选条件。", + "m2053dbbf6ec7": "静态", + "mad9c6fddb8fb": "查看 systemd journal 日志(机密信息会自动脱敏)", + "mdde8c9582576": "出站策略 + 最近的构建代理活动", + "m3c680169fdc4": "systemctl restart", + "mc12a1b553e6e": "systemctl stop — 终止正在运行的进程", + "m995dbe2ca647": "指标来源:通过 systemd cgroups 获取", + "mf382acc27de3": "。沙箱用户是由以下方法创建的每个项目专属 Linux UID:", + "mb40e7512f994": "setupProjectUser()", + "m7853de766b41": "的出站流量", + "m67a8c8843967": "正在加载出站流量数据…", + "m7c7c805550f8": "出站允许列表(systemd", + "m7cd8ca3fea8a": "IPAddressAllow", + "m6b6e726dce43": "未配置任何规则。应用只能访问", + "m49960de5880e": "localhost", + "m32f43b3318b2": ",所有其他出站 TCP 流量均由", + "m63eab693a29d": "IPAddressDeny=any", + "m183b8997cefc": "构建时代理(Squid)", + "mf2d421e5379b": "(已停用)", + "m9f427d2117d5": "未捕获到最近的构建代理活动。", + "m33b93476cf59": "时间", + "m52a0f9b65b27": "方法", + "me7a241debad5": "URL", + "m4d8000301fcc": "字节数", + "m19e4421f6156": "最近的出站拒绝(journal,过去一小时)", + "mdf3172baceb0": "没有拒绝事件。(没有被阻止的出站尝试,或者 systemd 的 BPF 防火墙未在此级别记录日志。)", + "m57d8bda76491": "Systemd 单元:", + "md2397cca5c54": "。出站策略由 systemd 的以下配置在 cgroup 级别强制执行:", + "m5bbfd2fd41b4": "+ 每个项目的", + "m22f5e9be30f7": "IPAddressAllow=...", + "me2076f16ff16": "的日志", + "ma193d83320ed": "机密信息会自动脱敏(密码、JWT、API 密钥、十六进制数据块、数据库 URL)。每次查看都会记录在管理员审计日志中。", + "m8dcfdc43bd51": "筛选行…", + "m066fb3529387": "最近 100 条", + "m6204633096ca": "最近 200 条", + "md015488899f8": "最近 500 条", + "m76bc7da847f2": "最近 1000 条", + "mb64ac05f17e6": "实时", + "mca7981b46ecf": "关闭", + "macccfcdfcffe": "复制所有可见行", + "me21f935f11d7": "复制", + "me1842662a549": "正在加载日志…", + "mab209a3ee8d0": "未找到日志行。", + "m5ea44c3961f1": "行", + "m0c7fcf412c36": "已获取", + "m37ebafac1092": "journalctl -u", + "m3eec7bbb66da": "注册审核", + "m8e5609da435c": "启用后,新注册用户会进入待审核队列,在获得批准前无法登录。现有账户不受影响。", + "mcbb30992f47c": "新注册用户需要审核", + "mca2eb2c419d9": "向待审核注册用户显示的消息", + "m12342a6de5db": "Doable目前仅限受邀用户加入…", + "m48d24bbb292a": "新用户提交注册后会在注册页面显示此消息;如果用户在待审核期间尝试登录,也会在登录页面显示。", + "mf9bfa3dc7c8f": "放弃更改", + "mdc85af8f2b1d": "保存中...", + "m7f3a3b142814": "保存设置", + "m0405f4b67edd": "待审批", + "m94536c9b8727": "目前没有等待审批的用户。", + "mb14b800ede91": "· 已注册", + "m6007acbe30b2": "批准", + "m05a2d7332eb9": "拒绝", + "m211d0bb8cf4f": "屏蔽", + "mfd8ed7176725": "最近拒绝", + "m69d5d5622939": "这些用户已被拒绝,无法登录。批准后即可授予访问权限。", + "md6cc5e773801": "已屏蔽的电子邮件地址", + "m4c9bc4985ffa": "这些邮箱地址将永远无法注册,即使通过 GitHub 或 Google 也不行。取消屏蔽后即可重新允许注册。", + "mb710c25ac7b7": "没有已屏蔽的邮箱地址。", + "m6973dddd3ef9": "已屏蔽", + "m712da63171e0": "取消屏蔽", + "me763f2c1fa3e": "配置每种 AI 模式中可用的工具。", + "m6292878baa70": "规划", + "mca5b9330ac54": "(计划模式)通常使用只读工具进行分析。", + "mbdd254b65baa": "构建", + "md3d5d45f1a0f": "模式支持完整的文件创建和编辑工具。更改将在 60 秒内对新会话生效。", + "m0b7baf9fb836": "删除模式", + "me71867e5aabf": "未配置工具,将使用硬编码的默认工具", + "m526e0087cc3f": "描述", + "m222b29abe076": "Doable工具", + "m2b6ebbf5c88e": "SDK 内置工具", + "m812deedf2c67": "启用写入工具的策略制定模式可能会导致意外的文件修改。", + "m35322b5bb5a2": "保存更改", + "mf57e3e0261a3": "个工具已选择", + "mc39caad8b315": "模式名称(例如:review、debug)", + "m9fd728c66c9a": "添加", + "m49e8496ae12f": "添加新模式", + "m22252a139c6a": "返回搜索", + "m0489e4a2ca0d": "未找到 Trace", + "m276010d68dda": "Trace 搜索", + "m4fc52a3c4c55": "耗时", + "mb3393bfb2a55": "Span 数", + "mcb702378f315": "错误数", + "m604dce445e32": "服务数", + "m681615e94f41": "关联的聊天 Trace:", + "m0bc8506e4d85": "会话:", + "md776d0b395c6": "火焰图", + "m8229bdcc60d8": "全部日志", + "mf01563f471a8": "Span 详情", + "m107c08e85745": "点击火焰图中的 Span 以查看详情。", + "m8219340f90cf": "没有关联日志。", + "md4903171322c": "Trace 火焰图", + "m426b31c2ac95": "没有符合这些筛选条件的 Trace。", + "m846211dee5c5": "根 Span", + "mc4cbbc62b684": "Trace ID", + "mca00fccfb408": "错误", + "mc071cf5f5ed6": "运行中", + "mf77d1bb58da8": "超时", + "m2689367b205c": "正常", + "mfdac5dd749e1": "根 Span 名称包含", + "m4b0ed88f7d99": "属性", + "m8d14f6e72de8": "事件", + "mb4fe3d529dee": "异常", + "mea2100dc89ae": "日志", + "m08863725c9d1": "类型:", + "me92e1c5195b2": "状态:", + "ma304cd723646": "耗时:", + "m36fdcc2069a7": "此 Span 没有日志", + "mf1b4db36f908": "属性", + "m16f4238962d7": "跨服务搜索追踪记录。点击一行以打开火焰图。", + "m9a815bd80853": "已强制执行", + "m5126956fae89": "用户 · Copilot", + "m68dea4bdcd64": "用户 · 自定义", + "m3b4383786e6b": "用户覆盖设置", + "mdaa1ddf84077": "工作区默认 · Copilot", + "m6d149e5af3d3": "工作区默认 · 自定义", + "mda3706ee462a": "工作区默认", + "m0286249762f7": "自动", + "m3bbfba0ec78f": "自动选择", + "mef26da36dc29": "· 无覆盖设置", + "m868430976481": "无额度", + "m11fd3c84c2e5": "未设置来源", + "m69c81094e14e": "Copilot ·", + "m2ccc863d9382": "默认账户", + "m39fcda80bcbe": "自定义 ·", + "m5c4c1964340a": "模型服务商", + "m44dd5f163cba": "角色:", + "mc6c28dbbbd62": "方案:", + "m4de05f38c64b": "当前模型", + "m01580cdc2633": "AI 模型与来源", + "m2a6b24ad2872": "额度", + "mef00c4881b86": "当前已启用", + "m11a931060dad": "模型:", + "mb35ca060d549": "自动选择(未设置模型)", + "mc707ee4ecc24": "来源:", + "mea320b358837": "订阅:", + "maaf36296577f": "工作区强制设置已开启,此用户无法选择自己的模型。", + "mc8b45bcfb05e": "解析顺序:强制设置 → 用户覆盖设置 → 工作区默认 → 自动选择", + "m5196192141c2": "设置覆盖来源", + "mf3090488d3bd": "无指定账户(自动)", + "m87e09fc5cccf": "(自定义)", + "ma236626facf1": "自动(模型服务商默认)", + "md1f6ee835fff": "选择模型服务商以加载其模型。", + "m0953e0d5167d": "重置为默认值", + "mb36c2611dcdf": "每日", + "mf83916135509": "已使用", + "m9b11f6b707d2": "每月", + "m283148958c53": "结转", + "mb0a1f428ffe3": "赠送额度", + "ma1a5936d3b0f": "上限", + "m175288c4eab8": "批量编辑用户", + "m04f8996da763": "用户", + "m043a718774c5": "个", + "mf9641eb1f0d7": "设置 AI 模型与来源", + "m987811a8b0dd": "替换用户当前的覆盖设置", + "mad184ce4ccd5": "选择模型……", + "m22aabd44c092": "添加额外额度", + "me8e43497c4f8": "添加到每位用户现有的额度中", + "m14c88bdc459b": "+ 每日", + "m6a6260fe12df": "+ 每月", + "me98944151c8b": "+ 滚存", + "m5e3c350d16ce": "这些额度将被", + "m279b8a60f444": "添加", + "m0ff6fa1d4a25": "到每位选中用户当前的总额中(不会替换原有额度)。", + "m4833e4160024": "设置平台角色", + "m93df67719eaa": "替换每位用户的角色", + "mdb4ba1f73d7a": "你在选中列表中。批量更改角色前请取消选择自己,因为你无法更改自己的平台角色。", + "maaddf0ef0547": "设置工作区方案", + "m752bc4378dc7": "替换每位用户的方案", + "m7c676eb1dbf8": "正在应用于", + "mc7bb319b4e98": "位用户…", + "maab0d28eb783": "应用于", + "mbeb0e209e98e": "搜索用户…", + "m08e774c5bacc": "所有来源", + "m4a2fae93bd0c": "仅 Copilot", + "me658e7e5ff30": "仅自定义", + "md7cbbb688b2e": "已选择", + "m31c247d8ed4f": "批量编辑", + "m1fc9a387654d": "全选", + "mbea867d1de69": "角色 / 方案", + "m4999c6c6c7ba": "订阅", + "maf435cdb859d": "每日额度", + "m9ef43b24ae01": "管理用户", + "m3ccbd64ae664": "没有符合搜索条件的用户。", + "mce0171e51b07": "未找到用户。", + "md47dbbe2a22a": "强制指定 = 管理员锁定的模型", + "md51606728956": "用户 · Copilot/Custom = 个人覆盖设置", + "m1ccbb4b01d71": "WS 默认 = 继承工作区设置", + "mc606591861bf": "自动选择 = 任何位置都未配置模型", + "mbef9d2f4e0d1": "正在连接你的 GitHub 账户…", + "m3c57932bbc0a": "GitHub Copilot 已连接!请切回设置向导标签页,向导会自动识别此次连接。", + "m24b5b4f1f9d1": "GitHub 账户已连接!你可以关闭此窗口。", + "md8fd001856d3": "GitHub 账户已连接!正在跳转…", + "m267d859433fb": "返回 AI 设置", + "m54b20dda3acc": "正在加载账单…", + "m65e4c127d235": "无法加载账单", + "m1d8543fe41fb": "请登录以管理你的订阅和额度。", + "mb59e0c1cc1e1": "返回控制台", + "m3ac8bbca9a74": "账单", + "m6dd093cb38fa": "管理你的订阅、额度和使用情况。", + "m6de44edb3c0f": "订阅更新成功!", + "me4873d5586db": "结账已取消。未进行任何更改。", + "mcada2bd2464a": "额度添加成功!", + "m2db046678b9c": "关闭错误提示", + "mcbc4ef9225a0": "管理订阅", + "mb9e490645dd2": "购买 100 个额度", + "m360487bbf13d": "无法加载方案。请稍后重试。", + "mde568b51fde5": "使用记录", + "me53e5ce92da3": "尚无使用记录。", + "mede4cc5b110e": "开始使用 AI 功能后,额度使用情况会显示在这里。", + "m99c40ab40592": "日期", + "m89ebfb7a88ca": "自动检测", + "me697cc1e45af": "附加文件", + "m44abdc1c36d4": "先制定策略,再开始工作", + "m32269bae4ea3": "立即开始工作", + "m104ab9213e28": "执行", + "m3d591e826d54": "停止录音", + "m8748f23993a8": "语音输入", + "md5f6a9a87d9a": "此浏览器不支持语音输入。请尝试使用 Chrome 或 Edge。", + "m3ae25abdc079": "明确选择框架,或让服务器根据提示词自动检测", + "m2ef42ec21d93": "已发布", + "mebf12ef47cf5": "草稿", + "m3b951ebd7c96": "创建中", + "m54a0e8c17ebb": "错误", + "mea1d0f038bbd": "在编辑器中打开", + "m3064d79a295c": "重命名", + "m02cdaabfca80": "复制", + "m91d631e150a3": "移至文件夹", + "m318e826a7516": "取消收藏", + "me357d396871d": "收藏", + "m9c0b617e79e9": "删除项目", + "m935c9c7c903b": "确定要删除“", + "m093fda19d66c": "”?此操作无法撤销。", + "m2577c0f557b2": "个项目", + "m3a57bb9fb3bf": "确定要删除", + "me75b917774a9": "所选项目", + "m30f98589bee4": "?此操作无法撤销。", + "m244210e48437": "项目", + "m2a0478eef536": "重命名项目", + "m25498193b898": "项目名称", + "m5d4f07e7b76d": "为此项目选择一个文件夹。", + "m467e5499c616": "根目录(无文件夹)", + "m73f0f2fe2594": "还没有文件夹。请在侧边栏中创建一个。", + "m5c62e091b8c0": "P", + "m7d749dd1be58": "更新 Discover 列表", + "m826ae2f380ce": "分享到 Discover", + "ma25513c7e0f6": "U", + "m068bd449d0fc": "已分享到 Discover", + "md4a33d5b78bc": "应用广场", + "m8e445e8aa6d2": "最近查看", + "m069d9457befe": "我的项目", + "m56b564b75c7f": "模板", + "m723735c4aab6": "浏览全部", + "mc59dd5a3c5a2": "搜索项目...", + "m32b9b2c4de19": "所有状态", + "m07a2d579c3f0": "已收藏", + "m47da4e5507b6": "网格视图", + "m5d8c3e1b635e": "列表视图", + "m3a78695388b3": "首页", + "mf9182f6f2dc8": "我创建的", + "m0fd8abc26061": "与我共享的", + "m33d7d4f209a3": "已收藏的项目", + "m452ab89d46b7": "我的项目", + "m0b47e3bfdd0b": "共享项目", + "ma41eb2bf7245": "新建项目", + "med1573abda08": "正在加载项目...", + "mdcd1d5223f73": "名称", + "m8b31692427de": "正在加载模板...", + "m805cbc51a3bd": "暂无可用模板。", + "m3043f9fa4d31": "此文件夹为空", + "m742b048e3f6c": "在其中创建新项目", + "m9d6325c835da": "此文件夹", + "m9f7058396947": ",或将现有项目移到此处。", + "mf4894985b57b": "在此处创建项目", + "m3bda804adf31": "添加现有项目", + "m960acc933ef3": "未找到项目", + "m76125d30fd2e": "未找到匹配的项目", + "mf83c80652286": "暂无项目", + "md3a0cd264f2b": "尝试调整筛选条件。", + "m1ee259231d41": "在上方聊天中描述你想构建的内容,或从 GitHub 导入现有项目。", + "m383efa96431b": "从 GitHub 导入", + "mde22447d91bb": "清除所有筛选条件", + "m47d2a515ef2f": "加载中...", + "mac8991ef0101": "加载更多", + "m4c78a2e4f2e0": "所有模板", + "m15f2172d71d3": "入门模板", + "ma53bcafb67d9": "仪表盘", + "mf5904cf7a123": "营销", + "m02d9be75b85e": "电子商务", + "m47bd29075f8b": "内容", + "m845f9286400f": "仅自己可用", + "mf42bca637cb3": "效率工具", + "ma1fffd50941f": "从模板开始构建你的下一个项目", + "m79760c54dced": "搜索模板...", + "ma28860eb8c5f": "此类别中暂无模板。", + "m99528001baf3": "加载项目失败", + "mc533cafab69e": "精选", + "m76298e6377d7": "正在创建副本...", + "mf84ed4375595": "创建副本", + "m0225763cf88e": "Discover 和 Marketplace 有什么区别?", + "m8ebec9e72543": "Discover 与 Marketplace", + "m05e14791da05": "探索社区项目,并创建属于自己的副本", + "ma52ace420f21": "全部", + "ma3498f96dc20": "暂无社区项目。成为首个发布项目的人!", + "ma57b08a480b8": "上一页", + "m1ff57a29d7c9": "下一页", + "mab827e3fe17d": "出现问题", + "m7053d12aceb5": "发生了意外错误。", + "m88af1e0546d8": "Discover 与 Marketplace 的区别 — Doable", + "mbff0e07c6ec2": "了解 Discover、Marketplace 和部署之间的区别。", + "mb79cac926e0b": "帮助", + "m5fec231901d2": "Doable提供三个与世界分享内容的地方。下面介绍它们的区别。", + "m4c236daafb44": "部署", + "m594d7b838c48": "将项目发布到公开 URL。", + "m603a62ffbe2f": "• 设置任何人都可以访问的线上 URL", + "ma76d071191e2": "• 归属于你的账户", + "m382a6e093eb5": "• 其他用户", + "m9a43b6dac466": "无法", + "m08294dbd26cb": "创建副本或安装", + "m76fb907d25ac": "列出你的", + "me5e9d2627c3d": "整个项目", + "m8aeebc476b2c": "在社区动态中。", + "mbe9bf84c4556": "• 其他用户可以浏览并创建副本", + "m860ac51ed697": "• 创建副本会将代码复制到其工作区", + "m2d7246a61a35": "• 免费,无需审核", + "mdcde2662beff": "在 Marketplace 上架", + "m0e17c8169056": "将一个", + "m24d59694d449": "AI 环境", + "m3cf63ee57e32": "打包为可安装的软件包。", + "m045c1a848d53": "• 技能 + 规则 + 知识库 + MCP 连接器", + "m5aaf523bb26a": "• 安装到任何人的工作区", + "mfbcd25a5d8b6": "• 连接器包需要快速审核", + "m8e8eedc83b10": "我应该使用哪一个?", + "m4c4e436f9a45": "术语表", + "m78977aa618ad": "你在编辑器中构建的完整应用或网站,包括代码、页面和组件。", + "m9e471951a1b4": "环境", + "mf6a4d1b58a05": "一组用于增强编辑器的 AI 配置,包括技能(指令)、规则(始终生效的上下文)、知识文件和 MCP 连接器。", + "mf4a96457c02c": "将他人的项目复制到你的账户中。你拥有该副本,并可以进行任意修改。", + "m569ca49f4aaf": "安装", + "m851e3c8b2883": "将 Marketplace 环境添加到你的某个工作区。安装版本化管理,你可以随时更新或卸载。", + "m2f5c692e4571": "MCP 连接器", + "m61a400bfad07": "通过 Model Context Protocol 标准,让 AI 使用第三方服务(Slack、GitHub、你的数据库等)的桥接工具。", + "m3a2c4a012416": "我们遵循的标准", + "m2f58ddf9c271": "Marketplace 程序包具有互操作性。同一程序包可以安装到 Doable,并在遵循这些标准的工具中运行。", + "m9f4439ee1f60": "Anthropic Agent Skills", + "mb72c8beb0a91": "带有 frontmatter。", + "m97c8607c5e1f": "Model Context Protocol (MCP)", + "m8be65a02b4ba": "兼容 Claude Desktop 和 Cursor 的服务器配置。", + "m02453bfe1123": "Cursor Rules", + "m0d879a085b16": ".mdc", + "m432ac09412ef": "规则文件。", + "m63a299e79c0f": "Claude Code Plugins", + "mf4bf1b7070e1": "清单结构。", + "mda587d5e486b": "浏览 Discover", + "md319099fe005": "浏览 Marketplace", + "mdd58287e4103": "上架你的环境", + "m91e99107670b": "帮助中心 — Doable", + "mf5f84112997e": "帮助你充分使用 Doable 的指南和文章。", + "m1d8b9ff9d6d5": "了解 Discover、Marketplace 和 Deploy 之间的区别,以及各自的适用场景。", + "ma78cebc44214": "帮助中心", + "mb40b3713b43d": "打开菜单", + "mf7439d15c4d4": "找不到上架内容", + "m3fa15e399987": "它可能已被移除或取消发布。", + "mf34634e647ca": "返回 Marketplace", + "mc608981d8d68": "应用市场", + "m2c379af32973": "已验证的发布者", + "mf8b32f4e92bd": "已安装", + "mb9b5eae4ef79": "安装到:", + "m30670d5071e3": "安装到", + "m8621cdb8240d": "没有可用工作区", + "mc97ace4c8fef": "审核", + "m1e142e6277b1": "安装", + "m4efca0d10c5f": "关于", + "m2527a18acbad": "未提供描述。", + "m3a5dae10cecd": "v 的新内容", + "m84cb7871b741": "评价", + "m1e1bb23a19c4": "暂无评价。", + "m9f05cde557b1": "包含内容", + "mb99cd7c6ce49": "知识库文件", + "m0b7fa0586cbd": "MCP 连接器", + "m0492fbeca82c": "空环境", + "mf188a8ab9b65": "包含 MCP 连接器", + "ma56ef92e6a3c": "此环境包包含", + "mc60abc330016": "个外部工具连接", + "mc3a49eb654d1": "。安装后,系统会要求你分别授权每个连接。", + "m1331275bc537": "标签", + "m41490494a9b2": "什么是市场?", + "m8cf76fa99dc0": "了解 Discover(完整项目)与市场(AI 环境)之间的区别。", + "m60fb40ded4de": "举报此条目", + "mc39059141ced": "审核中", + "mbc96567e77ca": "未上架", + "maea4a04a8042": "已拒绝", + "mdb849f91bd40": "我的条目", + "m706a22635b66": "新建条目", + "m38975ad4e835": "暂无条目", + "md1472eec2b9d": "将你的环境打包并与社区分享。条目会显示在市场中,并可安装到任何工作区。", + "m51c8f370595c": "创建你的第一个条目", + "m4c94485e0c21": "v", + "mdcc839a4015c": "查看", + "m7e6fefff0f0a": "隐藏", + "m829b028565e1": "删除条目", + "m9e9d0b8dc878": "删除此条目?", + "m01ad2f8a4375": "此操作会立即将其从市场中移除。已安装的环境仍可正常使用,因为它们引用的是克隆的环境,而不是条目本身。", + "mcb28c6022792": "选择环境", + "mfe0249338b6b": "选择要打包的内容", + "m93c044cba47e": "条目详情", + "m92663bbd94be": "标题、描述、类别", + "ma41a9666fd92": "预览和权限", + "m07cc0dcf1fdc": "安装者将看到的内容", + "m6f202f54a7b2": "上架", + "mb3694f57177e": "发布到市场", + "m2c161ed3b030": "你需要先拥有一个工作区,才能在市场上架。", + "mf085ee865703": "前往控制台", + "md23bd01fa099": "在市场上架", + "m31fbef162594": "继续", + "mb703ed71cc6c": "暂无可发布的环境", + "mbce3b9cdff33": "请先创建一个工作区环境,环境会将技能、规则、知识库和连接器整合在一起。", + "m2d3e8636f7a7": "打开环境", + "m842db8589b31": "选择要打包的环境", + "md5a1ec4dd9ca": "只有所选环境的内容会被发布。密钥和连接器凭据绝不会包含在内。", + "m772d235622ce": "为单个项目自动创建", + "m6622b55561f1": "在整个工作区中共享", + "m377efcb322eb": "仅供你个人使用", + "m77c326d54f45": "安装者将在市场目录中看到的内容。", + "m7e8cd2056da7": "标题", + "m68c603088166": "清晰美观的名称", + "md15387ecc6c5": "网址标识", + "mb20d2b525943": "仅限小写字母和短横线", + "m70d9513334b5": "用于 URL:", + "m85fe537ced97": "your-slug", + "mdd34d90aa090": "只能使用小写字母、数字和短横线。", + "m796aecd3d1a2": "简短描述", + "m146680f1448d": "卡片上显示的一句话", + "m1d34110d0dfe": "详细描述(Markdown)", + "mc89f8e2130ab": "此环境能做什么?适用于哪些人?如何设置?", + "m3802d349c57d": "react、ai、design(用逗号分隔,最多 10 个)", + "m3f5b18d03635": "安装者大致会看到以下内容。权限将根据你的环境自动生成。", + "mea556ed312a5": "安装者需要授予的权限", + "m4ea753f216e9": "确切的权限列表会在安装时根据你的环境计算。下方预览器展示了权限类别,安装者在点击“安装”前始终可以查看完整的权限明细。", + "med8a3216ae21": "为用户的 AI 添加技能", + "m6e4d7cd86e31": "添加会自动应用到匹配文件的规则", + "mbdafc8eb351a": "将知识库文件添加到用户的上下文中", + "md393a2db5419": "如果你的环境包含 MCP 连接器,可能需要用户提供凭据", + "m99486b443405": "提示:发布后,你可以通过“Marketplace → 我的上架内容”快速迭代。", + "m53a432f3a896": "已上架到 Marketplace", + "mbd20cb6ea223": "你的环境已上线,任何人都可以找到并安装它。", + "m95a52dbf1d63": "管理上架内容", + "m9d24337a3472": "查看上架内容", + "m4a2405296122": "准备好上架了吗?", + "m4ce6b8cf84df": "我们会将上架内容创建为草稿并立即发布。之后你可以在“Marketplace → 我的上架内容”中取消发布或编辑。", + "m957d0bac698d": "正在创建上架内容...", + "m5f51143bee08": "正在发布...", + "me98a25f307ad": "草稿已创建,ID 为", + "m234fcfaef3db": "。你可以从", + "m088ef026e24d": "未找到工作区", + "m406c52c4c49c": "非常适合探索和个人项目。", + "m9df81b5e09ca": "3 个项目", + "m0ca13fac6d64": "1 名工作区成员", + "m2595f73bafff": "每天 5 个 AI 额度", + "mf954c5f63cdb": "最大文件大小 5 MB", + "me4351f23dd28": "自定义域名", + "m6180b58ae02d": "分析仪表板", + "macea4b408437": "优先支持", + "m07cceb218b35": "适合希望更快交付的创作者和小型团队。", + "m35b944672535": "25 个项目", + "m870847bf57ee": "5 名工作区成员", + "mce1b0d3d449f": "每天 50 个 AI 额度 + 每月 500 个", + "m1616cf4be43c": "最大文件大小 25 MB", + "md8d32463af03": "适合需要扩展能力和高级控制的成长型团队。", + "m84e7d0f7e5d2": "100 个项目", + "m575f3caebf79": "25 名工作区成员", + "m82adec1c04dd": "每天 200 个 AI 额度 + 每月 3,000 个", + "me273cccad057": "最大文件大小 100 MB", + "m15df7c888dff": "简单透明的定价", + "ma22d9d8a90f1": "免费开始,需要更多功能时再升级。", + "mad2ea9485094": "最受欢迎", + "m61e8d44ad423": "开始使用", + "m7ec0261b8e8a": "升级", + "mdfd7a6134114": "需要更多?", + "m47aaf31b83d6": "联系我们", + "me6d381b51f0c": "获取企业版定价。", + "m7189e58be0db": "项目设置", + "m9f9e2e63f6b3": "管理项目配置、集成和环境。", + "mf86b060c51f4": "运行中的实例", + "m811386e45e29": "此工作区中每个已发布项目的实时运行环境状态 · 轮询", + "md961f2529930": "从侧边栏选择一个工作区,以查看其中运行的实例。", + "m9f0a4829ae1c": "正在加载实例…", + "m28b4720f32ff": "暂无运行中的实例。发布一个项目后即可在此查看。", + "mff11b41a9783": "运行时指标在生产服务器上收集(systemd + cgroup)。在开发环境中,这些指标显示为“unknown”,内存和 CPU 值为空。", + "m51280dabfbc8": "失败", + "m2e60115bfe0c": "在密码之外,再输入身份验证器应用中的验证码", + "m4da10f1fbb17": "设置", + "m40d0c2ff1f2a": "新的恢复码", + "mb7e3e4aa4257": "停用", + "mbeb6187632b4": "设置双重身份验证", + "m688a0b036688": "使用 1Password、Authy 或 Google Authenticator 等身份验证器应用扫描二维码。", + "ma892ff9886ed": "MFA 二维码", + "m3ea15b3e1ff9": "或者手动输入此代码", + "m68bc30f3f6b1": "我已添加,下一步", + "m38f61733e73f": "输入应用中的 6 位验证码", + "meea2745e2867": "验证", + "m25878b1ac5ff": "立即保存这些恢复码。", + "m01457caf898e": "如果你无法访问身份验证器,每个恢复码只能使用一次。我们不会再次显示这些恢复码。", + "md6eafe823591": "下载", + "m11a6767d5674": "完成", + "mc2d5063dd6db": "停用双重身份验证", + "m2a35f694ae08": "确认你的密码和当前验证码(或恢复码)以关闭 MFA。", + "m72ed2bd767ce": "当前密码", + "m745cbf0e10e7": "6 位验证码或恢复码", + "m8adb8274a7c6": "停用 MFA", + "m49cc3d4c731f": "重新生成恢复码", + "md2d0d09966de": "你现有的恢复码将立即失效。", + "m0d1fa0dfcc9e": "6 位验证码", + "m3cdc25d9296b": "生成新恢复码", + "md375b86349a7": "立即保存这些恢复码,我们不会再次显示。", + "m74a883a037bc": "设置", + "me5d65e29b68f": "管理你的账户偏好和安全设置。", + "mb58fa4e0b18d": "活跃会话", + "m263f51795417": "当前已登录的设备", + "me0d1b68224bf": "当前", + "md696a35bdd18": "个人资料", + "m2a4a3391ad17": "你的个人信息", + "m2b7f6a84de91": "显示名称", + "maf8cbab6829c": "你的显示名称", + "m4b0042d044fe": "请联系支持团队以更改你的邮箱地址。", + "mdd0ae7a5cbcf": "保存更改", + "m8f6fb4eb7f42": "安全", + "m7f183b022e0c": "密码和身份验证", + "m3f9c991f63a9": "更改密码", + "m2cad078bc7dd": "密码更新成功。", + "m3e2b5dfbc2a1": "输入当前密码", + "m6bf1430d8550": "再次输入新密码", + "m0a4e0b71b7f3": "更新中...", + "mfe45b4014135": "更新密码", + "m3907fa7f8072": "外观", + "m8fa7b13609e0": "自定义 Doable 的外观", + "mefb52e7172b7": "主题", + "mdbcd5e7bb7a0": "浅色", + "m60acc53f13a5": "深色", + "m6725e7bbcd28": "跟随系统", + "mdb3183e39ef5": "品牌颜色", + "m3c1c01b40585": "危险区域", + "m25f7dd8d5424": "不可逆和破坏性操作", + "ma2e20a335700": "删除账户", + "mf33e06dd2c9b": "永久删除您的账户及所有关联数据。此操作无法撤销。", + "mc031bf992e17": "删除账户", + "m123bce672d45": "此操作永久生效且无法撤销。您的所有项目、数据和设置都将被永久删除。", + "mbaaddf70fb5d": "输入", + "m65daeb378bde": "DELETE", + "m1b2a5036345d": "以确认:", + "md4856f418bf3": "输入 DELETE 以确认", + "m685ecb984ac2": "正在删除...", + "m21d5294717e2": "删除我的账户", + "m6029d15003fe": "Doable默认设置", + "mfd28ca1cbfba": "适用于此工作区中所生成应用的工作区级运行时 AI 默认设置。除非项目在", + "m55f6925c7920": "项目设置 → Doable", + "m3c7c3432af8b": "配置聊天模型服务商", + "m0e41a94afc0c": "平台嵌入模型", + "m23e678a08bbe": "默认系统提示词", + "m552e423045fc": "(无)", + "m385c57501bad": "未设置", + "m92d12bf8f0a5": "默认嵌入模型", + "m5967f99c5703": "平台默认值", + "m4a5c75c9e81f": "对于未设置自身系统提示词覆盖值的项目,此内容会添加到该工作区内每次聊天调用的开头。", + "mf8eddc053b2c": "默认思考过程可见性", + "m281b63ba336e": "始终显示", + "m8a4ef9b34729": "隐藏(服务端移除)", + "mdfd2cac68175": "您是此工作区的成员,但不是管理员,因此这些默认设置对您只读。", + "ma91af2a1efd1": "保存默认设置", + "m880e5d9d8e9a": "工作区 AI 使用情况", + "m8a5a9466c8b4": "此工作区中所有项目运行时 AI 调用的汇总(编辑器 / 构建器调用会在", + "m6a99fc662f7c": "模式下单独显示)。", + "m2b065c7c9ce4": "今天", + "ma7c742643c7c": "7天", + "me3ba17e32240": "30天", + "me7601ca1178a": "Token 总数", + "mada27592c957": "请求数", + "m9ccba222f889": "预计费用", + "m551e877182dd": "按模式", + "m204a5eb2cd28": "费用", + "mac1fe0f76734": "项目排行", + "ma039dfb9628b": "Token 数", + "me0707a236f1e": "(孤立)", + "m1890cc51ee20": "无默认值(由用户选择)", + "mf64b3ff5bc6e": "React (Vite)", + "m49d550463542": "默认框架", + "m87946b3562a1": "当创建者未选择框架且提示词未明确指示框架时使用。未设置时默认为 React (Vite)。", + "m19c17957c224": "只读,需要管理员权限。", + "m4b1b8aa3608a": "所有者", + "m7c968fb71f50": "成员", + "m678bfa6af48b": "查看者", + "mc910d474dcd7": "常规", + "mf5a378c34758": "工作区名称和描述", + "mee9ff5054717": "此工作区用于什么?", + "m84c7e2a050b5": "您的角色:", + "me2204b3eaff6": "团队成员", + "me31ab643c44f": "成员", + "mf728553b59c5": "通过电子邮件邀请", + "m7fbfb94aeafa": "colleague@company.com", + "mb95d5f7c3973": "生成邀请链接", + "mea61bc15688d": "已复制!", + "mdbf362d4f210": "复制链接", + "md1eb47c77576": "(你)", + "m9438e0ba8e63": "移除成员", + "m74d26f0e2e44": "待处理的邀请", + "m62a2fed3d6e0": "待处理", + "mf6725f3af08a": "到期时间", + "m3e19d958e483": "撤销邀请", + "mf9d85ba811da": "不可逆操作", + "mf1955b781545": "删除此工作区将永久移除所有项目、文件和数据。此操作无法撤销。", + "m55f033dbcb29": "删除工作区", + "mdaab6af4973b": "这将永久删除", + "m0869e4e92657": "及其所有数据。请输入工作区名称以确认。", + "m280b10c89cc4": "永久删除", + "m07437cd651be": "环境", + "maab669a72882": "MCP 服务器", + "m00e6f89be431": "技能与规则", + "mad94fce14ac2": "Doable", + "m3d65b4959a69": "未找到工作区。", + "m8e25832407ee": "工作区设置", + "m2e1aa9f2f180": "管理工作区、团队成员、环境和集成。", + "m16e44882f450": "将技能、规则、知识库和 MCP 连接器打包为可复用的预设。项目会继承工作区默认环境。", + "ma3ab5156a004": "连接 Slack、Notion、GitHub 等第三方服务。工作区级集成对所有项目可用。", + "m55deb400b9f9": "连接 Model Context Protocol 服务器,以使用自定义工具和能力。工作区范围内的连接器对所有项目可用。", + "m035456671e98": "管理可复用的技能和规则,以塑造 AI 的工作方式。工作区级技能会被所有项目继承。", + "m12bbbbf8f137": "知识库", + "m82abc5221280": "AI 在每次交互前读取的上下文文件。所有项目都会继承工作区知识库。项目可以添加自己的覆盖内容。", + "m91817495a78f": "返回文件列表", + "meaece9d1a4a8": "自定义上下文文件", + "m9c80e8331a86": "未保存", + "m0c202c1c284e": "还原更改", + "m4be89ed53733": "保存(Ctrl+S)", + "m28e18dc9db38": "删除文件", + "m1ce93dacbcf4": "字符", + "mfd65b5367e9e": "正在加载知识库...", + "md4f8b86bd838": "AI 会在此工作区中每次交互前读取这些文件。点击文件即可编辑。", + "ma6979ff7fee1": "添加知识库文件", + "mf50957f1c8cc": "新建知识库文件", + "mb2af5e64cae1": "文件已存在。", + "m4759498ac2a7": "创建", + "m6b170f2de20f": "Internal Testing Scope | Doable", + "m2865af52a310": "内部测试范围", + "md1e9cdd9f9e0": "Doable 供获授权的内部成员测试自然语言生成应用流程。", + "m70795fb25c14": "项目与账号数据存储于本部署;使用 AI 时,请求内容将发送至管理员配置的模型接口。请使用测试数据。", + "mfd3d283506ca": "本页是内部测试说明。联系平台管理员获取访问、数据处理或支持信息。开源组件的许可证与版权声明保留于部署源码中的 LICENSE 和 NOTICE.md。", + "m22d9879b3be5": "联系管理员 | Doable", + "m367af5187c57": "联系管理员", + "mbee3f95fbd7c": "Cookie 说明 | Doable", + "m52454d98091b": "Cookie 说明", + "m14744ba1fd1d": "版权与开源说明 | Doable", + "me2e0aaabb0df": "版权与开源说明", + "m76c5505ff2e2": "返回首页", + "mee290b3ddbc8": "Cookie 政策", + "m997c65f3c315": "可接受使用政策", + "mc2ac011216f3": "DMCA", + "m2b5c3d26721a": "联系我们", + "mc081a965e548": "Doable。保留所有权利。内部测试平台。", + "m72366a549ad3": "数据处理说明 | Doable", + "m8b2f1b153b79": "数据处理说明", + "mb7a1c461c394": "内部测试使用说明 | Doable", + "m92070588f1ac": "内部测试使用说明", + "m1a1952532a59": "身份验证失败", + "m04b7a0b6eb85": "这只需要一点时间", + "m3d2ee2c69bee": "正在准备身份验证……", + "m64ddd1020b45": "正在重新登录……", + "m54c2a2733940": "Brew Haven——一家值得寻访的咖啡店", + "m027c61c1e5b2": "手工制作的咖啡、舒适惬意的氛围,以及融入每一杯咖啡的社区情谊。今天就来 Brew Haven 吧。", + "mdac866afb655": "可持续采购", + "m25cc22295e06": "社区至上", + "m4656735e0b78": "用心匠造", + "ma56dda826249": "Brew Haven", + "mfdc2b75ad30f": "查找我们", + "m6b8521ba68ad": "创立于 2019 · 手工咖啡", + "mfff0ae82fb8d": "你理想的那杯咖啡", + "m558ae13d7638": "正等着你。", + "m10fa41b20df4": "悠闲的清晨、浓郁的意式浓缩,还有一个让你倍感自在的角落。Brew Haven 正是你一直在寻找的社区咖啡店。", + "m32ebfb7c7532": "查看菜单", + "m3fb76449c076": "我们的故事", + "me54eb3b48e08": "一个让人放慢脚步", + "md1bc8820eb83": "细细品味的地方。", + "m5ffd2fdefce3": "Brew Haven 始于 2019 年写在餐巾纸上的一个梦想——开一家社区咖啡店,用同样的用心对待咖啡豆、咖啡师和每一位客人。如今,我们很自豪能成为作家、远程办公者、初次约会的情侣和老朋友们相聚的地方。", + "m2b0ec859f42d": "我们直接与埃塞俄比亚、哥伦比亚和危地马拉的家族农场合作。每周都会调整烘焙参数,确保你杯中的咖啡始终处于风味巅峰。", + "me66580cc2323": "我们提供什么", + "mb545da336b4d": "我们的菜单", + "m4e18d19f9a89": "应季、新鲜、始终现点现做。", + "m7ef51b7808f3": "暖心话语", + "m21e4b2f51b39": "客人怎么说", + "m1033449b8c82": "来看看我们", + "m17509f6f7fd8": "找到你的栖心之所", + "ma53218c7a3a1": "我们就坐落在社区中心。带上你的笔记本电脑、日记本,或者只带上自己——这里总有温暖的座位和一杯恰到好处的咖啡等着你。", + "m56ef8f20955f": "地址", + "mf1898d578fff": "142 Maple Street, Brooklyn, NY 11201", + "m21e8492938ab": "营业时间", + "ma8a0f79afc28": "周一至周五:7am – 7pm", + "m6e1828ded15a": "周六至周日:8am – 6pm", + "m63dceb8800b2": "电话", + "ma7e61d026fe0": "hello@brewhaven.coffee", + "m74ac8a852e7a": "142 Maple Street, Brooklyn", + "m43a6ffbfa175": "在地图中打开 ↗", + "mf7f51cfa2de0": "Brew Haven。保留所有权利。", + "mbad57ef7837c": "Instagram", + "md41f5b4977ee": "Facebook", + "m5510cb0c913d": "正在加载编辑器……", + "m0072e6b93494": "设计", + "mb977b950c1ae": "云端", + "mabc7e9892806": "文件", + "mc372fee9b456": "速度", + "m55c03ce120c7": "正在规划以下操作:", + "m15a8b431558b": "项目启动失败", + "mbabe6dbcbd8f": "查看安装日志", + "m4504b2c82bef": "复制日志", + "m1a5787cd1c50": "耗时比平时更久", + "mabee9029bf6d": "正在预览上次保存的版本", + "mb99fa6c06150": "预览不可用", + "me1d5ea6491f6": "正在加载实时预览...", + "m0eb1ec38c2d7": "准备中...", + "m82b93630a921": "启动中...", + "m0e7696009337": "历史记录", + "m041aefc44394": "显示或隐藏侧边栏", + "m340f463033e0": "代码", + "m76c7269afa9f": "更多视图", + "m69c404591e99": "视图", + "mc9e9cb30a945": "从工具栏取消固定", + "m637e9e5bb5ff": "固定到工具栏", + "mf7e0c1af18fe": "下载项目", + "mf930a196376c": "正在创建副本...", + "mf8725da98b5a": "创建项目副本", + "m8c3970faabc3": "复制项目链接", + "me9bef0b0f3c2": "键盘快捷键", + "mc4c81576b2aa": "点击以导航到路由", + "m9bd88f2485ac": "桌面端", + "m80da9e2ced28": "平板端(768px)", + "m2758ecdf72f7": "移动端(375px)", + "m5b529abadacc": "刷新预览", + "me0af5c0bc245": "在新标签页中打开", + "m37fd4e355ba3": "退出全屏", + "mc461dbb2bab7": "全屏", + "m29887a5ff984": "分享", + "mff37e873810f": "部署到公开 URL", + "m258150cb3ee4": "开始对话", + "m2d8d9afecd24": "描述你想构建的内容,Doable将为你生成代码。", + "ma270fdec86fe": "工作模式 — 生成代码", + "m0307fd10509e": "策略模式 — 仅创建计划", + "me84bd14c0f46": "显示完整提示词(", + "mf613e62f9414": "k 个字符)", + "m260f9f6f0261": "思考过程", + "mce4f8c390a73": "AI 模型服务商未连接", + "me1a9e2c7f9c5": "在设置 → AI 中连接 GitHub Copilot 账号,或添加自定义模型服务商 API 密钥。", + "m45833b231c24": "配置 AI", + "m897f32e09bef": "显示原始 SDK 错误(用于调试)", + "mc1e75128adb8": "构建中...", + "m86f666cabb18": "隐藏之前的步骤", + "m0df6f1cad36c": "显示", + "m2a51d3547c23": "之前的", + "m3e64cc41cf8e": "步骤", + "mb7595e2a8639": "步骤", + "m5a113737926c": "回答良好", + "m5ffca88c1555": "回答欠佳", + "m457efe538b25": "复制消息", + "mf8d46c2570e7": "更多操作", + "m9757ccd5ef12": "编辑消息", + "m35da197a9e9c": "恢复到此处", + "m82218b943cdb": "点击下载", + "m53ece783f833": "新建步骤", + "m1637236fa066": "描述此步骤的功能", + "maec142ee7062": "返回聊天", + "m6ca7bd811152": "停止Doable", + "m806670321baa": "剩余 5 额度", + "md22feb61298b": "添加额度", + "mb04765eefcef": "询问Doable...", + "m9fa4ffd4c58e": "附加文件(图片、文本、代码、PDF)", + "m6f6d2f91972f": "设计视图", + "md4cb298c2663": "停止生成", + "mcae7d57bc067": "停止", + "mf6f4688ff23d": "发送", + "m65190883f1fe": "Shift + Enter 换行", + "mc39d646f1076": "资源管理器", + "m3d2301d732a7": "加载失败", + "m60801b1a50bd": "正在加载文件...", + "mcb922b5840ae": "暂无文件", + "m3ca461fea183": "让 AI 创建一些文件", + "m51d3d0b1a3b5": "关闭(Ctrl+W)", + "m26bfbd5c83f9": "未选择文件", + "m712e79239f4a": "隐藏迷你地图", + "m073549e7238a": "显示迷你地图", + "me9ddf97389a9": "从资源管理器中选择文件", + "mfde6d3caf5c9": "点击任意文件查看其内容", + "m97cbc435d6e8": "按 Ctrl+S 保存", + "m71f5abb5edb0": "按 Ctrl+F 搜索", + "m6ee99fb19bf8": "按 Ctrl+H 替换", + "m5c8e7fa6580f": "按 Ctrl+W 关闭标签页", + "m2f4e0b81ecfb": "正在加载文件...", + "ma3c43b2835a3": "AI 生成文件后,代码将显示在这里", + "meae2557ee98d": "在聊天标签页中开始对话,以生成项目", + "m12aa55074ad4": "应用预览", + "m01ff8705531c": "自动修复已暂停——AI 在上次尝试中未编辑任何文件。", + "mc2e1149badc5": "打开聊天手动修复,或点击“重置预览”。", + "m569907da4f4a": "将在 2 分钟后自动重试,或立即恢复。", + "m1d45fe5006a5": "恢复自动修复", + "m420b6920da29": "正在设置工作区...", + "m6f17cf6ff57b": "正在根据计划构建...", + "m41653c9c7085": "正在构建应用...", + "m2133e77f6691": "正在安装依赖", + "m26e9d5c2f091": "AI 正在编写代码", + "m8e16d8fd15bd": "分享项目", + "mb7f251195db4": "与他人分享项目,或将其嵌入你的网站。", + "m724408ba0fe1": "已启用链接分享", + "m5baec6fcbec2": "私有项目", + "ma4e33656caa4": "任何拥有链接的人都可以加入并协作", + "m2dc6333ea270": "仅受邀协作者可以访问", + "m9e0d56d0c3b1": "协作链接", + "m4272978f92ad": "复制协作链接", + "m724e78a3254c": "复制链接", + "m5f14f9e6d80f": "位访客", + "mfe9919df44cb": "位访客", + "m905dd6fd364c": "总浏览量", + "m655e2cc98ce6": "查看过此项目的用户", + "m2396bf0b471b": "未知访客", + "mf0e68ac26df2": "次访问", + "mb944075326e4": "次访问", + "m439c0bddcded": "协作者", + "m1b4064cc2957": "协作者", + "mf2c6e9b92fed": "移除协作者", + "mf87e73885684": "暂无协作者", + "m0ddd45761e9e": "分享上方链接以邀请其他人", + "m865f0063ee77": "启用链接分享,让其他人加入", + "mc4269502c892": "预览 URL", + "m787406ddea2a": "暂不可用", + "mb26d1037f1c2": "复制 URL", + "m3e358110ed34": "嵌入代码", + "mfb1eec41bf9a": "预览暂不可用", + "ma6185b1bac5a": "复制嵌入代码", + "m7d9eb7acb13e": "关闭", + "m63eac3543445": "部署项目", + "m258e06a65649": "将项目发布到公开 URL。", + "m1b5e18d612ea": "生产环境部署", + "m532eaabd9574": "测试", + "m5ad97435475e": "预览部署", + "m90f5b6aa4773": "部署到", + "m1653b4115030": "正在构建项目...", + "m80113aa5faa0": "正在部署...", + "mbbfce3ca6d67": "这可能需要一些时间。请勿关闭此对话框。", + "mcfb9b21873ed": "正在准备文件", + "m64629c4d29ff": "正在构建项目", + "m8d32627e5f77": "正在部署到", + "mab8e18ef4ebe": "生产环境", + "m5975cf1bba43": "预览环境", + "md94be7d9742f": "已上线!", + "m7a0c1d6867ef": "你的项目现已上线,地址为:", + "m3f3ade612f14": "移除线上站点并释放 URL", + "m77cdc28c5085": "正在下线…", + "m8026481a3655": "下线此站点", + "m4a1fec6bb23f": "部署失败", + "mbe6c9b2e929b": "部署过程中出现问题。", + "m796ae067cc65": "查看构建日志", + "mb703dbfc031f": "尝试修复", + "m862996056422": "删除项目", + "m59cdaa26dd9d": "键盘快捷键", + "me198269c2a19": "发生意外错误。请重试。", + "m44dc4af8bac1": "参考:", + "mfb9ef894175c": "产品", + "m5697d03daef4": "功能", + "mdfe95783edfe": "定价", + "mead07c84baac": "更新日志", + "me89b30aa1dc3": "资源", + "mc205924de0fe": "文档", + "mf911e414cf6b": "GitHub", + "mbe91940b79f4": "支持", + "mde4743c87973": "公司", + "m54a57c3147c4": "隐私", + "mede548996483": "条款", + "m74d52f5a16af": "告诉 AI 你想做什么,Doable会帮你完成。从想法到部署应用,只需几分钟。", + "mbcd18ead5fa8": "Twitter", + "mdd84425b72da": "LinkedIn", + "mc3d6834efdd6": "Doable。保留所有权利。", + "m141395eb3556": "Cookie", + "mc8d1a76ed3cd": "正在接受邀请…", + "m590ca07bd607": "你已受邀加入工作区", + "mf28e0103cd50": "登录或创建账号以接受此邀请。", + "m5735019b4e98": "邀请已接受!", + "m3ce4ce5b4d78": "正在将你重定向到仪表盘…", + "m689d821c3114": "无法接受邀请", + "ma469ab4ca4e5": "页面未找到", + "m74b78a922b99": "你要查找的页面不存在。", + "m900fe12faa26": "解决方案", + "mbb501d7877eb": "社区", + "mc189840cf7e2": "登录", + "mdcf218cf7b95": "想法成真,立即实现,完成交付。", + "m13b022d3d051": "说出需求,Doable来实现。", + "m3acf05570e85": "你希望Doable做什么?", + "m87fbe4fb79b1": "附加文件", + "m029320ad166c": "截图", + "m3f51e8d0877b": "高效团队,都在用Doable", + "m463052e79d3a": "如何使用Doable", + "m5e6a3d274615": "说出你想做什么", + "m9a7bfe7eb8e4": "描述你的应用、上传截图或分享文档。Doable会处理好一切。", + "m78241958361f": "看着Doable完成构建", + "m9f161010716d": "AI 会编写代码、构建界面并设置后端,你可以全程查看。", + "m80c9d1291916": "完成。立即发布。", + "m7d20496fb539": "一键部署。自定义域名、SSL 和全球 CDN 全部为你配置完成。", + "m09013f2de54b": "完成工作所需的一切", + "m08ebf324d047": "工具全部内置,让你专注于创作,而不是配置。其余工作由Doable完成。", + "mf518cf7b4efe": "极速响应", + "m6bb152928b4a": "默认安全", + "ma25c6b5b6afa": "全球 CDN", + "m8c0b956e14ef": "完整代码访问权限", + "m0684cdd39443": "准备好开始了吗?Doable已经准备就绪。", + "md52657699508": "已有数千名创作者在使用Doable。免费开始使用。无需信用卡。", + "maeea1a48193b": "免费开始使用", + "m1445799c033a": "了解更多", + "mfa23af167fb0": "个人项目永久免费。使用Doable,立即开始。", + "m7013af4c42fe": "设置", + "m8e6a6cca7aae": "步骤", + "mcd6e6bf7671e": "无法加载方案默认设置,你可以稍后在 /admin/plans 中进行配置。", + "mf33e9463fe30": "尚未配置方案默认设置。你在第 3 步设置的模型服务商应该已经应用到所有方案。如果此列表为空,你可以稍后从", + "m5950cc6b345a": "每个方案的 AI 模型默认设置", + "m0d962a8ad91d": "你在第 3 步选择的模型服务商和模型已自动应用到所有方案。你也可以按需为各个方案单独覆盖模型(例如在免费方案中使用更便宜的模型,在企业方案中使用功能更强的模型)。你可以随时在", + "mfa8ed0bdabdd": "订阅方案", + "m3840d9d29421": "默认模型", + "m6786e7ae86aa": "欢迎使用你的Doable", + "mf198e3035cb0": "你是此安装实例的平台所有者。本次简短设置将引导你连接 AI 模型服务商、配置登录选项以及方案和计费,以便你的团队注册并开始构建。每个步骤都是可选的,你之后也可以从", + "m9619649d8dc1": "工作区名称", + "me2f59cbbd2e4": "Acme Corp 的工作区", + "m56bf215a01f2": "这是在你的安装实例中向用户显示的名称。", + "mbb59d7d5f7b2": "使用现有的 Copilot 订阅(OAuth,无需密钥)", + "maf41ef1f8cc0": "粘贴任意 /v1 API 基础地址和密钥(Llamafile、vLLM、代理等)", + "m53542be919ee": "gpt-4o(OpenAI)", + "m7e85883aa362": "gpt-4o-mini(OpenAI,更便宜)", + "m447070f01035": "o3-mini(OpenAI 推理)", + "m7f3c09e12c73": "claude-3.7-sonnet(Anthropic)", + "m442058677a76": "claude-sonnet-4(Anthropic,最新)", + "maacb18706135": "gemini-2.0-flash(Google)", + "m1caaab8de684": "自动(按请求路由)", + "m8b4adb3862ca": "选择或输入模型 — 聊天需要知道要调用哪个引擎。", + "me8579660f269": "请先点击“使用 GitHub 连接” — 保存前需要先连接 Copilot 账户。", + "mb83bc0c87ee9": "连接模型服务商", + "ma30e891162d9": "选择一个开始 — 之后可以在", + "mb36828d08414": "中添加更多。", + "mee84a5fafc6f": "搜索模型服务商(例如 minimax、groq、ollama)", + "m2150d8df37e4": "显示全部", + "m1e19bab29bc6": "个模型服务商", + "m6da70c62b13a": "(显示热门服务商)", + "mc892c6d3f9e5": "没有匹配“", + "mad5c8b09c799": "”。清除搜索内容或切换“显示全部”。", + "mf2969201caf1": "免费层级", + "ma9977b3804b1": "提示:运行前导出 19 个受支持的 API 密钥环境变量中的任意一个(", + "m782f3b91aee9": ",…),", + "m9e8be70c89aa": "匹配的模型服务商会在此处预先配置。请参阅", + "mf77ea2dcde80": "横幅查看完整列表。", + "m3e6a04afff84": "正在运行", + "mffa838f6509a": "本地模型", + "m28aa86db16fb": "?搜索", + "m76e3c7bfe641": "ollama", + "m7df09a7717ef": "lm studio", + "m3d30020b1863": ",或", + "mec8207a3dde6": "vllm", + "m910b571e2b50": "上面的服务商 — 无需 API 密钥,只需将其指向", + "m9cf6151e1e52": "Doable会", + "m254bb97b57f1": "不", + "m9fe6e8f5bbda": "捆绑、分发或代理任何第三方 AI 密钥 — 每个密钥都由你自行提供(BYOK)。", + "mb58eb52c8810": "暂时跳过", + "m01dbdc1c993d": "(替换", + "m0344f8c6320b": "为你的值)", + "md34c1f38253c": "API 基础地址:", + "me0beec38b884": "获取密钥", + "m202ee5a3741d": "此模型服务商在你的计算机上本地运行 — 无需 API 密钥。请确保服务器正在上面的 URL 上运行", + "me63dffe73660": ";请参阅下方的警告", + "mae563693e963": "你的 API 密钥", + "m089ef2b6dbb3": "模型 ID", + "m09bf1d2d1f94": "(来自模型服务商文档)", + "m119ac74a9f28": "GitHub Copilot 使用 OAuth,无需 API 密钥。点击下方按钮,使用你现有的 Copilot 订阅授权Doable。系统会打开弹窗;你在 github.com 上完成授权后,弹窗会自动关闭,我们将返回此处以选择默认模型。", + "md3f403f42255": "正在等待 GitHub…", + "m6f2b4e53fd6b": "使用 GitHub 连接", + "mb9ae1344db09": "已连接账户:", + "m733e8e968cd4": "。请在下方选择默认模型 — 你可以随时在", + "m67969da753e5": "默认 Copilot 模型", + "mf006797a8658": "正在获取你的 Copilot 订阅包含的实时模型列表…", + "m97c6d58174ba": "将此模型用作每个方案(Free、Pro、Business、Enterprise)的默认模型以及建议模型。之后可以在", + "mcd51f8c88998": "正在验证…", + "mb62d92c04b27": "验证并保存", + "m397e0b042fa6": "text-embedding-3-small / large。速度快、支持广泛,价格为每 1M Token $0.02。", + "m8b641190411f": "通过 Gemini 的 OpenAI 兼容 API 使用 gemini-embedding-001 / text-embedding-004。", + "m21b98f239b59": "任意 /v1/embeddings 端点 — Ollama、vLLM、Voyage,以及通过代理接入的 Cohere 等。", + "mce4eb2f81438": "(可选——适用于聊天机器人、语义搜索和 RAG)", + "m10f5e9ac0df6": "只需选择一次——所有工作区都会继承此设置。如果暂时不需要 RAG,可以跳过。", + "m5f37766b7475": "基于Doable构建的应用,其终端用户永远不会看到此设置——他们只需让 AI 构建一个聊天机器人即可。运行环境会调用此模型服务商,将他们的文档向量化。你可以随时在", + "m1e84cbbeaece": "保存前会通过探测调用验证密钥。", + "mce770667e5f9": "Google", + "mf5d92316d71f": "使用 Google 账号登录", + "m4670389c9b26": "登录 + Copilot AI + 仓库推送/拉取——使用一个 OAuth App,在下方注册父级 URL", + "mfe7ceb7816ed": "Supabase", + "m526606259ea3": "允许用户代表自己授权Doable创建 Supabase 项目,以便 AI 构建支持后端的应用。否则,用户会在构建过程中途看到登录提示。", + "m3c9e12e223c9": "登录服务商", + "m6590db953aef": "让用户使用 Google 或 GitHub 登录。在各服务商的控制台中注册回调 URL,然后在下方粘贴凭据。", + "m1a2303ede074": "连接", + "mf5b92da3fdef": "1. 在以下位置注册此回调 URL:", + "mf6a4a7cf34d1": "开发者控制台", + "m8d525e5f158b": "已复制", + "m293fc19e964c": "2. 粘贴你的凭据", + "m8726db013948": "客户端 ID", + "mae21cf6d24b8": "客户端密钥", + "m23e39291d613": "保存中…", + "mf412ebc3df40": "保存凭据", + "m1b24fc634466": "凭据已保存。为确保安全,值已隐藏。", + "me2e89b8e6f9f": "登录服务商为可选配置。你可以稍后在以下位置进行配置:", + "md084947c92ce": "订阅与计费", + "m5664b564628f": "选择每个方案层级默认使用的 AI 模型,然后可选择配置 Stripe 和注册策略。之后都可以在 /admin 中修改。", + "ma5a084d23d5a": "启用后,新注册用户会一直处于待处理状态,直到管理员在以下位置批准:", + "m0092b9666213": "。关闭时(默认),任何拥有有效邮箱地址的人都可以立即注册。", + "m63225ccda962": "无法保存——请重试,或使用 /admin/signups", + "mac177037c161": "Stripe(付费方案)", + "m7131c5070086": "粘贴 Stripe 密钥和 Webhook 密钥,以启用 Pro 和 Business 方案。", + "ma88096f64ef5": "可选——通过 Stripe 启用付费 Pro/Business 方案。", + "me83d9f58b3d6": "Stripe 密钥", + "m31535e99b294": "你的 Stripe 密钥", + "m48c7cde4072b": "Webhook 签名密钥", + "m18424d99bfd7": "你的 Stripe Webhook 签名密钥", + "m7738cb3ae13c": "Pro/Business 的价格 ID 可添加到以下位置:", + "m2de0ae2fa094": "保存 Stripe 设置", + "m2ba1d3dd28b6": "想要精细调整每个方案(免费版 / Pro / Business / Enterprise)的功能?你可以在以下位置设置每用户项目数、每日额度、文件大小限制、自定义域名等:", + "m8dc5b288dc5f": "——在此之前会自动应用合理的默认设置。", + "mbc01ae77f37c": "完成设置", + "m730e434e2c2a": "Cloudflare Tunnel", + "m9778b714611a": "我们强烈建议在 Cloudflare Tunnel 后运行Doable。你的服务器不会将 80 或 443 端口暴露到公共互联网——所有流量都会经由 Cloudflare 边缘网络进入,并获得内置的 DDoS 防护和 TLS。", + "md1dcc908d054": "Cloudflare Tunnel 已激活", + "mb41298f6a20c": "Cloudflare Tunnel 尚未配置", + "m3e0bd76b4c80": "cloudflared 二进制文件:", + "ma51a6c19a1ff": "已安装", + "me9363f76e114": "未安装", + "m6481edfe0a91": "Tunnel 配置:", + "mffa63583dfa6": "缺失", + "m261945c8a175": "cloudflared 服务:", + "m8322e87d2458": "已停止", + "m8892fc20f821": "公共主机名:", + "mdd00d3d3e9f7": "后续步骤", + "m8cda32203974": "在服务器上安装 cloudflared:", + "m4a706dc0d33e": "curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cf.deb && sudo dpkg -i cf.deb", + "mf08fb302bec6": "登录 Cloudflare 并创建 Tunnel:", + "m5da4ed8525fa": "sudo cloudflared tunnel login", + "mffbc4b090a5e": "然后创建隧道并配置路由:", + "m0e01c001f314": "sudo cloudflared tunnel create doable && sudo cloudflared tunnel route dns doable yourdomain.com", + "md71e794ad243": "启动 cloudflared 服务:", + "m5a846462fa96": "sudo cloudflared service install && sudo systemctl enable --now cloudflared", + "m98f87e36b355": "打开 Cloudflare 仪表盘", + "m81b5b9670350": "重新检查状态", + "me892474b34b3": "全部就绪 — 你的安装可通过 Cloudflare 访问,无需暴露任何端口。", + "mfd45cb7aab11": "跳过并使用直连端口?", + "ma3eca7bb4939": "不使用 Cloudflare 的话,你的服务器需要将 80 和 443 端口对公网开放。你需要自行负责 DDoS 防护、TLS 证书续期以及源站 IP 暴露的风险。你可以稍后在", + "m5b0b0536f25e": "仍要跳过 Cloudflare", + "mb1acabed067d": "跳过 Cloudflare", + "m515d1a3dc956": "正在等待隧道…", + "mf68057ac59cf": "任务跟踪器", + "mbfa0cab91d75": "切换到浅色模式", + "mfc43ea9804c7": "切换到深色模式", + "m64879f7d6b96": "方案", + "m1377264ba3b0": "工作区", + "m4b892277843c": "创建工作区", + "m5ebc59145b59": "工作区设置", + "m01eb22153f34": "今日额度", + "m11dde17d6c3e": "无限制", + "m198a27bda7be": "(上限)", + "m4b87271b6b81": "所有项目", + "m083fe88f924c": "导入项目", + "m690dbe9dc099": "最近", + "m091f4b8e2db6": "暂无最近项目", + "mc4d6bb200f4c": "文件夹", + "m82b9e1ef0b40": "新建文件夹", + "m8a66376ee6fc": "暂无文件夹", + "macb320d7f3e3": "升级到 Pro", + "m382c1b0128ec": "解锁无限项目和优先 AI 生成。", + "m2c414ee58a7e": "立即升级", + "m3e402e6d846c": "user@doable.dev", + "ma8e5e2c64f0c": "AI 设置", + "m8d59829c1e15": "用量", + "m8b2b19860686": "系统管理员", + "m48f0d3d397d4": "退出登录", + "mcee021f1b617": "我的团队", + "m14d34edf50ef": "文件夹名称", + "m7249f19c9e4f": "重命名文件夹", + "m39f35f2d44d6": "删除文件夹", + "me2c1d47c93ed": "”?此文件夹中的项目将移至根层级。", + "mc409c66f71f2": "官方", + "m3b9c358f36f0": "文件", + "m3d7db37d08f9": "个文件", + "mf68bbeba04a3": "由 Doable", + "m351dd54e5327": "使用模板", + "m7d8ab368210c": "关闭预览", + "mee3aea9a74c3": "未选择活动工作区。请选择一个工作区后重试。", + "m57bbe6daa81b": "创建项目副本", + "m1b8e9e6b07af": "创建项目副本后,你将得到一份归你所有的副本。", + "m7d465fb9b931": "紫色", + "m275dbda9dedb": "日落", + "mfed12611d2d8": "海洋", + "maf1ccb31304d": "翠绿色", + "me10d850954a8": "玫瑰色", + "m767cff7f960b": "此网站已禁止麦克风权限。请打开锁形图标 → 网站设置 → 麦克风 → 允许,然后重试。", + "mb5c308fbe72b": "日志筛选器", + "m81493812f8f2": "正在加载筛选器...", + "mfc86c80c7edf": "尚未配置筛选器。", + "mfb9cf75606b4": "已启用", + "me520df698000": "添加筛选器", + "maad7b48f94b8": "deny-pattern", + "m761252ef4dca": "drop-pattern", + "m4288ade73ff9": "模式", + "m404879015b5e": "替换 Token", + "m913a8849b60d": "正在添加...", + "m52493dd405b2": "团队 AI 规则", + "m1698475a0e4e": "将工作区中的所有成员锁定为指定的 AI 模型,任何人都无法更改", + "m40edcb0424d1": "要求所有人使用相同的 AI 模型", + "mce07e2d406c9": "启用后,所有工作区成员都会使用你在下方选择的模型,且无法更改。", + "ma270c2ea38f8": "模型服务商来源", + "m173243930c8e": "服务器默认", + "m7c5b75e762fd": "使用服务器内置的 GitHub 身份验证。", + "mfb4cbadb8b70": "尚未连接任何账号。请前往“连接”页签添加账号。", + "m9e09fe0c5e85": "尚未设置任何模型服务商。请前往“连接”页签添加一个。", + "m5f8a57b902c9": "允许成员选择模型", + "mc8500c181a22": "显示或隐藏工作区成员在编辑器中的模型选择器", + "md0965f23e9a7": "向工作区成员显示模型选择器", + "mea1cef6187f4": "关闭后,成员将无法看到自己使用的模型。系统会自动在后台运行工作区默认模型(或强制指定的模型)。", + "med9b760289e6": "已保存!", + "m06440082fecf": "保存策略", + "mdc273117482b": "连接", + "m278ba0d8ae8b": "配置模型", + "mc3ceee351e98": "访问控制", + "ma3966fe9958a": "访问受限", + "me3a6b88175b6": "平台管理员已禁用 AI 设置。", + "m5658830ef02d": "平台管理员已限制你对 AI 设置的访问权限。", + "m2687891426b5": "你没有访问 AI 设置的权限。请联系管理员。", + "m57294990f283": "配置为工作区提供支持的 AI 模型。", + "mdd51804e0d20": "标签(例如“我的个人账号”)", + "mdcd0e95a1c40": "标签(例如“团队账号”)", + "m316ff94e7f22": "请在此处粘贴 GitHub 访问 Token", + "ma87169d1ad67": "GitHub AI 账号", + "m4e74616e8a5a": "连接拥有 Copilot 访问权限的 GitHub 账号。个人账号仅你可见。", + "m81e8901975a6": "我的个人账号", + "m10fdee9039c4": "仅你可见", + "m88d4ac742ef4": "登录 GitHub 以连接个人账号", + "m22f6738880de": "使用 GitHub 登录", + "m0cead0b1bbfb": "使用 GitHub 访问 Token 添加个人账号", + "m6f64f2fda498": "添加个人账号", + "ma6229eda29c2": "没有个人账号。添加一个即可私下使用你自己的 Copilot 订阅。", + "mca24402563e9": "工作区共享账号", + "m81e613c508dc": "所有成员可见", + "m37d3acac0058": "登录 GitHub 以共享工作区账号", + "m748e1e7d0514": "使用 Token 添加工作区共享账号", + "m9ed034e74290": "为工作区添加", + "m15792a7c8fdf": "没有工作区共享账号。添加一个即可提供所有成员都能使用的 Copilot 账号。", + "m9aaf2001e996": "没有可用的工作区共享账号。请联系工作区管理员共享一个。", + "mf7004e38eb59": "与工作区中的所有人共享此模型服务商", + "m2ff8c705e102": "对工作区开放", + "mab7d145d79e5": "测试连接并刷新模型", + "m5234fbffc3e9": "移除模型服务商", + "m35877a8c182e": "自定义 AI 模型服务商", + "m6b813862d568": "使用你自己的 OpenAI、Anthropic、本地模型及其他 50 多种模型服务商的 API 密钥。个人模型服务商仅对你可见。", + "m55c7becc0df9": "我的个人模型服务商", + "m12149a0e62fb": "暂无个人模型服务商。添加你自己的 API 密钥供个人使用。", + "m73e4a838e4c2": "工作区共享的模型服务商", + "m450b43b4e4a1": "暂无工作区模型服务商。添加一个即可与所有成员共享 API 密钥。", + "m296b7ae87520": "暂无可用的工作区模型服务商。请联系工作区管理员共享一个。", + "m272a1179fcc5": "工作区默认设置", + "m72961734eed0": "仅管理员可用 — 你只能查看", + "m8ead970fda1c": "应用于此工作区中的新项目。每个项目都可以在各自的 Doable 选项卡中覆盖这些设置。", + "mac20a57bfde0": "隐藏", + "m02bbdcb834ae": "新项目的默认系统提示词", + "mb6928362a2cc": "(无 — 项目不会附带固定提示词)", + "mafef567095e2": "保存工作区默认设置", + "m4c23e9e18502": "个人 AI 覆盖设置", + "m8eb55745fa7e": "这些设置适用于你是工作区所有者的项目。它们会覆盖工作区默认设置,但优先级低于项目明确设置的选项。", + "mb0863c6bc9e4": "思考过程可见性", + "ma85fdf51c603": "个人系统提示词(可选)", + "m9fb002ae01d2": "(无 — 使用工作区默认设置)", + "m265d57a355b8": "保存个人覆盖设置", + "m6c9df66826e1": "工作区用量汇总", + "m63b86b7a429f": "未配置定价", + "m5c39123805ff": "提示词", + "m557fe004f344": "补全", + "m6352380a7c9f": "暂无用量记录。", + "m03db3a45c3c1": "暂无用量数据。", + "m66aeb8c46b2f": "Claude Sonnet 4", + "m9b816f4a6295": "GPT-4o", + "m4c43a229d244": "GPT-4o Mini", + "mcab28bc8feb2": "GPT-4.1", + "m7e1eb717e40b": "GPT-4.1 Mini", + "m2ea8e99cc4c2": "GPT-4.1 Nano", + "mdfc325305b0c": "o3-mini", + "m9056e3300ca8": "o4-mini", + "ma0089ee0749b": "Gemini 2.0 Flash", + "mc587c2601ccf": "视觉", + "m10d67f48de99": "工具调用", + "m7381afd23bb9": "上次健康检查延迟", + "ma424e33d9093": "已锁定", + "m4b9a22bfe3cc": "Copilot 模型", + "m8c31e6e72230": "本地", + "ma5ac4b64684f": "管理 AI 设置", + "m5a8d0b7bf5bc": "GitHub Copilot 账户", + "me04ed13e7f98": "连接带有 Copilot 订阅的 GitHub 账户,以访问 AI 模型。", + "m313ebbb894ad": "通过 OAuth 连接", + "m8717362cf4d4": "添加 Token", + "m3cc8c4614ff9": "标签(例如“工作账户”)", + "m71e3980d749e": "GitHub 个人访问 Token", + "m3d0d3f78acca": "添加账户", + "m19cd7039551d": "尚未连接 GitHub 账户。", + "m4a24319d30be": "连接带有 Copilot 订阅的 GitHub 账户,以使用 Copilot 模型。", + "m92340695899b": "已启用", + "mfc20838c106a": "取消默认设置", + "mae188faa0901": "设为默认", + "m5bcf311b19d8": "测试连接", + "mfd35618c1920": "移除账号", + "m371b1434a262": "两种配置均已保存。切换选项卡只会更改当前启用的配置,另一选项卡中的选择会保留。", + "m00aa6fbbbb45": "连接 GitHub 账号", + "m4c6e2e6be505": "使用服务器内置的 GitHub 身份验证。连接你自己的账号可获得更多控制权。", + "m0b0a0d2d7316": "未连接任何账号。", + "m14d8260ff981": "连接一个账号", + "m6f4f0e79bd3a": "添加模型服务商", + "m00d0efcd9a96": "尚未配置模型服务商。", + "mea779ba543fa": "添加你的第一个模型服务商", + "m802435241f0a": "正在加载模型...", + "m1274d7acbe2f": "[视觉]", + "m11b29cd62933": "[工具]", + "ma48f39155dbc": "输入自定义模型 ID...", + "mecaa1f1b910a": "返回模型列表", + "mb1bdf63d93c3": "自动(推荐)", + "m811e7c5206f3": "模型选择机制", + "mbda2e3e6c900": "强制策略", + "mf5cfe7d0fa62": "(访问控制选项卡)— 如果启用,所有人都必须使用指定模型,不提供例外。", + "mdd85a853b978": "个人覆盖设置", + "mfd1bdfb83444": "— 每位成员都可以选择自己的模型。仅对该成员生效,并覆盖工作区默认设置。", + "mb7c579774bdc": "工作区默认设置", + "md3705a239c8b": "— 未设置个人覆盖模型时,使用此设置作为后备选项。", + "m33f9cc7719c5": "只有上一级规则未设置时,才会使用编号更大的规则。", + "m80c9fa2d52f6": "我的个人覆盖设置", + "md944d0946c11": "仅为你自己覆盖下方的工作区默认设置,不会影响其他成员", + "m88f78ee1a74e": "强制策略已启用(请参阅“访问控制”选项卡)。所有成员的个人覆盖设置均已锁定。", + "mbc2701b02460": "主模型", + "m678335abff59": "建议模型", + "mf3f3f1ffb3df": "覆盖用于在每次 AI 响应后生成快捷建议按钮的模型。", + "m03390cbe8c91": "保存我的覆盖设置", + "mc138ea416a30": "工作区默认设置 — 应用于所有成员", + "m7a5e21ee7739": "主模型 — 所有工作区成员", + "m51332a856ef0": "供受邀加入此工作区的所有成员使用的代码生成、编辑和智能体任务默认模型", + "m824d0cc2933d": "这是用于聊天、代码生成和编辑的主要 AI 模型。它适用于你邀请加入此工作区的每位成员,而不是平台上的所有用户。如果某位成员设置了个人覆盖模型(见上方),则该成员的覆盖设置优先于此默认设置。", + "mcd2a216a8873": "建议模型 — 所有工作区成员", + "me5f651670aa6": "供你邀请加入此工作区的所有成员使用的轻量模型,用于生成建议按钮(相比主模型可节省成本)", + "m84717f285efb": "建议按钮是每次 AI 响应后显示的快捷操作按钮。此模型仅处理这些建议,在此场景中使用更轻量、成本更低的模型即可。与主模型一样,它适用于你邀请加入此工作区的每位成员,而不是平台上的所有用户。", + "mb227a038322a": "保存配置", + "mfe7f3371f597": "设置工作区级别的默认模型和模型服务商,用于新会话。", + "md933cadf6bcc": "默认(自动)", + "m0bce36498592": "GitHub Copilot 账号", + "m62a75a117242": "无(使用 Copilot)", + "m12e24a38709a": "保存默认设置", + "m3b41ba9c7cb8": "暂无数据", + "mec72420df5df": "请求数", + "mc51e455b41df": "Token 数", + "mbe7d2f314aa6": "暂无使用数据", + "m245625010045": "开始使用 AI 功能后,你的使用情况会显示在这里。", + "m8ff37f00b925": "今日 Token 数", + "me367b5bddcb7": "本月费用", + "m7740276a07c6": "每月请求数", + "m2263e21eea02": "平均响应时间", + "mc64fe09035ae": "已使用额度", + "m140e92e21244": "额度使用情况", + "m643677360223": "本月", + "m601068f46cf6": "按项目", + "mafed5886d257": "按模型", + "m9bf1562b3de9": "按模式", + "md4b1ea5708dd": "概览", + "mc2ec47508acd": "Copilot 订阅", + "ma0ff02ba4ff8": "自定义模型服务商", + "md17d2d78d76e": "模型", + "mdc80f077b5cd": "暂无平台范围的使用数据", + "m79667786321b": "平台范围视图,显示所有工作区和用户的使用情况。", + "mcd41bf0d3e9a": "Token 总数", + "mdfa5cc738da2": "总费用", + "m5639b9f1265e": "活跃用户", + "m41d11f62a9e1": "按 Token 数量排名的所有用户", + "m308eddf16a19": "暂无有使用数据的用户。", + "m897d0b58d207": "每行对应一个 GitHub Copilot 订阅。展开后可查看分配了该订阅的用户,以及每位用户调用的模型。", + "meb12564b0386": "未配置 Copilot 账户。", + "m797df3bce3a6": "自定义模型服务商(BYOK)", + "m3fdb4c30e9cf": "支持 OpenAI、Anthropic、Azure 等自定义模型服务商。展开后可查看用户及每位用户的模型使用情况。", + "md4dc49276a77": "未配置自定义模型服务商。", + "m5e6b09a1d017": "模型使用明细", + "mb94242e1a9d2": "暂无模型使用数据。", + "maed7a1237429": "次", + "md2104f7ad311": "使用情况明细 —", + "m0eba3d4ee43f": "所有者", + "m8c1603967eb0": "无所有者记录", + "me1d4e49fac0e": "无工作区", + "m5a4f4a60e7f2": "添加者", + "mb8d31e852725": "在", + "ma6423636974e": "风险:可能触发速率限制、滥用检测标记或订阅暂停。", + "m2d84b1ff3652": "GitHub 的条款规定,Copilot Individual 许可证仅限单人使用,许可证与单个 GitHub 账户绑定,不得共享。共享许可证可能导致 GitHub 限制或撤销该账户的 Copilot 访问权限。", + "mefc75a421422": "处理建议:", + "ma45dd9f0586a": "每位用户使用一个 Copilot 订阅,或将所有人迁移到 Copilot Business / Enterprise 方案,并按席位分配。建议将每位用户自己的 GitHub Copilot 账户添加到Doable,而不是重复使用同一个账户。", + "m4fc92a5a044b": "使用此", + "ma8fa7fd60893": "订阅的用户", + "m9372c470eead": "模型", + "m681bf81aba87": "使用者", + "m7f1e323b6272": "正常", + "ma8494c12f224": "性能下降", + "mb86d11af7918": "不可用", + "m3a386d2bb69a": "OC", + "m8ee4a41352fe": "验证连接", + "m30840caab959": "测试与以下对象的连接", + "m4ef6bbb83197": "以验证配置。", + "mc02977b07ec9": "测试连接", + "m3d0032b7b274": "正在测试连接...", + "m856dd8c8677b": "连接成功", + "m7839136b0629": "延迟:", + "m0c56a4742a5d": "已发现", + "m596c52f1eb65": "连接失败", + "m27c2ccd962c2": "未知错误", + "m6a6222577c22": "再次测试", + "m9dba8266214f": "没有可用模型。保存模型服务商时不会选择任何模型。", + "mc73dec76ac2a": "个模型已选择", + "md1ec69e64b96": "全选", + "m5cd261bcc680": "取消全选", + "m41ed52921661": "网关", + "m7a1de35a8e55": "搜索模型服务商...", + "m277b696272a8": "自定义 OpenAI 兼容接口", + "m97eb364e9b60": "粘贴任意 /v1 API 基础地址和密钥,支持 vLLM、LM Studio、LiteLLM、代理等……", + "m6f07c7004956": "没有匹配的模型服务商。", + "m8d6563bb5963": "我的模型服务商", + "m242f0189b5f6": "Azure 资源名称", + "m1a6d8517d24e": "my-resource", + "m734fd77b3610": "URL:", + "m1b8a163d4269": "默认端口:", + "m91d7321fb450": "。请确保服务器正在运行。", + "m960a4c077af3": "API 版本", + "m365c8d2794f1": "2024-02-15-preview", + "m100903efdd81": "输入 API 密钥", + "m02d7af705ed7": "获取 API 密钥", + "m267fe5203a04": "无需 API 密钥。此模型服务商在你的本机运行。", + "md38cf7963f59": "粘贴任意 /v1 API 基础地址和密钥(vLLM、LM Studio、LiteLLM、代理等)", + "m2e7ec7c1f35a": "添加为:", + "m8abdb6e5e6d0": "仅自己可见", + "m4b09fb4ff780": "在向导开始时选择", + "m6471564ca226": "与所有工作区成员共享", + "ma70838995179": "本次运行已锁定", + "m5f78463b1356": "正在添加为个人配置,仅自己可见。", + "m05c39c4c5b13": "选择模型", + "m35ba3f52321d": "保存模型服务商", + "ma3a4cc0143e0": "每日使用情况", + "meaad100ab411": "此时间段暂无使用数据", + "ma251c18205f1": "已缓存", + "mc26ddab833c1": "Token 用量明细", + "m0f1ce9b3ff09": "暂无 Token 数据", + "mf9ef8f0b95bd": "每小时活动情况", + "m2498446ac8c1": "我的使用情况", + "m59bb73deeeaa": "工作区使用情况", + "mc78ffe195710": "平台", + "mbed75b0c1b2f": "跟踪 AI 使用情况、Token 消耗量和费用。", + "m3611335b3ccf": "使用工作区默认配置", + "m47079ed2516e": "这只会覆盖该用户的工作区默认配置。", + "m2736b56903dd": "两种配置都会保留。所选标签页中的配置将用于该用户。", + "m4969880d8a37": "为单个工作区成员分配 AI 设置。你可以为每位用户配置特定的 Copilot 账户或自定义模型服务商,也可以使用", + "m1c208a8418be": "“复制我的设置”", + "m25e2b4ef6040": ",为选中的用户提供与你相同的配置。未设置自定义分配的用户将使用工作区默认配置。", + "m260c635dcf53": "强制执行策略已启用。只有关闭强制执行后,这些按用户分配的配置才会生效(请参阅“访问控制”标签页)。", + "m8350bb048b6c": "将我的设置复制到选中用户", + "mcea4d2e010b8": "清除选择", + "m14736a2eb9f4": "角色", + "m2ec14428b5e2": "AI 配置", + "mff8059dc6752": "操作", + "ma6ff9b8bd5ea": "编辑此用户的 AI 设置", + "m5db73069088d": "重置为工作区默认配置", + "madb960c9b9a6": "未找到工作区成员。", + "m6443cc3d0272": "暂无工作区使用数据", + "m37e751d178cb": "请求总数", + "md699c569f9d4": "Token 消耗最多的用户", + "mf6e82c3f136a": "暂无使用数据。", + "m872f6fd896c2": "成员按模型的使用情况", + "m14372d93e069": "暂无成员使用数据。", + "m61e1ac1d02d4": "Copilot 账户用量", + "m7c9a8dfd7839": "模型服务商分布", + "m954730bd83e4": "暂无模型服务商用量数据。", + "m35261535449d": "提示词:", + "m457f4957af84": "输出:", + "m3c59f26d9abb": "思考:", + "m8af31cd69803": "使用的模型", + "m15b876237e84": "总费用", + "m8edcc26c0f6c": "个模型", + "m751731b81544": "暂无额度信息。订阅方案即可开始使用。", + "md404dbadbc77": "每日额度重置:", + "mf24795f575e0": "无限额度", + "mbe379a30f1aa": "额度", + "m6e69b59ed34d": "按年", + "m9e1006a43da5": "最受欢迎", + "mfe3c2c8a9abb": "计费 $", + "m56f9c1ca9d9a": "永久免费", + "m5d85632008c5": "当前方案", + "ma78948998b85": "永久免费", + "mf1d05348723b": "结账 URL 不可用,请重试。", + "m9ff8cfaf7d94": "网络错误。请重试。", + "medf8ec0247bd": "门户 URL 不可用。请重试。", + "m066030248f7d": "充值 URL 不可用。请重试。", + "m864c855e3d64": "有人", + "mde1c270a252c": "正在与 AI 聊天…", + "m7a3a94a8ca22": "中止", + "mc64a468586ba": "正在向 AI 输入", + "mf9cfdd08b6e9": "AI 消息队列", + "me6c70e380837": "你的消息为 #", + "m8801e11457f6": "团队聊天", + "mf6fc84c9f21c": "在线", + "m15bcfd103b10": "正在输入", + "m664c54e22aad": "打开团队聊天", + "m31fbe7ddde26": "正在查看预览", + "m4094848f0988": "在编辑器中", + "mf42e0f66017d": "暂无消息", + "m9194a89a428a": "与团队开始对话", + "mfa51fd49abf6": "正在", + "mba78973ddcf9": "正在", + "m6860a5531303": "输入中…", + "m2b9d1b8090b8": "给团队发消息…", + "mc01ee3929f11": "正在编辑此元素", + "m31e8fa9e4bf8": "添加项目到", + "m62b78c2b59b4": "选择要移入此文件夹的项目。你可以随时通过各项目的菜单将它们移出。", + "m6970a1ced73d": "正在加载项目…", + "m5181f53d5ac4": "没有其他可添加的项目。请改为新建一个项目。", + "mc6de6f45c827": "正在添加…", + "m592438d2f7e5": "客户端单页应用", + "m6c54b4820100": "React 全栈应用", + "m15007f45f5c4": "项目名称为必填项", + "mbe6da843fc7e": "Slug 至少需要 3 个字符", + "m23fc9a29fd37": "创建新项目", + "m7b33683eca2b": "从零开始、描述你想要的内容,或选择一个模板。", + "m2c3d371cbfd3": "空白", + "m7d4d9a991b60": "从提示词创建", + "m0575f29df888": "模板", + "med371e413e11": "我的精彩项目", + "m565a9f0e1060": "my-awesome-project", + "m0059798b7f70": "(可选)", + "m8d1023e94c37": "简要描述…", + "med3198efc923": "你想构建什么?", + "m907bf8ea9357": "详细描述你的应用……", + "m329a8ef36e36": "选择模板", + "m3800ee7191b1": "正在加载模板…", + "mfa67e4d0dae5": "创建项目", + "mb712cf8eee5e": "已用时间", + "mc48d5bcd1d2f": "大型仓库可能需要一些时间", + "m59224914200e": "加载仓库失败", + "m891e13c74feb": "请选择仓库", + "m2bfff12a9904": "导入现有仓库,继续在Doable中开发。", + "m15c7b7d5a4a5": "连接你的 GitHub 账号", + "m09ff61a08ee2": "授权Doable访问你的仓库。", + "m1e64930a3a1a": "断开此 GitHub 账号并连接其他账号", + "mcb2b6a572a85": "正在断开连接…", + "mfedce010cffc": "切换账号", + "m303a84e178ea": "搜索仓库...", + "m48db4a3d7dc5": "正在加载仓库...", + "m48f8556088e8": "没有与搜索匹配的仓库", + "m94a1181cd13e": "未找到仓库", + "mc63eb6720c6e": "私有", + "m591935b15b1c": "公开", + "m2cff9baabf56": "导入", + "mf2de45302208": "切换星标", + "m2c1d2c6677db": "没有已加星标的项目", + "m637d919d4fb1": "没有文件夹", + "md729947f3c97": "创建项目", + "m6f1a5cfbc6fd": "选择一个模板,或从零开始。", + "mdef70944c9bb": "正在创建...", + "m6a0418f673c8": "使用模板", + "mbefbc5e8e1c4": "代码与版本控制", + "m107eab2a042f": "团队消息", + "m1a8e1a99c191": "邮件与沟通", + "m879ebfba113e": "文件存储", + "m4110a45c745c": "笔记与 Wiki", + "m4314193ddb26": "问题跟踪", + "m89cc44521ce7": "设计文件", + "m329b3c4622ce": "项目管理", + "m195cbdbccce0": "设置你的工作区", + "mb412190cfd38": "每个工作区都需要一个环境——它决定了你的 AI 助手了解什么、能做什么。", + "ma35abcd6dac9": "图标", + "ma0d05f8dd473": "我的环境", + "m6b73191a0a4b": "颜色", + "m59e693cdbc2c": "跳过设置", + "mdb3472beb3c9": "创建并继续", + "m0ff84c22d1b0": "添加知识库", + "m3b3485c34632": "告诉你的 AI 需要了解你项目的哪些信息。之后随时可以补充。", + "m0242da1500b9": "这些指令将指导你的 AI 助手处理此工作区中的所有项目。", + "m28d03596d24e": "跳过", + "m684b45158391": "保存并继续", + "m3dbaf78b6b8a": "连接工具", + "m781b23fb1692": "连接外部工具,为你的工作流提速。你可以随时在设置中配置这些工具。", + "m70afa66df1c8": "随时可以在工作区设置中连接集成。", + "mf27331bdd8a0": "一切就绪!", + "m80d8ebc8fa6c": "已准备就绪。开始创建项目,让 AI 帮你构建。", + "mb6041d9436bb": "进入工作区", + "md5cd65235324": "选择工作区", + "me549fa0ae7a3": "从环境开始", + "mc0bed36b3120": "正在加载环境…", + "m832d1412f3d0": "暂无可用环境。请在编辑器中创建一个。", + "mb06eaa3d0745": "无 — 从头开始", + "m39904ffb0bec": "从发现页移除此项目?现有副本不受影响。", + "m872f87b9007d": "将你的项目列入社区动态。其他用户可以浏览,并在自己的工作区中创建副本。", + "m58977daa09e5": "清晰、可搜索的标题", + "mdc56cf81b49b": "这个项目是做什么的?面向谁?", + "m44fbb35ee723": "分类(可选)", + "mbb2347c7cdf1": "或输入一个……", + "m472690e4d34f": "仪表盘、营销、电子商务……", + "m64338bbdf415": "精选(管理员)", + "m589eb982f160": "将此项目展示在发现页顶部。", + "m43b968323075": "取消分享", + "md35ab3ec829a": "分享中……", + "m81714949f5bf": "实时构建", + "m50d3a1303616": "暂无错误。", + "m2d711642b726": "x", + "mdc676b428599": "已解决", + "meb00967e8d99": "日志 (", + "m93bc5d02dc2a": "收起", + "md78de925a878": "展开", + "mf164850854d0": "暂无日志输出。", + "m8537fdb6a825": "正在准备文件", + "m5b1ba0587995": "正在安装依赖包", + "m3d113ab13bc5": "正在启动开发服务器", + "mdaada33465ce": "正在编译代码", + "m55b0de18996c": "正在解析路由", + "m6112b244a90e": "正在打包资源", + "m7351d83eae60": "从你的设备上传文件", + "m0dfcc29c9d86": "附加项目文件", + "mf6a74a2716d9": "停止生成", + "m93a26b1eaff9": "发送消息", + "mc9be68719e1d": "搜索项目文件...", + "m949d59b7ee8d": "未找到文件", + "m49a0053f3b0d": "复制代码", + "m455db8f88813": "正在准备工作区…", + "ma02f1cea3c1d": "正在思考…", + "m50e721e49c01": "w", + "m12e653369e8c": "已撤销更改", + "m8bae6a75b72c": "正在撤销...", + "mba06242948bf": "撤销更改", + "ma1d26b85bf20": "取消任务", + "m3d200cad4544": "切换活动动态", + "m913a378e70f6": "正在加载更早的消息…", + "mf17671d83db0": "加载更早的消息", + "mb372cfaaf9ec": "我刚连接上 — 继续", + "m22a597e126e9": "构建一个 SaaS 落地页", + "md55dabb30f0e": "创建一个看板任务面板", + "mf9a6a1d642f6": "做一个食谱分享应用", + "m257cb1465b19": "修复登录缺陷", + "mfc4ec189139e": "添加深色模式支持", + "m3820cbb15bba": "解释这个代码库", + "m6bdb9bf5e7a8": "开始用 AI 构建", + "m8796f7c34878": "描述你想构建的内容,AI 会为你生成代码、文件和预览。", + "mdcba690a149c": "已就绪 — 现在可以重试", + "m0fd09defcac8": "自动重试倒计时", + "m5148c3e20576": "立即重试", + "m2e0b4a7d6c73": "连接超时", + "m06946279b9c4": "已达到速率限制", + "m93821eb7ce8c": "身份验证失败", + "m5bbaec596a83": "构建失败", + "m2a33d984de88": "网络错误", + "m0ce1c98951b1": "AI 模型不可用", + "m28c1cf45c572": "MCP UI 资源不包含 HTML 内容。", + "mc370f97f193f": "(由 AI 决定)", + "m86e0163433b6": "或输入你自己的…", + "m9ffeb4317918": "输入你的答案…", + "m96fa9ca885cc": "跳过 — 交给 AI 决定", + "m6908408b5441": "答案已提交", + "mea08e5983f81": "在开始之前…", + "m5fc4280582ee": "全部跳过", + "m72d18ad29fe5": "跳过此问题", + "m8f66990f74c5": "AI 决定", + "mc13839cedce5": "或输入自定义答案…", + "m8666026a31fa": "输入你的答案…", + "m3fee95da5ab6": "简单", + "m5c42afc7a230": "中等", + "mcd75063b613d": "复杂", + "me45a4474b464": "添加步骤", + "m102849138c54": "开始构建", + "m1e7f34ee8f77": "细化", + "m87c5912f2cef": "构建中", + "m858e4ba7a29f": "暂停", + "m9af278eb4ac2": "跳过此步骤", + "m41ffd8b76afc": "详情", + "me1a1abcfc47a": "文件:", + "md4c76f463480": "移除步骤", + "m819c15f77c30": "补全:", + "mb23a6a8439c0": "未知", + "mebe7c49b473c": "工具调用:", + "ma6a37fc0b4a0": "模型服务商:本地(无费用)", + "m5ccdcad4f2b9": "Token 数量为估算值(模型服务商未上报用量)", + "m2f3f0204c9f3": "网络错误——请重试。", + "m93abcb2b4187": "只读模式。", + "m60dbd666da3f": "升级后可编辑", + "m1e6652706391": "选择文件以查看其代码", + "m8adc599d8546": "使用文件浏览器,或与 AI 对话生成文件", + "m9685428d79d9": "合并冲突", + "m625d8793292d": "你的本地更改与以下内容存在冲突", + "mcd0d99892495": "远程仓库", + "ma441beefe3cf": "。请选择解决方式。", + "mb0c6c3afc17f": "存在冲突的文件(", + "mfbba5c3b9950": "保留我的更改", + "mc585647746dd": "放弃远程更改,保留本地版本", + "ma01851633d89": "使用远程更改", + "m99d422032993": "放弃本地更改,使用 GitHub 版本", + "mcfca91950882": "取消合并", + "m5b1014ae15ea": "正在解决冲突...", + "m37a5d6485e10": "展开侧边栏", + "m23db6247bb3d": "连接 GitHub", + "m9b46af6166cc": "将此项目推送到 GitHub 仓库。", + "maf7620d9f184": "授权 Doable 访问你的仓库,以便推送和拉取代码。", + "m5fa0c70119e4": "自定义名称和设置", + "m8726643dc521": "仓库名称", + "md18fa4795d7e": "简要描述", + "mb9b01a108d34": "将仓库设为公开", + "m363fadad28c7": "创建并连接", + "mb7a3cd401b23": "正在导入...", + "mb60ed2e431d8": "导入仓库", + "m68928d6dcc94": "恢复版本", + "m1b5b909b9f38": "回滚到之前的状态", + "mb1d6b91b67c2": "于", + "m9d91673c9ae4": "非破坏性恢复", + "m221720161bb1": "将从 v 创建新版本", + "m1989a6d77ea8": "。你当前的工作及所有历史版本仍可访问。", + "mfa31c224c001": "正在恢复...", + "md12014c8ba79": "恢复到 v", + "m8ea29726a819": "指标不可用:", + "m1829677248c3": "正在加载运行环境指标…", + "m707165e9984b": "轮询", + "mb80012851cf0": "已修改", + "m1185f37d33b0": "已删除", + "m1db0d01fa6e5": "上一个文件", + "m96a7485b66f1": "下一个文件", + "mfe86c67a9260": "统一视图", + "mad6a950b4620": "统一", + "m493481bac50f": "并排视图", + "m32afaa784333": "拆分", + "me6c6415f27e4": "正在加载差异…", + "mdb183e7f0849": "暂无差异数据", + "mc0c92fe4b0ba": "这些版本之间没有更改", + "m98f257430806": "更改的文件(", + "mbcd433417df1": "选择文件以查看更改", + "m6b02e0d363a4": "新增", + "mb48ff39c2e0f": "删除", + "me8ce5dcaf408": "修改", + "m77752c14a10d": "之前 (", + "md3986704d922": "之后 (", + "m051ea272009f": "(未保存)", + "m6a44a6c83d3e": "删除 / 重置", + "m6bb4d95c616d": "开始撰写...", + "m70ea1983c983": "核心", + "m6959b4159575": "会话", + "mcd74053c5481": "架构", + "m279b44d2ab4b": "智能体", + "m494ca78f7374": "自定义", + "m44dedd0f97fe": "新建文件", + "m63a3712feb5e": "占预算百分比", + "m51abd534e168": "空 — 点击编辑", + "m14aae1602506": "运行中…", + "md67e2e944994": "已更改", + "m5d347fd948b6": "命令", + "m9bf5a24e4aa7": "操作", + "mb72f1b605b36": "实时动态", + "m0dca88f7eda1": "关闭动态流", + "m6a5e118255c9": "等待 AI 开始工作…", + "m4329f638ead4": "AI 开始工作时,动态会显示在这里。", + "me22ce64b63f8": "流量概览", + "m20b04a05df9d": "暂无流量数据。", + "m68f7d7fbb52d": "访客", + "m337a271983f1": "页面浏览量", + "m74883614c4c7": "次浏览", + "mad0526d8e5fd": "内置分析", + "m247610f4dedd": "实时", + "mad4899df2d12": "关闭分析", + "m3445e2d5305e": "为此项目启用分析", + "m2da367cb7562": "跟踪访客、页面浏览量和互动情况——注重隐私,无需 Cookie 横幅。", + "m984af0dbfa87": "分析已禁用", + "mc9289da74d6c": "启用分析后,可跟踪访客数、页面浏览量、会话时长、流量来源、设备分布等。所有数据均以注重隐私的方式收集——无需 Cookie 或同意横幅。", + "m0e6e1684b7c3": "加载分析数据失败", + "me2e18a767a2b": "暂无数据", + "m8ee1be0e8129": "已发布网站有访客后,分析数据将显示在这里。请确保项目已发布且可访问。", + "m7549533568ca": "总访客数", + "mf15b55389725": "平均会话时长", + "m89cf5817dbd4": "跳出率", + "mbff828f89976": "浏览器分布", + "mffacb99d0209": "操作系统", + "ma02077a984ce": "流量来源", + "meb742ebd27d8": "暂无引荐来源数据。", + "m7721e29d6e90": "设备分布", + "m5bb8965c8903": "暂无设备数据。", + "mc8235b5120b4": "暂无数据。", + "m278b8c933942": "实时", + "m2b3ff58fb8af": "活跃访客", + "m118443b1d9ca": "当前", + "m75fe1f295a02": "当前页面:", + "mc784754ddde6": "热门页面", + "ma861c3307af4": "暂无页面数据。", + "mdfffe52cc101": "独立访客", + "m5ee9c656643f": "平均时长", + "mb40edf4cb8e7": "连接 Supabase", + "m4c26a7b1fa53": "输入你的 Supabase 项目凭据以启用后端服务。", + "m69adfd51438c": "Supabase 项目 URL", + "maa31989db88a": "匿名 / 公开密钥", + "m532b9fc88b66": "eyJhbGciOiJIUzI1NiIs...", + "m8db5971dc587": "服务角色密钥", + "m7e32a729b122": "密钥", + "m04a6bbf1d545": "连接成功!", + "mcdfc82dc9257": "连接失败。请检查你的凭据。", + "ma2f29836cda5": "保存并连接", + "m389ab0c86a00": "已连接到 Supabase", + "m0303e1824670": "未连接", + "macfc5be785a9": "断开连接", + "m32520e2069af": "连接 Supabase", + "mfa7fe67124e9": "数据库", + "m66880d2d8216": "身份验证", + "ma69c4dece144": "存储", + "m127c16f74a24": "边缘函数", + "mcd0c018cfa88": "由 Supabase 提供支持", + "m97757652c0e5": "连接到 Supabase 即可查看数据库表。", + "me3fe2a3fe52c": "表", + "md98a034f5cb8": "表", + "mbc51e9e65d79": "行", + "m3fdc9a587693": "列", + "mfa1d2db62d4d": "空值", + "m92022c2f45b6": "主键", + "mfcab7fcc2b4c": "主键", + "mf91711645937": "是", + "m23794d91c53a": "否", + "m9a4f1370f2b7": "SQL 查询", + "m1a0d7c23a18e": "SELECT * FROM users LIMIT 10;", + "m650da1678ad7": "连接 Supabase 以管理身份验证。", + "m0ca3aa44a8c1": "用户总数", + "m333e0a1e2781": "G", + "ma7770c6daaa4": "GH", + "m5342e09f2729": "启用", + "mc175fbea7096": "最近注册", + "m1eb20b09825a": "连接 Supabase 以管理文件存储。", + "m2f89b69f7a4c": "存储用量", + "md9262e7fb868": "公开", + "m3abde3818904": "个文件 -", + "m7bb6fd2091ef": "将文件拖放到此处,或点击上传", + "mf5fea30a34e1": "连接 Supabase 以管理边缘函数。", + "mac7c949f1211": "未激活", + "me4640667fae5": "- 上次调用", + "mb608eeb53fcc": "新建函数", + "m8ac767353080": "只读", + "m14d6d2da837b": "复制文件内容", + "m9de4149fb971": "下载文件", + "m3dc96e8106e4": "关闭代码面板", + "mc3386867cbb1": "搜索代码", + "m068be1bc6ebc": "在左侧文件树中浏览以打开文件", + "ma76f7d471f87": "选择父级", + "m77c87ed7c0af": "选择元素以进行编辑", + "m8e685d5409b3": "按住", + "me2ee2909fe27": "Ctrl", + "m633e1dd1d4d6": "以选择多个元素", + "m1ce187c61e47": "开始选择", + "m608252e9ddb1": "在预览中点击某个元素…", + "ma710c2b90913": "未保存的更改", + "meb1a70e39274": "放弃", + "m1f7d6ab50546": "将更改发送给 AI,以获得更智能的代码更新", + "md8387fae128c": "AI 保存", + "md23b5dc62153": "新建文件", + "mc75ba8074400": "新建文件夹", + "m04470fc07c26": "搜索文件...", + "m7226287c91cd": "没有匹配搜索条件的文件", + "ma3429cba554f": "暂无文件。开始对话以生成代码。", + "m0e0269180969": "复制路径", + "m3cdcc3a85a71": "创建新文件", + "m983dbe585e18": "文件路径(例如 src/components/Button.tsx)", + "mb6b7279516a1": "创建新文件夹", + "m7a2ed3474120": "文件夹路径(例如 src/components)", + "me1e5fe2043bd": "删除文件", + "m7829a4b6e0b3": "确定要删除吗:", + "m2eba52c01705": "版本历史", + "med161bc0a0be": "安全扫描器", + "m8777cc91b15b": "扫描项目中的依赖漏洞、硬编码密钥、代码质量问题和 HTTPS 配置。", + "m2bb57667526c": "运行安全扫描", + "mb764be909067": "你的项目安全评分", + "m21f1595b614f": "修复", + "m87477e2696e7": "移至 .env", + "m4457f2d1aa4f": "严重", + "mb43e72eed048": "高", + "m7c48dd672a68": "中", + "m5fbdda1b8c72": "低", + "mbca2caf53068": "正在扫描依赖项...", + "m41d7f825db92": "正在检查密钥...", + "m52cc629e49de": "正在分析代码质量...", + "mb0d4eed2228f": "正在验证 HTTPS 配置...", + "mbd35a52d0ac8": "扫描完成", + "m2e41b118eb20": "依赖项", + "ma234c42226b5": "密钥检测", + "m0008c1a1b7a5": "代码质量", + "mccf1c9c05da6": "HTTPS / SSL", + "ma83820eba2a5": "扫描中...", + "m68ac7da5dfff": "运行扫描", + "mcf47fe8237c0": "扫描结果", + "m10153f84a1c8": "漏洞", + "m1b43f94acafe": "检测到密钥", + "m3e1ba5ec342d": "代码质量问题", + "mde8ae7761662": "全部通过!", + "mf072d213cbba": "项目中未发现安全问题。", + "mfa5d797742e5": "上次扫描:", + "m298d6c7549e4": "持续时间:", + "m865c8a6db23e": "已扫描文件", + "m442aded87a55": "性能", + "m41d00ea2b130": "核心 Web 指标", + "m890d34fffcde": "目标:", + "m59aec41109e1": "其他指标", + "mc13d409105f9": "打包分析", + "m515e6ac17ff5": "打包总体积", + "m0917e7be3804": "JS", + "mb581e46042cb": "CSS", + "m07239dbd2a1a": "HTML", + "mbe7e2f201293": "图片", + "m3680fcad01f4": "字体", + "mf97e9da0e3b8": "其他", + "m91ebac9663bc": "最大的文件", + "m9454dbf1e4d0": "Tree-shaking 优化机会", + "ma2de31cf19d4": "vendor 包中包含来自大型库的未使用导出。建议只导入你需要的具体模块(例如", + "md942f6488657": "import", + "mfed4caac2ea2": "debounce", + "mfb30b806509e": "from 'lodash/debounce'", + "mb4f06654cac0": "而不是导入整个库)。", + "m0738ee00b61b": "优化建议", + "m6f61f46c23a6": "影响", + "mc4c09704090e": "用 AI 修复", + "m317e174357cf": "基于实时预览测量(按传输大小计算)。", + "m4977a7e5bb36": "运行中...", + "m954b8f823bf0": "运行审计", + "m892c84891df2": "审计失败", + "m30ea74354efc": "性能审计", + "mb78a53daa655": "分析页面速度、传输大小和打包体积明细,并获取可执行的优化建议以提升性能。", + "mc02130fa90ee": "正在加载预览...", + "mcefd31dfd0ad": "AI 生成中...", + "m60c87cdbd995": "预览服务器可能未运行。", + "m36d3e7aaf364": "项目预览", + "mfabb1a3a78a9": "NotebookLM 结果", + "me392985826cd": "← 返回应用", + "m6dad344b78d0": "notebooklm-result", + "md61b13d11a68": "实时预览", + "m82e3c510c418": "AI 生成代码时,应用预览将在此处显示。", + "me5c083cf41ff": "暂无预览", + "m2490e88747ec": "禁用可视化编辑", + "m42b054ffc097": "启用可视化编辑", + "m9046da16aea9": "页面", + "maab31cde23ba": "折叠侧边栏", + "m7f2f1a589887": "未选择项目。", + "m07be26265b47": "未选择工作区。", + "m37c5b8938bc5": "删除文件?", + "m7f5d26a5b27f": "?此操作无法撤销。", + "m179fed85ec50": "搜索文件", + "mbb38e88c5b60": "没有文件匹配“", + "m69846e7cc7e9": "AI 在每次交互前读取的上下文文件。点击编辑。", + "m9339d855212e": "项目知识库", + "m6209368d2532": "新页面名称", + "ma1e47d8a3aa5": "通过 AI 创建", + "ma93d346c05cc": "添加新页面", + "m55dbb3629822": "搜索页面...", + "md1c559bbc81c": "没有页面匹配你的搜索。", + "mf005c577d468": "未检测到页面。将文件添加到 src/pages/ 即可在此处看到。", + "m3660315a9af3": "页面", + "mb96da48a63e7": "已检测", + "me3cc57e193d6": "当前", + "mb4836106f489": "移除书签", + "mc36b1558cfd7": "为此版本添加书签", + "md95082a2ee57": "作者", + "mdd167905de0d": "版本", + "ma76e13b98392": "恢复", + "m0e5d6873018e": "查看差异", + "ma61b1b4716d0": "正在加载版本...", + "mff76e0371906": "暂无版本", + "mbc861f24ac2a": "AI 进行更改时会自动创建版本。", + "m3e8a959e4e2c": "暂无已添加书签的版本", + "m4d34e4f09d03": "点击任意版本上的书签图标即可保存。", + "m30aa5d0757f1": "加载更早的版本", + "mc17c33c93bf4": "剩余)", + "m7d4f4103009d": "线上公开部署", + "m453bcff7ec68": "临时预览链接", + "mc38f4bf16403": "部署历史", + "me83dea6df0d2": "暂无部署", + "m6a0d63d84893": "这可能需要最多 60 秒。", + "mb20c49843a17": "构建输出", + "m84a0f15dccca": "你的项目现已上线。", + "mf9fd8a28cf11": "构建:", + "m18f6adeb80e8": "部署:", + "m18e872be2359": "总计:", + "m05081f14d114": "部署失败", + "m9e8197ce9e5f": "显示侧边栏", + "md1db29ebc76d": "隐藏侧边栏", + "m5da22fe4f7ac": "已同步", + "ma8f94e9869fa": "领先", + "ma2e92848319a": "落后", + "mec67106c49d8": "已分叉", + "m04dfac3671b4": "未连接", + "m4027e5b24418": "连接 GitHub", + "m84bf6b1184cb": "正在推送...", + "m9756b83cda4b": "正在拉取...", + "m0d6e4079e367": "main", + "md0b4034c6ca7": "领先", + "mb1b886ce5f57": "落后", + "m02961f8382e4": "远程仓库包含本地项目中没有的更改。请先拉取,或强制推送以覆盖。", + "mec1ed0e945e5": "提交信息...", + "m731ce7ed8089": "推送", + "m8de55a43460c": "强制推送(覆盖远程)", + "mcfda1755ffb1": "强制", + "m4c5aa5fbf47d": "推送到 GitHub", + "mc551ab2a742b": "从 GitHub 拉取", + "m93e20626bf9c": "1px", + "m747614001f01": "2px", + "m356601538da0": "4px", + "mb8b311b0f273": "实线", + "m2fe14adec27a": "虚线", + "mbe454f3c8084": "点线", + "m3b4bdff339e9": "边框", + "m3019947b6daf": "宽度", + "m140bedbf9c3f": "无", + "m7e744141b40e": "样式", + "m6fe0661c82d1": "圆角", + "m33a3c91b44d2": "0px", + "m98b24440597d": "CSS 值", + "m4a73db4ba8bf": "#000000 或颜色名称", + "m9b78ab17c13f": "选择颜色", + "m31e392d1c037": "应用", + "m88c45d9e526c": "颜色", + "m4a69d0166046": "文字颜色", + "mea2b8a878841": "背景", + "m95110d74c4c0": "行", + "me4bb9f1ece9a": "起始", + "md946067427e9": "居中", + "mf4db1e48476f": "末端", + "ma33fbcf83f7b": "拉伸", + "ma511909161e1": "布局", + "m88150308f8bc": "显示:", + "m0b2782bb65ba": "布局控件适用于 flex 和 grid 元素。", + "m9c8a9579abe5": "方向", + "mb1b1b4e5e8d7": "对齐", + "mcb129306bc6f": "间距", + "m1af851907331": "尺寸", + "m929260ad9b9e": "自动", + "mbfe2eca40179": "高度", + "md5cdfcf7ff75": "顶部", + "m883361d5d682": "右", + "m479ad21ac909": "下", + "m58eb9032e3bb": "左", + "m62a822a58309": "间距", + "mca0397ca2f65": "收起输入框", + "m0393049f5cd5": "展开输入框", + "m2bf63d817630": "外边距", + "mee0d7af0bffd": "内边距", + "m71988c4d8e08": "文本", + "m4ec48e7f45fa": "元素文本内容...", + "ma159eaf43ba2": "xs", + "m5af308bec132": "sm", + "mcae662172fd4": "base", + "m0e6ba33f8bc8": "lg", + "m525a6f3c9ded": "xl", + "m996dfe781005": "2xl", + "m71f6ca0ae9aa": "3xl", + "m0aa558305207": "4xl", + "m244d4ab1edf8": "5xl", + "m6b27c18efbac": "选择字重", + "mb455784ab530": "常规", + "m8e588cd18774": "中等", + "md442655c0643": "半粗体", + "m94fee62e68e2": "粗体", + "ma7248eeb45eb": "正常", + "m9bf37cb58a69": "斜体", + "meac0f9c3da59": "左对齐", + "me55c76591fa2": "居中对齐", + "m8f4f8efcbee1": "右对齐", + "mf3bd3473d7d8": "两端对齐", + "mcab94aba84f9": "字体排版", + "m81d27ef6d503": "字重", + "mb502cf4b47f7": "隐藏已解决", + "m64d0005c6bd7": "显示已解决", + "m862c2324686b": "取消(Esc)", + "mc4d891e9a87e": "添加评论", + "m4be7d5adc649": "点击放置", + "m44f5e3fbec57": "评论", + "md6efe4c67c0c": "重新打开评论", + "m4ea5c8c9b647": "解决评论", + "me43811a17028": "删除评论", + "m5782b18687e6": "回复", + "mb994278263e7": "回复", + "m311c9f3dd66b": "删除回复", + "m772fa553df6a": "回复…", + "m625aafc3a9bd": "发送回复", + "m4dff58ab6888": "发表评论…", + "mebca7fbdafd1": "请先保存", + "m9cf4ca8afcc9": "发送提示词", + "m9913b7a79909": "选择父元素", + "ma46e92d02960": "查看源代码", + "m3cd9611289bc": "删除元素", + "mb53cf804ed19": "所有环境均可用的条目", + "m5f3c4f8580d3": "条目", + "mcd57f659de82": "工作区级条目会自动包含在所有项目中,除非被项目环境覆盖。", + "m5ee3c4ff61db": "无 — 请在工作区设置中添加工作区知识库", + "me0091fce46a5": "编辑名称、图标和颜色", + "m0d50fb123a7d": "暂无知识库文件", + "m10886554da51": "设为默认", + "m5779f32fab00": "克隆", + "m3664895579f0": "导出", + "mf2e6c2fe7c8f": "确定?", + "m85a39ab345d6": "是", + "m1ea442a134b2": "否", + "meaab52640429": "新建环境", + "m16ca11f9491f": "全栈环境,内置 React、Tailwind 和 Supabase 工具", + "mc7b7e03505b2": "编辑环境", + "m219febf3ba15": "自定义指令", + "m5bcdb2bd8bfb": "无自定义指令", + "m7827793844ed": "coding-standards.md", + "m2b90b67c3121": "# 指令\\n\\n始终...", + "m984c4c78759c": "停靠到侧边栏", + "m9a43f5ec3be7": "以弹窗打开", + "mba392022c5f1": "未加载环境", + "m02db55bac5e3": "变量", + "m0678e31f762b": "点击编辑", + "mc6c094bc0054": "空", + "m2c04b392f1fc": "尚未配置", + "m557832355c85": "未选择", + "maa4836eb52a0": "在此工作区中。请在", + "maae3f876be76": "先打开面板。", + "m2c83c00f0e83": "添加文件", + "mf83c845cc1ea": "# 知识库\n\n添加关于你的项目的上下文...", + "m9af696f3aa74": "暂无知识库文件", + "m4ca85331d10a": "添加文件,让 AI 了解这个项目的上下文。", + "md5a90b8d8d51": "当前环境", + "mc0bf75bd78bf": "更改", + "m1900aa145ca0": "自定义环境(加载中...)", + "maa6da723475a": "工作区默认", + "mdb587c5a8497": "继承工作区的技能、规则和连接器", + "m5c09316228a5": "继承工作区所有项", + "me8c1818905f9": "暂无自定义环境。请从工作区设置中创建。", + "m21b6a798321a": "开发", + "m13a7c655a7d4": "生产", + "mf95fcf61a863": "添加变量", + "m8e37953d23da": "值", + "mf6cbe2f0c1f8": "描述(可选)", + "mabcdd1e169c4": "密钥(保存后脱敏显示)", + "m0707c5d972a7": "明文", + "m620e42933812": "暂无环境变量", + "m8a8a445f6560": "变量会注入到开发服务器和构建中", + "m2c4c151693e6": "新值(留空则保持不变)", + "m5416ad093f89": "切换值", + "mb1f8a17bcef8": "继承自工作区(", + "m46b2e93c2f9a": "已继承", + "ma6facd19ee0e": "已从 Marketplace 安装", + "m41f94479d2ae": "Marketplace 条目", + "me450db4ac225": "· 已安装", + "me2109d543007": "· 已修改", + "m691120d9fa07": "卸载 — 从当前工作区移除该克隆的环境", + "mfe199528850a": "卸载", + "m401d6acec59d": "环境模板", + "mc2ad8271f5d3": "暂无可用模板", + "m90db2ca3d0cf": "团队创建模板后,模板会显示在这里。", + "m18fdd549b2ed": "新建", + "m5fa108ae963a": "环境将工作区技能、规则、知识库和连接器打包为可复用的预设。", + "m37a8eec1ce19": "默认", + "m97c8b61c1986": "环境会自动包含所有工作区条目。", + "mef0b6a88d698": "创建自定义环境,打包工作区条目中的特定子集。", + "m08d23414ad6a": "创建环境", + "md62395fd52cd": "新建集成", + "m12f67f8539c4": "可用范围", + "mda2e5dc515b1": "所有人", + "md0f62545074d": "此项目", + "mbdc0857b99a9": "仅自己", + "m22f5ebc3ad3f": "服务器 URL", + "m713166971d73": "命令", + "m697119e47b5f": "npx -y @modelcontextprotocol/server", + "m9443ff69463e": "高级选项", + "m52a74e1ffc3f": "连接类型", + "m5bfaa5648534": "Web 服务(HTTP 流式传输)", + "mfecfc188ba0f": "Web 服务(HTTP SSE)", + "m105f8fe557fe": "Bearer Token", + "m6946d3ffe03d": "sk-...", + "m3210f18682cf": "eyJhbGci...", + "me3b6e3d945fa": "添加集成", + "m13e8b0b77ddf": "你将跳转至", + "m81c29589570e": "以授权访问。将打开一个弹窗供你登录。", + "m5f04ae9ed6a8": "正在连接...", + "m11aaa14268df": "使用以下方式登录", + "m8e1c7ba669b6": "请输入您的 API 密钥", + "m1b216be66c84": "请输入用户名", + "m7014aff13517": "请输入密码", + "m1339bddc2b28": "请选择...", + "mc856c7eb1cf5": "身份验证 Token", + "m0a3c8f8411d7": "请输入您的身份验证 Token", + "m86ea8896a440": "正在连接到", + "mdf0fe9e00d35": "重试", + "m72021eb70e91": "正在连接…", + "m22965568d22a": "已连接", + "me674447337e8": "可用", + "m4d4c2197d70e": "暂无描述。", + "m80d8688ffab9": "搜索集成...", + "m15840c0ad236": "加载更多(", + "m19d5a194983c": "没有与您的搜索匹配的集成", + "m5113ef230a14": "暂无可用集成", + "mff762330c43e": "请尝试调整搜索或筛选条件。", + "md431d4ccf029": "原生集成配置后将显示在此处。", + "m539da25ea18e": "无需配置,启用即可。", + "mce33c1c1d874": "获取您的", + "me37c838fdfec": "OAuth client_id + client_secret", + "m631aada47dea": "凭据", + "m5561f8dd5d34": "从服务提供商的开发者控制台获取,然后粘贴到下方。", + "me4a822d0504f": "打开服务提供商控制台", + "mb14ea6eedba3": "所需作用域:", + "mf3170d57a386": "Client ID 和 Client Secret 为必填项。", + "m380e05b0ebe3": "在服务提供商控制台中设置此重定向 URI:", + "maa4c3d948aed": "当前通过", + "mf651fcd956f5": "环境变量配置。在此处保存将用存储在数据库中的凭据覆盖该配置。", + "m97d0ee620b54": "当前已配置", + "md41bd6455eb9": "。提交后将替换现有凭据。", + "m2651215b6513": "来自服务提供商控制台的 OAuth Client ID", + "mc02ed8192606": "OAuth Client Secret", + "m096b73624b09": "保存中", + "m8e171e87357e": "保存凭据", + "m6596f82794f5": "此管理员表单目前尚不支持工作区范围的非 OAuth 凭据。", + "m8e795a2f5a9d": "身份验证令牌", + "m731fe041ce28": "请选择…", + "mb5005e90891c": "密钥在静态存储时加密。仅平台管理员可查看配置状态。", + "md403c686f6a1": "连接中", + "mb6d61aa7afb3": "尚未为此工作区启用。请让工作区管理员在设置 → 集成中启用,然后重试。", + "mfa1f0a72f5dd": "活跃连接", + "m639a40e82b9a": "连接", + "m782eb73bb5de": "连接状态正常", + "md597d662a8cb": "确认断开连接?", + "m98a28df264af": "可用操作", + "m147abf3da84c": "正在加载操作...", + "m72d95278c055": "尚未为此集成发现任何操作。", + "m2c5b12ca6e17": "添加另一个连接", + "m27c785c6b5dd": "电子邮件、日历、文档、聊天", + "m9c24f45a7ea9": "开发", + "me5e4c2acbc94": "源码、工单、错误、值班", + "m684f8be4db83": "电子邮件、CRM、支付、预约", + "mb7d43e0d3140": "此预设中的集成目前均未加入目录。", + "m4109e7a85cde": "此处启用的集成将", + "m1d618a102b46": "全局适用于所有工作区", + "mafa37747e942": "(现有和新建)。平台中的所有用户都会在其目录中看到这些集成。", + "m92c1cdfdf4cb": "已启用", + "mb0e1cdb33429": "已配置(数据库)", + "mec9969d40559": "通过环境变量", + "m7df4aae6b90f": "已启用,需要配置", + "m0bfff22a132a": "个集成", + "m0802ec6bbfbe": "已启用但缺少凭证。在配置凭证之前,用户将无法连接。点击", + "m316bd5c5eaa7": "下方对应行进行修复。", + "m6f7d88ffe0fb": "已通过服务器环境变量预先配置(例如", + "m0b5b709a8e90": "OAUTH_*_CLIENT_ID", + "m3c32cf357690": ")。这些无需在此手动配置 OAuth 即可自动生效。", + "m679f443feccf": "快速开始:", + "meb92cc52a766": "集成", + "mb69d6f19b253": "正在启用", + "mfd308574e3ab": "正在停用", + "m673804025742": "启用所选", + "m369711b52078": "停用所选", + "mfe3b58f14752": "所有分类", + "m040a4f895460": "环境变量", + "m7e841e94b722": "需要配置", + "m416861c7e2c1": "ENV", + "mf86f18497bc0": "已配置平台凭证", + "mcf3abc832664": "DB", + "m6f35ac236a3b": "更新凭证", + "m59294028b1f1": "配置凭据", + "m09d16bdcb6bc": "没有符合筛选条件的集成。", + "m9f7ea773caac": "工作区:", + "m38a5be91af79": "能力", + "m3fc0e5c4c484": "能力", + "mc3240e01116f": "可用能力", + "m553c2d7780ec": "尚未发现任何能力。测试连接以发现可用的能力。", + "m1abf62f6c6fa": "确认移除", + "mdae69e4430f4": "自定义 MCP 连接器", + "mf246fd1ef9d3": "正在加载集成…", + "mddb8b49a27b2": "暂无集成", + "mad38b13ff599": "连接第三方服务和 AI 工具,扩展你的项目。", + "m93a65009a550": "此工作区中的所有人", + "mb4990c5afe4c": "此项目中的所有人", + "m47a9fe7ce5bb": "仅自己(个人)", + "m12a7bd86e0a4": "已连接", + "m5f031beeecbd": "从你的组织中选择现有的 Supabase 项目,或让Doable创建一个全新的项目。无论哪种方式,API 密钥都会自动配置好。", + "me4235ebe6c96": "正在加载你的 Supabase 组织…", + "m94e8135c911c": "美国东部(弗吉尼亚北部)", + "m7343272444cf": "美国西部(加利福尼亚北部)", + "mb044c25b22cd": "欧洲西部(爱尔兰)", + "m7cfb6caecb63": "欧洲中部(法兰克福)", + "m758f62cc9ed2": "亚太地区(新加坡)", + "m558498b37a96": "亚太地区(东京)", + "m133697121a8e": "亚太地区(孟买)", + "m0ee739f054d6": "南美洲(圣保罗)", + "m98a3dcd2d736": "使用 Supabase 登录,以便Doable可以代你创建项目。你将被短暂重定向到 Supabase 进行授权,然后马上回到这里。", + "mecf5310c018f": "正在等待 Supabase…", + "m4cdc78922e43": "使用 Supabase 登录", + "ma287cb8a7f05": "选择一个项目——Doable将获取其 API 密钥并自动接入此应用。", + "m1eca6c02374e": "你还没有任何 Supabase 项目——让我们创建第一个吧。", + "m18d9d57bec2a": "Supabase 组织", + "md3a008ef1335": "区域", + "m115b93fedc63": "连接现有项目", + "m9f3df753a41a": "新建", + "mdb1a21a0bc2e": "JSON", + "m7bc88ebb6d01": "Zip", + "m76a692132c70": "GitHub URL", + "mc2ae72317178": "从Doable外部导入", + "m3a7f5a60d97e": "从 JSON 清单、Standards Zip 或公共 GitHub 仓库导入环境。", + "m18cd692efad9": "粘贴一个", + "m658a850d329e": "manifest。任何未通过 schema 校验的内容都会被拒绝。", + "mf7573af38621": "将 Standards Zip 拖到此处,或点击浏览", + "m222e1ef4a020": "兼容 Anthropic Skills、Cursor Rules、MCP 和 Claude Code 插件布局。", + "m55ec8dcd8925": "仅支持公开仓库。导入时会将该路径打包为 tarball,并按 Standards Zip 解析。", + "m1d965e7ab1cf": "导入的内容会作为草稿环境进入你的工作区。在你逐个授权每个连接器之前,它们不会运行代码或调用外部服务。", + "m91bae713515c": "已导入。", + "m321f179c80ba": "已导入", + "m2621d6ab4311": "导入到工作区", + "m3db223d239a5": "可能会要求你提供凭据(API 密钥、OAuth)", + "m1c5802102833": "安装“", + "mf731842ea02e": "查看此安装包会向你的工作区添加哪些内容。", + "mdf498282bede": "包含", + "m4a33eacd5fa6": "项", + "mb029f856acbb": "需要你关注的内容。", + "mafce17e84a37": "此安装包为空。", + "maf0184ed8833": "安装会在你的工作区中创建一个隔离副本。安装后,原始发布者无法修改它。", + "mc683491047fc": "已安装。", + "mfe579e76f015": "无可安装内容 — 此安装包不包含技能、规则、知识库或连接器。", + "m07ae7fd68456": "正在安装...", + "mc741d1dfa9f5": "安装到工作区", + "mbcd8cc53f40e": "暂无描述", + "m9c53c074d7ac": "技能", + "m7369949b47ef": "规则", + "m7322e503e2e3": "从 JSON、Standards Zip 或公开 GitHub URL 导入套件", + "m86794d6a910b": "管理你已发布的条目", + "mb07a607c3b8d": "将你的某个环境打包并发布为条目", + "m985b7ac97956": "安装由社区创建的 AI 环境 —— 技能、规则、知识库和 MCP 连接器。", + "m86d94cb27e98": "搜索环境、技能、标签...", + "m76327dec9ae3": "热门", + "ma941983250b0": "未找到条目", + "m3becd866de1f": "换一个搜索词试试", + "mc38607c4f2d3": "成为第一个发布环境的人!", + "mba5285161ba6": "环境", + "mcd46fcfce46d": "垃圾信息或低质量内容", + "mdce34cc99e59": "恶意软件 / 恶意行为", + "m8ea03160b2fd": "无法使用或功能异常", + "m940bd85c865f": "不当内容", + "mdbc94458ce4f": "侵犯版权 / 商标权", + "ma4d5cce85c7a": "请告诉我们“", + "mf560e7f3a325": "”。举报将由审核员进行审核。", + "mf81ab834de5f": "原因", + "mdcac920e005d": "任何有助于审核员分类处理的信息……", + "m9e23a4d76b1b": "举报已收到,谢谢。", + "mb41fd589ad91": "提交举报", + "m811f66f2beb9": "正在加载 GitHub 设置……", + "md3d6cd5328a1": "GitHub 集成", + "mf57a4f283920": "将项目连接到 GitHub,以便进行版本控制和协作。", + "m992e5b297a53": "强制推送(覆盖远程)", + "m8212e6f6f430": "未连接到 GitHub", + "mebabde2d65a9": "连接后可推送和拉取代码、跟踪变更并协作。", + "m5db99d7cbac2": "使用编辑器工具栏中的 GitHub 按钮连接此项目。", + "mcdeacf620667": "已连接的仓库", + "mb8a50d7f479c": "分支:", + "m5f33f770d929": "上次同步:", + "m8c40e9b0c098": "从远程仓库下载最新变更。", + "mb66d044181a0": "拉取", + "mbacf530d4a91": "最近同步历史", + "m1d1a296c451c": "断开仓库连接", + "m8d782fbb3ff6": "断开连接。你的代码不会被删除。", + "m7f0c2893110a": "请输入有效的 URL 以进行发现", + "m604fd1b2e29c": "名称为必填项", + "mbd6df736adbf": "HTTP 传输方式必须填写服务器 URL", + "m88c96d59e8c9": "stdio 传输方式必须填写命令", + "m2fdba7aa01af": "添加 MCP 服务器", + "m810414c64a68": "传输类型", + "mc4773c2e3148": "服务器 URL *", + "meee8aee46a70": "探测服务器能力", + "m9c26a88a88fc": "命令 *", + "me1e6ca97e71a": "npx -y @modelcontextprotocol/server-filesystem", + "m42057c1bd3ee": "参数(逗号分隔)", + "m862fead051be": "名称 *", + "mb334c83ff115": "我的 MCP 服务器", + "m7e02a31a539e": "自动检测:", + "m12e194e558e2": "此服务器提供什么?", + "mc9ca25454a8b": "服务器需要:", + "mf5864652d5bf": "Token 以 Authorization: Bearer ... 形式发送", + "m6e58dfc8e692": "请求头名称", + "m1b06b0bb1e70": "X-API-Key(默认)", + "m2d21ece0b57c": "作为请求头的值发送", + "mb96ed27eabea": "OAuth 授权可用", + "m094661ea7645": "授权服务器:", + "ma694d6512292": "连接成功!你可以关闭此表单。", + "m349f82870358": "等待授权中……", + "md82f54134beb": "使用 OAuth 连接", + "mf9db72ced1ee": "访问 Token", + "m0e65e48637d3": "手动输入 OAuth 访问 Token", + "ma8322c6de1b6": "手动输入访问 Token,或在上方输入服务器 URL 后点击“发现”以查找 OAuth 流程。", + "m4c9c57419990": "客户端 ID(可选)", + "m8e7141f4dfe7": "服务器要求时填写的客户端 ID", + "m1b6f8f11a2d7": "部分 OAuth 服务器需要客户端 ID。如果服务器支持公共客户端,可留空。", + "m1124ecc667c5": "环境变量", + "m39acc1835cf0": "可选。通过其环境传递给 stdio 进程。", + "m5ca24005b740": "键名", + "mcd42404d52ad": "值", + "mda8993ec0654": "添加服务器", + "mced5e64d4274": "未能自动检测到服务器", + "m1c3be50c7977": "你仍可手动添加 —— 填写下方详细信息。", + "m5d24f55e2c2f": "已发现服务器", + "m2683cad48a14": "名称:", + "m9e3391e9bf07": "主页", + "mea93d6a262ec": "工具", + "m5f2e66e65397": "提示词", + "mef718e7031ce": "个工具可用:", + "m187897ce0afc": "更多", + "m743c1043d543": "⚠ 此服务器需要", + "mb9d906284539": "身份验证", + "m2bcf7ca31bca": "🔗 已发现 OAuth 端点 — 使用下方的“通过 OAuth 连接”按钮进行授权", + "m8b38d0056b17": "无法自动发现 OAuth 元数据。您可以在下方手动输入访问令牌。", + "maaead4abf5d0": "传输方式", + "me82e22633f85": "参数", + "m8eb3ea9bbde6": "认证", + "mb073f6c68ef8": "作用域", + "m60cffa1d7158": "工具 (", + "mcbdf83b11de6": "重新运行 OAuth 登录以刷新此连接(保持相同的服务器和名称)", + "mbf8a9eab9e7e": "重新连接", + "mfb1e6fa55327": "停用", + "m24433c70eba5": "启用", + "ma7f54311a3e6": "确认删除", + "mc419005e98b9": "连接 Model Context Protocol 服务器,让您的 AI 助手能够访问外部工具和数据。", + "mb3eacd33433b": "服务器", + "m201582247500": "已配置", + "mad9662696670": "正在加载 MCP 服务器…", + "m013e6b9db9d2": "未配置 MCP 服务器", + "m97bf0e1b8107": "MCP 服务器可让你的 AI 助手使用数据库、API、文件系统等外部工具。", + "mebef55227b69": "添加首个服务器", + "mb17dc3d5a74d": "使用此工作区在 AI 设置中配置的模型。", + "m572b0dfcf0a8": "为此项目单独覆盖", + "m2b19d82e282b": "从工作区模型服务商目录中选择模型服务商和模型。", + "md8de930be069": "正在加载模型服务商…", + "mf8225de648cf": "模型服务商来源", + "mfee405014d78": "自定义模型服务商", + "m42b998374988": "服务器默认", + "mcc8b4624f765": "正在加载模型…", + "mc4985ffa6928": "选择模型…", + "m8ee47e5e4955": "选择模型服务商…", + "m81d707aca8c4": "未配置工作区模型服务商。请在以下位置添加:", + "m9606bfc49ee3": "刷新模型列表", + "ma7d21d08d37b": "尚未发现任何模型。点击“刷新”,或在 AI 设置中检查模型服务商。", + "me43fdd487cfb": "请先选择模型服务商。", + "m454b4687ffb6": "当前已保存的覆盖设置:", + "mad3e57500f14": "——在上方选择一个模型即可更新。", + "m41bdb214d4a7": "知识库(.doable/)", + "m780a89408ef5": "知识库文件用于指导 AI 在编辑项目时的行为。每个文件的用途各不相同。", + "m7cf46d84e370": "个文件,", + "m75fba3b7fbcd": "已使用预算 %", + "m2cb221edd527": "为空 —— 点击编辑", + "m6250d5725dda": "未保存", + "mb3d19c7f1b7d": "转移项目", + "m01082fdad286": "将此项目转移到另一个工作区。项目将连同其所有文件、设置和部署历史一并迁移。", + "mea0f15f9a0cb": "目标工作区所有者邮箱", + "mc8cd3c642730": "owner@example.com", + "m136b84975307": "永久删除此项目及其所有部署、文件和数据。此操作无法撤销。", + "m1c335e92c86b": "删除此项目", + "m0c88f5ee5691": "你完全确定吗?", + "mdbf2540da3b2": "及所有关联数据。请在下方输入项目名称以确认。", + "m83918ed6bc4f": "以确认", + "m666685f2f9a1": "我已知晓,删除此项目", + "md36d7df3ead8": "此项目的Doable", + "ma8b2040de78f": "禁用后,/__doable/ai/* 将返回 503 AI_DISABLED_FOR_PROJECT。适用于已暂停的项目或额度锁定。", + "m75081b593d15": "已禁用", + "mc1ea40104894": "思考内容可见性", + "me17f37e96ef7": "系统提示词覆盖", + "m3632ad92aaad": "会在每次运行时聊天调用前添加。仅对模型可见——绝不会回传给客户端。上限 4 KB。", + "med644a4967f2": "字符(", + "md55648e6be99": "%)——超出上限的多余内容会在客户端截断。", + "mbc5b45ae7b60": "重置为默认值", + "m9abc7b7a3843": "聊天模型覆盖", + "m32bd0666e5c1": "为本项目生成应用中的运行时聊天,覆盖按工作区解析得到的聊天模型。", + "meee7a8fae13c": "嵌入模型覆盖(破坏性)", + "m1dabae936e70": "更改嵌入模型会永久清除该项目的所有现有嵌入,因为 pgvector 的列维度按模型固定。", + "mc09f632874c2": "当前:", + "m65a0fa6b5d75": "(工作区/平台默认值)", + "m527d4fc6dd01": "点击下方按钮,逐步完成破坏性操作确认。", + "mc66ae680c148": "更改嵌入模型…", + "m1b5874862421": "运行时 Token 用量", + "me1c28d6e16c1": "该项目 ai_usage_log 记录的汇总,按模式分组。", + "m9755c8d7d44a": "全部时间", + "meb6b42f54c42": "CSV", + "m79489561d9ef": "常用模型", + "m18827ebcc4c9": "req ·", + "m1a7674eb4ee7": "tok", + "me40350c7ab5b": "要清除此项目的嵌入向量吗?", + "m34584117f4bd": "更改嵌入模型将永久", + "me0739214a7cf": "此项目的所有现有嵌入行(当前模型:", + "mb3ffbbff2d64": "(默认)", + "m6befe4ab12fd": "行,分布于", + "m793a6e89fdd4": "张表)。", + "m808fe16148a5": "新嵌入模型", + "mfc0510589f8e": "ERASE", + "m011d0e9f5ccf": "清除嵌入向量并切换模型", + "m38500dff72f5": "等待 DNS", + "ma7d4a9f301ed": "验证中", + "mcb470ff16d18": "SSL 证书签发中", + "m9f2c59a113db": "移除中", + "m4e08dbdaa06f": "默认域名", + "m913d537a218d": "你的项目始终可通过其 .doable.me 子域名访问。", + "maae50df57461": "默认 URL", + "md6069fcf719f": ".doable.me", + "m1c8ac867f052": "访问", + "mc1683eeb070b": "自定义域名", + "m1b329de76913": "使用你自己的域名来提供已发布站点的访问。", + "mfb1dfb5d89e8": "Pro+ 功能", + "m25a7608b4dc0": "自定义域名适用于 Pro 及更高方案。升级工作区即可连接你自己的域名。", + "m0f09df73147a": "添加域名", + "m16a49b5a4082": "尚未配置自定义域名。在上方添加一个即可开始。", + "ma12655756209": "配置 DNS", + "m45037d12281e": "请在 Cloudflare DNS 控制台中添加此 CNAME 记录,并开启代理(橙色云朵)。", + "m76b26edb7557": "CNAME", + "m690b060136cb": "复制目标", + "m813b1a6dead6": "你的域名必须使用 Cloudflare DNS(免费)。CNAME 必须开启代理(橙色云朵开启)。添加记录后,点击上方的“验证”。", + "m3eb998a330d2": "域名已启用 — SSL 和路由已通过 Cloudflare 配置", + "m8f74681f2b64": "HTTPS 证书由 Cloudflare 管理,自动续期。", + "m2ca4637a5b8a": "项目详情", + "m875ea40080d7": "项目名称", + "m51e38ecc92f5": "我的项目", + "m154d24f40bd2": "简要描述你的项目", + "m7448611d5f93": "可见性", + "mb755ad205da1": "任何人可见", + "m59a8280d96b0": "仅你可访问", + "mb9f34f54a981": "项目信息", + "m041f49553f9c": "关于项目的只读元数据。", + "m048c7f2ef9aa": "最后更新", + "m03fb44a5243d": "项目 URL", + "m0c643a753e53": "GitHub 同步", + "m10d736b7b159": "推送和拉取代码变更,让项目保持同步。", + "m7585eaf776ab": "MCP 与集成速率限制", + "m8853515ebeea": "控制此项目每分钟可发起的 MCP 工具调用和集成请求数量。适用于所有模式:预览、独立运行和已发布。", + "m2b4f1669370f": "速率限制模式", + "md8081c667c73": "系统默认", + "m419b966d9002": "预览为 600 次调用/分钟,带 API 密钥的已发布应用为 1200 次调用/分钟", + "m9e8d2ff6c1a6": "自定义限制", + "md3ab7b8e5c0b": "为此项目设置特定的每分钟调用次数限制", + "me1f5485a7544": "次调用 / 分钟", + "m86ce906b46f4": "无限制(不进行速率限制)", + "mbd8347bfbf7f": "完全禁用速率限制。请谨慎使用——外部 MCP 服务器仍可能施加自己的限制。", + "m9c870aa6e5e9": "工作原理", + "m5a1c6983f6af": "了解速率限制架构", + "mf4fcdd413746": "速率限制适用于此项目发起的所有 MCP 工具调用和集成操作,无论应用通过何种方式访问(编辑器预览、独立 URL 或已发布站点)。", + "m15e63fd45a68": "所有请求都会经过一个", + "mb8cc693dc129": "单一端点", + "m44f921f1d59b": "预览与独立模式:通过短期 JWT(15 分钟)进行身份验证", + "m3f11c69bb699": "已发布的应用:通过项目 API 密钥(dpk_*)进行身份验证", + "m603421410c77": "此项目的所有认证模式共用同一速率限制", + "m3332b048bd97": "请保存此密钥——它不会再次显示", + "m052f9bcf9ab8": "暂无 API 密钥。首次发布时会自动预置密钥,你也可以在下方手动创建。", + "m7c9bbe5ec9b3": "工具", + "meabc01f12ec3": "已允许", + "m81c151f98a19": "所有工具", + "m89739b9d6a6d": "任意来源", + "me29abcb7ef37": "撤销密钥", + "me1b30b3373a7": "创建客户端密钥", + "mac65db0ffaac": "创建服务端密钥", + "mc655f48b60f8": "客户端密钥", + "m8b8d2cce80de": "(dpk_c_*):用于浏览器应用。绑定来源,速率限制较低(600/分钟)。", + "m9e0389f1fa44": "服务端密钥", + "mbb1bad10c001": "(dpk_s_*):用于后端应用。不检查来源,速率限制更高(1200/分钟)。", + "m549886a83703": "自动预置:", + "mf8de3dbf5971": "发布时,系统会自动创建一个客户端密钥,并将其权限范围精确限定为应用所使用的 MCP 工具。", + "mc08f17eb9e11": "API 密钥", + "m5fa4d2fe9af0": "管理已发布应用的认证密钥。首次发布时自动预配,支持工具范围限定与来源绑定。", + "m74dea5e67162": "速率限制", + "m41efb3a9935a": "控制此项目每分钟可发起的 MCP 工具调用和集成请求数量。", + "mf7c5bd1cc1a7": "线上站点对所有访客开放", + "m306fdcf2ba87": "发布到生产环境前先测试更改", + "m51469c906261": "项目环境", + "m81373ef0c23e": "为此项目覆盖工作区默认环境。AI 将使用该环境的技能、规则、知识库和连接器。", + "m7ffa22adfe78": "此工作区暂无环境。请在“环境”面板中创建一个。", + "m0b6adee87205": "使用工作区默认值", + "mefb1406f94e5": "此项目使用了自定义环境覆盖,工作区默认值已被跳过。", + "m0aea45f48490": "正在继承工作区默认值。在上方选择一个环境即可覆盖。", + "m4d1441671a98": "环境预设", + "m06ea1944254c": "可复用的技能、指令、MCP 和集成组合,应用于此工作区。", + "m0ad959ad8db9": "暂无环境预设", + "m9caadf97bbfd": "请在编辑器的“环境”面板中创建环境预设。", + "m870a8ffd98f4": "部署", + "m12b1050c1067": "用于发布项目的部署环境。", + "m61cbf7fa57d1": "上次部署:", + "m758e8416eb8a": "未找到项目", + "mdc652adf2479": "该项目可能已被删除,或者你无权访问。", + "m7ce8f8cb9bff": "管理可复用的技能和规则,塑造 AI 在整个工作区中的工作方式。", + "m3a0f0a5401fb": "技能内容...", + "m2ef3fb262631": "删除此技能?", + "m7fe2a91dd453": "新建技能", + "m149c130c15f6": "描述此技能会教给 AI 什么...", + "m143db7e359b1": "无文件模式", + "md8ad616783ba": "文件模式", + "m3c990110b4c4": "*.tsx, *.ts, src/**/*.js", + "m860e8e6eee39": "无文件模式 — 适用于所有文件", + "m28007b7f8f11": "规则内容...", + "m3a3de58afb86": "删除此规则?", + "m3f82fe8e9de3": "新建规则", + "mbfd1311eba42": "(逗号分隔,可选)", + "mf3bacf08ec15": "描述 AI 应遵循的规则...", + "mf01ec050eca5": "添加技能", + "m6d8b4a3d59cb": "技能让 AI 掌握特定的能力或知识。当 AI 处理你的项目时,它们会包含在 AI 的上下文中。", + "m476f61ba4fc4": "还没有技能。添加一个,教 AI 新能力。", + "m968c3cb8fb70": "添加规则", + "m0cadbcfb5f26": "规则定义 AI 必须遵循的约束和约定。文件模式控制规则适用于哪些文件。", + "ma4fe917c1d4e": "还没有规则。添加一个,为 AI 设置约束。", + "m07b091a3fdc4": "Schema", + "m101f2ff3de22": "行", + "m80d2e18c7da9": "查询", + "mfe0313c05643": "迁移", + "m1a82ab93f701": "数据库面板", + "m874caa6f7aeb": "删除表", + "m52171f6cf990": "永久删除表及其所有数据。此操作无法撤销。", + "m3361bd462810": "没有可删除的表。", + "mc8af9ae37a48": "删除", + "m53e3bd5e1031": "删除表", + "mf65a3dd84895": "重置数据库", + "m7eeaf76242de": "删除所有表并从空数据库开始。此操作无法撤销。", + "m01be30bb4a27": "reset", + "me47560c7e215": "以删除所有表:", + "m5aeb4bed9530": "数据库已应用的迁移历史记录。", + "md1f962d75c7d": "暂无迁移", + "mab770d4f42dc": "当 AI 通过内置数据库应用 Schema 变更后,迁移记录将显示在此处。", + "mcc149190687e": "迁移", + "ma91069147f9b": "哈希", + "m47a5180f7f62": "数据库概览", + "m5426a78b8f83": "项目数据库的快照。", + "m309715f1d891": "暂无数据表", + "m611a7763cad3": "让 AI 添加一些吧——它会自动创建你的架构。", + "m24839d0c0477": "总行数", + "m90b901a30c3f": "索引", + "md3ad1f1f8c9c": "策略", + "m1810407f5ab7": "快捷操作", + "m5dd8131db13e": "打开架构", + "m9d41abd72396": "浏览行数据", + "m826cea94aca7": "运行查询", + "m951088383385": "对数据库执行 SELECT / INSERT / UPDATE / DELETE。查询会遵循行级安全策略。", + "mb1160f188a9b": "⌘/Ctrl + Enter", + "m634768dae147": "行", + "m6e2c568e0ce6": "查询成功 — 未返回任何行。", + "m74234e98afe7": "null", + "m04fead47af96": "添加行之前请至少填写一个字段。", + "mff40ad964b14": "浏览、编辑、删除和导出表数据。", + "m98bded18778d": "行)", + "m1868a8dd78ad": "添加行", + "m16cdb8681b4f": "行,总计", + "me5a89270f6be": "编辑和删除已禁用 — 该表没有可用于定位行的单列主键。", + "mf017b41bcee4": "在以下位置新建行", + "md6b3a40516e9": "你(自动)", + "m5118ec56d3b0": "暂无数据。", + "m18b77e44e689": "删除?", + "mda00fa968bd8": "确认删除", + "m73912999faf4": "上一页", + "m18199d6c8031": "表、列、索引和行级安全。", + "m5c38569007a8": "未找到表。让 AI 创建你的表结构。", + "me0ae55a347ca": "RLS 已启用", + "m6e348b8ef3df": "RLS 关闭", + "m918e06828581": "启用 RLS", + "m16004c5e9d6f": "添加 created_by / owner_id 列以启用 RLS", + "m53aade77cd69": "列", + "mf38d9950af4f": "标记", + "me95b58867bd3": "NOT NULL", + "ma4aa5093c634": "索引 (", + "m64636a121324": "UNIQUE", + "m615efc660a79": "策略 (", + "me7e9c0714998": "无策略 —", + "meed09bdfc71e": "RLS 已启用,但没有任何策略授予访问权限(行被隐藏)。", + "md172b9c0a0d5": "该表未启用行级安全。", + "m90d003ae66f9": "HTTP(流式传输)", + "m5e514b526a1a": "连接支持流式传输的基于 HTTP 的 MCP 服务器", + "mc3e6cbfe59d3": "服务器发送事件(SSE)", + "m42dc7480db33": "通过 HTTP 并使用服务器发送事件连接", + "m7097b2b3c5c0": "内置应用", + "mc6ac2600776f": "由服务端管理的本地进程", + "m65104bc415b3": "搜索技能...", + "m706bb2bf3ff7": "无匹配的技能", + "m436e37eab2b0": "未配置技能", + "m36bde66f289a": "手动", + "mda98d0c169dd": "(何时使用此技能)", + "m248296cbb019": "在构建注重无障碍的 React 组件时使用...", + "m99d204e6ce02": "提示词匹配时自动调用", + "m810167ab8526": "何时使用此技能...", + "mf6456b82f5ee": "--- name: my-skill trigger: auto --- Skill content in markdown...", + "m6df1bb18a59a": "技能", + "m6f3decdb03ee": "--- name: my-skill trigger: auto --- Skill content here...", + "mab6d0a8145e7": "还没有技能。技能可为你的 AI 提供可复用的能力。", + "m62845f31a2fe": "规则", + "mef4255129890": "始终以友好的语气回复。\\n不要在回复中包含原始 SQL。", + "m76e4096cb2b5": "还没有规则。规则用于指导 AI 的行为。", + "m8e8a0b88543c": "邀请成员", + "mf7fae87d68c7": "发送邀请以加入此工作区。", + "m5c4b03a7e821": "colleague@example.com", + "mc1ad5dcf2e05": "发送邀请", + "m2b98b1945afc": "移除成员", + "mda4b4fa5ee81": "确定要移除", + "m72aa5b162eab": "从此工作区吗?该成员将失去所有项目的访问权限。", + "m60d18e42fd5a": "正在移除...", + "me0447514873e": "加载成员失败", + "m0141903afec5": "可访问此工作区及其项目的人员。", + "m1fd9ae1607aa": "邀请", + "md48b0edcb0fa": "已发送但尚未接受的邀请。", + "m3f63662d1610": "邀请链接", + "mee0ba29677dd": "生成可分享的链接,邀请他人加入此工作区。", + "m826c272260db": "邀请链接", + "m6ed21b0197a6": "生成链接", + "mf49cda3a003c": "转移所有权", + "m606c754332c6": "将此工作区的所有权转移给其他成员。你将被降级为管理员。", + "m1a188a2a4288": "新所有者邮箱", + "m9efc82d7b54f": "删除工作区", + "m08e84f1f8c6f": "永久删除此工作区及其所有项目、文件和成员关联。此操作无法撤销。", + "mfbf65aeff09f": "删除此工作区", + "ma44014d57331": "以确认。", + "m2aedfd1a09ce": "我明白,删除此工作区", + "mfb0b45908d60": "工作区详情", + "m7df05adeeaad": "我的工作区", + "m93ecf5eb3e0f": "工作区的简要描述", + "m9ab5abafdca9": "工作区信息", + "me472493645c7": "关于你的工作区的只读元数据。", + "m1044a4c056d0": "成员", + "mab3364cde0d3": "你的角色", + "m7ffac85d3272": "登录尝试次数过多。{v0}", + "mff0dc55e6c99": "审计端点不可用(HTTP {v0})", + "m5b97efac769e": "删除 {v0} 失败", + "m00410e77ae85": "正在使用自定义 Token ****{v0}", + "m00ace311c2f5": "正在使用 cert.pem OAuth Token ****{v0}", + "mac26c98b3c1e": "要重试全部 {v0} 封邮件吗?它们将被重置为待处理状态。", + "mc5650b441394": "已将 {v0} 封邮件加入重试队列。", + "ma02387e074cf": "要永久删除全部 {v0} 封邮件吗?此操作无法撤销。", + "m4f5d6347279e": "已删除 {v0} 封邮件。", + "m24d7d02c9f3d": "正在显示 {v0}", + "m9f6801c068b5": "状态为“{v0}”", + "m126345e8a598": "({v0} 维向量)", + "m8088d60a15ef": "已保存 {v0} 方案的默认设置", + "m7a3979d63198": "已将默认设置应用到 {v1}/{v2} 个工作区({v0})", + "mdbc21a17d946": "要停止“{v0}”吗?\n\n应用的 systemd 单元将被终止。用户可以从编辑器中重新启动它。", + "m7b63c6b376c6": "要终止“{v0}”的开发服务器吗?\n\nVite 进程将被终止。用户可以从编辑器中重新启动它。", + "m26bf2485c847": "doable-app@{v0}.service", + "mc5ac96b52ed5": "已保存“{v0}”模式的工具配置", + "mebee0e4886a2": "要删除“{v0}”模式的配置吗?此操作会使该模式改用硬编码的默认值。", + "mfa40d503407f": "已删除“{v0}”模式", + "mb574068c50bc": "{v0} · {v1}\n{v2} 毫秒 · {v3}{v4}", + "m41b6c7dee5b4": "{v0} 毫秒", + "m5bea7822d675": "另外还有 {v0} 个", + "m84805b3f51e7": "选择 {v0}", + "me4304a8372fd": "没有匹配“{v0}”的项目。请尝试其他搜索词。", + "m47f1f6a3b07b": "没有匹配“{v0}”的模板", + "m39875f600860": "没有匹配“{v0}”的项目", + "m260f4198369f": "已启用 · 剩余 {v0} 个恢复码{v1}", + "mf49697c96a5a": "要删除 {v0} 吗?此操作无法撤销。", + "m6ca5d09b8d70": "# {v0}\n\n开始输入……", + "m973831b3382e": "身份验证错误:{v0}", + "md1f8563597aa": "已应用 {v0} {v1}", + "m4dbb4ed0912c": "{v0} KB · ", + "m63e447794f82": "自动修复已暂停——AI 在尝试 {v0} 次后仍无法修复此错误。", + "mbce09bb12e5f": "{v0}/editor/{v1}", + "ma126d644f0cc": "无法保存 {v0} 默认设置——完成设置后,请在 /admin/plans 中验证。", + "m3c6a40f73ae5": "你的 Copilot 订阅中有 {v0} 个可用模型。你可以随时前往 /admin/ai-settings 进一步调整。", + "m49a064002aec": "已配置:{v0}(通过 {v1})", + "m160c02eb9e00": "存在{v0}", + "m4ae2ea58575e": " · {v0} 名成员", + "mce4bdf856850": "已使用 {v0} / {v1}", + "m7844d8fc9afc": "{v0} 预览", + "mbe78c16a8edb": "{v0} 的预览", + "m6935183f86c1": "无法启动语音输入:{v0}", + "mf50339be8607": "{v0} 个工作区:{v1}{v2}", + "m8cec5e9c2b80": "{v0} 位不同用户正在使用此 Copilot 订阅。", + "m61907559f648": "此 GitHub 账号(@{v0})已被 {v1} 位不同用户添加。", + "m22e9cebc83bd": "设置已复制给 {v0} 位用户{v1}", + "m0ef498fa44b4": "可用额度:{v0}", + "m6b463a0e3cd3": "剩余 {v0} 额度", + "m04302a14169c": "升级到 {v0}", + "meceda4cd02c0": "正在编辑 {v0}", + "me2b3655a13a0": "添加{v0}", + "m54cbd4604c0c": "要断开 {v0} 并连接其他账号吗?\n\n", + "ma192c0457880": "工具调用失败({v0})", + "m608dd628c7c7": "mcp-app:{v0}", + "m08f7430195bd": "删除 {v0}?默认文件将被重置。", + "md9339cc6a24b": "{v0} 字符", + "md2b5e7506b51": "版本 {v0}", + "m7e47e94daf7a": "我的 {v0} 连接", + "m863f2ca6991c": "输入 {v0}", + "m9db2ba6d8968": "连接 {v0}", + "m086df81a91bb": " (客户端 ID:{v0})", + "ma575227918ad": "粘贴你的 {v0} API 密钥", + "m09ca41fb2c5d": "{v1} 个{v2}操作中有 {v0} 个失败。列表已刷新。", + "m85cabcf2a12c": "在 {v0} 中全选", + "mb59b1c094916": "配置方式:{v0}", + "m67c60b1e677c": "{v0} 项高影响和 ", + "m5db02c86ca3f": "{v0} 个字符", + "mdedcf827964d": "我的 {v0}", + "m4007ede786d8": "成员({v0})", + "m5bed8dc6b0ed": "待处理邀请({v0})", + "m535f5487c9f0": "已创建 {count} 个文件", + "m54eab0ff283f": "已修改 {count} 个文件", + "me7f27e543c19": "已读取 {count} 个文件", + "mc33fa913a190": "已安装 {count} 个依赖包", + "m4eeb5480a729": "已搜索 {count} 次", + "m6e025ab4ef82": "已运行 {count} 条命令", + "md4e1aa013fee": "已查看项目结构", + "m21cc30509578": "正在规划", + "m29646fe2d127": "正在制定计划", + "md4a85c25934d": "正在更新进度", + "mcfce761befa8": "请求失败", + "m4190475b5235": "身份验证失败,请重试。", + "mb553ebbcba22": "缺少验证码,请重试。", + "md89c7cc4ec4b": "你的账号未关联邮箱地址,请重试。", + "mcf838bcb6704": "获取缩略图日志失败:", + "m440bdfb3a851": "生成缩略图失败:", + "m6a52dcd27169": "获取 Copilot 会话失败:", + "mda6efefb0490": "加载会话失败", + "mf178a2552831": "终止会话失败:", + "mb268c0b17e63": "终止所有会话失败:", + "ma7367485803a": "加载对话失败", + "m0eb0fd20a42b": "加载操作日志失败", + "ma7375d496bde": "加载审计数据失败", + "ma4b404e83999": "加载聊天会话失败", + "m73bfbe45ead3": "加载会话线程失败", + "m128e6b89300b": "加载 DNS 配置失败", + "m29bbb7b7a04c": "加载 DNS 诊断信息失败", + "mfa4f2f923b23": "保存 Token 失败", + "mf3d55812ba2e": "移除 Token 失败", + "m2c07997249ab": "保存失败", + "mb347c681bdec": "刷新诊断信息失败", + "m4706ef0b982f": "加载邮件配置失败:", + "m6eee736ebabe": "加载队列统计信息失败:", + "m97f3dc1a00cb": "发送测试邮件失败。", + "mf625b14e1b2c": "删除失败", + "m0cfb2caf3808": "启动 Gmail OAuth 失败", + "m5281a17d08d9": "加载队列失败:", + "m0f48d9ed9216": "加载邮件详情失败:", + "mada889964ab3": "加载状态失败", + "md2ac8dfbfab1": "加载 MFA 用户失败", + "m2638a84f756e": "重置 MFA 失败", + "m8c90edde06bd": "加载 AI 分配失败:", + "m62118d4494f6": "保存 AI 设置失败", + "mff27059cb004": "重置 AI 设置失败", + "me4143613f121": "更新角色失败", + "meabb5c136be4": "更新方案失败", + "m85a0de1739d3": "加载方案默认配置失败:", + "md67a86520b83": "保存默认配置失败:", + "mb7f9fa013618": "应用默认配置失败:", + "md3774a9d3090": "获取方案限制失败:", + "m31e1685470cc": "加载方案限制失败", + "m2f114634718b": "保存方案限制失败", + "m1e4e7c3efec4": "重置方案限制失败", + "med2139ca8746": "加载运行环境实例失败", + "m685f6c95f442": "加载开发服务器失败", + "m5aa7f04b86f9": "加载出口流量数据失败", + "m2515ea982cd0": "加载日志失败", + "m1a70c04fc312": "加载注册信息失败:", + "mce89884b1cdb": "加载注册信息失败", + "m4924972f9587": "保存设置失败", + "m177ebb036074": "加载工具配置失败:", + "m557aa001b316": "保存模式失败:", + "m1df9a58ef93c": "添加模式失败:", + "md4ebc05d56d2": "删除模式失败:", + "m4ad82614b981": "加载追踪记录失败", + "m1bde77d27b5a": "暂无属性", + "m2197f6207922": "暂无事件", + "m7a711f215997": "暂无异常", + "mc86bcc9469d3": "加载追踪记录失败", + "me88e1a5f81d3": "保存额度失败", + "m75592b03117e": "保存 GitHub 账户失败", + "mfe95f5923f3d": "获取模板失败:", + "ma23127da31a7": "创建项目失败。请重试。", + "m2495a96af0ae": "部分项目删除失败", + "m6e260c2ad677": "加载社区数据失败:", + "m609116050f8b": "发现项目失败:", + "m2c42b800f4f2": "创建副本失败:", + "m82e7362bb796": "创建副本失败。请重试。", + "mc5bf66554c8f": "创建列表失败", + "m7054480c7609": "加载实例失败", + "mdd1a94ab79c0": "加载 MFA 状态失败:", + "mb0223f41bbad": "启动注册失败", + "m615d3faf84b8": "禁用 MFA 失败", + "m54ed946e0373": "重新生成恢复代码失败", + "mb689d74cef45": "保存个人资料失败", + "m8f4894fcc9b3": "保存个人资料失败:", + "m574f390356c7": "保存个人资料失败。", + "m98548a295325": "修改密码失败", + "maa35c76bad68": "修改密码失败。请重试。", + "m60e951281376": "加载工作区 AI 扩展功能失败", + "m59273bcdd9e5": "加载工作区用量失败", + "m2805f0287fdb": "你尚未加入任何工作区。请从仪表盘创建工作区后继续。", + "m6ccebcddccab": "加载工作区设置失败:", + "m2575461a4ce1": "更新工作区失败:", + "mf14597dadd27": "发送邀请失败", + "ma36d7bf13293": "生成邀请链接失败:", + "m0b98a95233dd": "移除成员失败:", + "m701d45a366f8": "更改角色失败:", + "m7b7440bf5872": "撤销邀请失败:", + "mdab7736a5deb": "删除工作区失败:", + "m7a8439fc01b2": "加载知识库文件失败", + "m0c041edb03b2": "创建文件失败:", + "m8310a0555402": "响应中缺少身份验证 Token。", + "mdaaba33e2963": "你的账号未关联任何邮箱地址。", + "md3d849a730c9": "缺少身份验证 Token。", + "m70bc1979e806": "JWT 无效", + "m30aa69b29d9f": "发生未知错误。", + "m8ca83df14ee3": "获取数据失败", + "mc382f7378c37": "AI 连接失败 — 服务器可能正在重启。请稍后重试。", + "m4a7f23ba49c7": "未收到服务器返回的响应流。", + "m872423b25059": "连接已中断 — 服务器可能已重启。请重新发送消息。", + "mbeb845033bf7": "生成项目脚手架失败", + "m07feb1207cae": "加载文件失败", + "me9b9dd4d2b1c": "加载该文件失败", + "me1d8e8c18664": "此导入的应用使用 Supabase。连接你的 Supabase 项目后,它即可读写真实数据 — 无需手动编辑 .env。", + "m09ad32065f6f": "下载项目失败", + "m0b87cc7d93d2": "请根据我的反馈完善该计划。", + "m5b11c7d71bdc": "发布/部署失败,错误信息如下:", + "m7fb831b82fd3": "此邀请链接缺少令牌。", + "mbc7983bc3fda": "此邀请无效、已过期或已被使用。", + "m626c6e175a78": "连接超时。如果你已在 GitHub 上完成 OAuth 授权,请重新加载此页面并检查 /admin/ai-settings。", + "m51f74a42cc06": "还没有工作区。请重新加载页面后重试。", + "mfe32924b26f0": "无法保存。请重试。", + "m16efcd21d74f": "无法保存", + "m52a6ef302b8e": "创建文件夹失败:", + "mcbd22b6cc368": "重命名文件夹失败:", + "m5833eb5e8cd9": "删除文件夹失败:", + "m0a8d4fd66444": "创建工作区失败", + "meee812e53de7": "创建项目副本失败:", + "maf2035a41750": "加载图片失败", + "mea7d976ce045": "读取文件失败", + "mafaba68c1867": "处理文件失败:", + "m1a7cd149848a": "处理图片失败:", + "m3790b322709f": "加载功能失败", + "m6a8bcb8d2639": "加载用户失败", + "m51cc2811d054": "未检测到麦克风。请插入或启用麦克风后重试。", + "m683bdca05a39": "未收到响应流。", + "md901d334eaee": "连接 AI 失败。服务器可能正在重启。", + "mbabb88c7fea9": "添加账号失败", + "m885e022949b4": "无法将模型服务商设为工作区可用", + "ma08b22ea84b8": "此设置仅影响你使用的 AI 模型,并优先于下方的工作区默认设置。其他成员仍使用工作区默认模型,除非他们也设置了个人偏好。留空则沿用工作区默认设置。", + "me21fa38b5758": "保存模型服务商失败", + "mc19db501d4d5": "加载 GitHub 账号失败:", + "m271110a8d8e9": "加载模型服务商失败:", + "m31812c8a3982": "加载 AI 默认设置失败:", + "m4a7d1fa983ed": "加载用户 AI 偏好设置失败:", + "m1bdc0c1294b1": "加载模型失败:", + "m9f7cbd819667": "加载用户分配失败:", + "mfe1883f165bb": "加载模型服务商目录失败", + "ma45a37ddcc32": "连接测试失败", + "m199ba4b7799e": "加载用量概览失败:", + "me2e568f047d7": "加载用量历史记录失败:", + "m11521761e8d3": "加载用量明细失败:", + "m98b998323671": "加载工作区用量概览失败:", + "m01f10012cfac": "加载工作区成员用量失败:", + "m27267450b58d": "加载工作区模型服务商用量失败:", + "md5f7065f5590": "加载每小时活动数据失败:", + "med310a04d2a6": "加载 Token 拆分失败:", + "m01d3102608d8": "加载额度失败:", + "m09514d591e07": "加载成员模型用量明细失败:", + "me36cf975f831": "加载 Copilot 账户用量失败:", + "m2bfd1efce499": "加载用量最高的用户失败:", + "mb33f0b9ffefd": "加载平台用量概览失败:", + "mbfc86ed12ce0": "加载平台用户失败:", + "me96aeec114fc": "加载平台 Copilot 账户失败:", + "mdccd1f5ef168": "加载平台自定义模型服务商失败:", + "m1798aab66965": "加载平台模型失败:", + "mcd51884893e0": "发起结账失败", + "m64a1feb5d37a": "打开账单门户失败", + "m2bbab4a2c5d2": "发起充值结账失败", + "mf9af667d451a": "加载该文件夹中的项目失败:", + "m29269e5e9a31": "添加项目到文件夹失败:", + "m518e6db15484": "创建项目失败", + "mb7668a581f59": "断开连接失败", + "m2c8a751cc59c": "该仓库已导入过,请查看你的项目列表。", + "mddeafa3a6bff": "加载模板失败", + "mfec94ff32afa": "创建环境失败", + "m775e5142a0b0": "AI 响应时间过长。你的工作内容不会丢失。", + "m1ed48e13f504": "无法通过 AI 模型服务商的身份验证。请检查你的 API 密钥。", + "m6519f92fc1e8": "AI 在构建过程中遇到错误,可以尝试自动修复。", + "macc567972bd9": "所选模型无响应,请尝试切换其他模型。", + "m79d71120bff3": "该提示词已失效。", + "med2052a25624": "解决冲突失败", + "m02c981a0b3e5": "中止合并失败", + "m06fbbd1227cb": "切换账号失败", + "m3ba5eb2c517c": "恢复版本失败", + "m0fff3eaed3ba": "加载指标失败", + "m11660a0100e7": "加载上下文文件失败", + "me5601bf24b32": "新的 Supabase 项目已就绪,凭证已连接。请现在继续构建——按照本项目框架的惯例使用 Supabase 环境变量(参见上方的环境变量规则),并确保 SUPABASE_SERVICE_ROLE_KEY 仅保留在服务端。", + "m92e733c93623": "所请求的集成现已连接。请继续构建,并使用已连接集成块中的环境变量和工具。", + "m9fc4fcabe3ce": "响应体为空", + "m6488ad70750a": "此步骤耗时较长,请稍候…", + "m6d415794dcd0": "方案已批准。请立即开始逐步构建,遵循 .doable/plan.md 中的计划。", + "m6b89042219d2": "批准方案失败:", + "m5adf207f5d2f": "放弃方案失败:", + "mcad1033336ed": "获取状态失败", + "me7acfaa4d990": "加载仓库失败", + "m20065c697e90": "获取文件树失败", + "m00d44a640200": "获取文件树失败:", + "m7d36047f62cb": "读取文件失败:", + "ma11e2c2cca33": "保存文件失败", + "m8837dabd1b3f": "保存文件失败:", + "mfd7ee8c9b765": "创建文件失败", + "m4be7167b42f2": "删除文件失败", + "m02f362d9d360": "删除文件失败:", + "m3342fc6ab864": "切换分析功能失败:", + "m854ffc76dae2": "未发现漏洞", + "m6d74aa85ab11": "未发现硬编码密钥", + "m3796755a6d14": "源文件中未发现敏感数据", + "m5884884d4a46": "未发现安全反模式", + "mc79f9389a95a": "保存失败:", + "m6e99e5419d22": "创建文件夹失败", + "mbba9caec6786": "重命名文件失败", + "m6b79e319f042": "移动文件失败", + "m23eba0b9be4d": "重命名文件失败:", + "mf46a9d658a25": "复制路径到剪贴板失败", + "m9086a92b0640": "创建上下文文件失败:", + "m12f902a8ad17": "加载版本失败", + "mcc3b8b19aabe": "未选择版本", + "m849d793bef40": "分配环境失败:", + "mb7d8d2c9a4b3": "加载环境失败", + "m99af0e812303": "创建失败", + "me8d8c2aa2455": "启动 OAuth 流程失败", + "m54a5f040fdc6": "启动增强认证失败", + "m81c865717d30": "保存凭证失败", + "m2dd7d312a651": "加载集成失败", + "m8eb4917bbe54": "更新失败", + "m88563d1f786d": "无需认证", + "m81454f428d2e": "加载目录失败", + "m364e701ac186": "提交举报失败", + "mb498c7ef2e2b": "添加服务器失败", + "mfb23f43b0848": "已发起连接测试", + "mf69e33af723e": "无法发现此服务器的 OAuth 端点。请检查服务器 URL 是否仍可访问。", + "m8fd9698f6822": "启动重新认证失败", + "me0e158d1a1c5": "删除项目失败", + "m25446f2f1d63": "加载 AI 设置失败", + "m5fc4c4b3e470": "添加域名失败", + "mfbc3b14bc5b6": "移除域名失败", + "ma4b17bc7db59": "你有未保存的更改", + "m3d99cc91be52": "加载速率限制设置失败", + "m78bef06b934f": "加载 API 密钥失败", + "mac0faf623b6b": "创建密钥失败", + "md3b8762758d8": "撤销密钥失败", + "m03ccf434d293": "设置项目环境失败:", + "mb84177fa1580": "加载项目失败", + "meacb01abdcf6": "获取数据 Token 失败", + "m6c1e1de39441": "加载架构失败", + "m9ed1f7cf0aba": "删除表失败", + "ma6013efaacd9": "重置数据库失败", + "m1a8dccc9e37f": "加载迁移失败", + "md18e10549a59": "启用行级安全失败", + "m6938cc96576b": "加载 MCP 服务器失败", + "m6b8d7a31a410": "加载技能与规则失败", + "m78f5005a18ba": "加载技能失败", + "mac674f0b0e04": "撤销邀请失败", + "mdf556f74a44f": "生成链接失败", + "m978a1dc5401a": "复制到剪贴板失败", + "m8a95759bc08a": "删除工作区失败", + "m12b33b8cab97": "未选择工作区", + "m1bfb9a169566": "GPT-5.5、GPT-5.4、GPT-4.1、o3、o4 等 — OpenAI 全系列模型", + "ma57ba2df86e9": "Anthropic 的 Claude Opus 4.7、Sonnet 4.6 和 Haiku 4.5", + "m42f002bd954b": "通过 Google AI Studio 使用 Gemini 3.1 Pro、3.5 Flash、2.5 Pro 和 Flash", + "m7059e2430151": "托管于 Microsoft Azure 的 OpenAI 模型(GPT-5.5、5.4、4.1、4o)", + "m11a4f35f2288": "通过 AWS Bedrock 使用基础模型(Claude、Llama 等)", + "mf401c755a254": "Google Vertex AI,提供 Gemini、Claude 等模型", + "mef12689c0df3": "通过一个 API 访问所有模型服务商的 200+ 模型", + "m281caa6db5e3": "开源模型,推理速度快", + "m3fbb3a60d15a": "为开源模型提供极速推理", + "mcbf219b50afc": "跨 LLM 服务商智能路由,兼顾最优成本与质量", + "m62c9cd419e85": "精挑细选并经过基准测试、针对编程智能体优化的 AI 模型 — 按量付费", + "m0d9934ad122e": "低成本开源编程模型 — 首月 $5,之后 $10/月", + "m45ac1366f829": "Kimi K2.6(262k 上下文)— 来自 Moonshot AI 的长上下文自主智能体模型", + "m7e60fda55835": "通过阿里云 DashScope 使用 Qwen 3.6 Plus(1M 上下文)及其他模型", + "mdd88cf49f85c": "来自智谱 AI(清华背景)的 GLM 模型", + "mad1621b95174": "通过百度千帆使用 ERNIE 及其他模型", + "me5c0e7d030c2": "来自字节跳动火山引擎的豆包模型", + "mea917b1e5993": "MiniMax M2.7(205k 上下文)和 M2.5 — 强大的编程与智能体模型", + "m2f40080fde12": "具备强大推理能力的 Step 模型", + "mc0fd27dd2462": "来自李开复 01.AI 的 Yi 系列模型", + "mca46a1f353d1": "腾讯的混元大语言模型", + "m0789c34b7782": "采用晶圆级 AI 芯片的超快推理", + "m90e31bb9ef46": "AI21 Labs 的 Jamba 和 Jurassic 模型", + "m1e3b881b6bf5": "去中心化 AI 算力市场", + "m94e4ba89adce": "面向热门开源模型的无服务器推理", + "m162c0405e75f": "NVIDIA 优化的模型推理微服务", + "mc02a911cc422": "在 Cloudflare 全球边缘网络上运行 AI 模型", + "m8c6e1ff78019": "具备 GPU 基础设施的欧洲 AI 云", + "md2520b053464": "提供 AI 推理端点的法国云服务商", + "mbb50ba53b742": "经济实惠的 AI 推理平台", + "m1c9a4f83f2ba": "按模型提供端点的无服务器 AI 平台", + "mc62c862895c9": "提供主权 AI 端点的欧洲云", + "m803f5c2de1fc": "超快 LPU 推理——免费套餐,无需信用卡", + "m4a6191e28da1": "Mistral Large 3、Medium 3、Small 4 和 Codestral 2508", + "m34fc1656f697": "面向企业的 RAG 与 Command 模型", + "m279d41d16c35": "来自 xAI 的 Grok 4.20(2M 上下文)、Grok 4.3(1M 上下文)、Grok 4.1 Fast 和 Grok 3 Mini", + "m61f057961dce": "DeepSeek V4 Pro 与 Flash——1M 上下文,来自中国的开放权重 MoE", + "mcb5d90692af1": "具备实时网络访问能力的搜索增强 AI", + "me64591b66e23": "在定制硬件上实现高吞吐 AI 推理", + "m98b29bed00e9": "面向 LLM 和图像生成的平价 GPU 云", + "m7bbc04b4ac78": "去中心化 AI 推理基础设施", + "mf0219f5a51a9": "一条命令即可在本地运行 LLM——最受欢迎的本地引擎", + "m21b0f67360f6": "用于发现、下载并运行本地 LLM 的桌面应用", + "m299c12786d97": "采用 PagedAttention 的高吞吐 LLM 服务", + "m176f619ac21e": "依赖极少的 C/C++ LLM 推理", + "m6f92db761337": "支持本地模型的开源桌面 AI 助手", + "m01dc4dbe696e": "可在本地运行、支持多种后端的 OpenAI 即插即用替代方案", + "m244fded4e09a": "隐私优先的本地 AI——可在消费级硬件上运行", + "m230665563339": "不支持工具调用,也不支持视觉——是主要引擎中功能最受限的", + "mdfdaf12a82f2": "用于运行大语言模型的 Gradio Web UI", + "ma0b5c98fbd84": "易用的 GGUF 运行器,内置 Web UI", + "m45540635cd46": "HuggingFace 的 Text Generation Inference", + "m68cec3ffa8b3": "自托管 AI 编程助手", + "mb7d79c357b8f": "Mozilla 出品的单文件可执行 LLM", + "m23445c5d1873": "Jan 团队推出的本地 AI 引擎——支持多引擎", + "m74a7ddeefd94": "将 LLM 作为 Docker 容器运行,内置 GPU 支持", + "me098f8bee7f4": "上海人工智能实验室的高效 LLM 部署工具包", + "md4909cab2e30": "面向大语言与视觉模型的快速服务框架", + "m5ce23da7d641": "基于 ExLlamaV2 的 API 服务器,用于快速 GPTQ/EXL2 推理", + "m13b1820c01c7": "面向通用 LLM 部署的机器学习编译", + "mf24ad819b717": "面向角色扮演与创意用途的高性能推理引擎(vLLM 分支)", + "m2a746b70859f": "支持本地与云端模型的桌面 AI 聊天应用", + "mbeac9f3fa80a": "面向本地与远程 LLM 的自托管 Web 界面", + "mf0348548ae93": "支持多家模型服务商的开源类 ChatGPT 界面", + "m906f3d903741": "OAuth 认证失败。请重试。", + "mfd033bff00ba": "访问被拒绝。请重试。", + "m84c480693ab2": "你的注册未获批准。", + "mc4da52bf3ef6": "AI 设置已保存", + "m569a3f9b4fa7": "AI 设置已重置", + "m2e9fd8e7d617": "已批量应用到 {v0} 位用户 — {v1}", + "m3d8ef18bd4f0": "{v0} → {v1}", + "m702238944012": "{v0} → {v1} 方案", + "mff17b501efe0": "已更新 {v0} 的额度", + "ma7e0127349ec": "{v0} {v1} 失败", + "m176685608555": "已解除对 {v0} 的封禁", + "m8fc1d649fea0": "解除对 {v0} 的封禁失败", + "mab729c2f1cd7": "已删除“{v0}”", + "m2e5063f18b58": "删除“{v0}”失败", + "mcae3da3b84cd": "已删除 {v0} 个项目{v1}", + "m8281f2bca24e": "无法加载 Discover 信息流,请重试。", + "mcd99493692c6": "无法加载项目,请重试。", + "mad1c9c1a3f66": "仅工作区所有者 / 管理员可以更改工作区默认设置。", + "me5f88a6a15eb": "工作区 AI 默认设置已保存。", + "m96d8a2f81d45": "text-amber-400 bg-amber-500/10", + "meb2135781360": "text-blue-400 bg-blue-500/10", + "m80e515468102": "text-muted-foreground bg-muted", + "m29145bd2ff95": "技术栈、约定、领域术语", + "m267eae2e206e": "AI 需遵循的规则", + "m3bd961d29f18": "品牌语调与风格", + "m19c44fb9ed12": "核心价值观与使命", + "mf1022ee92088": "长期有效的事实与偏好", + "m9c559d4d4f2c": "用户上下文与背景", + "mbf180e7a2452": "项目路线图与里程碑", + "mc44fbad1ceff": "模型服务商拒绝了访问。", + "m0012375416df": "缺少授权码。", + "m0e2226b5235f": "欢迎", + "m5bbbe53187ad": "登录", + "m84e1ec2c5bd3": "AI 模型服务商", + "mf9191531404c": "Cloudflare", + "mad9ff7b7934e": "方案与计费", + "mfd72092904a8": "选择模型服务商", + "m40611abbdda2": "验证", + "mb20ee2a85fa5": "正在规划…", + "mb68613d48751": "等待你补充信息", + "mc3ec64928d7d": "正在读取文件…", + "mfeee86f87fe7": "正在编写代码…", + "m2ff5dfc77241": "正在执行命令…", + "mbea44ca44951": "正在修复问题…", + "m95de7a5b1f8f": "正在安装依赖包…", + "m280d3efaadd1": "正在运行测试…", + "md53b790e544c": "正在回复…", + "md353a99eb455": "已取消", + "mcf65fc4a78bc": "正在加载页面…", + "m566167b27677": "正在分析性能...", + "m9b0245d6e807": "正在检查无障碍...", + "m194254c2fabd": "正在生成报告...", + "m3981a2b9c1ef": "通讯", + "m85c1562cd9ce": "开发者工具", + "m12f9e542a4a5": "CRM 与销售", + "ma4ca9a859b99": "财务与支付", + "m4edf08238dde": "AI 与机器学习", + "m31423c3c9989": "数据与存储", + "m8dfdbc2ef439": "社交媒体", + "m572480ceef9b": "电子商务", + "m58a34ff5ee9e": "项目管理", + "med07c04922e0": "客户支持", + "m15e68b1f4657": "人力资源", + "md909750b1bbb": "自动化", + "m05e43eb0f640": "用户名与密码", + "m61bebbf883a8": "Web 服务", + "m04520ef10d76": "HTTP 流式传输", + "mb192572d71ea": "HTTP SSE", + "mb7b2963682a5": "内置应用", + "m7fdfda5f50a4": "托管", + "mfe00af08cc4f": "已保存 {v0}", + "m4dd069cac807": "项目删除成功", + "m2bc6b9b66cbf": "转移请求已发送。接收者将收到一封确认邮件。", + "m04d2a1d27e3f": "Doable设置已保存。", + "ma01bbf2233a1": "请输入 \"ERASE\" 以确认。", + "mbed8e537b6cb": "已清除 {v1} 张表中的 {v0} 行。模式:{v2}。", + "m0880f7d59cd3": "已添加域名 {v0}。请在下方配置 DNS 记录。", + "m8884f64ece53": "{v0} 现已生效!", + "m186cc53091ad": "域名已移除", + "m5a8a5887401e": "项目设置已保存", + "mdb4653c7fed7": "速率限制设置已保存", + "mca702c65aac4": "API 密钥已创建 — 请立即复制,之后将不再显示", + "m697393c778b5": "密钥已撤销", + "me4dc2f78bb78": "已向 {v0} 发送邀请", + "m6afe87e532b3": "{v0} 已被移除", + "m958814af76e3": "已将 {v0} 的角色更新为 {v1}", + "m5aebb558ca6a": "已撤销对 {v0} 的邀请", + "m255cd0e91bb6": "邀请链接已生成", + "ma459ff6332b7": "工作区已成功删除", + "m6bdabff6ddfa": "转让请求已发送。", + "mdfbfb561815a": "工作区设置已保存", + "m945131b556b7": "让每位 FDE,携前沿智能深入企业现场", + "mbe8ba6b03cc1": "理解业务需求,构建可运行应用,让 AI 从演示走向交付。", + "m45855bb05ece": "我想把一个可运行的应用分享给朋友。", + "m8870ef6e570f": "部署应用 → 分享访问地址。", + "m7b14e3ebcb54": "我想让其他人以我的项目为起点,创建自己的副本。", + "m0697819879dd": "分享到应用广场。", + "me4b4d937bb3c": "我整理了一套实用的技能与规则,希望其他人也能安装使用。", + "ma6855cfa2e04": "上架到应用市场。", + "m92add4e44710": "我想为自己搭建的 AI 环境提供付费使用。", + "mc1e189e00075": "设置价格并上架到应用市场(需要配置 Stripe Connect)。", + "m11b39c93777e": "智能体", + "ma6e600a10fed": "上下文", + "m64fce9d5ffd4": "例如:只读规划工具", + "mbc1a02882357": "例如:始终分点简洁回答,不透露内部定价;不确定时明确说明。", + "m6976f80ee219": "例如:工作台、设置、定价", + "m0868745e457a": "例如:我的应用", + "m11a59c70fe9f": "例如:始终用俳句回答。", + "m81c1f9879c76": "例如:React 最佳实践", + "m593af471fb94": "例如:TypeScript 编码规范", + "m22d3c604d149": "例如:claude-sonnet-4 (留空则自动选择)", + "mc6a41eb77538": "例如:gpt-4o", + "m57bf75e785b4": "例如:gpt-4o, claude-sonnet-4", + "m3d0e1a4bef76": "例如:POST /chat", + "m10571c479770": "例如:style-guide, api-docs", + "m8987aa914076": "例如:MiniMax-M2.7, gpt-4o, claude-sonnet-4", + "m644d8dedb20f": "例如:grok-3, qwen-turbo, llama-3.1-70b", + "m7f71b9ebafee": "例如:mixtral-8x7b, llama-3.1-70b", + "mad3913747c59": "例如:password=\\\\S+", + "m0d042ad55974": "例如:claude-sonnet-4 (留空则自动选择)", + "mdeee27768716": "例如:React + Supabase", + "m228e712922fb": "例如:Notion, Slack, My API", + "m34496619eba6": "例如:text-embedding-3-small 或 gemini-embedding-001", + "m80ef0ed787b1": "自定义 OpenAI 兼容接口", + "mdc1249ded00f": "第 {current} 步,共 {total} 步", + "m86d376d01c97": "显示全部 {count} 个模型服务商", + "m781978fa4c25": "(当前显示 {count} 个常用服务商)", + "m3ca7d842d120": "计划", + "me6c13915614a": "执行", + "me012cf0c64ea": "让想法成为现实,{name}", + "mb48bddfa2484": "今天想做些什么,{name}?", + "m69d3f0312d50": "准备好开始了吗,{name}?", + "m8449d78cdc66": "想到就去做,{name}", + "m79824f18e830": "这次准备发布什么,{name}?", + "m4fc94bed6b66": "描述你想构建的业务流程…", + "m5dd9c70d5861": "创建包含定价方案的 SaaS 产品官网…", + "m082a69fe14eb": "创建带有动效的作品集网站…", + "m8e15a147e1fa": "设计一个任务管理应用…", + "m5d8436b7898b": "创建支持下单结算的电商应用…", + "mb698b2eb1332": "搭建社交媒体数据看板…", + "mce4fad2f76c1": "创建一个食谱分享平台…", + "m80ab5a32d5fa": "设计一个运动记录应用…", + "mc312e5c16367": "创建支持 Markdown 的博客…", + "m2376d6697630": "创建一个实时聊天应用…", + "mb5d9619378c8": "搭建一个发票管理系统…", + "m917131e15fce": "正在准备工作区…", + "mfe8383d5a335": "正在创建项目骨架…", + "md30642dc738e": "正在创建项目文件…", + "me232bcde0526": "正在创建项目文件…", + "ma3277495f754": "正在安装依赖…", + "m9d7a7a4c4b38": "正在启动预览服务…", + "m723a6d7e4364": "正在准备工作区…", + "ma2ccc3533bd6": "正在准备实时预览…", + "m19e5fe04c9a2": "正在准备运行环境…", + "m4a7624b24100": "正在启动实时预览,代码变更将即时呈现。", + "m01d89a8ad232": "AI 仍在处理你的项目…", + "m05222d08b282": "正在准备生成演示文稿…", + "mb0eaeacb1b36": "正在撰写回复…", + "mc898850137a8": "正在连接 AI…", + "m426613755962": "正在分析你的需求…", + "m1a7f1e13e7ad": "任务已取消", + "mb4739a4f0865": "正在思考…", + "m0149c7b12cba": "正在解析 {package}…({count} 个依赖包)", + "md5419b7b64cb": "已安装 {count} 个依赖包", + "m5f2d69594194": "正在安装依赖包…({seconds} 秒)", + "mb708e0e2313c": "正在下载并链接依赖包…({seconds} 秒)", + "m79c009d210ab": "依赖安装完成({seconds} 秒)", + "m0e2c8a0f7968": "正在加载预览…({seconds} 秒)", + "m9335b34496db": "正在下载依赖包…({seconds} 秒)", + "m322ee38b8f8f": "正在安装依赖…({seconds} 秒)", + "me2a11607dd18": "正在链接依赖包…({seconds} 秒)", + "mb661a5695b24": "即将完成…({seconds} 秒)", + "mfe98f42cd51a": "AI 对话", + "m5466ef4b84a5": "AI 对话与代码生成", + "me605122cbc04": "配置 AI 模型、模型服务商与强制设置", + "m7d6a0afa7884": "在预览中点选元素进行可视化编辑", + "mbac7a2b4b2a8": "Monaco 代码编辑器(开发者模式)", + "md974b925781d": "连接 GitHub 并同步项目", + "m624629124403": "发布 / 部署", + "mf2792c4a79d6": "发布项目至平台地址或自定义域名", + "m991a7731aca7": "为已发布应用使用自己的域名", + "m5a479c403e5b": "从模板创建项目", + "mfddc1730af3e": "已发布应用的内置访问分析", + "m92349d06fd0e": "账单与额度", + "me2dc79aa3ffc": "管理订阅与额度", + "m3e42eb218756": "查看并恢复历史版本", + "m2e2d90970121": "创建和管理工作区", + "m8ec6f568c9e2": "邀请和管理工作区成员", + "m767b6b8b1593": "配置集成与 MCP 服务器", + "m9e61318b08e7": "安全扫描与漏洞管理", + "maf48bcf0b951": "前端", + "mfa4bec978e4d": "全栈", + "mc6629edc7478": "禁用 {name}", + "mdd01fc045da3": "启用 {name}", + "m2a52bd3a58de": "工作区强制设置", + "mce28416a34d0": "用户偏好", + "m1d17f10c9a01": "工作区 Copilot 设置", + "m4c9f0ab64fff": "工作区自定义模型服务商", + "m356a31b41f9f": "工作区设置", + "m9062da45215a": "未配置模型", + "m06bde129f751": "自定义模型服务商(工作区默认)", + "m404dd0fc90d3": "GitHub Copilot(工作区默认)", + "mbc228f06a4ea": "正在理解你的需求…", + "m33e97951020d": "正在读取文件", + "m88efdc56ec01": "正在创建文件", + "m7fd76d274fb7": "正在更新文件", + "m1a446bee1668": "正在删除文件", + "m20c0b499fac0": "正在重命名文件", + "mbc9797766c2d": "正在搜索文件", + "m53b7a62c2b78": "正在查看项目结构", + "m2afb17673ff9": "正在执行命令", + "mb1a6be4b5c00": "正在启动预览", + "mcba0c8fabef9": "正在编辑文件", + "m91713a5d3c5b": "正在写入文件", + "md09a58e07d38": "正在替换文件", + "ma9a47efd4886": "正在删除文件", + "m15d4ba596aa0": "正在查看目录", + "m3957258571ff": "正在搜索代码", + "m4f27ff8a9cc5": "正在查找文件", + "md7ad4e191ef9": "正在执行命令", + "m5efc7bfe04a0": "正在执行命令", + "m6effe77ed662": "正在运行测试", + "m68e34b04db6e": "正在检查代码规范", + "me713536fedeb": "正在检查类型", + "m7dc0e0a3a1f5": "正在更新计划", + "mdf26331fb78b": "正在自动修复问题", + "m4e8b16c1f54b": "正在重试当前步骤", + "m5bb23468896b": "正在设计演示文稿…", + "m8ca687195aba": "优化界面样式", + "m7d95e21c9692": "适配手机和平板", + "m534cb2034f7d": "增加功能", + "m6ea57583614b": "排查并修复问题", + "mb80a37564fbb": "正在查询数据", + "me1338481990b": "正在读取数据库结构", + "mc3682617bf76": "正在执行数据库迁移", + "m3d60df7cd3a8": "正在确认需求", + "mc7c1762aa46c": "正在确认需求", + "m0ebb429fa86d": "正在执行任务", + "m4bc74b21357c": "正在执行任务", + "mfaefbbbf05cb": "正在搜索内容", + "m16970ed6824c": "正在搜索内容", + "m4fe2446c5d9a": "正在读取 {target}", + "m733d78fc0c8c": "正在创建 {target}", + "m2d680ebf7ad0": "正在更新 {target}", + "m58534c10200b": "正在删除 {target}", + "m2b8a5d29d7d1": "正在重命名 {target}", + "mb3712e7e124e": "正在安装 {target}", + "m460f508f8f46": "正在编辑 {target}", + "m689db228e3c6": "正在写入 {target}", + "m12ce3689b195": "正在替换 {target}", + "maae90d6ab181": "正在删除 {target}", + "mf9ed6916fef7": "第 {count} 步:{label}", + "mbb8ce4ef7aaa": "已应用 {count} 项更改", + "mfd1514afd62f": "以下是我的回答:\n\n{answers}", + "m6b7a91a49a2a": "开始构建!以下是已确认的计划:\n\n**{summary}**\n\n{steps}\n\n请依次完成各步骤。完整计划见 .doable/plan.md。", + "mff52ef58a138": "代码编辑器", + "m10d6e2392b1c": "安全中心", + "ma05f18eec8ce": "可视化编辑器", + "mcff2a9d647e2": "工作区成员", + "m5acc0da25133": "发现预览问题,正在修复…", + "m2127e84f4092": "正在修复预览问题…", + "me118ae85bb67": "正在添加所需功能", + "m82ba2b5792a6": "正在准备演示文稿", + "mb681b20c70f6": "正在渲染演示文稿", + "m83f857a021fe": "构建遇到问题,正在修复", + "mc57a09e8f369": "依赖包安装遇到问题", + "m5477a72320eb": "遇到问题,正在排查", + "m679e84cac5ea": "已添加到项目", + "m9cf6dbd76c0c": "更改已应用", + "m5ad3dbd1242a": "已读取", + "m313bf98ff918": "已读取项目结构", + "m227a147b3240": "搜索完成", + "m996f87b386e1": "已就绪", + "md9e44c03b78d": "构建完成", + "m7e8ae4865e72": "清理完成", + "mc884daae36e7": "已上线", + "m59ccecd04642": "遇到问题", + "m28628c237508": "正在执行:{target}", + "m62f328b65a01": "正在完善 {target}", + "m1e5628b48f6b": "正在查看 {target}", + "m7d0d333d12fa": "正在搜索 {target}", + "mf22270321c72": "正在清理 {target}", + "m1154e06d2d21": "正在执行 {target}", + "m186e66214b5a": "正在添加依赖 {target}", + "m93f848de10fd": "正在构建{context}:{target}", + "m6985ca1f4daa": "组件", + "mab1620a8c2e3": "界面元素", + "m2ad562319767": "功能", + "m57ffcc28d4b9": "工具函数", + "m90a7578caf87": "样式", + "m1dc5ae5b6817": "布局", + "mb7d64a922100": "配置", + "mcaf9f906b16a": "文档", + "m329430355fc1": "以下是我的回答:\n{answers}", + "mae9d0d1aff24": "正在加载项目…", + "me081c4bfb49e": "显示前 {count} 个步骤", + "mb528a28640bd": "展开完整提示词(约 {count} 千字)", + "m0c556fb76846": "显示 {count} 个项目,共 {total} 个", + "mc3aedd418ebf": "删除 {count} 个项目", + "m64af6de234a6": "显示第 {start}–{end} 项,共 {total} 项", + "m652aceea790a": "从空白开始", + "m681b16c2176f": "由 AI 生成", + "mf817b660ab75": "使用现成模板", + "me22006500c10": "工作区所有成员", + "m96f64f836aa3": "项目成员", + "ma0dff9932953": "先由 AI 制定方案,再开始执行", + "m7cbc9f73acfd": "由 AI 直接生成代码", + "m6496c935887f": "在聊天中换行", + "mf7dfc2c317b4": "切换代码视图", + "m87ab3cc0f01d": "切换预览", + "mcb2958c8aaca": "发布项目", + "mc13ff73b9098": "切换全屏", + "mc8df66c5fe3f": "关闭弹窗", + "mbb0ee409a3fa": "设计个人作品集网站", + "m99fb9cd2934b": "预览启动失败。", + "me64576a3b265": "预览启动失败(退出码 {code})。", + "mc196e9373911": "正在连接 AI 模型…", + "m829805cc6c58": "已完成 {count} 项操作", + "mcacdca0e9b99": "计划已完成", + "m9776f2e45ce3": "正在执行计划", + "m311d1760445a": "计划需要处理", + "mec71278eb553": "计划待继续", + "m5ee0169f4b8f": "进度反映已确认的步骤结果。", + "m1deff346b554": "当前没有正在执行的任务,未回报的步骤仍待确认。", + "m5776262a5788": "无法确认计划,请重试。", + "m8027f432a7fb": "界面语言", + "m0ea4ae59f939": "选择平台菜单和提示信息使用的语言。", + "m40cad2173656": "此设置仅影响平台界面。AI 回复和生成应用的语言由各自的指令决定。", + "mc3a720f0c8bd": "个人界面偏好", + "m6998dfbbd128": "界面语言不会改变 AI 回复或生成应用的语言。", + "m0beff060665e": "正在连接 AI…", + "me50a077692e0": "AI 正在处理任务…", + "m619eec4a7c1f": "AI 正在分析项目…", + "mdb3aec359d8f": "正在核对任务进度", + "m35ea86212979": "正在核对任务进度…", + "ma5d341a5b0db": "结果待确认", + "me125680b1485": "任务尚未完成,已停止", + "mefaddeef953d": "无法确认任务状态。请继续任务,或选择支持工具调用的模型。", + "m87722fea3039": "多次尝试未取得新进展。已完成的步骤已保留,可以继续任务。", + "m30e9da875aed": "本轮已达到续执行上限。已完成的工作已保留,可以继续任务。", + "me017a9daa432": "未收到完成结果", + "m5b9442561788": "已记录 {count} 项操作" + } +} diff --git a/apps/web/next.config.ts b/apps/web/next.config.ts index 176a9e73..7cf81c20 100644 --- a/apps/web/next.config.ts +++ b/apps/web/next.config.ts @@ -1,4 +1,5 @@ import type { NextConfig } from "next"; +import createNextIntlPlugin from "next-intl/plugin"; const nextConfig: NextConfig = { output: "standalone", @@ -17,7 +18,11 @@ const nextConfig: NextConfig = { allowedDevOrigins: (() => { const fromUrl = (u: string | undefined) => { if (!u) return null; - try { return new URL(u).hostname; } catch { return null; } + try { + return new URL(u).hostname; + } catch { + return null; + } }; const apex = (host: string) => { if (/^\d+\.\d+\.\d+\.\d+$/.test(host)) return host; @@ -26,10 +31,16 @@ const nextConfig: NextConfig = { }; // Dev-only cross-origin allowlist. Derive from the install env; never // hardcode our own domain so self-hosters don't carry `*.doable.me`. - const host = fromUrl(process.env.NEXT_PUBLIC_APP_URL) - || fromUrl(process.env.NEXT_PUBLIC_API_URL) - || ""; - return [host, host ? `*.${apex(host)}` : "", "localhost", "127.0.0.1"].filter(Boolean); + const host = + fromUrl(process.env.NEXT_PUBLIC_APP_URL) || + fromUrl(process.env.NEXT_PUBLIC_API_URL) || + ""; + return [ + host, + host ? `*.${apex(host)}` : "", + "localhost", + "127.0.0.1", + ].filter(Boolean); })(), experimental: { serverActions: { @@ -54,9 +65,13 @@ const nextConfig: NextConfig = { }, async redirects() { return [ - { source: '/settings/ai', destination: '/ai-settings', permanent: false }, - { source: '/settings/usage', destination: '/usage', permanent: false }, - { source: '/settings/billing', destination: '/billing', permanent: false }, + { source: "/settings/ai", destination: "/ai-settings", permanent: false }, + { source: "/settings/usage", destination: "/usage", permanent: false }, + { + source: "/settings/billing", + destination: "/billing", + permanent: false, + }, ]; }, async rewrites() { @@ -64,7 +79,7 @@ const nextConfig: NextConfig = { // Bare /favicon.ico requests (crawlers, browsers without ) // are served by the dynamic icon.tsx route. Standalone build doesn't auto-alias // icon.tsx to /favicon.ico, so we wire it explicitly. - { source: '/favicon.ico', destination: '/icon' }, + { source: "/favicon.ico", destination: "/icon" }, ]; }, async headers() { @@ -111,7 +126,13 @@ const nextConfig: NextConfig = { // allow="microphone; autoplay". const apiUrlRaw = process.env.NEXT_PUBLIC_API_URL || ""; const previewOrigin = apiUrlRaw - ? (() => { try { return new URL(apiUrlRaw).origin; } catch { return ""; } })() + ? (() => { + try { + return new URL(apiUrlRaw).origin; + } catch { + return ""; + } + })() : ""; const micList = previewOrigin ? `(self "${previewOrigin}")` : "(self)"; // BUG-016: CSP was applying `unsafe-eval` + `unsafe-inline` to every @@ -206,5 +227,4 @@ const nextConfig: NextConfig = { }, }; -export default nextConfig; - +export default createNextIntlPlugin("./src/i18n/request.ts")(nextConfig); diff --git a/apps/web/package.json b/apps/web/package.json index 5668032c..cb77e7a4 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -35,6 +35,7 @@ "lucide-react": "^0.468.0", "monaco-editor": "^0.55.1", "next": "^16.2.0", + "next-intl": "4.14.8", "qrcode": "^1.5.4", "react": "^19.2.0", "react-dom": "^19.2.0", @@ -48,8 +49,8 @@ "@opennextjs/cloudflare": "^1.17.1", "@tailwindcss/postcss": "^4.0.0", "@types/node": "^22.10.5", - "@types/react": "^19.2.0", "@types/qrcode": "^1.5.5", + "@types/react": "^19.2.0", "@types/react-dom": "^19.2.0", "@typescript-eslint/eslint-plugin": "^8.20.0", "@typescript-eslint/parser": "^8.20.0", diff --git a/apps/web/src/app/(auth)/error.tsx b/apps/web/src/app/(auth)/error.tsx index 76631e99..d4f302d5 100644 --- a/apps/web/src/app/(auth)/error.tsx +++ b/apps/web/src/app/(auth)/error.tsx @@ -1,4 +1,5 @@ "use client"; +import { useUiText } from "@/i18n/use-ui-text"; import { useEffect } from "react"; import Link from "next/link"; @@ -10,26 +11,34 @@ export default function AuthError({ error: Error & { digest?: string }; reset: () => void; }) { + const ui = useUiText(); + useEffect(() => { console.error("Auth error:", error); }, [error]); return (
-

Authentication Error

-

{error.message || "Something went wrong."}

+

+ {ui("Authentication Error")} +

+

+ {ui(error.message) || ui("Something went wrong.")} +

- Back to Login + {" "} + {ui("Back to Login")}{" "}
diff --git a/apps/web/src/app/(auth)/forgot-password/page.tsx b/apps/web/src/app/(auth)/forgot-password/page.tsx index 14f98299..f759df51 100644 --- a/apps/web/src/app/(auth)/forgot-password/page.tsx +++ b/apps/web/src/app/(auth)/forgot-password/page.tsx @@ -1,4 +1,5 @@ "use client"; +import { useUiText } from "@/i18n/use-ui-text"; import { useState, type FormEvent } from "react"; import Link from "next/link"; @@ -10,6 +11,8 @@ import { ArrowLeft, Loader2, Mail } from "lucide-react"; const API_URL = process.env.NEXT_PUBLIC_API_URL ?? "http://localhost:4000"; export default function ForgotPasswordPage() { + const ui = useUiText(); + const [email, setEmail] = useState(""); const [error, setError] = useState(null); const [isLoading, setIsLoading] = useState(false); @@ -28,8 +31,10 @@ export default function ForgotPasswordPage() { }); if (!res.ok) { - const body = await res.json().catch(() => ({ error: "Request failed" })); - throw new Error(body.error ?? "Request failed"); + const body = await res + .json() + .catch(() => ({ error: "Request failed" })); + throw new Error(body.error ?? ui("Request failed")); } setIsSubmitted(true); @@ -37,7 +42,7 @@ export default function ForgotPasswordPage() { if (err instanceof Error) { setError(err.message); } else { - setError("Something went wrong. Please try again."); + setError(ui("Something went wrong. Please try again.")); } } finally { setIsLoading(false); @@ -51,14 +56,18 @@ export default function ForgotPasswordPage() {

- Check your email + {" "} + {ui("Check your email")}{" "}

- If an account exists for {email}, - we've sent password reset instructions to your inbox. + {" "} + {ui("If an account exists for")}{" "} + {email} + {ui(", we've sent password reset instructions to your inbox.")}{" "}

- Didn't receive the email? Check your spam folder or{" "} + {" "} + {ui("Didn't receive the email? Check your spam folder or")}{" "}

- - Back to sign in + {ui("Back to sign in")}{" "} ); @@ -88,10 +97,14 @@ export default function ForgotPasswordPage() {

- Forgot your password? + {" "} + {ui("Forgot your password?")}{" "}

- No worries. Enter your email and we'll send you reset instructions. + {" "} + {ui( + "No worries. Enter your email and we'll send you reset instructions.", + )}{" "}

@@ -105,16 +118,16 @@ export default function ForgotPasswordPage() { > - {error} + {ui(error)} )}
- + {isLoading ? ( <> - - Sending... + {" "} + {ui("Sending...")}{" "} ) : ( - "Send reset instructions" + ui("Send reset instructions") )} @@ -145,8 +158,7 @@ export default function ForgotPasswordPage() { href="/login" className="inline-flex items-center gap-1.5 text-sm font-medium text-[hsl(var(--muted-foreground))] hover:text-[hsl(var(--foreground))] transition-colors" > - - Back to sign in + {ui("Back to sign in")}{" "}

diff --git a/apps/web/src/app/(auth)/login/page.tsx b/apps/web/src/app/(auth)/login/page.tsx index fd152ea2..f3d98aa8 100644 --- a/apps/web/src/app/(auth)/login/page.tsx +++ b/apps/web/src/app/(auth)/login/page.tsx @@ -1,4 +1,5 @@ "use client"; +import { useUiText } from "@/i18n/use-ui-text"; import { Suspense, useEffect, useState, type FormEvent } from "react"; import Link from "next/link"; @@ -20,9 +21,16 @@ const OAUTH_ERROR_MESSAGES: Record = { }; function LoginPageInner() { + const ui = useUiText(); + const router = useRouter(); const searchParams = useSearchParams(); - const { login, completeMfaLogin, isAuthenticated, isLoading: authLoading } = useAuth(); + const { + login, + completeMfaLogin, + isAuthenticated, + isLoading: authLoading, + } = useAuth(); // Redirect after sign-in (honor returnTo, fall back to dashboard). useEffect(() => { @@ -88,9 +96,9 @@ function LoginPageInner() { const errorParam = searchParams.get("error"); if (errorParam) { const fallback = messageParam ?? `Authentication error: ${errorParam}`; - setError(OAUTH_ERROR_MESSAGES[errorParam] ?? fallback); + setError(ui(OAUTH_ERROR_MESSAGES[errorParam]) ?? fallback); } - }, [searchParams]); + }, [ui, searchParams]); async function handleSubmit(e: FormEvent) { e.preventDefault(); @@ -128,19 +136,27 @@ function LoginPageInner() { router.push(target); } catch (err: unknown) { if (err && typeof err === "object" && "body" in err) { - const apiErr = err as { status?: number; body: { error: string; message?: string }; retryAfter?: number }; + const apiErr = err as { + status?: number; + body: { error: string; message?: string }; + retryAfter?: number; + }; if (apiErr.status === 429) { - const wait = apiErr.retryAfter ? ` Try again in ${apiErr.retryAfter} seconds.` : ""; - setError(`Too many login attempts.${wait}`); + const wait = apiErr.retryAfter + ? ` Try again in ${apiErr.retryAfter} seconds.` + : ""; + setError(ui("Too many login attempts.{v0}", { v0: wait })); } else if (apiErr.body.error === "PENDING_APPROVAL") { - setPendingMessage(apiErr.body.message ?? "Your signup is awaiting approval."); + setPendingMessage( + apiErr.body.message ?? "Your signup is awaiting approval.", + ); } else if (apiErr.body.error === "ACCOUNT_DENIED") { setError(apiErr.body.message ?? "Your signup was not approved."); } else { setError(apiErr.body.error); } } else { - setError("Something went wrong. Please try again."); + setError(ui("Something went wrong. Please try again.")); } } finally { setIsLoading(false); @@ -179,7 +195,7 @@ function LoginPageInner() { setMfaCode(""); } } else { - setError("Verification failed. Please try again."); + setError(ui("Verification failed. Please try again.")); } } finally { setIsLoading(false); @@ -192,7 +208,9 @@ function LoginPageInner() { const params = new URLSearchParams(window.location.search); const returnToRaw = params.get("returnTo"); const returnTo = - returnToRaw && returnToRaw.startsWith("/") && !returnToRaw.startsWith("//") + returnToRaw && + returnToRaw.startsWith("/") && + !returnToRaw.startsWith("//") ? returnToRaw : null; window.location.href = @@ -207,17 +225,22 @@ function LoginPageInner() { return ( <>

- You're on the list + {" "} + {ui("You're on the list")}{" "}

{pendingMessage}
); @@ -227,31 +250,39 @@ function LoginPageInner() { return ( <>

- Two-factor authentication + {" "} + {ui("Two-factor authentication")}{" "}

- Enter the 6-digit code from your authenticator app, or a recovery code. + {" "} + {ui( + "Enter the 6-digit code from your authenticator app, or a recovery code.", + )}{" "}

{error && (
- + - {error} + {ui(error)}
)}
- + {isLoading ? ( <> - - Verifying... + {" "} + {ui("Verifying...")}{" "} ) : ( - "Verify and continue" + ui("Verify and continue") )} @@ -290,7 +326,8 @@ function LoginPageInner() { return ( <>

- Sign in to your account + {" "} + {ui("Sign in to your account")}{" "}

{/* OAuth Buttons */} @@ -305,8 +342,8 @@ function LoginPageInner() { ) : ( - )} - Continue with GitHub + )}{" "} + {ui("Continue with GitHub")}{" "}
@@ -330,7 +367,8 @@ function LoginPageInner() {
- Or continue with email + {" "} + {ui("Or continue with email")}{" "}
@@ -346,16 +384,16 @@ function LoginPageInner() { > - {error} + {ui(error)} )}
- +
- + - Forgot password? + {" "} + {ui("Forgot password?")}{" "}
setShowPassword(!showPassword)} - aria-label={showPassword ? "Hide password" : "Show password"} + aria-label={ + showPassword ? ui("Hide password") : ui("Show password") + } > {showPassword ? ( @@ -416,7 +457,8 @@ function LoginPageInner() { htmlFor="remember" className="text-sm text-[hsl(var(--muted-foreground))] select-none cursor-pointer" > - Remember me + {" "} + {ui("Remember me")}{" "}
@@ -427,22 +469,24 @@ function LoginPageInner() { > {isLoading ? ( <> - - Signing in... + {" "} + {ui("Signing in...")}{" "} ) : ( - "Sign in" + ui("Sign in") )}

- Don't have an account?{" "} + {" "} + {ui("Don't have an account?")}{" "} - Sign up + {" "} + {ui("Sign up")}{" "}

diff --git a/apps/web/src/app/(auth)/reset-password/page.tsx b/apps/web/src/app/(auth)/reset-password/page.tsx index 8b1a10b2..c2bc293a 100644 --- a/apps/web/src/app/(auth)/reset-password/page.tsx +++ b/apps/web/src/app/(auth)/reset-password/page.tsx @@ -1,4 +1,7 @@ "use client"; +import { translateUiData } from "@/i18n/text"; + +import { useUiText } from "@/i18n/use-ui-text"; import { useState, useMemo, type FormEvent, Suspense } from "react"; import Link from "next/link"; @@ -47,6 +50,8 @@ function getPasswordCriteria(password: string) { } function ResetPasswordForm() { + const ui = useUiText(); + const router = useRouter(); const searchParams = useSearchParams(); const token = searchParams.get("token"); @@ -59,8 +64,14 @@ function ResetPasswordForm() { const [isLoading, setIsLoading] = useState(false); const [isSuccess, setIsSuccess] = useState(false); - const strength = useMemo(() => getPasswordStrength(password), [password]); - const criteria = useMemo(() => getPasswordCriteria(password), [password]); + const strength = useMemo( + () => translateUiData(getPasswordStrength(password), ui), + [ui, password], + ); + const criteria = useMemo( + () => translateUiData(getPasswordCriteria(password), ui), + [ui, password], + ); if (!token) { return ( @@ -69,16 +80,21 @@ function ResetPasswordForm() {

- Invalid reset link + {" "} + {ui("Invalid reset link")}{" "}

- This password reset link is invalid or has expired. Please request a new one. + {" "} + {ui( + "This password reset link is invalid or has expired. Please request a new one.", + )}{" "}

- Request new reset link + {" "} + {ui("Request new reset link")}{" "} ); @@ -91,16 +107,21 @@ function ResetPasswordForm() {

- Password reset successful + {" "} + {ui("Password reset successful")}{" "}

- Your password has been updated. You can now sign in with your new password. + {" "} + {ui( + "Your password has been updated. You can now sign in with your new password.", + )}{" "}

); @@ -111,13 +132,15 @@ function ResetPasswordForm() { setError(null); if (password !== confirmPassword) { - setError("Passwords do not match."); + setError(ui("Passwords do not match.")); return; } if (strength.score < 2) { setError( - "Password is too weak. Use at least 8 characters with uppercase, lowercase, and numbers." + ui( + "Password is too weak. Use at least 8 characters with uppercase, lowercase, and numbers.", + ), ); return; } @@ -132,8 +155,10 @@ function ResetPasswordForm() { }); if (!res.ok) { - const body = await res.json().catch(() => ({ error: "Request failed" })); - throw new Error(body.error ?? "Request failed"); + const body = await res + .json() + .catch(() => ({ error: "Request failed" })); + throw new Error(body.error ?? ui("Request failed")); } setIsSuccess(true); @@ -141,7 +166,7 @@ function ResetPasswordForm() { if (err instanceof Error) { setError(err.message); } else { - setError("Something went wrong. Please try again."); + setError(ui("Something went wrong. Please try again.")); } } finally { setIsLoading(false); @@ -155,10 +180,14 @@ function ResetPasswordForm() {

- Set new password + {" "} + {ui("Set new password")}{" "}

- Your new password must be different from your previous password. + {" "} + {ui( + "Your new password must be different from your previous password.", + )}{" "}

@@ -172,17 +201,17 @@ function ResetPasswordForm() { > - {error} + {ui(error)} )}
- +
setShowPassword(!showPassword)} - aria-label={showPassword ? "Hide password" : "Show password"} + aria-label={ + showPassword ? ui("Hide password") : ui("Show password") + } > {showPassword ? ( @@ -221,7 +252,8 @@ function ResetPasswordForm() { ))}

- Password strength: {strength.label} + {" "} + {ui("Password strength:")} {strength.label}

@@ -252,12 +284,12 @@ function ResetPasswordForm() {
- +
setShowConfirmPassword(!showConfirmPassword)} aria-label={ - showConfirmPassword ? "Hide password" : "Show password" + showConfirmPassword ? ui("Hide password") : ui("Show password") } > {showConfirmPassword ? ( @@ -283,13 +315,13 @@ function ResetPasswordForm() {
{confirmPassword.length > 0 && confirmPassword !== password && (

- Passwords do not match + {" "} + {ui("Passwords do not match")}{" "}

)} {confirmPassword.length > 0 && confirmPassword === password && (

- - Passwords match + {ui("Passwords match")}{" "}

)}
@@ -301,11 +333,11 @@ function ResetPasswordForm() { > {isLoading ? ( <> - - Resetting password... + {" "} + {ui("Resetting password...")}{" "} ) : ( - "Reset password" + ui("Reset password") )} @@ -315,8 +347,7 @@ function ResetPasswordForm() { href="/login" className="inline-flex items-center gap-1.5 text-sm font-medium text-[hsl(var(--muted-foreground))] hover:text-[hsl(var(--foreground))] transition-colors" > - - Back to sign in + {ui("Back to sign in")}{" "}

@@ -324,6 +355,8 @@ function ResetPasswordForm() { } export default function ResetPasswordPage() { + const ui = useUiText(); + return (

- Set new password + {" "} + {ui("Set new password")}{" "}

diff --git a/apps/web/src/app/(auth)/signup/page.tsx b/apps/web/src/app/(auth)/signup/page.tsx index 20d3cf41..d8af2874 100644 --- a/apps/web/src/app/(auth)/signup/page.tsx +++ b/apps/web/src/app/(auth)/signup/page.tsx @@ -1,4 +1,7 @@ "use client"; +import { translateUiData } from "@/i18n/text"; + +import { useUiText } from "@/i18n/use-ui-text"; import { useState, useEffect, useMemo, type FormEvent } from "react"; import Link from "next/link"; @@ -10,10 +13,16 @@ import { useAuth } from "@/hooks/use-auth"; import { getGitHubLoginUrl, getGoogleLoginUrl } from "@/lib/api"; import { Eye, EyeOff, Loader2, Check, X } from "lucide-react"; -import { getPasswordStrength, getPasswordCriteria, isValidEmail } from "./signup-utils"; +import { + getPasswordStrength, + getPasswordCriteria, + isValidEmail, +} from "./signup-utils"; import { GitHubIcon, GoogleIcon } from "./oauth-icons"; export default function SignupPage() { + const ui = useUiText(); + const router = useRouter(); const { register, isAuthenticated, isLoading: authLoading } = useAuth(); @@ -50,8 +59,14 @@ export default function SignupPage() { const [emailTouched, setEmailTouched] = useState(false); const [pendingMessage, setPendingMessage] = useState(null); - const strength = useMemo(() => getPasswordStrength(password), [password]); - const criteria = useMemo(() => getPasswordCriteria(password), [password]); + const strength = useMemo( + () => translateUiData(getPasswordStrength(password), ui), + [ui, password], + ); + const criteria = useMemo( + () => translateUiData(getPasswordCriteria(password), ui), + [ui, password], + ); const emailValid = useMemo(() => isValidEmail(email), [email]); async function handleSubmit(e: FormEvent) { @@ -59,24 +74,28 @@ export default function SignupPage() { setError(null); if (!emailValid) { - setError("Please enter a valid email address."); + setError(ui("Please enter a valid email address.")); return; } if (password !== confirmPassword) { - setError("Passwords do not match."); + setError(ui("Passwords do not match.")); return; } if (strength.score < 2) { setError( - "Password is too weak. Use at least 8 characters with uppercase, lowercase, and numbers." + ui( + "Password is too weak. Use at least 8 characters with uppercase, lowercase, and numbers.", + ), ); return; } if (!agreedToTerms) { - setError("You must agree to the Terms of Service and Privacy Policy."); + setError( + ui("You must agree to the Terms of Service and Privacy Policy."), + ); return; } @@ -112,7 +131,7 @@ export default function SignupPage() { const apiErr = err as { body: { error: string } }; setError(apiErr.body.error); } else { - setError("Something went wrong. Please try again."); + setError(ui("Something went wrong. Please try again.")); } } finally { setIsLoading(false); @@ -125,7 +144,9 @@ export default function SignupPage() { const params = new URLSearchParams(window.location.search); const returnToRaw = params.get("returnTo"); const returnTo = - returnToRaw && returnToRaw.startsWith("/") && !returnToRaw.startsWith("//") + returnToRaw && + returnToRaw.startsWith("/") && + !returnToRaw.startsWith("//") ? returnToRaw : null; window.location.href = @@ -140,15 +161,21 @@ export default function SignupPage() { return ( <>

- You're on the list + {" "} + {ui("You're on the list")}{" "}

{pendingMessage}

- Already approved?{" "} - - Sign in + {" "} + {ui("Already approved?")}{" "} + + {" "} + {ui("Sign in")}{" "}

@@ -158,7 +185,8 @@ export default function SignupPage() { return ( <>

- Create your account + {" "} + {ui("Create your account")}{" "}

{/* OAuth Buttons */} @@ -173,8 +201,8 @@ export default function SignupPage() { ) : ( - )} - Continue with GitHub + )}{" "} + {ui("Continue with GitHub")}{" "}
@@ -198,7 +226,8 @@ export default function SignupPage() {
- Or sign up with email + {" "} + {ui("Or sign up with email")}{" "}
@@ -214,16 +243,16 @@ export default function SignupPage() { > - {error} + {ui(error)} )}
- +
- + {emailTouched && email.length > 0 && !emailValid && (

- Please enter a valid email address + {" "} + {ui("Please enter a valid email address")}{" "}

)}
- +
setShowPassword(!showPassword)} - aria-label={showPassword ? "Hide password" : "Show password"} + aria-label={ + showPassword ? ui("Hide password") : ui("Show password") + } > {showPassword ? ( @@ -303,14 +335,15 @@ export default function SignupPage() { ))}

- Password strength: {strength.label} + {" "} + {ui("Password strength:")} {ui(strength.label)}

{/* Criteria checklist */}
{criteria.map((c) => (
{c.met ? ( @@ -325,7 +358,7 @@ export default function SignupPage() { : "text-[hsl(var(--muted-foreground))]" } > - {c.label} + {ui(c.label)}
))} @@ -335,12 +368,12 @@ export default function SignupPage() {
- +
setShowConfirmPassword(!showConfirmPassword)} aria-label={ - showConfirmPassword ? "Hide password" : "Show password" + showConfirmPassword ? ui("Hide password") : ui("Show password") } > {showConfirmPassword ? ( @@ -366,13 +399,13 @@ export default function SignupPage() {
{confirmPassword.length > 0 && confirmPassword !== password && (

- Passwords do not match + {" "} + {ui("Passwords do not match")}{" "}

)} {confirmPassword.length > 0 && confirmPassword === password && (

- - Passwords match + {ui("Passwords match")}{" "}

)}
@@ -390,21 +423,24 @@ export default function SignupPage() { htmlFor="terms" className="text-sm text-[hsl(var(--muted-foreground))] select-none cursor-pointer leading-snug" > - I agree to the{" "} + {" "} + {ui("I agree to the")}{" "} - Terms of Service + {" "} + {ui("Terms of Service")}{" "} {" "} - and{" "} + {ui("and")}{" "} - Privacy Policy + {" "} + {ui("Privacy Policy")}{" "}
@@ -416,25 +452,26 @@ export default function SignupPage() { > {isLoading ? ( <> - - Creating account... + {" "} + {ui("Creating account...")}{" "} ) : ( - "Create account" + ui("Create account") )}

- Already have an account?{" "} + {" "} + {ui("Already have an account?")}{" "} - Sign in + {" "} + {ui("Sign in")}{" "}

); } - diff --git a/apps/web/src/app/(dashboard)/admin/admin-components.tsx b/apps/web/src/app/(dashboard)/admin/admin-components.tsx index eb5ec592..497c51db 100644 --- a/apps/web/src/app/(dashboard)/admin/admin-components.tsx +++ b/apps/web/src/app/(dashboard)/admin/admin-components.tsx @@ -1,4 +1,5 @@ "use client"; +import { useUiText } from "@/i18n/use-ui-text"; import { useState } from "react"; import { @@ -41,43 +42,106 @@ export function FeatureRow({ }: { feature: FeatureFlag; onToggle: (key: string, enabled: boolean) => void; - onUpdate: (key: string, data: Partial>) => void; + onUpdate: ( + key: string, + data: Partial>, + ) => void; }) { + const ui = useUiText(); + const [expanded, setExpanded] = useState(false); return (
-
- {feature.label} - {feature.feature_key} + + {ui(feature.label)} + + + {feature.feature_key} +
- {feature.description &&

{feature.description}

} + {feature.description && ( +

+ {ui(feature.description)} +

+ )}
- {feature.min_plan && {PLAN_LABELS[feature.min_plan]}+} - {feature.min_role && {ROLE_LABELS[feature.min_role]}+} + {feature.min_plan && ( + + {ui(PLAN_LABELS[feature.min_plan])}+ + + )} + {feature.min_role && ( + + {ui(ROLE_LABELS[feature.min_role])}+ + + )}
-
{expanded && (
- - + onUpdate(feature.feature_key, { + min_plan: e.target.value || null, + }) + } + className="rounded-md bg-background border border-input text-xs text-foreground px-2 py-1 outline-none focus:border-brand-500" + > + {PLAN_OPTIONS.map((o) => ( + + ))}
- - + onUpdate(feature.feature_key, { + min_role: e.target.value || null, + }) + } + className="rounded-md bg-background border border-input text-xs text-foreground px-2 py-1 outline-none focus:border-brand-500" + > + {ROLE_OPTIONS.map((o) => ( + + ))}
@@ -89,27 +153,42 @@ export function FeatureRow({ // ─── AI Allocation Status Badge ───────────────────────────── export function AiStatusBadge({ row }: { row: UserAiAllocation }) { + const ui = useUiText(); + if (!rowHasAllocation(row)) { - return No AI configured; + return ( + + {ui("No AI configured")} + + ); } const side = rowActiveSide(row); const activeModel = rowActiveModel(row); if (side === "copilot" && row.copilot_account_id) { return ( - Copilot: {row.copilot_account_label ?? "Unknown"}{activeModel ? ` / ${activeModel}` : ""} + {" "} + {ui("Copilot:")} {row.copilot_account_label ?? ui("Unknown")} + {activeModel ? ` / ${activeModel}` : ""} ); } if (side === "custom" && row.provider_id) { - const typeName = row.provider_type ? row.provider_type.charAt(0).toUpperCase() + row.provider_type.slice(1) : "Provider"; + const typeName = row.provider_type + ? row.provider_type.charAt(0).toUpperCase() + row.provider_type.slice(1) + : "Provider"; return ( - {typeName}: {row.provider_label ?? "Unknown"}{activeModel ? ` / ${activeModel}` : ""} + {typeName}: {row.provider_label ?? ui("Unknown")} + {activeModel ? ` / ${activeModel}` : ""} ); } - return Configured; + return ( + + {ui("Configured")} + + ); } // ─── User Row with AI allocation ──────────────────────────── @@ -128,21 +207,48 @@ export function UserRow({ }: { u: UserAiAllocation; currentUserId: string; - accounts: Omit[]; - providers: Omit[]; + accounts: Omit< + ApiGitHubCopilotAccount, + "workspace_id" | "added_by" | "created_at" | "updated_at" + >[]; + providers: Omit< + ApiAiProvider, + "workspace_id" | "added_by" | "created_at" | "updated_at" + >[]; onChangeRole: (userId: string, role: string) => void; onChangePlan: (userId: string, plan: string) => void; - onAllocate: (userId: string, data: { - source?: "copilot" | "custom"; - copilotAccountId?: string | null; - copilotModel?: string | null; - providerId?: string | null; - providerModel?: string | null; - }) => Promise; + onAllocate: ( + userId: string, + data: { + source?: "copilot" | "custom"; + copilotAccountId?: string | null; + copilotModel?: string | null; + providerId?: string | null; + providerModel?: string | null; + }, + ) => Promise; onReset: (userId: string) => Promise; - onGetCredits: (userId: string) => Promise<{ daily_total: number; daily_remaining: number; monthly_total: number; monthly_remaining: number; rollover_credits: number }>; - onSetCredits: (userId: string, data: { dailyCredits?: number; monthlyCredits?: number; rolloverCredits?: number; resetUsage?: boolean }) => Promise; + onGetCredits: ( + userId: string, + ) => Promise<{ + daily_total: number; + daily_remaining: number; + monthly_total: number; + monthly_remaining: number; + rollover_credits: number; + }>; + onSetCredits: ( + userId: string, + data: { + dailyCredits?: number; + monthlyCredits?: number; + rolloverCredits?: number; + resetUsage?: boolean; + }, + ) => Promise; }) { + const ui = useUiText(); + const [editing, setEditing] = useState(false); const [source, setSource] = useState<"copilot" | "custom">("copilot"); const [copilotAccountId, setCopilotAccountId] = useState(""); @@ -176,7 +282,13 @@ export function UserRow({ async function save() { setSaving(true); try { - await onAllocate(u.user_id, { source, copilotAccountId: copilotAccountId || null, copilotModel: copilotModel || null, providerId: providerId || null, providerModel: providerModel || null }); + await onAllocate(u.user_id, { + source, + copilotAccountId: copilotAccountId || null, + copilotModel: copilotModel || null, + providerId: providerId || null, + providerModel: providerModel || null, + }); setEditing(false); } finally { setSaving(false); @@ -194,7 +306,11 @@ export function UserRow({ setCreditDailyUsed(res.daily_total - res.daily_remaining); setCreditMonthlyUsed(res.monthly_total - res.monthly_remaining); } catch { - setCreditDaily(0); setCreditMonthly(0); setCreditRollover(0); setCreditDailyUsed(0); setCreditMonthlyUsed(0); + setCreditDaily(0); + setCreditMonthly(0); + setCreditRollover(0); + setCreditDailyUsed(0); + setCreditMonthlyUsed(0); } finally { setCreditLoading(false); } @@ -203,8 +319,16 @@ export function UserRow({ async function saveCredits(resetUsage = false) { setCreditSaving(true); try { - await onSetCredits(u.user_id, { dailyCredits: creditDaily, monthlyCredits: creditMonthly, rolloverCredits: creditRollover, resetUsage }); - if (resetUsage) { setCreditDailyUsed(0); setCreditMonthlyUsed(0); } + await onSetCredits(u.user_id, { + dailyCredits: creditDaily, + monthlyCredits: creditMonthly, + rolloverCredits: creditRollover, + resetUsage, + }); + if (resetUsage) { + setCreditDailyUsed(0); + setCreditMonthlyUsed(0); + } if (!resetUsage) setEditingCredits(false); } finally { setCreditSaving(false); @@ -219,9 +343,17 @@ export function UserRow({
-

{u.display_name ?? u.email.split("@")[0]}

- {u.is_platform_admin && } - {isSelf && You} +

+ {u.display_name ?? u.email.split("@")[0]} +

+ {u.is_platform_admin && ( + + )} + {isSelf && ( + + {ui("You")} + + )}

{u.email}

@@ -229,17 +361,52 @@ export function UserRow({
- - + + {hasAllocation && ( - + )}
- onChangeRole(u.user_id, e.target.value)} + disabled={isSelf} + className={`shrink-0 rounded-md bg-background border border-input text-xs font-medium px-2 py-1.5 outline-none focus:border-brand-500 disabled:opacity-40 disabled:cursor-not-allowed ${ROLE_COLORS[u.platform_role ?? "member"] ?? "text-foreground"}`} + > + {WORKSPACE_ROLES.map((r) => ( + + ))} - onChangePlan(u.user_id, e.target.value)} + className={`shrink-0 rounded-md bg-background border border-input text-xs font-medium px-2 py-1.5 outline-none focus:border-brand-500 ${PLAN_COLORS[u.workspace_plan ?? "free"] ?? "text-foreground"}`} + > + {WORKSPACE_PLANS.map((p) => ( + + ))} @@ -247,52 +414,123 @@ export function UserRow({ {editing && (
-

Configure AI for {u.display_name ?? u.email}

- +

+ {ui("Configure AI for")} {u.display_name ?? u.email} +

+
- - + +
-

Both configurations are saved. The selected tab is what this user will use.

+

+ {ui( + "Both configurations are saved. The selected tab is what this user will use.", + )} +

{source === "copilot" ? ( <>
- - setCopilotAccountId(e.target.value)} + className="w-full rounded-lg border border-input bg-background px-3 py-1.5 text-xs text-foreground outline-none focus:border-brand-500" + > + + {validAccounts.map((a) => ( + + ))}
- - setCopilotModel(e.target.value)} placeholder="e.g. claude-sonnet-4 (blank = auto)" className="w-full rounded-lg border border-input bg-background px-3 py-1.5 text-xs text-foreground placeholder:text-muted-foreground outline-none focus:border-brand-500" /> + + setCopilotModel(e.target.value)} + placeholder={ui("e.g. claude-sonnet-4 (blank = auto)")} + className="w-full rounded-lg border border-input bg-background px-3 py-1.5 text-xs text-foreground placeholder:text-muted-foreground outline-none focus:border-brand-500" + />
) : ( <>
- - setProviderId(e.target.value)} + className="w-full rounded-lg border border-input bg-background px-3 py-1.5 text-xs text-foreground outline-none focus:border-brand-500" + > + + {validProviders.map((p) => ( + + ))}
- - setProviderModel(e.target.value)} placeholder="e.g. gpt-4o" className="w-full rounded-lg border border-input bg-background px-3 py-1.5 text-xs text-foreground placeholder:text-muted-foreground outline-none focus:border-brand-500" /> + + setProviderModel(e.target.value)} + placeholder={ui("e.g. gpt-4o")} + className="w-full rounded-lg border border-input bg-background px-3 py-1.5 text-xs text-foreground placeholder:text-muted-foreground outline-none focus:border-brand-500" + />
)}
- + -
)} @@ -301,40 +539,107 @@ export function UserRow({ {editingCredits && (
-

Credits for {u.display_name ?? u.email}

- +

+ + {ui("Credits for")} {u.display_name ?? u.email} +

+
{creditLoading ? ( -
+
+ +
) : ( <>
- Daily used: {creditDailyUsed}/{creditDaily} - Monthly used: {creditMonthlyUsed}/{creditMonthly} - Rollover: {creditRollover} + + {ui("Daily used:")}{" "} + + {creditDailyUsed}/{creditDaily} + + + + {ui("Monthly used:")}{" "} + + {creditMonthlyUsed}/{creditMonthly} + + + + {ui("Rollover:")}{" "} + {creditRollover} +
- - setCreditDaily(Number(e.target.value))} className="w-full rounded-lg border border-input bg-background px-3 py-1.5 text-xs text-foreground outline-none focus:border-brand-500" /> + + setCreditDaily(Number(e.target.value))} + className="w-full rounded-lg border border-input bg-background px-3 py-1.5 text-xs text-foreground outline-none focus:border-brand-500" + />
- - setCreditMonthly(Number(e.target.value))} className="w-full rounded-lg border border-input bg-background px-3 py-1.5 text-xs text-foreground outline-none focus:border-brand-500" /> + + setCreditMonthly(Number(e.target.value))} + className="w-full rounded-lg border border-input bg-background px-3 py-1.5 text-xs text-foreground outline-none focus:border-brand-500" + />
- - setCreditRollover(Number(e.target.value))} className="w-full rounded-lg border border-input bg-background px-3 py-1.5 text-xs text-foreground outline-none focus:border-brand-500" /> + + setCreditRollover(Number(e.target.value))} + className="w-full rounded-lg border border-input bg-background px-3 py-1.5 text-xs text-foreground outline-none focus:border-brand-500" + />
- + - -
)} diff --git a/apps/web/src/app/(dashboard)/admin/admin-panels.tsx b/apps/web/src/app/(dashboard)/admin/admin-panels.tsx index 88fc3674..4a18a7af 100644 --- a/apps/web/src/app/(dashboard)/admin/admin-panels.tsx +++ b/apps/web/src/app/(dashboard)/admin/admin-panels.tsx @@ -1,4 +1,5 @@ "use client"; +import { useUiText } from "@/i18n/use-ui-text"; import { useState, useEffect, useCallback } from "react"; import { @@ -40,6 +41,8 @@ interface GenerateResult { } export function ThumbnailsPanel() { + const ui = useUiText(); + const [logs, setLogs] = useState([]); const [loading, setLoading] = useState(true); const [generating, setGenerating] = useState(false); @@ -47,14 +50,16 @@ export function ThumbnailsPanel() { const fetchLogs = useCallback(async () => { try { - const res = await apiFetch<{ data: ThumbnailLog[] }>("/admin/thumbnail-logs?limit=100"); + const res = await apiFetch<{ data: ThumbnailLog[] }>( + "/admin/thumbnail-logs?limit=100", + ); setLogs(res.data); } catch (e) { - console.error("Failed to fetch thumbnail logs:", e); + console.error(ui("Failed to fetch thumbnail logs:"), e); } finally { setLoading(false); } - }, []); + }, [ui]); useEffect(() => { fetchLogs(); @@ -64,22 +69,29 @@ export function ThumbnailsPanel() { setGenerating(true); setResult(null); try { - const res = await apiFetch<{ data: GenerateResult }>("/admin/thumbnails/generate-missing", { method: "POST" }); + const res = await apiFetch<{ data: GenerateResult }>( + "/admin/thumbnails/generate-missing", + { method: "POST" }, + ); setResult(res.data); setTimeout(() => fetchLogs(), 3000); } catch (e) { - console.error("Failed to generate thumbnails:", e); + console.error(ui("Failed to generate thumbnails:"), e); } finally { setGenerating(false); } - }, [fetchLogs]); + }, [ui, fetchLogs]); const statusIcon = (status: string) => { switch (status) { - case "success": return ; - case "failed": return ; - case "skipped": return ; - default: return ; + case "success": + return ; + case "failed": + return ; + case "skipped": + return ; + default: + return ; } }; @@ -87,44 +99,100 @@ export function ThumbnailsPanel() {
-

Generate missing project thumbnails and view the generation log.

+

+ {ui( + "Generate missing project thumbnails and view the generation log.", + )} +

- -
{result && (

{result.message}

-

Total projects: {result.total} | Missing: {result.missing} | Queued: {result.queued}

+

+ {ui("Total projects:")} {result.total} {ui("| Missing:")}{" "} + {result.missing} {ui("| Queued:")} {result.queued} +

)}
-

Generation Log

- {logs.length} entries +

+ {ui("Generation Log")} +

+ + {logs.length} {ui("entries")} +
{loading ? ( -
+
+ +
) : logs.length === 0 ? ( -
No thumbnail generation logs yet. Click "Generate Missing Thumbnails" to start.
+
+ {ui( + 'No thumbnail generation logs yet. Click "Generate Missing Thumbnails" to start.', + )} +
) : (
{logs.map((log) => ( -
+
{statusIcon(log.status)}
- {log.current_project_name ?? log.project_name ?? log.project_id.slice(0, 8)} - {log.error_message && {log.error_message}} + + {log.current_project_name ?? + log.project_name ?? + log.project_id.slice(0, 8)} + + {log.error_message && ( + + {log.error_message} + + )}
- {log.triggered_by} - {log.duration_ms != null && {log.duration_ms}ms} - {new Date(log.created_at).toLocaleString()} + + {log.triggered_by} + + {log.duration_ms != null && ( + + {log.duration_ms} + {ui("ms")} + + )} + + {new Date(log.created_at).toLocaleString(ui.locale)} +
))}
@@ -174,7 +242,8 @@ interface CopilotSessionsData { function formatBytes(bytes: number): string { if (bytes < 1024) return `${bytes} B`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; - if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; + if (bytes < 1024 * 1024 * 1024) + return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB`; } @@ -196,6 +265,8 @@ function formatUptime(seconds: number): string { } export function CopilotSessionsPanel() { + const ui = useUiText(); + const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); @@ -204,16 +275,21 @@ export function CopilotSessionsPanel() { const fetchSessions = useCallback(async () => { try { - const res = await apiFetch<{ data: CopilotSessionsData }>("/admin/copilot-sessions"); + const res = await apiFetch<{ data: CopilotSessionsData }>( + "/admin/copilot-sessions", + ); setData(res.data); setError(null); } catch (e) { - console.error("Failed to fetch copilot sessions:", e); - if (!data) setError(e instanceof Error ? e.message : "Failed to load sessions"); + console.error(ui("Failed to fetch copilot sessions:"), e); + if (!data) + setError( + e instanceof Error ? e.message : ui("Failed to load sessions"), + ); } finally { setLoading(false); } - }, [data]); + }, [ui, data]); useEffect(() => { fetchSessions(); @@ -221,17 +297,26 @@ export function CopilotSessionsPanel() { return () => clearInterval(interval); }, [fetchSessions]); - const handleTerminate = useCallback(async (projectId: string) => { - setTerminating((prev) => new Set(prev).add(projectId)); - try { - await apiFetch(`/admin/copilot-sessions/${projectId}`, { method: "DELETE" }); - await fetchSessions(); - } catch (e) { - console.error("Failed to terminate session:", e); - } finally { - setTerminating((prev) => { const next = new Set(prev); next.delete(projectId); return next; }); - } - }, [fetchSessions]); + const handleTerminate = useCallback( + async (projectId: string) => { + setTerminating((prev) => new Set(prev).add(projectId)); + try { + await apiFetch(`/admin/copilot-sessions/${projectId}`, { + method: "DELETE", + }); + await fetchSessions(); + } catch (e) { + console.error(ui("Failed to terminate session:"), e); + } finally { + setTerminating((prev) => { + const next = new Set(prev); + next.delete(projectId); + return next; + }); + } + }, + [ui, fetchSessions], + ); const handleTerminateAll = useCallback(async () => { setTerminatingAll(true); @@ -239,23 +324,37 @@ export function CopilotSessionsPanel() { await apiFetch("/admin/copilot-sessions", { method: "DELETE" }); await fetchSessions(); } catch (e) { - console.error("Failed to terminate all sessions:", e); + console.error(ui("Failed to terminate all sessions:"), e); } finally { setTerminatingAll(false); } - }, [fetchSessions]); + }, [ui, fetchSessions]); if (loading && !data) { - return
; + return ( +
+ +
+ ); } if (!data) { return (
-

{error ?? "No session data available"}

-
); @@ -265,59 +364,146 @@ export function CopilotSessionsPanel() {
- {data.poolSize}/{data.maxEngines} engines - RSS {formatBytes(data.processMemory.rss)} - Heap {formatBytes(data.processMemory.heapUsed)} / {formatBytes(data.processMemory.heapTotal)} - Uptime {formatUptime(data.uptime)} + + + {data.poolSize} + /{data.maxEngines} {ui("engines")} + + + {ui("RSS")}{" "} + + {formatBytes(data.processMemory.rss)} + + + + {ui("Heap")}{" "} + + {formatBytes(data.processMemory.heapUsed)} + {" "} + / {formatBytes(data.processMemory.heapTotal)} + + + {ui("Uptime")}{" "} + + {formatUptime(data.uptime)} + +
{data.poolSize > 0 && ( - )} -
-

Auto-refreshes every 5 seconds. Each engine is a per-project Copilot CLI subprocess.

+

+ {ui( + "Auto-refreshes every 5 seconds. Each engine is a per-project Copilot CLI subprocess.", + )} +

-

Active Engines

+

+ {ui("Active Engines")} +

{data.engines.length === 0 ? ( -
No active Copilot engines. Sessions start when users interact with AI in the editor.
+
+ {ui( + "No active Copilot engines. Sessions start when users interact with AI in the editor.", + )} +
) : (
{data.engines.map((engine) => (
-
0 ? "bg-green-500 animate-pulse" : "bg-muted"}`} /> +
0 ? "bg-green-500 animate-pulse" : "bg-muted"}`} + />
- {engine.projectName ?? "Unknown Project"} - {engine.projectId.slice(0, 8)} + + {engine.projectName ?? ui("Unknown Project")} + + + {engine.projectId.slice(0, 8)} +
{engine.chatSessions.length > 0 && (
{engine.chatSessions.map((cs) => ( - - {cs.isVisualEdit ? "visual-edit" : cs.mode ?? "idle"} - {cs.active && cs.startedAt ? ` (${formatDuration(Date.now() - cs.startedAt)})` : ""} + + {cs.isVisualEdit + ? ui("visual-edit") + : (cs.mode ?? ui("idle"))} + {cs.active && cs.startedAt + ? ` (${formatDuration(Date.now() - cs.startedAt)})` + : ""} ))}
)}
- {engine.activeRequests > 0 ? {engine.activeRequests} active : idle} - {engine.sessionCount} sess - age {formatDuration(engine.ageMs)} - idle {formatDuration(engine.idleMs)} + + {engine.activeRequests > 0 ? ( + + {engine.activeRequests} {ui("active")} + + ) : ( + + {ui("idle")} + + )} + + + {engine.sessionCount} {ui("sess")} + + + {ui("age")} {formatDuration(engine.ageMs)} + + + {ui("idle")} {formatDuration(engine.idleMs)} +
-
diff --git a/apps/web/src/app/(dashboard)/admin/audit/[sessionId]/page.tsx b/apps/web/src/app/(dashboard)/admin/audit/[sessionId]/page.tsx index 638904a5..2cf9c772 100644 --- a/apps/web/src/app/(dashboard)/admin/audit/[sessionId]/page.tsx +++ b/apps/web/src/app/(dashboard)/admin/audit/[sessionId]/page.tsx @@ -1,4 +1,5 @@ "use client"; +import { useUiText } from "@/i18n/use-ui-text"; /** * /admin/audit/[sessionId] — Full conversation transcript. @@ -9,7 +10,15 @@ import { useEffect, useState } from "react"; import Link from "next/link"; import { useParams, useRouter } from "next/navigation"; -import { ArrowLeft, Loader2, ShieldCheck, User as UserIcon, Bot, Wrench, Brain } from "lucide-react"; +import { + ArrowLeft, + Loader2, + ShieldCheck, + User as UserIcon, + Bot, + Wrench, + Brain, +} from "lucide-react"; import { apiFetch } from "@/lib/api"; import { usePlatformAdmin } from "@/hooks/use-platform-admin"; import { Button } from "@/components/ui/button"; @@ -44,6 +53,8 @@ type Message = { }; export default function AdminAuditConversationPage() { + const ui = useUiText(); + const router = useRouter(); const params = useParams<{ sessionId: string }>(); const sessionId = params.sessionId; @@ -61,16 +72,19 @@ export default function AdminAuditConversationPage() { setLoading(true); setError(null); try { - const res = await apiFetch<{ session: SessionInfo; messages: Message[] }>( - `/admin/audit/conversations/${sessionId}`, - ); + const res = await apiFetch<{ + session: SessionInfo; + messages: Message[]; + }>(`/admin/audit/conversations/${sessionId}`); if (!cancelled) { setSession(res.session); setMessages(res.messages); } } catch (e) { if (!cancelled) { - setError(e instanceof Error ? e.message : "Failed to load conversation"); + setError( + e instanceof Error ? e.message : ui("Failed to load conversation"), + ); } } finally { if (!cancelled) setLoading(false); @@ -80,7 +94,7 @@ export default function AdminAuditConversationPage() { return () => { cancelled = true; }; - }, [isPlatformAdmin, sessionId]); + }, [ui, isPlatformAdmin, sessionId]); if (adminLoading || loading) { return ( @@ -93,9 +107,15 @@ export default function AdminAuditConversationPage() { return (
-

Platform admin access required

-
); @@ -109,31 +129,45 @@ export default function AdminAuditConversationPage() { href="/admin/audit" className="inline-flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground" > - Audit search + {ui("Audit search")}{" "}
{error && (
- {error} + {ui(error)}
)} {session && (

- Conversation transcript + {" "} + {ui("Conversation transcript")}{" "}

- - - - - - - - - + + + + + + + + +
)} @@ -141,7 +175,8 @@ export default function AdminAuditConversationPage() {
{messages.length === 0 && (
- This session has no recorded messages. + {" "} + {ui("This session has no recorded messages.")}{" "}
)} {messages.map((m) => ( @@ -153,27 +188,44 @@ export default function AdminAuditConversationPage() { ); } -function Info({ label, value, mono }: { label: string; value: string; mono?: boolean }) { +function Info({ + label, + value, + mono, +}: { + label: string; + value: string; + mono?: boolean; +}) { return (
-
{label}
-
{value}
+
+ {label} +
+
+ {value} +
); } function MessageBubble({ message }: { message: Message }) { + const ui = useUiText(); + const role = message.role; const Icon = role === "user" ? UserIcon : role === "assistant" ? Bot : Wrench; const tone = role === "user" ? "border-brand-500/40 bg-brand-500/5" : role === "assistant" - ? "border-border bg-card" - : "border-amber-500/40 bg-amber-500/5"; + ? "border-border bg-card" + : "border-amber-500/40 bg-amber-500/5"; const hasToolCalls = - Array.isArray(message.tool_calls) && (message.tool_calls as unknown[]).length > 0; + Array.isArray(message.tool_calls) && + (message.tool_calls as unknown[]).length > 0; return (
@@ -186,27 +238,31 @@ function MessageBubble({ message }: { message: Message }) { )}
- {new Date(message.created_at).toLocaleString()} + {new Date(message.created_at).toLocaleString(ui.locale)}
{message.thinking_content && (
- Thinking + {ui("Thinking")}{" "} -
{message.thinking_content}
+
+            {message.thinking_content}
+          
)} {message.content && ( -
{message.content}
+
+          {message.content}
+        
)} {hasToolCalls && (
- Tool calls + {ui("Tool calls")}{" "}
             {JSON.stringify(message.tool_calls, null, 2)}
diff --git a/apps/web/src/app/(dashboard)/admin/audit/actions/page.tsx b/apps/web/src/app/(dashboard)/admin/audit/actions/page.tsx
index bdfb0f14..d1f43837 100644
--- a/apps/web/src/app/(dashboard)/admin/audit/actions/page.tsx
+++ b/apps/web/src/app/(dashboard)/admin/audit/actions/page.tsx
@@ -1,4 +1,5 @@
 "use client";
+import { useUiText } from "@/i18n/use-ui-text";
 
 /**
  * /admin/audit/actions — History of every admin read/write performed
@@ -8,7 +9,14 @@
 import { Suspense, useEffect, useState, type FormEvent } from "react";
 import Link from "next/link";
 import { useRouter, useSearchParams } from "next/navigation";
-import { ArrowLeft, History, Loader2, Search, ShieldCheck, X } from "lucide-react";
+import {
+  ArrowLeft,
+  History,
+  Loader2,
+  Search,
+  ShieldCheck,
+  X,
+} from "lucide-react";
 import { apiFetch } from "@/lib/api";
 import { usePlatformAdmin } from "@/hooks/use-platform-admin";
 import { Button } from "@/components/ui/button";
@@ -33,6 +41,8 @@ type ActionRow = {
 };
 
 function AdminAuditActionsPageInner() {
+  const ui = useUiText();
+
   const router = useRouter();
   const params = useSearchParams();
   const { isPlatformAdmin, loading: adminLoading } = usePlatformAdmin();
@@ -56,7 +66,9 @@ function AdminAuditActionsPageInner() {
         if (!cancelled) setRows(res.actions);
       } catch (e) {
         if (!cancelled) {
-          setError(e instanceof Error ? e.message : "Failed to load action log");
+          setError(
+            e instanceof Error ? e.message : ui("Failed to load action log"),
+          );
           setRows([]);
         }
       } finally {
@@ -67,7 +79,7 @@ function AdminAuditActionsPageInner() {
     return () => {
       cancelled = true;
     };
-  }, [isPlatformAdmin, queryString]);
+  }, [ui, isPlatformAdmin, queryString]);
 
   if (adminLoading) {
     return (
@@ -80,9 +92,15 @@ function AdminAuditActionsPageInner() {
     return (
       
-

Platform admin access required

-
); @@ -96,16 +114,18 @@ function AdminAuditActionsPageInner() { href="/admin/audit" className="inline-flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground" > - Audit search + {ui("Audit search")}{" "}

- - Admin action log + {" "} + {ui("Admin action log")}{" "}

- Every search and view performed on the audit surface, with viewer - identity, timestamps, and request metadata. + {" "} + {ui( + "Every search and view performed on the audit surface, with viewer identity, timestamps, and request metadata.", + )}{" "}

@@ -114,7 +134,7 @@ function AdminAuditActionsPageInner() { {error && (
- {error} + {ui(error)}
)} @@ -133,6 +153,8 @@ export default function AdminAuditActionsPage() { } function Filters() { + const ui = useUiText(); + const router = useRouter(); const params = useSearchParams(); const [actorId, setActorId] = useState(params.get("actor_id") ?? ""); @@ -150,50 +172,78 @@ function Filters() { router.push(`/admin/audit/actions?${next.toString()}`); } function clear() { - setActorId(""); setAction(""); setFrom(""); setTo(""); + setActorId(""); + setAction(""); + setFrom(""); + setTo(""); router.push("/admin/audit/actions"); } return ( -
+
- - setActorId(e.target.value)} placeholder="uuid" /> + + setActorId(e.target.value)} + placeholder={ui("uuid")} + /> - + - - setFrom(e.target.value)} /> + + setFrom(e.target.value)} + /> - - setTo(e.target.value)} /> + + setTo(e.target.value)} + />
); } -function Field({ label, children }: { label: string; children: React.ReactNode }) { +function Field({ + label, + children, +}: { + label: string; + children: React.ReactNode; +}) { return (
); } -function ThreadDrawer({ session, onClose }: { session: Session; onClose: () => void }) { +function ThreadDrawer({ + session, + onClose, +}: { + session: Session; + onClose: () => void; +}) { + const ui = useUiText(); + const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { setLoading(true); - apiFetch<{ data: ThreadData }>(`/admin/chat-sessions/${session.sessionId}/messages`) + apiFetch<{ data: ThreadData }>( + `/admin/chat-sessions/${session.sessionId}/messages`, + ) .then((r) => setData(r.data)) - .catch((e) => setError(e instanceof Error ? e.message : "Failed to load thread")) + .catch((e) => + setError(e instanceof Error ? e.message : ui("Failed to load thread")), + ) .finally(() => setLoading(false)); - }, [session.sessionId]); + }, [ui, session.sessionId]); return (
@@ -288,12 +419,15 @@ function ThreadDrawer({ session, onClose }: { session: Session; onClose: () => v
-
Thread
+
+ {ui("Thread")} +
- {session.projectName ?? "(no project)"} + {session.projectName ?? ui("(no project)")}
- {session.userEmail ?? session.userId} · mode={session.mode} · {session.messageCount} messages + {session.userEmail ?? session.userId} {ui("· mode=")} + {session.mode} · {session.messageCount} {ui("messages")}{" "}
- {fmtAbs(m.createdAt)} + + {fmtAbs(m.createdAt)} +
{content && ( @@ -364,7 +511,7 @@ function MessageCard({ m }: { m: Message }) { onClick={() => setExpanded((v) => !v)} className="ml-2 text-[11px] text-brand-400 hover:text-brand-300" > - {expanded ? "show less" : "show more"} + {expanded ? ui("show less") : ui("show more")} )}
@@ -373,7 +520,8 @@ function MessageCard({ m }: { m: Message }) { {m.thinkingContent && (
- thinking + {" "} + {ui("thinking")}{" "}
             {m.thinkingContent}
@@ -397,11 +545,13 @@ function MessageCard({ m }: { m: Message }) {
 
 export default function ChatAdminPage() {
   return (
-    
-        
-      
- }> + + +
+ } + > ); diff --git a/apps/web/src/app/(dashboard)/admin/dns-config-panel.tsx b/apps/web/src/app/(dashboard)/admin/dns-config-panel.tsx index 655d65f7..474c21af 100644 --- a/apps/web/src/app/(dashboard)/admin/dns-config-panel.tsx +++ b/apps/web/src/app/(dashboard)/admin/dns-config-panel.tsx @@ -1,7 +1,18 @@ "use client"; +import { useUiText } from "@/i18n/use-ui-text"; import { useEffect, useState } from "react"; -import { Globe, Loader2, CheckCircle2, AlertCircle, Sparkles, Trash2, KeyRound, ChevronDown, ChevronRight } from "lucide-react"; +import { + Globe, + Loader2, + CheckCircle2, + AlertCircle, + Sparkles, + Trash2, + KeyRound, + ChevronDown, + ChevronRight, +} from "lucide-react"; import { apiFetch } from "@/lib/api"; interface CfTokenStatus { @@ -64,11 +75,16 @@ interface AutoWildcardResponse { function planLabel(plan: string): string { switch (plan) { - case "free": return "Free"; - case "pro": return "Pro"; - case "business": return "Business"; - case "enterprise": return "Enterprise"; - default: return "Unknown"; + case "free": + return "Free"; + case "pro": + return "Pro"; + case "business": + return "Business"; + case "enterprise": + return "Enterprise"; + default: + return "Unknown"; } } @@ -87,6 +103,8 @@ function validateWildcard(hostname: string, zoneName: string): string | null { } export function DnsConfigPanel() { + const ui = useUiText(); + const [mode, setMode] = useState("per_publish"); const [defaulted, setDefaulted] = useState(true); const [loading, setLoading] = useState(true); @@ -97,7 +115,8 @@ export function DnsConfigPanel() { const [diagnostics, setDiagnostics] = useState(null); const [diagnosticsError, setDiagnosticsError] = useState(null); const [autoSetupRunning, setAutoSetupRunning] = useState(false); - const [autoSetupResult, setAutoSetupResult] = useState(null); + const [autoSetupResult, setAutoSetupResult] = + useState(null); // Custom-wildcard inputs (US-002). const [wildcardHostname, setWildcardHostname] = useState(""); @@ -108,7 +127,9 @@ export function DnsConfigPanel() { const [deleting, setDeleting] = useState(null); // Optional CF token override (R5). - const [cfTokenStatus, setCfTokenStatus] = useState(null); + const [cfTokenStatus, setCfTokenStatus] = useState( + null, + ); const [tokenSectionOpen, setTokenSectionOpen] = useState(false); const [pastedToken, setPastedToken] = useState(""); const [tokenSaving, setTokenSaving] = useState(false); @@ -128,7 +149,11 @@ export function DnsConfigPanel() { setMode(modeRes.value.mode); setDefaulted(modeRes.value.defaulted); } else { - setError(modeRes.reason instanceof Error ? modeRes.reason.message : "Failed to load DNS config"); + setError( + modeRes.reason instanceof Error + ? modeRes.reason.message + : ui("Failed to load DNS config"), + ); } if (diagRes.status === "fulfilled") { setDiagnostics(diagRes.value); @@ -137,10 +162,15 @@ export function DnsConfigPanel() { // otherwise fall back to the server-recommended *.${DOABLE_DOMAIN} // so first-time users on free + apex still get a one-click experience. setWildcardHostname( - diagRes.value.configuredWildcard ?? diagRes.value.recommendedWildcard, + diagRes.value.configuredWildcard ?? + diagRes.value.recommendedWildcard, ); } else { - setDiagnosticsError(diagRes.reason instanceof Error ? diagRes.reason.message : "Failed to load DNS diagnostics"); + setDiagnosticsError( + diagRes.reason instanceof Error + ? diagRes.reason.message + : ui("Failed to load DNS diagnostics"), + ); } if (tokenRes.status === "fulfilled") { setCfTokenStatus(tokenRes.value); @@ -152,8 +182,10 @@ export function DnsConfigPanel() { if (!cancelled) setLoading(false); } })(); - return () => { cancelled = true; }; - }, []); + return () => { + cancelled = true; + }; + }, [ui]); async function refreshTokenStatus() { try { @@ -178,7 +210,9 @@ export function DnsConfigPanel() { setPastedToken(""); await Promise.all([refreshTokenStatus(), refreshDiagnostics()]); } catch (err) { - setTokenError(err instanceof Error ? err.message : "Failed to save token"); + setTokenError( + err instanceof Error ? err.message : ui("Failed to save token"), + ); } finally { setTokenSaving(false); } @@ -191,7 +225,9 @@ export function DnsConfigPanel() { await apiFetch("/admin/dns-mode/cf-token", { method: "DELETE" }); await Promise.all([refreshTokenStatus(), refreshDiagnostics()]); } catch (err) { - setTokenError(err instanceof Error ? err.message : "Failed to remove token"); + setTokenError( + err instanceof Error ? err.message : ui("Failed to remove token"), + ); } finally { setTokenSaving(false); } @@ -211,7 +247,8 @@ export function DnsConfigPanel() { if (autoSetupRunning || saving) return false; if (hostnameError) return false; if (diagnostics.canAutoSetup) return true; - if (diagnostics.reason === "free-plan-multilevel" && acmOverride) return true; + if (diagnostics.reason === "free-plan-multilevel" && acmOverride) + return true; return false; })(); @@ -230,7 +267,7 @@ export function DnsConfigPanel() { setSavedAt(Date.now()); } catch (err) { setMode(previous); - setError(err instanceof Error ? err.message : "Failed to save"); + setError(err instanceof Error ? err.message : ui("Failed to save")); } finally { setSaving(false); } @@ -238,10 +275,16 @@ export function DnsConfigPanel() { async function refreshDiagnostics() { try { - const fresh = await apiFetch("/admin/dns-mode/diagnostics"); + const fresh = await apiFetch( + "/admin/dns-mode/diagnostics", + ); setDiagnostics(fresh); } catch (err) { - setDiagnosticsError(err instanceof Error ? err.message : "Failed to refresh diagnostics"); + setDiagnosticsError( + err instanceof Error + ? err.message + : ui("Failed to refresh diagnostics"), + ); } } @@ -255,10 +298,13 @@ export function DnsConfigPanel() { if (wildcardHostname) body.wildcardHostname = wildcardHostname; if (acmOverride) body.acmOverride = true; - const res = await apiFetch("/admin/dns-mode/auto-wildcard", { - method: "POST", - body: JSON.stringify(body), - }); + const res = await apiFetch( + "/admin/dns-mode/auto-wildcard", + { + method: "POST", + body: JSON.stringify(body), + }, + ); setAutoSetupResult(res); setMode("wildcard"); setDefaulted(false); @@ -284,7 +330,11 @@ export function DnsConfigPanel() { await refreshDiagnostics(); setConfirmingDelete(null); } catch (err) { - setError(err instanceof Error ? err.message : `Failed to delete ${hostname}`); + setError( + err instanceof Error + ? err.message + : ui("Failed to delete {v0}", { v0: hostname }), + ); } finally { setDeleting(null); } @@ -306,15 +356,22 @@ export function DnsConfigPanel() {
-

DNS for Published Sites

+

+ {ui("DNS for Published Sites")} +

- Each publish either gets its own Cloudflare CNAME, or rides on a wildcard CNAME we set up for you. + {" "} + {ui( + "Each publish either gets its own Cloudflare CNAME, or rides on a wildcard CNAME we set up for you.", + )}{" "}

- {saving && } + {saving && ( + + )} {savedAt && !saving && !error && ( - Saved + {ui("Saved")}{" "} )}
@@ -322,9 +379,13 @@ export function DnsConfigPanel() { {diagnostics && (
- Zone: - {diagnostics.zoneName || "—"} - {planLabel(diagnostics.plan)} + {ui("Zone:")} + + {diagnostics.zoneName || "—"} + + + {planLabel(diagnostics.plan)} + {diagnostics.acmStatus === "enabled" - ? "ACM enabled" + ? ui("ACM enabled") : diagnostics.acmStatus === "absent" - ? "No ACM" - : "ACM status unknown"} + ? ui("No ACM") + : ui("ACM status unknown")} - Publish domain: - {diagnostics.publishDomain || "—"} + + {ui("Publish domain:")} + + + {diagnostics.publishDomain || "—"} + {diagnostics.existingWildcard && ( - {diagnostics.existingWildcard.hostname} + + {diagnostics.existingWildcard.hostname} + {" → "} - {diagnostics.existingWildcard.target} + + {diagnostics.existingWildcard.target} + )}
@@ -361,7 +432,8 @@ export function DnsConfigPanel() { {diagnosticsError && (
- Could not load Cloudflare zone diagnostics: {diagnosticsError} + {" "} + {ui("Could not load Cloudflare zone diagnostics:")} {diagnosticsError}
)} @@ -376,15 +448,30 @@ export function DnsConfigPanel() { }`} >
- - Per-publish CNAME - Default + + + {ui("Per-publish CNAME")} + + + {ui("Default")} +

- Every publish calls the Cloudflare API to create one CNAME per subdomain. - Lets multiple doable servers coexist under the same zone using - {" "}{`-.${zoneName}`} hostnames covered by Universal SSL. - Requires CF_API_TOKEN, CF_ZONE_ID, and CLOUDFLARED_TUNNEL_ID. + {" "} + {ui( + "Every publish calls the Cloudflare API to create one CNAME per subdomain. Lets multiple doable servers coexist under the same zone using", + )}{" "} + {`-.${zoneName}`}{" "} + {ui("hostnames covered by Universal SSL. Requires")}{" "} + CF_API_TOKEN,{" "} + CF_ZONE_ID + {ui(", and")}{" "} + CLOUDFLARED_TUNNEL_ID.

@@ -396,35 +483,56 @@ export function DnsConfigPanel() { }`} >
- - Wildcard CNAME (auto-configured) + + + {ui("Wildcard CNAME (auto-configured)")} +

- Skip the per-publish API call — all publishes resolve via one wildcard CNAME pointing to your tunnel. - We'll create the record on your zone with the Cloudflare token from{" "} + {" "} + {ui( + "Skip the per-publish API call — all publishes resolve via one wildcard CNAME pointing to your tunnel. We'll create the record on your zone with the Cloudflare token from", + )}{" "} cloudflared tunnel login.

  • - Free plan + apex:{" "} - *.{zoneName} works out of the box (Universal SSL). + {ui("Free plan + apex:")}{" "} + *.{zoneName}{" "} + {ui("works out of the box (Universal SSL).")}{" "}
  • - Free plan + multi-level:{" "} - *.<sub>.{zoneName} needs Advanced Certificate Manager. + + {ui("Free plan + multi-level:")} + {" "} + *.<sub>.{zoneName}{" "} + {ui("needs Advanced Certificate Manager.")}{" "}
  • - Paid ACM: pick any{" "} - *.<anything>.{zoneName} and tick the override below if our token can't see your ACM packs. + {ui("Paid ACM:")}{" "} + {ui("pick any")}{" "} + *.<anything>.{zoneName}{" "} + {ui( + "and tick the override below if our token can't see your ACM packs.", + )}{" "}
- + setWildcardHostname(e.target.value.toLowerCase().trim())} + onChange={(e) => + setWildcardHostname(e.target.value.toLowerCase().trim()) + } placeholder={`*.${zoneName}`} disabled={autoSetupRunning} className="mb-1 w-full rounded-md border border-border bg-background px-2 py-1 font-mono text-[11px] text-foreground focus:border-blue-500 focus:outline-none disabled:opacity-50" @@ -443,9 +551,12 @@ export function DnsConfigPanel() { className="mt-0.5 h-3.5 w-3.5" /> - I have Advanced Certificate Manager on this zone. - Auto-detection can't read ACM status with the tunnel OAuth token, so tick this if you've already - enabled ACM and want to create a multi-level wildcard. + + {ui("I have Advanced Certificate Manager")} + {" "} + {ui( + "on this zone. Auto-detection can't read ACM status with the tunnel OAuth token, so tick this if you've already enabled ACM and want to create a multi-level wildcard.", + )}{" "} )} @@ -456,49 +567,71 @@ export function DnsConfigPanel() { disabled={!buttonEnabled} className="inline-flex items-center gap-1.5 rounded-md border border-blue-500 bg-blue-500/10 px-2.5 py-1 text-[11px] font-medium text-blue-300 hover:bg-blue-500/20 disabled:cursor-not-allowed disabled:border-border disabled:bg-secondary disabled:text-muted-foreground" > - {autoSetupRunning ? : } + {autoSetupRunning ? ( + + ) : ( + + )} {autoSetupRunning - ? "Configuring…" + ? ui("Configuring…") : mode === "wildcard" && diagnostics?.existingWildcard - ? "Re-verify wildcard" - : "Auto-configure wildcard"} + ? ui("Re-verify wildcard") + : ui("Auto-configure wildcard")} - {diagnostics && !diagnostics.canAutoSetup && !(isFreePlanMultilevel && acmOverride) && ( -

- - {diagnostics.message} -

- )} + {diagnostics && + !diagnostics.canAutoSetup && + !(isFreePlanMultilevel && acmOverride) && ( +

+ + {diagnostics.message} +

+ )} {autoSetupResult && (

- {autoSetupResult.created ? "Created" : autoSetupResult.updated ? "Updated" : "Confirmed"} - {" "}{autoSetupResult.wildcardHostname} → {autoSetupResult.target} - {autoSetupResult.acmOverrideApplied && " (ACM override applied)"} + {autoSetupResult.created + ? ui("Created") + : autoSetupResult.updated + ? ui("Updated") + : ui("Confirmed")}{" "} + + {autoSetupResult.wildcardHostname} + {" "} + → {autoSetupResult.target} + {autoSetupResult.acmOverrideApplied && + " (ACM override applied)"}

)}
- {mode === "wildcard" && diagnostics && diagnostics.allWildcards.length === 0 && ( -
-

- - - No wildcard CNAME currently active on this zone.{" "} - Publishes will fail until you auto-configure one above, or switch back to per-publish mode. - -

-
- )} + {mode === "wildcard" && + diagnostics && + diagnostics.allWildcards.length === 0 && ( +
+

+ + + + {ui("No wildcard CNAME currently active on this zone.")} + {" "} + {ui( + "Publishes will fail until you auto-configure one above, or switch back to per-publish mode.", + )}{" "} + +

+
+ )} {diagnostics && diagnostics.allWildcards.length > 0 && (

- Existing wildcards on {diagnostics.zoneName || "this zone"} + {" "} + {ui("Existing wildcards on")}{" "} + {diagnostics.zoneName || ui("this zone")}

    {diagnostics.allWildcards.map((w) => { @@ -509,22 +642,33 @@ export function DnsConfigPanel() { key={w.hostname} className="flex flex-wrap items-center gap-2 rounded-md border border-border bg-secondary/30 px-2.5 py-1.5 text-[11px]" > - {w.hostname} + + {w.hostname} + → - {w.target} - {w.modifiedOn.slice(0, 10)} + + {w.target} + + + {w.modifiedOn.slice(0, 10)} +
    {isConfirming ? ( <> - Delete {w.hostname}? Publishes pointing to it stop resolving. + + {ui("Delete")} {w.hostname} + {ui("? Publishes pointing to it stop resolving.")} + ) : ( @@ -542,8 +687,7 @@ export function DnsConfigPanel() { disabled={deleting !== null} className="inline-flex items-center gap-1 rounded-md border border-border bg-secondary px-2 py-0.5 text-[11px] font-medium text-muted-foreground hover:border-red-500 hover:text-red-300 disabled:cursor-not-allowed" > - - Delete + {ui("Delete")}{" "} )}
    @@ -560,19 +704,29 @@ export function DnsConfigPanel() { onClick={() => setTokenSectionOpen((v) => !v)} className="flex w-full items-center gap-2 text-left text-[11px] text-muted-foreground hover:text-foreground" > - {tokenSectionOpen ? : } + {tokenSectionOpen ? ( + + ) : ( + + )} - Cloudflare API token (optional) + + {ui("Cloudflare API token (optional)")} + {cfTokenStatus?.source === "platform_settings" - ? `Using custom token ****${cfTokenStatus.tokenSuffix}` + ? ui("Using custom token ****{v0}", { + v0: cfTokenStatus.tokenSuffix, + }) : cfTokenStatus?.source === "env" - ? `Using cert.pem OAuth token ****${cfTokenStatus.tokenSuffix}` - : "No CF token configured"} + ? ui("Using cert.pem OAuth token ****{v0}", { + v0: cfTokenStatus.tokenSuffix, + }) + : ui("No CF token configured")} {cfTokenStatus?.hasSslScope && ( - ACM scope OK + {ui("ACM scope OK")}{" "} )} @@ -583,19 +737,35 @@ export function DnsConfigPanel() {

    - KEK mismatch.{" "} - The stored token can't be decrypted under the current{" "} - DOABLE_KEK (likely a backup restore with a stale{" "} - .env). The cert.pem fallback is keeping DNS ops working, but ACM detection is degraded. Re-paste the token below, or click Remove override to drop the stale row. + {ui("KEK mismatch.")}{" "} + {ui("The stored token can't be decrypted under the current")}{" "} + DOABLE_KEK{" "} + {ui("(likely a backup restore with a stale")}{" "} + .env + {ui( + "). The cert.pem fallback is keeping DNS ops working, but ACM detection is degraded. Re-paste the token below, or click", + )}{" "} + {ui("Remove override")}{" "} + {ui("to drop the stale row.")}{" "}

    )}

    - Strictly optional.{" "} - DNS auto-configure, wildcard create/delete, and per-publish CNAMEs all work fine with the cert.pem token from{" "} - cloudflared tunnel login alone. Adding a custom token only unlocks accurate ACM detection so the badge above can flip from{" "} - ACM status unknown to ACM enabled or{" "} - No ACM. + + {ui("Strictly optional.")} + {" "} + {ui( + "DNS auto-configure, wildcard create/delete, and per-publish CNAMEs all work fine with the cert.pem token from", + )}{" "} + cloudflared tunnel login{" "} + {ui( + "alone. Adding a custom token only unlocks accurate ACM detection so the badge above can flip from", + )}{" "} + {ui("ACM status unknown")}{" "} + {ui("to")}{" "} + {ui("ACM enabled")}{" "} + {ui("or")}{" "} + {ui("No ACM")}.

    - Open Cloudflare API Tokens - - {" "}→ Create Token → Create Custom Token. Add exactly these zone permissions: + {" "} + {ui("Open Cloudflare API Tokens")}{" "} + {" "} + {ui( + "→ Create Token → Create Custom Token. Add exactly these zone permissions:", + )}{" "}

      -
    • Zone → DNS → Edit
    • -
    • Zone → Zone → Read
    • -
    • Zone → SSL and Certificates → Read
    • +
    • + {ui("Zone → DNS →")}{" "} + {ui("Edit")} +
    • +
    • + {ui("Zone → Zone →")}{" "} + {ui("Read")} +
    • +
    • + {ui("Zone → SSL and Certificates →")}{" "} + {ui("Read")} +

    - Scope to your specific zone ({zoneName}) under "Zone Resources". Then paste the token here. + {" "} + {ui("Scope to your specific zone (")} + {zoneName} + {ui(') under "Zone Resources". Then paste the token here.')}{" "}

    @@ -622,7 +807,7 @@ export function DnsConfigPanel() { type="password" value={pastedToken} onChange={(e) => setPastedToken(e.target.value)} - placeholder="Paste a Cloudflare API token…" + placeholder={ui("Paste a Cloudflare API token…")} disabled={tokenSaving} className="flex-1 rounded-md border border-border bg-background px-2 py-1 font-mono text-[11px] text-foreground focus:border-blue-500 focus:outline-none disabled:opacity-50" /> @@ -632,17 +817,21 @@ export function DnsConfigPanel() { disabled={!pastedToken.trim() || tokenSaving} className="inline-flex items-center gap-1 rounded-md border border-blue-500 bg-blue-500/10 px-2.5 py-1 text-[11px] font-medium text-blue-300 hover:bg-blue-500/20 disabled:cursor-not-allowed disabled:border-border disabled:bg-secondary disabled:text-muted-foreground" > - {tokenSaving ? : null} - Verify & save + {tokenSaving ? ( + + ) : null}{" "} + {ui("Verify & save")}{" "} - {(cfTokenStatus?.source === "platform_settings" || cfTokenStatus?.decryptFailed) && ( + {(cfTokenStatus?.source === "platform_settings" || + cfTokenStatus?.decryptFailed) && ( )}
    @@ -659,10 +848,14 @@ export function DnsConfigPanel() { {diagnostics && (

    - Heads up:{" "} - A *.{zoneName} CNAME can point to exactly one tunnel — running multiple - doable servers on the same zone requires Cloudflare Advanced Certificate Manager so each environment can - have its own multi-level wildcard (e.g. *.staging.{zoneName} and{" "} + + {ui("Heads up:")} + {" "} + {ui("A")} *.{zoneName}{" "} + {ui( + "CNAME can point to exactly one tunnel — running multiple doable servers on the same zone requires Cloudflare Advanced Certificate Manager so each environment can have its own multi-level wildcard (e.g.", + )}{" "} + *.staging.{zoneName} {ui("and")}{" "} *.prod.{zoneName}).

    @@ -672,17 +865,29 @@ export function DnsConfigPanel() {
    {defaulted && !error && !autoSetupResult && (

    - No setting persisted yet — using the per-publish default. - {" "}Selecting an option or auto-configuring wildcard will save it for future publishes. + {" "} + {ui( + "No setting persisted yet — using the per-publish default.", + )}{" "} + {ui( + "Selecting an option or auto-configuring wildcard will save it for future publishes.", + )}{" "}

    )} {error && (

    - {error} + {ui(error)} {error.includes("migration 081") && ( - <> Run migration 081_platform_settings.sql against the DB. + <> + {" "} + {ui("Run")}{" "} + + migration 081_platform_settings.sql + {" "} + {ui("against the DB.")} + )}

    diff --git a/apps/web/src/app/(dashboard)/admin/email-panel.tsx b/apps/web/src/app/(dashboard)/admin/email-panel.tsx index 0db5e3aa..b2fae153 100644 --- a/apps/web/src/app/(dashboard)/admin/email-panel.tsx +++ b/apps/web/src/app/(dashboard)/admin/email-panel.tsx @@ -1,4 +1,5 @@ "use client"; +import { useUiText } from "@/i18n/use-ui-text"; import { useState, useEffect, useCallback } from "react"; import { @@ -100,6 +101,8 @@ const SMTP_SERVICES = [ // ─── Email Settings Panel ──────────────────────────────────── export function EmailPanel() { + const ui = useUiText(); + const [config, setConfig] = useState(null); const [stats, setStats] = useState(null); const [loading, setLoading] = useState(true); @@ -107,7 +110,10 @@ export function EmailPanel() { const [testing, setTesting] = useState(false); const [verifying, setVerifying] = useState(false); const [deleting, setDeleting] = useState(false); - const [testResult, setTestResult] = useState<{ ok: boolean; message: string } | null>(null); + const [testResult, setTestResult] = useState<{ + ok: boolean; + message: string; + } | null>(null); // Form state const [formProvider, setFormProvider] = useState("smtp"); @@ -126,21 +132,25 @@ export function EmailPanel() { const loadConfig = useCallback(async () => { try { - const res = await apiFetch<{ data: EmailConfig | null }>("/admin/email/config"); + const res = await apiFetch<{ data: EmailConfig | null }>( + "/admin/email/config", + ); setConfig(res.data); } catch (e) { - console.error("Failed to load email config:", e); + console.error(ui("Failed to load email config:"), e); } - }, []); + }, [ui]); const loadStats = useCallback(async () => { try { - const res = await apiFetch<{ data: QueueStats }>("/admin/email/queue-stats"); + const res = await apiFetch<{ data: QueueStats }>( + "/admin/email/queue-stats", + ); setStats(res.data); } catch (e) { - console.error("Failed to load queue stats:", e); + console.error(ui("Failed to load queue stats:"), e); } - }, []); + }, [ui]); useEffect(() => { Promise.all([loadConfig(), loadStats()]).finally(() => setLoading(false)); @@ -150,7 +160,10 @@ export function EmailPanel() { useEffect(() => { const params = new URLSearchParams(window.location.search); if (params.get("gmail") === "connected") { - setTestResult({ ok: true, message: "Gmail connected successfully via OAuth!" }); + setTestResult({ + ok: true, + message: "Gmail connected successfully via OAuth!", + }); // Clean URL const url = new URL(window.location.href); url.searchParams.delete("gmail"); @@ -173,7 +186,9 @@ export function EmailPanel() { if (formProvider === "smtp") { const isCustom = smtpService === "Custom (manual SMTP)"; body.credentials = { - ...(isCustom ? { host: smtpHost, port: smtpPort } : { service: smtpService }), + ...(isCustom + ? { host: smtpHost, port: smtpPort } + : { service: smtpService }), user: smtpUser, pass: smtpPass, }; @@ -181,12 +196,21 @@ export function EmailPanel() { body.credentials = { apiKey: resendApiKey }; } - await apiFetch("/admin/email/config", { method: "POST", body: JSON.stringify(body) }); - setTestResult({ ok: true, message: "Email provider saved! Send a test email to verify." }); + await apiFetch("/admin/email/config", { + method: "POST", + body: JSON.stringify(body), + }); + setTestResult({ + ok: true, + message: "Email provider saved! Send a test email to verify.", + }); setEditing(false); await loadConfig(); } catch (e) { - setTestResult({ ok: false, message: e instanceof Error ? e.message : "Failed to save" }); + setTestResult({ + ok: false, + message: e instanceof Error ? e.message : ui("Failed to save"), + }); } finally { setSaving(false); } @@ -196,10 +220,20 @@ export function EmailPanel() { setTesting(true); setTestResult(null); try { - const res = await apiFetch<{ success: boolean }>("/admin/email/test", { method: "POST" }); - setTestResult({ ok: res.success, message: res.success ? "Test email sent! Check your inbox." : "Failed to send test email." }); + const res = await apiFetch<{ success: boolean }>("/admin/email/test", { + method: "POST", + }); + setTestResult({ + ok: res.success, + message: res.success + ? "Test email sent! Check your inbox." + : ui("Failed to send test email."), + }); } catch (e) { - setTestResult({ ok: false, message: e instanceof Error ? e.message : "Test failed" }); + setTestResult({ + ok: false, + message: e instanceof Error ? e.message : "Test failed", + }); } finally { setTesting(false); } @@ -209,31 +243,58 @@ export function EmailPanel() { setVerifying(true); setTestResult(null); try { - const res = await apiFetch<{ verified: boolean; error?: string; message?: string }>("/admin/email/verify", { method: "POST" }); + const res = await apiFetch<{ + verified: boolean; + error?: string; + message?: string; + }>("/admin/email/verify", { method: "POST" }); if (res.verified) { - setTestResult({ ok: true, message: res.message ?? "Provider connection verified!" }); + setTestResult({ + ok: true, + message: res.message ?? "Provider connection verified!", + }); } else { - setTestResult({ ok: false, message: res.error ?? "Verification failed" }); + setTestResult({ + ok: false, + message: res.error ?? "Verification failed", + }); } await loadConfig(); } catch (e) { - setTestResult({ ok: false, message: e instanceof Error ? e.message : "Verification failed" }); + setTestResult({ + ok: false, + message: e instanceof Error ? e.message : "Verification failed", + }); } finally { setVerifying(false); } } async function handleDelete() { - if (!confirm("Remove email configuration? The system will fall back to environment variable settings.")) return; + if ( + !confirm( + ui( + "Remove email configuration? The system will fall back to environment variable settings.", + ), + ) + ) + return; setDeleting(true); setTestResult(null); try { await apiFetch("/admin/email/config", { method: "DELETE" }); setConfig(null); setEditing(false); - setTestResult({ ok: true, message: "Configuration removed. Falling back to environment variables." }); + setTestResult({ + ok: true, + message: + "Configuration removed. Falling back to environment variables.", + }); } catch (e) { - setTestResult({ ok: false, message: e instanceof Error ? e.message : "Failed to delete" }); + setTestResult({ + ok: false, + message: e instanceof Error ? e.message : ui("Failed to delete"), + }); } finally { setDeleting(false); } @@ -241,10 +302,16 @@ export function EmailPanel() { async function handleGmailConnect() { try { - const res = await apiFetch<{ url: string }>("/admin/email/google/auth-url"); + const res = await apiFetch<{ url: string }>( + "/admin/email/google/auth-url", + ); window.location.href = res.url; } catch (e) { - setTestResult({ ok: false, message: e instanceof Error ? e.message : "Failed to start Gmail OAuth" }); + setTestResult({ + ok: false, + message: + e instanceof Error ? e.message : ui("Failed to start Gmail OAuth"), + }); } } @@ -281,12 +348,18 @@ export function EmailPanel() {
    {/* Status Banner */} {testResult && ( -
    - {testResult.ok ? : } +
    + {testResult.ok ? ( + + ) : ( + + )} {testResult.message}
    )} @@ -300,18 +373,23 @@ export function EmailPanel() {
    -

    {config.label}

    -

    {config.provider.toUpperCase()} — {config.from_address}

    +

    + {config.label} +

    +

    + {config.provider.toUpperCase()} — {config.from_address} +

    {config.verified ? ( - Verified + {ui("Verified")}{" "} ) : ( - Not verified + {" "} + {ui("Not verified")}{" "} )}
    @@ -322,8 +400,12 @@ export function EmailPanel() {
    {Object.entries(config.credentials).map(([key, val]) => (
    - {key} -

    {val}

    + + {key} + +

    + {val} +

    ))}
    @@ -336,19 +418,50 @@ export function EmailPanel() { )}
    - - - -
    @@ -358,7 +471,9 @@ export function EmailPanel() {

    - {config ? "Update Email Provider" : "Configure Email Provider"} + {config + ? ui("Update Email Provider") + : ui("Configure Email Provider")}

    @@ -367,7 +482,10 @@ export function EmailPanel() { {(["smtp", "resend", "google"] as const).map((p) => ( ))} @@ -390,17 +514,46 @@ export function EmailPanel() { {formProvider === "google" ? (

    - Connect your Google account with one click. This uses OAuth so your password is never shared. - Only the gmail.send permission is requested. + {" "} + {ui( + "Connect your Google account with one click. This uses OAuth so your password is never shared. Only the", + )}{" "} + gmail.send{" "} + {ui("permission is requested.")}{" "}

    {/* Google brand button — uses Google's official brand colors (intentional pure white). */} - {config && ( - )}
    @@ -409,17 +562,29 @@ export function EmailPanel() {
    - + setFormLabel(e.target.value)} - placeholder={formProvider === "smtp" ? "Production SMTP" : "Resend Production"} + type="text" + value={formLabel} + onChange={(e) => setFormLabel(e.target.value)} + placeholder={ + formProvider === "smtp" + ? ui("Production SMTP") + : ui("Resend Production") + } className="w-full rounded-md bg-background border border-input text-sm text-foreground px-3 py-2 outline-none focus:border-brand-500 placeholder:text-muted-foreground" />
    - + setFormFromAddress(e.target.value)} + type="text" + value={formFromAddress} + onChange={(e) => setFormFromAddress(e.target.value)} placeholder="Doable " className="w-full rounded-md bg-background border border-input text-sm text-foreground px-3 py-2 outline-none focus:border-brand-500 placeholder:text-muted-foreground" /> @@ -429,36 +594,74 @@ export function EmailPanel() { {formProvider === "smtp" && ( <>
    - +
    {smtpService === "Custom (manual SMTP)" && (
    - - setSmtpHost(e.target.value)} placeholder="smtp.example.com" className="w-full rounded-md bg-background border border-input text-sm text-foreground px-3 py-2 outline-none focus:border-brand-500 placeholder:text-muted-foreground" /> + + setSmtpHost(e.target.value)} + placeholder="smtp.example.com" + className="w-full rounded-md bg-background border border-input text-sm text-foreground px-3 py-2 outline-none focus:border-brand-500 placeholder:text-muted-foreground" + />
    - - setSmtpPort(Number(e.target.value))} className="w-full rounded-md bg-background border border-input text-sm text-foreground px-3 py-2 outline-none focus:border-brand-500" /> + + setSmtpPort(Number(e.target.value))} + className="w-full rounded-md bg-background border border-input text-sm text-foreground px-3 py-2 outline-none focus:border-brand-500" + />
    )}
    - - setSmtpUser(e.target.value)} placeholder="user@example.com" className="w-full rounded-md bg-background border border-input text-sm text-foreground px-3 py-2 outline-none focus:border-brand-500 placeholder:text-muted-foreground" /> + + setSmtpUser(e.target.value)} + placeholder={ui("user@example.com")} + className="w-full rounded-md bg-background border border-input text-sm text-foreground px-3 py-2 outline-none focus:border-brand-500 placeholder:text-muted-foreground" + />
    - - setSmtpPass(e.target.value)} placeholder="••••••••" className="w-full rounded-md bg-background border border-input text-sm text-foreground px-3 py-2 outline-none focus:border-brand-500 placeholder:text-muted-foreground" /> + + setSmtpPass(e.target.value)} + placeholder="••••••••" + className="w-full rounded-md bg-background border border-input text-sm text-foreground px-3 py-2 outline-none focus:border-brand-500 placeholder:text-muted-foreground" + />
    @@ -466,19 +669,40 @@ export function EmailPanel() { {formProvider === "resend" && (
    - - setResendApiKey(e.target.value)} placeholder="re_••••••••" className="w-full rounded-md bg-background border border-input text-sm text-foreground px-3 py-2 outline-none focus:border-brand-500 placeholder:text-muted-foreground" /> + + setResendApiKey(e.target.value)} + placeholder={ui("re_••••••••")} + className="w-full rounded-md bg-background border border-input text-sm text-foreground px-3 py-2 outline-none focus:border-brand-500 placeholder:text-muted-foreground" + />
    )}
    - {config && ( - )}
    @@ -492,26 +716,34 @@ export function EmailPanel() {
    -

    No email provider configured in the database

    +

    + {ui("No email provider configured in the database")} +

    - {config === null ? "Using environment variable fallback (if configured)" : ""} + {config === null + ? ui("Using environment variable fallback (if configured)") + : ""}

    -
    )} {/* Queue Stats & Management */} - {stats && ( - - )} + {stats && } {/* Info */}

    - All credentials are encrypted at rest using AES-256. The email queue retries failed sends with exponential backoff (up to 5 attempts). - After exhausting retries, emails move to the dead-letter queue for manual review. + {" "} + {ui( + "All credentials are encrypted at rest using AES-256. The email queue retries failed sends with exponential backoff (up to 5 attempts). After exhausting retries, emails move to the dead-letter queue for manual review.", + )}{" "}

    ); @@ -528,9 +760,13 @@ const STATUS_COLORS: Record = { }; function StatusBadge({ status }: { status: string }) { + const ui = useUiText(); + return ( - - {status === "dead" ? "dead letter" : status} + + {status === "dead" ? ui("dead letter") : status} ); } @@ -548,31 +784,51 @@ function timeAgo(dateStr: string): string { // ─── Email Queue Manager ───────────────────────────────────── -function EmailQueueManager({ stats, onStatsChange }: { stats: QueueStats; onStatsChange: () => void }) { +function EmailQueueManager({ + stats, + onStatsChange, +}: { + stats: QueueStats; + onStatsChange: () => void; +}) { + const ui = useUiText(); + const [items, setItems] = useState([]); - const [pagination, setPagination] = useState({ page: 1, limit: 25, total: 0 }); + const [pagination, setPagination] = useState({ + page: 1, + limit: 25, + total: 0, + }); const [filterStatus, setFilterStatus] = useState(null); const [loading, setLoading] = useState(false); const [expanded, setExpanded] = useState(false); const [selectedItem, setSelectedItem] = useState(null); const [actionLoading, setActionLoading] = useState(null); - const hasItems = stats.pending + stats.processing + stats.sent + stats.failed + stats.dead > 0; + const hasItems = + stats.pending + stats.processing + stats.sent + stats.failed + stats.dead > + 0; - const loadQueue = useCallback(async (page = 1, status: string | null = filterStatus) => { - setLoading(true); - try { - const params = new URLSearchParams({ page: String(page), limit: "25" }); - if (status) params.set("status", status); - const res = await apiFetch<{ data: QueueItem[]; pagination: Pagination }>(`/admin/email/queue?${params}`); - setItems(res.data); - setPagination(res.pagination); - } catch (e) { - console.error("Failed to load queue:", e); - } finally { - setLoading(false); - } - }, [filterStatus]); + const loadQueue = useCallback( + async (page = 1, status: string | null = filterStatus) => { + setLoading(true); + try { + const params = new URLSearchParams({ page: String(page), limit: "25" }); + if (status) params.set("status", status); + const res = await apiFetch<{ + data: QueueItem[]; + pagination: Pagination; + }>(`/admin/email/queue?${params}`); + setItems(res.data); + setPagination(res.pagination); + } catch (e) { + console.error(ui("Failed to load queue:"), e); + } finally { + setLoading(false); + } + }, + [ui, filterStatus], + ); useEffect(() => { if (expanded) loadQueue(1, filterStatus); @@ -590,20 +846,30 @@ function EmailQueueManager({ stats, onStatsChange }: { stats: QueueStats; onStat } async function handleRetryAll(status: string) { - if (!confirm(`Retry all ${status} emails? They will be reset to pending.`)) return; + if ( + !confirm( + ui("Retry all {v0} emails? They will be reset to pending.", { + v0: status, + }), + ) + ) + return; setActionLoading(`retry-all-${status}`); try { - const res = await apiFetch<{ count: number }>(`/admin/email/queue/retry-all?status=${status}`, { method: "POST" }); + const res = await apiFetch<{ count: number }>( + `/admin/email/queue/retry-all?status=${status}`, + { method: "POST" }, + ); await loadQueue(1); onStatsChange(); - alert(`${res.count} email(s) queued for retry.`); + alert(ui("{v0} email(s) queued for retry.", { v0: res.count })); } finally { setActionLoading(null); } } async function handleDelete(id: string) { - if (!confirm("Delete this email permanently?")) return; + if (!confirm(ui("Delete this email permanently?"))) return; setActionLoading(id); try { await apiFetch(`/admin/email/queue/${id}`, { method: "DELETE" }); @@ -616,13 +882,23 @@ function EmailQueueManager({ stats, onStatsChange }: { stats: QueueStats; onStat async function handlePurge(status: string) { const label = status === "dead" ? "dead letter" : status; - if (!confirm(`Permanently delete ALL ${label} emails? This cannot be undone.`)) return; + if ( + !confirm( + ui("Permanently delete ALL {v0} emails? This cannot be undone.", { + v0: label, + }), + ) + ) + return; setActionLoading(`purge-${status}`); try { - const res = await apiFetch<{ count: number }>(`/admin/email/queue?status=${status}`, { method: "DELETE" }); + const res = await apiFetch<{ count: number }>( + `/admin/email/queue?status=${status}`, + { method: "DELETE" }, + ); await loadQueue(1); onStatsChange(); - alert(`${res.count} email(s) deleted.`); + alert(ui("{v0} email(s) deleted.", { v0: res.count })); } finally { setActionLoading(null); } @@ -630,14 +906,19 @@ function EmailQueueManager({ stats, onStatsChange }: { stats: QueueStats; onStat async function handleViewDetail(id: string) { try { - const res = await apiFetch<{ data: QueueItem }>(`/admin/email/queue/${id}`); + const res = await apiFetch<{ data: QueueItem }>( + `/admin/email/queue/${id}`, + ); setSelectedItem(res.data); } catch (e) { - console.error("Failed to load email detail:", e); + console.error(ui("Failed to load email detail:"), e); } } - const totalPages = Math.max(1, Math.ceil(pagination.total / pagination.limit)); + const totalPages = Math.max( + 1, + Math.ceil(pagination.total / pagination.limit), + ); return (
    @@ -645,31 +926,65 @@ function EmailQueueManager({ stats, onStatsChange }: { stats: QueueStats; onStat

    - Email Queue + {ui("Email Queue")}{" "}

    - {hasItems && ( )}
    - {([ - { label: "Pending", value: stats.pending, color: "text-amber-400", key: "pending" }, - { label: "Processing", value: stats.processing, color: "text-blue-400", key: "processing" }, - { label: "Sent", value: stats.sent, color: "text-emerald-400", key: "sent" }, - { label: "Failed", value: stats.failed, color: "text-red-400", key: "failed" }, - { label: "Dead Letter", value: stats.dead, color: "text-muted-foreground", key: "dead" }, - ] as const).map((s) => ( + {( + [ + { + label: ui("Pending"), + value: stats.pending, + color: "text-amber-400", + key: "pending", + }, + { + label: ui("Processing"), + value: stats.processing, + color: "text-blue-400", + key: "processing", + }, + { + label: ui("Sent"), + value: stats.sent, + color: "text-emerald-400", + key: "sent", + }, + { + label: ui("Failed"), + value: stats.failed, + color: "text-red-400", + key: "failed", + }, + { + label: ui("Dead Letter"), + value: stats.dead, + color: "text-muted-foreground", + key: "dead", + }, + ] as const + ).map((s) => (
    {["failed", "dead"].includes(selectedItem.status) && ( - )} -
    @@ -719,18 +1049,72 @@ function EmailQueueManager({ stats, onStatsChange }: { stats: QueueStats; onStat
    - Attempt {selectedItem.attempts}/{selectedItem.max_attempts} + + {ui("Attempt")} {selectedItem.attempts}/ + {selectedItem.max_attempts} +
    -

    {selectedItem.subject}

    +

    + {selectedItem.subject} +

    -
    To: {selectedItem.to_address}
    -
    From: {selectedItem.from_address ?? "—"}
    -
    Created: {new Date(selectedItem.created_at).toLocaleString()}
    - {selectedItem.sent_at &&
    Sent: {new Date(selectedItem.sent_at).toLocaleString()}
    } - {selectedItem.next_retry_at && selectedItem.status === "failed" && ( -
    Next retry: {new Date(selectedItem.next_retry_at).toLocaleString()}
    +
    + {ui("To:")}{" "} + + {selectedItem.to_address} + +
    +
    + {ui("From:")}{" "} + + {selectedItem.from_address ?? "—"} + +
    +
    + + {ui("Created:")} + {" "} + + {new Date(selectedItem.created_at).toLocaleString( + ui.locale, + )} + +
    + {selectedItem.sent_at && ( +
    + + {ui("Sent:")} + {" "} + + {new Date(selectedItem.sent_at).toLocaleString( + ui.locale, + )} + +
    + )} + {selectedItem.next_retry_at && + selectedItem.status === "failed" && ( +
    + + {ui("Next retry:")} + {" "} + + {new Date(selectedItem.next_retry_at).toLocaleString( + ui.locale, + )} + +
    + )} + {selectedItem.template && ( +
    + + {ui("Template:")} + {" "} + + {selectedItem.template} + +
    )} - {selectedItem.template &&
    Template: {selectedItem.template}
    }
    {selectedItem.last_error && (
    @@ -742,13 +1126,15 @@ function EmailQueueManager({ stats, onStatsChange }: { stats: QueueStats; onStat {/* HTML Preview */} {selectedItem.html && (
    - Preview + + {ui("Preview")} +