@agent-native/core 0.79.1 → 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.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +30 -0
- package/corpus/core/docs/content/locales/zh-TW/a2a-protocol.md +392 -0
- package/corpus/core/docs/content/locales/zh-TW/actions.md +583 -0
- package/corpus/core/docs/content/locales/zh-TW/agent-mentions.md +164 -0
- package/corpus/core/docs/content/locales/zh-TW/agent-surfaces.md +397 -0
- package/corpus/core/docs/content/locales/zh-TW/agent-teams.md +171 -0
- package/corpus/core/docs/content/locales/zh-TW/agent-web-surfaces.md +161 -0
- package/corpus/core/docs/content/locales/zh-TW/audit-log.md +111 -0
- package/corpus/core/docs/content/locales/zh-TW/authentication.md +332 -0
- package/corpus/core/docs/content/locales/zh-TW/automations.md +268 -0
- package/corpus/core/docs/content/locales/zh-TW/blueprint-installer.md +83 -0
- package/corpus/core/docs/content/locales/zh-TW/cli-adapters.md +129 -0
- package/corpus/core/docs/content/locales/zh-TW/client.md +398 -0
- package/corpus/core/docs/content/locales/zh-TW/cloneable-saas.md +114 -0
- package/corpus/core/docs/content/locales/zh-TW/code-agents-ui.md +436 -0
- package/corpus/core/docs/content/locales/zh-TW/components.md +368 -0
- package/corpus/core/docs/content/locales/zh-TW/context-awareness.md +373 -0
- package/corpus/core/docs/content/locales/zh-TW/creating-templates.md +411 -0
- package/corpus/core/docs/content/locales/zh-TW/cross-app-sso.md +188 -0
- package/corpus/core/docs/content/locales/zh-TW/database.md +183 -0
- package/corpus/core/docs/content/locales/zh-TW/deployment.md +348 -0
- package/corpus/core/docs/content/locales/zh-TW/dispatch.md +146 -0
- package/corpus/core/docs/content/locales/zh-TW/drop-in-agent.md +260 -0
- package/corpus/core/docs/content/locales/zh-TW/durable-resume.md +65 -0
- package/corpus/core/docs/content/locales/zh-TW/embedding-sdk.md +597 -0
- package/corpus/core/docs/content/locales/zh-TW/evals.md +155 -0
- package/corpus/core/docs/content/locales/zh-TW/extensions.md +360 -0
- package/corpus/core/docs/content/locales/zh-TW/external-agents.md +619 -0
- package/corpus/core/docs/content/locales/zh-TW/faq.md +142 -0
- package/corpus/core/docs/content/locales/zh-TW/file-uploads.md +122 -0
- package/corpus/core/docs/content/locales/zh-TW/frames.md +153 -0
- package/corpus/core/docs/content/locales/zh-TW/getting-started.md +199 -0
- package/corpus/core/docs/content/locales/zh-TW/harness-agents.md +349 -0
- package/corpus/core/docs/content/locales/zh-TW/human-approval.md +86 -0
- package/corpus/core/docs/content/locales/zh-TW/internationalization.md +147 -0
- package/corpus/core/docs/content/locales/zh-TW/key-concepts.md +312 -0
- package/corpus/core/docs/content/locales/zh-TW/local-file-mode.md +433 -0
- package/corpus/core/docs/content/locales/zh-TW/mcp-apps.md +147 -0
- package/corpus/core/docs/content/locales/zh-TW/mcp-clients.md +330 -0
- package/corpus/core/docs/content/locales/zh-TW/mcp-protocol.md +279 -0
- package/corpus/core/docs/content/locales/zh-TW/messaging.md +461 -0
- package/corpus/core/docs/content/locales/zh-TW/migration-workbench.md +33 -0
- package/corpus/core/docs/content/locales/zh-TW/multi-app-workspace.md +312 -0
- package/corpus/core/docs/content/locales/zh-TW/multi-tenancy.md +52 -0
- package/corpus/core/docs/content/locales/zh-TW/native-chat-ui.md +321 -0
- package/corpus/core/docs/content/locales/zh-TW/notifications.md +231 -0
- package/corpus/core/docs/content/locales/zh-TW/observability.md +294 -0
- package/corpus/core/docs/content/locales/zh-TW/observational-memory.md +77 -0
- package/corpus/core/docs/content/locales/zh-TW/onboarding.md +216 -0
- package/corpus/core/docs/content/locales/zh-TW/plan-plugin.md +200 -0
- package/corpus/core/docs/content/locales/zh-TW/pr-visual-recap.md +384 -0
- package/corpus/core/docs/content/locales/zh-TW/processors.md +106 -0
- package/corpus/core/docs/content/locales/zh-TW/progress.md +199 -0
- package/corpus/core/docs/content/locales/zh-TW/pure-agent-apps.md +39 -0
- package/corpus/core/docs/content/locales/zh-TW/real-time-collaboration.md +680 -0
- package/corpus/core/docs/content/locales/zh-TW/recurring-jobs.md +142 -0
- package/corpus/core/docs/content/locales/zh-TW/routing.md +79 -0
- package/corpus/core/docs/content/locales/zh-TW/sandbox-adapters.md +227 -0
- package/corpus/core/docs/content/locales/zh-TW/security.md +330 -0
- package/corpus/core/docs/content/locales/zh-TW/server.md +265 -0
- package/corpus/core/docs/content/locales/zh-TW/sharing.md +219 -0
- package/corpus/core/docs/content/locales/zh-TW/skills-guide.md +281 -0
- package/corpus/core/docs/content/locales/zh-TW/template-analytics.md +259 -0
- package/corpus/core/docs/content/locales/zh-TW/template-assets.md +303 -0
- package/corpus/core/docs/content/locales/zh-TW/template-brain.md +324 -0
- package/corpus/core/docs/content/locales/zh-TW/template-calendar.md +194 -0
- package/corpus/core/docs/content/locales/zh-TW/template-chat.md +129 -0
- package/corpus/core/docs/content/locales/zh-TW/template-clips.md +368 -0
- package/corpus/core/docs/content/locales/zh-TW/template-content.md +402 -0
- package/corpus/core/docs/content/locales/zh-TW/template-design.md +173 -0
- package/corpus/core/docs/content/locales/zh-TW/template-dispatch.md +220 -0
- package/corpus/core/docs/content/locales/zh-TW/template-forms.md +178 -0
- package/corpus/core/docs/content/locales/zh-TW/template-mail.md +239 -0
- package/corpus/core/docs/content/locales/zh-TW/template-plan.md +814 -0
- package/corpus/core/docs/content/locales/zh-TW/template-slides.md +293 -0
- package/corpus/core/docs/content/locales/zh-TW/template-videos.md +222 -0
- package/corpus/core/docs/content/locales/zh-TW/tracking.md +236 -0
- package/corpus/core/docs/content/locales/zh-TW/using-your-agent.md +71 -0
- package/corpus/core/docs/content/locales/zh-TW/voice-input.md +81 -0
- package/corpus/core/docs/content/locales/zh-TW/what-is-agent-native.md +202 -0
- package/corpus/core/docs/content/locales/zh-TW/workspace-connections.md +321 -0
- package/corpus/core/docs/content/locales/zh-TW/workspace-management.md +175 -0
- package/corpus/core/docs/content/locales/zh-TW/workspace.md +323 -0
- package/corpus/core/docs/content/locales/zh-TW/writing-agent-instructions.md +173 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/client/ErrorBoundary.tsx +10 -0
- package/corpus/core/src/client/FeedbackButton.tsx +12 -0
- package/corpus/core/src/client/blocks/library/block-copy.ts +32 -0
- package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +33 -0
- package/corpus/core/src/client/i18n.tsx +5 -0
- package/corpus/core/src/localization/actions/set-localization-preference.ts +2 -1
- package/corpus/core/src/localization/shared.ts +45 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +54 -2
- package/corpus/core/src/server/onboarding-html.ts +99 -0
- package/corpus/core/src/templates/default/app/i18n/index.ts +2 -0
- package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +466 -0
- package/corpus/core/src/templates/default/app/root.tsx +8 -0
- package/corpus/templates/analytics/app/i18n/index.ts +2 -0
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +818 -0
- package/corpus/templates/analytics/app/i18n-data.ts +9 -0
- package/corpus/templates/assets/app/i18n/index.ts +2 -0
- package/corpus/templates/assets/app/i18n/zh-TW.ts +860 -0
- package/corpus/templates/assets/app/i18n-data.ts +3 -0
- package/corpus/templates/brain/app/i18n/index.ts +2 -0
- package/corpus/templates/brain/app/i18n/zh-TW.ts +709 -0
- package/corpus/templates/brain/app/i18n-data.ts +3 -0
- package/corpus/templates/calendar/app/i18n/zh-TW.ts +836 -0
- package/corpus/templates/calendar/app/i18n-data.ts +4 -0
- package/corpus/templates/chat/app/i18n/index.ts +2 -0
- package/corpus/templates/chat/app/i18n/zh-TW.ts +67 -0
- package/corpus/templates/chat/app/i18n-data.ts +3 -0
- package/corpus/templates/clips/app/i18n/index.ts +2 -0
- package/corpus/templates/clips/app/i18n/zh-TW.ts +1280 -0
- package/corpus/templates/content/app/i18n/index.ts +2 -0
- package/corpus/templates/content/app/i18n/zh-TW.ts +906 -0
- package/corpus/templates/content/app/i18n-data.ts +4 -0
- package/corpus/templates/design/app/i18n/index.ts +2 -0
- package/corpus/templates/design/app/i18n/zh-TW.ts +517 -0
- package/corpus/templates/design/app/i18n-data.ts +6 -0
- package/corpus/templates/dispatch/app/i18n/index.ts +2 -0
- package/corpus/templates/dispatch/app/i18n/zh-TW.ts +195 -0
- package/corpus/templates/dispatch/app/i18n-data.ts +3 -0
- package/corpus/templates/forms/app/i18n/index.ts +2 -0
- package/corpus/templates/forms/app/i18n/zh-TW.ts +349 -0
- package/corpus/templates/macros/app/i18n/index.ts +2 -0
- package/corpus/templates/macros/app/i18n/zh-TW.ts +224 -0
- package/corpus/templates/mail/app/i18n/index.ts +2 -0
- package/corpus/templates/mail/app/i18n/zh-TW.ts +562 -0
- package/corpus/templates/mail/app/root.tsx +6 -0
- package/corpus/templates/plan/app/i18n/index.ts +2 -0
- package/corpus/templates/plan/app/i18n/zh-TW.ts +712 -0
- package/corpus/templates/slides/app/i18n/index.ts +2 -0
- package/corpus/templates/slides/app/i18n/zh-TW.ts +531 -0
- package/corpus/templates/videos/app/i18n/index.ts +2 -0
- package/corpus/templates/videos/app/i18n/zh-TW.ts +435 -0
- package/dist/client/ErrorBoundary.d.ts.map +1 -1
- package/dist/client/ErrorBoundary.js +10 -0
- package/dist/client/ErrorBoundary.js.map +1 -1
- package/dist/client/FeedbackButton.d.ts.map +1 -1
- package/dist/client/FeedbackButton.js +12 -0
- package/dist/client/FeedbackButton.js.map +1 -1
- package/dist/client/blocks/library/block-copy.d.ts.map +1 -1
- package/dist/client/blocks/library/block-copy.js +32 -0
- package/dist/client/blocks/library/block-copy.js.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.js +32 -0
- package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
- package/dist/client/i18n.d.ts.map +1 -1
- package/dist/client/i18n.js +5 -0
- package/dist/client/i18n.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/localization/actions/set-localization-preference.d.ts.map +1 -1
- package/dist/localization/actions/set-localization-preference.js +2 -2
- package/dist/localization/actions/set-localization-preference.js.map +1 -1
- package/dist/localization/shared.d.ts +1 -1
- package/dist/localization/shared.d.ts.map +1 -1
- package/dist/localization/shared.js +43 -0
- package/dist/localization/shared.js.map +1 -1
- package/dist/resources/handlers.d.ts +2 -2
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +55 -2
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +96 -0
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/templates/default/app/i18n/index.ts +2 -0
- package/dist/templates/default/app/i18n/zh-TW.ts +466 -0
- package/dist/templates/default/app/root.tsx +8 -0
- package/docs/content/locales/zh-TW/a2a-protocol.md +392 -0
- package/docs/content/locales/zh-TW/actions.md +583 -0
- package/docs/content/locales/zh-TW/agent-mentions.md +164 -0
- package/docs/content/locales/zh-TW/agent-surfaces.md +397 -0
- package/docs/content/locales/zh-TW/agent-teams.md +171 -0
- package/docs/content/locales/zh-TW/agent-web-surfaces.md +161 -0
- package/docs/content/locales/zh-TW/audit-log.md +111 -0
- package/docs/content/locales/zh-TW/authentication.md +332 -0
- package/docs/content/locales/zh-TW/automations.md +268 -0
- package/docs/content/locales/zh-TW/blueprint-installer.md +83 -0
- package/docs/content/locales/zh-TW/cli-adapters.md +129 -0
- package/docs/content/locales/zh-TW/client.md +398 -0
- package/docs/content/locales/zh-TW/cloneable-saas.md +114 -0
- package/docs/content/locales/zh-TW/code-agents-ui.md +436 -0
- package/docs/content/locales/zh-TW/components.md +368 -0
- package/docs/content/locales/zh-TW/context-awareness.md +373 -0
- package/docs/content/locales/zh-TW/creating-templates.md +411 -0
- package/docs/content/locales/zh-TW/cross-app-sso.md +188 -0
- package/docs/content/locales/zh-TW/database.md +183 -0
- package/docs/content/locales/zh-TW/deployment.md +348 -0
- package/docs/content/locales/zh-TW/dispatch.md +146 -0
- package/docs/content/locales/zh-TW/drop-in-agent.md +260 -0
- package/docs/content/locales/zh-TW/durable-resume.md +65 -0
- package/docs/content/locales/zh-TW/embedding-sdk.md +597 -0
- package/docs/content/locales/zh-TW/evals.md +155 -0
- package/docs/content/locales/zh-TW/extensions.md +360 -0
- package/docs/content/locales/zh-TW/external-agents.md +619 -0
- package/docs/content/locales/zh-TW/faq.md +142 -0
- package/docs/content/locales/zh-TW/file-uploads.md +122 -0
- package/docs/content/locales/zh-TW/frames.md +153 -0
- package/docs/content/locales/zh-TW/getting-started.md +199 -0
- package/docs/content/locales/zh-TW/harness-agents.md +349 -0
- package/docs/content/locales/zh-TW/human-approval.md +86 -0
- package/docs/content/locales/zh-TW/internationalization.md +147 -0
- package/docs/content/locales/zh-TW/key-concepts.md +312 -0
- package/docs/content/locales/zh-TW/local-file-mode.md +433 -0
- package/docs/content/locales/zh-TW/mcp-apps.md +147 -0
- package/docs/content/locales/zh-TW/mcp-clients.md +330 -0
- package/docs/content/locales/zh-TW/mcp-protocol.md +279 -0
- package/docs/content/locales/zh-TW/messaging.md +461 -0
- package/docs/content/locales/zh-TW/migration-workbench.md +33 -0
- package/docs/content/locales/zh-TW/multi-app-workspace.md +312 -0
- package/docs/content/locales/zh-TW/multi-tenancy.md +52 -0
- package/docs/content/locales/zh-TW/native-chat-ui.md +321 -0
- package/docs/content/locales/zh-TW/notifications.md +231 -0
- package/docs/content/locales/zh-TW/observability.md +294 -0
- package/docs/content/locales/zh-TW/observational-memory.md +77 -0
- package/docs/content/locales/zh-TW/onboarding.md +216 -0
- package/docs/content/locales/zh-TW/plan-plugin.md +200 -0
- package/docs/content/locales/zh-TW/pr-visual-recap.md +384 -0
- package/docs/content/locales/zh-TW/processors.md +106 -0
- package/docs/content/locales/zh-TW/progress.md +199 -0
- package/docs/content/locales/zh-TW/pure-agent-apps.md +39 -0
- package/docs/content/locales/zh-TW/real-time-collaboration.md +680 -0
- package/docs/content/locales/zh-TW/recurring-jobs.md +142 -0
- package/docs/content/locales/zh-TW/routing.md +79 -0
- package/docs/content/locales/zh-TW/sandbox-adapters.md +227 -0
- package/docs/content/locales/zh-TW/security.md +330 -0
- package/docs/content/locales/zh-TW/server.md +265 -0
- package/docs/content/locales/zh-TW/sharing.md +219 -0
- package/docs/content/locales/zh-TW/skills-guide.md +281 -0
- package/docs/content/locales/zh-TW/template-analytics.md +259 -0
- package/docs/content/locales/zh-TW/template-assets.md +303 -0
- package/docs/content/locales/zh-TW/template-brain.md +324 -0
- package/docs/content/locales/zh-TW/template-calendar.md +194 -0
- package/docs/content/locales/zh-TW/template-chat.md +129 -0
- package/docs/content/locales/zh-TW/template-clips.md +368 -0
- package/docs/content/locales/zh-TW/template-content.md +402 -0
- package/docs/content/locales/zh-TW/template-design.md +173 -0
- package/docs/content/locales/zh-TW/template-dispatch.md +220 -0
- package/docs/content/locales/zh-TW/template-forms.md +178 -0
- package/docs/content/locales/zh-TW/template-mail.md +239 -0
- package/docs/content/locales/zh-TW/template-plan.md +814 -0
- package/docs/content/locales/zh-TW/template-slides.md +293 -0
- package/docs/content/locales/zh-TW/template-videos.md +222 -0
- package/docs/content/locales/zh-TW/tracking.md +236 -0
- package/docs/content/locales/zh-TW/using-your-agent.md +71 -0
- package/docs/content/locales/zh-TW/voice-input.md +81 -0
- package/docs/content/locales/zh-TW/what-is-agent-native.md +202 -0
- package/docs/content/locales/zh-TW/workspace-connections.md +321 -0
- package/docs/content/locales/zh-TW/workspace-management.md +175 -0
- package/docs/content/locales/zh-TW/workspace.md +323 -0
- package/docs/content/locales/zh-TW/writing-agent-instructions.md +173 -0
- package/package.json +1 -1
- package/src/templates/default/app/i18n/index.ts +2 -0
- package/src/templates/default/app/i18n/zh-TW.ts +466 -0
- 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
|
-
|
|
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)
|
|
@@ -7923,9 +7961,10 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
|
|
|
7923
7961
|
// request body, which the HMAC does not cover and a caller could forge —
|
|
7924
7962
|
// and pre-seed the owner context the handler reads (resolveOwnerContext
|
|
7925
7963
|
// returns it before attempting any session lookup).
|
|
7964
|
+
let backgroundOwner: string | null = null;
|
|
7926
7965
|
try {
|
|
7927
7966
|
const { getRunOwnerEmail } = await import("../agent/run-store.js");
|
|
7928
|
-
|
|
7967
|
+
backgroundOwner = await getRunOwnerEmail(prepared.runId);
|
|
7929
7968
|
if (backgroundOwner) {
|
|
7930
7969
|
(event as any).context[OWNER_CONTEXT_KEY] = {
|
|
7931
7970
|
owner: backgroundOwner,
|
|
@@ -7938,7 +7977,20 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
|
|
|
7938
7977
|
}
|
|
7939
7978
|
|
|
7940
7979
|
try {
|
|
7941
|
-
|
|
7980
|
+
// Run the worker INSIDE the owner's AsyncLocalStorage request context.
|
|
7981
|
+
// Seeding OWNER_CONTEXT_KEY (above) only feeds getOwnerFromEvent; the
|
|
7982
|
+
// engine-resolution path (detectEngineFromUserSecrets) and other
|
|
7983
|
+
// owner-scoped reads use getRequestUserEmail()/getRequestOrgId(),
|
|
7984
|
+
// which a cookieless background worker otherwise leaves empty. Without
|
|
7985
|
+
// this, resolveEngine can't see the owner's Builder credential, falls
|
|
7986
|
+
// back to the anthropic default, and — when the owner has no stored
|
|
7987
|
+
// anthropic key and deploy-credential fallback is blocked — bails at
|
|
7988
|
+
// the API-key check BEFORE claiming its run (the analytics durable
|
|
7989
|
+
// worker's "stalls at post_model, never claims" bug).
|
|
7990
|
+
const invoke = () => invokeAgentChatHandler(event);
|
|
7991
|
+
return await (backgroundOwner
|
|
7992
|
+
? runWithRequestContext({ userEmail: backgroundOwner }, invoke)
|
|
7993
|
+
: invoke());
|
|
7942
7994
|
} catch (err: any) {
|
|
7943
7995
|
console.error("[agent-chat] _process-run failed:", err);
|
|
7944
7996
|
// DIAGNOSTIC: the worker invocation threw at the route boundary —
|
|
@@ -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.",
|