@agent-native/core 0.79.2 → 0.79.5

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 (261) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +24 -0
  3. package/corpus/core/docs/content/locales/zh-TW/a2a-protocol.md +392 -0
  4. package/corpus/core/docs/content/locales/zh-TW/actions.md +583 -0
  5. package/corpus/core/docs/content/locales/zh-TW/agent-mentions.md +164 -0
  6. package/corpus/core/docs/content/locales/zh-TW/agent-surfaces.md +397 -0
  7. package/corpus/core/docs/content/locales/zh-TW/agent-teams.md +171 -0
  8. package/corpus/core/docs/content/locales/zh-TW/agent-web-surfaces.md +161 -0
  9. package/corpus/core/docs/content/locales/zh-TW/audit-log.md +111 -0
  10. package/corpus/core/docs/content/locales/zh-TW/authentication.md +332 -0
  11. package/corpus/core/docs/content/locales/zh-TW/automations.md +268 -0
  12. package/corpus/core/docs/content/locales/zh-TW/blueprint-installer.md +83 -0
  13. package/corpus/core/docs/content/locales/zh-TW/cli-adapters.md +129 -0
  14. package/corpus/core/docs/content/locales/zh-TW/client.md +398 -0
  15. package/corpus/core/docs/content/locales/zh-TW/cloneable-saas.md +114 -0
  16. package/corpus/core/docs/content/locales/zh-TW/code-agents-ui.md +436 -0
  17. package/corpus/core/docs/content/locales/zh-TW/components.md +368 -0
  18. package/corpus/core/docs/content/locales/zh-TW/context-awareness.md +373 -0
  19. package/corpus/core/docs/content/locales/zh-TW/creating-templates.md +411 -0
  20. package/corpus/core/docs/content/locales/zh-TW/cross-app-sso.md +188 -0
  21. package/corpus/core/docs/content/locales/zh-TW/database.md +183 -0
  22. package/corpus/core/docs/content/locales/zh-TW/deployment.md +348 -0
  23. package/corpus/core/docs/content/locales/zh-TW/dispatch.md +146 -0
  24. package/corpus/core/docs/content/locales/zh-TW/drop-in-agent.md +260 -0
  25. package/corpus/core/docs/content/locales/zh-TW/durable-resume.md +65 -0
  26. package/corpus/core/docs/content/locales/zh-TW/embedding-sdk.md +597 -0
  27. package/corpus/core/docs/content/locales/zh-TW/evals.md +155 -0
  28. package/corpus/core/docs/content/locales/zh-TW/extensions.md +360 -0
  29. package/corpus/core/docs/content/locales/zh-TW/external-agents.md +619 -0
  30. package/corpus/core/docs/content/locales/zh-TW/faq.md +142 -0
  31. package/corpus/core/docs/content/locales/zh-TW/file-uploads.md +122 -0
  32. package/corpus/core/docs/content/locales/zh-TW/frames.md +153 -0
  33. package/corpus/core/docs/content/locales/zh-TW/getting-started.md +199 -0
  34. package/corpus/core/docs/content/locales/zh-TW/harness-agents.md +349 -0
  35. package/corpus/core/docs/content/locales/zh-TW/human-approval.md +86 -0
  36. package/corpus/core/docs/content/locales/zh-TW/internationalization.md +147 -0
  37. package/corpus/core/docs/content/locales/zh-TW/key-concepts.md +312 -0
  38. package/corpus/core/docs/content/locales/zh-TW/local-file-mode.md +433 -0
  39. package/corpus/core/docs/content/locales/zh-TW/mcp-apps.md +147 -0
  40. package/corpus/core/docs/content/locales/zh-TW/mcp-clients.md +330 -0
  41. package/corpus/core/docs/content/locales/zh-TW/mcp-protocol.md +279 -0
  42. package/corpus/core/docs/content/locales/zh-TW/messaging.md +461 -0
  43. package/corpus/core/docs/content/locales/zh-TW/migration-workbench.md +33 -0
  44. package/corpus/core/docs/content/locales/zh-TW/multi-app-workspace.md +312 -0
  45. package/corpus/core/docs/content/locales/zh-TW/multi-tenancy.md +52 -0
  46. package/corpus/core/docs/content/locales/zh-TW/native-chat-ui.md +321 -0
  47. package/corpus/core/docs/content/locales/zh-TW/notifications.md +231 -0
  48. package/corpus/core/docs/content/locales/zh-TW/observability.md +294 -0
  49. package/corpus/core/docs/content/locales/zh-TW/observational-memory.md +77 -0
  50. package/corpus/core/docs/content/locales/zh-TW/onboarding.md +216 -0
  51. package/corpus/core/docs/content/locales/zh-TW/plan-plugin.md +200 -0
  52. package/corpus/core/docs/content/locales/zh-TW/pr-visual-recap.md +384 -0
  53. package/corpus/core/docs/content/locales/zh-TW/processors.md +106 -0
  54. package/corpus/core/docs/content/locales/zh-TW/progress.md +199 -0
  55. package/corpus/core/docs/content/locales/zh-TW/pure-agent-apps.md +39 -0
  56. package/corpus/core/docs/content/locales/zh-TW/real-time-collaboration.md +680 -0
  57. package/corpus/core/docs/content/locales/zh-TW/recurring-jobs.md +142 -0
  58. package/corpus/core/docs/content/locales/zh-TW/routing.md +79 -0
  59. package/corpus/core/docs/content/locales/zh-TW/sandbox-adapters.md +227 -0
  60. package/corpus/core/docs/content/locales/zh-TW/security.md +330 -0
  61. package/corpus/core/docs/content/locales/zh-TW/server.md +265 -0
  62. package/corpus/core/docs/content/locales/zh-TW/sharing.md +219 -0
  63. package/corpus/core/docs/content/locales/zh-TW/skills-guide.md +281 -0
  64. package/corpus/core/docs/content/locales/zh-TW/template-analytics.md +259 -0
  65. package/corpus/core/docs/content/locales/zh-TW/template-assets.md +303 -0
  66. package/corpus/core/docs/content/locales/zh-TW/template-brain.md +324 -0
  67. package/corpus/core/docs/content/locales/zh-TW/template-calendar.md +194 -0
  68. package/corpus/core/docs/content/locales/zh-TW/template-chat.md +129 -0
  69. package/corpus/core/docs/content/locales/zh-TW/template-clips.md +368 -0
  70. package/corpus/core/docs/content/locales/zh-TW/template-content.md +402 -0
  71. package/corpus/core/docs/content/locales/zh-TW/template-design.md +173 -0
  72. package/corpus/core/docs/content/locales/zh-TW/template-dispatch.md +220 -0
  73. package/corpus/core/docs/content/locales/zh-TW/template-forms.md +178 -0
  74. package/corpus/core/docs/content/locales/zh-TW/template-mail.md +239 -0
  75. package/corpus/core/docs/content/locales/zh-TW/template-plan.md +814 -0
  76. package/corpus/core/docs/content/locales/zh-TW/template-slides.md +293 -0
  77. package/corpus/core/docs/content/locales/zh-TW/template-videos.md +222 -0
  78. package/corpus/core/docs/content/locales/zh-TW/tracking.md +236 -0
  79. package/corpus/core/docs/content/locales/zh-TW/using-your-agent.md +71 -0
  80. package/corpus/core/docs/content/locales/zh-TW/voice-input.md +81 -0
  81. package/corpus/core/docs/content/locales/zh-TW/what-is-agent-native.md +202 -0
  82. package/corpus/core/docs/content/locales/zh-TW/workspace-connections.md +321 -0
  83. package/corpus/core/docs/content/locales/zh-TW/workspace-management.md +175 -0
  84. package/corpus/core/docs/content/locales/zh-TW/workspace.md +323 -0
  85. package/corpus/core/docs/content/locales/zh-TW/writing-agent-instructions.md +173 -0
  86. package/corpus/core/package.json +1 -1
  87. package/corpus/core/src/client/ErrorBoundary.tsx +10 -0
  88. package/corpus/core/src/client/FeedbackButton.tsx +12 -0
  89. package/corpus/core/src/client/blocks/library/block-copy.ts +32 -0
  90. package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +33 -0
  91. package/corpus/core/src/client/i18n.tsx +5 -0
  92. package/corpus/core/src/localization/actions/set-localization-preference.ts +2 -1
  93. package/corpus/core/src/localization/shared.ts +45 -0
  94. package/corpus/core/src/server/agent-chat-plugin.ts +38 -0
  95. package/corpus/core/src/server/onboarding-html.ts +99 -0
  96. package/corpus/core/src/templates/default/app/i18n/index.ts +2 -0
  97. package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +466 -0
  98. package/corpus/core/src/templates/default/app/root.tsx +8 -0
  99. package/corpus/templates/analytics/app/i18n/index.ts +2 -0
  100. package/corpus/templates/analytics/app/i18n/zh-TW.ts +818 -0
  101. package/corpus/templates/analytics/app/i18n-data.ts +9 -0
  102. package/corpus/templates/assets/app/i18n/index.ts +2 -0
  103. package/corpus/templates/assets/app/i18n/zh-TW.ts +860 -0
  104. package/corpus/templates/assets/app/i18n-data.ts +3 -0
  105. package/corpus/templates/brain/app/i18n/index.ts +2 -0
  106. package/corpus/templates/brain/app/i18n/zh-TW.ts +709 -0
  107. package/corpus/templates/brain/app/i18n-data.ts +3 -0
  108. package/corpus/templates/calendar/app/i18n/zh-TW.ts +836 -0
  109. package/corpus/templates/calendar/app/i18n-data.ts +4 -0
  110. package/corpus/templates/chat/app/i18n/index.ts +2 -0
  111. package/corpus/templates/chat/app/i18n/zh-TW.ts +67 -0
  112. package/corpus/templates/chat/app/i18n-data.ts +3 -0
  113. package/corpus/templates/clips/app/i18n/index.ts +2 -0
  114. package/corpus/templates/clips/app/i18n/zh-TW.ts +1280 -0
  115. package/corpus/templates/content/app/i18n/index.ts +2 -0
  116. package/corpus/templates/content/app/i18n/zh-TW.ts +906 -0
  117. package/corpus/templates/content/app/i18n-data.ts +4 -0
  118. package/corpus/templates/design/app/i18n/index.ts +2 -0
  119. package/corpus/templates/design/app/i18n/zh-TW.ts +517 -0
  120. package/corpus/templates/design/app/i18n-data.ts +6 -0
  121. package/corpus/templates/dispatch/app/i18n/index.ts +2 -0
  122. package/corpus/templates/dispatch/app/i18n/zh-TW.ts +195 -0
  123. package/corpus/templates/dispatch/app/i18n-data.ts +3 -0
  124. package/corpus/templates/forms/app/i18n/index.ts +2 -0
  125. package/corpus/templates/forms/app/i18n/zh-TW.ts +349 -0
  126. package/corpus/templates/macros/app/i18n/index.ts +2 -0
  127. package/corpus/templates/macros/app/i18n/zh-TW.ts +224 -0
  128. package/corpus/templates/mail/app/i18n/index.ts +2 -0
  129. package/corpus/templates/mail/app/i18n/zh-TW.ts +562 -0
  130. package/corpus/templates/mail/app/root.tsx +6 -0
  131. package/corpus/templates/plan/app/i18n/index.ts +2 -0
  132. package/corpus/templates/plan/app/i18n/zh-TW.ts +712 -0
  133. package/corpus/templates/slides/app/i18n/index.ts +2 -0
  134. package/corpus/templates/slides/app/i18n/zh-TW.ts +531 -0
  135. package/corpus/templates/videos/app/i18n/index.ts +2 -0
  136. package/corpus/templates/videos/app/i18n/zh-TW.ts +435 -0
  137. package/dist/client/ErrorBoundary.d.ts.map +1 -1
  138. package/dist/client/ErrorBoundary.js +10 -0
  139. package/dist/client/ErrorBoundary.js.map +1 -1
  140. package/dist/client/FeedbackButton.d.ts.map +1 -1
  141. package/dist/client/FeedbackButton.js +12 -0
  142. package/dist/client/FeedbackButton.js.map +1 -1
  143. package/dist/client/blocks/library/block-copy.d.ts.map +1 -1
  144. package/dist/client/blocks/library/block-copy.js +32 -0
  145. package/dist/client/blocks/library/block-copy.js.map +1 -1
  146. package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
  147. package/dist/client/extensions/ExtensionsSidebarSection.js +32 -0
  148. package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
  149. package/dist/client/i18n.d.ts.map +1 -1
  150. package/dist/client/i18n.js +5 -0
  151. package/dist/client/i18n.js.map +1 -1
  152. package/dist/collab/awareness.d.ts +2 -2
  153. package/dist/collab/awareness.d.ts.map +1 -1
  154. package/dist/collab/routes.d.ts +1 -1
  155. package/dist/localization/actions/set-localization-preference.d.ts.map +1 -1
  156. package/dist/localization/actions/set-localization-preference.js +2 -2
  157. package/dist/localization/actions/set-localization-preference.js.map +1 -1
  158. package/dist/localization/shared.d.ts +1 -1
  159. package/dist/localization/shared.d.ts.map +1 -1
  160. package/dist/localization/shared.js +43 -0
  161. package/dist/localization/shared.js.map +1 -1
  162. package/dist/notifications/routes.d.ts +3 -3
  163. package/dist/observability/routes.d.ts +3 -3
  164. package/dist/resources/handlers.d.ts +2 -2
  165. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  166. package/dist/server/agent-chat-plugin.js +39 -0
  167. package/dist/server/agent-chat-plugin.js.map +1 -1
  168. package/dist/server/agent-engine-api-key-route.d.ts +2 -2
  169. package/dist/server/onboarding-html.d.ts.map +1 -1
  170. package/dist/server/onboarding-html.js +96 -0
  171. package/dist/server/onboarding-html.js.map +1 -1
  172. package/dist/templates/default/app/i18n/index.ts +2 -0
  173. package/dist/templates/default/app/i18n/zh-TW.ts +466 -0
  174. package/dist/templates/default/app/root.tsx +8 -0
  175. package/docs/content/locales/zh-TW/a2a-protocol.md +392 -0
  176. package/docs/content/locales/zh-TW/actions.md +583 -0
  177. package/docs/content/locales/zh-TW/agent-mentions.md +164 -0
  178. package/docs/content/locales/zh-TW/agent-surfaces.md +397 -0
  179. package/docs/content/locales/zh-TW/agent-teams.md +171 -0
  180. package/docs/content/locales/zh-TW/agent-web-surfaces.md +161 -0
  181. package/docs/content/locales/zh-TW/audit-log.md +111 -0
  182. package/docs/content/locales/zh-TW/authentication.md +332 -0
  183. package/docs/content/locales/zh-TW/automations.md +268 -0
  184. package/docs/content/locales/zh-TW/blueprint-installer.md +83 -0
  185. package/docs/content/locales/zh-TW/cli-adapters.md +129 -0
  186. package/docs/content/locales/zh-TW/client.md +398 -0
  187. package/docs/content/locales/zh-TW/cloneable-saas.md +114 -0
  188. package/docs/content/locales/zh-TW/code-agents-ui.md +436 -0
  189. package/docs/content/locales/zh-TW/components.md +368 -0
  190. package/docs/content/locales/zh-TW/context-awareness.md +373 -0
  191. package/docs/content/locales/zh-TW/creating-templates.md +411 -0
  192. package/docs/content/locales/zh-TW/cross-app-sso.md +188 -0
  193. package/docs/content/locales/zh-TW/database.md +183 -0
  194. package/docs/content/locales/zh-TW/deployment.md +348 -0
  195. package/docs/content/locales/zh-TW/dispatch.md +146 -0
  196. package/docs/content/locales/zh-TW/drop-in-agent.md +260 -0
  197. package/docs/content/locales/zh-TW/durable-resume.md +65 -0
  198. package/docs/content/locales/zh-TW/embedding-sdk.md +597 -0
  199. package/docs/content/locales/zh-TW/evals.md +155 -0
  200. package/docs/content/locales/zh-TW/extensions.md +360 -0
  201. package/docs/content/locales/zh-TW/external-agents.md +619 -0
  202. package/docs/content/locales/zh-TW/faq.md +142 -0
  203. package/docs/content/locales/zh-TW/file-uploads.md +122 -0
  204. package/docs/content/locales/zh-TW/frames.md +153 -0
  205. package/docs/content/locales/zh-TW/getting-started.md +199 -0
  206. package/docs/content/locales/zh-TW/harness-agents.md +349 -0
  207. package/docs/content/locales/zh-TW/human-approval.md +86 -0
  208. package/docs/content/locales/zh-TW/internationalization.md +147 -0
  209. package/docs/content/locales/zh-TW/key-concepts.md +312 -0
  210. package/docs/content/locales/zh-TW/local-file-mode.md +433 -0
  211. package/docs/content/locales/zh-TW/mcp-apps.md +147 -0
  212. package/docs/content/locales/zh-TW/mcp-clients.md +330 -0
  213. package/docs/content/locales/zh-TW/mcp-protocol.md +279 -0
  214. package/docs/content/locales/zh-TW/messaging.md +461 -0
  215. package/docs/content/locales/zh-TW/migration-workbench.md +33 -0
  216. package/docs/content/locales/zh-TW/multi-app-workspace.md +312 -0
  217. package/docs/content/locales/zh-TW/multi-tenancy.md +52 -0
  218. package/docs/content/locales/zh-TW/native-chat-ui.md +321 -0
  219. package/docs/content/locales/zh-TW/notifications.md +231 -0
  220. package/docs/content/locales/zh-TW/observability.md +294 -0
  221. package/docs/content/locales/zh-TW/observational-memory.md +77 -0
  222. package/docs/content/locales/zh-TW/onboarding.md +216 -0
  223. package/docs/content/locales/zh-TW/plan-plugin.md +200 -0
  224. package/docs/content/locales/zh-TW/pr-visual-recap.md +384 -0
  225. package/docs/content/locales/zh-TW/processors.md +106 -0
  226. package/docs/content/locales/zh-TW/progress.md +199 -0
  227. package/docs/content/locales/zh-TW/pure-agent-apps.md +39 -0
  228. package/docs/content/locales/zh-TW/real-time-collaboration.md +680 -0
  229. package/docs/content/locales/zh-TW/recurring-jobs.md +142 -0
  230. package/docs/content/locales/zh-TW/routing.md +79 -0
  231. package/docs/content/locales/zh-TW/sandbox-adapters.md +227 -0
  232. package/docs/content/locales/zh-TW/security.md +330 -0
  233. package/docs/content/locales/zh-TW/server.md +265 -0
  234. package/docs/content/locales/zh-TW/sharing.md +219 -0
  235. package/docs/content/locales/zh-TW/skills-guide.md +281 -0
  236. package/docs/content/locales/zh-TW/template-analytics.md +259 -0
  237. package/docs/content/locales/zh-TW/template-assets.md +303 -0
  238. package/docs/content/locales/zh-TW/template-brain.md +324 -0
  239. package/docs/content/locales/zh-TW/template-calendar.md +194 -0
  240. package/docs/content/locales/zh-TW/template-chat.md +129 -0
  241. package/docs/content/locales/zh-TW/template-clips.md +368 -0
  242. package/docs/content/locales/zh-TW/template-content.md +402 -0
  243. package/docs/content/locales/zh-TW/template-design.md +173 -0
  244. package/docs/content/locales/zh-TW/template-dispatch.md +220 -0
  245. package/docs/content/locales/zh-TW/template-forms.md +178 -0
  246. package/docs/content/locales/zh-TW/template-mail.md +239 -0
  247. package/docs/content/locales/zh-TW/template-plan.md +814 -0
  248. package/docs/content/locales/zh-TW/template-slides.md +293 -0
  249. package/docs/content/locales/zh-TW/template-videos.md +222 -0
  250. package/docs/content/locales/zh-TW/tracking.md +236 -0
  251. package/docs/content/locales/zh-TW/using-your-agent.md +71 -0
  252. package/docs/content/locales/zh-TW/voice-input.md +81 -0
  253. package/docs/content/locales/zh-TW/what-is-agent-native.md +202 -0
  254. package/docs/content/locales/zh-TW/workspace-connections.md +321 -0
  255. package/docs/content/locales/zh-TW/workspace-management.md +175 -0
  256. package/docs/content/locales/zh-TW/workspace.md +323 -0
  257. package/docs/content/locales/zh-TW/writing-agent-instructions.md +173 -0
  258. package/package.json +1 -1
  259. package/src/templates/default/app/i18n/index.ts +2 -0
  260. package/src/templates/default/app/i18n/zh-TW.ts +466 -0
  261. package/src/templates/default/app/root.tsx +8 -0
@@ -4,6 +4,7 @@ import { defineAction } from "../../action.js";
4
4
  import { putUserSetting } from "../../settings/user-settings.js";
5
5
  import {
6
6
  LOCALIZATION_SETTING_KEY,
7
+ SUPPORTED_LOCALES,
7
8
  normalizeLocalePreference,
8
9
  type LocalizationPreference,
9
10
  } from "../shared.js";
@@ -21,7 +22,7 @@ export default defineAction({
21
22
  const locale = normalizeLocalePreference(args.locale);
22
23
  if (!locale) {
23
24
  throw new Error(
24
- "Unsupported locale. Use system, en-US, zh-CN, es-ES, fr-FR, de-DE, ja-JP, ko-KR, pt-BR, hi-IN, or ar-SA.",
25
+ `Unsupported locale. Use system, ${SUPPORTED_LOCALES.join(", ")}.`,
25
26
  );
26
27
  }
27
28
  const value: LocalizationPreference & Record<string, unknown> = { locale };
@@ -1,6 +1,7 @@
1
1
  export const SUPPORTED_LOCALES = [
2
2
  "en-US",
3
3
  "zh-CN",
4
+ "zh-TW",
4
5
  "es-ES",
5
6
  "fr-FR",
6
7
  "de-DE",
@@ -43,6 +44,12 @@ export const LOCALE_METADATA: Record<LocaleCode, LocaleMetadata> = {
43
44
  nativeName: "简体中文",
44
45
  dir: "ltr",
45
46
  },
47
+ "zh-TW": {
48
+ code: "zh-TW",
49
+ englishName: "Chinese (Traditional, Taiwan)",
50
+ nativeName: "繁體中文",
51
+ dir: "ltr",
52
+ },
46
53
  "es-ES": {
47
54
  code: "es-ES",
48
55
  englishName: "Spanish",
@@ -95,6 +102,42 @@ export const LOCALE_METADATA: Record<LocaleCode, LocaleMetadata> = {
95
102
 
96
103
  const SUPPORTED_LOCALE_SET = new Set<string>(SUPPORTED_LOCALES);
97
104
 
105
+ const CHINESE_LOCALE_ALIASES: Record<string, LocaleCode> = {
106
+ "zh-cn": "zh-CN",
107
+ "zh-hans": "zh-CN",
108
+ "zh-hans-cn": "zh-CN",
109
+ "zh-hans-sg": "zh-CN",
110
+ "zh-hant": "zh-TW",
111
+ "zh-hant-hk": "zh-TW",
112
+ "zh-hant-mo": "zh-TW",
113
+ "zh-hant-tw": "zh-TW",
114
+ "zh-hk": "zh-TW",
115
+ "zh-mo": "zh-TW",
116
+ "zh-sg": "zh-CN",
117
+ "zh-tw": "zh-TW",
118
+ };
119
+
120
+ function normalizeChineseLocaleAlias(canonical: string): LocaleCode | null {
121
+ const normalized = canonical.toLowerCase();
122
+ const alias = CHINESE_LOCALE_ALIASES[normalized];
123
+ if (alias) return alias;
124
+
125
+ const parts = normalized.split("-");
126
+ if (parts[0] !== "zh") return null;
127
+ if (
128
+ parts.includes("hant") ||
129
+ parts.includes("tw") ||
130
+ parts.includes("hk") ||
131
+ parts.includes("mo")
132
+ ) {
133
+ return "zh-TW";
134
+ }
135
+ if (parts.includes("hans") || parts.includes("cn") || parts.includes("sg")) {
136
+ return "zh-CN";
137
+ }
138
+ return null;
139
+ }
140
+
98
141
  export function isLocaleCode(value: unknown): value is LocaleCode {
99
142
  return typeof value === "string" && SUPPORTED_LOCALE_SET.has(value);
100
143
  }
@@ -104,6 +147,8 @@ export function normalizeLocaleCode(value: unknown): LocaleCode | null {
104
147
  try {
105
148
  for (const canonical of Intl.getCanonicalLocales(value.trim())) {
106
149
  if (isLocaleCode(canonical)) return canonical;
150
+ const alias = normalizeChineseLocaleAlias(canonical);
151
+ if (alias) return alias;
107
152
  const language = canonical.split("-")[0]?.toLowerCase();
108
153
  const match = SUPPORTED_LOCALES.find(
109
154
  (locale) => locale.split("-")[0]?.toLowerCase() === language,
@@ -7779,6 +7779,44 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
7779
7779
  }
7780
7780
  }
7781
7781
  }
7782
+ // Cookieless durable background worker: getSession()/getOrgContext()
7783
+ // resolve from the (absent) session, so org-scoped credential resolution
7784
+ // (the Builder engine) would miss the owner's org and resolveEngine would
7785
+ // fall back to the anthropic default — bailing on a missing key before
7786
+ // the worker claims its run. The owner IS known here (seeded via
7787
+ // OWNER_CONTEXT_KEY from the run's thread), so resolve the org directly
7788
+ // from the owner email, the same active-org logic the foreground session
7789
+ // would yield.
7790
+ if (!resolvedOrgId && owner) {
7791
+ try {
7792
+ const { resolveOrgIdForEmail } = await import("../org/context.js");
7793
+ resolvedOrgId = (await resolveOrgIdForEmail(owner)) ?? undefined;
7794
+ } catch {
7795
+ // org tables unavailable — proceed without org (foreground-equivalent)
7796
+ }
7797
+ }
7798
+
7799
+ // DURABLE OWNER CONTEXT, PART 2: ORG.
7800
+ // The cookieless `_process-run` self-dispatch (and any other background
7801
+ // re-entry) resolves the owner from the run row, but has NO session —
7802
+ // every org resolver above ultimately derives identity from
7803
+ // getSession(event), so they all come back null here. That silently
7804
+ // scopes the agent to `org_id IS NULL` rows only: it sees and writes
7805
+ // resources outside the user's org, while the foreground UI — which
7806
+ // carries the session cookie — resolves the real org. The result is the
7807
+ // observed split where the agent can't list/read the same resources the
7808
+ // UI shows and writes new rows with a null org. Resolve the org from the
7809
+ // now-known owner email (the same active-org / membership logic
7810
+ // getOrgContext uses, minus the session) so the agent and the UI operate
7811
+ // over the same org-scoped data.
7812
+ if (!resolvedOrgId && owner && !ownerContext.anonymous) {
7813
+ try {
7814
+ const { resolveOrgIdForEmail } = await import("../org/context.js");
7815
+ resolvedOrgId = (await resolveOrgIdForEmail(owner)) ?? undefined;
7816
+ } catch {
7817
+ // org tables unavailable (first boot) — leave org unscoped
7818
+ }
7819
+ }
7782
7820
 
7783
7821
  // Propagate the caller's IANA timezone from `x-user-timezone` so that
7784
7822
  // tool calls made by the agent (e.g. log-meal with no explicit date)
@@ -253,6 +253,95 @@ const AUTH_LOCALE_COPY: Record<LocaleCode, typeof EN_AUTH_COPY> = {
253
253
  googleNeverFinished:
254
254
  "Google 登录未完成。请检查 Google OAuth 重定向 URI 和服务器日志中的 [agent-native][google-oauth]。",
255
255
  },
256
+ "zh-TW": {
257
+ languageLabel: "語言",
258
+ systemLanguage: "系統",
259
+ pageTitleSignIn: "登入",
260
+ pageTitleWelcome: "歡迎",
261
+ welcomeTitle: "歡迎",
262
+ signInTitle: "登入",
263
+ welcomeBackTitle: "歡迎回來",
264
+ checkEmailTitle: "檢查你的電子郵件",
265
+ resetPasswordTitle: "重設密碼",
266
+ createAccountSubtitle: "建立帳號即可開始",
267
+ googleOnlySubtitle: "使用你的工作區 Google 帳號繼續",
268
+ signInSubtitle: "登入你的帳號",
269
+ finishAccountSubtitle: "完成帳號建立",
270
+ resetPasswordSubtitle: "重設你的密碼",
271
+ upgradeCopy: "繼續登入,將此應用程式連結到你的帳號並遷移本機資料。",
272
+ googleButton: "使用 Google 登入",
273
+ dividerOr: "或",
274
+ createAccount: "建立帳號",
275
+ signIn: "登入",
276
+ email: "電子郵件",
277
+ password: "密碼",
278
+ confirmPassword: "確認密碼",
279
+ passwordMinPlaceholder: "至少 8 個字元",
280
+ confirmPasswordPlaceholder: "確認密碼",
281
+ enterPasswordPlaceholder: "輸入密碼",
282
+ signupProgress: "註冊進度",
283
+ progressAccount: "帳號",
284
+ progressVerify: "驗證",
285
+ progressStart: "開始",
286
+ verificationSent: "驗證郵件已送出",
287
+ verifyCopyPrefix: "我們已將安全連結寄到",
288
+ verifyCopySuffix: "。點擊連結後回到這裡,應用程式會自動完成登入。",
289
+ verificationNote:
290
+ "你可以保持此分頁開啟。如果回來後沒有自動重新整理,請點擊繼續。",
291
+ continue: "繼續",
292
+ resendEmail: "重新寄送郵件",
293
+ back: "返回",
294
+ forgotPassword: "忘記密碼?",
295
+ sendResetLink: "寄送重設連結",
296
+ backToSignIn: "返回登入",
297
+ localNotePrefix: "你的帳號儲存在此應用程式自己的資料庫中",
298
+ localNoteSuffix: ",而不是第三方服務。",
299
+ runLocally: "在本機執行",
300
+ runLocallySentence: "在本機執行",
301
+ openSource: "100% 免費且開源",
302
+ useOwnGoogleClient: "使用你自己的 Google OAuth 用戶端:",
303
+ copyCommand: "複製指令",
304
+ copied: "已複製",
305
+ close: "關閉",
306
+ closeGoogleChoices: "關閉 Google 登入選項",
307
+ legalPrefix: "註冊即表示你接受我們的",
308
+ legalTerms: "條款",
309
+ legalConnector: "和",
310
+ legalPrivacy: "隱私權政策",
311
+ legalSuffix: "。",
312
+ invalidEmail: "請輸入有效的電子郵件地址,例如 you@example.com。",
313
+ signInToContinue: "登入以繼續。",
314
+ finishSignInFailed: "無法自動完成登入。",
315
+ enterPasswordAfterVerification: "驗證電子郵件後請輸入密碼。",
316
+ finishSignInManually: "無法自動完成登入。請登入以繼續。",
317
+ stillWaitingVerification:
318
+ "仍在等待驗證。請點擊郵件中的連結,然後再次點擊繼續。",
319
+ checkVerificationFailed: "無法檢查驗證狀態。請重試。",
320
+ checking: "正在檢查...",
321
+ checkingVerification: "正在檢查驗證狀態...",
322
+ sending: "正在寄送...",
323
+ sent: "已送出",
324
+ sentVerification: "新的驗證連結已送出。",
325
+ resendVerificationFailed: "無法重新寄送驗證郵件。",
326
+ networkErrorRetry: "網路錯誤。請重試。",
327
+ networkErrorDashRetry: "網路錯誤 - 請重試",
328
+ passwordsMismatch: "兩次輸入的密碼不一致",
329
+ creatingAccount: "正在建立帳號...",
330
+ registrationFailed: "註冊失敗",
331
+ accountCreatedSigningIn: "帳號已建立,正在登入...",
332
+ emailVerifiedFinishing: "電子郵件已驗證。正在完成登入...",
333
+ emailVerifiedSignIn: "電子郵件已驗證。請登入以繼續。",
334
+ resetEmailSent: "如果該電子郵件存在,重設連結已在寄送途中。",
335
+ resetEmailFailed: "無法寄送重設郵件。",
336
+ signingIn: "正在登入...",
337
+ invalidLogin: "電子郵件或密碼無效",
338
+ googleNotConfigured: "Google OAuth 尚未設定。",
339
+ failedToConnect: "連線失敗。請重試。",
340
+ migrateLocalFallback: "繼續登入以遷移本機資料。",
341
+ googlePopupHelp: "請允許此網站開啟彈出式視窗後重試",
342
+ googleNeverFinished:
343
+ "Google 登入未完成。請檢查 Google OAuth 重新導向 URI,以及伺服器記錄中的 [agent-native][google-oauth]。",
344
+ },
256
345
  "es-ES": {
257
346
  languageLabel: "Idioma",
258
347
  systemLanguage: "Sistema",
@@ -1038,6 +1127,16 @@ const AUTH_MARKETING_LOCALE_COPY: Partial<
1038
1127
  ],
1039
1128
  },
1040
1129
  },
1130
+ "zh-TW": {
1131
+ forms: {
1132
+ tagline: "你的 AI 代理會和你一起建立、發布與分析表單。",
1133
+ features: [
1134
+ "用一句話建立完整表單",
1135
+ "立即發布,產生可分享連結與驗證碼",
1136
+ "依需求取得回覆摘要、匯出與趨勢分析",
1137
+ ],
1138
+ },
1139
+ },
1041
1140
  "es-ES": {
1042
1141
  forms: {
1043
1142
  tagline: "Tu agente de IA crea, publica y analiza formularios contigo.",
@@ -9,6 +9,8 @@ export const i18nCatalog = {
9
9
  switch (locale) {
10
10
  case "zh-CN":
11
11
  return (await import("./zh-CN")).default;
12
+ case "zh-TW":
13
+ return (await import("./zh-TW")).default;
12
14
  case "es-ES":
13
15
  return (await import("./es-ES")).default;
14
16
  case "fr-FR":