@opengeni/config 0.7.0 → 0.7.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeni/config",
3
- "version": "0.7.0",
3
+ "version": "0.7.6",
4
4
  "description": "OpenGeni runtime configuration: settings resolution, deployment knobs, and config validation shared across the server packages.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -34,7 +34,7 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "@opengeni/codex": "^0.2.7",
37
- "@opengeni/contracts": "^0.19.0",
37
+ "@opengeni/contracts": "^0.19.4",
38
38
  "zod": "^4.2.1"
39
39
  },
40
40
  "engines": {
package/src/index.ts CHANGED
@@ -191,6 +191,10 @@ const SettingsSchema = z.object({
191
191
  // non-owner `opengeni_app` role. "scoped" = the embedded owner-role path (the
192
192
  // GUC is still emitted defensively, so the query path is identical).
193
193
  rlsStrategy: z.enum(["force", "scoped"]).default("force"),
194
+ // Exact PostgreSQL login identity required by the standalone FORCE-RLS
195
+ // startup/readiness assertion. Embedded `scoped` hosts own their role model
196
+ // and are deliberately not constrained to this name.
197
+ runtimeDatabaseRole: z.string().min(1).default("opengeni_app"),
194
198
  natsUrl: z.string().default("nats://127.0.0.1:4222"),
195
199
  temporalHost: z.string().default("127.0.0.1:7233"),
196
200
  temporalNamespace: z.string().default("default"),
@@ -211,11 +215,18 @@ const SettingsSchema = z.object({
211
215
  publicBaseUrl: z.string().url().optional(),
212
216
  // Base URL for the bring-your-own-compute agent release assets the get.<domain>
213
217
  // install routes redirect to. Defaults to this repo's GitHub Releases. The route
214
- // appends `/download/agent-v<ver>/<asset>` (or `/latest/download/<asset>`).
218
+ // appends `/download/agent-v<ver>/<asset>`.
215
219
  agentReleasesBaseUrl: z
216
220
  .string()
217
221
  .url()
218
222
  .default("https://github.com/Cloudgeni-ai/opengeni/releases"),
223
+ // Explicit operator-controlled promotion pointer for `/agent/latest/*`.
224
+ // Versioned agent releases are immutable; changing this setting promotes or
225
+ // rolls back the stable channel without moving or deleting a provider tag.
226
+ agentStableVersion: z
227
+ .string()
228
+ .regex(/^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)$/u)
229
+ .default("0.1.8"),
219
230
  productAccessMode: ProductAccessMode.default("local"),
220
231
  billingMode: BillingMode.default("disabled"),
221
232
  entitlementsMode: EntitlementsMode.default("none"),
@@ -325,12 +336,17 @@ const SettingsSchema = z.object({
325
336
  // subscription is injected as a synthetic "codex-subscription" registry
326
337
  // provider whose models route through the ChatGPT backend (@opengeni/codex).
327
338
  codexSubscriptionEnabled: EnvBoolean.default(false), // OPENGENI_CODEX_SUBSCRIPTION_ENABLED
339
+ // Expose the connected apps attached to a Codex subscription through the
340
+ // synthetic codex_apps MCP server. Independent from subscription routing so
341
+ // operators can use Codex models without exposing ChatGPT connectors.
342
+ codexConnectedAppsEnabled: EnvBoolean.default(false), // OPENGENI_CODEX_CONNECTED_APPS_ENABLED
328
343
  codexProductSku: z.string().optional(), // OPENGENI_CODEX_PRODUCT_SKU (X-OpenAI-Product-Sku, apps only)
329
- // Progressive connector disclosure (Codex-CLI-style tool_search): on a codex
330
- // turn, flag the ~217 codex_apps connector tools `defer_loading:true` (dropping
331
- // their schemas from model context) and add one client-executed tool_search
332
- // tool that BM25-discloses only the matching connectors. Default OFF a codex
333
- // turn is byte-for-byte unchanged until enabled. OPENGENI_CODEX_TOOL_SEARCH_ENABLED
344
+ // Progressive MCP disclosure (Codex-CLI-style tool_search): on a codex turn,
345
+ // flag non-mandatory selected MCP tools `defer_loading:true` (dropping their
346
+ // schemas from model context) and add one client-executed tool_search tool
347
+ // that BM25-discloses bounded matches. The mandatory OpenGeni tools stay
348
+ // eager. Default OFF — a codex turn is byte-for-byte unchanged until enabled.
349
+ // OPENGENI_CODEX_TOOL_SEARCH_ENABLED
334
350
  codexToolSearchEnabled: EnvBoolean.default(false),
335
351
  // credential allocator atomic, workspace-local credential allocation. Default OFF is a
336
352
  // deliberate rolling-deploy fence: migrate + roll every worker first, then
@@ -743,6 +759,10 @@ const SettingsSchema = z.object({
743
759
  documentEmbeddingDimensions: z.coerce.number().int().positive().default(3072),
744
760
  documentEmbeddingApiKey: z.string().optional(),
745
761
  documentEmbeddingBaseUrl: z.string().url().optional(),
762
+ documentCurationProvider: z.enum(["openai", "heuristic", "none"]).default("openai"),
763
+ documentCurationModel: z.string().min(1).default("gpt-4o-mini"),
764
+ documentCurationApiKey: z.string().optional(),
765
+ documentCurationBaseUrl: z.string().url().optional(),
746
766
  gitAuthorName: z.string().optional(),
747
767
  gitAuthorEmail: z.string().optional(),
748
768
  gitCommitterName: z.string().optional(),
@@ -1294,6 +1314,7 @@ export function getSettings(): Settings {
1294
1314
  databaseUrl: optional("OPENGENI_DATABASE_URL"),
1295
1315
  dbSchema: optional("OPENGENI_DB_SCHEMA"),
1296
1316
  rlsStrategy: optional("OPENGENI_RLS_STRATEGY"),
1317
+ runtimeDatabaseRole: optional("OPENGENI_RUNTIME_DATABASE_ROLE"),
1297
1318
  natsUrl: optional("OPENGENI_NATS_URL"),
1298
1319
  temporalHost: optional("OPENGENI_TEMPORAL_HOST"),
1299
1320
  temporalNamespace: optional("OPENGENI_TEMPORAL_NAMESPACE"),
@@ -1319,6 +1340,7 @@ export function getSettings(): Settings {
1319
1340
  optional("OPENGENI_OTEL_EXPORTER_OTLP_HEADERS") ?? optional("OTEL_EXPORTER_OTLP_HEADERS"),
1320
1341
  publicBaseUrl: optional("OPENGENI_PUBLIC_BASE_URL"),
1321
1342
  agentReleasesBaseUrl: optional("OPENGENI_AGENT_RELEASES_BASE_URL"),
1343
+ agentStableVersion: optional("OPENGENI_AGENT_STABLE_VERSION"),
1322
1344
  productAccessMode: optional("OPENGENI_PRODUCT_ACCESS_MODE"),
1323
1345
  billingMode: optional("OPENGENI_BILLING_MODE"),
1324
1346
  entitlementsMode: optional("OPENGENI_ENTITLEMENTS_MODE"),
@@ -1366,6 +1388,7 @@ export function getSettings(): Settings {
1366
1388
  modelPricingJson: optional("OPENGENI_MODEL_PRICING_JSON"),
1367
1389
  modelProvidersJson: optional("OPENGENI_MODEL_PROVIDERS_JSON"),
1368
1390
  codexSubscriptionEnabled: optional("OPENGENI_CODEX_SUBSCRIPTION_ENABLED"),
1391
+ codexConnectedAppsEnabled: optional("OPENGENI_CODEX_CONNECTED_APPS_ENABLED"),
1369
1392
  codexToolSearchEnabled: optional("OPENGENI_CODEX_TOOL_SEARCH_ENABLED"),
1370
1393
  codexCredentialLeasingEnabled: optional("OPENGENI_CODEX_CREDENTIAL_LEASING_ENABLED"),
1371
1394
  codexFleetPolicyShadowEnabled: optional("OPENGENI_CODEX_FLEET_POLICY_SHADOW_ENABLED"),
@@ -1506,6 +1529,10 @@ export function getSettings(): Settings {
1506
1529
  documentEmbeddingDimensions: optional("OPENGENI_DOCUMENT_EMBEDDING_DIMENSIONS"),
1507
1530
  documentEmbeddingApiKey: optional("OPENGENI_DOCUMENT_EMBEDDING_API_KEY"),
1508
1531
  documentEmbeddingBaseUrl: optional("OPENGENI_DOCUMENT_EMBEDDING_BASE_URL"),
1532
+ documentCurationProvider: optional("OPENGENI_DOCUMENT_CURATION_PROVIDER"),
1533
+ documentCurationModel: optional("OPENGENI_DOCUMENT_CURATION_MODEL"),
1534
+ documentCurationApiKey: optional("OPENGENI_DOCUMENT_CURATION_API_KEY"),
1535
+ documentCurationBaseUrl: optional("OPENGENI_DOCUMENT_CURATION_BASE_URL"),
1509
1536
  gitAuthorName: optional("OPENGENI_GIT_AUTHOR_NAME"),
1510
1537
  gitAuthorEmail: optional("OPENGENI_GIT_AUTHOR_EMAIL"),
1511
1538
  gitCommitterName: optional("OPENGENI_GIT_COMMITTER_NAME"),
@@ -2022,6 +2049,11 @@ export function withCodexCatalogProvider(settings: Settings): Settings {
2022
2049
  upstreamModelId: slug,
2023
2050
  label: slug,
2024
2051
  reasoningEffort: true,
2052
+ // The ChatGPT/Codex Responses backend accepts the native web_search
2053
+ // hosted tool (unlike hosted apply_patch/computer transports). Declaring
2054
+ // this here makes provider resolution truthful; the worker still applies
2055
+ // the durable session/turn policy gate before attaching it.
2056
+ hostedWebSearch: true,
2025
2057
  contextWindowTokens: CODEX_MODEL_CONTEXT_WINDOW_TOKENS,
2026
2058
  effectiveContextWindowTokens: CODEX_MODEL_EFFECTIVE_CONTEXT_WINDOW_TOKENS,
2027
2059
  autoCompactTokenLimit: CODEX_MODEL_AUTO_COMPACT_TOKEN_LIMIT,