@opengeni/core 1.0.2 → 1.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.
@@ -0,0 +1,17 @@
1
+ import { type Settings } from "@opengeni/config";
2
+ import type { EntitlementsPort } from "@opengeni/contracts";
3
+ import { type Database } from "@opengeni/db";
4
+ export type AgentRunAdmissionDenial = "insufficient_credits" | "allowance_exhausted" | "monthly_model_cost_limit" | "monthly_agent_run_limit";
5
+ /** Read-only admission shared by service-authored runs and goal Resume. */
6
+ export declare function agentRunAdmissionDenial(services: {
7
+ db: Database;
8
+ settings: Settings;
9
+ entitlements?: EntitlementsPort | null;
10
+ }, input: {
11
+ accountId: string;
12
+ workspaceId: string;
13
+ model: string;
14
+ requestedAgentRuns: number;
15
+ /** The accepted work's causal human, not the scheduler/service caller. */
16
+ initiatingHumanSubjectId?: string | null;
17
+ }): Promise<AgentRunAdmissionDenial | null>;
@@ -1,5 +1,5 @@
1
1
  import { type ConfiguredModel, type Settings } from "@opengeni/config";
2
- import { type DefaultModelSelection, type ReasoningEffort, type ScheduledTask, type WorkspaceSessionDefaults, type XaiProviderAccountAuthoritySnapshotV1, type ClaudeProviderAccountAuthoritySnapshotV1 } from "@opengeni/contracts";
2
+ import { type DefaultModelSelection, type ReasoningEffort, type ScheduledTask, type WorkspaceSessionDefaults, type XaiProviderAccountAuthoritySnapshotV1, type ClaudeProviderAccountAuthoritySnapshotV1, type BillingBalance } from "@opengeni/contracts";
3
3
  import { type Database } from "@opengeni/db";
4
4
  import { type WorkspaceModelSelection, type WorkspaceModelSelectionInput } from "./model-catalog.js";
5
5
  /** The model's own default effort, matching the web picker's choice. */
@@ -18,6 +18,7 @@ export type DefaultSessionModelInput = {
18
18
  * `organizationHoldsCredits`).
19
19
  */
20
20
  creditsAvailable: boolean;
21
+ creditBalance?: BillingBalance;
21
22
  };
22
23
  /**
23
24
  * Default model policy for a new chat or scheduled task that names no model.
@@ -36,8 +37,8 @@ export type DefaultSessionModelInput = {
36
37
  * configured credits default (`OPENGENI_CREDITS_DEFAULT_MODEL`, effort
37
38
  * clamped to what the model supports), or the first selectable
38
39
  * credits-billed model when that one is not selectable. When the
39
- * deployment default is already a selectable credits-billed model it is
40
- * never replaced: it keeps the deployment effort, except that it takes the
40
+ * deployment default is already a funded, selectable credits-billed model it
41
+ * keeps the deployment effort, except that it takes the
41
42
  * credits default effort when it is the credits default model itself.
42
43
  * 4. `deployment`: the deployment default with the deployment reasoning effort
43
44
  * when stably admissible; otherwise the first stably admissible catalog
@@ -57,6 +58,7 @@ export declare function creditsDefaultSessionModel(input: {
57
58
  settings: Settings;
58
59
  selections: readonly WorkspaceModelSelection[];
59
60
  workspaceSettings: unknown;
61
+ creditBalance?: BillingBalance;
60
62
  }): DefaultModelSelection | null;
61
63
  /**
62
64
  * Resolve the default for an already-loaded workspace selection. The credit
@@ -1,5 +1,5 @@
1
1
  import type { Settings } from "@opengeni/config";
2
- import type { ConnectionCredentialsPort, Document, DocumentAuthorityKind, GitHubAppApiPort, ScheduledTask, ScheduledTaskTriggerType, SessionAuthorizationPort, TurnInitiator } from "@opengeni/contracts";
2
+ import type { ConnectionCredentialsPort, Document, DocumentAuthorityKind, EntitlementsPort, GitHubAppApiPort, ScheduledTask, ScheduledTaskTriggerType, SessionAuthorizationPort, TurnInitiator } from "@opengeni/contracts";
3
3
  import type { Database, SessionWorkflowWakeDeliveryResult } from "@opengeni/db";
4
4
  import type { DocumentServices } from "@opengeni/documents";
5
5
  import type { EventBus } from "@opengeni/events";
@@ -134,6 +134,8 @@ export type AppDependencies = {
134
134
  */
135
135
  catalogSourceSettings?: Settings;
136
136
  db: Database;
137
+ /** Read-only host funding admission; unset uses the standalone billing ledger. */
138
+ entitlements?: EntitlementsPort | null;
137
139
  /**
138
140
  * Host-composed editable artifact engine. Standalone startup binds the same
139
141
  * native kernel/DB/object-store implementation; embedded hosts may inject an
@@ -1,18 +1,18 @@
1
1
  import { type Database, type KnowledgeContext } from "@opengeni/db";
2
2
  /** Retain actual message bytes, never a model-authored reconstruction of a confirmation. */
3
3
  export declare function retainKnowledgeMessage(db: Database, context: KnowledgeContext, messageId?: string): Promise<{
4
+ revisionId?: never;
4
5
  retained: boolean;
5
6
  reason: string;
6
7
  entryId?: never;
7
- revisionId?: never;
8
8
  outcome?: never;
9
9
  messageId?: never;
10
10
  reused?: never;
11
11
  } | {
12
+ revisionId?: never;
12
13
  retained: boolean;
13
14
  reason: string;
14
15
  entryId: string;
15
- revisionId?: never;
16
16
  outcome?: never;
17
17
  messageId?: never;
18
18
  reused?: never;
@@ -0,0 +1,488 @@
1
+ import { type Settings } from "@opengeni/config";
2
+ import { type GoalAdmissionPausedReason, type Session } from "@opengeni/contracts";
3
+ import { getWorkspaceModelPolicy, type Database } from "@opengeni/db";
4
+ import { agentRunAdmissionDenial } from "./billing/agent-run-admission.js";
5
+ export type GoalAdmissionBlock = {
6
+ pausedReason: GoalAdmissionPausedReason;
7
+ message: string;
8
+ };
9
+ /** Catalog membership never grants access to a connection or changes the selected model. */
10
+ export declare function goalContinuationModelDecision(input: {
11
+ settings: Settings;
12
+ workspaceModelPolicy: Awaited<ReturnType<typeof getWorkspaceModelPolicy>>;
13
+ inheritedModel: string;
14
+ codexCompactionMode?: Session["codexCompactionMode"];
15
+ latencyMode?: Session["latencyMode"];
16
+ }): {
17
+ model: string;
18
+ blocked: string | null;
19
+ pausedReason?: GoalAdmissionPausedReason;
20
+ };
21
+ /** The same scoped, secret-free catalog used at ordinary turn admission. */
22
+ export declare function resolveGoalModelAdmission(db: Database, settings: Settings, input: {
23
+ accountId: string;
24
+ workspaceId: string;
25
+ model: string;
26
+ codexCompactionMode?: Session["codexCompactionMode"];
27
+ latencyMode?: Session["latencyMode"];
28
+ }): Promise<{
29
+ model: string;
30
+ blocked: string | null;
31
+ pausedReason?: GoalAdmissionPausedReason;
32
+ settings: {
33
+ serviceName: string;
34
+ environment: string;
35
+ deploymentRevision: string;
36
+ serverVersion?: string | undefined;
37
+ databaseUrl: string;
38
+ apiDatabasePoolMax: number;
39
+ dbSchema: string;
40
+ rlsStrategy: "force" | "scoped";
41
+ runtimeDatabaseRole: string;
42
+ natsUrl: string;
43
+ temporalHost: string;
44
+ temporalNamespace: string;
45
+ temporalTaskQueue: string;
46
+ temporalTlsEnabled: boolean;
47
+ temporalApiKey?: string | undefined;
48
+ temporalTlsServerName?: string | undefined;
49
+ temporalTlsRootCaCertificateBase64?: string | undefined;
50
+ temporalTlsClientCertificateBase64?: string | undefined;
51
+ temporalTlsClientPrivateKeyBase64?: string | undefined;
52
+ startupDependencyRetryAttempts: number;
53
+ startupDependencyRetryInitialDelayMs: number;
54
+ startupDependencyRetryMaxDelayMs: number;
55
+ turnWorkerConcurrencyMode: "fixed" | "resource-based";
56
+ turnWorkerMaxConcurrentTurns: number;
57
+ turnWorkerTargetCpuUsage: number;
58
+ turnWorkerTargetMemoryUsage: number;
59
+ turnWorkerEmergencyMemoryUsage: number;
60
+ turnWorkerMemoryGuardIntervalMs: number;
61
+ turnWorkerMemoryGuardSustainMs: number;
62
+ observabilityStructuredLogs: boolean;
63
+ observabilityMetricsEnabled: boolean;
64
+ observabilityOtlpEndpoint?: string | undefined;
65
+ observabilityOtlpHeaders: string;
66
+ observabilityDiagnosticsEndpoint?: string | undefined;
67
+ observabilityDiagnosticsHeaders: string;
68
+ analyticsEnabled: boolean;
69
+ analyticsConsentRequired: boolean;
70
+ analyticsReoClientId?: string | undefined;
71
+ analyticsPosthogProjectKey?: string | undefined;
72
+ analyticsPosthogHost?: string | undefined;
73
+ analyticsGa4MeasurementId?: string | undefined;
74
+ legalPrivacyPolicyUrl?: string | undefined;
75
+ legalTermsOfServiceUrl?: string | undefined;
76
+ supportEmail?: string | undefined;
77
+ publicBaseUrl?: string | undefined;
78
+ documentationUrl: string | null;
79
+ mcpOauthEnabled: boolean;
80
+ apiTrustedProxyHops: number;
81
+ apiTrustedProxyCidrs: string;
82
+ webBaseUrl?: string | undefined;
83
+ agentReleasesBaseUrl: string;
84
+ agentStableVersion: string;
85
+ agentBetaVersion?: string | undefined;
86
+ productAccessMode: "configured" | "local" | "managed";
87
+ billingMode: "disabled" | "stripe";
88
+ verifiedSignupTrialCreditsEnabled: boolean;
89
+ creditPromotionPolicy: {
90
+ defaultModelIds?: string[] | undefined;
91
+ signupModelIds?: string[] | undefined;
92
+ offers: Record<string, {
93
+ label: string;
94
+ eligibleModelIds?: string[] | undefined;
95
+ }>;
96
+ };
97
+ entitlementsMode: "managed" | "none" | "static";
98
+ usageLimitsMode: "managed" | "none" | "static";
99
+ usageAllowancesEnabled: boolean;
100
+ staticEntitlementsJson: string;
101
+ staticUsageLimitsJson: string;
102
+ delegationSecret?: string | undefined;
103
+ defaultFirstPartyMcpTools?: ("artifacts_archive" | "artifacts_create" | "artifacts_get_source" | "artifacts_list" | "artifacts_prepare_upload" | "artifacts_publish" | "artifacts_restore" | "artifacts_rollback" | "atlassian_get" | "atlassian_search" | "atlassian_sources_list" | "browser_act" | "browser_auth" | "browser_clipboard" | "browser_debug" | "browser_download_save" | "browser_downloads" | "browser_identity" | "browser_lifecycle" | "browser_observe" | "browser_open" | "browser_publish" | "browser_read" | "browser_screenshot" | "browser_tabs" | "capability_authorization_request" | "capability_catalog_search" | "command_read" | "command_wait" | "company_profile_confirm" | "company_profile_propose" | "computer_act" | "computer_clipboard" | "computer_lifecycle" | "computer_observe" | "computer_open" | "computer_targets" | "connected_machine_enroll_token" | "connected_machine_remove" | "custom_mcp_setup_request" | "editable_artifact_apply" | "editable_artifact_create" | "editable_artifact_export" | "editable_artifact_export_status" | "editable_artifact_get" | "editable_artifact_import" | "editable_artifact_inspect" | "editable_artifact_list" | "environment_list" | "environment_set_variable" | "fiken_bank_accounts_list" | "fiken_companies_list" | "fiken_contact_create" | "fiken_contacts_list" | "fiken_invoice_draft_create" | "fiken_invoice_get" | "fiken_invoices_list" | "fiken_products_list" | "fiken_purchases_list" | "fiken_sales_list" | "github_connect_link" | "github_repositories_list" | "goal_complete" | "goal_pause" | "goal_progress" | "goal_resume" | "goal_set" | "goal_update" | "instruction_policy_get" | "instruction_policy_propose" | "instruction_policy_save" | "interaction_discover" | "interaction_request_human" | "knowledge_archive" | "knowledge_browse" | "knowledge_correct" | "knowledge_get" | "knowledge_prepare_save" | "knowledge_propose" | "knowledge_retain_file" | "knowledge_retain_message" | "knowledge_save" | "knowledge_search" | "memory_correct" | "memory_save" | "memory_search" | "preference_propose" | "preference_registry_get" | "preference_registry_summary" | "project_create" | "project_delete" | "project_get" | "project_list" | "project_reorder" | "project_update" | "reddit_accounts_list" | "reddit_mentions_live" | "reddit_post_reply" | "reddit_posts_sync" | "reddit_search_live" | "reddit_thread_fetch" | "remember" | "remember_confirm" | "rig_get" | "rig_list" | "rig_promote" | "rig_propose_change" | "rig_verify" | "run_on" | "sandbox_attach" | "sandbox_file_publish" | "sandbox_provision" | "sandbox_swap" | "sandboxes_list" | "scheduled_task_runs_list" | "scheduled_tasks_create" | "scheduled_tasks_delete" | "scheduled_tasks_get" | "scheduled_tasks_list" | "scheduled_tasks_pause" | "scheduled_tasks_resume" | "scheduled_tasks_trigger" | "scheduled_tasks_update" | "session_create" | "session_events" | "session_get" | "session_human_input_respond" | "session_pause" | "session_resume" | "session_send_message" | "session_set_model" | "session_set_project" | "session_steer" | "session_wait" | "sessions_list" | "set_other_session_title" | "set_session_title" | "slack_bot_channel_history" | "slack_bot_delete_message" | "slack_bot_file_content" | "slack_bot_file_info" | "slack_bot_list_channels" | "slack_bot_list_files" | "slack_bot_list_users" | "slack_bot_post_message" | "slack_bot_prepare_message" | "slack_bot_search" | "slack_bot_send_prepared_message" | "slack_bot_thread_replies" | "slack_bot_upload_file" | "social_connections_list" | "social_daily_analysis_context" | "social_mentions_live" | "social_post_reply" | "social_posts_recent" | "social_posts_sync" | "social_search_live" | "social_thread_fetch" | "task_note_archive" | "task_note_promote_instruction_policy" | "task_note_promote_knowledge" | "task_note_promote_preference" | "task_note_replace" | "task_note_save" | "task_notes_list" | "variable_set_get_variable" | "variable_set_list" | "variable_set_set_variable" | "wait_for_input" | "work_claim_release" | "work_claim_upsert" | "x_accounts_list" | "x_mentions_live" | "x_post_reply" | "x_posts_sync" | "x_search_live" | "x_thread_fetch")[] | undefined;
104
+ allowedFirstPartyMcpTools?: ("artifacts_archive" | "artifacts_create" | "artifacts_get_source" | "artifacts_list" | "artifacts_prepare_upload" | "artifacts_publish" | "artifacts_restore" | "artifacts_rollback" | "atlassian_get" | "atlassian_search" | "atlassian_sources_list" | "browser_act" | "browser_auth" | "browser_clipboard" | "browser_debug" | "browser_download_save" | "browser_downloads" | "browser_identity" | "browser_lifecycle" | "browser_observe" | "browser_open" | "browser_publish" | "browser_read" | "browser_screenshot" | "browser_tabs" | "capability_authorization_request" | "capability_catalog_search" | "command_read" | "command_wait" | "company_profile_confirm" | "company_profile_propose" | "computer_act" | "computer_clipboard" | "computer_lifecycle" | "computer_observe" | "computer_open" | "computer_targets" | "connected_machine_enroll_token" | "connected_machine_remove" | "custom_mcp_setup_request" | "editable_artifact_apply" | "editable_artifact_create" | "editable_artifact_export" | "editable_artifact_export_status" | "editable_artifact_get" | "editable_artifact_import" | "editable_artifact_inspect" | "editable_artifact_list" | "environment_list" | "environment_set_variable" | "fiken_bank_accounts_list" | "fiken_companies_list" | "fiken_contact_create" | "fiken_contacts_list" | "fiken_invoice_draft_create" | "fiken_invoice_get" | "fiken_invoices_list" | "fiken_products_list" | "fiken_purchases_list" | "fiken_sales_list" | "github_connect_link" | "github_repositories_list" | "goal_complete" | "goal_pause" | "goal_progress" | "goal_resume" | "goal_set" | "goal_update" | "instruction_policy_get" | "instruction_policy_propose" | "instruction_policy_save" | "interaction_discover" | "interaction_request_human" | "knowledge_archive" | "knowledge_browse" | "knowledge_correct" | "knowledge_get" | "knowledge_prepare_save" | "knowledge_propose" | "knowledge_retain_file" | "knowledge_retain_message" | "knowledge_save" | "knowledge_search" | "memory_correct" | "memory_save" | "memory_search" | "preference_propose" | "preference_registry_get" | "preference_registry_summary" | "project_create" | "project_delete" | "project_get" | "project_list" | "project_reorder" | "project_update" | "reddit_accounts_list" | "reddit_mentions_live" | "reddit_post_reply" | "reddit_posts_sync" | "reddit_search_live" | "reddit_thread_fetch" | "remember" | "remember_confirm" | "rig_get" | "rig_list" | "rig_promote" | "rig_propose_change" | "rig_verify" | "run_on" | "sandbox_attach" | "sandbox_file_publish" | "sandbox_provision" | "sandbox_swap" | "sandboxes_list" | "scheduled_task_runs_list" | "scheduled_tasks_create" | "scheduled_tasks_delete" | "scheduled_tasks_get" | "scheduled_tasks_list" | "scheduled_tasks_pause" | "scheduled_tasks_resume" | "scheduled_tasks_trigger" | "scheduled_tasks_update" | "session_create" | "session_events" | "session_get" | "session_human_input_respond" | "session_pause" | "session_resume" | "session_send_message" | "session_set_model" | "session_set_project" | "session_steer" | "session_wait" | "sessions_list" | "set_other_session_title" | "set_session_title" | "slack_bot_channel_history" | "slack_bot_delete_message" | "slack_bot_file_content" | "slack_bot_file_info" | "slack_bot_list_channels" | "slack_bot_list_files" | "slack_bot_list_users" | "slack_bot_post_message" | "slack_bot_prepare_message" | "slack_bot_search" | "slack_bot_send_prepared_message" | "slack_bot_thread_replies" | "slack_bot_upload_file" | "social_connections_list" | "social_daily_analysis_context" | "social_mentions_live" | "social_post_reply" | "social_posts_recent" | "social_posts_sync" | "social_search_live" | "social_thread_fetch" | "task_note_archive" | "task_note_promote_instruction_policy" | "task_note_promote_knowledge" | "task_note_promote_preference" | "task_note_replace" | "task_note_save" | "task_notes_list" | "variable_set_get_variable" | "variable_set_list" | "variable_set_set_variable" | "wait_for_input" | "work_claim_release" | "work_claim_upsert" | "x_accounts_list" | "x_mentions_live" | "x_post_reply" | "x_posts_sync" | "x_search_live" | "x_thread_fetch")[] | undefined;
105
+ streamTokenSecret?: string | undefined;
106
+ streamControlEnabled: boolean;
107
+ workDiscoveryEnabled: boolean;
108
+ workClaimMutationsEnabled: boolean;
109
+ workDiscoveryHumanAdvisoriesEnabled: boolean;
110
+ workDiscoveryAutomaticNudgesEnabled: boolean;
111
+ ogtoolPackageSpec?: string | undefined;
112
+ environmentsEncryptionKey?: string | undefined;
113
+ integrationsEnabled: boolean;
114
+ integrationsStateSecret?: string | undefined;
115
+ integrationsOauthShortStateEnabled: boolean;
116
+ integrationsAllowPrivateNetworkTargets: boolean;
117
+ integrationsOauthClientsJson: string;
118
+ gmailWatchTopicName?: string | undefined;
119
+ slackClientId?: string | undefined;
120
+ slackClientSecret?: string | undefined;
121
+ slackSigningSecret?: string | undefined;
122
+ slackAccessMode: "full" | "limited";
123
+ slackBotDisplayName: "OpenGeni" | "OpenGeni Staging";
124
+ slackCommand: string;
125
+ googleDriveClientId?: string | undefined;
126
+ googleDriveClientSecret?: string | undefined;
127
+ googleDriveSyncMaxItems: number;
128
+ googleDriveSyncMaxBytes: number;
129
+ googleDriveSyncMaxFileBytes: number;
130
+ googleDriveSyncMaxProviderRequests: number;
131
+ googleDriveSyncMaxElapsedSeconds: number;
132
+ googleDriveSyncMaxFailureDetails: number;
133
+ googleDriveProviderRequestTimeoutMs: number;
134
+ googleDriveProviderRetryAttempts: number;
135
+ googleDriveProviderRetryInitialDelayMs: number;
136
+ googleDriveProviderRetryMaxDelayMs: number;
137
+ googleDriveProviderRetryBudgetMs: number;
138
+ fikenClientId?: string | undefined;
139
+ fikenClientSecret?: string | undefined;
140
+ googleDriveWorkspaceEventsEnabled?: boolean | undefined;
141
+ atlassianClientId?: string | undefined;
142
+ atlassianClientSecret?: string | undefined;
143
+ maxNestedAgentDepth?: number | undefined;
144
+ socialOauthClientsJson: string;
145
+ goalMaxAutoContinuations?: number | undefined;
146
+ goalIdleBackoffMs: readonly number[];
147
+ goalIdleBackoffMaxMs: number;
148
+ childLifecycleNoticesEnabled: boolean;
149
+ slackWorkspaceRoutingEnabled: boolean;
150
+ agentMaxModelCallsPerTurn: number;
151
+ contextWindowTokens: number;
152
+ contextEffectiveWindowTokens?: number | undefined;
153
+ contextCompactionThresholdRatio: number;
154
+ contextReservedOutputTokens: number;
155
+ contextAutoCompactThresholdTokens?: number | undefined;
156
+ modelToolOutputTruncationTokens: number;
157
+ authRequired: boolean;
158
+ accessKey?: string | undefined;
159
+ authAllowHealth: boolean;
160
+ authAllowMetrics: boolean;
161
+ apiHost: string;
162
+ apiPort: number;
163
+ apiMetricsPort?: number | undefined;
164
+ workerHttpPort: number;
165
+ opengeniMcpInternalUrl?: string | undefined;
166
+ opengeniMcpUrl?: string | undefined;
167
+ corsAllowOriginRegex: string;
168
+ localAllowedOrigins?: string | undefined;
169
+ openaiProvider: "azure" | "openai";
170
+ openaiApiKey?: string | undefined;
171
+ openaiBaseUrl?: string | undefined;
172
+ openaiModel: string;
173
+ openaiAllowedModels: string;
174
+ vercelAiGatewayApiKey?: string | undefined;
175
+ imageGenerationModel: string;
176
+ videoGenerationPollIntervalMs: number;
177
+ videoGenerationRecoveryDeadlineMs: number;
178
+ videoGenerationReferenceUrlTtlSeconds: number;
179
+ videoGenerationMaxConcurrentPerWorkspace: number;
180
+ videoGenerationWorkspaceQuotaBytes: number;
181
+ videoGenerationTempDirectory: string;
182
+ videoGenerationFfprobePath: string;
183
+ videoGenerationCredit480pMicrosPerSecond: number;
184
+ videoGenerationCredit720pMicrosPerSecond: number;
185
+ voiceInputMaxDurationSeconds: number;
186
+ voiceInputMaxSizeBytes: number;
187
+ voiceInputResumableEnabled: boolean;
188
+ voiceInputResumableMaxDurationSeconds: number;
189
+ voiceInputResumableMaxSizeBytes: number;
190
+ voiceInputResumableMaxChunkSizeBytes: number;
191
+ voiceInputResumableRetentionSeconds: number;
192
+ voiceInputFfmpegPath: string;
193
+ voiceInputProviderOrder: string;
194
+ voiceInputOpenaiEnabled: boolean;
195
+ voiceInputOpenaiApiKey?: string | undefined;
196
+ voiceInputOpenaiBaseUrl?: string | undefined;
197
+ voiceInputOpenaiModel: string;
198
+ voiceInputAzureEnabled: boolean;
199
+ voiceInputAzureEndpoint?: string | undefined;
200
+ voiceInputAzureDeployment?: string | undefined;
201
+ voiceInputAzureApiVersion?: string | undefined;
202
+ voiceInputAzureApiKey?: string | undefined;
203
+ voiceInputAzureAdToken?: string | undefined;
204
+ voiceInputCodexExperimentalEnabled: boolean;
205
+ modelPricingJson: string;
206
+ modelCatalogSource: "code" | "database";
207
+ modelCostPolicyJson: string;
208
+ modelNotesJson: string;
209
+ openrouterApiKey?: string | undefined;
210
+ resolvedGatewayModelsJson?: string | undefined;
211
+ resolvedOpenRouterModelsJson?: string | undefined;
212
+ resolvedCodexModelsJson?: string | undefined;
213
+ modelProvidersJson: string;
214
+ codexSubscriptionEnabled: boolean;
215
+ supergrokSubscriptionEnabled: boolean;
216
+ claudeSubscriptionEnabled: boolean;
217
+ supergrokResponseStreamIdleTimeoutMs: number;
218
+ codexConnectedAppsEnabled: boolean;
219
+ codexProductSku?: string | undefined;
220
+ codexToolSearchEnabled: boolean;
221
+ lazyToolSearchEnabled: boolean;
222
+ codexFleetPolicyShadowEnabled: boolean;
223
+ codexRotationNearExhaustionPct: number;
224
+ reasoningConfigurationUpdatesEnabled: boolean;
225
+ openaiReasoningEffort: "high" | "low" | "max" | "medium" | "minimal" | "none" | "xhigh";
226
+ openaiAllowedReasoningEfforts: string;
227
+ creditsDefaultModel: string;
228
+ creditsDefaultReasoningEffort: "high" | "low" | "max" | "medium" | "minimal" | "none" | "xhigh";
229
+ openaiResponsesTransport: "http" | "websocket";
230
+ openaiProviderItemIds: "preserve" | "strip";
231
+ openaiReasoningEncryptedContent: boolean;
232
+ openaiMaxRetries: number;
233
+ webSearchEnabled: boolean;
234
+ jevApiKey?: string | undefined;
235
+ jevBaseUrl: string;
236
+ jevModel: string;
237
+ jevRequestTimeoutMs: number;
238
+ codeSearchMode: "default_on" | "experiment" | "off" | "opt_in";
239
+ agentInstructionsTemplate: string;
240
+ azureOpenaiBaseUrl?: string | undefined;
241
+ azureOpenaiEndpoint?: string | undefined;
242
+ azureOpenaiDeployment?: string | undefined;
243
+ azureOpenaiApiVersion?: string | undefined;
244
+ azureOpenaiApiKey?: string | undefined;
245
+ azureOpenaiAdToken?: string | undefined;
246
+ disableOpenaiTracing: boolean;
247
+ sandboxBackend: "blaxel" | "cloudflare" | "daytona" | "docker" | "e2b" | "local" | "modal" | "none" | "opensandbox" | "runloop" | "selfhosted" | "vercel";
248
+ dockerImage: string;
249
+ sandboxArtifactRuntimeEnabled: boolean;
250
+ dockerExposedPorts: string;
251
+ dockerNetwork?: string | undefined;
252
+ dockerWorkspaceBaseDir?: string | undefined;
253
+ modalAppName: string;
254
+ modalImageRef?: string | undefined;
255
+ modalCommandSupervisionEnabled: boolean;
256
+ modalImageId?: string | undefined;
257
+ modalImageRegistrySecret?: string | undefined;
258
+ modalTimeoutSeconds: number;
259
+ modalSandboxCpu?: number | undefined;
260
+ modalSandboxMemoryMiB?: number | undefined;
261
+ modalTokenId?: string | undefined;
262
+ modalTokenSecret?: string | undefined;
263
+ modalEnvironment?: string | undefined;
264
+ modalIdleTimeoutSeconds?: number | undefined;
265
+ modalWorkspacePersistence: "snapshot_directory" | "snapshot_filesystem" | "tar";
266
+ sandboxDesktopEnabled: boolean;
267
+ sandboxDesktopInteractive: boolean;
268
+ sandboxTerminalEnabled: boolean;
269
+ streamResolutionWidth: number;
270
+ streamResolutionHeight: number;
271
+ recordingEnabled: boolean;
272
+ recordingDefaultCodec: "h264-mp4" | "vp9-webm";
273
+ workspaceCaptureEnabled: boolean;
274
+ recordingFramerate: number;
275
+ recordingMaxSeconds: number;
276
+ recordingMaxBytes: number;
277
+ daytonaApiKey?: string | undefined;
278
+ daytonaApiUrl?: string | undefined;
279
+ daytonaTarget?: string | undefined;
280
+ daytonaImage?: string | undefined;
281
+ daytonaSnapshotName?: string | undefined;
282
+ daytonaAutoStopInterval?: number | undefined;
283
+ daytonaTimeoutSeconds?: number | undefined;
284
+ daytonaExposedPortUrlTtlSeconds?: number | undefined;
285
+ runloopApiKey?: string | undefined;
286
+ runloopBaseUrl?: string | undefined;
287
+ runloopBlueprintName?: string | undefined;
288
+ runloopBlueprintId?: string | undefined;
289
+ runloopTunnel: boolean;
290
+ runloopKeepAliveSeconds?: number | undefined;
291
+ e2bApiKey?: string | undefined;
292
+ e2bTemplate?: string | undefined;
293
+ e2bTimeoutSeconds?: number | undefined;
294
+ e2bTimeoutAction?: "kill" | "pause" | undefined;
295
+ e2bAllowInternetAccess?: boolean | undefined;
296
+ e2bAutoResume?: boolean | undefined;
297
+ e2bWorkspacePersistence?: "snapshot" | "tar" | undefined;
298
+ blaxelApiKey?: string | undefined;
299
+ blaxelImage?: string | undefined;
300
+ blaxelRegion?: string | undefined;
301
+ blaxelExposedPortPublic?: boolean | undefined;
302
+ blaxelExposedPortUrlTtlSeconds?: number | undefined;
303
+ blaxelMemoryMb?: number | undefined;
304
+ blaxelTtl?: string | undefined;
305
+ cloudflareWorkerUrl?: string | undefined;
306
+ cloudflareApiKey?: string | undefined;
307
+ experimentalBrowserContextPoolEnabled: boolean;
308
+ browserbaseApiKey?: string | undefined;
309
+ kernelApiKey?: string | undefined;
310
+ kernelEndpoint?: string | undefined;
311
+ kernelBrowserTimeoutSeconds: number;
312
+ kernelBrowserStealth: boolean;
313
+ vercelToken?: string | undefined;
314
+ vercelProjectId?: string | undefined;
315
+ vercelTeamId?: string | undefined;
316
+ vercelRuntime?: string | undefined;
317
+ openSandboxBaseUrl?: string | undefined;
318
+ openSandboxApiKey?: string | undefined;
319
+ openSandboxImage?: string | undefined;
320
+ openSandboxTtlSeconds: number;
321
+ openSandboxUseServerProxy: boolean;
322
+ openSandboxSignedEndpoints: boolean;
323
+ openSandboxSignedEndpointTtlSeconds: number;
324
+ openSandboxChannelBPublicBaseUrl?: string | undefined;
325
+ openSandboxInteractionFrameProxy?: boolean | undefined;
326
+ openSandboxPoolRef?: string | undefined;
327
+ openSandboxKubernetesInventoryNamespace?: string | undefined;
328
+ sandboxOwnershipEnabled: boolean;
329
+ rigVerificationLeaseOwnershipEnabled: boolean;
330
+ sandboxLazyProvisionEnabled: boolean;
331
+ sandboxSelfhostedEnabled: boolean;
332
+ agentOpStreamEnabled: boolean;
333
+ enrollmentSigningSecret?: string | undefined;
334
+ selfhostedNatsUrl?: string | undefined;
335
+ selfhostedRelayUrl?: string | undefined;
336
+ selfhostedRelayTokenSecret?: string | undefined;
337
+ agentUpdatePublicKey?: string | undefined;
338
+ selfhostedNatsCalloutAccountSeed?: string | undefined;
339
+ selfhostedNatsCalloutAccountName?: string | undefined;
340
+ selfhostedNatsCalloutUser?: string | undefined;
341
+ selfhostedNatsCalloutPassword?: string | undefined;
342
+ selfhostedNatsControlUser?: string | undefined;
343
+ selfhostedNatsControlPassword?: string | undefined;
344
+ sandboxSelfhostedExecTimeoutMs: number;
345
+ sandboxSelfhostedControlTimeoutMs: number;
346
+ sandboxLeaseReaperPeriodMs: number;
347
+ sandboxViewerHolderTtlMs: number;
348
+ sandboxInteractionHolderTtlMs: number;
349
+ sandboxIdleGraceMs: number;
350
+ sandboxIdleCommandContainmentMs: number | undefined;
351
+ sandboxSnapshotIntervalMs: number;
352
+ sandboxSnapshotTimeoutMs: number;
353
+ sandboxDrainSnapshotTimeoutMs?: number | undefined;
354
+ sandboxRotationLeadMs: number;
355
+ sandboxRotationBatchSize: number;
356
+ sandboxLeaseTtlMs: number;
357
+ sandboxLeaseWarmingTtlMs: number;
358
+ sandboxWarmingTimeoutMs: number;
359
+ workspaceControlLockTimeoutMs: number;
360
+ rigSetupTimeoutMs: number;
361
+ sandboxWarmRateMicrosPerSecondJson: string;
362
+ sandboxWarmBillingMode: "credits" | "shadow" | "usage_only";
363
+ sandboxMaxWarmSecondsPerWorkspace: number;
364
+ sandboxPreparationProfiles: string;
365
+ sandboxEnvAllowlist: string;
366
+ sandboxImageAllowlist: string;
367
+ objectStorageEndpoint?: string | undefined;
368
+ objectStorageInternalEndpoint?: string | undefined;
369
+ objectStorageSandboxEndpoint?: string | undefined;
370
+ objectStorageBackend: "aws-s3" | "azure-blob" | "gcs" | "s3-compatible";
371
+ objectStorageBucket: string;
372
+ objectStorageRegion: string;
373
+ objectStorageS3Provider: string;
374
+ objectStorageAccessKeyId?: string | undefined;
375
+ objectStorageSecretAccessKey?: string | undefined;
376
+ objectStorageForcePathStyle: boolean;
377
+ objectStorageAzureConnectionString?: string | undefined;
378
+ objectStorageAzureAccountName?: string | undefined;
379
+ objectStorageAzureAccountKey?: string | undefined;
380
+ objectStorageAzureEndpoint?: string | undefined;
381
+ objectStorageGcsProjectId?: string | undefined;
382
+ objectStorageGcsCredentialsJson?: string | undefined;
383
+ objectStorageGcsKeyFilename?: string | undefined;
384
+ objectStorageGcsApiEndpoint?: string | undefined;
385
+ documentParser: string;
386
+ documentChunkSize: number;
387
+ documentChunkOverlap: number;
388
+ documentEmbeddingProvider: "deterministic" | "openai";
389
+ documentEmbeddingModel: string;
390
+ documentEmbeddingDimensions: number;
391
+ documentEmbeddingApiKey?: string | undefined;
392
+ documentEmbeddingBaseUrl?: string | undefined;
393
+ documentEmbeddingBillingMode: "credits" | "shadow" | "usage_only";
394
+ documentEmbeddingCreditsActivatedAt?: string | undefined;
395
+ documentEmbeddingRateMicrosPerMillionBytes: number;
396
+ documentCurationProvider: "heuristic" | "none" | "openai";
397
+ documentCurationModel: string;
398
+ documentCurationApiKey?: string | undefined;
399
+ documentCurationBaseUrl?: string | undefined;
400
+ gitAuthorName?: string | undefined;
401
+ gitAuthorEmail?: string | undefined;
402
+ gitCommitterName?: string | undefined;
403
+ gitCommitterEmail?: string | undefined;
404
+ githubAppManifestBaseUrl?: string | undefined;
405
+ githubAppManifestStateSecret?: string | undefined;
406
+ githubAppId?: string | undefined;
407
+ githubClientId?: string | undefined;
408
+ githubClientSecret?: string | undefined;
409
+ githubRestMcpEnabled: boolean;
410
+ githubPersonalOauthEnabled: boolean;
411
+ githubPersonalOauthClientId?: string | undefined;
412
+ githubPersonalOauthClientSecret?: string | undefined;
413
+ githubAppSlug?: string | undefined;
414
+ githubWebhookSecret?: string | undefined;
415
+ githubAppPrivateKey?: string | undefined;
416
+ prReviewGithubAppId?: string | undefined;
417
+ prReviewGithubClientId?: string | undefined;
418
+ prReviewGithubClientSecret?: string | undefined;
419
+ prReviewGithubAppSlug?: string | undefined;
420
+ prReviewGithubWebhookSecret?: string | undefined;
421
+ prReviewGithubAppPrivateKey?: string | undefined;
422
+ betterAuthSecret?: string | undefined;
423
+ betterAuthAllowedHosts: string;
424
+ betterAuthCookieDomain?: string | undefined;
425
+ betterAuthTrustedOrigins: string;
426
+ managedAuthGoogleClientId?: string | undefined;
427
+ managedAuthGoogleClientSecret?: string | undefined;
428
+ managedAuthGithubClientId?: string | undefined;
429
+ managedAuthGithubClientSecret?: string | undefined;
430
+ allowedUserEmails?: string[] | undefined;
431
+ managedAuthSessionSetMode: "broker" | "dual" | "legacy";
432
+ managedAuthNewSignupsEnabled: boolean;
433
+ organizationUserSetupEmailTokenTransport: "fragment" | "query";
434
+ organizationUserSetupQueryEdgeSanitizationConfirmed: boolean;
435
+ resendApiKey?: string | undefined;
436
+ emailFrom: string;
437
+ stripeSecretKey?: string | undefined;
438
+ stripePublishableKey?: string | undefined;
439
+ stripeWebhookSecret?: string | undefined;
440
+ stripeCreditsProductId?: string | undefined;
441
+ mcpServers: {
442
+ id: string;
443
+ name?: string | undefined;
444
+ url: string;
445
+ allowedTools?: string[] | undefined;
446
+ timeoutMs?: number | undefined;
447
+ cacheToolsList: boolean;
448
+ requireApproval?: boolean | string[] | undefined;
449
+ headers?: Record<string, string> | undefined;
450
+ connectionRef?: {
451
+ connectionId?: string | undefined;
452
+ accountSelection?: "all_eligible" | undefined;
453
+ authoritySource?: "host" | undefined;
454
+ hostBinding?: {
455
+ bindingId: string;
456
+ generation: number;
457
+ } | {
458
+ selection: "accepted_turn";
459
+ } | undefined;
460
+ provider?: string | undefined;
461
+ providerDomain: string;
462
+ kind?: "api_key" | "app_install" | "delegated" | "oauth2" | undefined;
463
+ scopes?: string[] | undefined;
464
+ resource?: string | undefined;
465
+ selectedResources?: {
466
+ id: string;
467
+ kind: "repository";
468
+ }[] | undefined;
469
+ subjectScope?: "subject" | "workspace" | undefined;
470
+ } | undefined;
471
+ operationRecovery?: Record<string, {
472
+ observerTool: string;
473
+ }> | undefined;
474
+ }[];
475
+ };
476
+ }>;
477
+ /** Shared with scheduled work; reasons describe the actual admission gate. */
478
+ export declare function goalRunBudgetBlocked(services: Parameters<typeof agentRunAdmissionDenial>[0], input: Omit<Parameters<typeof agentRunAdmissionDenial>[1], "requestedAgentRuns">): Promise<GoalAdmissionBlock | null>;
479
+ export declare class GoalResumeBlockedError extends Error {
480
+ readonly pausedReason: GoalAdmissionPausedReason;
481
+ constructor(pausedReason: GoalAdmissionPausedReason, message: string);
482
+ }
483
+ /** Called under the goal transition's locks, before counters, events or wakes change. */
484
+ export declare function assertGoalResumeAllowed(services: Parameters<typeof agentRunAdmissionDenial>[0] & {
485
+ catalogSourceSettings?: Settings;
486
+ }, session: Pick<Session, "accountId" | "workspaceId" | "model" | "codexCompactionMode"> & Partial<Pick<Session, "latencyMode">>, causalTurn: {
487
+ initiatingHumanSubjectId: string | null;
488
+ } | null): Promise<void>;
package/dist/index.d.ts CHANGED
@@ -16,6 +16,7 @@ export * from "./managed-auth-type.js";
16
16
  export { getManagedAuthRequestActorAbortSignal, getManagedAuthRequestActorAdmissionStamp, getManagedAuthRequestActorEpoch, getManagedAuthRequestActorLeaseStamp, getManagedSession, configureManagedUserAdmission, assertManagedUserAdmission, ManagedAuthActorLeaseOutcomeUnknownError, markManagedAuthRequestActorTransitionApplied, releaseManagedAuthRequestActorLease, validateManagedAuthRequestActorLease, type ManagedAuthActorAdmissionStamp, type ManagedAuthActorMutationLeaseStamp, } from "./managed-session.js";
17
17
  export * from "./transcription.js";
18
18
  export * from "./model-catalog.js";
19
+ export * from "./goal-admission.js";
19
20
  export * from "./codex-model-availability.js";
20
21
  export * from "./default-session-model.js";
21
22
  export * from "./sandbox/fleet.js";
@@ -31,6 +32,7 @@ export * from "./application/connect-authority.js";
31
32
  export * from "./application/connect-operation.js";
32
33
  export * from "./session-authorization.js";
33
34
  export * from "./billing/limits.js";
35
+ export * from "./billing/agent-run-admission.js";
34
36
  export * from "./domain/capabilities.js";
35
37
  export * from "./domain/native-mcp-connection-admission.js";
36
38
  export * from "./domain/skill-imports.js";