@object-ui/i18n 11.5.0 → 13.2.0
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/CHANGELOG.md +69 -0
- package/dist/locales/ar.d.ts +41 -0
- package/dist/locales/ar.js +41 -0
- package/dist/locales/de.d.ts +41 -0
- package/dist/locales/de.js +41 -0
- package/dist/locales/en.d.ts +76 -0
- package/dist/locales/en.js +80 -0
- package/dist/locales/es.d.ts +41 -0
- package/dist/locales/es.js +41 -0
- package/dist/locales/fr.d.ts +41 -0
- package/dist/locales/fr.js +41 -0
- package/dist/locales/index.d.ts +480 -0
- package/dist/locales/ja.d.ts +41 -0
- package/dist/locales/ja.js +41 -0
- package/dist/locales/ko.d.ts +41 -0
- package/dist/locales/ko.js +41 -0
- package/dist/locales/pt.d.ts +41 -0
- package/dist/locales/pt.js +41 -0
- package/dist/locales/ru.d.ts +41 -0
- package/dist/locales/ru.js +41 -0
- package/dist/locales/zh.d.ts +76 -0
- package/dist/locales/zh.js +79 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,74 @@
|
|
|
1
1
|
# @object-ui/i18n
|
|
2
2
|
|
|
3
|
+
## 13.2.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 53c40c2: feat: identity import — the stock ImportWizard now drives sys_user bulk import (framework#2782)
|
|
8
|
+
|
|
9
|
+
The Users list gets an Import entry for platform admins (gated on
|
|
10
|
+
`features.admin` from `/api/v1/auth/config` plus workspace-admin), wired to
|
|
11
|
+
the dedicated `POST /api/v1/auth/admin/import-users` pipeline instead of the
|
|
12
|
+
generic data import (which would bypass better-auth hashing and produce
|
|
13
|
+
accounts that can never sign in).
|
|
14
|
+
|
|
15
|
+
- **plugin-grid**: two generic, backend-agnostic ImportWizard slots —
|
|
16
|
+
`extraOptionsContent` (host-injected options on the preview step) and
|
|
17
|
+
`renderResultExtra` (host-rendered content on the result step).
|
|
18
|
+
- **app-shell**: identity import dataSource adapter — splits files into the
|
|
19
|
+
endpoint's ≤500-row batches (idempotent upsert makes re-runs safe), injects
|
|
20
|
+
the selected password policy, renumbers per-batch results onto the whole
|
|
21
|
+
file, and enriches rows with their sign-in identity. Password policy panel
|
|
22
|
+
(`none` default / `invite` / `temporary`) and a one-shot temporary-password
|
|
23
|
+
reveal with CSV download (client memory only — nothing is persisted).
|
|
24
|
+
Async-job/undo surfaces are hidden for identity import by design.
|
|
25
|
+
- **auth**: `AuthPublicConfig.features.admin` typing.
|
|
26
|
+
- **i18n**: en/zh strings for the identity import panels.
|
|
27
|
+
|
|
28
|
+
## 13.1.0
|
|
29
|
+
|
|
30
|
+
## 13.0.0
|
|
31
|
+
|
|
32
|
+
### Minor Changes
|
|
33
|
+
|
|
34
|
+
- 9e38270: feat(setup): "Connect an agent" page widget (`mcp:connect-agent`) — framework#2714 Phase 1, #2363
|
|
35
|
+
|
|
36
|
+
The interactive body for the plugin-carried Setup page shipped by
|
|
37
|
+
`@objectstack/mcp`: the environment's MCP URL (from `/discovery`), per-client
|
|
38
|
+
connect cards (claude.ai/Desktop, Claude Code incl. the official plugin,
|
|
39
|
+
Cursor one-click deeplink, VS Code, Codex CLI), the SKILL.md download
|
|
40
|
+
(`GET /api/v1/mcp/skill`), and show-once API-key minting for headless
|
|
41
|
+
callers via the existing `POST /api/v1/keys`. Renders a disabled empty state
|
|
42
|
+
when discovery doesn't advertise `routes.mcp` (deployment opted out).
|
|
43
|
+
Translations for all nine locales.
|
|
44
|
+
|
|
45
|
+
## 12.1.0
|
|
46
|
+
|
|
47
|
+
### Minor Changes
|
|
48
|
+
|
|
49
|
+
- e1840bf: Signal the platform's preview stage in the UI.
|
|
50
|
+
|
|
51
|
+
The console top bar (`AppHeader`) now shows a small **Preview** chip next to the
|
|
52
|
+
product wordmark on every surface (home / app / orgs), so users always know the
|
|
53
|
+
whole platform is pre-GA. It's a new `PreviewBadge` component driven by a
|
|
54
|
+
`branding.stage` field in runtime-config (`'preview' | 'beta' | 'ga'`, exposed
|
|
55
|
+
via `getPlatformStage()`), which defaults to `'preview'` so the badge shows out
|
|
56
|
+
of the box. Operators flip the stage to `'ga'` at launch (`OS_PRODUCT_STAGE` /
|
|
57
|
+
`RuntimeConfigPlugin`) and the badge disappears with no code change; `'beta'`
|
|
58
|
+
renders a "Beta" chip instead. Labels are localized under `topbar.stage.*`.
|
|
59
|
+
|
|
60
|
+
### Patch Changes
|
|
61
|
+
|
|
62
|
+
- 6cbccf3: Localize form validation messages, toast client-side validation failures, and make native date/time picker icons legible in dark mode.
|
|
63
|
+
|
|
64
|
+
Record-form validation messages (required, min/max length, min/max value, pattern, email, URL) were hard-coded English even when the field label was localized — e.g. a Chinese "计划开始日期" field showed "计划开始日期 is required". `buildValidationRules` baked English strings, so the form renderer's `t(...)` fallback never applied. It now emits `required: true` and, for the other rules, a `messageKey` + `undefined` message (a field-authored `*_message` still wins and passes through verbatim); the form renderer fills the blanks via i18n (`validation.*` keys already exist in every locale), so messages track the label's language.
|
|
65
|
+
|
|
66
|
+
When client-side validation blocks a submit, the offending field's inline error can sit below the fold in a long modal/drawer form — the user clicks 创建 and sees nothing happen. The form renderer now also fires a `toast.error` naming the fields (`validation.formInvalid`, added to all 10 locales), mirroring the existing server-error toast so the feedback is visible regardless of scroll position.
|
|
67
|
+
|
|
68
|
+
Separately, native controls now declare `color-scheme` (`light` on `:root`, `dark` on `.dark`), so the webkit calendar-picker-indicator and other built-in glyphs render light-on-dark instead of vanishing against the dark input background.
|
|
69
|
+
|
|
70
|
+
## 12.0.0
|
|
71
|
+
|
|
3
72
|
## 11.5.0
|
|
4
73
|
|
|
5
74
|
### Minor Changes
|
package/dist/locales/ar.d.ts
CHANGED
|
@@ -80,6 +80,7 @@ declare const ar: {
|
|
|
80
80
|
email: string;
|
|
81
81
|
url: string;
|
|
82
82
|
pattern: string;
|
|
83
|
+
formInvalid: string;
|
|
83
84
|
unique: string;
|
|
84
85
|
type: string;
|
|
85
86
|
};
|
|
@@ -1700,6 +1701,46 @@ declare const ar: {
|
|
|
1700
1701
|
};
|
|
1701
1702
|
};
|
|
1702
1703
|
};
|
|
1704
|
+
connectAgent: {
|
|
1705
|
+
disabled: {
|
|
1706
|
+
title: string;
|
|
1707
|
+
body: string;
|
|
1708
|
+
};
|
|
1709
|
+
url: {
|
|
1710
|
+
title: string;
|
|
1711
|
+
body: string;
|
|
1712
|
+
downloadSkill: string;
|
|
1713
|
+
skillHint: string;
|
|
1714
|
+
};
|
|
1715
|
+
claude: {
|
|
1716
|
+
body: string;
|
|
1717
|
+
reachability: string;
|
|
1718
|
+
};
|
|
1719
|
+
claudeCode: {
|
|
1720
|
+
body: string;
|
|
1721
|
+
plugin: string;
|
|
1722
|
+
};
|
|
1723
|
+
cursor: {
|
|
1724
|
+
addButton: string;
|
|
1725
|
+
body: string;
|
|
1726
|
+
};
|
|
1727
|
+
vscode: {
|
|
1728
|
+
body: string;
|
|
1729
|
+
};
|
|
1730
|
+
codex: {
|
|
1731
|
+
body: string;
|
|
1732
|
+
};
|
|
1733
|
+
apiKey: {
|
|
1734
|
+
title: string;
|
|
1735
|
+
badge: string;
|
|
1736
|
+
body: string;
|
|
1737
|
+
namePlaceholder: string;
|
|
1738
|
+
mint: string;
|
|
1739
|
+
minting: string;
|
|
1740
|
+
showOnce: string;
|
|
1741
|
+
done: string;
|
|
1742
|
+
};
|
|
1743
|
+
};
|
|
1703
1744
|
marketplace: {
|
|
1704
1745
|
title: string;
|
|
1705
1746
|
subtitle: string;
|
package/dist/locales/ar.js
CHANGED
|
@@ -80,6 +80,7 @@ const ar = {
|
|
|
80
80
|
email: "يرجى إدخال بريد إلكتروني صالح",
|
|
81
81
|
url: "يرجى إدخال رابط صالح",
|
|
82
82
|
pattern: "صيغة {{field}} غير صالحة",
|
|
83
|
+
formInvalid: "يرجى التحقق من الحقول المميزة: {{fields}}",
|
|
83
84
|
unique: "{{field}} يجب أن يكون فريداً",
|
|
84
85
|
type: "{{field}} يجب أن يكون {{type}} صالحاً",
|
|
85
86
|
},
|
|
@@ -1700,6 +1701,46 @@ const ar = {
|
|
|
1700
1701
|
},
|
|
1701
1702
|
},
|
|
1702
1703
|
},
|
|
1704
|
+
connectAgent: {
|
|
1705
|
+
disabled: {
|
|
1706
|
+
title: 'MCP معطّل في هذا النشر',
|
|
1707
|
+
body: 'واجهة MCP متوقفة (OS_MCP_SERVER_ENABLED=false). اطلب من المشغّل إعادة تفعيلها.',
|
|
1708
|
+
},
|
|
1709
|
+
url: {
|
|
1710
|
+
title: 'نقطة نهاية MCP لهذه البيئة',
|
|
1711
|
+
body: 'أي عميل ذكاء اصطناعي يدعم MCP يتصل عبر هذا العنوان. الهوية ذاتية الخدمة: النشر هو خادم تفويض OAuth 2.1 الخاص به — تسجّل الدخول بهويتك، وكل استدعاء يخضع لصلاحياتك وأمان مستوى الصفوف.',
|
|
1712
|
+
downloadSkill: 'تنزيل SKILL.md',
|
|
1713
|
+
skillHint: 'مهارة الوكيل المحمولة: تعلّم أي وكيل داعم للمهارات كيفية العمل مع هذه البيئة.',
|
|
1714
|
+
},
|
|
1715
|
+
claude: {
|
|
1716
|
+
body: 'الإعدادات ← الموصلات ← إضافة موصل مخصص، الصق هذا العنوان وسجّل الدخول عبر المتصفح.',
|
|
1717
|
+
reachability: 'يتصل claude.ai (الويب) من خوادم Anthropic — يجب أن يكون النشر متاحًا عبر HTTPS عام. عملاء سطح المكتب والمحليون يصلون أيضًا إلى نشر الشبكات الداخلية.',
|
|
1718
|
+
},
|
|
1719
|
+
claudeCode: {
|
|
1720
|
+
body: 'أمر واحد — يفتح تسجيل دخول OAuth تلقائيًا عند أول استخدام:',
|
|
1721
|
+
plugin: 'أو ثبّت الإضافة الرسمية (تضيف مهارة ObjectStack وأمر /objectstack:connect الموجَّه):',
|
|
1722
|
+
},
|
|
1723
|
+
cursor: {
|
|
1724
|
+
addButton: 'أضِف إلى Cursor',
|
|
1725
|
+
body: 'استخدم زر النقرة الواحدة، أو أضف ما يلي إلى .cursor/mcp.json:',
|
|
1726
|
+
},
|
|
1727
|
+
vscode: {
|
|
1728
|
+
body: 'أضِف إلى .vscode/mcp.json (أو عبر أمر MCP: Add Server):',
|
|
1729
|
+
},
|
|
1730
|
+
codex: {
|
|
1731
|
+
body: 'أضِف إلى ~/.codex/config.toml. إذا كانت نسخة Codex لديك لا تدعم تدفق OAuth، فاستخدم ترويسة مفتاح API (انظر أدناه):',
|
|
1732
|
+
},
|
|
1733
|
+
apiKey: {
|
|
1734
|
+
title: 'مفاتيح API',
|
|
1735
|
+
badge: 'بدون واجهة',
|
|
1736
|
+
body: 'للتكامل المستمر والسكربتات والوكلاء بلا متصفح. المفتاح يتصرف بهويتك — تعامل معه ككلمة مرور. يُعرض مرة واحدة فقط.',
|
|
1737
|
+
namePlaceholder: 'اسم المفتاح (مثل ci-agent)',
|
|
1738
|
+
mint: 'إنشاء مفتاح',
|
|
1739
|
+
minting: 'جارٍ الإنشاء…',
|
|
1740
|
+
showOnce: 'أُنشئ المفتاح «{{name}}» — انسخه الآن، لن يُعرض مجددًا:',
|
|
1741
|
+
done: 'تم — إخفاء',
|
|
1742
|
+
},
|
|
1743
|
+
},
|
|
1703
1744
|
marketplace: {
|
|
1704
1745
|
title: "سوق التطبيقات",
|
|
1705
1746
|
subtitle: "استعرض التطبيقات المعتمدة المنشورة في كتالوج ObjectStack. انقر على تطبيق لرؤية التفاصيل وتثبيته في أحد بيئاتك.",
|
package/dist/locales/de.d.ts
CHANGED
|
@@ -80,6 +80,7 @@ declare const de: {
|
|
|
80
80
|
email: string;
|
|
81
81
|
url: string;
|
|
82
82
|
pattern: string;
|
|
83
|
+
formInvalid: string;
|
|
83
84
|
unique: string;
|
|
84
85
|
type: string;
|
|
85
86
|
};
|
|
@@ -1700,6 +1701,46 @@ declare const de: {
|
|
|
1700
1701
|
};
|
|
1701
1702
|
};
|
|
1702
1703
|
};
|
|
1704
|
+
connectAgent: {
|
|
1705
|
+
disabled: {
|
|
1706
|
+
title: string;
|
|
1707
|
+
body: string;
|
|
1708
|
+
};
|
|
1709
|
+
url: {
|
|
1710
|
+
title: string;
|
|
1711
|
+
body: string;
|
|
1712
|
+
downloadSkill: string;
|
|
1713
|
+
skillHint: string;
|
|
1714
|
+
};
|
|
1715
|
+
claude: {
|
|
1716
|
+
body: string;
|
|
1717
|
+
reachability: string;
|
|
1718
|
+
};
|
|
1719
|
+
claudeCode: {
|
|
1720
|
+
body: string;
|
|
1721
|
+
plugin: string;
|
|
1722
|
+
};
|
|
1723
|
+
cursor: {
|
|
1724
|
+
addButton: string;
|
|
1725
|
+
body: string;
|
|
1726
|
+
};
|
|
1727
|
+
vscode: {
|
|
1728
|
+
body: string;
|
|
1729
|
+
};
|
|
1730
|
+
codex: {
|
|
1731
|
+
body: string;
|
|
1732
|
+
};
|
|
1733
|
+
apiKey: {
|
|
1734
|
+
title: string;
|
|
1735
|
+
badge: string;
|
|
1736
|
+
body: string;
|
|
1737
|
+
namePlaceholder: string;
|
|
1738
|
+
mint: string;
|
|
1739
|
+
minting: string;
|
|
1740
|
+
showOnce: string;
|
|
1741
|
+
done: string;
|
|
1742
|
+
};
|
|
1743
|
+
};
|
|
1703
1744
|
marketplace: {
|
|
1704
1745
|
title: string;
|
|
1705
1746
|
subtitle: string;
|
package/dist/locales/de.js
CHANGED
|
@@ -80,6 +80,7 @@ const de = {
|
|
|
80
80
|
email: "Bitte geben Sie eine gültige E-Mail-Adresse ein",
|
|
81
81
|
url: "Bitte geben Sie eine gültige URL ein",
|
|
82
82
|
pattern: "{{field}} hat ein ungültiges Format",
|
|
83
|
+
formInvalid: "Bitte überprüfen Sie die markierten Felder: {{fields}}",
|
|
83
84
|
unique: "{{field}} muss eindeutig sein",
|
|
84
85
|
type: "{{field}} muss ein gültiger {{type}} sein",
|
|
85
86
|
},
|
|
@@ -1700,6 +1701,46 @@ const de = {
|
|
|
1700
1701
|
},
|
|
1701
1702
|
},
|
|
1702
1703
|
},
|
|
1704
|
+
connectAgent: {
|
|
1705
|
+
disabled: {
|
|
1706
|
+
title: 'MCP ist auf dieser Bereitstellung deaktiviert',
|
|
1707
|
+
body: 'Die MCP-Schnittstelle ist ausgeschaltet (OS_MCP_SERVER_ENABLED=false). Bitten Sie Ihren Betreiber, sie wieder zu aktivieren.',
|
|
1708
|
+
},
|
|
1709
|
+
url: {
|
|
1710
|
+
title: 'MCP-Endpunkt dieser Umgebung',
|
|
1711
|
+
body: 'Jeder MCP-fähige KI-Client verbindet sich über diese URL. Die Identität ist Self-Service: Die Bereitstellung ist ihr eigener OAuth-2.1-Autorisierungsserver — Sie melden sich als Sie selbst an, und jeder Aufruf unterliegt Ihren Berechtigungen und der Zeilensicherheit.',
|
|
1712
|
+
downloadSkill: 'SKILL.md herunterladen',
|
|
1713
|
+
skillHint: 'Die portable Agenten-Skill-Datei: erklärt jedem skill-fähigen Agenten die Arbeit mit dieser Umgebung.',
|
|
1714
|
+
},
|
|
1715
|
+
claude: {
|
|
1716
|
+
body: 'Einstellungen → Connectors → Benutzerdefinierten Connector hinzufügen, dann diese URL einfügen und im Browser anmelden.',
|
|
1717
|
+
reachability: 'claude.ai (Web) verbindet sich von Anthropic-Servern — die Bereitstellung muss über öffentliches HTTPS erreichbar sein. Claude Desktop und lokale Clients erreichen auch Intranet-Bereitstellungen.',
|
|
1718
|
+
},
|
|
1719
|
+
claudeCode: {
|
|
1720
|
+
body: 'Ein Befehl — die OAuth-Anmeldung öffnet sich bei der ersten Nutzung automatisch:',
|
|
1721
|
+
plugin: 'Oder das offizielle Plugin installieren (mit ObjectStack-Skill und geführtem /objectstack:connect):',
|
|
1722
|
+
},
|
|
1723
|
+
cursor: {
|
|
1724
|
+
addButton: 'Zu Cursor hinzufügen',
|
|
1725
|
+
body: 'Ein-Klick-Button verwenden oder Folgendes in .cursor/mcp.json eintragen:',
|
|
1726
|
+
},
|
|
1727
|
+
vscode: {
|
|
1728
|
+
body: 'In .vscode/mcp.json eintragen (oder über den Befehl „MCP: Add Server“):',
|
|
1729
|
+
},
|
|
1730
|
+
codex: {
|
|
1731
|
+
body: 'In ~/.codex/config.toml eintragen. Falls Ihre Codex-Version den OAuth-Flow nicht unterstützt, stattdessen einen API-Schlüssel-Header verwenden (siehe unten):',
|
|
1732
|
+
},
|
|
1733
|
+
apiKey: {
|
|
1734
|
+
title: 'API-Schlüssel',
|
|
1735
|
+
badge: 'headless',
|
|
1736
|
+
body: 'Für CI, Skripte und Agenten ohne Browser. Der Schlüssel handelt als Sie — wie ein Passwort behandeln. Er wird nur EINMAL angezeigt.',
|
|
1737
|
+
namePlaceholder: 'Schlüsselname (z. B. ci-agent)',
|
|
1738
|
+
mint: 'Schlüssel erstellen',
|
|
1739
|
+
minting: 'Wird erstellt…',
|
|
1740
|
+
showOnce: 'Schlüssel „{{name}}“ erstellt — jetzt kopieren, er wird nicht erneut angezeigt:',
|
|
1741
|
+
done: 'Fertig — ausblenden',
|
|
1742
|
+
},
|
|
1743
|
+
},
|
|
1703
1744
|
marketplace: {
|
|
1704
1745
|
title: "App-Marktplatz",
|
|
1705
1746
|
subtitle: "Durchsuchen Sie genehmigte Apps, die im ObjectStack-Katalog veröffentlicht wurden. Klicken Sie auf eine App, um Details zu sehen und sie in eine Ihrer Umgebungen zu installieren.",
|
package/dist/locales/en.d.ts
CHANGED
|
@@ -83,6 +83,7 @@ declare const en: {
|
|
|
83
83
|
readonly email: "Please enter a valid email address";
|
|
84
84
|
readonly url: "Please enter a valid URL";
|
|
85
85
|
readonly pattern: "{{field}} format is invalid";
|
|
86
|
+
readonly formInvalid: "Please check the highlighted fields: {{fields}}";
|
|
86
87
|
readonly unique: "{{field}} must be unique";
|
|
87
88
|
readonly type: "{{field}} must be a valid {{type}}";
|
|
88
89
|
};
|
|
@@ -329,6 +330,10 @@ declare const en: {
|
|
|
329
330
|
readonly title: "No users yet";
|
|
330
331
|
readonly message: "User accounts are provisioned by the authentication provider, not created here. Invite teammates to your organization and they appear automatically on first sign-in (SSO just-in-time provisioning). App end-users arrive when they sign up through your app.";
|
|
331
332
|
};
|
|
333
|
+
readonly betterAuthTeam: {
|
|
334
|
+
readonly title: "No teams yet";
|
|
335
|
+
readonly message: "Teams group members within an organization. Create one with “Create Team”, or they arrive through your auth provider’s organization and SSO provisioning flows.";
|
|
336
|
+
};
|
|
332
337
|
};
|
|
333
338
|
readonly showAll: "Show all";
|
|
334
339
|
readonly pullToRefresh: "Pull to refresh";
|
|
@@ -481,6 +486,7 @@ declare const en: {
|
|
|
481
486
|
readonly saveChanges: "Save changes";
|
|
482
487
|
readonly saving: "Saving…";
|
|
483
488
|
readonly editFieldsInline: "Edit fields";
|
|
489
|
+
readonly editInlineHint: "Double-click to edit";
|
|
484
490
|
readonly lockedByApproval: "Locked for approval";
|
|
485
491
|
readonly lockedTooltip: "This record has a pending approval request; editing is locked";
|
|
486
492
|
readonly cancelApproval: "Recall approval";
|
|
@@ -1257,6 +1263,22 @@ declare const en: {
|
|
|
1257
1263
|
readonly noAccessTitle: "Access denied";
|
|
1258
1264
|
readonly noAccess: "You do not have permission to view this data.";
|
|
1259
1265
|
};
|
|
1266
|
+
readonly identityImport: {
|
|
1267
|
+
readonly policyTitle: "Sign-in setup for imported users";
|
|
1268
|
+
readonly policy: {
|
|
1269
|
+
readonly none: "No password (recommended)";
|
|
1270
|
+
readonly invite: "Send invitations";
|
|
1271
|
+
readonly temporary: "Temporary passwords";
|
|
1272
|
+
};
|
|
1273
|
+
readonly policyHint: {
|
|
1274
|
+
readonly none: "Users first sign in with a phone OTP, magic link, or password-reset link, then set their own password.";
|
|
1275
|
+
readonly invite: "Each created user gets a set-your-password email (or an invitation SMS for phone-only rows). Requires a configured email/SMS service.";
|
|
1276
|
+
readonly temporary: "For deployments without email/SMS: each created user gets a one-time password, shown ONCE on the result screen. First sign-in forces a change.";
|
|
1277
|
+
};
|
|
1278
|
+
readonly passwordsNote: "Temporary passwords — shown once, never stored. Save them now; each user must change theirs at first sign-in.";
|
|
1279
|
+
readonly passwordsMore: "More entries omitted — use the download.";
|
|
1280
|
+
readonly passwordsDownload: "Download CSV";
|
|
1281
|
+
};
|
|
1260
1282
|
readonly objectView: {
|
|
1261
1283
|
readonly objectNotFound: "Object Not Found";
|
|
1262
1284
|
readonly objectNotFoundDescription: "The object \"{{objectName}}\" does not exist in the current configuration.";
|
|
@@ -1673,6 +1695,11 @@ declare const en: {
|
|
|
1673
1695
|
readonly disconnected: "Disconnected";
|
|
1674
1696
|
readonly error: "Connection Error";
|
|
1675
1697
|
};
|
|
1698
|
+
readonly stage: {
|
|
1699
|
+
readonly preview: "Preview";
|
|
1700
|
+
readonly beta: "Beta";
|
|
1701
|
+
readonly tooltip: "This platform is in preview — features may change.";
|
|
1702
|
+
};
|
|
1676
1703
|
};
|
|
1677
1704
|
readonly home: {
|
|
1678
1705
|
readonly title: "Home";
|
|
@@ -2052,6 +2079,46 @@ declare const en: {
|
|
|
2052
2079
|
};
|
|
2053
2080
|
};
|
|
2054
2081
|
};
|
|
2082
|
+
readonly connectAgent: {
|
|
2083
|
+
readonly disabled: {
|
|
2084
|
+
readonly title: "MCP is disabled on this deployment";
|
|
2085
|
+
readonly body: "The MCP surface is off (OS_MCP_SERVER_ENABLED=false), so there is nothing to connect. Ask your operator to re-enable it.";
|
|
2086
|
+
};
|
|
2087
|
+
readonly url: {
|
|
2088
|
+
readonly title: "This environment's MCP endpoint";
|
|
2089
|
+
readonly body: "Any MCP-capable AI client connects with this URL. Identity is self-serve: the deployment is its own OAuth 2.1 authorization server, so interactive clients just open a browser login — you connect as yourself, and every call runs under your own permissions and row-level security.";
|
|
2090
|
+
readonly downloadSkill: "Download SKILL.md";
|
|
2091
|
+
readonly skillHint: "The portable agent skill: teaches any skills-capable agent how to work with this environment.";
|
|
2092
|
+
};
|
|
2093
|
+
readonly claude: {
|
|
2094
|
+
readonly body: "Settings → Connectors → Add custom connector, then paste this URL. Sign in through the browser when prompted.";
|
|
2095
|
+
readonly reachability: "claude.ai (web) connects from Anthropic's servers — the deployment must be reachable over public HTTPS. Claude Desktop and local clients also reach intranet deployments.";
|
|
2096
|
+
};
|
|
2097
|
+
readonly claudeCode: {
|
|
2098
|
+
readonly body: "One command — the OAuth login opens automatically on first use:";
|
|
2099
|
+
readonly plugin: "Or install the official plugin (adds the ObjectStack skill and a guided /objectstack:connect command):";
|
|
2100
|
+
};
|
|
2101
|
+
readonly cursor: {
|
|
2102
|
+
readonly addButton: "Add to Cursor";
|
|
2103
|
+
readonly body: "Use the one-click button, or add this to .cursor/mcp.json:";
|
|
2104
|
+
};
|
|
2105
|
+
readonly vscode: {
|
|
2106
|
+
readonly body: "Add to .vscode/mcp.json (or via the MCP: Add Server command):";
|
|
2107
|
+
};
|
|
2108
|
+
readonly codex: {
|
|
2109
|
+
readonly body: "Add to ~/.codex/config.toml. If your Codex version lacks the OAuth flow, use an API key header instead (see below):";
|
|
2110
|
+
};
|
|
2111
|
+
readonly apiKey: {
|
|
2112
|
+
readonly title: "API keys";
|
|
2113
|
+
readonly badge: "headless";
|
|
2114
|
+
readonly body: "For CI, scripts, and agents without a browser. The key acts as you — treat it like a password. It is shown ONCE.";
|
|
2115
|
+
readonly namePlaceholder: "Key name (e.g. ci-agent)";
|
|
2116
|
+
readonly mint: "Create key";
|
|
2117
|
+
readonly minting: "Creating…";
|
|
2118
|
+
readonly showOnce: "Key \"{{name}}\" created — copy it now, it will not be shown again:";
|
|
2119
|
+
readonly done: "Done — hide it";
|
|
2120
|
+
};
|
|
2121
|
+
};
|
|
2055
2122
|
readonly marketplace: {
|
|
2056
2123
|
readonly title: "App Marketplace";
|
|
2057
2124
|
readonly subtitle: "Browse approved apps published to the ObjectStack catalog. Click an app to view details and install it into one of your environments.";
|
|
@@ -2134,6 +2201,15 @@ declare const en: {
|
|
|
2134
2201
|
readonly localUnauthorized: "Sign in to this runtime first, then try again.";
|
|
2135
2202
|
readonly localMarketplaceUnavailable: "This runtime has no OS_CLOUD_URL configured, so the marketplace catalog is unreachable.";
|
|
2136
2203
|
};
|
|
2204
|
+
readonly suggestedBindings: {
|
|
2205
|
+
readonly promptEveryone: "This app suggests granting \"{{set}}\" to all signed-in users (the Everyone position).";
|
|
2206
|
+
readonly promptGuest: "This app suggests granting \"{{set}}\" to unauthenticated visitors (the Guest position).";
|
|
2207
|
+
readonly confirm: "Grant";
|
|
2208
|
+
readonly confirming: "Granting…";
|
|
2209
|
+
readonly dismiss: "Dismiss";
|
|
2210
|
+
readonly confirmedToast: "\"{{set}}\" is now granted to {{anchor}}.";
|
|
2211
|
+
readonly dismissedToast: "Suggestion for \"{{set}}\" dismissed.";
|
|
2212
|
+
};
|
|
2137
2213
|
readonly uninstall: {
|
|
2138
2214
|
readonly confirm: "Uninstall {{manifestId}} v{{version}} from this runtime?\n\nThe cached manifest will be removed. The app will remain loaded in the running kernel until the next restart.";
|
|
2139
2215
|
readonly successInList: "Removed {{manifestId}}. Restart the runtime to fully unload it from the running kernel.";
|
package/dist/locales/en.js
CHANGED
|
@@ -83,6 +83,7 @@ const en = {
|
|
|
83
83
|
email: 'Please enter a valid email address',
|
|
84
84
|
url: 'Please enter a valid URL',
|
|
85
85
|
pattern: '{{field}} format is invalid',
|
|
86
|
+
formInvalid: 'Please check the highlighted fields: {{fields}}',
|
|
86
87
|
unique: '{{field}} must be unique',
|
|
87
88
|
type: '{{field}} must be a valid {{type}}',
|
|
88
89
|
},
|
|
@@ -329,6 +330,10 @@ const en = {
|
|
|
329
330
|
title: 'No users yet',
|
|
330
331
|
message: 'User accounts are provisioned by the authentication provider, not created here. Invite teammates to your organization and they appear automatically on first sign-in (SSO just-in-time provisioning). App end-users arrive when they sign up through your app.',
|
|
331
332
|
},
|
|
333
|
+
betterAuthTeam: {
|
|
334
|
+
title: 'No teams yet',
|
|
335
|
+
message: 'Teams group members within an organization. Create one with “Create Team”, or they arrive through your auth provider’s organization and SSO provisioning flows.',
|
|
336
|
+
},
|
|
332
337
|
},
|
|
333
338
|
showAll: 'Show all',
|
|
334
339
|
pullToRefresh: 'Pull to refresh',
|
|
@@ -481,6 +486,7 @@ const en = {
|
|
|
481
486
|
saveChanges: 'Save changes',
|
|
482
487
|
saving: 'Saving…',
|
|
483
488
|
editFieldsInline: 'Edit fields',
|
|
489
|
+
editInlineHint: 'Double-click to edit',
|
|
484
490
|
lockedByApproval: 'Locked for approval',
|
|
485
491
|
lockedTooltip: 'This record has a pending approval request; editing is locked',
|
|
486
492
|
cancelApproval: 'Recall approval',
|
|
@@ -1273,6 +1279,22 @@ const en = {
|
|
|
1273
1279
|
noAccessTitle: 'Access denied',
|
|
1274
1280
|
noAccess: 'You do not have permission to view this data.',
|
|
1275
1281
|
},
|
|
1282
|
+
identityImport: {
|
|
1283
|
+
policyTitle: 'Sign-in setup for imported users',
|
|
1284
|
+
policy: {
|
|
1285
|
+
none: 'No password (recommended)',
|
|
1286
|
+
invite: 'Send invitations',
|
|
1287
|
+
temporary: 'Temporary passwords',
|
|
1288
|
+
},
|
|
1289
|
+
policyHint: {
|
|
1290
|
+
none: 'Users first sign in with a phone OTP, magic link, or password-reset link, then set their own password.',
|
|
1291
|
+
invite: 'Each created user gets a set-your-password email (or an invitation SMS for phone-only rows). Requires a configured email/SMS service.',
|
|
1292
|
+
temporary: 'For deployments without email/SMS: each created user gets a one-time password, shown ONCE on the result screen. First sign-in forces a change.',
|
|
1293
|
+
},
|
|
1294
|
+
passwordsNote: 'Temporary passwords — shown once, never stored. Save them now; each user must change theirs at first sign-in.',
|
|
1295
|
+
passwordsMore: 'More entries omitted — use the download.',
|
|
1296
|
+
passwordsDownload: 'Download CSV',
|
|
1297
|
+
},
|
|
1276
1298
|
objectView: {
|
|
1277
1299
|
objectNotFound: 'Object Not Found',
|
|
1278
1300
|
objectNotFoundDescription: 'The object "{{objectName}}" does not exist in the current configuration.',
|
|
@@ -1689,6 +1711,12 @@ const en = {
|
|
|
1689
1711
|
disconnected: 'Disconnected',
|
|
1690
1712
|
error: 'Connection Error',
|
|
1691
1713
|
},
|
|
1714
|
+
// Platform lifecycle chip shown next to the product wordmark (PreviewBadge).
|
|
1715
|
+
stage: {
|
|
1716
|
+
preview: 'Preview',
|
|
1717
|
+
beta: 'Beta',
|
|
1718
|
+
tooltip: 'This platform is in preview — features may change.',
|
|
1719
|
+
},
|
|
1692
1720
|
},
|
|
1693
1721
|
home: {
|
|
1694
1722
|
title: 'Home',
|
|
@@ -2071,6 +2099,46 @@ const en = {
|
|
|
2071
2099
|
},
|
|
2072
2100
|
},
|
|
2073
2101
|
},
|
|
2102
|
+
connectAgent: {
|
|
2103
|
+
disabled: {
|
|
2104
|
+
title: 'MCP is disabled on this deployment',
|
|
2105
|
+
body: 'The MCP surface is off (OS_MCP_SERVER_ENABLED=false), so there is nothing to connect. Ask your operator to re-enable it.',
|
|
2106
|
+
},
|
|
2107
|
+
url: {
|
|
2108
|
+
title: 'This environment\'s MCP endpoint',
|
|
2109
|
+
body: 'Any MCP-capable AI client connects with this URL. Identity is self-serve: the deployment is its own OAuth 2.1 authorization server, so interactive clients just open a browser login — you connect as yourself, and every call runs under your own permissions and row-level security.',
|
|
2110
|
+
downloadSkill: 'Download SKILL.md',
|
|
2111
|
+
skillHint: 'The portable agent skill: teaches any skills-capable agent how to work with this environment.',
|
|
2112
|
+
},
|
|
2113
|
+
claude: {
|
|
2114
|
+
body: 'Settings → Connectors → Add custom connector, then paste this URL. Sign in through the browser when prompted.',
|
|
2115
|
+
reachability: 'claude.ai (web) connects from Anthropic\'s servers — the deployment must be reachable over public HTTPS. Claude Desktop and local clients also reach intranet deployments.',
|
|
2116
|
+
},
|
|
2117
|
+
claudeCode: {
|
|
2118
|
+
body: 'One command — the OAuth login opens automatically on first use:',
|
|
2119
|
+
plugin: 'Or install the official plugin (adds the ObjectStack skill and a guided /objectstack:connect command):',
|
|
2120
|
+
},
|
|
2121
|
+
cursor: {
|
|
2122
|
+
addButton: 'Add to Cursor',
|
|
2123
|
+
body: 'Use the one-click button, or add this to .cursor/mcp.json:',
|
|
2124
|
+
},
|
|
2125
|
+
vscode: {
|
|
2126
|
+
body: 'Add to .vscode/mcp.json (or via the MCP: Add Server command):',
|
|
2127
|
+
},
|
|
2128
|
+
codex: {
|
|
2129
|
+
body: 'Add to ~/.codex/config.toml. If your Codex version lacks the OAuth flow, use an API key header instead (see below):',
|
|
2130
|
+
},
|
|
2131
|
+
apiKey: {
|
|
2132
|
+
title: 'API keys',
|
|
2133
|
+
badge: 'headless',
|
|
2134
|
+
body: 'For CI, scripts, and agents without a browser. The key acts as you — treat it like a password. It is shown ONCE.',
|
|
2135
|
+
namePlaceholder: 'Key name (e.g. ci-agent)',
|
|
2136
|
+
mint: 'Create key',
|
|
2137
|
+
minting: 'Creating…',
|
|
2138
|
+
showOnce: 'Key "{{name}}" created — copy it now, it will not be shown again:',
|
|
2139
|
+
done: 'Done — hide it',
|
|
2140
|
+
},
|
|
2141
|
+
},
|
|
2074
2142
|
marketplace: {
|
|
2075
2143
|
title: 'App Marketplace',
|
|
2076
2144
|
subtitle: 'Browse approved apps published to the ObjectStack catalog. Click an app to view details and install it into one of your environments.',
|
|
@@ -2153,6 +2221,18 @@ const en = {
|
|
|
2153
2221
|
localUnauthorized: 'Sign in to this runtime first, then try again.',
|
|
2154
2222
|
localMarketplaceUnavailable: 'This runtime has no OS_CLOUD_URL configured, so the marketplace catalog is unreachable.',
|
|
2155
2223
|
},
|
|
2224
|
+
// ADR-0090 D5/D9 — a package's isDefault permission set is an
|
|
2225
|
+
// install-time suggestion to bind it to the everyone/guest position;
|
|
2226
|
+
// the admin confirms here, the server never auto-binds.
|
|
2227
|
+
suggestedBindings: {
|
|
2228
|
+
promptEveryone: 'This app suggests granting "{{set}}" to all signed-in users (the Everyone position).',
|
|
2229
|
+
promptGuest: 'This app suggests granting "{{set}}" to unauthenticated visitors (the Guest position).',
|
|
2230
|
+
confirm: 'Grant',
|
|
2231
|
+
confirming: 'Granting…',
|
|
2232
|
+
dismiss: 'Dismiss',
|
|
2233
|
+
confirmedToast: '"{{set}}" is now granted to {{anchor}}.',
|
|
2234
|
+
dismissedToast: 'Suggestion for "{{set}}" dismissed.',
|
|
2235
|
+
},
|
|
2156
2236
|
uninstall: {
|
|
2157
2237
|
confirm: 'Uninstall {{manifestId}} v{{version}} from this runtime?\n\nThe cached manifest will be removed. The app will remain loaded in the running kernel until the next restart.',
|
|
2158
2238
|
successInList: 'Removed {{manifestId}}. Restart the runtime to fully unload it from the running kernel.',
|
package/dist/locales/es.d.ts
CHANGED
|
@@ -80,6 +80,7 @@ declare const es: {
|
|
|
80
80
|
email: string;
|
|
81
81
|
url: string;
|
|
82
82
|
pattern: string;
|
|
83
|
+
formInvalid: string;
|
|
83
84
|
unique: string;
|
|
84
85
|
type: string;
|
|
85
86
|
};
|
|
@@ -1700,6 +1701,46 @@ declare const es: {
|
|
|
1700
1701
|
};
|
|
1701
1702
|
};
|
|
1702
1703
|
};
|
|
1704
|
+
connectAgent: {
|
|
1705
|
+
disabled: {
|
|
1706
|
+
title: string;
|
|
1707
|
+
body: string;
|
|
1708
|
+
};
|
|
1709
|
+
url: {
|
|
1710
|
+
title: string;
|
|
1711
|
+
body: string;
|
|
1712
|
+
downloadSkill: string;
|
|
1713
|
+
skillHint: string;
|
|
1714
|
+
};
|
|
1715
|
+
claude: {
|
|
1716
|
+
body: string;
|
|
1717
|
+
reachability: string;
|
|
1718
|
+
};
|
|
1719
|
+
claudeCode: {
|
|
1720
|
+
body: string;
|
|
1721
|
+
plugin: string;
|
|
1722
|
+
};
|
|
1723
|
+
cursor: {
|
|
1724
|
+
addButton: string;
|
|
1725
|
+
body: string;
|
|
1726
|
+
};
|
|
1727
|
+
vscode: {
|
|
1728
|
+
body: string;
|
|
1729
|
+
};
|
|
1730
|
+
codex: {
|
|
1731
|
+
body: string;
|
|
1732
|
+
};
|
|
1733
|
+
apiKey: {
|
|
1734
|
+
title: string;
|
|
1735
|
+
badge: string;
|
|
1736
|
+
body: string;
|
|
1737
|
+
namePlaceholder: string;
|
|
1738
|
+
mint: string;
|
|
1739
|
+
minting: string;
|
|
1740
|
+
showOnce: string;
|
|
1741
|
+
done: string;
|
|
1742
|
+
};
|
|
1743
|
+
};
|
|
1703
1744
|
marketplace: {
|
|
1704
1745
|
title: string;
|
|
1705
1746
|
subtitle: string;
|
package/dist/locales/es.js
CHANGED
|
@@ -80,6 +80,7 @@ const es = {
|
|
|
80
80
|
email: "Por favor, introduzca un correo electrónico válido",
|
|
81
81
|
url: "Por favor, introduzca una URL válida",
|
|
82
82
|
pattern: "El formato de {{field}} no es válido",
|
|
83
|
+
formInvalid: "Por favor, revise los campos resaltados: {{fields}}",
|
|
83
84
|
unique: "{{field}} debe ser único",
|
|
84
85
|
type: "{{field}} debe ser un {{type}} válido",
|
|
85
86
|
},
|
|
@@ -1700,6 +1701,46 @@ const es = {
|
|
|
1700
1701
|
},
|
|
1701
1702
|
},
|
|
1702
1703
|
},
|
|
1704
|
+
connectAgent: {
|
|
1705
|
+
disabled: {
|
|
1706
|
+
title: 'MCP está deshabilitado en esta implementación',
|
|
1707
|
+
body: 'La superficie MCP está apagada (OS_MCP_SERVER_ENABLED=false). Pida a su operador que la vuelva a habilitar.',
|
|
1708
|
+
},
|
|
1709
|
+
url: {
|
|
1710
|
+
title: 'Endpoint MCP de este entorno',
|
|
1711
|
+
body: 'Cualquier cliente de IA compatible con MCP se conecta con esta URL. La identidad es autoservicio: la implementación es su propio servidor de autorización OAuth 2.1 — inicia sesión como usted mismo y cada llamada corre bajo sus permisos y seguridad a nivel de fila.',
|
|
1712
|
+
downloadSkill: 'Descargar SKILL.md',
|
|
1713
|
+
skillHint: 'La skill portátil del agente: enseña a cualquier agente compatible cómo trabajar con este entorno.',
|
|
1714
|
+
},
|
|
1715
|
+
claude: {
|
|
1716
|
+
body: 'Configuración → Conectores → Añadir conector personalizado, pegue esta URL e inicie sesión en el navegador.',
|
|
1717
|
+
reachability: 'claude.ai (web) se conecta desde los servidores de Anthropic — la implementación debe ser accesible por HTTPS público. Claude Desktop y los clientes locales también alcanzan implementaciones de intranet.',
|
|
1718
|
+
},
|
|
1719
|
+
claudeCode: {
|
|
1720
|
+
body: 'Un comando — el inicio de sesión OAuth se abre automáticamente en el primer uso:',
|
|
1721
|
+
plugin: 'O instale el plugin oficial (añade la skill de ObjectStack y el comando guiado /objectstack:connect):',
|
|
1722
|
+
},
|
|
1723
|
+
cursor: {
|
|
1724
|
+
addButton: 'Añadir a Cursor',
|
|
1725
|
+
body: 'Use el botón de un clic o añada esto a .cursor/mcp.json:',
|
|
1726
|
+
},
|
|
1727
|
+
vscode: {
|
|
1728
|
+
body: 'Añadir a .vscode/mcp.json (o mediante el comando MCP: Add Server):',
|
|
1729
|
+
},
|
|
1730
|
+
codex: {
|
|
1731
|
+
body: 'Añadir a ~/.codex/config.toml. Si su versión de Codex no admite el flujo OAuth, use una cabecera de clave API (ver abajo):',
|
|
1732
|
+
},
|
|
1733
|
+
apiKey: {
|
|
1734
|
+
title: 'Claves API',
|
|
1735
|
+
badge: 'headless',
|
|
1736
|
+
body: 'Para CI, scripts y agentes sin navegador. La clave actúa como usted — trátela como una contraseña. Se muestra UNA sola vez.',
|
|
1737
|
+
namePlaceholder: 'Nombre de la clave (p. ej. ci-agent)',
|
|
1738
|
+
mint: 'Crear clave',
|
|
1739
|
+
minting: 'Creando…',
|
|
1740
|
+
showOnce: 'Clave «{{name}}» creada — cópiela ahora, no se volverá a mostrar:',
|
|
1741
|
+
done: 'Listo — ocultar',
|
|
1742
|
+
},
|
|
1743
|
+
},
|
|
1703
1744
|
marketplace: {
|
|
1704
1745
|
title: "Marketplace de aplicaciones",
|
|
1705
1746
|
subtitle: "Explore aplicaciones aprobadas publicadas en el catálogo de ObjectStack. Haga clic en una aplicación para ver detalles e instalarla en uno de sus entornos.",
|