@opengeni/config 4.2.1-canary.39593846423001 → 4.3.1
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/chunk-KW4MS4FH.js +32 -0
- package/dist/chunk-KW4MS4FH.js.map +1 -0
- package/dist/defaults.d.ts +32 -0
- package/dist/defaults.js +17 -0
- package/dist/defaults.js.map +1 -0
- package/dist/index.d.ts +70 -34
- package/dist/index.js +167 -23
- package/dist/index.js.map +1 -1
- package/package.json +8 -4
- package/src/defaults.ts +54 -0
- package/src/index.ts +278 -54
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// src/defaults.ts
|
|
2
|
+
var DEFAULT_OPENROUTER_MODEL_ID = "openrouter/nvidia/nemotron-3-super-120b-a12b:free";
|
|
3
|
+
var DEFAULT_MODEL_COST_POLICY_JSON = JSON.stringify({
|
|
4
|
+
[DEFAULT_OPENROUTER_MODEL_ID]: "free"
|
|
5
|
+
});
|
|
6
|
+
var DEFAULT_GOAL_IDLE_BACKOFF_MS = [3e3, 3e4, 12e4, 3e5];
|
|
7
|
+
var DEFAULT_GOAL_IDLE_BACKOFF_MAX_MS = 6e5;
|
|
8
|
+
var AGENT_INSTRUCTIONS_CORE_PLACEHOLDER = "{{core}}";
|
|
9
|
+
var DEFAULT_AGENT_INSTRUCTIONS = [
|
|
10
|
+
"You are an Opengeni workspace agent: a general assistant for questions, writing, research, analysis, and technical work.",
|
|
11
|
+
"Follow the user's task and the applicable Skill instructions for the current role.",
|
|
12
|
+
"When a task needs files or commands, work inside the sandbox workspace with the filesystem and shell tools.",
|
|
13
|
+
"Repository resources are mounted under repos/<host>/<owner>/<repo> unless the session specifies another collision-free mount path.",
|
|
14
|
+
"File resources are mounted under .opengeni/files/<file-id>/ unless the session specifies another mount path.",
|
|
15
|
+
"Attached files are mounted read-only; copy them before modifying.",
|
|
16
|
+
"Installed and selected Skills appear in the session Skill index; follow its reading instructions and any role-specific guidance.",
|
|
17
|
+
"Provider CLIs such as gh, glab, and az may be pre-authenticated by the host through brokered git credentials or a sandbox preparation profile; try them before asking for credentials.",
|
|
18
|
+
"When the Git repository you change has a remote and git provider credentials are available, work on a focused branch and open a pull request.",
|
|
19
|
+
"Otherwise leave changes in the working tree and do not create or mention branches, commits, or pull requests unless the user asks; if the repository has a remote, say the changes are not pushed, and if the user asks for something you cannot make, say what blocks it.",
|
|
20
|
+
"Answer questions directly and briefly; after making changes, say what changed, how you checked it, and anything still blocked.",
|
|
21
|
+
AGENT_INSTRUCTIONS_CORE_PLACEHOLDER
|
|
22
|
+
].join(" ");
|
|
23
|
+
|
|
24
|
+
export {
|
|
25
|
+
DEFAULT_OPENROUTER_MODEL_ID,
|
|
26
|
+
DEFAULT_MODEL_COST_POLICY_JSON,
|
|
27
|
+
DEFAULT_GOAL_IDLE_BACKOFF_MS,
|
|
28
|
+
DEFAULT_GOAL_IDLE_BACKOFF_MAX_MS,
|
|
29
|
+
AGENT_INSTRUCTIONS_CORE_PLACEHOLDER,
|
|
30
|
+
DEFAULT_AGENT_INSTRUCTIONS
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=chunk-KW4MS4FH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/defaults.ts"],"sourcesContent":["// Immutable configuration defaults, independent of settings validation and provider adapters.\nexport const DEFAULT_OPENROUTER_MODEL_ID =\n \"openrouter/nvidia/nemotron-3-super-120b-a12b:free\" as const;\n\nexport const DEFAULT_MODEL_COST_POLICY_JSON = JSON.stringify({\n [DEFAULT_OPENROUTER_MODEL_ID]: \"free\",\n});\n\n/** Default pacing between consecutive no-input goal continuations. */\nexport const DEFAULT_GOAL_IDLE_BACKOFF_MS: readonly number[] = [3_000, 30_000, 120_000, 300_000];\n\nexport const DEFAULT_GOAL_IDLE_BACKOFF_MAX_MS = 600_000;\n\n/**\n * Placeholder token inside an agent-instructions persona template. The runtime\n * substitutes the non-bypassable CORE (goal-loop ownership + the dynamic\n * workspace-environment block) at this marker. A template that omits the\n * marker still gets the CORE appended after it (a non-bypassable fail-safe),\n * so a white-labelled persona can never drop the goal-loop contract or the\n * environment metadata the agent depends on.\n */\nexport const AGENT_INSTRUCTIONS_CORE_PLACEHOLDER = \"{{core}}\";\n\n/**\n * Default per-workspace agent persona template. This is the BRAND + tool-usage\n * opinion (the white-labellable surface): the general-assistant identity line,\n * the framing/opinion lines, and the mount-path facts. Domain-specific tooling\n * guidance (for example Terraform or Checkov) belongs in opt-in Skills.\n *\n * The CORE that MUST survive any override — the goal-loop ownership line (which\n * names the opengeni__goal_* tools) and the dynamic workspace-environment block\n * — is injected at AGENT_INSTRUCTIONS_CORE_PLACEHOLDER by the runtime, never\n * baked into this overridable string.\n *\n * INVARIANT: with no per-workspace override and an empty environment, the\n * runtime's composed instructions are byte-for-byte pinned by a runtime test.\n * The template below is joined by \" \", followed by \" \" + the placeholder.\n * Changing a single character here changes that default; update the pin\n * intentionally.\n */\nexport const DEFAULT_AGENT_INSTRUCTIONS = [\n \"You are an Opengeni workspace agent: a general assistant for questions, writing, research, analysis, and technical work.\",\n \"Follow the user's task and the applicable Skill instructions for the current role.\",\n \"When a task needs files or commands, work inside the sandbox workspace with the filesystem and shell tools.\",\n \"Repository resources are mounted under repos/<host>/<owner>/<repo> unless the session specifies another collision-free mount path.\",\n \"File resources are mounted under .opengeni/files/<file-id>/ unless the session specifies another mount path.\",\n \"Attached files are mounted read-only; copy them before modifying.\",\n \"Installed and selected Skills appear in the session Skill index; follow its reading instructions and any role-specific guidance.\",\n \"Provider CLIs such as gh, glab, and az may be pre-authenticated by the host through brokered git credentials or a sandbox preparation profile; try them before asking for credentials.\",\n \"When the Git repository you change has a remote and git provider credentials are available, work on a focused branch and open a pull request.\",\n \"Otherwise leave changes in the working tree and do not create or mention branches, commits, or pull requests unless the user asks; if the repository has a remote, say the changes are not pushed, and if the user asks for something you cannot make, say what blocks it.\",\n \"Answer questions directly and briefly; after making changes, say what changed, how you checked it, and anything still blocked.\",\n AGENT_INSTRUCTIONS_CORE_PLACEHOLDER,\n].join(\" \");\n"],"mappings":";AACO,IAAM,8BACX;AAEK,IAAM,iCAAiC,KAAK,UAAU;AAAA,EAC3D,CAAC,2BAA2B,GAAG;AACjC,CAAC;AAGM,IAAM,+BAAkD,CAAC,KAAO,KAAQ,MAAS,GAAO;AAExF,IAAM,mCAAmC;AAUzC,IAAM,sCAAsC;AAmB5C,IAAM,6BAA6B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG;","names":[]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export declare const DEFAULT_OPENROUTER_MODEL_ID: "openrouter/nvidia/nemotron-3-super-120b-a12b:free";
|
|
2
|
+
export declare const DEFAULT_MODEL_COST_POLICY_JSON: string;
|
|
3
|
+
/** Default pacing between consecutive no-input goal continuations. */
|
|
4
|
+
export declare const DEFAULT_GOAL_IDLE_BACKOFF_MS: readonly number[];
|
|
5
|
+
export declare const DEFAULT_GOAL_IDLE_BACKOFF_MAX_MS = 600000;
|
|
6
|
+
/**
|
|
7
|
+
* Placeholder token inside an agent-instructions persona template. The runtime
|
|
8
|
+
* substitutes the non-bypassable CORE (goal-loop ownership + the dynamic
|
|
9
|
+
* workspace-environment block) at this marker. A template that omits the
|
|
10
|
+
* marker still gets the CORE appended after it (a non-bypassable fail-safe),
|
|
11
|
+
* so a white-labelled persona can never drop the goal-loop contract or the
|
|
12
|
+
* environment metadata the agent depends on.
|
|
13
|
+
*/
|
|
14
|
+
export declare const AGENT_INSTRUCTIONS_CORE_PLACEHOLDER = "{{core}}";
|
|
15
|
+
/**
|
|
16
|
+
* Default per-workspace agent persona template. This is the BRAND + tool-usage
|
|
17
|
+
* opinion (the white-labellable surface): the general-assistant identity line,
|
|
18
|
+
* the framing/opinion lines, and the mount-path facts. Domain-specific tooling
|
|
19
|
+
* guidance (for example Terraform or Checkov) belongs in opt-in Skills.
|
|
20
|
+
*
|
|
21
|
+
* The CORE that MUST survive any override — the goal-loop ownership line (which
|
|
22
|
+
* names the opengeni__goal_* tools) and the dynamic workspace-environment block
|
|
23
|
+
* — is injected at AGENT_INSTRUCTIONS_CORE_PLACEHOLDER by the runtime, never
|
|
24
|
+
* baked into this overridable string.
|
|
25
|
+
*
|
|
26
|
+
* INVARIANT: with no per-workspace override and an empty environment, the
|
|
27
|
+
* runtime's composed instructions are byte-for-byte pinned by a runtime test.
|
|
28
|
+
* The template below is joined by " ", followed by " " + the placeholder.
|
|
29
|
+
* Changing a single character here changes that default; update the pin
|
|
30
|
+
* intentionally.
|
|
31
|
+
*/
|
|
32
|
+
export declare const DEFAULT_AGENT_INSTRUCTIONS: string;
|
package/dist/defaults.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AGENT_INSTRUCTIONS_CORE_PLACEHOLDER,
|
|
3
|
+
DEFAULT_AGENT_INSTRUCTIONS,
|
|
4
|
+
DEFAULT_GOAL_IDLE_BACKOFF_MAX_MS,
|
|
5
|
+
DEFAULT_GOAL_IDLE_BACKOFF_MS,
|
|
6
|
+
DEFAULT_MODEL_COST_POLICY_JSON,
|
|
7
|
+
DEFAULT_OPENROUTER_MODEL_ID
|
|
8
|
+
} from "./chunk-KW4MS4FH.js";
|
|
9
|
+
export {
|
|
10
|
+
AGENT_INSTRUCTIONS_CORE_PLACEHOLDER,
|
|
11
|
+
DEFAULT_AGENT_INSTRUCTIONS,
|
|
12
|
+
DEFAULT_GOAL_IDLE_BACKOFF_MAX_MS,
|
|
13
|
+
DEFAULT_GOAL_IDLE_BACKOFF_MS,
|
|
14
|
+
DEFAULT_MODEL_COST_POLICY_JSON,
|
|
15
|
+
DEFAULT_OPENROUTER_MODEL_ID
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { DEFAULT_OPENROUTER_MODEL_ID, DEFAULT_MODEL_COST_POLICY_JSON, DEFAULT_GOAL_IDLE_BACKOFF_MS, DEFAULT_GOAL_IDLE_BACKOFF_MAX_MS, AGENT_INSTRUCTIONS_CORE_PLACEHOLDER, DEFAULT_AGENT_INSTRUCTIONS, } from "./defaults.js";
|
|
1
2
|
export { managedUserEmailAllowed } from "./managed-user-admission.js";
|
|
2
3
|
export * from "./realtime-voice-pricing.js";
|
|
3
4
|
export * from "./web-search.js";
|
|
@@ -23,8 +24,6 @@ export declare const DEFAULT_MODEL_STREAM_IDLE_TIMEOUT_MS = 300000;
|
|
|
23
24
|
* window (reasoning summaries stream as progress).
|
|
24
25
|
*/
|
|
25
26
|
export declare const DEFAULT_MODEL_STREAM_PROGRESS_TIMEOUT_MS = 600000;
|
|
26
|
-
export declare const DEFAULT_OPENROUTER_MODEL_ID: "openrouter/nvidia/nemotron-3-super-120b-a12b:free";
|
|
27
|
-
export declare const DEFAULT_MODEL_COST_POLICY_JSON: string;
|
|
28
27
|
export declare const SANDBOX_ARCHIVE_CAPTURE_MAX_TIMEOUT_MS: number;
|
|
29
28
|
export declare const SANDBOX_ARCHIVE_CAPTURE_SETTLEMENT_GRACE_MS = 10000;
|
|
30
29
|
export declare const SANDBOX_DEADLINE_COMMAND_STOP_GRACE_MS = 120000;
|
|
@@ -33,42 +32,12 @@ export declare const GOOGLE_DRIVE_PROVIDER_REQUEST_TIMEOUT_MAX_MS = 60000;
|
|
|
33
32
|
export declare const GOOGLE_DRIVE_PROVIDER_RETRY_DELAY_MAX_MS = 60000;
|
|
34
33
|
export declare const SANDBOX_LIFECYCLE_TRANSITION_MAX_WAIT_MS: number;
|
|
35
34
|
export declare const SANDBOX_LIFECYCLE_RETRY_HANDOFF_GRACE_MS = 10000;
|
|
36
|
-
/** Default pacing between consecutive no-input goal continuations. */
|
|
37
|
-
export declare const DEFAULT_GOAL_IDLE_BACKOFF_MS: readonly number[];
|
|
38
|
-
export declare const DEFAULT_GOAL_IDLE_BACKOFF_MAX_MS = 600000;
|
|
39
35
|
/** The retained-image byte limit for one workspace: its override, else the deployment default. */
|
|
40
36
|
export declare function retainedImageWorkspaceQuotaBytes(settings: Pick<Settings, "retainedImageWorkspaceQuotaBytes" | "retainedImageWorkspaceQuotaOverrides">, workspaceId: string): number;
|
|
41
37
|
export declare const sandboxPreparationProfiles: Record<string, {
|
|
42
38
|
env: string[];
|
|
43
39
|
hooks: string[];
|
|
44
40
|
}>;
|
|
45
|
-
/**
|
|
46
|
-
* Placeholder token inside an agent-instructions persona template. The runtime
|
|
47
|
-
* substitutes the non-bypassable CORE (goal-loop ownership + the dynamic
|
|
48
|
-
* workspace-environment block) at this marker. A template that omits the
|
|
49
|
-
* marker still gets the CORE appended after it (a non-bypassable fail-safe),
|
|
50
|
-
* so a white-labelled persona can never drop the goal-loop contract or the
|
|
51
|
-
* environment metadata the agent depends on.
|
|
52
|
-
*/
|
|
53
|
-
export declare const AGENT_INSTRUCTIONS_CORE_PLACEHOLDER = "{{core}}";
|
|
54
|
-
/**
|
|
55
|
-
* Default per-workspace agent persona template. This is the BRAND + tool-usage
|
|
56
|
-
* opinion (the white-labellable surface): the general-assistant identity line,
|
|
57
|
-
* the framing/opinion lines, and the mount-path facts. Domain-specific tooling
|
|
58
|
-
* guidance (for example Terraform or Checkov) belongs in opt-in Skills.
|
|
59
|
-
*
|
|
60
|
-
* The CORE that MUST survive any override — the goal-loop ownership line (which
|
|
61
|
-
* names the opengeni__goal_* tools) and the dynamic workspace-environment block
|
|
62
|
-
* — is injected at AGENT_INSTRUCTIONS_CORE_PLACEHOLDER by the runtime, never
|
|
63
|
-
* baked into this overridable string.
|
|
64
|
-
*
|
|
65
|
-
* INVARIANT: with no per-workspace override and an empty environment, the
|
|
66
|
-
* runtime's composed instructions are byte-for-byte pinned by a runtime test.
|
|
67
|
-
* The template below is joined by " ", followed by " " + the placeholder.
|
|
68
|
-
* Changing a single character here changes that default; update the pin
|
|
69
|
-
* intentionally.
|
|
70
|
-
*/
|
|
71
|
-
export declare const DEFAULT_AGENT_INSTRUCTIONS: string;
|
|
72
41
|
export declare const McpServerConnectionRefSchema: z.ZodObject<{
|
|
73
42
|
connectionId: z.ZodOptional<z.ZodString>;
|
|
74
43
|
accountSelection: z.ZodOptional<z.ZodLiteral<"all_eligible">>;
|
|
@@ -111,6 +80,7 @@ declare const SettingsSchema: z.ZodObject<{
|
|
|
111
80
|
deploymentRevision: z.ZodDefault<z.ZodString>;
|
|
112
81
|
serverVersion: z.ZodOptional<z.ZodString>;
|
|
113
82
|
databaseUrl: z.ZodDefault<z.ZodString>;
|
|
83
|
+
databaseNotificationUrl: z.ZodOptional<z.ZodString>;
|
|
114
84
|
apiDatabasePoolMax: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
115
85
|
databasePreparedStatements: z.ZodOptional<z.ZodPreprocess<z.ZodBoolean>>;
|
|
116
86
|
dbSchema: z.ZodDefault<z.ZodString>;
|
|
@@ -806,6 +776,14 @@ declare const SettingsSchema: z.ZodObject<{
|
|
|
806
776
|
codexResponsesWebSocketEnabled: z.ZodDefault<z.ZodPreprocess<z.ZodBoolean>>;
|
|
807
777
|
openaiResponsesWebSocketEnabled: z.ZodDefault<z.ZodPreprocess<z.ZodBoolean>>;
|
|
808
778
|
lazyToolSearchEnabled: z.ZodDefault<z.ZodPreprocess<z.ZodBoolean>>;
|
|
779
|
+
decisionModelProvider: z.ZodOptional<z.ZodEnum<{
|
|
780
|
+
jev: "jev";
|
|
781
|
+
openai: "openai";
|
|
782
|
+
openrouter: "openrouter";
|
|
783
|
+
}>>;
|
|
784
|
+
decisionModelId: z.ZodOptional<z.ZodString>;
|
|
785
|
+
decisionModelApiKey: z.ZodOptional<z.ZodString>;
|
|
786
|
+
decisionModelBaseUrl: z.ZodOptional<z.ZodString>;
|
|
809
787
|
codexFleetPolicyShadowEnabled: z.ZodDefault<z.ZodPreprocess<z.ZodBoolean>>;
|
|
810
788
|
subscriptionCoreShadowEnabled: z.ZodDefault<z.ZodPreprocess<z.ZodBoolean>>;
|
|
811
789
|
subscriptionCrossProviderFailoverEnabled: z.ZodDefault<z.ZodPreprocess<z.ZodBoolean>>;
|
|
@@ -1424,15 +1402,23 @@ export type VoiceInputProviderConfig = {
|
|
|
1424
1402
|
};
|
|
1425
1403
|
/** The deployment's Jev key, or undefined when it is missing or a placeholder. */
|
|
1426
1404
|
export declare function usableJevApiKey(settings: Pick<Settings, "jevApiKey">): string | undefined;
|
|
1405
|
+
export type DecisionModelSettings = Pick<Settings, "decisionModelProvider" | "decisionModelId" | "decisionModelApiKey" | "decisionModelBaseUrl">;
|
|
1406
|
+
/** Explicit deployment credentials only. Compatibility is code-search-only. */
|
|
1407
|
+
export declare function decisionModelConfiguration(settings: DecisionModelSettings & Partial<Pick<Settings, "jevApiKey" | "jevModel" | "jevBaseUrl">>, allowLegacyCodeSearch?: boolean): {
|
|
1408
|
+
provider: "jev" | "openai" | "openrouter";
|
|
1409
|
+
model: string;
|
|
1410
|
+
apiKey: string;
|
|
1411
|
+
baseUrl?: string;
|
|
1412
|
+
} | undefined;
|
|
1427
1413
|
/** Deployment half of agent configuration: hard capability limits. */
|
|
1428
1414
|
export declare function agentConfigDeploymentPolicy(settings: FirstPartyMcpToolPolicySettings & Pick<Settings, "webSearchEnabled">): AgentConfigDeploymentLimits;
|
|
1429
1415
|
/**
|
|
1430
1416
|
* Deployment half of the `code_search` decision. `available` is false when
|
|
1431
|
-
* the mode is off or no usable
|
|
1417
|
+
* the mode is off or no usable decision model is configured; workspaces then cannot
|
|
1432
1418
|
* turn it on. `workspaceDefault` applies to workspaces without their own
|
|
1433
1419
|
* setting.
|
|
1434
1420
|
*/
|
|
1435
|
-
export declare function codeSearchDeploymentPolicy(settings: Pick<Settings, "codeSearchMode" | "jevApiKey">): CodeSearchDeploymentPolicy;
|
|
1421
|
+
export declare function codeSearchDeploymentPolicy(settings: Pick<Settings, "codeSearchMode" | "jevApiKey"> & DecisionModelSettings): CodeSearchDeploymentPolicy;
|
|
1436
1422
|
/**
|
|
1437
1423
|
* Reject empty / template secrets so `.env.example` placeholders like
|
|
1438
1424
|
* `your-key` cannot advertise voice input as available and then 401 upstream.
|
|
@@ -1817,7 +1803,9 @@ export declare const RegistryProviderKind: z.ZodEnum<{
|
|
|
1817
1803
|
"claude-subscription-organization": "claude-subscription-organization";
|
|
1818
1804
|
"claude-subscription-workspace": "claude-subscription-workspace";
|
|
1819
1805
|
"codex-subscription": "codex-subscription";
|
|
1806
|
+
"direct-azure-organization": "direct-azure-organization";
|
|
1820
1807
|
"direct-azure-workspace": "direct-azure-workspace";
|
|
1808
|
+
"direct-openai-organization": "direct-openai-organization";
|
|
1821
1809
|
"direct-openai-workspace": "direct-openai-workspace";
|
|
1822
1810
|
"openrouter-organization": "openrouter-organization";
|
|
1823
1811
|
"openrouter-workspace": "openrouter-workspace";
|
|
@@ -1878,7 +1866,9 @@ declare const RegistryProviderSchema: z.ZodObject<{
|
|
|
1878
1866
|
"claude-subscription-organization": "claude-subscription-organization";
|
|
1879
1867
|
"claude-subscription-workspace": "claude-subscription-workspace";
|
|
1880
1868
|
"codex-subscription": "codex-subscription";
|
|
1869
|
+
"direct-azure-organization": "direct-azure-organization";
|
|
1881
1870
|
"direct-azure-workspace": "direct-azure-workspace";
|
|
1871
|
+
"direct-openai-organization": "direct-openai-organization";
|
|
1882
1872
|
"direct-openai-workspace": "direct-openai-workspace";
|
|
1883
1873
|
"openrouter-organization": "openrouter-organization";
|
|
1884
1874
|
"openrouter-workspace": "openrouter-workspace";
|
|
@@ -2137,6 +2127,15 @@ export declare const WORKSPACE_OPPER_PROVIDER_ID: "workspace-opper";
|
|
|
2137
2127
|
export declare const WORKSPACE_OPPER_MODEL_ID_PREFIX: "workspace-opper/";
|
|
2138
2128
|
export declare const ORGANIZATION_OPPER_PROVIDER_ID: "organization-opper";
|
|
2139
2129
|
export declare const ORGANIZATION_OPPER_MODEL_ID_PREFIX: "organization-opper/";
|
|
2130
|
+
/**
|
|
2131
|
+
* Organization-owned OpenAI and Azure OpenAI: one connection each (an API key,
|
|
2132
|
+
* plus a resource endpoint for Azure) whose curated models (Azure deployments)
|
|
2133
|
+
* inherit into shared workspaces.
|
|
2134
|
+
*/
|
|
2135
|
+
export declare const ORGANIZATION_OPENAI_PROVIDER_ID: "organization-openai";
|
|
2136
|
+
export declare const ORGANIZATION_OPENAI_MODEL_ID_PREFIX: "organization-openai/";
|
|
2137
|
+
export declare const ORGANIZATION_AZURE_OPENAI_PROVIDER_ID: "organization-azure-openai";
|
|
2138
|
+
export declare const ORGANIZATION_AZURE_OPENAI_MODEL_ID_PREFIX: "organization-azure-openai/";
|
|
2140
2139
|
/** Opper's OpenAI-compatible Chat Completions surface (Bearer key). */
|
|
2141
2140
|
export declare const OPPER_BASE_URL: "https://api.opper.ai/v3/compat";
|
|
2142
2141
|
export declare const ModelCostClass: z.ZodEnum<{
|
|
@@ -4176,6 +4175,43 @@ export declare function withOrganizationOpperCredential(settings: Settings, apiK
|
|
|
4176
4175
|
upstreamModelId: string;
|
|
4177
4176
|
label?: string | null;
|
|
4178
4177
|
}[]): Settings;
|
|
4178
|
+
/** The organization's own OpenAI or Azure OpenAI key (a direct, non-gateway route). */
|
|
4179
|
+
export type OrganizationDirectModelProvider = "openai" | "azure_openai";
|
|
4180
|
+
/** The organization direct route a product model id belongs to, if any. */
|
|
4181
|
+
export declare function organizationDirectModelProviderOf(modelId: string | null | undefined): OrganizationDirectModelProvider | null;
|
|
4182
|
+
export declare function organizationDirectModelIdPrefix(provider: OrganizationDirectModelProvider): string;
|
|
4183
|
+
/** Secret-free organization OpenAI or Azure OpenAI catalog overlay (models, and Azure's endpoint). */
|
|
4184
|
+
export declare function withOrganizationDirectCatalogProvider(settings: Settings, provider: OrganizationDirectModelProvider, input: {
|
|
4185
|
+
endpoint?: string | null | undefined;
|
|
4186
|
+
models: readonly {
|
|
4187
|
+
upstreamModelId: string;
|
|
4188
|
+
label?: string | null;
|
|
4189
|
+
}[];
|
|
4190
|
+
}): Settings;
|
|
4191
|
+
/** Runtime overlay after the worker resolves the organization's encrypted key. */
|
|
4192
|
+
export declare function withOrganizationDirectCredential(settings: Settings, provider: OrganizationDirectModelProvider, apiKey: string, input: {
|
|
4193
|
+
endpoint?: string | null | undefined;
|
|
4194
|
+
models: readonly {
|
|
4195
|
+
upstreamModelId: string;
|
|
4196
|
+
label?: string | null;
|
|
4197
|
+
}[];
|
|
4198
|
+
}): Settings;
|
|
4199
|
+
/** Secret-free organization Azure OpenAI catalog overlay (endpoint + deployments). */
|
|
4200
|
+
export declare function withOrganizationAzureOpenAICatalogProvider(settings: Settings, input: {
|
|
4201
|
+
endpoint: string | null | undefined;
|
|
4202
|
+
models: readonly {
|
|
4203
|
+
upstreamModelId: string;
|
|
4204
|
+
label?: string | null;
|
|
4205
|
+
}[];
|
|
4206
|
+
}): Settings;
|
|
4207
|
+
/** Runtime overlay after the worker resolves the organization's encrypted Azure key. */
|
|
4208
|
+
export declare function withOrganizationAzureOpenAICredential(settings: Settings, apiKey: string, input: {
|
|
4209
|
+
endpoint: string | null | undefined;
|
|
4210
|
+
models: readonly {
|
|
4211
|
+
upstreamModelId: string;
|
|
4212
|
+
label?: string | null;
|
|
4213
|
+
}[];
|
|
4214
|
+
}): Settings;
|
|
4179
4215
|
/** Secret-free organization Vercel AI Gateway catalog overlay. */
|
|
4180
4216
|
export declare function withOrganizationGatewayCatalogProvider(settings: Settings, customModels?: readonly {
|
|
4181
4217
|
upstreamModelId: string;
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AGENT_INSTRUCTIONS_CORE_PLACEHOLDER,
|
|
3
|
+
DEFAULT_AGENT_INSTRUCTIONS,
|
|
4
|
+
DEFAULT_GOAL_IDLE_BACKOFF_MAX_MS,
|
|
5
|
+
DEFAULT_GOAL_IDLE_BACKOFF_MS,
|
|
6
|
+
DEFAULT_MODEL_COST_POLICY_JSON,
|
|
7
|
+
DEFAULT_OPENROUTER_MODEL_ID
|
|
8
|
+
} from "./chunk-KW4MS4FH.js";
|
|
9
|
+
|
|
1
10
|
// src/managed-user-admission.ts
|
|
2
11
|
function managedUserEmailAllowed(allowedUserEmails, email) {
|
|
3
12
|
return allowedUserEmails === void 0 || typeof email === "string" && allowedUserEmails.some((allowed2) => allowed2.toLowerCase() === email.trim().toLowerCase());
|
|
@@ -885,10 +894,6 @@ var DEFAULT_MODEL_STREAM_IDLE_TIMEOUT_MS = 3e5;
|
|
|
885
894
|
var DEFAULT_MODEL_STREAM_PROGRESS_TIMEOUT_MS = 6e5;
|
|
886
895
|
var envName = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
887
896
|
var registryId = /^[A-Za-z0-9_-]+$/;
|
|
888
|
-
var DEFAULT_OPENROUTER_MODEL_ID = "openrouter/nvidia/nemotron-3-super-120b-a12b:free";
|
|
889
|
-
var DEFAULT_MODEL_COST_POLICY_JSON = JSON.stringify({
|
|
890
|
-
[DEFAULT_OPENROUTER_MODEL_ID]: "free"
|
|
891
|
-
});
|
|
892
897
|
var SANDBOX_ARCHIVE_CAPTURE_MAX_TIMEOUT_MS = 60 * 6e4;
|
|
893
898
|
var SANDBOX_ARCHIVE_CAPTURE_SETTLEMENT_GRACE_MS = 1e4;
|
|
894
899
|
var SANDBOX_DEADLINE_COMMAND_STOP_GRACE_MS = 12e4;
|
|
@@ -911,8 +916,6 @@ var EnvBoolean = z5.preprocess((value) => {
|
|
|
911
916
|
return value;
|
|
912
917
|
}, z5.boolean());
|
|
913
918
|
var PublicHttpUrl = z5.string().url().max(2048).refine((value) => /^https?:\/\//iu.test(value), "must be an http(s) URL");
|
|
914
|
-
var DEFAULT_GOAL_IDLE_BACKOFF_MS = [3e3, 3e4, 12e4, 3e5];
|
|
915
|
-
var DEFAULT_GOAL_IDLE_BACKOFF_MAX_MS = 6e5;
|
|
916
919
|
var EnvGoalIdleBackoffMs = z5.preprocess((value) => {
|
|
917
920
|
if (typeof value !== "string") return value;
|
|
918
921
|
const source = value.trim();
|
|
@@ -1018,21 +1021,6 @@ var sandboxPreparationProfiles = {
|
|
|
1018
1021
|
hooks: []
|
|
1019
1022
|
}
|
|
1020
1023
|
};
|
|
1021
|
-
var AGENT_INSTRUCTIONS_CORE_PLACEHOLDER = "{{core}}";
|
|
1022
|
-
var DEFAULT_AGENT_INSTRUCTIONS = [
|
|
1023
|
-
"You are an Opengeni workspace agent: a general assistant for questions, writing, research, analysis, and technical work.",
|
|
1024
|
-
"Follow the user's task and the applicable Skill instructions for the current role.",
|
|
1025
|
-
"When a task needs files or commands, work inside the sandbox workspace with the filesystem and shell tools.",
|
|
1026
|
-
"Repository resources are mounted under repos/<host>/<owner>/<repo> unless the session specifies another collision-free mount path.",
|
|
1027
|
-
"File resources are mounted under .opengeni/files/<file-id>/ unless the session specifies another mount path.",
|
|
1028
|
-
"Attached files are mounted read-only; copy them before modifying.",
|
|
1029
|
-
"Installed and selected Skills appear in the session Skill index; follow its reading instructions and any role-specific guidance.",
|
|
1030
|
-
"Provider CLIs such as gh, glab, and az may be pre-authenticated by the host through brokered git credentials or a sandbox preparation profile; try them before asking for credentials.",
|
|
1031
|
-
"When the Git repository you change has a remote and git provider credentials are available, work on a focused branch and open a pull request.",
|
|
1032
|
-
"Otherwise leave changes in the working tree and do not create or mention branches, commits, or pull requests unless the user asks; if the repository has a remote, say the changes are not pushed, and if the user asks for something you cannot make, say what blocks it.",
|
|
1033
|
-
"Answer questions directly and briefly; after making changes, say what changed, how you checked it, and anything still blocked.",
|
|
1034
|
-
AGENT_INSTRUCTIONS_CORE_PLACEHOLDER
|
|
1035
|
-
].join(" ");
|
|
1036
1024
|
var McpServerConnectionRefSchema = PublicMcpServerConnectionRef;
|
|
1037
1025
|
var McpOperationRecoverySchema = z5.record(
|
|
1038
1026
|
z5.string().min(1).max(512).regex(/^\S+$/u),
|
|
@@ -1057,6 +1045,9 @@ var SettingsSchema = z5.object({
|
|
|
1057
1045
|
// Absent on dev/source builds — consumers must treat it as optional.
|
|
1058
1046
|
serverVersion: z5.string().optional(),
|
|
1059
1047
|
databaseUrl: z5.string().default("postgres://opengeni:opengeni@127.0.0.1:5432/opengeni"),
|
|
1048
|
+
// LISTEN needs a session-pinned connection. Direct deployments reuse the
|
|
1049
|
+
// ordinary URL; transaction poolers supply this separate direct endpoint.
|
|
1050
|
+
databaseNotificationUrl: z5.string().optional(),
|
|
1060
1051
|
// API application pool only. Managed auth owns its separate pool; readiness
|
|
1061
1052
|
// reuses the application handle. Keep the historical default for existing
|
|
1062
1053
|
// deployments and let operators budget this per process with replica counts.
|
|
@@ -1601,6 +1592,12 @@ var SettingsSchema = z5.object({
|
|
|
1601
1592
|
// the Codex rollout so an emergency Codex opt-out cannot disable every model.
|
|
1602
1593
|
// OPENGENI_LAZY_TOOL_SEARCH_ENABLED
|
|
1603
1594
|
lazyToolSearchEnabled: EnvBoolean.default(true),
|
|
1595
|
+
// Typed decision-model category, separate from conversational models. Explicit
|
|
1596
|
+
// configuration is shared by tool discovery and code search; no account fallback.
|
|
1597
|
+
decisionModelProvider: z5.enum(["jev", "openai", "openrouter"]).optional(),
|
|
1598
|
+
decisionModelId: z5.string().trim().min(1).optional(),
|
|
1599
|
+
decisionModelApiKey: z5.string().optional(),
|
|
1600
|
+
decisionModelBaseUrl: z5.string().url().optional(),
|
|
1604
1601
|
// Decision-observability fence. When enabled, the worker emits one
|
|
1605
1602
|
// bounded, metadata-only adaptive-policy replay record alongside the unchanged
|
|
1606
1603
|
// sticky-sharded decision. It never changes placement/admission/failover.
|
|
@@ -2595,6 +2592,26 @@ function usableDeploymentSecret(value) {
|
|
|
2595
2592
|
function usableJevApiKey(settings) {
|
|
2596
2593
|
return usableDeploymentSecret(settings.jevApiKey);
|
|
2597
2594
|
}
|
|
2595
|
+
function decisionModelConfiguration(settings, allowLegacyCodeSearch = false) {
|
|
2596
|
+
const explicit = settings.decisionModelProvider !== void 0 || settings.decisionModelId !== void 0 || settings.decisionModelApiKey !== void 0 || settings.decisionModelBaseUrl !== void 0;
|
|
2597
|
+
if (explicit) {
|
|
2598
|
+
const apiKey2 = usableDeploymentSecret(settings.decisionModelApiKey);
|
|
2599
|
+
if (!settings.decisionModelProvider || !settings.decisionModelId || !apiKey2) return void 0;
|
|
2600
|
+
return {
|
|
2601
|
+
provider: settings.decisionModelProvider,
|
|
2602
|
+
model: settings.decisionModelId,
|
|
2603
|
+
apiKey: apiKey2,
|
|
2604
|
+
...settings.decisionModelBaseUrl ? { baseUrl: settings.decisionModelBaseUrl } : {}
|
|
2605
|
+
};
|
|
2606
|
+
}
|
|
2607
|
+
const apiKey = allowLegacyCodeSearch ? usableJevApiKey(settings) : void 0;
|
|
2608
|
+
return apiKey ? {
|
|
2609
|
+
provider: "jev",
|
|
2610
|
+
model: settings.jevModel ?? "jev-latest",
|
|
2611
|
+
apiKey,
|
|
2612
|
+
...settings.jevBaseUrl ? { baseUrl: settings.jevBaseUrl } : {}
|
|
2613
|
+
} : void 0;
|
|
2614
|
+
}
|
|
2598
2615
|
function agentConfigDeploymentPolicy(settings) {
|
|
2599
2616
|
return agentConfigDeploymentLimitsFromAllowlist(
|
|
2600
2617
|
resolveFirstPartyMcpToolPolicy(settings).allowed,
|
|
@@ -2602,7 +2619,7 @@ function agentConfigDeploymentPolicy(settings) {
|
|
|
2602
2619
|
);
|
|
2603
2620
|
}
|
|
2604
2621
|
function codeSearchDeploymentPolicy(settings) {
|
|
2605
|
-
const available = settings.codeSearchMode !== "off" &&
|
|
2622
|
+
const available = settings.codeSearchMode !== "off" && decisionModelConfiguration(settings, true) !== void 0;
|
|
2606
2623
|
if (!available) return { available: false, workspaceDefault: "off" };
|
|
2607
2624
|
const workspaceDefault = settings.codeSearchMode === "default_on" ? "on" : settings.codeSearchMode === "experiment" ? "split" : "off";
|
|
2608
2625
|
return { available, workspaceDefault };
|
|
@@ -3045,6 +3062,8 @@ var RegistryProviderKind = z5.enum([
|
|
|
3045
3062
|
"vercel-gateway-organization",
|
|
3046
3063
|
"direct-openai-workspace",
|
|
3047
3064
|
"direct-azure-workspace",
|
|
3065
|
+
"direct-openai-organization",
|
|
3066
|
+
"direct-azure-organization",
|
|
3048
3067
|
"openrouter-workspace",
|
|
3049
3068
|
"openrouter-organization",
|
|
3050
3069
|
"opper-workspace",
|
|
@@ -3219,6 +3238,10 @@ var WORKSPACE_OPPER_PROVIDER_ID = "workspace-opper";
|
|
|
3219
3238
|
var WORKSPACE_OPPER_MODEL_ID_PREFIX = "workspace-opper/";
|
|
3220
3239
|
var ORGANIZATION_OPPER_PROVIDER_ID = "organization-opper";
|
|
3221
3240
|
var ORGANIZATION_OPPER_MODEL_ID_PREFIX = "organization-opper/";
|
|
3241
|
+
var ORGANIZATION_OPENAI_PROVIDER_ID = "organization-openai";
|
|
3242
|
+
var ORGANIZATION_OPENAI_MODEL_ID_PREFIX = "organization-openai/";
|
|
3243
|
+
var ORGANIZATION_AZURE_OPENAI_PROVIDER_ID = "organization-azure-openai";
|
|
3244
|
+
var ORGANIZATION_AZURE_OPENAI_MODEL_ID_PREFIX = "organization-azure-openai/";
|
|
3222
3245
|
var OPPER_BASE_URL = "https://api.opper.ai/v3/compat";
|
|
3223
3246
|
var RESERVED_MODEL_PROVIDER_IDS = /* @__PURE__ */ new Set([
|
|
3224
3247
|
"openai",
|
|
@@ -3234,6 +3257,8 @@ var RESERVED_MODEL_PROVIDER_IDS = /* @__PURE__ */ new Set([
|
|
|
3234
3257
|
OPPER_PROVIDER_ID,
|
|
3235
3258
|
WORKSPACE_OPPER_PROVIDER_ID,
|
|
3236
3259
|
ORGANIZATION_OPPER_PROVIDER_ID,
|
|
3260
|
+
ORGANIZATION_OPENAI_PROVIDER_ID,
|
|
3261
|
+
ORGANIZATION_AZURE_OPENAI_PROVIDER_ID,
|
|
3237
3262
|
"organization-anthropic",
|
|
3238
3263
|
"organization-claude-subscription",
|
|
3239
3264
|
"workspace-anthropic",
|
|
@@ -4457,6 +4482,7 @@ function getSettings(source = process.env) {
|
|
|
4457
4482
|
deploymentRevision: optional("OPENGENI_DEPLOYMENT_REVISION") ?? optional("SOURCE_VERSION") ?? optional("GITHUB_SHA"),
|
|
4458
4483
|
serverVersion: optional("OPENGENI_SERVER_VERSION"),
|
|
4459
4484
|
databaseUrl: optional("OPENGENI_DATABASE_URL"),
|
|
4485
|
+
databaseNotificationUrl: optional("OPENGENI_DATABASE_NOTIFICATION_URL"),
|
|
4460
4486
|
apiDatabasePoolMax: optional("OPENGENI_API_DATABASE_POOL_MAX"),
|
|
4461
4487
|
databasePreparedStatements: optional("OPENGENI_DATABASE_PREPARED_STATEMENTS"),
|
|
4462
4488
|
dbSchema: optional("OPENGENI_DB_SCHEMA"),
|
|
@@ -4705,6 +4731,10 @@ function getSettings(source = process.env) {
|
|
|
4705
4731
|
codexResponsesWebSocketEnabled: optional("OPENGENI_CODEX_RESPONSES_WEBSOCKET_ENABLED"),
|
|
4706
4732
|
openaiResponsesWebSocketEnabled: optional("OPENGENI_OPENAI_RESPONSES_WEBSOCKET_ENABLED"),
|
|
4707
4733
|
lazyToolSearchEnabled: optional("OPENGENI_LAZY_TOOL_SEARCH_ENABLED"),
|
|
4734
|
+
decisionModelProvider: optional("OPENGENI_DECISION_MODEL_PROVIDER"),
|
|
4735
|
+
decisionModelId: optional("OPENGENI_DECISION_MODEL_ID"),
|
|
4736
|
+
decisionModelApiKey: optional("OPENGENI_DECISION_MODEL_API_KEY"),
|
|
4737
|
+
decisionModelBaseUrl: optional("OPENGENI_DECISION_MODEL_BASE_URL"),
|
|
4708
4738
|
codexFleetPolicyShadowEnabled: optional("OPENGENI_CODEX_FLEET_POLICY_SHADOW_ENABLED"),
|
|
4709
4739
|
subscriptionCoreShadowEnabled: optional("OPENGENI_SUBSCRIPTION_CORE_SHADOW_ENABLED"),
|
|
4710
4740
|
subscriptionCrossProviderFailoverEnabled: optional(
|
|
@@ -5930,6 +5960,102 @@ function withOrganizationOpperCredential(settings, apiKey, customModels = []) {
|
|
|
5930
5960
|
);
|
|
5931
5961
|
return { ...catalog, modelProvidersJson: JSON.stringify(providers) };
|
|
5932
5962
|
}
|
|
5963
|
+
var ORGANIZATION_DIRECT_ROUTES = {
|
|
5964
|
+
openai: {
|
|
5965
|
+
kind: "direct-openai-organization",
|
|
5966
|
+
id: ORGANIZATION_OPENAI_PROVIDER_ID,
|
|
5967
|
+
prefix: ORGANIZATION_OPENAI_MODEL_ID_PREFIX,
|
|
5968
|
+
label: "Organization OpenAI",
|
|
5969
|
+
wireProfile: "openai"
|
|
5970
|
+
},
|
|
5971
|
+
azure_openai: {
|
|
5972
|
+
kind: "direct-azure-organization",
|
|
5973
|
+
id: ORGANIZATION_AZURE_OPENAI_PROVIDER_ID,
|
|
5974
|
+
prefix: ORGANIZATION_AZURE_OPENAI_MODEL_ID_PREFIX,
|
|
5975
|
+
label: "Organization Azure OpenAI",
|
|
5976
|
+
wireProfile: "azure-openai"
|
|
5977
|
+
}
|
|
5978
|
+
};
|
|
5979
|
+
function organizationDirectModelProviderOf(modelId) {
|
|
5980
|
+
if (modelId?.startsWith(ORGANIZATION_OPENAI_MODEL_ID_PREFIX)) return "openai";
|
|
5981
|
+
if (modelId?.startsWith(ORGANIZATION_AZURE_OPENAI_MODEL_ID_PREFIX)) return "azure_openai";
|
|
5982
|
+
return null;
|
|
5983
|
+
}
|
|
5984
|
+
function organizationDirectModelIdPrefix(provider) {
|
|
5985
|
+
return ORGANIZATION_DIRECT_ROUTES[provider].prefix;
|
|
5986
|
+
}
|
|
5987
|
+
function organizationDirectRegistryProvider(settings, provider, input) {
|
|
5988
|
+
const route = ORGANIZATION_DIRECT_ROUTES[provider];
|
|
5989
|
+
const baseUrl = provider === "openai" ? "https://api.openai.com/v1" : input.endpoint ? organizationAzureOpenAIBaseUrl(input.endpoint) : null;
|
|
5990
|
+
if (!baseUrl) return null;
|
|
5991
|
+
const seen = /* @__PURE__ */ new Set();
|
|
5992
|
+
const models = [];
|
|
5993
|
+
for (const model of input.models) {
|
|
5994
|
+
if (seen.has(model.upstreamModelId)) continue;
|
|
5995
|
+
seen.add(model.upstreamModelId);
|
|
5996
|
+
models.push({
|
|
5997
|
+
id: `${route.prefix}${model.upstreamModelId}`,
|
|
5998
|
+
upstreamModelId: model.upstreamModelId,
|
|
5999
|
+
aliases: [],
|
|
6000
|
+
label: model.label?.trim() || model.upstreamModelId,
|
|
6001
|
+
capabilities: legacyModelCapabilities(settings, {
|
|
6002
|
+
reasoningEffort: false,
|
|
6003
|
+
hostedWebSearch: false
|
|
6004
|
+
}),
|
|
6005
|
+
toolOutputTruncationTokens: settings.modelToolOutputTruncationTokens
|
|
6006
|
+
});
|
|
6007
|
+
}
|
|
6008
|
+
if (models.length === 0) return null;
|
|
6009
|
+
return {
|
|
6010
|
+
kind: route.kind,
|
|
6011
|
+
id: route.id,
|
|
6012
|
+
label: route.label,
|
|
6013
|
+
api: "responses",
|
|
6014
|
+
wireProfile: route.wireProfile,
|
|
6015
|
+
baseUrl,
|
|
6016
|
+
...input.apiKey ? { apiKey: input.apiKey } : {},
|
|
6017
|
+
models
|
|
6018
|
+
};
|
|
6019
|
+
}
|
|
6020
|
+
function organizationAzureOpenAIBaseUrl(endpoint) {
|
|
6021
|
+
let url;
|
|
6022
|
+
try {
|
|
6023
|
+
url = new URL(endpoint);
|
|
6024
|
+
} catch {
|
|
6025
|
+
return null;
|
|
6026
|
+
}
|
|
6027
|
+
if (url.protocol !== "https:" || url.username || url.password || url.port || url.search || url.hash || !/^[a-z0-9-]+\.openai\.azure\.com$/i.test(url.hostname) || !["", "/", "/openai/v1", "/openai/v1/"].includes(url.pathname))
|
|
6028
|
+
return null;
|
|
6029
|
+
return `${url.origin}/openai/v1`;
|
|
6030
|
+
}
|
|
6031
|
+
function withOrganizationDirectProvider(settings, provider, overlay) {
|
|
6032
|
+
if (!overlay) return settings;
|
|
6033
|
+
const providers = parseModelProvidersJson(settings.modelProvidersJson).filter(
|
|
6034
|
+
(candidate) => candidate.id !== ORGANIZATION_DIRECT_ROUTES[provider].id
|
|
6035
|
+
);
|
|
6036
|
+
return { ...settings, modelProvidersJson: JSON.stringify([...providers, overlay]) };
|
|
6037
|
+
}
|
|
6038
|
+
function withOrganizationDirectCatalogProvider(settings, provider, input) {
|
|
6039
|
+
return withOrganizationDirectProvider(
|
|
6040
|
+
settings,
|
|
6041
|
+
provider,
|
|
6042
|
+
organizationDirectRegistryProvider(settings, provider, input)
|
|
6043
|
+
);
|
|
6044
|
+
}
|
|
6045
|
+
function withOrganizationDirectCredential(settings, provider, apiKey, input) {
|
|
6046
|
+
if (!apiKey.trim()) throw new Error(`organization ${provider} credential is empty`);
|
|
6047
|
+
return withOrganizationDirectProvider(
|
|
6048
|
+
settings,
|
|
6049
|
+
provider,
|
|
6050
|
+
organizationDirectRegistryProvider(settings, provider, { ...input, apiKey })
|
|
6051
|
+
);
|
|
6052
|
+
}
|
|
6053
|
+
function withOrganizationAzureOpenAICatalogProvider(settings, input) {
|
|
6054
|
+
return withOrganizationDirectCatalogProvider(settings, "azure_openai", input);
|
|
6055
|
+
}
|
|
6056
|
+
function withOrganizationAzureOpenAICredential(settings, apiKey, input) {
|
|
6057
|
+
return withOrganizationDirectCredential(settings, "azure_openai", apiKey, input);
|
|
6058
|
+
}
|
|
5933
6059
|
function withOrganizationGatewayCatalogProvider(settings, customModels = []) {
|
|
5934
6060
|
if (customModels.length === 0) return settings;
|
|
5935
6061
|
const providers = parseModelProvidersJson(settings.modelProvidersJson).filter(
|
|
@@ -6151,6 +6277,8 @@ function registryCredentialSource(provider) {
|
|
|
6151
6277
|
case "anthropic-organization":
|
|
6152
6278
|
case "openrouter-organization":
|
|
6153
6279
|
case "opper-organization":
|
|
6280
|
+
case "direct-openai-organization":
|
|
6281
|
+
case "direct-azure-organization":
|
|
6154
6282
|
return { kind: "organization_connection", mechanism: "api_key" };
|
|
6155
6283
|
case "api-key":
|
|
6156
6284
|
case "vercel-gateway-managed":
|
|
@@ -6184,6 +6312,8 @@ function registryBilling(provider) {
|
|
|
6184
6312
|
case "anthropic-organization":
|
|
6185
6313
|
case "openrouter-organization":
|
|
6186
6314
|
case "opper-organization":
|
|
6315
|
+
case "direct-openai-organization":
|
|
6316
|
+
case "direct-azure-organization":
|
|
6187
6317
|
return { upstreamPayer: "organization", metering: "external" };
|
|
6188
6318
|
case "api-key":
|
|
6189
6319
|
case "vercel-gateway-managed":
|
|
@@ -6576,6 +6706,8 @@ var NON_CREDIT_POLICY_PROVIDER_IDS = /* @__PURE__ */ new Set([
|
|
|
6576
6706
|
ORGANIZATION_OPENROUTER_PROVIDER_ID,
|
|
6577
6707
|
WORKSPACE_OPPER_PROVIDER_ID,
|
|
6578
6708
|
ORGANIZATION_OPPER_PROVIDER_ID,
|
|
6709
|
+
ORGANIZATION_OPENAI_PROVIDER_ID,
|
|
6710
|
+
ORGANIZATION_AZURE_OPENAI_PROVIDER_ID,
|
|
6579
6711
|
"workspace-anthropic",
|
|
6580
6712
|
"organization-anthropic",
|
|
6581
6713
|
"workspace-claude-subscription",
|
|
@@ -7057,6 +7189,7 @@ function reviewedProviderModelPricing(settings, provider, model, configured) {
|
|
|
7057
7189
|
}
|
|
7058
7190
|
break;
|
|
7059
7191
|
case "direct-openai-workspace":
|
|
7192
|
+
case "direct-openai-organization":
|
|
7060
7193
|
if (isDirectOpenAiApiBaseUrl(provider.baseUrl) && upstream.startsWith("gpt-")) {
|
|
7061
7194
|
priceId = upstream;
|
|
7062
7195
|
}
|
|
@@ -8729,7 +8862,7 @@ function validateModelCatalogSettings(settings, source = process.env) {
|
|
|
8729
8862
|
}
|
|
8730
8863
|
const providerIds = /* @__PURE__ */ new Set();
|
|
8731
8864
|
for (const provider of registryProviders) {
|
|
8732
|
-
if (provider.kind === "vercel-gateway-managed" || provider.kind === "vercel-gateway-workspace" || provider.kind === "vercel-gateway-organization" || provider.kind === "direct-openai-workspace" || provider.kind === "direct-azure-workspace" || provider.kind === "openrouter-workspace" || provider.kind === "openrouter-organization" || provider.kind === "opper-workspace" || provider.kind === "opper-organization" || provider.kind === "anthropic-organization" || provider.kind === "anthropic-workspace" || provider.kind === "claude-subscription-workspace" || provider.kind === "claude-subscription-organization" || provider.kind === "xai-subscription") {
|
|
8865
|
+
if (provider.kind === "vercel-gateway-managed" || provider.kind === "vercel-gateway-workspace" || provider.kind === "vercel-gateway-organization" || provider.kind === "direct-openai-workspace" || provider.kind === "direct-azure-workspace" || provider.kind === "direct-openai-organization" || provider.kind === "direct-azure-organization" || provider.kind === "openrouter-workspace" || provider.kind === "openrouter-organization" || provider.kind === "opper-workspace" || provider.kind === "opper-organization" || provider.kind === "anthropic-organization" || provider.kind === "anthropic-workspace" || provider.kind === "claude-subscription-workspace" || provider.kind === "claude-subscription-organization" || provider.kind === "xai-subscription") {
|
|
8733
8866
|
throw new Error(
|
|
8734
8867
|
`OPENGENI_MODEL_PROVIDERS_JSON provider kind ${provider.kind} is reserved for a reviewed Opengeni credential broker`
|
|
8735
8868
|
);
|
|
@@ -9220,8 +9353,12 @@ export {
|
|
|
9220
9353
|
OPPER_PROVIDER_ID,
|
|
9221
9354
|
OPPER_STREAM_PROGRESS_TIMEOUT_MS,
|
|
9222
9355
|
OPUS_5_5_AUTO_COMPACT_TOKEN_LIMIT,
|
|
9356
|
+
ORGANIZATION_AZURE_OPENAI_MODEL_ID_PREFIX,
|
|
9357
|
+
ORGANIZATION_AZURE_OPENAI_PROVIDER_ID,
|
|
9223
9358
|
ORGANIZATION_GATEWAY_MODEL_ID_PREFIX,
|
|
9224
9359
|
ORGANIZATION_GATEWAY_PROVIDER_ID,
|
|
9360
|
+
ORGANIZATION_OPENAI_MODEL_ID_PREFIX,
|
|
9361
|
+
ORGANIZATION_OPENAI_PROVIDER_ID,
|
|
9225
9362
|
ORGANIZATION_OPENROUTER_MODEL_ID_PREFIX,
|
|
9226
9363
|
ORGANIZATION_OPENROUTER_PROVIDER_ID,
|
|
9227
9364
|
ORGANIZATION_OPPER_MODEL_ID_PREFIX,
|
|
@@ -9321,6 +9458,7 @@ export {
|
|
|
9321
9458
|
configuredStaticUsageLimits,
|
|
9322
9459
|
contextInputBudgetTokens,
|
|
9323
9460
|
dbSearchPath,
|
|
9461
|
+
decisionModelConfiguration,
|
|
9324
9462
|
defaultModelPricing,
|
|
9325
9463
|
defaultVoiceInputPricing,
|
|
9326
9464
|
deploymentUnavailableFirstPartyMcpTools,
|
|
@@ -9353,6 +9491,8 @@ export {
|
|
|
9353
9491
|
modelCostClassForConfiguredModel,
|
|
9354
9492
|
opperCredentialProblem,
|
|
9355
9493
|
opperMaxOutputTokens,
|
|
9494
|
+
organizationDirectModelIdPrefix,
|
|
9495
|
+
organizationDirectModelProviderOf,
|
|
9356
9496
|
parseClaudeUsageHeaders,
|
|
9357
9497
|
parseClaudeUsageResponse,
|
|
9358
9498
|
parseExposedPorts,
|
|
@@ -9448,6 +9588,10 @@ export {
|
|
|
9448
9588
|
withClaudeConnectionCredential,
|
|
9449
9589
|
withCodexCatalogProvider,
|
|
9450
9590
|
withDirectModelProviders,
|
|
9591
|
+
withOrganizationAzureOpenAICatalogProvider,
|
|
9592
|
+
withOrganizationAzureOpenAICredential,
|
|
9593
|
+
withOrganizationDirectCatalogProvider,
|
|
9594
|
+
withOrganizationDirectCredential,
|
|
9451
9595
|
withOrganizationGatewayCatalogProvider,
|
|
9452
9596
|
withOrganizationGatewayCredential,
|
|
9453
9597
|
withOrganizationOpenRouterCatalogProvider,
|