@objectstack/service-settings 8.0.1 → 9.0.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/dist/index.d.cts CHANGED
@@ -206,8 +206,8 @@ interface SettingsServiceOptions {
206
206
  objectName?: string;
207
207
  }
208
208
  /**
209
- * Convert `(namespace, key)` to the env var convention defined in
210
- * ADR-0007: uppercase, dots → underscores, hyphens → underscores.
209
+ * Convert `(namespace, key)` to the ObjectStack-owned env var convention:
210
+ * `OS_` prefix, uppercase, dots → underscores, hyphens → underscores.
211
211
  */
212
212
  declare function envKeyOf(namespace: string, key: string): string;
213
213
  /** Thrown when a caller tries to write a value pinned by env. */
package/dist/index.d.ts CHANGED
@@ -206,8 +206,8 @@ interface SettingsServiceOptions {
206
206
  objectName?: string;
207
207
  }
208
208
  /**
209
- * Convert `(namespace, key)` to the env var convention defined in
210
- * ADR-0007: uppercase, dots → underscores, hyphens → underscores.
209
+ * Convert `(namespace, key)` to the ObjectStack-owned env var convention:
210
+ * `OS_` prefix, uppercase, dots → underscores, hyphens → underscores.
211
211
  */
212
212
  declare function envKeyOf(namespace: string, key: string): string;
213
213
  /** Thrown when a caller tries to write a value pinned by env. */
package/dist/index.js CHANGED
@@ -22,7 +22,7 @@ var NoopCryptoAdapter = class {
22
22
  // src/settings-service.types.ts
23
23
  function envKeyOf(namespace, key) {
24
24
  const slug = `${namespace}_${key}`.replace(/[.-]/g, "_").toUpperCase();
25
- return slug;
25
+ return `OS_${slug}`;
26
26
  }
27
27
  var SettingsLockedError = class extends Error {
28
28
  constructor(namespace, key, reason = "locked-by-env") {
@@ -150,20 +150,20 @@ var SettingsService = class {
150
150
  // Manifest registry
151
151
  // ---------------------------------------------------------------------
152
152
  /** Register (or replace) a manifest. Idempotent. */
153
- registerManifest(manifest5) {
153
+ registerManifest(manifest6) {
154
154
  const scopes = /* @__PURE__ */ new Map();
155
155
  const encryptedKeys = /* @__PURE__ */ new Set();
156
156
  const defaults = /* @__PURE__ */ new Map();
157
- const defaultScope = manifest5.scope ?? "tenant";
158
- for (const spec of manifest5.specifiers) {
157
+ const defaultScope = manifest6.scope ?? "tenant";
158
+ for (const spec of manifest6.specifiers) {
159
159
  if (!spec.key || LAYOUT_ONLY_TYPES.has(spec.type)) continue;
160
160
  scopes.set(spec.key, spec.scope ?? defaultScope);
161
161
  if (spec.encrypted || spec.type === "password") encryptedKeys.add(spec.key);
162
162
  if (typeof spec.default !== "undefined") defaults.set(spec.key, spec.default);
163
163
  }
164
- const prev = this.registry.get(manifest5.namespace);
164
+ const prev = this.registry.get(manifest6.namespace);
165
165
  const actions = prev?.actions ?? /* @__PURE__ */ new Map();
166
- this.registry.set(manifest5.namespace, { manifest: manifest5, scopes, encryptedKeys, defaults, actions });
166
+ this.registry.set(manifest6.namespace, { manifest: manifest6, scopes, encryptedKeys, defaults, actions });
167
167
  }
168
168
  /** Look up a manifest, or throw `UnknownNamespaceError`. */
169
169
  getManifest(namespace) {
@@ -890,11 +890,90 @@ var settingsPluginManifestHeader = {
890
890
  type: "plugin",
891
891
  scope: "system",
892
892
  name: "Settings Service",
893
- description: "Generic settings registry + K/V resolver with Env > Tenant > User > Default precedence. ADR-0007."
893
+ description: "Generic settings registry + K/V resolver with OS_* env > Tenant > User > Default precedence. ADR-0007."
894
894
  };
895
895
 
896
- // src/manifests/mail.manifest.ts
896
+ // src/manifests/auth.manifest.ts
897
897
  var manifest = {
898
+ namespace: "auth",
899
+ version: 1,
900
+ label: "Authentication",
901
+ icon: "LockKeyhole",
902
+ description: "Sign-in, registration, and built-in auth feature controls.",
903
+ scope: "global",
904
+ readPermission: "manage_platform_settings",
905
+ writePermission: "manage_platform_settings",
906
+ category: "Security",
907
+ order: 15,
908
+ specifiers: [
909
+ {
910
+ type: "group",
911
+ id: "email_password",
912
+ label: "Email and password",
913
+ required: false,
914
+ description: "Control local email/password sign-in and self-service registration."
915
+ },
916
+ {
917
+ type: "toggle",
918
+ key: "email_password_enabled",
919
+ label: "Enable email/password login",
920
+ required: false,
921
+ default: true
922
+ },
923
+ {
924
+ type: "toggle",
925
+ key: "signup_enabled",
926
+ label: "Allow self-service registration",
927
+ required: false,
928
+ default: true,
929
+ visible: "${data.email_password_enabled !== false}"
930
+ },
931
+ {
932
+ type: "toggle",
933
+ key: "require_email_verification",
934
+ label: "Require email verification",
935
+ required: false,
936
+ default: false,
937
+ visible: "${data.email_password_enabled !== false}"
938
+ },
939
+ {
940
+ type: "group",
941
+ id: "social",
942
+ label: "Social sign-in",
943
+ required: false,
944
+ description: "Configure the built-in Google sign-in provider. Deployment env vars still win."
945
+ },
946
+ {
947
+ type: "toggle",
948
+ key: "google_enabled",
949
+ label: "Enable Google login",
950
+ required: false,
951
+ default: true,
952
+ description: "Requires a Google OAuth client ID and secret from Google Cloud Console."
953
+ },
954
+ {
955
+ type: "text",
956
+ key: "google_client_id",
957
+ label: "Google client ID",
958
+ required: true,
959
+ description: "OAuth client ID from Google Cloud Console. GOOGLE_CLIENT_ID can also be set on the server.",
960
+ visible: "${data.google_enabled !== false}"
961
+ },
962
+ {
963
+ type: "password",
964
+ key: "google_client_secret",
965
+ label: "Google client secret",
966
+ required: true,
967
+ encrypted: true,
968
+ description: "Stored encrypted at rest. GOOGLE_CLIENT_SECRET can also be set on the server.",
969
+ visible: "${data.google_enabled !== false}"
970
+ }
971
+ ]
972
+ };
973
+ var authSettingsManifest = manifest;
974
+
975
+ // src/manifests/mail.manifest.ts
976
+ var manifest2 = {
898
977
  namespace: "mail",
899
978
  version: 1,
900
979
  label: "Mail Delivery",
@@ -995,7 +1074,7 @@ var manifest = {
995
1074
  }
996
1075
  ]
997
1076
  };
998
- var mailSettingsManifest = manifest;
1077
+ var mailSettingsManifest = manifest2;
999
1078
  var mailTestActionHandler = async ({ values }) => {
1000
1079
  const provider = String(values.provider ?? "smtp");
1001
1080
  const fromEmail = values.from_email;
@@ -1088,7 +1167,7 @@ var featureFlagsSettingsManifest = {
1088
1167
  id: "beta_notice",
1089
1168
  label: "Heads up",
1090
1169
  required: false,
1091
- bannerText: "Beta features may change without notice. Pin via env vars (e.g. `FEATURE_FLAGS_AI_ENABLED=true`) to lock for the whole deployment.",
1170
+ bannerText: "Beta features may change without notice. Pin via env vars (e.g. `OS_FEATURE_FLAGS_AI_ENABLED=true`) to lock for the whole deployment.",
1092
1171
  bannerSeverity: "warning"
1093
1172
  },
1094
1173
  { type: "group", id: "productivity", label: "Productivity", required: false },
@@ -1108,7 +1187,7 @@ var featureFlagsSettingsManifest = {
1108
1187
  };
1109
1188
 
1110
1189
  // src/manifests/storage.manifest.ts
1111
- var manifest2 = {
1190
+ var manifest3 = {
1112
1191
  namespace: "storage",
1113
1192
  version: 1,
1114
1193
  label: "File Storage",
@@ -1248,7 +1327,7 @@ var manifest2 = {
1248
1327
  }
1249
1328
  ]
1250
1329
  };
1251
- var storageSettingsManifest = manifest2;
1330
+ var storageSettingsManifest = manifest3;
1252
1331
  var storageTestActionHandler = async ({ values }) => {
1253
1332
  const adapter = String(values.adapter ?? "local");
1254
1333
  if (adapter === "local") {
@@ -1281,7 +1360,7 @@ var storageTestActionHandler = async ({ values }) => {
1281
1360
  };
1282
1361
 
1283
1362
  // src/manifests/ai.manifest.ts
1284
- var manifest3 = {
1363
+ var manifest4 = {
1285
1364
  namespace: "ai",
1286
1365
  version: 1,
1287
1366
  label: "AI",
@@ -1782,7 +1861,7 @@ var manifest3 = {
1782
1861
  }
1783
1862
  ]
1784
1863
  };
1785
- var aiSettingsManifest = manifest3;
1864
+ var aiSettingsManifest = manifest4;
1786
1865
  var aiTestActionHandler = async ({ values, payload }) => {
1787
1866
  const overrides = extractOverrides(payload);
1788
1867
  const merged = { ...values, ...overrides };
@@ -1841,7 +1920,7 @@ function extractOverrides(payload) {
1841
1920
  }
1842
1921
 
1843
1922
  // src/manifests/knowledge.manifest.ts
1844
- var manifest4 = {
1923
+ var manifest5 = {
1845
1924
  namespace: "knowledge",
1846
1925
  version: 1,
1847
1926
  label: "Knowledge",
@@ -1995,11 +2074,12 @@ var manifest4 = {
1995
2074
  }
1996
2075
  ]
1997
2076
  };
1998
- var knowledgeSettingsManifest = manifest4;
2077
+ var knowledgeSettingsManifest = manifest5;
1999
2078
 
2000
2079
  // src/manifests/index.ts
2001
2080
  var builtinSettingsManifests = [
2002
2081
  brandingSettingsManifest,
2082
+ authSettingsManifest,
2003
2083
  mailSettingsManifest,
2004
2084
  storageSettingsManifest,
2005
2085
  aiSettingsManifest,
@@ -2069,6 +2149,37 @@ var en = {
2069
2149
  logo_url: { label: "Logo URL", help: "Example: https://\u2026/logo.svg" }
2070
2150
  }
2071
2151
  },
2152
+ auth: {
2153
+ title: "Authentication",
2154
+ description: "Sign-in, registration, and built-in auth feature controls.",
2155
+ groups: {
2156
+ email_password: {
2157
+ title: "Email and password",
2158
+ description: "Control local email/password sign-in and self-service registration."
2159
+ },
2160
+ social: {
2161
+ title: "Social sign-in",
2162
+ description: "Configure the built-in Google sign-in provider. Deployment env vars still win."
2163
+ }
2164
+ },
2165
+ keys: {
2166
+ email_password_enabled: { label: "Enable email/password login" },
2167
+ signup_enabled: { label: "Allow self-service registration" },
2168
+ require_email_verification: { label: "Require email verification" },
2169
+ google_enabled: {
2170
+ label: "Enable Google login",
2171
+ help: "Requires a Google OAuth client ID and secret from Google Cloud Console."
2172
+ },
2173
+ google_client_id: {
2174
+ label: "Google client ID",
2175
+ help: "OAuth client ID from Google Cloud Console. GOOGLE_CLIENT_ID can also be set on the server."
2176
+ },
2177
+ google_client_secret: {
2178
+ label: "Google client secret",
2179
+ help: "Stored encrypted at rest. GOOGLE_CLIENT_SECRET can also be set on the server."
2180
+ }
2181
+ }
2182
+ },
2072
2183
  feature_flags: {
2073
2184
  title: "Feature Flags",
2074
2185
  description: "Toggle experimental and beta features for this workspace.",
@@ -2385,6 +2496,37 @@ var zhCN = {
2385
2496
  logo_url: { label: "Logo \u94FE\u63A5", help: "\u793A\u4F8B:https://\u2026/logo.svg" }
2386
2497
  }
2387
2498
  },
2499
+ auth: {
2500
+ title: "\u8BA4\u8BC1",
2501
+ description: "\u767B\u5F55\u3001\u6CE8\u518C\u4EE5\u53CA\u5185\u7F6E\u8BA4\u8BC1\u529F\u80FD\u7684\u63A7\u5236\u9879\u3002",
2502
+ groups: {
2503
+ email_password: {
2504
+ title: "\u90AE\u7BB1\u4E0E\u5BC6\u7801",
2505
+ description: "\u63A7\u5236\u672C\u5730\u90AE\u7BB1/\u5BC6\u7801\u767B\u5F55\u4E0E\u81EA\u52A9\u6CE8\u518C\u3002"
2506
+ },
2507
+ social: {
2508
+ title: "\u793E\u4EA4\u767B\u5F55",
2509
+ description: "\u914D\u7F6E\u5185\u7F6E\u7684 Google \u767B\u5F55\u63D0\u4F9B\u5546\u3002\u90E8\u7F72\u73AF\u5883\u53D8\u91CF\u4ECD\u4F18\u5148\u751F\u6548\u3002"
2510
+ }
2511
+ },
2512
+ keys: {
2513
+ email_password_enabled: { label: "\u542F\u7528\u90AE\u7BB1/\u5BC6\u7801\u767B\u5F55" },
2514
+ signup_enabled: { label: "\u5141\u8BB8\u81EA\u52A9\u6CE8\u518C" },
2515
+ require_email_verification: { label: "\u8981\u6C42\u90AE\u7BB1\u9A8C\u8BC1" },
2516
+ google_enabled: {
2517
+ label: "\u542F\u7528 Google \u767B\u5F55",
2518
+ help: "\u9700\u8981\u5728 Google Cloud Console \u4E2D\u521B\u5EFA\u7684 Google OAuth \u5BA2\u6237\u7AEF ID \u4E0E\u5BC6\u94A5\u3002"
2519
+ },
2520
+ google_client_id: {
2521
+ label: "Google \u5BA2\u6237\u7AEF ID",
2522
+ help: "\u6765\u81EA Google Cloud Console \u7684 OAuth \u5BA2\u6237\u7AEF ID\u3002\u4E5F\u53EF\u5728\u670D\u52A1\u5668\u4E0A\u8BBE\u7F6E GOOGLE_CLIENT_ID\u3002"
2523
+ },
2524
+ google_client_secret: {
2525
+ label: "Google \u5BA2\u6237\u7AEF\u5BC6\u94A5",
2526
+ help: "\u52A0\u5BC6\u5B58\u50A8\u3002\u4E5F\u53EF\u5728\u670D\u52A1\u5668\u4E0A\u8BBE\u7F6E GOOGLE_CLIENT_SECRET\u3002"
2527
+ }
2528
+ }
2529
+ },
2388
2530
  feature_flags: {
2389
2531
  title: "\u529F\u80FD\u5F00\u5173",
2390
2532
  description: "\u4E3A\u5F53\u524D\u5DE5\u4F5C\u533A\u5F00\u542F\u5B9E\u9A8C\u6027\u4E0E\u6D4B\u8BD5\u529F\u80FD\u3002",
@@ -2608,6 +2750,37 @@ var jaJP = {
2608
2750
  logo_url: { label: "\u30ED\u30B4 URL", help: "\u4F8B: https://\u2026/logo.svg" }
2609
2751
  }
2610
2752
  },
2753
+ auth: {
2754
+ title: "\u8A8D\u8A3C",
2755
+ description: "\u30B5\u30A4\u30F3\u30A4\u30F3\u3001\u767B\u9332\u3001\u7D44\u307F\u8FBC\u307F\u8A8D\u8A3C\u6A5F\u80FD\u306E\u5236\u5FA1\u3002",
2756
+ groups: {
2757
+ email_password: {
2758
+ title: "\u30E1\u30FC\u30EB\u3068\u30D1\u30B9\u30EF\u30FC\u30C9",
2759
+ description: "\u30ED\u30FC\u30AB\u30EB\u306E\u30E1\u30FC\u30EB/\u30D1\u30B9\u30EF\u30FC\u30C9\u30B5\u30A4\u30F3\u30A4\u30F3\u3068\u30BB\u30EB\u30D5\u30B5\u30FC\u30D3\u30B9\u767B\u9332\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002"
2760
+ },
2761
+ social: {
2762
+ title: "\u30BD\u30FC\u30B7\u30E3\u30EB\u30B5\u30A4\u30F3\u30A4\u30F3",
2763
+ description: "\u7D44\u307F\u8FBC\u307F\u306E Google \u30B5\u30A4\u30F3\u30A4\u30F3\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3092\u8A2D\u5B9A\u3057\u307E\u3059\u3002\u30C7\u30D7\u30ED\u30A4\u306E\u74B0\u5883\u5909\u6570\u304C\u512A\u5148\u3055\u308C\u307E\u3059\u3002"
2764
+ }
2765
+ },
2766
+ keys: {
2767
+ email_password_enabled: { label: "\u30E1\u30FC\u30EB/\u30D1\u30B9\u30EF\u30FC\u30C9\u30ED\u30B0\u30A4\u30F3\u3092\u6709\u52B9\u5316" },
2768
+ signup_enabled: { label: "\u30BB\u30EB\u30D5\u30B5\u30FC\u30D3\u30B9\u767B\u9332\u3092\u8A31\u53EF" },
2769
+ require_email_verification: { label: "\u30E1\u30FC\u30EB\u78BA\u8A8D\u3092\u5FC5\u9808\u306B\u3059\u308B" },
2770
+ google_enabled: {
2771
+ label: "Google \u30ED\u30B0\u30A4\u30F3\u3092\u6709\u52B9\u5316",
2772
+ help: "Google Cloud Console \u306E Google OAuth \u30AF\u30E9\u30A4\u30A2\u30F3\u30C8 ID \u3068\u30B7\u30FC\u30AF\u30EC\u30C3\u30C8\u304C\u5FC5\u8981\u3067\u3059\u3002"
2773
+ },
2774
+ google_client_id: {
2775
+ label: "Google \u30AF\u30E9\u30A4\u30A2\u30F3\u30C8 ID",
2776
+ help: "Google Cloud Console \u306E OAuth \u30AF\u30E9\u30A4\u30A2\u30F3\u30C8 ID\u3002\u30B5\u30FC\u30D0\u30FC\u5074\u3067 GOOGLE_CLIENT_ID \u3092\u8A2D\u5B9A\u3059\u308B\u3053\u3068\u3082\u3067\u304D\u307E\u3059\u3002"
2777
+ },
2778
+ google_client_secret: {
2779
+ label: "Google \u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u30B7\u30FC\u30AF\u30EC\u30C3\u30C8",
2780
+ help: "\u4FDD\u5B58\u6642\u306B\u6697\u53F7\u5316\u3055\u308C\u307E\u3059\u3002\u30B5\u30FC\u30D0\u30FC\u5074\u3067 GOOGLE_CLIENT_SECRET \u3092\u8A2D\u5B9A\u3059\u308B\u3053\u3068\u3082\u3067\u304D\u307E\u3059\u3002"
2781
+ }
2782
+ }
2783
+ },
2611
2784
  feature_flags: {
2612
2785
  title: "\u6A5F\u80FD\u30D5\u30E9\u30B0",
2613
2786
  description: "\u3053\u306E\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u3067\u5B9F\u9A13\u7684\u30FB\u30D9\u30FC\u30BF\u6A5F\u80FD\u3092\u5207\u66FF\u3048\u307E\u3059\u3002",
@@ -2668,6 +2841,196 @@ var jaJP = {
2668
2841
  actions: {
2669
2842
  test: { label: "\u63A5\u7D9A\u30C6\u30B9\u30C8" }
2670
2843
  }
2844
+ },
2845
+ ai: {
2846
+ title: "AI \u3068 Embedder",
2847
+ description: "\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u306E AI \u304A\u3088\u3073\u30CA\u30EC\u30C3\u30B8\u30B5\u30FC\u30D3\u30B9\u304C\u4F7F\u7528\u3059\u308B LLM \u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3001\u30E2\u30C7\u30EB\u3001\u8A8D\u8A3C\u60C5\u5831\u3001Embedder \u8A2D\u5B9A\u3002",
2848
+ groups: {
2849
+ provider: {
2850
+ title: "\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC",
2851
+ description: "LLM \u30D0\u30C3\u30AF\u30A8\u30F3\u30C9\u3092\u9078\u629E\u3057\u307E\u3059\u3002Memory \u30E2\u30FC\u30C9\u306F\u5165\u529B\u3092\u305D\u306E\u307E\u307E\u8FD4\u3057\u307E\u3059\u3002\u30C6\u30B9\u30C8\u7528\u3067\u3042\u308A\u3001\u672C\u756A\u3067\u306F\u4F7F\u7528\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002"
2852
+ },
2853
+ gateway: {
2854
+ title: "Vercel AI Gateway",
2855
+ description: "\u30DE\u30EB\u30C1\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u30EB\u30FC\u30BF\u30FC\u3002\u30E2\u30C7\u30EB\u6307\u5B9A\u306F `provider/model` \u5F62\u5F0F\u306B\u5F93\u3044\u307E\u3059\uFF08\u4F8B: `openai/gpt-4o`\uFF09\u3002"
2856
+ },
2857
+ openai: { title: "OpenAI" },
2858
+ anthropic: { title: "Anthropic" },
2859
+ google: { title: "Google" },
2860
+ defaults: {
2861
+ title: "\u751F\u6210\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u5024",
2862
+ description: "\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u307E\u305F\u306F\u30C1\u30E3\u30C3\u30C8\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u72EC\u81EA\u306E\u5024\u3092\u6307\u5B9A\u3057\u306A\u3044\u5834\u5408\u306B\u9069\u7528\u3055\u308C\u307E\u3059\u3002"
2863
+ },
2864
+ observability: { title: "\u53EF\u89B3\u6E2C\u6027" },
2865
+ embedder: {
2866
+ title: "Embedder",
2867
+ description: "\u30CA\u30EC\u30C3\u30B8\u30BD\u30FC\u30B9\u3068 RAG \u304C\u4F7F\u7528\u3059\u308B\u30C6\u30AD\u30B9\u30C8 \u2192 \u30D9\u30AF\u30C8\u30EB\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3002\u4E0A\u8A18\u306E\u30C1\u30E3\u30C3\u30C8\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3068\u306F\u72EC\u7ACB\u3057\u3066\u3044\u307E\u3059\u3002"
2868
+ }
2869
+ },
2870
+ keys: {
2871
+ provider: {
2872
+ label: "\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC",
2873
+ options: {
2874
+ memory: "Memory\uFF08\u30A8\u30B3\u30FC \u2014 \u30C6\u30B9\u30C8\u5C02\u7528\uFF09",
2875
+ gateway: "Vercel AI Gateway",
2876
+ openai: "OpenAI",
2877
+ anthropic: "Anthropic",
2878
+ google: "Google Generative AI"
2879
+ }
2880
+ },
2881
+ gateway_model: {
2882
+ label: "Gateway \u30E2\u30C7\u30EB",
2883
+ help: "AI_GATEWAY_MODEL \u3068\u3057\u3066\u8EE2\u9001\u3055\u308C\u307E\u3059\u3002\u4F8B: openai/gpt-4o"
2884
+ },
2885
+ gateway_api_key: {
2886
+ label: "Gateway API \u30AD\u30FC",
2887
+ help: "\u4EFB\u610F \u2014 Gateway \u304C\u8A8D\u8A3C\u3092\u8981\u6C42\u3059\u308B\u5834\u5408\u306E\u307F\u5FC5\u8981\u3067\u3059\u3002"
2888
+ },
2889
+ openai_api_key: {
2890
+ label: "OpenAI API \u30AD\u30FC",
2891
+ help: "OPENAI_API_KEY \u3068\u3057\u3066\u8EE2\u9001\u3055\u308C\u307E\u3059\u3002\u4FDD\u5B58\u6642\u306B\u6697\u53F7\u5316\u3055\u308C\u307E\u3059\u3002"
2892
+ },
2893
+ openai_model: {
2894
+ label: "\u30E2\u30C7\u30EB",
2895
+ help: "\u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u30E2\u30C7\u30EB ID\u3002\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u5358\u4F4D\u306E\u4E0A\u66F8\u304D\u304C\u512A\u5148\u3055\u308C\u307E\u3059\u3002"
2896
+ },
2897
+ openai_base_url: {
2898
+ label: "Base URL",
2899
+ help: "Azure OpenAI \u3084\u81EA\u5DF1\u30DB\u30B9\u30C8\u578B\u30B2\u30FC\u30C8\u30A6\u30A7\u30A4\u7528\u306E\u4E0A\u66F8\u304D\u3002api.openai.com \u306E\u5834\u5408\u306F\u7A7A\u6B04\u306B\u3057\u307E\u3059\u3002"
2900
+ },
2901
+ anthropic_api_key: {
2902
+ label: "Anthropic API \u30AD\u30FC",
2903
+ help: "ANTHROPIC_API_KEY \u3068\u3057\u3066\u8EE2\u9001\u3055\u308C\u307E\u3059\u3002\u4FDD\u5B58\u6642\u306B\u6697\u53F7\u5316\u3055\u308C\u307E\u3059\u3002"
2904
+ },
2905
+ anthropic_model: { label: "\u30E2\u30C7\u30EB" },
2906
+ google_api_key: {
2907
+ label: "Google API \u30AD\u30FC",
2908
+ help: "GOOGLE_GENERATIVE_AI_API_KEY \u3068\u3057\u3066\u8EE2\u9001\u3055\u308C\u307E\u3059\u3002\u4FDD\u5B58\u6642\u306B\u6697\u53F7\u5316\u3055\u308C\u307E\u3059\u3002"
2909
+ },
2910
+ google_model: { label: "\u30E2\u30C7\u30EB" },
2911
+ temperature: {
2912
+ label: "Temperature",
2913
+ help: "0 = \u6C7A\u5B9A\u7684\u30012 = \u975E\u5E38\u306B\u5275\u9020\u7684\u3002"
2914
+ },
2915
+ max_tokens: {
2916
+ label: "\u6700\u5927\u51FA\u529B\u30C8\u30FC\u30AF\u30F3\u6570",
2917
+ help: "\u30EC\u30B9\u30DD\u30F3\u30B9\u3054\u3068\u306B\u751F\u6210\u3055\u308C\u308B\u30C8\u30FC\u30AF\u30F3\u306E\u4E0A\u9650\u3002"
2918
+ },
2919
+ request_timeout_ms: { label: "\u30EA\u30AF\u30A8\u30B9\u30C8\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8 (ms)" },
2920
+ trace_enabled: {
2921
+ label: "\u30C8\u30EC\u30FC\u30B9\u3092\u8A18\u9332",
2922
+ help: "\u30C7\u30D0\u30C3\u30B0\u3068\u518D\u751F\u306E\u305F\u3081 prompt/response \u30C8\u30EC\u30FC\u30B9\u3092 sys_ai_trace \u306B\u4FDD\u5B58\u3057\u307E\u3059\u3002"
2923
+ },
2924
+ log_prompts: {
2925
+ label: "\u5B8C\u5168\u306A\u30D7\u30ED\u30F3\u30D7\u30C8\u3092\u8A18\u9332",
2926
+ help: "\u30E1\u30BF\u30C7\u30FC\u30BF\u3060\u3051\u3067\u306A\u304F\u30EC\u30F3\u30C0\u30EA\u30F3\u30B0\u3055\u308C\u305F\u30D7\u30ED\u30F3\u30D7\u30C8\u3092\u30C8\u30EC\u30FC\u30B9\u884C\u306B\u542B\u3081\u307E\u3059\u3002\u26A0 PII \u304C\u6F0F\u3048\u3044\u3059\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u898F\u5236\u74B0\u5883\u3067\u306F\u7121\u52B9\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"
2927
+ },
2928
+ embedder_provider: {
2929
+ label: "\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC",
2930
+ options: {
2931
+ none: "\u7121\u52B9\uFF08\u57CB\u3081\u8FBC\u307F\u306A\u3057\uFF09",
2932
+ openai: "OpenAI",
2933
+ azure: "Azure OpenAI",
2934
+ dashscope: "\u963F\u91CC\u901A\u4E49 DashScope",
2935
+ zhipu: "\u667A\u8C31 BigModel",
2936
+ siliconflow: "\u7845\u57FA\u6D41\u52A8 SiliconFlow",
2937
+ doubao: "\u706B\u5C71\u5F15\u64CE Doubao",
2938
+ minimax: "MiniMax",
2939
+ ollama: "Ollama\uFF08\u30ED\u30FC\u30AB\u30EB\uFF09",
2940
+ custom: "\u30AB\u30B9\u30BF\u30E0\uFF08OpenAI \u4E92\u63DB\uFF09"
2941
+ }
2942
+ },
2943
+ embedder_api_key: {
2944
+ label: "Embedder API \u30AD\u30FC",
2945
+ help: "Authorization \u30D8\u30C3\u30C0\u30FC\u3068\u3057\u3066\u9001\u4FE1\u3055\u308C\u308B Bearer \u30C8\u30FC\u30AF\u30F3\u3002Ollama \u3067\u306F\u7A7A\u3067\u306A\u3044\u4EFB\u610F\u306E\u5024\u3067\u52D5\u4F5C\u3057\u307E\u3059\u3002"
2946
+ },
2947
+ embedder_model: {
2948
+ label: "\u30E2\u30C7\u30EB",
2949
+ help: "\u4F8B \u2014 OpenAI: text-embedding-3-small \xB7 \u963F\u91CC\u901A\u4E49: text-embedding-v3 \xB7 \u667A\u8C31: embedding-3 \xB7 \u7845\u57FA\u6D41\u52A8: BAAI/bge-m3 \xB7 Ollama: bge-m3"
2950
+ },
2951
+ embedder_base_url: {
2952
+ label: "Base URL",
2953
+ help: "\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u306E\u30EB\u30FC\u30C8\uFF08/embeddings \u3092\u542B\u307E\u306A\u3044\uFF09\u3002\u30D7\u30EA\u30BB\u30C3\u30C8\u304B\u3089\u81EA\u52D5\u5165\u529B\u3055\u308C\u307E\u3059\u3002\u30D7\u30ED\u30AD\u30B7\u3084\u81EA\u5DF1\u30DB\u30B9\u30C8\u578B\u30B2\u30FC\u30C8\u30A6\u30A7\u30A4\u7528\u306B\u4E0A\u66F8\u304D\u3067\u304D\u307E\u3059\u3002"
2954
+ },
2955
+ embedder_dimensions: {
2956
+ label: "\u6B21\u5143\u6570",
2957
+ help: "\u51FA\u529B\u6B21\u5143\u6570\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059\uFF08Matryoshka \u30E2\u30C7\u30EB\u306E\u307F\uFF09\u3002\u7A7A\u6B04\u306E\u5834\u5408\u306F\u30E2\u30C7\u30EB\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002"
2958
+ },
2959
+ embedder_batch_size: {
2960
+ label: "\u30D0\u30C3\u30C1\u30B5\u30A4\u30BA",
2961
+ help: "embed() \u547C\u3073\u51FA\u3057\u3054\u3068\u306E\u30C1\u30E3\u30F3\u30AF\u6570\u3002\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u306E\u30EC\u30FC\u30C8/\u30B5\u30A4\u30BA\u5236\u9650\u306B\u9054\u3059\u308B\u5834\u5408\u306F\u6E1B\u3089\u3057\u307E\u3059\u3002"
2962
+ }
2963
+ },
2964
+ actions: {
2965
+ test: { label: "\u63A5\u7D9A\u30C6\u30B9\u30C8" },
2966
+ test_embedder: { label: "Embedder \u3092\u30C6\u30B9\u30C8" }
2967
+ }
2968
+ },
2969
+ knowledge: {
2970
+ title: "\u30CA\u30EC\u30C3\u30B8",
2971
+ description: "RAG / \u30CA\u30EC\u30C3\u30B8\u30BD\u30FC\u30B9\u7528\u306E\u30D9\u30AF\u30C8\u30EB\u30B9\u30C8\u30A2\u30D0\u30C3\u30AF\u30A8\u30F3\u30C9\u3002\u26A0 \u30A2\u30C0\u30D7\u30BF\u30FC\u3092\u5207\u66FF\u3048\u3066\u3082\u65E2\u5B58\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306F\u79FB\u884C\u3055\u308C\u307E\u305B\u3093\u3002",
2972
+ groups: {
2973
+ adapter: {
2974
+ title: "\u30D0\u30C3\u30AF\u30A8\u30F3\u30C9",
2975
+ description: "\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u30C1\u30E3\u30F3\u30AF\u3068\u305D\u306E\u30D9\u30AF\u30C8\u30EB\u306E\u4FDD\u5B58\u5148\u3092\u9078\u629E\u3057\u307E\u3059\u3002"
2976
+ },
2977
+ turso: {
2978
+ title: "Turso / libSQL",
2979
+ description: "\u30DE\u30CD\u30FC\u30B8\u30C9 Turso\u3001\u30ED\u30FC\u30AB\u30EB\u30D5\u30A1\u30A4\u30EB\u3001\u30A4\u30F3\u30E1\u30E2\u30EA\u306E\u3044\u305A\u308C\u3067\u3082\u52D5\u4F5C\u3057\u307E\u3059\u3002"
2980
+ },
2981
+ ragflow: {
2982
+ title: "RAGFlow",
2983
+ description: "\u5916\u90E8 RAGFlow \u30C7\u30D7\u30ED\u30A4\u3002\u30BB\u30EB\u30D5\u30DB\u30B9\u30C8\u306E\u624B\u9806\u306F https://ragflow.io \u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002"
2984
+ },
2985
+ indexing: {
2986
+ title: "\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u5024",
2987
+ description: "KnowledgeSource.adapterConfig \u306E\u30BD\u30FC\u30B9\u5358\u4F4D\u306E\u5024\u304C\u512A\u5148\u3055\u308C\u307E\u3059\u3002"
2988
+ },
2989
+ permissions: { title: "\u6A29\u9650" }
2990
+ },
2991
+ keys: {
2992
+ adapter: {
2993
+ label: "\u30A2\u30C0\u30D7\u30BF\u30FC",
2994
+ options: {
2995
+ memory: "\u30A4\u30F3\u30E1\u30E2\u30EA\uFF08\u958B\u767A/\u30C6\u30B9\u30C8\u5C02\u7528\uFF09",
2996
+ turso: "Turso / libSQL\uFF08\u30AF\u30E9\u30A6\u30C9\u307E\u305F\u306F\u30ED\u30FC\u30AB\u30EB\uFF09",
2997
+ ragflow: "RAGFlow\uFF08\u5916\u90E8\uFF09"
2998
+ }
2999
+ },
3000
+ turso_url: {
3001
+ label: "\u63A5\u7D9A URL",
3002
+ help: "\u4F8B: libsql://your-tenant.turso.io \xB7 file:./.objectstack/knowledge.db \xB7 :memory:"
3003
+ },
3004
+ turso_auth_token: {
3005
+ label: "\u8A8D\u8A3C\u30C8\u30FC\u30AF\u30F3",
3006
+ help: "\u30DE\u30CD\u30FC\u30B8\u30C9 Turso URL \u306E\u5834\u5408\u306E\u307F\u5FC5\u8981\u3067\u3059\u3002"
3007
+ },
3008
+ ragflow_base_url: { label: "Base URL", help: "\u4F8B: http://localhost:9380" },
3009
+ ragflow_api_key: { label: "API \u30AD\u30FC" },
3010
+ ragflow_default_dataset: {
3011
+ label: "\u30C7\u30D5\u30A9\u30EB\u30C8\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8 ID",
3012
+ help: "KnowledgeSource \u304C\u72EC\u81EA\u306E RAGFlow \u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u3092\u6307\u5B9A\u3057\u306A\u3044\u5834\u5408\u306B\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002"
3013
+ },
3014
+ chunk_target: {
3015
+ label: "\u76EE\u6A19\u30C1\u30E3\u30F3\u30AF\u30B5\u30A4\u30BA\uFF08\u6587\u5B57\u6570\uFF09",
3016
+ help: "\u30C8\u30FC\u30AF\u30F3\u5358\u4F4D\u306E\u5206\u5272\u304C\u884C\u308F\u308C\u308B\u524D\u306E\u30C1\u30E3\u30F3\u30AF\u30B5\u30A4\u30BA\u306E\u30BD\u30D5\u30C8\u4E0A\u9650\u3002"
3017
+ },
3018
+ chunk_overlap: {
3019
+ label: "\u30C1\u30E3\u30F3\u30AF\u306E\u91CD\u306A\u308A\uFF08\u6587\u5B57\u6570\uFF09",
3020
+ help: "\u5883\u754C\u3092\u8D8A\u3048\u3066\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u3092\u7DAD\u6301\u3059\u308B\u305F\u3081\u3001\u524D\u306E\u30C1\u30E3\u30F3\u30AF\u304B\u3089\u4FDD\u6301\u3059\u308B\u6587\u5B57\u6570\u3002"
3021
+ },
3022
+ over_fetch: {
3023
+ label: "\u30AA\u30FC\u30D0\u30FC\u30D5\u30A7\u30C3\u30C1\u500D\u7387",
3024
+ help: "JS \u5074\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u30D5\u30A3\u30EB\u30BF\u30EA\u30F3\u30B0\u3067\u3082\u884C\u304C\u6B8B\u308B\u3088\u3046\u3001\u5185\u90E8\u3067 topK \xD7 overFetch \u4EF6\u306E\u5019\u88DC\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002"
3025
+ },
3026
+ enforce_rls: {
3027
+ label: "\u691C\u7D22\u6642\u306B RLS \u3092\u5F37\u5236",
3028
+ help: "\u5404\u30D2\u30C3\u30C8\u3092\u547C\u3073\u51FA\u3057\u5143\u306E\u30EC\u30B3\u30FC\u30C9\u30EC\u30D9\u30EB\u6A29\u9650\u306B\u5BFE\u3057\u3066\u518D\u78BA\u8A8D\u3057\u307E\u3059\u3002\u26A0 \u7121\u52B9\u5316\u3059\u308B\u3068\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u56FA\u6709\u306E\u30BB\u30FC\u30D5\u30AC\u30FC\u30C9\u304C\u30B9\u30AD\u30C3\u30D7\u3055\u308C\u307E\u3059\u3002"
3029
+ }
3030
+ },
3031
+ actions: {
3032
+ test: { label: "\u63A5\u7D9A\u30C6\u30B9\u30C8" }
3033
+ }
2671
3034
  }
2672
3035
  }
2673
3036
  };
@@ -2734,6 +3097,37 @@ var esES = {
2734
3097
  logo_url: { label: "URL del logotipo", help: "Ejemplo: https://\u2026/logo.svg" }
2735
3098
  }
2736
3099
  },
3100
+ auth: {
3101
+ title: "Autenticaci\xF3n",
3102
+ description: "Inicio de sesi\xF3n, registro y controles de las funciones de autenticaci\xF3n integradas.",
3103
+ groups: {
3104
+ email_password: {
3105
+ title: "Correo y contrase\xF1a",
3106
+ description: "Controla el inicio de sesi\xF3n local con correo/contrase\xF1a y el registro de autoservicio."
3107
+ },
3108
+ social: {
3109
+ title: "Inicio de sesi\xF3n social",
3110
+ description: "Configura el proveedor de inicio de sesi\xF3n de Google integrado. Las variables de entorno del despliegue siguen teniendo prioridad."
3111
+ }
3112
+ },
3113
+ keys: {
3114
+ email_password_enabled: { label: "Habilitar inicio de sesi\xF3n con correo/contrase\xF1a" },
3115
+ signup_enabled: { label: "Permitir registro de autoservicio" },
3116
+ require_email_verification: { label: "Requerir verificaci\xF3n de correo" },
3117
+ google_enabled: {
3118
+ label: "Habilitar inicio de sesi\xF3n con Google",
3119
+ help: "Requiere un ID de cliente y un secreto de OAuth de Google desde Google Cloud Console."
3120
+ },
3121
+ google_client_id: {
3122
+ label: "ID de cliente de Google",
3123
+ help: "ID de cliente de OAuth desde Google Cloud Console. Tambi\xE9n se puede definir GOOGLE_CLIENT_ID en el servidor."
3124
+ },
3125
+ google_client_secret: {
3126
+ label: "Secreto de cliente de Google",
3127
+ help: "Se almacena cifrado en reposo. Tambi\xE9n se puede definir GOOGLE_CLIENT_SECRET en el servidor."
3128
+ }
3129
+ }
3130
+ },
2737
3131
  feature_flags: {
2738
3132
  title: "Indicadores de funci\xF3n",
2739
3133
  description: "Activa funciones experimentales y en beta para este espacio de trabajo.",