@tomako/tools-runtime 0.1.4 → 0.1.6

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.
Files changed (57) hide show
  1. package/package.json +2 -1
  2. package/src/components/tools/engine/package-widget-runtime.tsx +5 -1
  3. package/src/components/tools/engine/task-recovery.test.ts +65 -0
  4. package/src/components/tools/engine/task-recovery.ts +109 -0
  5. package/src/components/tools/engine/use-legacy-llm-task.ts +16 -3
  6. package/src/components/tools/engine/use-tool-task.ts +77 -53
  7. package/src/features/tools/app-icon-resizer/app-icon-resizer.spec.ts +1 -1
  8. package/src/features/tools/app-store-screenshot-generator/app-store-screenshot-generator.container.tsx +6 -8
  9. package/src/features/tools/app-store-screenshot-generator/app-store-screenshot-generator.spec.ts +1 -1
  10. package/src/features/tools/app-store-screenshot-generator/widget/app-store-screenshot-generator.tsx +44 -6
  11. package/src/features/tools/app-store-screenshot-generator/widget/generation.test.ts +126 -0
  12. package/src/features/tools/app-store-screenshot-generator/widget/generation.ts +52 -14
  13. package/src/features/tools/cold-start-channel-selector/cold-start-channel-selector.spec.ts +1 -1
  14. package/src/features/tools/cold-start-channel-selector/widget/cold-start-channel-selector.tsx +45 -16
  15. package/src/features/tools/competitor-analysis/competitor-analysis.container.tsx +31 -26
  16. package/src/features/tools/competitor-analysis/competitor-analysis.spec.ts +1 -1
  17. package/src/features/tools/competitor-analysis/widget/competitor-analysis.tsx +47 -16
  18. package/src/features/tools/disclaimer-generator/disclaimer-generator.package.ts +4 -4
  19. package/src/features/tools/email-template-generator/email-template-generator.container.tsx +45 -173
  20. package/src/features/tools/email-template-generator/email-template-generator.spec.ts +1 -1
  21. package/src/features/tools/email-template-generator/widget/email-template-generator.tsx +37 -4
  22. package/src/features/tools/package/to-tool-module.ts +15 -0
  23. package/src/features/tools/product-name-generator/product-name-generator.spec.ts +1 -1
  24. package/src/features/tools/product-name-generator/widget/product-name-generator.tsx +60 -27
  25. package/src/features/tools/product-poster-generator/product-poster-generator.spec.ts +1 -1
  26. package/src/features/tools/product-poster-generator/widget/constants.ts +3 -1
  27. package/src/features/tools/product-poster-generator/widget/helpers.test.ts +51 -0
  28. package/src/features/tools/product-poster-generator/widget/helpers.ts +27 -0
  29. package/src/features/tools/product-poster-generator/widget/product-poster-generator.tsx +112 -12
  30. package/src/features/tools/slogan-generator/slogan-generator.package.ts +101 -29
  31. package/src/features/tools/twitter-gif-downloader/twitter-gif-downloader.container.tsx +2 -3
  32. package/src/features/tools/twitter-gif-downloader/twitter-gif-downloader.spec.ts +1 -1
  33. package/src/i18n/messages/en/tools/app-icon-resizer.ts +1 -1
  34. package/src/i18n/messages/en/tools/app-store-screenshot-generator.ts +3 -3
  35. package/src/i18n/messages/en/tools/cold-start-channel-selector.ts +4 -4
  36. package/src/i18n/messages/en/tools/competitor-analysis.ts +14 -10
  37. package/src/i18n/messages/en/tools/email-template-generator.ts +13 -13
  38. package/src/i18n/messages/en/tools/product-poster-generator.ts +3 -2
  39. package/src/i18n/messages/en/tools/twitter-gif-downloader.ts +1 -1
  40. package/src/i18n/messages/zh/tools/app-store-screenshot-generator.ts +4 -4
  41. package/src/i18n/messages/zh/tools/cold-start-channel-selector.ts +2 -2
  42. package/src/i18n/messages/zh/tools/competitor-analysis.ts +14 -10
  43. package/src/i18n/messages/zh/tools/email-template-generator.ts +12 -12
  44. package/src/i18n/messages/zh/tools/product-poster-generator.ts +2 -1
  45. package/src/i18n/messages/zh/tools/twitter-gif-downloader.ts +1 -1
  46. package/src/i18n/messages/zh-tw/tools/app-store-screenshot-generator.ts +44 -44
  47. package/src/i18n/messages/zh-tw/tools/cold-start-channel-selector.ts +105 -105
  48. package/src/i18n/messages/zh-tw/tools/competitor-analysis.ts +44 -40
  49. package/src/i18n/messages/zh-tw/tools/email-template-generator.ts +112 -112
  50. package/src/i18n/messages/zh-tw/tools/product-name-generator.ts +92 -92
  51. package/src/i18n/messages/zh-tw/tools/product-poster-generator.ts +74 -73
  52. package/src/i18n/messages/zh-tw/tools/twitter-gif-downloader.ts +48 -48
  53. package/src/lib/tools/cold-start-channel-selector-schema.test.ts +39 -0
  54. package/src/lib/tools/cold-start-channel-selector-schema.ts +8 -4
  55. package/src/lib/tools/competitor-analysis-schema.test.ts +69 -0
  56. package/src/lib/tools/competitor-analysis-schema.ts +53 -5
  57. package/src/lib/tools/ops-catalog.ts +10 -1
@@ -1,7 +1,7 @@
1
1
  const emailTemplateGenerator = {
2
2
  meta: {
3
- title: "Email Template Generator",
4
- description: "Turn marketing or common transactional email requirements into an Agent-generated MJML-first template package with HTML preview, plain text, variables, review notes, and developer handoff.",
3
+ title: "MJML Email Template Generator",
4
+ description: "Turn a marketing or transactional email brief into an MJML-first package with HTML preview, plain text, variables, review notes, and developer handoff.",
5
5
  intro: "Convert a rough email brief into a previewable, revisable, export-ready MJML template package for campaigns, verification codes, receipts, subscription confirmations, and account notifications.",
6
6
  category: "Marketing tools",
7
7
  keywords: [
@@ -16,9 +16,9 @@ const emailTemplateGenerator = {
16
16
  },
17
17
  guide: {
18
18
  heroImageAlt: "Visual of a rough email brief becoming MJML, HTML, plain text, variables, and an export bundle.",
19
- workspaceHeading: "Tool Workspace",
19
+ workspaceHeading: "MJML Email Template Generator",
20
20
  workspaceHint:
21
- "Describe the email goal, audience, scenario, and brand tone. The Agent returns a structured MJML-first package you can preview, revise, copy, or export.",
21
+ "Describe the email goal, audience, scenario, and brand tone. The generation workflow returns a structured MJML-first package you can preview, revise, copy, or export.",
22
22
  workspaceBadge: "MJML package",
23
23
  outputs: "What You Get",
24
24
  outputsIntro:
@@ -45,8 +45,8 @@ const emailTemplateGenerator = {
45
45
  body: "See compliance, accessibility, rendering, and missing-information notes before handing the template to development.",
46
46
  },
47
47
  {
48
- title: "Agent Revision Loop",
49
- body: "After generation, describe the exact wording or module change and regenerate a new structured result from the Agent.",
48
+ title: "Guided revision loop",
49
+ body: "After generation, describe the exact wording or module change and regenerate a new structured result.",
50
50
  },
51
51
  ],
52
52
  valueVisualAlt: "Visual of an email template package with MJML, HTML, variables, and developer handoff notes.",
@@ -72,7 +72,7 @@ const emailTemplateGenerator = {
72
72
  },
73
73
  {
74
74
  title: "Fast Iteration",
75
- body: "A rough brief can become a first package quickly, then the Agent can revise structure, wording, and sections from follow-up instructions.",
75
+ body: "A rough brief can become a first package quickly, then the generation workflow can revise structure, wording, and sections from follow-up instructions.",
76
76
  },
77
77
  {
78
78
  title: "Useful Preview",
@@ -103,7 +103,7 @@ const emailTemplateGenerator = {
103
103
  title: "How To Recover",
104
104
  items: [
105
105
  "If the result is too generic, add real product value, user segment, offer, CTA, objections, and brand examples.",
106
- "If the template feels too promotional, switch to a transactional scenario or ask the Agent to remove sales language.",
106
+ "If the template feels too promotional, switch to a transactional scenario or ask for the sales language to be removed.",
107
107
  "If a merge field or link is missing, add the required variable name and regenerate through the revision box.",
108
108
  ],
109
109
  },
@@ -153,7 +153,7 @@ const emailTemplateGenerator = {
153
153
  {
154
154
  question: "Can I edit the result?",
155
155
  answer:
156
- "Yes. You can inspect sections and send revision instructions back to the Agent. The next version is written back as a new structured result.",
156
+ "Yes. You can inspect sections and submit revision instructions. The next version is returned as a new structured result.",
157
157
  },
158
158
  {
159
159
  question: "Is the generated HTML ready to send?",
@@ -207,7 +207,7 @@ const emailTemplateGenerator = {
207
207
  emptyTitle: "Your generated package will appear here",
208
208
  emptyHint:
209
209
  "The result includes HTML preview, MJML source, HTML, plain text, variables, review notes, and export actions.",
210
- runningTitle: "The Agent is building your template package",
210
+ runningTitle: "Your template package is being generated",
211
211
  runningHint:
212
212
  "It is writing MJML, matching HTML, plain text, variables, and review notes. Short result fetch delays are normal.",
213
213
  previewInput: "Input",
@@ -248,7 +248,7 @@ const emailTemplateGenerator = {
248
248
  missing: "Missing information",
249
249
  empty: "No items returned.",
250
250
  },
251
- revisionLabel: "Ask the Agent to revise",
251
+ revisionLabel: "Revise the result",
252
252
  revisionHint: "Use a specific change request",
253
253
  revisionPlaceholder:
254
254
  "Example: Make the hero shorter, change the CTA to book a demo, and add {{calendar_url}} as a variable.",
@@ -262,12 +262,12 @@ const emailTemplateGenerator = {
262
262
  },
263
263
  errors: {
264
264
  invalid: "Add a real product name, audience, and email brief. Placeholder or numeric input cannot produce a useful template.",
265
- revision: "Write a specific revision instruction before sending it to the Agent.",
265
+ revision: "Write a specific revision instruction before submitting it.",
266
266
  copy: "Copy failed. You can still select and copy the text manually.",
267
267
  submit: "The request could not be submitted.",
268
268
  task: "The generation task failed.",
269
269
  timeout: "The structured result did not arrive in time.",
270
- schema: "The Agent returned a result that did not match the email template schema.",
270
+ schema: "The generated result could not be read safely. Please try again.",
271
271
  generic: "The template could not be generated.",
272
272
  recover:
273
273
  "Check the brief, try again, or add more concrete product, audience, CTA, and variable details.",
@@ -1,9 +1,9 @@
1
1
  const productPosterGenerator = {
2
2
  meta: {
3
- title: "AI Product Poster Generator: Turn Screenshots, Benefits, and CTAs Into Posters",
3
+ title: "AI Product Poster Generator for SaaS",
4
4
  displayTitle: "AI Product Poster Generator",
5
5
  description:
6
- "Enter a product name, benefits, audience, and CTA. Add a URL, logo, screenshots, and brand colors when available to generate a product promo poster for websites, social posts, ads, and OG images.",
6
+ "Add a product name, benefits, audience, CTA, and optional screenshots to generate a review-ready promo poster for ads, social posts, and websites.",
7
7
  intro: "Turn product context into a downloadable promo poster.",
8
8
  category: "SEO marketing tools",
9
9
  keywords: [
@@ -228,6 +228,7 @@ const productPosterGenerator = {
228
228
  "The poster image could not be generated. Simplify the benefits, choose another format, or try again later.",
229
229
  unreadableResult: "The result cannot be read right now. Try again later.",
230
230
  timeout: "Generation is taking longer than expected. Try again later.",
231
+ downloadFailed: "The PNG could not be downloaded. Try again in a moment.",
231
232
  },
232
233
  readyKicker: "Poster ready",
233
234
  readyTitle: "Product promo poster is ready",
@@ -44,7 +44,7 @@ const twitterGifDownloader = {
44
44
  },
45
45
  guide: {
46
46
  heroVisualAlt: "Hero background showing a public X post link becoming GIF and MP4 downloads",
47
- workspaceHeading: "Download a GIF from a public X or Twitter post",
47
+ workspaceHeading: "Twitter GIF Downloader for X Posts",
48
48
  workspaceHint: "Paste a public /status/ link to preview convertible media and save a GIF or MP4. Private, restricted, deleted, or media-free posts will not work.",
49
49
  workspaceBadge: "Public link → GIF or MP4",
50
50
  resultHeading: "What you get",
@@ -16,9 +16,9 @@ const appStoreScreenshotGenerator = {
16
16
  guide: {
17
17
  heroVisualAlt:
18
18
  "应用商店上架图生成器 Hero 视觉图,展示一套应用商店截图。",
19
- workspaceHeading: "上传 UI 截图生成上架图",
19
+ workspaceHeading: "App Store / Google Play 上架截图生成器",
20
20
  workspaceHint:
21
- "上传真实 UI 截图后,云端 Agent 会通过 Skills-OL 抓取补充上下文、规划完整套图并提交真实生图任务。",
21
+ "上传真实 UI 截图后,在线图像生成流程会读取补充上下文、规划完整套图并提交真实生图任务。",
22
22
  whatYouGetHeading: "生成后会得到什么",
23
23
  valueVisualAlt:
24
24
  "应用商店上架图导出包,展示多张手机截图、横版主图、PNG 和 SVG 文件。",
@@ -37,7 +37,7 @@ const appStoreScreenshotGenerator = {
37
37
  },
38
38
  {
39
39
  title: "明确的来源边界",
40
- body: "UI 截图是必填视觉来源;URL 只作为 brief 输入并由 Skills-OL 抓取公开上下文。避免使用真实用户、隐私数据或未授权品牌素材。",
40
+ body: "UI 截图是必填视觉来源;URL 仅用于读取公开上下文并补充 brief。避免使用真实用户、隐私数据或未授权品牌素材。",
41
41
  },
42
42
  {
43
43
  title: "失败原因提示",
@@ -78,7 +78,7 @@ const appStoreScreenshotGenerator = {
78
78
  supportBody: [
79
79
  "必须上传本地 UI 截图;产品 URL、App Store / Google Play 链接、产品名和卖点用于补充标题、描述和页面摘要。",
80
80
  "支持 Apple App Store 和 Google Play 两类平台方向,并提供完整截图套图、竖版截图或横版 feature graphic。",
81
- "当前会通过云端 Agent 调用 Skills-OL,再由 Skills-OL 提交真实生图任务;但不连接 App Store Connect 或 Google Play Console 后台。",
81
+ "当前通过在线图像生成流程提交真实生图任务,但不连接 App Store Connect 或 Google Play Console 后台。",
82
82
  "如果截图含测试账号、真实用户、隐私数据或未授权品牌,请先脱敏或不要上传。",
83
83
  "如果没有结果,先检查 URL 是否为空、上传文件是否为 PNG/JPG/WebP、浏览器是否阻止本地文件读取,以及是否选择了正确的输入来源。",
84
84
  "正式上架前仍要复核最新尺寸、审核政策、商标/版权授权、隐私内容、文案承诺和不同设备上的可读性。",
@@ -1,6 +1,6 @@
1
1
  const coldStartChannelSelector = {
2
2
  meta: {
3
- title: "冷启动渠道策略生成器",
3
+ title: "客户获取渠道选择器",
4
4
  description: "为早期产品制定冷启动渠道策略。填入产品、目标客户、时间和预算,获得优先测试渠道、选择理由和下一步验证信号。",
5
5
  intro: "先确定冷启动阶段最值得测试的渠道,再用真实信号决定下一步。",
6
6
  category: "增长策略工具",
@@ -33,7 +33,7 @@ const coldStartChannelSelector = {
33
33
  },
34
34
  ],
35
35
  guide: {
36
- workspaceTitle: "冷启动渠道策略",
36
+ workspaceTitle: "选择最值得先测试的客户获取渠道",
37
37
  workspaceHint:
38
38
  "输入产品、客户、时间和预算,得到适合当前阶段的冷启动渠道策略、选择理由和验证信号。",
39
39
  workspaceBadge: "早期产品冷启动渠道策略",
@@ -1,7 +1,7 @@
1
1
  const competitorAnalysis = {
2
2
  meta: {
3
- title: "竞品分析工具",
4
- description: "输入一个竞品的网址,云端 Agent 调研公开信息,输出结构化的竞品档案:产品概览、流量与增长、业务规模、团队与融资,并附来源和可信度。",
3
+ title: "AI 竞品分析工具",
4
+ description: "输入一个竞品的网址,在线调研流程会整理公开信息并输出结构化竞品档案:产品概览、流量与增长、业务规模、团队与融资,并附来源和可信度。",
5
5
  intro: "把一个竞品 URL 变成一页看懂的竞品档案。基于公开网页和检索的估算,每个维度都标注可信度,帮助你做定位、增长和竞争决策。",
6
6
  category: "市场调研工具",
7
7
  keywords: [
@@ -36,9 +36,9 @@ const competitorAnalysis = {
36
36
  submitting: "提交中…",
37
37
  running: "调研中…",
38
38
  emptyTitle: "竞品档案会显示在这里",
39
- emptyHint: "输入一个竞品网址,云端 Agent 会调研公开信息并生成结构化档案。",
39
+ emptyHint: "输入一个竞品网址,在线调研流程会整理公开信息并生成结构化档案。",
40
40
  runningTitle: "正在调研这个竞品",
41
- runningHint: "Agent 正在读取官网并检索公开信号,整理流量、规模、团队和融资。通常需要 1-3 分钟。",
41
+ runningHint: "调研流程正在读取官网并检索公开信号,整理流量、规模、团队和融资。通常需要 1-3 分钟。",
42
42
  status: {
43
43
  default: "调研中",
44
44
  PENDING: "排队中",
@@ -124,21 +124,25 @@ const competitorAnalysis = {
124
124
  },
125
125
  },
126
126
  guide: {
127
+ workspaceHeading: "AI 竞品分析工具",
128
+ workspaceHint: "输入竞品公开网址,生成带来源的结构化档案,并为主要发现标注可信度与未知项。",
129
+ workspaceBadge: "仅使用公开来源",
127
130
  visualAlt: {
128
- hero: "竞品档案报告预览(配图待补)",
129
- howToUse: "竞品分析使用流程示意(配图待补)",
130
- result: "竞品档案结果解读示意(配图待补)",
131
+ hero: "包含来源与置信度的竞品档案报告。",
132
+ howToUse: "从公开竞品网址到有来源竞品档案的分析流程。",
133
+ result: "把竞品发现拆分为证据、估算、置信度与未知项。",
134
+ useCases: "团队把竞品研究用于定位、定价与发布决策。",
131
135
  },
132
136
  howToUseKicker: "使用流程",
133
137
  howToUse: "如何分析一个竞品",
134
138
  howToUseSteps: [
135
139
  "粘贴竞品的公开官网网址,可选填竞品名称和你重点关注的维度。",
136
- "提交后,云端 Agent 会读取官网并检索公开信号,整理流量、规模、团队和融资。",
140
+ "提交后,在线调研流程会读取官网并检索公开信号,整理流量、规模、团队和融资。",
137
141
  "结果以结构化档案返回:每个维度都带可信度,数据缺失时降级而非编造。",
138
142
  "先看概览和流量趋势,再把“定位与机会”转成你的定位、定价或渠道假设。",
139
143
  ],
140
144
  runtimeNote:
141
- "调研由云端 Agent 完成,仅基于公开网页和检索的估算。页面只渲染结构化结果,不提供本地模板兜底。",
145
+ "调研通过在线流程完成,仅基于公开网页和检索结果进行估算。页面只展示结构化结果,不提供本地模板兜底。",
142
146
  resultKicker: "结果解读",
143
147
  resultGuidance: "如何看懂竞品档案",
144
148
  guidanceBullets: [
@@ -169,7 +173,7 @@ const competitorAnalysis = {
169
173
  },
170
174
  {
171
175
  question: "会处理私有或登录后的页面吗?",
172
- answer: "不会。Agent 只读取公开页面和公开检索结果,不抓取私有、登录或付费墙后的内容。",
176
+ answer: "不会。调研流程只读取公开页面和公开检索结果,不抓取私有、登录或付费墙后的内容。",
173
177
  },
174
178
  {
175
179
  question: "拿到结果后该做什么?",
@@ -1,7 +1,7 @@
1
1
  const emailTemplateGenerator = {
2
2
  meta: {
3
3
  title: "邮件模板生成器",
4
- description: "输入营销或高频交易邮件需求,由在线 Agent 生成 MJML-first 邮件模板包,包含可预览 HTML、纯文本、变量、复核项和开发交付说明。",
4
+ description: "输入营销或高频交易邮件需求,由在线生成流程产出 MJML-first 邮件模板包,包含可预览 HTML、纯文本、变量、复核项和开发交付说明。",
5
5
  intro: "把粗略邮件需求转成可预览、可修改、可导出的 MJML 邮件模板包,适合营销活动、验证码、账单、订阅成功和账号通知等场景。",
6
6
  category: "营销工具",
7
7
  keywords: [
@@ -16,9 +16,9 @@ const emailTemplateGenerator = {
16
16
  },
17
17
  guide: {
18
18
  heroImageAlt: "粗略邮件需求转成 MJML、HTML、纯文本、变量和导出包的视觉图。",
19
- workspaceHeading: "工具工作台",
19
+ workspaceHeading: "MJML 邮件模板生成器",
20
20
  workspaceHint:
21
- "描述邮件目标、受众、场景和品牌语气,Agent 会返回结构化的 MJML-first 邮件模板包,可预览、修改、复制和导出。",
21
+ "描述邮件目标、受众、场景和品牌语气,生成流程会返回结构化的 MJML-first 邮件模板包,可预览、修改、复制和导出。",
22
22
  workspaceBadge: "MJML 模板包",
23
23
  outputs: "你会得到什么",
24
24
  outputsIntro:
@@ -45,8 +45,8 @@ const emailTemplateGenerator = {
45
45
  body: "在交付开发前看到营销合规、无障碍、渲染兼容和缺失信息等检查项。",
46
46
  },
47
47
  {
48
- title: "Agent 修改循环",
49
- body: "生成后可以描述要改的文案、模块或结构,重新由 Agent 写回新的结构化结果。",
48
+ title: "引导式修改流程",
49
+ body: "生成后可以描述要改的文案、模块或结构,再生成一份新的结构化结果。",
50
50
  },
51
51
  ],
52
52
  valueVisualAlt: "包含 MJML、HTML、变量和开发交付说明的邮件模板包视觉图。",
@@ -72,7 +72,7 @@ const emailTemplateGenerator = {
72
72
  },
73
73
  {
74
74
  title: "迭代速度快",
75
- body: "粗略 brief 可以先生成第一版,再通过 Agent 修改结构、措辞和模块。",
75
+ body: "粗略 brief 可以先生成第一版,再通过后续要求修改结构、措辞和模块。",
76
76
  },
77
77
  {
78
78
  title: "预览真实有用",
@@ -103,7 +103,7 @@ const emailTemplateGenerator = {
103
103
  title: "失败时怎么恢复",
104
104
  items: [
105
105
  "如果结果太泛,补充真实产品价值、用户分群、优惠内容、CTA、反对意见和品牌示例。",
106
- "如果交易邮件显得过度营销,切换到交易场景,或要求 Agent 移除销售性措辞。",
106
+ "如果交易邮件显得过度营销,切换到交易场景,或在修改要求中说明移除销售性措辞。",
107
107
  "如果缺少变量或链接,把需要的变量名写进修改要求,再通过修改框重新生成。",
108
108
  ],
109
109
  },
@@ -153,7 +153,7 @@ const emailTemplateGenerator = {
153
153
  {
154
154
  question: "生成后可以修改吗?",
155
155
  answer:
156
- "可以。你可以查看模块,并把修改要求发回 Agent。下一版会作为新的结构化结果写回。",
156
+ "可以。你可以查看模块并提交修改要求,下一版会以新的结构化结果返回。",
157
157
  },
158
158
  {
159
159
  question: "生成的 HTML 可以直接发送吗?",
@@ -207,7 +207,7 @@ const emailTemplateGenerator = {
207
207
  emptyTitle: "生成结果会显示在这里",
208
208
  emptyHint:
209
209
  "结果包含 HTML 预览、MJML 源码、HTML、纯文本、变量、复核说明和导出动作。",
210
- runningTitle: "Agent 正在生成邮件模板包",
210
+ runningTitle: "正在生成邮件模板包",
211
211
  runningHint:
212
212
  "它会生成 MJML、匹配的 HTML、纯文本、变量和复核说明。结构化结果短暂延迟是正常的。",
213
213
  previewInput: "输入",
@@ -248,7 +248,7 @@ const emailTemplateGenerator = {
248
248
  missing: "缺失信息",
249
249
  empty: "没有返回相关项目。",
250
250
  },
251
- revisionLabel: "让 Agent 修改",
251
+ revisionLabel: "修改结果",
252
252
  revisionHint: "写具体修改要求",
253
253
  revisionPlaceholder:
254
254
  "例如:缩短首屏,把 CTA 改成预约演示,并增加 {{calendar_url}} 变量。",
@@ -262,12 +262,12 @@ const emailTemplateGenerator = {
262
262
  },
263
263
  errors: {
264
264
  invalid: "请填写真实产品名称、目标受众和邮件需求。占位或纯数字输入无法生成有用模板。",
265
- revision: "发送给 Agent 前,请写清楚具体修改要求。",
265
+ revision: "提交前,请写清楚具体修改要求。",
266
266
  copy: "复制失败。你仍然可以手动选中文本复制。",
267
267
  submit: "请求提交失败。",
268
268
  task: "生成任务失败。",
269
269
  timeout: "结构化结果没有在限定时间内返回。",
270
- schema: "Agent 返回的结果不符合邮件模板 schema。",
270
+ schema: "生成结果格式无法安全读取,请重试。",
271
271
  generic: "邮件模板生成失败。",
272
272
  recover:
273
273
  "请检查邮件需求,或补充更具体的产品、受众、CTA 和变量信息后重试。",
@@ -1,6 +1,6 @@
1
1
  const productPosterGenerator = {
2
2
  meta: {
3
- title: "AI 产品海报生成器:把产品截图、卖点和 CTA 生成品牌海报图",
3
+ title: "AI 产品海报生成器:用截图、卖点和 CTA 制作宣传图",
4
4
  displayTitle: "AI产品海报生成器",
5
5
  description:
6
6
  "输入产品名称、卖点、目标用户、CTA,可补充产品 URL、Logo 和截图,生成适合官网、社媒、广告和 OG 分享的产品宣传海报图。",
@@ -219,6 +219,7 @@ const productPosterGenerator = {
219
219
  imageFailed: "海报图没有生成成功。可以简化卖点、换一个尺寸,或稍后再试。",
220
220
  unreadableResult: "结果暂时无法读取。请稍后重试。",
221
221
  timeout: "生成时间较长。请稍后重试。",
222
+ downloadFailed: "PNG 下载失败,请稍后重试。",
222
223
  },
223
224
  readyKicker: "海报已生成",
224
225
  readyTitle: "产品宣传海报图已生成",
@@ -40,7 +40,7 @@ const twitterGifDownloader = {
40
40
  },
41
41
  guide: {
42
42
  heroVisualAlt: "公开 X 帖子链接转换成 GIF 和 MP4 下载文件的 Hero 背景图",
43
- workspaceHeading: "从公开 X Twitter 帖子下载 GIF",
43
+ workspaceHeading: "Twitter / X GIF 下载器",
44
44
  workspaceHint: "粘贴带 /status/ 的公开帖子链接,预览可转换媒体后保存 GIF 或 MP4。私密、受限、已删除或没有媒体的帖子无法使用。",
45
45
  workspaceBadge: "公开链接 → GIF 或 MP4",
46
46
  resultHeading: "你会得到什么",
@@ -1,10 +1,10 @@
1
1
  const appStoreScreenshotGenerator = {
2
2
  meta: {
3
- title: "App Store / Google Play 上架截圖生成器",
4
- displayTitle: "App Store / Google Play 上架截圖生成器",
3
+ title: "App Store / Google Play 上架截圖產生器",
4
+ displayTitle: "App Store / Google Play 上架截圖產生器",
5
5
  description:
6
- "上傳真實 UI 截圖並補充產品資訊,生成 Apple App Store 或 Google Play 上架截圖套圖,便於審視與繼續精修。",
7
- intro: "為 App 發佈和 ASO 準備商店截圖與橫版主圖,用產品上下文和內置 prompt 生成一套視覺方向,再按平臺規則複核。",
6
+ "上傳真實 UI 截圖並補充產品資訊,產生 Apple App Store 或 Google Play 上架截圖套圖,方便檢視與繼續精修。",
7
+ intro: "為 App 發布和 ASO 準備商店截圖與橫幅主圖,利用產品脈絡和內建 prompt 產生一套視覺方向,再依平台規則複核。",
8
8
  category: "ASO 工具",
9
9
  keywords: [
10
10
  "應用商店上架圖",
@@ -15,41 +15,41 @@ const appStoreScreenshotGenerator = {
15
15
  },
16
16
  guide: {
17
17
  heroVisualAlt:
18
- "應用商店上架圖生成器 Hero 視覺圖,展示一套應用商店截圖。",
19
- workspaceHeading: "上傳 UI 截圖生成上架圖",
18
+ "應用程式商店上架圖產生器 Hero 視覺圖,展示一套應用程式商店截圖。",
19
+ workspaceHeading: "App Store / Google Play 上架截圖產生器",
20
20
  workspaceHint:
21
- "上傳真實 UI 截圖後,雲端 Agent 會通過 Skills-OL 抓取補充上下文、規劃完整套圖並提交真實生圖任務。",
22
- whatYouGetHeading: "生成後會得到什麼",
21
+ "上傳真實 UI 截圖後,線上圖像產生流程會讀取補充脈絡、規劃完整套圖並提交真實圖片產生任務。",
22
+ whatYouGetHeading: "產生後會得到什麼",
23
23
  valueVisualAlt:
24
- "應用商店上架圖導出包,展示多張手機截圖、橫版主圖、PNG 和 SVG 文件。",
24
+ "應用程式商店上架圖匯出包,展示多張手機截圖、橫幅主圖、PNG 和 SVG 檔案。",
25
25
  whatYouGetItems: [
26
26
  {
27
- title: "平臺尺寸套圖",
27
+ title: "平台尺寸套圖",
28
28
  body: "按商店規格輸出 App Store 最多 10 張截圖,或 Google Play feature graphic 加最多 8 張手機圖,先看完整套圖方向是否成立。",
29
29
  },
30
30
  {
31
31
  title: "可下載 PNG",
32
- body: "選中某張上架圖後可直接下載 PNG,用於團隊複核、商店後臺上傳或設計評審。",
32
+ body: "選取某張上架圖後可直接下載 PNG,用於團隊複核、商店後台上傳或設計評審。",
33
33
  },
34
34
  {
35
35
  title: "可交接 SVG 包裝",
36
- body: "需要交給設計側時下載 SVG 包裝文件,保留生成圖、尺寸和 prompt 元數據,方便繼續覆盤和精修。",
36
+ body: "需要交給設計端時下載 SVG 包裝檔案,保留產生的圖片、尺寸和 prompt 中繼資料,方便繼續檢視和精修。",
37
37
  },
38
38
  {
39
39
  title: "明確的來源邊界",
40
- body: "UI 截圖是必填視覺來源;URL 只作為 brief 輸入並由 Skills-OL 抓取公開上下文。避免使用真實用戶、隱私數據或未授權品牌素材。",
40
+ body: "UI 截圖是必填視覺來源;URL 僅用於讀取公開脈絡並補充 brief。避免使用真實使用者、隱私資料或未授權品牌素材。",
41
41
  },
42
42
  {
43
43
  title: "失敗原因提示",
44
- body: " URL、未上傳截圖、格式不支持或導出失敗時,結果區會給出可恢復提示,而不是生成空素材。",
44
+ body: "缺少 URL、未上傳截圖、格式不支援或匯出失敗時,結果區會提供可恢復提示,而不是產生空白素材。",
45
45
  },
46
46
  ],
47
- comparisonHeading: "一個好的上架圖生成器應該具備什麼",
47
+ comparisonHeading: "一個好的上架圖產生器應該具備什麼",
48
48
  comparisonItems: [
49
49
  {
50
50
  standard: "尺寸清楚",
51
51
  manual: "手工套模板容易把 App Store 豎圖、Google Play 手機圖和橫版主圖混成同一構圖。",
52
- tomako: "先按平臺和版式生成對應畫布,讓你在設計精修前看清每類素材的構圖差異。",
52
+ tomako: "先依平台和版型產生對應畫布,讓你在設計精修前看清每類素材的構圖差異。",
53
53
  },
54
54
  {
55
55
  standard: "速度夠快",
@@ -58,87 +58,87 @@ const appStoreScreenshotGenerator = {
58
58
  },
59
59
  {
60
60
  standard: "結果可編輯",
61
- manual: "截圖生成器只給扁平 PNG,後續改標題、配色或真實界面時還要重做。",
62
- tomako: "返回真實生圖 PNG,並提供帶 prompt 元數據的 SVG 包裝,方便先複核方向,再交給設計繼續精修。",
61
+ manual: "截圖產生器只提供扁平 PNG,後續修改標題、配色或真實介面時還要重做。",
62
+ tomako: "傳回真實產生的 PNG,並提供含 prompt 中繼資料的 SVG 包裝,方便先複核方向,再交給設計繼續精修。",
63
63
  },
64
64
  {
65
65
  standard: "邊界可信",
66
- manual: "很多工具把生成結果說成可直接上線,忽略商店尺寸、隱私、商標和平臺審核風險。",
67
- tomako: "頁面和結果提示都明確正式上傳前仍要按最新平臺規則和品牌素材複核。",
66
+ manual: "很多工具把產生結果說成可直接上線,忽略商店尺寸、隱私、商標和平台審核風險。",
67
+ tomako: "頁面和結果提示都明確說明,正式上傳前仍要依最新平台規則和品牌素材複核。",
68
68
  },
69
69
  {
70
70
  standard: "素材安全",
71
- manual: "上傳未發佈截圖到不確定的在線工具,團隊很難判斷文件去向。",
72
- tomako: "頁面明確說明上傳截圖會進入生圖任務;正式產品或含隱私內容的截圖應先脫敏再使用。",
71
+ manual: "把未發布截圖上傳到不確定的線上工具,團隊很難判斷檔案去向。",
72
+ tomako: "頁面明確說明上傳截圖會進入圖片產生任務;正式產品或含隱私內容的截圖應先去識別化再使用。",
73
73
  },
74
74
  ],
75
- supportHeading: "支持範圍與失敗邊界",
75
+ supportHeading: "支援範圍與失敗邊界",
76
76
  supportVisualAlt:
77
- "應用商店素材支持邊界視覺圖,展示手機圖、橫版主圖、隱私標記和複核清單。",
77
+ "應用程式商店素材支援邊界視覺圖,展示手機圖、橫幅主圖、隱私標記和複核清單。",
78
78
  supportBody: [
79
- "必須上傳本地 UI 截圖;產品 URL、App Store / Google Play 鏈接、產品名和賣點用於補充標題、描述和頁面摘要。",
80
- "支持 Apple App Store 和 Google Play 兩類平臺方向,並提供完整截圖套圖、豎版截圖或橫版 feature graphic。",
81
- "當前會通過雲端 Agent 調用 Skills-OL,再由 Skills-OL 提交真實生圖任務;但不連接 App Store Connect 或 Google Play Console 後臺。",
82
- "如果截圖含測試賬號、真實用戶、隱私數據或未授權品牌,請先脫敏或不要上傳。",
83
- "如果沒有結果,先檢查 URL 是否為空、上傳文件是否為 PNG/JPG/WebP、瀏覽器是否阻止本地文件讀取,以及是否選擇了正確的輸入來源。",
79
+ "必須上傳本機 UI 截圖;產品 URL、App Store / Google Play 連結、產品名稱和賣點用於補充標題、描述和頁面摘要。",
80
+ "支援 Apple App Store 和 Google Play 兩類平台方向,並提供完整截圖套圖、直式截圖或橫幅 feature graphic。",
81
+ "目前透過線上圖像產生流程提交真實圖片產生任務,但不連接 App Store Connect 或 Google Play Console 後台。",
82
+ "如果截圖含測試帳號、真實使用者、隱私資料或未授權品牌,請先去識別化或不要上傳。",
83
+ "如果沒有結果,先檢查 URL 是否為空、上傳檔案是否為 PNG/JPG/WebP、瀏覽器是否阻止本機檔案讀取,以及是否選擇了正確的輸入來源。",
84
84
  "正式上架前仍要複核最新尺寸、審核政策、商標/版權授權、隱私內容、文案承諾和不同設備上的可讀性。",
85
85
  ],
86
86
  resultGuidanceHeading: "下載後怎麼使用這些上架圖",
87
87
  useCaseVisualAlt:
88
- "產品和設計團隊整理應用商店上架圖素材,展示截圖板、橫版主圖、配色和導出文件夾。",
88
+ "產品和設計團隊整理應用程式商店上架圖素材,展示截圖板、橫幅主圖、配色和匯出資料夾。",
89
89
  resultGuidanceBody: [
90
90
  "把 PNG 當作方向圖或評審圖,先確認首張截圖是否講清核心收益,再決定是否繼續精修。",
91
- "把 SVG 包裝文件交給設計師用於追蹤 prompt、尺寸和生成圖,再繼續替換真實產品截圖、品牌字體、正式文案和本地化版本。",
91
+ "把 SVG 包裝檔案交給設計師,用於追蹤 prompt、尺寸和產生的圖片,再繼續替換真實產品截圖、品牌字型、正式文案和在地化版本。",
92
92
  "App Store 與 Google Play 不要盲目複用同一張圖。豎版截圖、iPad 圖和橫版 feature graphic 應分別檢查主體比例。",
93
- "如果生成圖看起來信息太滿,優先刪掉小標籤、次要功能和過長副標題,讓首屏利益點更清楚。",
94
- "上傳到真實商店後臺前,使用最新官方規格和審核指南複查尺寸、內容、隱私、商標、版權和誇張承諾。",
93
+ "如果產生的圖片看起來資訊太滿,優先刪除小標籤、次要功能和過長副標題,讓首屏利益點更清楚。",
94
+ "上傳到真實商店後台前,使用最新官方規格和審核指南複查尺寸、內容、隱私、商標、版權和誇張承諾。",
95
95
  ],
96
96
  useCasesHeading: "適用場景",
97
97
  useCaseItems: [
98
98
  "獨立開發者準備首版 App Store 或 Google Play 上架素材,先確定視覺方向。",
99
99
  "增長團隊快速比較 ASO 截圖、功能賣點圖和橫版主圖的不同風格。",
100
100
  "產品團隊把新版本 UI 截圖轉成商店更新素材,用於發佈計劃或活動頁評審。",
101
- "設計師收到粗糙產品 brief 後,先生成低保真方向,再決定最終畫板和截圖順序。",
101
+ "設計師收到粗略產品 brief 後,先產生低擬真方向,再決定最終畫板和截圖順序。",
102
102
  "外包或遠程團隊用 PNG/SVG 對齊文案、構圖和品牌色,減少反覆溝通。",
103
- "上架前檢查 App Icon、商店截圖、社媒素材是否使用同一套品牌語言。",
103
+ "上架前檢查 App Icon、商店截圖、社群媒體素材是否使用同一套品牌語言。",
104
104
  ],
105
105
  faqHeading: "常見問題",
106
106
  faqItems: [
107
107
  {
108
108
  question: "這個工具會自動抓取產品 URL 嗎?",
109
109
  answer:
110
- "會抓取可公開訪問頁面的 title、description、OG 信息和少量頁面摘要,用來推導產品賣點和套圖文案。登錄後內容、反爬頁面或無法訪問的 URL 可能抓取失敗。",
110
+ "會讀取可公開存取頁面的 title、description、OG 資訊和少量頁面摘要,用來推導產品賣點和套圖文案。登入後內容、阻擋自動存取的頁面或無法存取的 URL 可能讀取失敗。",
111
111
  },
112
112
  {
113
- question: "上傳的 UI 截圖會保存到服務器嗎?",
113
+ question: "上傳的 UI 截圖會儲存到伺服器嗎?",
114
114
  answer:
115
- "選擇 UI 截圖模式時,截圖會作為參考圖提交給生圖服務。請不要上傳真實用戶數據、未脫敏後臺、客戶信息或未授權品牌素材。",
115
+ "選擇 UI 截圖模式時,截圖會作為參考圖提交給圖片產生服務。請不要上傳真實使用者資料、未去識別化的後台畫面、客戶資訊或未授權品牌素材。",
116
116
  },
117
117
  {
118
- question: "生成的 PNG 能直接上傳到 App Store 或 Google Play 嗎?",
118
+ question: "產生的 PNG 能直接上傳到 App Store 或 Google Play 嗎?",
119
119
  answer:
120
- "可以作為團隊複核或上傳前預覽,但正式發佈前必須按平臺最新尺寸、內容政策、隱私、商標和版權要求複查。不要把生成結果當成最終審核保證。",
120
+ "可以作為團隊複核或上傳前預覽,但正式發布前必須依平台最新尺寸、內容政策、隱私、商標和版權要求複查。不要把產生結果當成最終審核保證。",
121
121
  },
122
122
  {
123
123
  question: "為什麼還提供 SVG 下載?",
124
124
  answer:
125
- "當前 SVG 是生成圖包裝文件,會保留圖片引用、尺寸和 prompt 元數據,方便交給設計師覆盤方向並繼續精修。",
125
+ "目前 SVG 是產生圖片的包裝檔案,會保留圖片引用、尺寸和 prompt 中繼資料,方便交給設計師檢視方向並繼續精修。",
126
126
  },
127
127
  {
128
128
  question: "沒有真實產品截圖時能用嗎?",
129
129
  answer:
130
- "需要先上傳真實 UI 截圖生成上架圖;產品 URL 或產品名只能補充上下文,不能替代真實界面。",
130
+ "需要先上傳真實 UI 截圖產生上架圖;產品 URL 或產品名稱只能補充脈絡,不能取代真實介面。",
131
131
  },
132
132
  {
133
133
  question: "這個工具會檢查最新商店審核規則嗎?",
134
134
  answer:
135
- "不會。它負責生成視覺結果,不連接 App Store Connect、Google Play Console 或實時政策接口。正式上傳前請按官方後臺和最新指南複核。",
135
+ "不會。它負責產生視覺結果,不連接 App Store Connect、Google Play Console 或即時政策介面。正式上傳前請依官方後台和最新指南複核。",
136
136
  },
137
137
  ],
138
138
  ctaPrimary: "先切 App Icon",
139
139
  ctaSecondary: "返回全部工具",
140
140
  ctaHint:
141
- "商店截圖通常和 App Icon 一起評審。如果圖標尺寸包還沒準備好,可以先生成 App Icon 資源,再回來統一上架圖風格。",
141
+ "商店截圖通常和 App Icon 一起評審。如果圖示尺寸包還沒準備好,可以先產生 App Icon 資源,再回來統一上架圖風格。",
142
142
  },
143
143
  } as const;
144
144