@tutti-os/workspace-app-center 0.0.49 → 0.0.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -208,11 +208,6 @@ var appCenterEn = {
208
208
  category: "Content creation",
209
209
  description: "Open-source video editor with media arrangement and timeline editing.",
210
210
  name: "Open Cut"
211
- },
212
- documentSummarizer: {
213
- category: "Other tools",
214
- description: "Extract conclusions, key points, and action items from long documents.",
215
- name: "Document Summarizer"
216
211
  }
217
212
  },
218
213
  categories: {
@@ -227,12 +222,13 @@ var appCenterEn = {
227
222
  appList: "App Center",
228
223
  appPlural: "Apps",
229
224
  appSingular: "App",
225
+ communityApps: "Community apps",
230
226
  failedCount: "{{count}} failed",
231
227
  installedAppsTitle: "{{count}} installed {{appLabel}}",
232
228
  installedCount: "{{count}} installed",
233
229
  localDev: "local-dev",
234
230
  myApps: "My apps",
235
- recommendedApps: "Recommended apps",
231
+ recommendedApps: "Official apps",
236
232
  runningCount: "{{count}} running",
237
233
  updateAvailable: "Update to {{version}}",
238
234
  version: "Version {{version}}"
@@ -250,11 +246,14 @@ var appCenterEn = {
250
246
  catalogFailed: "Remote app catalog is unavailable. Local apps are still available.",
251
247
  catalogLoading: "Loading remote app catalog...",
252
248
  empty: "No apps installed yet",
249
+ communityAppsEmpty: "No community apps available.",
253
250
  myAppsEmpty: "Imported and created apps will appear here.",
254
- recommendedAppsEmpty: "No recommended apps available."
251
+ recommendedAppsEmpty: "No official apps available."
255
252
  },
256
253
  sources: {
254
+ developer: "Developer:",
257
255
  developerCount: "{{count}} developers",
256
+ developerMenuLabel: "Developer: {{name}}",
258
257
  githubRepository: "GitHub repository",
259
258
  official: "Official",
260
259
  title: "Source"
@@ -473,11 +472,6 @@ var appCenterZhCN = {
473
472
  category: "\u5185\u5BB9\u521B\u4F5C",
474
473
  description: "\u5F00\u6E90\u89C6\u9891\u526A\u8F91\u5DE5\u5177\uFF0C\u652F\u6301\u7D20\u6750\u7F16\u6392\u548C\u65F6\u95F4\u7EBF\u7F16\u8F91",
475
474
  name: "Open Cut"
476
- },
477
- documentSummarizer: {
478
- category: "\u5176\u4ED6\u5DE5\u5177",
479
- description: "\u63D0\u70BC\u957F\u6587\u6863\u7684\u7ED3\u8BBA\u3001\u8981\u70B9\u548C\u884C\u52A8\u9879",
480
- name: "\u6587\u6863\u603B\u7ED3\u5668"
481
475
  }
482
476
  },
483
477
  categories: {
@@ -492,12 +486,13 @@ var appCenterZhCN = {
492
486
  appList: "\u5E94\u7528\u4E2D\u5FC3",
493
487
  appPlural: "App",
494
488
  appSingular: "App",
489
+ communityApps: "\u793E\u533A\u5E94\u7528",
495
490
  failedCount: "{{count}} \u4E2A\u5931\u8D25",
496
491
  installedAppsTitle: "\u5DF2\u5B89\u88C5 {{count}} \u4E2A {{appLabel}}",
497
492
  installedCount: "\u5DF2\u5B89\u88C5 {{count}} \u4E2A",
498
493
  localDev: "\u672C\u5730\u8C03\u8BD5",
499
494
  myApps: "\u6211\u7684\u5E94\u7528",
500
- recommendedApps: "\u63A8\u8350\u5E94\u7528",
495
+ recommendedApps: "\u5B98\u65B9\u5E94\u7528",
501
496
  runningCount: "{{count}} \u4E2A\u8FD0\u884C\u4E2D",
502
497
  updateAvailable: "\u66F4\u65B0\u5230 {{version}}",
503
498
  version: "\u7248\u672C {{version}}"
@@ -515,11 +510,14 @@ var appCenterZhCN = {
515
510
  catalogFailed: "\u65E0\u6CD5\u52A0\u8F7D\u8FDC\u7A0B\u5E94\u7528\u76EE\u5F55\uFF0C\u672C\u5730\u5E94\u7528\u4ECD\u53EF\u7528\u3002",
516
511
  catalogLoading: "\u6B63\u5728\u52A0\u8F7D\u8FDC\u7A0B\u5E94\u7528\u76EE\u5F55...",
517
512
  empty: "\u8FD8\u6CA1\u6709\u5B89\u88C5\u5E94\u7528",
513
+ communityAppsEmpty: "\u6682\u65E0\u793E\u533A\u5E94\u7528",
518
514
  myAppsEmpty: "\u5BFC\u5165\u6216\u521B\u5EFA\u7684\u5E94\u7528\u4F1A\u663E\u793A\u5728\u8FD9\u91CC",
519
- recommendedAppsEmpty: "\u6682\u65E0\u63A8\u8350\u5E94\u7528"
515
+ recommendedAppsEmpty: "\u6682\u65E0\u5B98\u65B9\u5E94\u7528"
520
516
  },
521
517
  sources: {
518
+ developer: "\u5F00\u53D1\u8005\uFF1A",
522
519
  developerCount: "{{count}} \u4F4D\u5F00\u53D1\u8005",
520
+ developerMenuLabel: "\u5F00\u53D1\u8005\uFF1A{{name}}",
523
521
  githubRepository: "GitHub \u4ED3\u5E93",
524
522
  official: "\u5B98\u65B9",
525
523
  title: "\u6765\u6E90"
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/i18n/appCenterI18n.ts"],"sourcesContent":["import {\n createI18nRuntime,\n createScopedI18nRuntime,\n createScopedLocaleObjectsI18nModuleManifest,\n type I18nDictionary,\n type I18nRuntime\n} from \"@tutti-os/ui-i18n-runtime\";\n\ntype AppCenterI18nLocale = \"en\" | \"zh-CN\";\n\nexport const appCenterI18nNamespace = \"appCenter\";\nexport const tuttiI18nModule = createScopedLocaleObjectsI18nModuleManifest({\n localeObjectByLocale: {\n en: \"appCenterEn\",\n \"zh-CN\": \"appCenterZhCN\"\n },\n name: \"workspace-app-center\",\n namespace: \"appCenter\",\n sourceRoot: \"packages/workspace/app-center/src/ui\"\n});\n\nexport const appCenterEn = {\n actions: {\n cancel: \"Cancel\",\n deleteApp: \"Delete app\",\n exportApp: \"Export\",\n importApp: \"Import\",\n importAppTooltip:\n \"Only valid Tutti app .zip packages are supported. You can export an app and import it here.\",\n installApp: \"Install\",\n loadUnpackedApp: \"Load unpacked\",\n loadUnpackedAppTooltip:\n \"Select a Tutti app directory or a project root with .tutti/dev-app.\",\n moreActions: \"More actions\",\n openApp: \"Open\",\n openAppFolder: \"Open data folder\",\n openAppPackageFolder: \"Open app folder\",\n modifyAppWithAgent: \"Edit with agent\",\n publishAppUpdate: \"Republish\",\n refreshCatalog: \"Refresh catalog\",\n reloadLocalApp: \"Reload\",\n replaceIcon: \"Replace icon\",\n retryApp: \"Retry\",\n restartAndOpenApp: \"Restart and open\",\n updateApp: \"Update\",\n uninstallAndDeleteApp: \"Uninstall and delete\",\n uninstallApp: \"Uninstall\"\n },\n confirmations: {\n deleteAppDescription:\n \"This removes the app from your local apps and deletes its app data.\",\n deleteAppTitle: 'Delete \"{{name}}\"?',\n uninstallAppDescriptionLocal:\n \"This uninstalls the app from this workspace and deletes this workspace's app data. The app stays in My apps.\",\n uninstallAppDescriptionRecommended:\n \"This uninstalls the app from this workspace and deletes this workspace's app data.\",\n uninstallAppTitle: 'Uninstall \"{{name}}\"?',\n updateAppTitle: 'Update \"{{name}}\"?',\n updateRunningAppDescription:\n \"The app will restart after the update finishes to apply changes.\",\n uninstallAndDeleteAppDescription:\n \"This uninstalls the app, deletes its app data, and removes it from your local apps.\",\n uninstallAndDeleteAppTitle: 'Uninstall and delete \"{{name}}\"?'\n },\n factory: {\n actions: {\n cancel: \"Cancel\",\n create: \"Create app\",\n delete: \"Delete\",\n fix: \"Fix\",\n publish: \"Add to my apps\",\n validate: \"Validate\"\n },\n labels: {\n agent: \"Agent\",\n appName: \"App name\",\n create: \"Create app\",\n jobs: \"In progress\",\n model: \"Model\",\n modelReasoning: \"Model and thinking depth\",\n prompt: \"Prompt\",\n reasoningEffort: \"Thinking depth\",\n review: \"Review\",\n templateInspirationPrefix: \"Try these inspirations:\",\n templates: \"Start from\"\n },\n messages: {\n factoryJobFailed: \"Creation failed. Open the agent session for details.\",\n factoryJobFailedWithFix:\n \"Creation failed. Open the agent session or use Fix for details.\",\n loadingConfiguration: \"Loading configuration...\",\n loadingProviders: \"Loading agent providers...\",\n noAgentProviders: \"No available agent providers.\",\n noConfigurationOptions: \"No configuration options available.\",\n noModelOptions: \"No models available.\",\n noPermissionOptions: \"No review options available.\",\n noReasoningEffortOptions: \"No thinking depth options available.\"\n },\n placeholders: {\n appName: \"Name your app\",\n prompt: \"Describe the app to create\"\n },\n prompts: {\n fixDefault: \"Fix the draft so it passes validation.\"\n },\n permissionSemantics: {\n \"accept-edits\": {\n label: \"Accept edits\"\n },\n \"ask-before-write\": {\n label: \"Ask for approval\"\n },\n auto: {\n label: \"Approve for me\"\n },\n \"full-access\": {\n label: \"Full access\"\n },\n \"locked-down\": {\n label: \"Don't ask\"\n },\n unconfigurable: {\n label: \"Fixed mode\"\n }\n },\n templates: {\n lovart: {\n defaultName: \"Lovart Studio\",\n prompt:\n \"Create a local AI brand design studio inspired by Lovart. The app should turn one brand or campaign brief into a coordinated asset board. Provide a concise brief form for brand name, audience, tone, colors, deliverables, and constraints; generate an editable creative direction with palette, typography notes, messaging angles, and art direction; create a checklist of assets such as logo concepts, hero image, product mockups, social posts, ad banners, landing page sections, and short video storyboard frames; produce copy-ready image prompts for each asset with aspect ratio, style, and negative prompt guidance; render the assets in a canvas-like grid with status, notes, and iteration history; let users refine a selected asset with natural-language instructions; keep projects, briefs, generated prompts, notes, and asset states in app data. Use mock generated thumbnails locally unless a host-provided image generation API is available, and clearly show retryable generation errors.\",\n summary:\n \"Brand briefs, coordinated asset boards, and prompt workflows.\",\n title: \"Lovart Studio\"\n },\n lookup: {\n defaultName: \"Answer Book\",\n prompt:\n \"Create an offline answer-book app for playful quick guidance. Let the user type a question, draw one random short answer from a built-in answer deck, show the answer prominently with a redraw action, and keep recent questions and draws in app data. Do not use external network or factual lookup APIs.\",\n summary: \"Offline random answers for user-entered questions.\",\n title: \"Answer book\"\n },\n news: {\n defaultName: \"News Brief\",\n prompt:\n \"Create a news reader app backed by user-configurable RSS or Atom feeds that can be fetched without API keys. On refresh, fetch all saved feeds once, parse and deduplicate items by link or title, and show a concise feed with source names, timestamps, saved topics, and a short brief view. Keep feed and topic preferences in app data, and make feed fetch failures visible and retryable.\",\n summary: \"RSS and Atom feeds, brief views, and saved topics.\",\n title: \"News\"\n },\n gomoku: {\n defaultName: \"Gomoku\",\n prompt:\n \"Create a local Gomoku game app. Render a 15 by 15 board, let two local players alternate black and white stones, detect five in a row horizontally, vertically, or diagonally, show the winner or draw state, and provide restart and undo controls. Keep recent match results and settings in app data, and do not depend on external network services.\",\n summary: \"Local two-player Gomoku with win detection.\",\n title: \"Gomoku\"\n },\n system: {\n defaultName: \"System Monitor\",\n prompt:\n \"Create a local system dashboard inspired by btop. Show CPU, memory, process, network, and disk usage in a dense readable layout. Refresh automatically, keep settings in app data, and avoid external network dependencies.\",\n summary: \"CPU, memory, network, process, and disk usage.\",\n title: \"System dashboard\"\n },\n weather: {\n defaultName: \"Weather Watch\",\n prompt:\n \"Create a weather lookup app backed by Open-Meteo APIs that can be fetched without API keys. Use Open-Meteo geocoding to search locations and Open-Meteo forecast data for current conditions, hourly forecasts, and daily forecasts. Let the user enter and save locations, keep saved locations in app data, refresh selected locations on demand, and clearly surface retryable refresh errors.\",\n summary: \"Current conditions and forecasts for saved locations.\",\n title: \"Weather\"\n }\n },\n status: {\n canceled: \"Canceled\",\n failed: \"Failed\",\n generating: \"Generating\",\n preparing: \"Preparing\",\n published: \"Published\",\n queued: \"Queued\",\n ready: \"Completed\",\n validating: \"Validating\"\n }\n },\n catalogApps: {\n agentClaudeCode: {\n description:\n \"Start Claude Code in this workspace with access to shared context, files, and apps.\",\n name: \"Claude Code\"\n },\n agentCodex: {\n description:\n \"Start Codex in this workspace with access to shared context, files, and apps.\",\n name: \"Codex\"\n },\n issueManager: {\n description: \"Manage workspace tasks and runs.\",\n name: \"Task Manager\"\n }\n },\n comingSoonApps: {\n productCompetition: {\n category: \"Product design\",\n description:\n \"Compare competitor positioning, features, and experience to support product decisions.\",\n name: \"Competitor Analysis\"\n },\n designReview: {\n category: \"Product design\",\n description:\n \"Review flows, interfaces, and experience issues before release.\",\n name: \"Design Review\"\n },\n groupChat: {\n category: \"Other tools\",\n description: \"Collaborate with multiple agents in a group chat.\",\n name: \"Group Chat\"\n },\n aiPpt: {\n category: \"Daily office\",\n description:\n \"Generate presentation outlines, slide structure, and first-draft content.\",\n name: \"AI PPT\"\n },\n aiDocument: {\n category: \"Daily office\",\n description: \"Draft, rewrite, and organize documents.\",\n name: \"AI Document\"\n },\n aiSheet: {\n category: \"Daily office\",\n description: \"Build spreadsheets and analyze data with AI assistance.\",\n name: \"AI Spreadsheet\"\n },\n openCut: {\n category: \"Content creation\",\n description:\n \"Open-source video editor with media arrangement and timeline editing.\",\n name: \"Open Cut\"\n },\n documentSummarizer: {\n category: \"Other tools\",\n description:\n \"Extract conclusions, key points, and action items from long documents.\",\n name: \"Document Summarizer\"\n }\n },\n categories: {\n contentCreation: \"Content creation\",\n office: \"Daily office\",\n productDesign: \"Product design\",\n tools: \"Other tools\"\n },\n labels: {\n allApps: \"All\",\n appCategories: \"App categories\",\n appList: \"App Center\",\n appPlural: \"Apps\",\n appSingular: \"App\",\n failedCount: \"{{count}} failed\",\n installedAppsTitle: \"{{count}} installed {{appLabel}}\",\n installedCount: \"{{count}} installed\",\n localDev: \"local-dev\",\n myApps: \"My apps\",\n recommendedApps: \"Recommended apps\",\n runningCount: \"{{count}} running\",\n updateAvailable: \"Update to {{version}}\",\n version: \"Version {{version}}\"\n },\n localDev: {\n repairDialog: {\n confirm: \"Ask Agent to fix\",\n description: \"Ask Agent to fix it with one click.\",\n title: \".tutti files not found\"\n },\n repairPrompt:\n 'Load the skill https://github.com/tutti-os/tutti-agent-skills/tree/main/plugins/tutti/skills/tutti-workspace-app-factory and adapt project directory \"{{cwd}}\" into a Tutti local debug app. Generate .tutti/dev-app/; bootstrap.sh must read the host-injected TUTTI_APP_HOST and TUTTI_APP_PORT, and must not hard-code a port.'\n },\n messages: {\n appRuntimeFailed:\n \"The app failed to start. Open its session or logs for details.\",\n catalogFailed:\n \"Remote app catalog is unavailable. Local apps are still available.\",\n catalogLoading: \"Loading remote app catalog...\",\n empty: \"No apps installed yet\",\n myAppsEmpty: \"Imported and created apps will appear here.\",\n recommendedAppsEmpty: \"No recommended apps available.\"\n },\n sources: {\n developerCount: \"{{count}} developers\",\n githubRepository: \"GitHub repository\",\n official: \"Official\",\n title: \"Source\"\n },\n status: {\n comingSoon: \"Coming soon\",\n failed: \"Failed\",\n installProgress: {\n downloadedOfTotal: \"{{downloaded}} / {{total}}\",\n downloading: \"Downloading…\",\n installing: \"Installing…\",\n progressAria: \"App install progress\",\n starting: \"Starting…\"\n },\n installing: \"Installing\",\n installedPendingRestart: \"New version installed. Restart to apply.\",\n preparing: \"Preparing\",\n running: \"Running\",\n starting: \"Starting\",\n stopping: \"Stopping\",\n unavailable: \"Unavailable\"\n },\n title: \"App Center\"\n} as const satisfies I18nDictionary;\n\nexport const appCenterZhCN = {\n actions: {\n cancel: \"取消\",\n deleteApp: \"删除应用\",\n exportApp: \"导出\",\n importApp: \"导入\",\n importAppTooltip:\n \"仅支持符合规范的 Tutti 应用 .zip 包。你可以先导出应用,再在这里导入。\",\n installApp: \"安装\",\n loadUnpackedApp: \"加载未打包的本地程序\",\n loadUnpackedAppTooltip:\n \"选择 Tutti 应用目录,或包含 .tutti/dev-app 的项目根目录。\",\n moreActions: \"更多操作\",\n openApp: \"打开\",\n openAppFolder: \"打开数据目录\",\n openAppPackageFolder: \"打开应用目录\",\n modifyAppWithAgent: \"用智能体编辑\",\n publishAppUpdate: \"重新发布\",\n refreshCatalog: \"刷新目录\",\n reloadLocalApp: \"重新加载\",\n replaceIcon: \"替换图标\",\n retryApp: \"重试\",\n restartAndOpenApp: \"重启并打开\",\n updateApp: \"更新\",\n uninstallAndDeleteApp: \"卸载并删除\",\n uninstallApp: \"卸载\"\n },\n confirmations: {\n deleteAppDescription: \"这会从本地应用列表删除该应用,并删除它的应用数据。\",\n deleteAppTitle: \"删除“{{name}}”?\",\n uninstallAppDescriptionLocal:\n \"这会从当前工作区卸载该应用,并删除此工作区中的应用数据。应用本体仍保留在我的应用中。\",\n uninstallAppDescriptionRecommended:\n \"这会从当前工作区卸载该应用,并删除此工作区中的应用数据。\",\n uninstallAppTitle: \"卸载“{{name}}”?\",\n updateAppTitle: \"更新“{{name}}”?\",\n updateRunningAppDescription: \"更新完成后会重启应用以应用更改。\",\n uninstallAndDeleteAppDescription:\n \"这会卸载该应用、删除应用数据,并从本地应用列表移除。\",\n uninstallAndDeleteAppTitle: \"卸载并删除“{{name}}”?\"\n },\n factory: {\n actions: {\n cancel: \"取消\",\n create: \"创建应用\",\n delete: \"删除\",\n fix: \"修复\",\n publish: \"添加至我的应用\",\n validate: \"验证\"\n },\n labels: {\n agent: \"Agent\",\n appName: \"应用名称\",\n create: \"创建应用\",\n jobs: \"进行中\",\n model: \"模型\",\n modelReasoning: \"模型与思考深度\",\n prompt: \"提示词\",\n reasoningEffort: \"思考深度\",\n review: \"审查\",\n templateInspirationPrefix: \"试试这些灵感:\",\n templates: \"选择起点\"\n },\n messages: {\n factoryJobFailed: \"创建失败,打开 Agent 会话查看详情。\",\n factoryJobFailedWithFix: \"创建失败,打开 Agent 会话或使用修复查看详情。\",\n loadingConfiguration: \"正在加载配置...\",\n loadingProviders: \"正在加载 Agent Provider...\",\n noAgentProviders: \"暂无可用的 Agent Provider。\",\n noConfigurationOptions: \"暂无可用配置项。\",\n noModelOptions: \"暂无可用模型。\",\n noPermissionOptions: \"暂无可用的审查选项。\",\n noReasoningEffortOptions: \"暂无可用的思考深度选项。\"\n },\n placeholders: {\n appName: \"输入应用名称\",\n prompt: \"描述要创建的应用\"\n },\n prompts: {\n fixDefault: \"修复当前草稿,让它通过验证。\"\n },\n permissionSemantics: {\n \"accept-edits\": {\n label: \"接受编辑\"\n },\n \"ask-before-write\": {\n label: \"请求批准\"\n },\n auto: {\n label: \"替我审批\"\n },\n \"full-access\": {\n label: \"完全访问\"\n },\n \"locked-down\": {\n label: \"不再询问\"\n },\n unconfigurable: {\n label: \"固定模式\"\n }\n },\n templates: {\n lovart: {\n defaultName: \"Lovart Studio\",\n prompt:\n \"创建一个受 Lovart 启发的本地 AI 品牌设计工作室应用。应用需要把一句品牌或营销活动 brief 转成一组统一风格的资产看板。提供简洁的 brief 表单,字段包括品牌名、受众、语气、颜色、交付物和约束;生成可编辑的创意方向,包含色板、字体建议、信息表达角度和视觉方向;创建资产清单,例如 logo 概念、主视觉、产品 mockup、社媒帖子、广告横幅、落地页区块和短视频分镜;为每个资产生成可复制的图片提示词,包含画幅比例、风格和负面提示词建议;用类似画布的网格展示资产、状态、备注和迭代历史;允许用户用自然语言细化选中的资产;把项目、brief、生成提示词、备注和资产状态保存在应用数据目录。没有宿主提供的图片生成 API 时使用本地 mock 缩略图,并清楚展示可重试的生成失败状态。\",\n summary: \"品牌 brief、统一资产看板和提示词工作流。\",\n title: \"Lovart Studio\"\n },\n lookup: {\n defaultName: \"答案之书\",\n prompt:\n \"创建一个离线的答案之书应用,用于给用户输入的问题提供轻量随机指引。允许用户输入问题,从内置答案卡组里随机抽取一句短答案,突出展示答案,并提供重新抽取操作;把最近问题和抽取记录保存在应用数据目录。不要依赖外部网络或事实查询 API。\",\n summary: \"面向用户输入问题的离线随机答案。\",\n title: \"答案之书\"\n },\n news: {\n defaultName: \"新闻简报\",\n prompt:\n \"创建一个新闻阅读应用,使用用户可配置且无需 API Key 的 RSS 或 Atom feed 作为数据源。刷新时一次性抓取所有已保存 feed,解析并按链接或标题去重,展示简洁信息流、来源名称、时间、已保存主题和简报视图;把 feed 和主题偏好保存在应用数据目录,并让 feed 抓取失败状态可见且可重试。\",\n summary: \"RSS 和 Atom 信息流、简报视图和关注主题。\",\n title: \"新闻\"\n },\n gomoku: {\n defaultName: \"五子棋\",\n prompt:\n \"创建一个本地五子棋小游戏应用。渲染 15 x 15 棋盘,支持两名本地玩家轮流落黑白棋,检测横向、纵向和斜向五子连珠,展示胜负或平局状态,并提供重新开始和悔棋控制。把最近对局结果和设置保存在应用数据目录,不依赖外部网络服务。\",\n summary: \"带胜负检测的本地双人五子棋。\",\n title: \"五子棋\"\n },\n system: {\n defaultName: \"系统监控\",\n prompt:\n \"创建一个类似 btop 的本地系统看板。用紧凑清晰的布局展示 CPU、内存、进程、网络和磁盘占用;自动刷新,把设置保存在应用数据目录,并避免依赖外部网络。\",\n summary: \"CPU、内存、网络、进程和磁盘占用。\",\n title: \"系统看板\"\n },\n weather: {\n defaultName: \"天气查询\",\n prompt:\n \"创建一个天气查询应用,使用无需 API Key 的 Open-Meteo 数据源。用 Open-Meteo geocoding 搜索地点,用 Open-Meteo forecast 获取当前天气、小时预报和每日预报;允许用户输入并保存地点,把保存的地点放在应用数据目录,支持按需刷新选中地点,并清楚展示可重试的刷新失败状态。\",\n summary: \"保存地点的当前天气和预报。\",\n title: \"天气\"\n }\n },\n status: {\n canceled: \"已取消\",\n failed: \"失败\",\n generating: \"生成中\",\n preparing: \"准备中\",\n published: \"已发布\",\n queued: \"排队中\",\n ready: \"已完成\",\n validating: \"验证中\"\n }\n },\n catalogApps: {\n agentClaudeCode: {\n description: \"启动 Claude Code,处理当前工作区任务。\",\n name: \"Claude Code\"\n },\n agentCodex: {\n description: \"启动 Codex,处理当前工作区任务。\",\n name: \"Codex\"\n },\n issueManager: {\n description: \"管理工作区任务和运行记录。\",\n name: \"任务管理\"\n }\n },\n comingSoonApps: {\n productCompetition: {\n category: \"产品设计\",\n description: \"对比竞品定位、功能和体验,辅助产品决策\",\n name: \"竞品分析\"\n },\n designReview: {\n category: \"产品设计\",\n description: \"检查流程、界面和体验问题\",\n name: \"设计评审\"\n },\n groupChat: {\n category: \"其他工具\",\n description: \"在群里和多个 Agent 一起协作\",\n name: \"群聊\"\n },\n aiPpt: {\n category: \"日常办公\",\n description: \"生成演示大纲、页面结构和初稿内容\",\n name: \"AI PPT\"\n },\n aiDocument: {\n category: \"日常办公\",\n description: \"起草、改写和整理文档\",\n name: \"AI 文档\"\n },\n aiSheet: {\n category: \"日常办公\",\n description: \"用 AI 辅助搭建表格、分析数据\",\n name: \"AI 表格\"\n },\n openCut: {\n category: \"内容创作\",\n description: \"开源视频剪辑工具,支持素材编排和时间线编辑\",\n name: \"Open Cut\"\n },\n documentSummarizer: {\n category: \"其他工具\",\n description: \"提炼长文档的结论、要点和行动项\",\n name: \"文档总结器\"\n }\n },\n categories: {\n contentCreation: \"内容创作\",\n office: \"日常办公\",\n productDesign: \"产品设计\",\n tools: \"其他工具\"\n },\n labels: {\n allApps: \"全部\",\n appCategories: \"应用分类\",\n appList: \"应用中心\",\n appPlural: \"App\",\n appSingular: \"App\",\n failedCount: \"{{count}} 个失败\",\n installedAppsTitle: \"已安装 {{count}} 个 {{appLabel}}\",\n installedCount: \"已安装 {{count}} 个\",\n localDev: \"本地调试\",\n myApps: \"我的应用\",\n recommendedApps: \"推荐应用\",\n runningCount: \"{{count}} 个运行中\",\n updateAvailable: \"更新到 {{version}}\",\n version: \"版本 {{version}}\"\n },\n localDev: {\n repairDialog: {\n confirm: \"让 Agent 修复\",\n description: \"可一键让 Agent 为你修复。\",\n title: \"目录未识别到 .tutti 文件\"\n },\n repairPrompt:\n \"加载 skill https://github.com/tutti-os/tutti-agent-skills/tree/main/plugins/tutti/skills/tutti-workspace-app-factory,将项目目录“{{cwd}}”适配成本地调试 Tutti 应用。生成 .tutti/dev-app/;bootstrap.sh 必须读取宿主注入的 TUTTI_APP_HOST 和 TUTTI_APP_PORT,不要硬编码端口。\"\n },\n messages: {\n appRuntimeFailed: \"应用启动失败。请打开会话或日志查看详情。\",\n catalogFailed: \"无法加载远程应用目录,本地应用仍可用。\",\n catalogLoading: \"正在加载远程应用目录...\",\n empty: \"还没有安装应用\",\n myAppsEmpty: \"导入或创建的应用会显示在这里\",\n recommendedAppsEmpty: \"暂无推荐应用\"\n },\n sources: {\n developerCount: \"{{count}} 位开发者\",\n githubRepository: \"GitHub 仓库\",\n official: \"官方\",\n title: \"来源\"\n },\n status: {\n comingSoon: \"敬请期待\",\n failed: \"失败\",\n installProgress: {\n downloadedOfTotal: \"{{downloaded}} / {{total}}\",\n downloading: \"正在下载…\",\n installing: \"正在安装…\",\n progressAria: \"应用安装进度\",\n starting: \"正在启动…\"\n },\n installing: \"安装中\",\n installedPendingRestart: \"新版已安装,重启后生效\",\n preparing: \"准备中\",\n running: \"运行中\",\n starting: \"启动中\",\n stopping: \"停止中\",\n unavailable: \"不可用\"\n },\n title: \"应用中心\"\n} as const satisfies I18nDictionary;\n\nexport type AppCenterI18nKey = string;\n\nexport type AppCenterI18nRuntime = I18nRuntime<AppCenterI18nKey>;\n\nconst appCenterDefaults: Record<AppCenterI18nLocale, I18nDictionary> = {\n en: appCenterEn,\n \"zh-CN\": appCenterZhCN\n};\n\nexport const appCenterI18nResources = {\n en: {\n [appCenterI18nNamespace]: appCenterDefaults.en\n },\n \"zh-CN\": {\n [appCenterI18nNamespace]: appCenterDefaults[\"zh-CN\"]\n }\n} as const satisfies Record<AppCenterI18nLocale, I18nDictionary>;\n\nconst defaultAppCenterI18n = createI18nRuntime({\n dictionaries: [appCenterI18nResources.en]\n});\n\nexport function createAppCenterI18nRuntime(\n runtime: I18nRuntime<string> | undefined\n): AppCenterI18nRuntime {\n return createScopedI18nRuntime<AppCenterI18nKey>(\n runtime ?? defaultAppCenterI18n,\n appCenterI18nNamespace\n );\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AAIA,IAAM,yBAAyB;AAC/B,IAAM,kBAAkB,4CAA4C;AAAA,EACzE,sBAAsB;AAAA,IACpB,IAAI;AAAA,IACJ,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,EACN,WAAW;AAAA,EACX,YAAY;AACd,CAAC;AAEM,IAAM,cAAc;AAAA,EACzB,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX,kBACE;AAAA,IACF,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,wBACE;AAAA,IACF,aAAa;AAAA,IACb,SAAS;AAAA,IACT,eAAe;AAAA,IACf,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,UAAU;AAAA,IACV,mBAAmB;AAAA,IACnB,WAAW;AAAA,IACX,uBAAuB;AAAA,IACvB,cAAc;AAAA,EAChB;AAAA,EACA,eAAe;AAAA,IACb,sBACE;AAAA,IACF,gBAAgB;AAAA,IAChB,8BACE;AAAA,IACF,oCACE;AAAA,IACF,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,6BACE;AAAA,IACF,kCACE;AAAA,IACF,4BAA4B;AAAA,EAC9B;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,SAAS;AAAA,MACT,UAAU;AAAA,IACZ;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,QAAQ;AAAA,MACR,2BAA2B;AAAA,MAC3B,WAAW;AAAA,IACb;AAAA,IACA,UAAU;AAAA,MACR,kBAAkB;AAAA,MAClB,yBACE;AAAA,MACF,sBAAsB;AAAA,MACtB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,wBAAwB;AAAA,MACxB,gBAAgB;AAAA,MAChB,qBAAqB;AAAA,MACrB,0BAA0B;AAAA,IAC5B;AAAA,IACA,cAAc;AAAA,MACZ,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,IACA,SAAS;AAAA,MACP,YAAY;AAAA,IACd;AAAA,IACA,qBAAqB;AAAA,MACnB,gBAAgB;AAAA,QACd,OAAO;AAAA,MACT;AAAA,MACA,oBAAoB;AAAA,QAClB,OAAO;AAAA,MACT;AAAA,MACA,MAAM;AAAA,QACJ,OAAO;AAAA,MACT;AAAA,MACA,eAAe;AAAA,QACb,OAAO;AAAA,MACT;AAAA,MACA,eAAe;AAAA,QACb,OAAO;AAAA,MACT;AAAA,MACA,gBAAgB;AAAA,QACd,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,QAAQ;AAAA,QACN,aAAa;AAAA,QACb,QACE;AAAA,QACF,SACE;AAAA,QACF,OAAO;AAAA,MACT;AAAA,MACA,QAAQ;AAAA,QACN,aAAa;AAAA,QACb,QACE;AAAA,QACF,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,MACA,MAAM;AAAA,QACJ,aAAa;AAAA,QACb,QACE;AAAA,QACF,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,MACA,QAAQ;AAAA,QACN,aAAa;AAAA,QACb,QACE;AAAA,QACF,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,MACA,QAAQ;AAAA,QACN,aAAa;AAAA,QACb,QACE;AAAA,QACF,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,MACA,SAAS;AAAA,QACP,aAAa;AAAA,QACb,QACE;AAAA,QACF,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,iBAAiB;AAAA,MACf,aACE;AAAA,MACF,MAAM;AAAA,IACR;AAAA,IACA,YAAY;AAAA,MACV,aACE;AAAA,MACF,MAAM;AAAA,IACR;AAAA,IACA,cAAc;AAAA,MACZ,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,oBAAoB;AAAA,MAClB,UAAU;AAAA,MACV,aACE;AAAA,MACF,MAAM;AAAA,IACR;AAAA,IACA,cAAc;AAAA,MACZ,UAAU;AAAA,MACV,aACE;AAAA,MACF,MAAM;AAAA,IACR;AAAA,IACA,WAAW;AAAA,MACT,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,OAAO;AAAA,MACL,UAAU;AAAA,MACV,aACE;AAAA,MACF,MAAM;AAAA,IACR;AAAA,IACA,YAAY;AAAA,MACV,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,SAAS;AAAA,MACP,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,SAAS;AAAA,MACP,UAAU;AAAA,MACV,aACE;AAAA,MACF,MAAM;AAAA,IACR;AAAA,IACA,oBAAoB;AAAA,MAClB,UAAU;AAAA,MACV,aACE;AAAA,MACF,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,eAAe;AAAA,IACf,SAAS;AAAA,IACT,WAAW;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,cAAc;AAAA,MACZ,SAAS;AAAA,MACT,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,cACE;AAAA,EACJ;AAAA,EACA,UAAU;AAAA,IACR,kBACE;AAAA,IACF,eACE;AAAA,IACF,gBAAgB;AAAA,IAChB,OAAO;AAAA,IACP,aAAa;AAAA,IACb,sBAAsB;AAAA,EACxB;AAAA,EACA,SAAS;AAAA,IACP,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,iBAAiB;AAAA,MACf,mBAAmB;AAAA,MACnB,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,IACZ;AAAA,IACA,YAAY;AAAA,IACZ,yBAAyB;AAAA,IACzB,WAAW;AAAA,IACX,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA,OAAO;AACT;AAEO,IAAM,gBAAgB;AAAA,EAC3B,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX,kBACE;AAAA,IACF,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,wBACE;AAAA,IACF,aAAa;AAAA,IACb,SAAS;AAAA,IACT,eAAe;AAAA,IACf,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,UAAU;AAAA,IACV,mBAAmB;AAAA,IACnB,WAAW;AAAA,IACX,uBAAuB;AAAA,IACvB,cAAc;AAAA,EAChB;AAAA,EACA,eAAe;AAAA,IACb,sBAAsB;AAAA,IACtB,gBAAgB;AAAA,IAChB,8BACE;AAAA,IACF,oCACE;AAAA,IACF,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,6BAA6B;AAAA,IAC7B,kCACE;AAAA,IACF,4BAA4B;AAAA,EAC9B;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,SAAS;AAAA,MACT,UAAU;AAAA,IACZ;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,QAAQ;AAAA,MACR,2BAA2B;AAAA,MAC3B,WAAW;AAAA,IACb;AAAA,IACA,UAAU;AAAA,MACR,kBAAkB;AAAA,MAClB,yBAAyB;AAAA,MACzB,sBAAsB;AAAA,MACtB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,wBAAwB;AAAA,MACxB,gBAAgB;AAAA,MAChB,qBAAqB;AAAA,MACrB,0BAA0B;AAAA,IAC5B;AAAA,IACA,cAAc;AAAA,MACZ,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,IACA,SAAS;AAAA,MACP,YAAY;AAAA,IACd;AAAA,IACA,qBAAqB;AAAA,MACnB,gBAAgB;AAAA,QACd,OAAO;AAAA,MACT;AAAA,MACA,oBAAoB;AAAA,QAClB,OAAO;AAAA,MACT;AAAA,MACA,MAAM;AAAA,QACJ,OAAO;AAAA,MACT;AAAA,MACA,eAAe;AAAA,QACb,OAAO;AAAA,MACT;AAAA,MACA,eAAe;AAAA,QACb,OAAO;AAAA,MACT;AAAA,MACA,gBAAgB;AAAA,QACd,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,QAAQ;AAAA,QACN,aAAa;AAAA,QACb,QACE;AAAA,QACF,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,MACA,QAAQ;AAAA,QACN,aAAa;AAAA,QACb,QACE;AAAA,QACF,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,MACA,MAAM;AAAA,QACJ,aAAa;AAAA,QACb,QACE;AAAA,QACF,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,MACA,QAAQ;AAAA,QACN,aAAa;AAAA,QACb,QACE;AAAA,QACF,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,MACA,QAAQ;AAAA,QACN,aAAa;AAAA,QACb,QACE;AAAA,QACF,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,MACA,SAAS;AAAA,QACP,aAAa;AAAA,QACb,QACE;AAAA,QACF,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,iBAAiB;AAAA,MACf,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,cAAc;AAAA,MACZ,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,oBAAoB;AAAA,MAClB,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,cAAc;AAAA,MACZ,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,WAAW;AAAA,MACT,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,OAAO;AAAA,MACL,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,YAAY;AAAA,MACV,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,SAAS;AAAA,MACP,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,SAAS;AAAA,MACP,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA,oBAAoB;AAAA,MAClB,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,eAAe;AAAA,IACf,SAAS;AAAA,IACT,WAAW;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,cAAc;AAAA,MACZ,SAAS;AAAA,MACT,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,cACE;AAAA,EACJ;AAAA,EACA,UAAU;AAAA,IACR,kBAAkB;AAAA,IAClB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,OAAO;AAAA,IACP,aAAa;AAAA,IACb,sBAAsB;AAAA,EACxB;AAAA,EACA,SAAS;AAAA,IACP,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,iBAAiB;AAAA,MACf,mBAAmB;AAAA,MACnB,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,IACZ;AAAA,IACA,YAAY;AAAA,IACZ,yBAAyB;AAAA,IACzB,WAAW;AAAA,IACX,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA,OAAO;AACT;AAMA,IAAM,oBAAiE;AAAA,EACrE,IAAI;AAAA,EACJ,SAAS;AACX;AAEO,IAAM,yBAAyB;AAAA,EACpC,IAAI;AAAA,IACF,CAAC,sBAAsB,GAAG,kBAAkB;AAAA,EAC9C;AAAA,EACA,SAAS;AAAA,IACP,CAAC,sBAAsB,GAAG,kBAAkB,OAAO;AAAA,EACrD;AACF;AAEA,IAAM,uBAAuB,kBAAkB;AAAA,EAC7C,cAAc,CAAC,uBAAuB,EAAE;AAC1C,CAAC;AAEM,SAAS,2BACd,SACsB;AACtB,SAAO;AAAA,IACL,WAAW;AAAA,IACX;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/i18n/appCenterI18n.ts"],"sourcesContent":["import {\n createI18nRuntime,\n createScopedI18nRuntime,\n createScopedLocaleObjectsI18nModuleManifest,\n type I18nDictionary,\n type I18nRuntime\n} from \"@tutti-os/ui-i18n-runtime\";\n\ntype AppCenterI18nLocale = \"en\" | \"zh-CN\";\n\nexport const appCenterI18nNamespace = \"appCenter\";\nexport const tuttiI18nModule = createScopedLocaleObjectsI18nModuleManifest({\n localeObjectByLocale: {\n en: \"appCenterEn\",\n \"zh-CN\": \"appCenterZhCN\"\n },\n name: \"workspace-app-center\",\n namespace: \"appCenter\",\n sourceRoot: \"packages/workspace/app-center/src/ui\"\n});\n\nexport const appCenterEn = {\n actions: {\n cancel: \"Cancel\",\n deleteApp: \"Delete app\",\n exportApp: \"Export\",\n importApp: \"Import\",\n importAppTooltip:\n \"Only valid Tutti app .zip packages are supported. You can export an app and import it here.\",\n installApp: \"Install\",\n loadUnpackedApp: \"Load unpacked\",\n loadUnpackedAppTooltip:\n \"Select a Tutti app directory or a project root with .tutti/dev-app.\",\n moreActions: \"More actions\",\n openApp: \"Open\",\n openAppFolder: \"Open data folder\",\n openAppPackageFolder: \"Open app folder\",\n modifyAppWithAgent: \"Edit with agent\",\n publishAppUpdate: \"Republish\",\n refreshCatalog: \"Refresh catalog\",\n reloadLocalApp: \"Reload\",\n replaceIcon: \"Replace icon\",\n retryApp: \"Retry\",\n restartAndOpenApp: \"Restart and open\",\n updateApp: \"Update\",\n uninstallAndDeleteApp: \"Uninstall and delete\",\n uninstallApp: \"Uninstall\"\n },\n confirmations: {\n deleteAppDescription:\n \"This removes the app from your local apps and deletes its app data.\",\n deleteAppTitle: 'Delete \"{{name}}\"?',\n uninstallAppDescriptionLocal:\n \"This uninstalls the app from this workspace and deletes this workspace's app data. The app stays in My apps.\",\n uninstallAppDescriptionRecommended:\n \"This uninstalls the app from this workspace and deletes this workspace's app data.\",\n uninstallAppTitle: 'Uninstall \"{{name}}\"?',\n updateAppTitle: 'Update \"{{name}}\"?',\n updateRunningAppDescription:\n \"The app will restart after the update finishes to apply changes.\",\n uninstallAndDeleteAppDescription:\n \"This uninstalls the app, deletes its app data, and removes it from your local apps.\",\n uninstallAndDeleteAppTitle: 'Uninstall and delete \"{{name}}\"?'\n },\n factory: {\n actions: {\n cancel: \"Cancel\",\n create: \"Create app\",\n delete: \"Delete\",\n fix: \"Fix\",\n publish: \"Add to my apps\",\n validate: \"Validate\"\n },\n labels: {\n agent: \"Agent\",\n appName: \"App name\",\n create: \"Create app\",\n jobs: \"In progress\",\n model: \"Model\",\n modelReasoning: \"Model and thinking depth\",\n prompt: \"Prompt\",\n reasoningEffort: \"Thinking depth\",\n review: \"Review\",\n templateInspirationPrefix: \"Try these inspirations:\",\n templates: \"Start from\"\n },\n messages: {\n factoryJobFailed: \"Creation failed. Open the agent session for details.\",\n factoryJobFailedWithFix:\n \"Creation failed. Open the agent session or use Fix for details.\",\n loadingConfiguration: \"Loading configuration...\",\n loadingProviders: \"Loading agent providers...\",\n noAgentProviders: \"No available agent providers.\",\n noConfigurationOptions: \"No configuration options available.\",\n noModelOptions: \"No models available.\",\n noPermissionOptions: \"No review options available.\",\n noReasoningEffortOptions: \"No thinking depth options available.\"\n },\n placeholders: {\n appName: \"Name your app\",\n prompt: \"Describe the app to create\"\n },\n prompts: {\n fixDefault: \"Fix the draft so it passes validation.\"\n },\n permissionSemantics: {\n \"accept-edits\": {\n label: \"Accept edits\"\n },\n \"ask-before-write\": {\n label: \"Ask for approval\"\n },\n auto: {\n label: \"Approve for me\"\n },\n \"full-access\": {\n label: \"Full access\"\n },\n \"locked-down\": {\n label: \"Don't ask\"\n },\n unconfigurable: {\n label: \"Fixed mode\"\n }\n },\n templates: {\n lovart: {\n defaultName: \"Lovart Studio\",\n prompt:\n \"Create a local AI brand design studio inspired by Lovart. The app should turn one brand or campaign brief into a coordinated asset board. Provide a concise brief form for brand name, audience, tone, colors, deliverables, and constraints; generate an editable creative direction with palette, typography notes, messaging angles, and art direction; create a checklist of assets such as logo concepts, hero image, product mockups, social posts, ad banners, landing page sections, and short video storyboard frames; produce copy-ready image prompts for each asset with aspect ratio, style, and negative prompt guidance; render the assets in a canvas-like grid with status, notes, and iteration history; let users refine a selected asset with natural-language instructions; keep projects, briefs, generated prompts, notes, and asset states in app data. Use mock generated thumbnails locally unless a host-provided image generation API is available, and clearly show retryable generation errors.\",\n summary:\n \"Brand briefs, coordinated asset boards, and prompt workflows.\",\n title: \"Lovart Studio\"\n },\n lookup: {\n defaultName: \"Answer Book\",\n prompt:\n \"Create an offline answer-book app for playful quick guidance. Let the user type a question, draw one random short answer from a built-in answer deck, show the answer prominently with a redraw action, and keep recent questions and draws in app data. Do not use external network or factual lookup APIs.\",\n summary: \"Offline random answers for user-entered questions.\",\n title: \"Answer book\"\n },\n news: {\n defaultName: \"News Brief\",\n prompt:\n \"Create a news reader app backed by user-configurable RSS or Atom feeds that can be fetched without API keys. On refresh, fetch all saved feeds once, parse and deduplicate items by link or title, and show a concise feed with source names, timestamps, saved topics, and a short brief view. Keep feed and topic preferences in app data, and make feed fetch failures visible and retryable.\",\n summary: \"RSS and Atom feeds, brief views, and saved topics.\",\n title: \"News\"\n },\n gomoku: {\n defaultName: \"Gomoku\",\n prompt:\n \"Create a local Gomoku game app. Render a 15 by 15 board, let two local players alternate black and white stones, detect five in a row horizontally, vertically, or diagonally, show the winner or draw state, and provide restart and undo controls. Keep recent match results and settings in app data, and do not depend on external network services.\",\n summary: \"Local two-player Gomoku with win detection.\",\n title: \"Gomoku\"\n },\n system: {\n defaultName: \"System Monitor\",\n prompt:\n \"Create a local system dashboard inspired by btop. Show CPU, memory, process, network, and disk usage in a dense readable layout. Refresh automatically, keep settings in app data, and avoid external network dependencies.\",\n summary: \"CPU, memory, network, process, and disk usage.\",\n title: \"System dashboard\"\n },\n weather: {\n defaultName: \"Weather Watch\",\n prompt:\n \"Create a weather lookup app backed by Open-Meteo APIs that can be fetched without API keys. Use Open-Meteo geocoding to search locations and Open-Meteo forecast data for current conditions, hourly forecasts, and daily forecasts. Let the user enter and save locations, keep saved locations in app data, refresh selected locations on demand, and clearly surface retryable refresh errors.\",\n summary: \"Current conditions and forecasts for saved locations.\",\n title: \"Weather\"\n }\n },\n status: {\n canceled: \"Canceled\",\n failed: \"Failed\",\n generating: \"Generating\",\n preparing: \"Preparing\",\n published: \"Published\",\n queued: \"Queued\",\n ready: \"Completed\",\n validating: \"Validating\"\n }\n },\n catalogApps: {\n agentClaudeCode: {\n description:\n \"Start Claude Code in this workspace with access to shared context, files, and apps.\",\n name: \"Claude Code\"\n },\n agentCodex: {\n description:\n \"Start Codex in this workspace with access to shared context, files, and apps.\",\n name: \"Codex\"\n },\n issueManager: {\n description: \"Manage workspace tasks and runs.\",\n name: \"Task Manager\"\n }\n },\n comingSoonApps: {\n productCompetition: {\n category: \"Product design\",\n description:\n \"Compare competitor positioning, features, and experience to support product decisions.\",\n name: \"Competitor Analysis\"\n },\n designReview: {\n category: \"Product design\",\n description:\n \"Review flows, interfaces, and experience issues before release.\",\n name: \"Design Review\"\n },\n groupChat: {\n category: \"Other tools\",\n description: \"Collaborate with multiple agents in a group chat.\",\n name: \"Group Chat\"\n },\n aiPpt: {\n category: \"Daily office\",\n description:\n \"Generate presentation outlines, slide structure, and first-draft content.\",\n name: \"AI PPT\"\n },\n aiDocument: {\n category: \"Daily office\",\n description: \"Draft, rewrite, and organize documents.\",\n name: \"AI Document\"\n },\n aiSheet: {\n category: \"Daily office\",\n description: \"Build spreadsheets and analyze data with AI assistance.\",\n name: \"AI Spreadsheet\"\n },\n openCut: {\n category: \"Content creation\",\n description:\n \"Open-source video editor with media arrangement and timeline editing.\",\n name: \"Open Cut\"\n }\n },\n categories: {\n contentCreation: \"Content creation\",\n office: \"Daily office\",\n productDesign: \"Product design\",\n tools: \"Other tools\"\n },\n labels: {\n allApps: \"All\",\n appCategories: \"App categories\",\n appList: \"App Center\",\n appPlural: \"Apps\",\n appSingular: \"App\",\n communityApps: \"Community apps\",\n failedCount: \"{{count}} failed\",\n installedAppsTitle: \"{{count}} installed {{appLabel}}\",\n installedCount: \"{{count}} installed\",\n localDev: \"local-dev\",\n myApps: \"My apps\",\n recommendedApps: \"Official apps\",\n runningCount: \"{{count}} running\",\n updateAvailable: \"Update to {{version}}\",\n version: \"Version {{version}}\"\n },\n localDev: {\n repairDialog: {\n confirm: \"Ask Agent to fix\",\n description: \"Ask Agent to fix it with one click.\",\n title: \".tutti files not found\"\n },\n repairPrompt:\n 'Load the skill https://github.com/tutti-os/tutti-agent-skills/tree/main/plugins/tutti/skills/tutti-workspace-app-factory and adapt project directory \"{{cwd}}\" into a Tutti local debug app. Generate .tutti/dev-app/; bootstrap.sh must read the host-injected TUTTI_APP_HOST and TUTTI_APP_PORT, and must not hard-code a port.'\n },\n messages: {\n appRuntimeFailed:\n \"The app failed to start. Open its session or logs for details.\",\n catalogFailed:\n \"Remote app catalog is unavailable. Local apps are still available.\",\n catalogLoading: \"Loading remote app catalog...\",\n empty: \"No apps installed yet\",\n communityAppsEmpty: \"No community apps available.\",\n myAppsEmpty: \"Imported and created apps will appear here.\",\n recommendedAppsEmpty: \"No official apps available.\"\n },\n sources: {\n developer: \"Developer:\",\n developerCount: \"{{count}} developers\",\n developerMenuLabel: \"Developer: {{name}}\",\n githubRepository: \"GitHub repository\",\n official: \"Official\",\n title: \"Source\"\n },\n status: {\n comingSoon: \"Coming soon\",\n failed: \"Failed\",\n installProgress: {\n downloadedOfTotal: \"{{downloaded}} / {{total}}\",\n downloading: \"Downloading…\",\n installing: \"Installing…\",\n progressAria: \"App install progress\",\n starting: \"Starting…\"\n },\n installing: \"Installing\",\n installedPendingRestart: \"New version installed. Restart to apply.\",\n preparing: \"Preparing\",\n running: \"Running\",\n starting: \"Starting\",\n stopping: \"Stopping\",\n unavailable: \"Unavailable\"\n },\n title: \"App Center\"\n} as const satisfies I18nDictionary;\n\nexport const appCenterZhCN = {\n actions: {\n cancel: \"取消\",\n deleteApp: \"删除应用\",\n exportApp: \"导出\",\n importApp: \"导入\",\n importAppTooltip:\n \"仅支持符合规范的 Tutti 应用 .zip 包。你可以先导出应用,再在这里导入。\",\n installApp: \"安装\",\n loadUnpackedApp: \"加载未打包的本地程序\",\n loadUnpackedAppTooltip:\n \"选择 Tutti 应用目录,或包含 .tutti/dev-app 的项目根目录。\",\n moreActions: \"更多操作\",\n openApp: \"打开\",\n openAppFolder: \"打开数据目录\",\n openAppPackageFolder: \"打开应用目录\",\n modifyAppWithAgent: \"用智能体编辑\",\n publishAppUpdate: \"重新发布\",\n refreshCatalog: \"刷新目录\",\n reloadLocalApp: \"重新加载\",\n replaceIcon: \"替换图标\",\n retryApp: \"重试\",\n restartAndOpenApp: \"重启并打开\",\n updateApp: \"更新\",\n uninstallAndDeleteApp: \"卸载并删除\",\n uninstallApp: \"卸载\"\n },\n confirmations: {\n deleteAppDescription: \"这会从本地应用列表删除该应用,并删除它的应用数据。\",\n deleteAppTitle: \"删除“{{name}}”?\",\n uninstallAppDescriptionLocal:\n \"这会从当前工作区卸载该应用,并删除此工作区中的应用数据。应用本体仍保留在我的应用中。\",\n uninstallAppDescriptionRecommended:\n \"这会从当前工作区卸载该应用,并删除此工作区中的应用数据。\",\n uninstallAppTitle: \"卸载“{{name}}”?\",\n updateAppTitle: \"更新“{{name}}”?\",\n updateRunningAppDescription: \"更新完成后会重启应用以应用更改。\",\n uninstallAndDeleteAppDescription:\n \"这会卸载该应用、删除应用数据,并从本地应用列表移除。\",\n uninstallAndDeleteAppTitle: \"卸载并删除“{{name}}”?\"\n },\n factory: {\n actions: {\n cancel: \"取消\",\n create: \"创建应用\",\n delete: \"删除\",\n fix: \"修复\",\n publish: \"添加至我的应用\",\n validate: \"验证\"\n },\n labels: {\n agent: \"Agent\",\n appName: \"应用名称\",\n create: \"创建应用\",\n jobs: \"进行中\",\n model: \"模型\",\n modelReasoning: \"模型与思考深度\",\n prompt: \"提示词\",\n reasoningEffort: \"思考深度\",\n review: \"审查\",\n templateInspirationPrefix: \"试试这些灵感:\",\n templates: \"选择起点\"\n },\n messages: {\n factoryJobFailed: \"创建失败,打开 Agent 会话查看详情。\",\n factoryJobFailedWithFix: \"创建失败,打开 Agent 会话或使用修复查看详情。\",\n loadingConfiguration: \"正在加载配置...\",\n loadingProviders: \"正在加载 Agent Provider...\",\n noAgentProviders: \"暂无可用的 Agent Provider。\",\n noConfigurationOptions: \"暂无可用配置项。\",\n noModelOptions: \"暂无可用模型。\",\n noPermissionOptions: \"暂无可用的审查选项。\",\n noReasoningEffortOptions: \"暂无可用的思考深度选项。\"\n },\n placeholders: {\n appName: \"输入应用名称\",\n prompt: \"描述要创建的应用\"\n },\n prompts: {\n fixDefault: \"修复当前草稿,让它通过验证。\"\n },\n permissionSemantics: {\n \"accept-edits\": {\n label: \"接受编辑\"\n },\n \"ask-before-write\": {\n label: \"请求批准\"\n },\n auto: {\n label: \"替我审批\"\n },\n \"full-access\": {\n label: \"完全访问\"\n },\n \"locked-down\": {\n label: \"不再询问\"\n },\n unconfigurable: {\n label: \"固定模式\"\n }\n },\n templates: {\n lovart: {\n defaultName: \"Lovart Studio\",\n prompt:\n \"创建一个受 Lovart 启发的本地 AI 品牌设计工作室应用。应用需要把一句品牌或营销活动 brief 转成一组统一风格的资产看板。提供简洁的 brief 表单,字段包括品牌名、受众、语气、颜色、交付物和约束;生成可编辑的创意方向,包含色板、字体建议、信息表达角度和视觉方向;创建资产清单,例如 logo 概念、主视觉、产品 mockup、社媒帖子、广告横幅、落地页区块和短视频分镜;为每个资产生成可复制的图片提示词,包含画幅比例、风格和负面提示词建议;用类似画布的网格展示资产、状态、备注和迭代历史;允许用户用自然语言细化选中的资产;把项目、brief、生成提示词、备注和资产状态保存在应用数据目录。没有宿主提供的图片生成 API 时使用本地 mock 缩略图,并清楚展示可重试的生成失败状态。\",\n summary: \"品牌 brief、统一资产看板和提示词工作流。\",\n title: \"Lovart Studio\"\n },\n lookup: {\n defaultName: \"答案之书\",\n prompt:\n \"创建一个离线的答案之书应用,用于给用户输入的问题提供轻量随机指引。允许用户输入问题,从内置答案卡组里随机抽取一句短答案,突出展示答案,并提供重新抽取操作;把最近问题和抽取记录保存在应用数据目录。不要依赖外部网络或事实查询 API。\",\n summary: \"面向用户输入问题的离线随机答案。\",\n title: \"答案之书\"\n },\n news: {\n defaultName: \"新闻简报\",\n prompt:\n \"创建一个新闻阅读应用,使用用户可配置且无需 API Key 的 RSS 或 Atom feed 作为数据源。刷新时一次性抓取所有已保存 feed,解析并按链接或标题去重,展示简洁信息流、来源名称、时间、已保存主题和简报视图;把 feed 和主题偏好保存在应用数据目录,并让 feed 抓取失败状态可见且可重试。\",\n summary: \"RSS 和 Atom 信息流、简报视图和关注主题。\",\n title: \"新闻\"\n },\n gomoku: {\n defaultName: \"五子棋\",\n prompt:\n \"创建一个本地五子棋小游戏应用。渲染 15 x 15 棋盘,支持两名本地玩家轮流落黑白棋,检测横向、纵向和斜向五子连珠,展示胜负或平局状态,并提供重新开始和悔棋控制。把最近对局结果和设置保存在应用数据目录,不依赖外部网络服务。\",\n summary: \"带胜负检测的本地双人五子棋。\",\n title: \"五子棋\"\n },\n system: {\n defaultName: \"系统监控\",\n prompt:\n \"创建一个类似 btop 的本地系统看板。用紧凑清晰的布局展示 CPU、内存、进程、网络和磁盘占用;自动刷新,把设置保存在应用数据目录,并避免依赖外部网络。\",\n summary: \"CPU、内存、网络、进程和磁盘占用。\",\n title: \"系统看板\"\n },\n weather: {\n defaultName: \"天气查询\",\n prompt:\n \"创建一个天气查询应用,使用无需 API Key 的 Open-Meteo 数据源。用 Open-Meteo geocoding 搜索地点,用 Open-Meteo forecast 获取当前天气、小时预报和每日预报;允许用户输入并保存地点,把保存的地点放在应用数据目录,支持按需刷新选中地点,并清楚展示可重试的刷新失败状态。\",\n summary: \"保存地点的当前天气和预报。\",\n title: \"天气\"\n }\n },\n status: {\n canceled: \"已取消\",\n failed: \"失败\",\n generating: \"生成中\",\n preparing: \"准备中\",\n published: \"已发布\",\n queued: \"排队中\",\n ready: \"已完成\",\n validating: \"验证中\"\n }\n },\n catalogApps: {\n agentClaudeCode: {\n description: \"启动 Claude Code,处理当前工作区任务。\",\n name: \"Claude Code\"\n },\n agentCodex: {\n description: \"启动 Codex,处理当前工作区任务。\",\n name: \"Codex\"\n },\n issueManager: {\n description: \"管理工作区任务和运行记录。\",\n name: \"任务管理\"\n }\n },\n comingSoonApps: {\n productCompetition: {\n category: \"产品设计\",\n description: \"对比竞品定位、功能和体验,辅助产品决策\",\n name: \"竞品分析\"\n },\n designReview: {\n category: \"产品设计\",\n description: \"检查流程、界面和体验问题\",\n name: \"设计评审\"\n },\n groupChat: {\n category: \"其他工具\",\n description: \"在群里和多个 Agent 一起协作\",\n name: \"群聊\"\n },\n aiPpt: {\n category: \"日常办公\",\n description: \"生成演示大纲、页面结构和初稿内容\",\n name: \"AI PPT\"\n },\n aiDocument: {\n category: \"日常办公\",\n description: \"起草、改写和整理文档\",\n name: \"AI 文档\"\n },\n aiSheet: {\n category: \"日常办公\",\n description: \"用 AI 辅助搭建表格、分析数据\",\n name: \"AI 表格\"\n },\n openCut: {\n category: \"内容创作\",\n description: \"开源视频剪辑工具,支持素材编排和时间线编辑\",\n name: \"Open Cut\"\n }\n },\n categories: {\n contentCreation: \"内容创作\",\n office: \"日常办公\",\n productDesign: \"产品设计\",\n tools: \"其他工具\"\n },\n labels: {\n allApps: \"全部\",\n appCategories: \"应用分类\",\n appList: \"应用中心\",\n appPlural: \"App\",\n appSingular: \"App\",\n communityApps: \"社区应用\",\n failedCount: \"{{count}} 个失败\",\n installedAppsTitle: \"已安装 {{count}} 个 {{appLabel}}\",\n installedCount: \"已安装 {{count}} 个\",\n localDev: \"本地调试\",\n myApps: \"我的应用\",\n recommendedApps: \"官方应用\",\n runningCount: \"{{count}} 个运行中\",\n updateAvailable: \"更新到 {{version}}\",\n version: \"版本 {{version}}\"\n },\n localDev: {\n repairDialog: {\n confirm: \"让 Agent 修复\",\n description: \"可一键让 Agent 为你修复。\",\n title: \"目录未识别到 .tutti 文件\"\n },\n repairPrompt:\n \"加载 skill https://github.com/tutti-os/tutti-agent-skills/tree/main/plugins/tutti/skills/tutti-workspace-app-factory,将项目目录“{{cwd}}”适配成本地调试 Tutti 应用。生成 .tutti/dev-app/;bootstrap.sh 必须读取宿主注入的 TUTTI_APP_HOST 和 TUTTI_APP_PORT,不要硬编码端口。\"\n },\n messages: {\n appRuntimeFailed: \"应用启动失败。请打开会话或日志查看详情。\",\n catalogFailed: \"无法加载远程应用目录,本地应用仍可用。\",\n catalogLoading: \"正在加载远程应用目录...\",\n empty: \"还没有安装应用\",\n communityAppsEmpty: \"暂无社区应用\",\n myAppsEmpty: \"导入或创建的应用会显示在这里\",\n recommendedAppsEmpty: \"暂无官方应用\"\n },\n sources: {\n developer: \"开发者:\",\n developerCount: \"{{count}} 位开发者\",\n developerMenuLabel: \"开发者:{{name}}\",\n githubRepository: \"GitHub 仓库\",\n official: \"官方\",\n title: \"来源\"\n },\n status: {\n comingSoon: \"敬请期待\",\n failed: \"失败\",\n installProgress: {\n downloadedOfTotal: \"{{downloaded}} / {{total}}\",\n downloading: \"正在下载…\",\n installing: \"正在安装…\",\n progressAria: \"应用安装进度\",\n starting: \"正在启动…\"\n },\n installing: \"安装中\",\n installedPendingRestart: \"新版已安装,重启后生效\",\n preparing: \"准备中\",\n running: \"运行中\",\n starting: \"启动中\",\n stopping: \"停止中\",\n unavailable: \"不可用\"\n },\n title: \"应用中心\"\n} as const satisfies I18nDictionary;\n\nexport type AppCenterI18nKey = string;\n\nexport type AppCenterI18nRuntime = I18nRuntime<AppCenterI18nKey>;\n\nconst appCenterDefaults: Record<AppCenterI18nLocale, I18nDictionary> = {\n en: appCenterEn,\n \"zh-CN\": appCenterZhCN\n};\n\nexport const appCenterI18nResources = {\n en: {\n [appCenterI18nNamespace]: appCenterDefaults.en\n },\n \"zh-CN\": {\n [appCenterI18nNamespace]: appCenterDefaults[\"zh-CN\"]\n }\n} as const satisfies Record<AppCenterI18nLocale, I18nDictionary>;\n\nconst defaultAppCenterI18n = createI18nRuntime({\n dictionaries: [appCenterI18nResources.en]\n});\n\nexport function createAppCenterI18nRuntime(\n runtime: I18nRuntime<string> | undefined\n): AppCenterI18nRuntime {\n return createScopedI18nRuntime<AppCenterI18nKey>(\n runtime ?? defaultAppCenterI18n,\n appCenterI18nNamespace\n );\n}\n"],"mappings":"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","names":[]}
package/dist/index.js CHANGED
@@ -12,11 +12,11 @@ import {
12
12
  resolveWorkspaceAppStatusPresentation,
13
13
  validateWorkspaceAppManifest,
14
14
  workspaceAppIdPattern
15
- } from "./chunk-N4YVSUX5.js";
15
+ } from "./chunk-CAICZTMA.js";
16
16
  import {
17
17
  workspaceAppManifestSchemaVersion
18
18
  } from "./chunk-TIVXHP3K.js";
19
- import "./chunk-DXJSCFY7.js";
19
+ import "./chunk-5BSF53JK.js";
20
20
  export {
21
21
  createAppCenterViewModel,
22
22
  createWorkspaceAppIdentity,
@@ -52,6 +52,7 @@ interface AppCenterHostActions {
52
52
  readonly openApp?: (appId: string, context?: WorkspaceAppActionContext) => Promise<void> | void;
53
53
  readonly openAppFolder?: (appId: string) => Promise<void> | void;
54
54
  readonly openAppPackageFolder?: (appId: string) => Promise<void> | void;
55
+ readonly openExternalUrl?: (url: string) => Promise<void> | void;
55
56
  readonly openFactoryJobAgentSession?: (agentSessionId: string, provider?: string | null) => Promise<void> | void;
56
57
  readonly modifyAppWithAgent?: (jobId: string, agentSessionId: string, provider?: string | null) => Promise<void> | void;
57
58
  readonly publishFactoryJob?: (jobId: string) => Promise<void> | void;
@@ -76,7 +77,7 @@ interface AppCardProps {
76
77
  }
77
78
  declare const AppCard: react.NamedExoticComponent<AppCardProps>;
78
79
 
79
- type AppCenterAppTab = "recommended" | "my";
80
+ type AppCenterAppTab = "recommended" | "community" | "my";
80
81
  interface AppCenterPanelProps {
81
82
  readonly actions: AppCenterHostActions;
82
83
  readonly activeAppTab?: AppCenterAppTab;