@opengeni/db 3.8.2-canary.0 → 4.0.0-canary.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.
Files changed (79) hide show
  1. package/dist/canonical-human-identities.js +3 -3
  2. package/dist/capability-integrations.d.ts +2 -0
  3. package/dist/{chunk-6DPJA36C.js → chunk-2XEZK4LF.js} +7 -1
  4. package/dist/chunk-2XEZK4LF.js.map +1 -0
  5. package/dist/{chunk-F5YOZEYQ.js → chunk-3RI33YQN.js} +19 -1
  6. package/dist/chunk-3RI33YQN.js.map +1 -0
  7. package/dist/{chunk-5S4BQAHX.js → chunk-CJROYHSC.js} +3 -3
  8. package/dist/{chunk-UKOGHUGC.js → chunk-MX6V5F65.js} +2 -2
  9. package/dist/{chunk-CITYUGMW.js → chunk-N5VXJ4I2.js} +151 -78
  10. package/dist/chunk-N5VXJ4I2.js.map +1 -0
  11. package/dist/{chunk-Y53WEFYB.js → chunk-NLFHMPUB.js} +2 -2
  12. package/dist/{chunk-RLQVPOVR.js → chunk-P6NSEG2S.js} +2 -2
  13. package/dist/{chunk-53A2PEHT.js → chunk-QM6YOWHZ.js} +303 -33
  14. package/dist/chunk-QM6YOWHZ.js.map +1 -0
  15. package/dist/{chunk-X6TO5HII.js → chunk-RZNOSEMC.js} +2 -2
  16. package/dist/{chunk-HZV7O6JR.js → chunk-UFAMOUWL.js} +2 -2
  17. package/dist/codemode-operations.d.ts +5 -0
  18. package/dist/codex-token-resolver.d.ts +6 -2
  19. package/dist/connection-token-resolver.d.ts +4 -0
  20. package/dist/editable-artifact-durable-export.js +2 -2
  21. package/dist/editable-artifacts.js +3 -3
  22. package/dist/generated-images.d.ts +15 -0
  23. package/dist/index.d.ts +229 -77
  24. package/dist/index.js +7663 -5625
  25. package/dist/index.js.map +1 -1
  26. package/dist/managed-auth-session-sets.js +3 -3
  27. package/dist/managed-user-setup.d.ts +3 -0
  28. package/dist/mcp-oauth.d.ts +80 -0
  29. package/dist/migrate.d.ts +1 -0
  30. package/dist/migrate.js +3 -1
  31. package/dist/model-context-snapshots.d.ts +20 -0
  32. package/dist/provision-roles.js +1 -1
  33. package/dist/runtime-posture.d.ts +5 -5
  34. package/dist/schema.d.ts +2046 -375
  35. package/dist/schema.js +15 -1
  36. package/dist/session-background-commands.d.ts +18 -6
  37. package/dist/session-background-commands.js +15 -9
  38. package/dist/session-control.d.ts +2 -2
  39. package/dist/session-goal-pacing.d.ts +3 -6
  40. package/dist/session-tenancy.js +3 -3
  41. package/dist/tool-gateway-approvals.d.ts +31 -0
  42. package/dist/video-generation.js +3 -3
  43. package/dist/workspace-artifacts.d.ts +17 -3
  44. package/drizzle/0400_session_attempt_model_context_snapshots.sql +65 -0
  45. package/drizzle/0401_organization_user_setup_token_transport.sql +178 -0
  46. package/drizzle/0402_session_input_wait_and_background_command_results.sql +1023 -0
  47. package/drizzle/0403_codex_unconditional_credential_leasing.sql +181 -0
  48. package/drizzle/0404_mcp_oauth_authorization_server.sql +471 -0
  49. package/drizzle/0405_tool_gateway_approval_capabilities.sql +184 -0
  50. package/drizzle/0406_workspace_html_site_sources.sql +71 -0
  51. package/package.json +6 -6
  52. package/src/capability-integrations.ts +8 -0
  53. package/src/codemode-operations.ts +31 -21
  54. package/src/codex-token-resolver.ts +16 -6
  55. package/src/connection-token-resolver.ts +40 -3
  56. package/src/generated-images.ts +70 -6
  57. package/src/index.ts +2444 -823
  58. package/src/managed-user-setup.ts +14 -3
  59. package/src/mcp-oauth.ts +488 -0
  60. package/src/migrate.ts +9 -1
  61. package/src/model-context-snapshots.ts +151 -0
  62. package/src/provision-roles.ts +2 -0
  63. package/src/runtime-posture.ts +16 -0
  64. package/src/schema.ts +324 -35
  65. package/src/session-background-commands.ts +180 -78
  66. package/src/session-control.ts +11 -12
  67. package/src/session-goal-pacing.ts +4 -8
  68. package/src/tool-gateway-approvals.ts +168 -0
  69. package/src/workspace-artifacts.ts +633 -178
  70. package/dist/chunk-53A2PEHT.js.map +0 -1
  71. package/dist/chunk-6DPJA36C.js.map +0 -1
  72. package/dist/chunk-CITYUGMW.js.map +0 -1
  73. package/dist/chunk-F5YOZEYQ.js.map +0 -1
  74. /package/dist/{chunk-5S4BQAHX.js.map → chunk-CJROYHSC.js.map} +0 -0
  75. /package/dist/{chunk-UKOGHUGC.js.map → chunk-MX6V5F65.js.map} +0 -0
  76. /package/dist/{chunk-Y53WEFYB.js.map → chunk-NLFHMPUB.js.map} +0 -0
  77. /package/dist/{chunk-RLQVPOVR.js.map → chunk-P6NSEG2S.js.map} +0 -0
  78. /package/dist/{chunk-X6TO5HII.js.map → chunk-RZNOSEMC.js.map} +0 -0
  79. /package/dist/{chunk-HZV7O6JR.js.map → chunk-UFAMOUWL.js.map} +0 -0
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { type ChildLifecycleSystemUpdateKind, type ChildRequiresActionRespondedByKind, SessionGoalSnapshot } from "@opengeni/contracts";
2
- import type { AccessContext, AccessGrant, AccessPrincipalKind, ApiKey, AttemptToolResult, BillingBalance, CapabilityCatalogItem, CapabilityInstallation, CapabilityPack, CapabilitySource, ConnectionKind, ConnectionMetadata, ConnectionStatus, DocumentAuthorityKind, McpServerConnectionRef, FileAsset, FileUploadStatus, FirstPartyMcpToolName, HumanInputQuestion, HumanInputResponse, KnowledgeMemory, KnowledgeMemoryKind, KnowledgeMemoryStatus, KnowledgeSourceRef, GitHubInstallationAuthorityKind, GitHubRepositoryScope, HostEventExportBatch, HostUsageExportBatch, ManagedAccount, ManagedOrganizationMembershipProjection, WorkspaceMemberCandidate, McpPersonalConnectionDelegation, ModelContextContributionSummary, Permission, PersonalResourceAttachmentIntent, PackInstallation, PackInstallationStatus, ResourceRef, SandboxBackend, SandboxOs, ScheduledTask, ScheduledTaskAction, ScheduledTaskActionKind, KnowledgeSourceSyncAction, ScheduledTaskAgentConfig, ScheduledTaskOverlapPolicy, ScheduledTaskRun, ScheduledTaskRunAcceptedExecution as ScheduledTaskRunAcceptedExecutionType, ScheduledTaskRunMode, ScheduledTaskRunStatus, ScheduledTaskScheduleSpec, ScheduledTaskStatus, ScheduledTaskTriggerType, SlackInstallationBinding, Session, SessionAuthorizationListScope, SessionListResponse, SessionEvent, SessionEventPayloadMode, SessionEventReadDirection, SessionEventSemanticClass, SessionEventType, SessionGoal, SessionGoalChangeKind, SessionGoalCreatedBy, SessionGoalMutationPolicy, SessionGoalRevision, SessionGoalStatus, SessionHumanInputRequest, LineageNode, SessionMcpApprovalPolicy, SessionSkill, SessionMcpServerMetadata, SessionStatus, SessionToolPolicy, SessionTurn, SessionQueueSnapshot, SessionSystemUpdate, SessionSystemUpdateKind, SystemUpdateClassification, SessionTurnSource, SessionTurnStatus, TurnInitiator, TurnInitiatorContext, SocialConnection, SocialConnectionStatus, SocialPost, SocialProvider, ToolRef, ReasoningEffort, UsageEvent, Workspace, WorkspaceControlEvent, VariableSet, VariableSetSecret, VariableSetVariableMetadata, WorkspaceMember, WorkspaceMemoryPromptMode, WorkspaceRegisteredPack, Channel, Rig, RigProviderImage, RigProviderImages, RigVersion, RigVerificationHealth, RigChange, RigChangeKind, RigChangeStatus, RigCheck, NativeSnapshotDescriptor, TarWorkspaceArchiveDescriptor, WorkspaceArchiveDescriptor, ModalCheckpointProviderBinding, SandboxProviderContinuityRecovery, WorkClaimSubjectFilter, WorkDiscoveryProjection } from "@opengeni/contracts";
2
+ import type { AccessContext, AccessGrant, AccessPrincipalKind, ApiKey, AttemptToolResult, BillingBalance, CapabilityCatalogItem, CapabilityInstallation, CapabilityPack, CapabilitySource, ConnectionKind, ConnectionMetadata, ConnectionStatus, DocumentAuthorityKind, McpServerConnectionRef, FileAsset, FileUploadStatus, FirstPartyMcpToolName, HumanInputQuestion, HumanInputResponse, KnowledgeMemory, KnowledgeMemoryKind, KnowledgeMemoryStatus, KnowledgeSourceRef, GitHubInstallationAuthorityKind, GitHubRepositoryScope, HostEventExportBatch, HostUsageExportBatch, ManagedAccount, ManagedOrganizationMembershipProjection, WorkspaceMemberCandidate, McpPersonalConnectionDelegation, ModelContextContributionSummary, Permission, PersonalResourceAttachmentIntent, PackInstallation, PackInstallationStatus, ResourceRef, SandboxBackend, SandboxOs, ScheduledTask, ScheduledTaskAction, ScheduledTaskActionKind, KnowledgeSourceSyncAction, ScheduledTaskAgentConfig, ScheduledTaskOverlapPolicy, ScheduledTaskRun, ScheduledTaskRunAcceptedExecution as ScheduledTaskRunAcceptedExecutionType, ScheduledTaskRunMode, ScheduledTaskRunStatus, ScheduledTaskScheduleSpec, ScheduledTaskStatus, ScheduledTaskTriggerType, SlackInstallationBinding, Session, SessionAuthorizationListScope, SessionListResponse, SessionEvent, SessionEventPayloadMode, SessionEventReadDirection, SessionEventSemanticClass, SessionEventType, SessionGoal, SessionGoalChangeKind, SessionGoalCreatedBy, SessionGoalMutationPolicy, SessionGoalRevision, SessionGoalStatus, SessionHumanInputRequest, LineageNode, SessionMcpApprovalPolicy, SessionBackgroundCommand, SessionSkill, SessionMcpServerMetadata, SessionStatus, SessionToolPolicy, SessionTurn, SessionQueueSnapshot, SessionSystemUpdate, SessionSystemUpdateKind, SystemUpdateClassification, SessionTurnSource, SessionTurnStatus, TurnInitiator, TurnInitiatorContext, SocialConnection, SocialConnectionStatus, SocialPost, SocialProvider, ToolRef, ReasoningEffort, UsageEvent, Workspace, WorkspaceControlEvent, VariableSet, VariableSetSecret, VariableSetVariableMetadata, WorkspaceMember, WorkspaceMemoryPromptMode, WorkspaceRegisteredPack, Channel, Rig, RigProviderImage, RigProviderImages, RigVersion, RigVerificationHealth, RigChange, RigChangeKind, RigChangeStatus, RigCheck, NativeSnapshotDescriptor, TarWorkspaceArchiveDescriptor, WorkspaceArchiveDescriptor, ModalCheckpointProviderBinding, SandboxProviderContinuityRecovery, WorkClaimSubjectFilter, WorkDiscoveryProjection } from "@opengeni/contracts";
3
3
  import { type WorkspaceArchiveObjectRef, RequestHumanInteractionToolInput, XaiProviderAccountAuthoritySnapshotV1, type TimelineAnnotation } from "@opengeni/contracts";
4
- import { type LatencyMode, SessionSystemUpdatePayload, TurnExecutionPolicyV1 } from "@opengeni/contracts";
4
+ import { type LatencyMode, SessionSystemUpdatePayload, TurnExecutionPolicyV1, CodexCredentialPolicySnapshotV1 } from "@opengeni/contracts";
5
5
  import { type Settings } from "@opengeni/config";
6
6
  import { type CodexFetch } from "@opengeni/codex";
7
7
  export { isCodexBilledModel } from "@opengeni/codex";
@@ -11,6 +11,7 @@ export { frozenInitiatorForCommandActor, type FrozenTurnInitiator } from "./turn
11
11
  export { LOSSLESS_TEXT_PREFIX } from "./lossless-json.js";
12
12
  import { type NewSessionDraftSnapshot } from "./new-session-drafts.js";
13
13
  import { type SessionDiscoveryControl, type SessionCommandActor, type SessionTurnAttemptOutcome } from "./session-control.js";
14
+ import { type ConnectedMachineBackgroundCommandClaim } from "./session-background-commands.js";
14
15
  import { type SessionRealtimeContinuityEntry } from "./session-realtime-context.js";
15
16
  import * as schema from "./schema.js";
16
17
  export { sql as dbSql } from "drizzle-orm";
@@ -3683,6 +3684,10 @@ export type WorkspaceCodexSubscriptionSource = {
3683
3684
  organizationAvailable: boolean;
3684
3685
  };
3685
3686
  export declare function getWorkspaceCodexSubscriptionSource(db: Database, workspaceId: string): Promise<WorkspaceCodexSubscriptionSource>;
3687
+ export declare class CodexSubscriptionSourceChangeBlockedError extends Error {
3688
+ readonly code = "codex_subscription_source_change_blocked";
3689
+ constructor();
3690
+ }
3686
3691
  export declare function setWorkspaceCodexSubscriptionModeInTransaction(scopedDb: Database, input: {
3687
3692
  accountId: string;
3688
3693
  workspaceId: string;
@@ -3935,7 +3940,7 @@ export declare function getCodexCredentialStatus(db: Database, workspaceId: stri
3935
3940
  * decide whether to inject the synthetic codex-subscription provider, so billing
3936
3941
  * and provider-injection cannot drift. Metadata-only read (never the secret).
3937
3942
  */
3938
- export declare function workspaceCodexSubscriptionActive(db: Database, settings: Pick<Settings, "codexSubscriptionEnabled" | "codexCredentialLeasingEnabled">, workspaceId: string): Promise<boolean>;
3943
+ export declare function workspaceCodexSubscriptionActive(db: Database, settings: Pick<Settings, "codexSubscriptionEnabled">, workspaceId: string): Promise<boolean>;
3939
3944
  /**
3940
3945
  * CANONICAL "is this a Codex-billed turn?" predicate.
3941
3946
  *
@@ -3951,7 +3956,7 @@ export declare function workspaceCodexSubscriptionActive(db: Database, settings:
3951
3956
  */
3952
3957
  export declare function isCodexBilledTurn(input: {
3953
3958
  db: Database;
3954
- settings: Pick<Settings, "codexSubscriptionEnabled" | "codexCredentialLeasingEnabled">;
3959
+ settings: Pick<Settings, "codexSubscriptionEnabled">;
3955
3960
  workspaceId: string;
3956
3961
  model: string | null | undefined;
3957
3962
  /**
@@ -4023,15 +4028,25 @@ export type CodexCredentialLeaseCandidateFilter<TPolicyScope, TUnavailableDiagno
4023
4028
  accounts: readonly CodexLeaseAccountStatus[];
4024
4029
  policyScope: TPolicyScope | null;
4025
4030
  }) => readonly CodexLeaseAccountStatus[] | CodexCredentialLeaseCandidateFilterResult<TUnavailableDiagnostic>;
4031
+ /**
4032
+ * Codex session state read from the exact session row locked by credential
4033
+ * acquisition. Selection and pointer movement must use this snapshot rather
4034
+ * than an unlocked read taken before the allocator transaction.
4035
+ */
4036
+ export type CodexCredentialLeaseSessionState = {
4037
+ pinnedCredentialId: string | null;
4038
+ pinSource: "manual" | "policy" | null;
4039
+ lastCredentialId: string | null;
4040
+ };
4026
4041
  export type CodexCredentialLeaseSelectionContext<TPolicyScope = never, TUnavailableDiagnostic = never> = {
4027
4042
  accounts: CodexLeaseAccountStatus[];
4028
4043
  activeCredentialId: string | null;
4029
4044
  rotationEnabled: boolean;
4030
- /** Workspace cutover fence. False means the additive lease table stays inert. */
4031
- leaseRotationEnabled: boolean;
4032
4045
  rotationStrategy: string;
4033
4046
  /** A still-live idempotent lease for this SAME turn, if one exists. */
4034
4047
  existingCredentialId: string | null;
4048
+ /** Credentials already consumed by a definitive refusal on this accepted turn. */
4049
+ failedCredentialIds?: readonly string[];
4035
4050
  /** Downstream-owned accepted-turn policy; absent until a resolver is supplied. */
4036
4051
  policyScope: TPolicyScope | null;
4037
4052
  /** Diagnostics produced while choosing one policy scope for this NEW allocation. */
@@ -4049,6 +4064,14 @@ export type CodexCredentialLeaseResult<T, TUnavailableDiagnostic = never> = {
4049
4064
  activeCredentialId: string | null;
4050
4065
  rotationEnabled: boolean;
4051
4066
  rotationStrategy: string;
4067
+ /** Session state from the row locked during this acquisition. */
4068
+ sessionCodexState: CodexCredentialLeaseSessionState;
4069
+ /** Number of effective-pool rows before any downstream policy filter. */
4070
+ poolAccountCount: number;
4071
+ /** Accepted allocator policy captured with the first durable lease. */
4072
+ codexPolicySnapshot: CodexCredentialPolicySnapshotV1 | null;
4073
+ /** True when this acquisition reused a snapshot already present on the turn. */
4074
+ codexPolicySnapshotReused: boolean;
4052
4075
  credentialId: string | null;
4053
4076
  reused: boolean;
4054
4077
  holderId: string | null;
@@ -4057,7 +4080,19 @@ export type CodexCredentialLeaseResult<T, TUnavailableDiagnostic = never> = {
4057
4080
  unavailableDiagnostics: readonly TUnavailableDiagnostic[];
4058
4081
  /** Final selector decision after input policy and manual/policy pin handling. */
4059
4082
  advanceActivePointer: boolean;
4083
+ /** Frozen alternate-account budget observed before the first provider request. */
4084
+ failoverLimit: number;
4060
4085
  };
4086
+ export declare class CodexCredentialLeaseAttemptFencedError extends Error {
4087
+ readonly code = "codex_credential_lease_attempt_fenced";
4088
+ constructor();
4089
+ }
4090
+ export declare class CodexCredentialFailoverExhaustedError extends Error {
4091
+ readonly failoverCount: number;
4092
+ readonly maxFailovers: number;
4093
+ readonly code = "codex_credential_failover_exhausted";
4094
+ constructor(failoverCount: number, maxFailovers: number);
4095
+ }
4061
4096
  /**
4062
4097
  * Five minutes is deliberately much longer than the one-minute heartbeat and
4063
4098
  * much shorter than a five-hour allowance window. A killed worker therefore
@@ -4082,7 +4117,14 @@ export declare const CODEX_CREDENTIAL_LEASE_TTL_MS: number;
4082
4117
  export declare function acquireCodexCredentialLease<T, TPolicyScope = never, TUnavailableDiagnostic = never>(db: Database, input: {
4083
4118
  accountId: string;
4084
4119
  workspaceId: string;
4120
+ sessionId: string;
4085
4121
  turnId: string;
4122
+ attemptId: string;
4123
+ executionGeneration: number;
4124
+ workflowId: string;
4125
+ workflowRunId: string;
4126
+ dispatchId: string;
4127
+ expectedRedispatches: number;
4086
4128
  /** Unique Temporal/local activity execution id used as the zombie fence. */
4087
4129
  holderId: string;
4088
4130
  /** Pins must not move the workspace-global cursor. */
@@ -4100,9 +4142,9 @@ export declare function acquireCodexCredentialLease<T, TPolicyScope = never, TUn
4100
4142
  */
4101
4143
  filterNewAllocationCandidates?: CodexCredentialLeaseCandidateFilter<TPolicyScope, TUnavailableDiagnostic>;
4102
4144
  leaseTtlMs?: number;
4103
- }, select: (context: CodexCredentialLeaseSelectionContext<TPolicyScope, TUnavailableDiagnostic>) => CodexCredentialLeaseSelection<T>): Promise<CodexCredentialLeaseResult<T, TUnavailableDiagnostic>>;
4145
+ }, select: (context: CodexCredentialLeaseSelectionContext<TPolicyScope, TUnavailableDiagnostic>, sessionCodexState: CodexCredentialLeaseSessionState) => CodexCredentialLeaseSelection<T>): Promise<CodexCredentialLeaseResult<T, TUnavailableDiagnostic>>;
4104
4146
  export type CodexCapacityWaitStatus = "waiting" | "resumed" | "superseded";
4105
- export type CodexCapacityResetKind = "authoritative" | "bounded_refresh";
4147
+ export type CodexCapacityResetKind = "authoritative" | "bounded_refresh" | "mutation_only";
4106
4148
  export type CodexCapacityWait = {
4107
4149
  id: string;
4108
4150
  accountId: string;
@@ -4198,7 +4240,8 @@ export declare const CODEX_CAPACITY_REFRESH_MAX_MS: number;
4198
4240
  export declare function codexCapacityRefreshBackoffMs(attempt: number): number;
4199
4241
  /**
4200
4242
  * Atomically close one all-unavailable attempt and arm exactly one durable wait
4201
- * for the same logical turn. Lock order is allocator rotation row -> workspace
4243
+ * for the same logical turn. Lock order is workspace source advisory -> allocator
4244
+ * rotation row -> workspace
4202
4245
  * control -> actual workspace -> session -> exact turn -> exact attempt ->
4203
4246
  * optional goal -> live lease (when a reactive failure owns one) -> waiter.
4204
4247
  * The waiting turn/session pointer, durable events, exact lease release, and
@@ -4265,6 +4308,8 @@ export declare function reconcileCodexCapacityWait<TPolicyScope = never, TUnavai
4265
4308
  waiterId: string;
4266
4309
  generation: number;
4267
4310
  now?: Date;
4311
+ /** True only after the caller performed the due bounded metadata refresh. */
4312
+ boundedRefreshAttempted?: boolean;
4268
4313
  }, decide: (context: CodexCapacitySelectionContext<TPolicyScope, TUnavailableDiagnostic>) => CodexCapacityAvailabilityDecision, policy?: {
4269
4314
  resolvePolicyScope?: CodexCredentialLeasePolicyScopeResolver<TPolicyScope>;
4270
4315
  filterNewAllocationCandidates?: CodexCredentialLeaseCandidateFilter<TPolicyScope, TUnavailableDiagnostic>;
@@ -4368,7 +4413,8 @@ export declare function reconcileXaiCapacityWait(db: Database, input: {
4368
4413
  * Extend a live holder and return the database-confirmed expiry. A
4369
4414
  * missing/expired/released row returns null. A successful result lets the worker
4370
4415
  * derive a conservative monotonic deadline from the request start and configured
4371
- * TTL, without comparing the Postgres and worker wall clocks.
4416
+ * TTL, without comparing the Postgres and worker wall clocks; the worker still
4417
+ * rejects a response that returns after its prior confirmed deadline.
4372
4418
  */
4373
4419
  export declare function heartbeatCodexCredentialLeaseUntil(db: Database, accountId: string, workspaceId: string, turnId: string, holderId: string, generation: number, leaseTtlMs?: number): Promise<Date | null>;
4374
4420
  /** Extend a live holder. Compatibility wrapper for boolean-only callers. */
@@ -4384,20 +4430,46 @@ export type CodexCredentialLeaseQuarantine = {
4384
4430
  until: Date;
4385
4431
  cooldownKind: CodexCredentialCooldownKind;
4386
4432
  };
4433
+ export type CodexCredentialLeaseQuarantineResult = {
4434
+ action: "recorded";
4435
+ failoverCount: number;
4436
+ maxFailovers: number;
4437
+ exhausted: boolean;
4438
+ } | {
4439
+ action: "credential_changed";
4440
+ failoverCount: number;
4441
+ maxFailovers: number;
4442
+ currentCredentialVersion: number;
4443
+ } | {
4444
+ action: "stale";
4445
+ failoverCount: number;
4446
+ maxFailovers: number;
4447
+ };
4387
4448
  /**
4388
- * Quarantine the credential served by one exact live holder. The lease row is
4389
- * locked and checked before the credential write, so a superseded/expired
4390
- * activity cannot poison status or cooldown after a successor owns the turn.
4449
+ * Quarantine the credential served by one exact live attempt and token family.
4450
+ * The attempt, dispatch, lease, and credential version are checked before the
4451
+ * write. The same transaction freezes the accepted turn's alternate budget and
4452
+ * records the attempted credential, so waiter/database recovery cannot reset
4453
+ * accounting or return to an already-consumed account under rotation policy.
4391
4454
  */
4392
4455
  export declare function quarantineCodexCredentialForLease(db: Database, input: {
4393
4456
  accountId: string;
4394
4457
  workspaceId: string;
4458
+ sessionId: string;
4395
4459
  turnId: string;
4460
+ attemptId: string;
4461
+ executionGeneration: number;
4462
+ workflowId: string;
4463
+ workflowRunId: string;
4464
+ dispatchId: string;
4465
+ expectedRedispatches: number;
4396
4466
  credentialId: string;
4467
+ credentialVersion: number;
4397
4468
  holderId: string;
4398
4469
  generation: number;
4470
+ maxFailovers: number;
4399
4471
  quarantine: CodexCredentialLeaseQuarantine;
4400
- }): Promise<boolean>;
4472
+ }): Promise<CodexCredentialLeaseQuarantineResult>;
4401
4473
  /**
4402
4474
  * Metadata-only list of every connected Codex account in the workspace, for the
4403
4475
  * accounts UI + the worker's selection resolver. NEVER decrypts. `isActive` marks
@@ -4600,10 +4672,8 @@ export declare function recordCodexAccountUsage(db: Database, workspaceId: strin
4600
4672
  export declare function recordCodexAccountUsageWithWakeTargets(db: Database, workspaceId: string, credentialId: string, snapshot: CodexAccountUsageSnapshot): Promise<CodexCapacityMutationResult<boolean>>;
4601
4673
  export type CodexRotationSettings = {
4602
4674
  activeCredentialId: string | null;
4603
- /** Legacy selector bit; old binaries only understand this field. */
4675
+ /** False keeps new allocations on the active account; true permits pool failover. */
4604
4676
  rotationEnabled: boolean;
4605
- /** New allocator cutover bit; ignored safely by old binaries. */
4606
- leaseRotationEnabled: boolean;
4607
4677
  rotationStrategy: string;
4608
4678
  };
4609
4679
  /**
@@ -4655,20 +4725,6 @@ export declare function setInitialActiveCodexCredential(db: Database, workspaceI
4655
4725
  export declare function setCodexCredentialExhausted(db: Database, workspaceId: string, credentialId: string, until: Date | null, cooldownKind: CodexCredentialCooldownKind | null): Promise<boolean>;
4656
4726
  /** Cooldown mutation plus its committed durable capacity-wake outbox. */
4657
4727
  export declare function setCodexCredentialExhaustedWithWakeTargets(db: Database, workspaceId: string, credentialId: string, until: Date | null, cooldownKind: CodexCredentialCooldownKind | null): Promise<CodexCapacityMutationResult<boolean>>;
4658
- /**
4659
- * P3 reactive-rotation boundedness (Finding 1b): the number of CONSECUTIVE rotated
4660
- * 429-failover turns since the session last had a SUCCESSFUL turn. Counts
4661
- * `turn.failed` events carrying the `rotated` marker that occurred AFTER the most
4662
- * recent `turn.completed` event (the natural reset anchor — any successful turn
4663
- * moves the anchor past every prior failover, so the streak resets to 0). The
4664
- * reactive 429 catch consults this to bound its otherwise-0-delay re-dispatch:
4665
- * once the streak exceeds ~(connected accounts + margin) the path degrades to a
4666
- * fixed positive idle instead of another hot re-dispatch (invariant 4: NO THRASH),
4667
- * covering the double-fault where a cooldown write did not persist AND the 429
4668
- * carried no usage headers. Derived from persisted events so it is correct across
4669
- * the Temporal re-dispatch (each failover is a NEW turn, but its event survives).
4670
- */
4671
- export declare function countConsecutiveReactiveRotations(db: Database, workspaceId: string, sessionId: string): Promise<number>;
4672
4728
  /** The supported rotation strategies (P3). */
4673
4729
  export declare const CODEX_ROTATION_STRATEGIES: readonly ["most_remaining", "round_robin", "drain_then_next", "sharded"];
4674
4730
  export type CodexRotationStrategy = (typeof CODEX_ROTATION_STRATEGIES)[number];
@@ -4864,6 +4920,8 @@ export declare function ensureConnectorActionPolicyDefault(db: Database, input:
4864
4920
  changed: boolean;
4865
4921
  }>;
4866
4922
  export declare function prepareConnectorActionApproval(db: Database, identity: ConnectorActionAttemptIdentity, invocation: ConnectorActionInvocation): Promise<PrepareConnectorActionApprovalResult>;
4923
+ /** Resolve the frozen connector policy without creating approval or audit state. */
4924
+ export declare function previewConnectorActionApproval(db: Database, identity: ConnectorActionAttemptIdentity, invocation: ConnectorActionInvocation): Promise<PrepareConnectorActionApprovalResult>;
4867
4925
  export declare function beginConnectorActionExecution(db: Database, identity: ConnectorActionAttemptIdentity, invocation: ConnectorActionInvocation): Promise<BeginConnectorActionExecutionResult>;
4868
4926
  export declare function completeConnectorActionExecution(db: Database, input: {
4869
4927
  accountId: string;
@@ -5164,7 +5222,7 @@ type SessionTreeStats = NonNullable<Session["treeStats"]>;
5164
5222
  export declare function projectEffectiveControlForRelatedAccess(control: Session["effectiveControl"], sessionId: string, access: "target" | "root"): Session["effectiveControl"];
5165
5223
  /**
5166
5224
  * Remove metadata derived from sessions other than the exact authorized
5167
- * target, including parent identity and descendant counts.
5225
+ * target, including parent identity, policy provenance, and descendant counts.
5168
5226
  */
5169
5227
  export declare function projectSessionForRelatedAccess(session: Session, access: "target" | "root"): Session;
5170
5228
  /**
@@ -5345,7 +5403,8 @@ export declare function listSessionDiscoverySummaries(db: Database, workspaceId:
5345
5403
  recentHours?: number;
5346
5404
  subject?: WorkClaimSubjectFilter;
5347
5405
  claimLimit?: number;
5348
- /** Skip advisory claim reads for an operator-disabled discovery rollout. */
5406
+ /** Skip advisory claim reads on plain MCP browse or an operator-disabled rollout.
5407
+ * Omitted retains the REST/UI legacy evidence default. */
5349
5408
  includeWorkDiscovery?: boolean;
5350
5409
  subjectId?: string;
5351
5410
  authorizationScope?: SessionAuthorizationListScope;
@@ -5477,6 +5536,18 @@ export declare function getWorkspaceControlEvent(db: Database, workspaceId: stri
5477
5536
  * a session, while the workspace predicate remains the tenancy boundary.
5478
5537
  */
5479
5538
  export declare function getSessionEventByClientEventId(db: Database, workspaceId: string, sessionId: string, clientEventId: string): Promise<SessionEvent | null>;
5539
+ /**
5540
+ * Resolve the visible creation event for one exact tool operation. This is a
5541
+ * rolling-upgrade compatibility lookup for producers that predate deterministic
5542
+ * client event ids; the operation id remains bound to the same turn attempt.
5543
+ */
5544
+ export declare function getSessionToolCallCreatedEventByOperationId(db: Database, input: {
5545
+ workspaceId: string;
5546
+ sessionId: string;
5547
+ turnId: string;
5548
+ attemptId: string;
5549
+ operationId: string;
5550
+ }): Promise<SessionEvent | null>;
5480
5551
  export declare const APPROVAL_RUN_STATE_MAX_JSON_BYTES: number;
5481
5552
  export declare const APPROVAL_RUN_STATE_MAX_JSON_NODES = 65536;
5482
5553
  export declare const APPROVAL_RUN_STATE_MAX_JSON_PROPERTIES = 32768;
@@ -5608,6 +5679,34 @@ export declare function adoptConnectedMachineSessionBackgroundCommand(db: Databa
5608
5679
  settledAt: string | null;
5609
5680
  updatedAt: string;
5610
5681
  }>;
5682
+ /** Transfer one exact managed retained process from a live turn attempt to its
5683
+ * session. Retaining the provider process and backgrounding it are deliberately
5684
+ * separate: a provider yield only preserves physical ownership; this adoption
5685
+ * occurs immediately before the running receipt becomes model-visible. */
5686
+ export declare function adoptManagedSessionBackgroundCommand(db: Database, input: {
5687
+ accountId: string;
5688
+ workspaceId: string;
5689
+ sessionId: string;
5690
+ turnId: string;
5691
+ executionGeneration: number;
5692
+ attemptId: string;
5693
+ processId: string;
5694
+ expected: SandboxRetainedProcessIdentity;
5695
+ command: string;
5696
+ }): Promise<{
5697
+ id: string;
5698
+ workspaceId: string;
5699
+ sessionId: string;
5700
+ provider: "connected_machine" | "managed";
5701
+ state: "exited" | "lost" | "running" | "stopping";
5702
+ commandPreview: string;
5703
+ cancelRequestedAt: string | null;
5704
+ exitCode: number | null;
5705
+ settlementReason: string | null;
5706
+ startedAt: string;
5707
+ settledAt: string | null;
5708
+ updatedAt: string;
5709
+ }>;
5611
5710
  export type InstallOrReadTurnExecutionPolicyForAttemptResult = {
5612
5711
  accepted: true;
5613
5712
  installed: boolean;
@@ -7472,8 +7571,9 @@ export declare function deferRetainedProcessReconciliation(db: Database, input:
7472
7571
  export declare function countActiveRetainedProcessesByOwnerState(db: Database): Promise<ActiveRetainedProcessOwnerCount[]>;
7473
7572
  export declare function countExpiredDrainingSandboxLeases(db: Database): Promise<ExpiredDrainingSandboxLeaseCount[]>;
7474
7573
  /** Settle an exact retained process only after exit or definitive loss proof.
7475
- * The process row, parent admission, non-TTL holder, and lease count transition
7476
- * commit atomically. A duplicate terminal state + exit code is idempotent and
7574
+ * The process row, parent admission, non-TTL holder, lease count, and any
7575
+ * linked background-command terminal input commit atomically. A duplicate
7576
+ * terminal state + exit code is idempotent and
7477
7577
  * preserves the first durable evidence reason; contradictory physical truth
7478
7578
  * fails closed. */
7479
7579
  export declare function settleRetainedProcess(db: Database, input: {
@@ -7490,6 +7590,7 @@ export declare function settleRetainedProcess(db: Database, input: {
7490
7590
  }): Promise<{
7491
7591
  settled: boolean;
7492
7592
  process: SandboxRetainedProcess;
7593
+ backgroundCommandEvents: SessionEvent[];
7493
7594
  }>;
7494
7595
  /** Read the exact generation a verified capture must later fold. This is a
7495
7596
  * preflight only: persistWarmSnapshot/persistDrainSnapshot repeat the full
@@ -8714,6 +8815,9 @@ export type CreateSessionGoalInput = {
8714
8815
  };
8715
8816
  export declare function createSessionGoal(db: Database, input: CreateSessionGoalInput): Promise<SessionGoal>;
8716
8817
  export declare function getSessionGoal(db: Database, workspaceId: string, sessionId: string): Promise<SessionGoal | null>;
8818
+ /** Bounded MCP management facts. No config, goal metadata, or event payload is materialized.
8819
+ * The caller must authorize session.read first, just as for getSession/queue reads. */
8820
+ export declare function getSessionMcpMonitoringSummary(db: Database, workspaceId: string, sessionId: string): Promise<import("@opengeni/contracts").SessionMcpMonitoringSource>;
8717
8821
  export type SessionGoalContinuationProjection = {
8718
8822
  state: "inactive" | "scheduled" | "running" | "blocked" | "invariant_broken";
8719
8823
  reason: "goal_inactive" | "wake_pending" | "continuation_pending" | "human_work_pending" | "goal_turn_running" | "human_turn_running" | "workstream_paused" | "approval_required" | "provider_backpressure" | "session_cancelled" | "system_work_pending" | "held_for_input" | "backoff_pending" | "missing_obligation";
@@ -8721,7 +8825,7 @@ export type SessionGoalContinuationProjection = {
8721
8825
  observedRevision: number;
8722
8826
  nextAttemptAt: string | null;
8723
8827
  lastError: string | null;
8724
- /** The agent's stated `goal_wait` reason while `held_for_input`; null otherwise. */
8828
+ /** The agent's stated `wait_for_input` reason while held; null otherwise. */
8725
8829
  holdReason: string | null;
8726
8830
  };
8727
8831
  /**
@@ -8841,34 +8945,19 @@ export declare function updateSessionGoalWithEvent(db: Database, workspaceId: st
8841
8945
  outcome: "applied" | "proposed";
8842
8946
  proposalId: string | null;
8843
8947
  }>;
8948
+ /** Maximum relative duration accepted by the session-level out-of-turn wait. */
8949
+ export declare const SESSION_INPUT_WAIT_MIN_SECONDS = 30;
8950
+ export declare const SESSION_INPUT_WAIT_MAX_SECONDS: number;
8951
+ export declare const SESSION_INPUT_WAIT_REASON_MAX_BYTES: number;
8844
8952
  /**
8845
- * Record execution progress without changing goal semantics or either goal
8846
- * revision. The attempt-fenced operation receipt makes a recovered tool call
8847
- * converge on the original event instead of manufacturing progress twice.
8848
- */
8849
- /**
8850
- * Column set that retires an agent-declared `goal_wait` hold. Spread into every
8851
- * goal head mutation (status transition, applied semantic revision, replace) so
8852
- * newer truth never sits behind an older wait.
8953
+ * Agent `wait_for_input`: persist one session-owned, self-only out-of-turn
8954
+ * wait. The exact declaring turn and absolute deadline are causal authority;
8955
+ * Temporal/NATS are replaceable wake hints. A replacement attempt replaying
8956
+ * the same target-scoped operation key receives the committed result.
8853
8957
  */
8854
- export declare const SESSION_GOAL_HOLD_MIN_SECONDS = 30;
8855
- export declare const SESSION_GOAL_HOLD_MAX_SECONDS: number;
8856
- /**
8857
- * Agent `goal_wait`: record that the active goal's next continuation should
8858
- * wait for child results, a message, a human prompt, or the deadline instead of
8859
- * materializing immediately after the declaring turn ends.
8860
- *
8861
- * The hold is bound to the exact caller turn. The materializer honors it only
8862
- * while that turn is still the latest finished turn and `now < until`; it
8863
- * never consumes the wake/observed revision ledger. The receipt, goal
8864
- * mutation, and `goal.held` timeline fact commit under the canonical goal
8865
- * event-write prefix (control FOR SHARE -> workspace FOR KEY SHARE -> session
8866
- * FOR NO KEY UPDATE), never a workspace FOR UPDATE. A replacement attempt
8867
- * replaying the same target-scoped operation key receives the stored result.
8868
- */
8869
- export declare function holdSessionGoalContinuationWithEvent(db: Database, workspaceId: string, sessionId: string, input: {
8958
+ export declare function waitForSessionInputWithEvent(db: Database, workspaceId: string, sessionId: string, input: {
8870
8959
  reason: string;
8871
- untilSeconds: number;
8960
+ timeoutSeconds: number;
8872
8961
  command: {
8873
8962
  accountId: string;
8874
8963
  actor: Extract<SessionCommandActor, {
@@ -8877,13 +8966,17 @@ export declare function holdSessionGoalContinuationWithEvent(db: Database, works
8877
8966
  operationKey: string;
8878
8967
  };
8879
8968
  }): Promise<{
8880
- goal: SessionGoal;
8881
8969
  events: SessionEvent[];
8882
8970
  operationId: string;
8883
8971
  replay: boolean;
8884
- holdTurnId: string;
8885
- untilAt: string;
8972
+ waitTurnId: string;
8973
+ deadlineAt: string;
8886
8974
  }>;
8975
+ /**
8976
+ * Record execution progress without changing goal semantics or either goal
8977
+ * revision. The attempt-fenced operation receipt makes a recovered tool call
8978
+ * converge on the original event instead of manufacturing progress twice.
8979
+ */
8887
8980
  export declare function recordSessionGoalProgressWithEvent(db: Database, workspaceId: string, sessionId: string, input: {
8888
8981
  progressNote: string;
8889
8982
  command: {
@@ -9044,11 +9137,6 @@ export type GoalIdleBackoffPolicy = {
9044
9137
  export type MaterializeGoalContinuationResult = {
9045
9138
  action: "none" | "queue";
9046
9139
  events: [];
9047
- } | {
9048
- action: "held";
9049
- events: [];
9050
- holdTurnId: string;
9051
- holdUntil: Date;
9052
9140
  } | {
9053
9141
  action: "deferred";
9054
9142
  events: [];
@@ -9331,10 +9419,37 @@ export type SessionWorkPeek = {
9331
9419
  } | {
9332
9420
  kind: "cancellation-wait";
9333
9421
  attemptId: string;
9422
+ } | {
9423
+ kind: "input-wait";
9424
+ disposition: "held" | "timeout" | "superseded";
9425
+ waitTurnId: string;
9426
+ deadlineAt: string;
9334
9427
  } | {
9335
9428
  kind: "idle";
9336
9429
  };
9337
9430
  export declare function peekSessionWork(db: Database, workspaceId: string, sessionId: string): Promise<SessionWorkPeek>;
9431
+ export type SettleSessionInputWaitResult = {
9432
+ action: "held";
9433
+ events: [];
9434
+ workflowWakeRevision: number;
9435
+ } | {
9436
+ action: "timeout";
9437
+ events: SessionEvent[];
9438
+ workflowWakeRevision: number | null;
9439
+ } | {
9440
+ action: "superseded";
9441
+ events: SessionEvent[];
9442
+ } | {
9443
+ action: "stale";
9444
+ events: [];
9445
+ };
9446
+ export declare function settleSessionInputWait(db: Database, input: {
9447
+ accountId: string;
9448
+ workspaceId: string;
9449
+ sessionId: string;
9450
+ waitTurnId: string;
9451
+ disposition: "held" | "timeout" | "superseded";
9452
+ }): Promise<SettleSessionInputWaitResult>;
9338
9453
  export type FailSessionWorkBeforeAttemptClaimInput = {
9339
9454
  accountId: string;
9340
9455
  sessionId: string;
@@ -9409,6 +9524,13 @@ export type ApplySessionTurnSettlementInput = {
9409
9524
  turnStatus: SessionTurnStatus;
9410
9525
  sessionStatus: SessionStatus;
9411
9526
  activeTurnId: string | null;
9527
+ /**
9528
+ * Finish this terminal turn without arming the active goal's autonomous
9529
+ * continuation. The goal remains active so explicit later work can proceed,
9530
+ * but this exact settlement cannot synthesize another turn from unchanged
9531
+ * input after a bounded terminal condition.
9532
+ */
9533
+ suppressGoalContinuation?: boolean;
9412
9534
  events: AppendEventInput[];
9413
9535
  /**
9414
9536
  * A mid-turn requires_action freeze. Human-input rows and interaction
@@ -9491,7 +9613,8 @@ export type SettleCodexCredentialFailoverResult = {
9491
9613
  } | {
9492
9614
  action: "limit_exceeded";
9493
9615
  failoverCount: number;
9494
- events: [];
9616
+ maxFailovers: number;
9617
+ events: SessionEvent[];
9495
9618
  };
9496
9619
  export type SettleCodexCredentialLeaseLossResult = {
9497
9620
  action: "recovering";
@@ -9529,11 +9652,13 @@ export declare function settleCodexCredentialLeaseLoss(db: Database, input: {
9529
9652
  /**
9530
9653
  * Atomically settle a definitive Codex credential failover. Conversation
9531
9654
  * history/RunState is persisted by the caller first; this transaction then
9532
- * fences the exact activity lease, increments the bounded same-turn counter,
9533
- * appends both durable events, marks the same turn recoverable, updates the
9534
- * session, and releases the lease together. The exact holder remains provable
9535
- * if its row just expired or was reaped; a successor, redispatch, or closed
9536
- * inference gate makes the caller stale without a second settlement path.
9655
+ * fences the exact activity lease, consumes the quarantine transaction's
9656
+ * bounded same-turn receipt, appends durable recovery or terminal events,
9657
+ * updates the turn/session, and releases the lease together. Exhaustion also
9658
+ * suppresses autonomous goal continuation and enqueues a failed-child notice in
9659
+ * this transaction. The exact holder remains provable if its row just expired
9660
+ * or was reaped; a successor, redispatch, or closed inference gate makes the
9661
+ * caller stale without a second settlement path.
9537
9662
  */
9538
9663
  export declare function settleCodexCredentialFailover(db: Database, input: {
9539
9664
  accountId: string;
@@ -9541,11 +9666,12 @@ export declare function settleCodexCredentialFailover(db: Database, input: {
9541
9666
  sessionId: string;
9542
9667
  turnId: string;
9543
9668
  attemptId: string;
9544
- holderId: string;
9545
- generation: number;
9669
+ holderId?: string | null;
9670
+ generation?: number | null;
9546
9671
  expectedRedispatches: number;
9547
9672
  maxFailovers: number;
9548
9673
  recoveryPayload: Record<string, unknown>;
9674
+ failedPayload?: Record<string, unknown>;
9549
9675
  }): Promise<SettleCodexCredentialFailoverResult>;
9550
9676
  export type RequestSessionTurnRecoveryInput = {
9551
9677
  sessionId: string;
@@ -9829,6 +9955,29 @@ export declare function addSessionSystemUpdateWithSourceMutation<RequireIdleSess
9829
9955
  /** Runs under the locked session/source transaction before any update/event insert. */
9830
9956
  prepareSource?: (tx: Database, sessionId: string) => Promise<PrepareSessionSystemUpdateSourceResult | void>;
9831
9957
  }): Promise<AddSessionSystemUpdateResult<RequireIdleSession>>;
9958
+ export type SessionBackgroundCommandTerminalSettlement = {
9959
+ command: SessionBackgroundCommand;
9960
+ events: SessionEvent[];
9961
+ };
9962
+ export declare function settleConnectedMachineSessionBackgroundCommand(db: Database, input: {
9963
+ accountId: string;
9964
+ workspaceId: string;
9965
+ sessionId: string;
9966
+ commandId: string;
9967
+ controlWorkspaceId: string;
9968
+ enrollmentId: string;
9969
+ connectionInstanceId: string;
9970
+ opId: string;
9971
+ outcome: "exited" | "lost";
9972
+ exitCode: number | null;
9973
+ reason: string;
9974
+ }): Promise<SessionBackgroundCommandTerminalSettlement | null>;
9975
+ export declare function settleClaimedConnectedMachineBackgroundCommand(db: Database, input: {
9976
+ claim: ConnectedMachineBackgroundCommandClaim;
9977
+ }): Promise<{
9978
+ settled: boolean;
9979
+ events: SessionEvent[];
9980
+ }>;
9832
9981
  /**
9833
9982
  * One durable machine input by id, under the ordinary workspace RLS scope.
9834
9983
  * The row outlives delivery, so a late bounded projection of an already
@@ -10028,10 +10177,13 @@ export { adoptPackComponentReferences, finalizePackComponentOwnership, listPackI
10028
10177
  export { deferPackInstallationOperation, finalizePackInstallationOperation, finalizePackUninstallOperation, PackManifestChangedError, PackOperationClaimLostError, PackOperationInProgressError, PackInstallationVersionConflictError, PackInstallationVersionRequiredError, PackOperationIdempotencyError, preparePackInstallationOperation, preparePackUninstallOperation, touchPackInstallationOperation, type PreparedPackInstallation, } from "./pack-installations.js";
10029
10178
  export { checkpointPluginPackageOperation, deferPluginPackageOperation, finalizePluginPackageInstall, getInstalledPluginPackage, getPluginPackageUninstallPreview, installPluginMcpReference, listInstalledPluginPackages, PluginInstallationVersionConflictError, PluginInstallationVersionRequiredError, PluginOperationIdempotencyError, preparePluginPackageInstall, uninstallPluginPackage, type InstalledPluginPackage, type InstalledPluginPackageSummary, type PluginBomComponent, type PreparedPluginPackage, } from "./plugin-packages.js";
10030
10179
  export * from "./workspace-artifacts.js";
10180
+ export * from "./mcp-oauth.js";
10181
+ export * from "./tool-gateway-approvals.js";
10031
10182
  export * from "./transcription-recordings.js";
10032
10183
  export * from "./editable-artifacts.js";
10033
10184
  export * from "./editable-artifact-materialization.js";
10034
10185
  export * from "./attempt-tool-catalogs.js";
10186
+ export * from "./model-context-snapshots.js";
10035
10187
  export * from "./codemode-operations.js";
10036
10188
  export * from "./browser-sessions.js";
10037
10189
  export * from "./computer-sessions.js";