@opengeni/db 1.4.0 → 1.4.2

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 (68) hide show
  1. package/dist/canonical-human-identities.js +2 -2
  2. package/dist/capability-reconciliation.js +1 -1
  3. package/dist/{chunk-7QWWTVYH.js → chunk-5ROHLEN6.js} +29 -4
  4. package/dist/chunk-5ROHLEN6.js.map +1 -0
  5. package/dist/{chunk-BA52ITIY.js → chunk-A4J7EECR.js} +2 -2
  6. package/dist/{chunk-3WUCM7YF.js → chunk-B5C5SBSI.js} +2 -2
  7. package/dist/{chunk-VCHK4D6S.js → chunk-DKFEUGM4.js} +2 -2
  8. package/dist/{chunk-EFANLEWI.js → chunk-HUKBIZGH.js} +2 -2
  9. package/dist/{chunk-27T4AP25.js → chunk-IT3EYY2C.js} +5 -3
  10. package/dist/{chunk-27T4AP25.js.map → chunk-IT3EYY2C.js.map} +1 -1
  11. package/dist/{chunk-NT7OGKYX.js → chunk-JWBEE4CL.js} +3 -3
  12. package/dist/{chunk-AMK3FNOW.js → chunk-K5MTNKJU.js} +3 -3
  13. package/dist/{chunk-GC5GUTV3.js → chunk-NZ2SP55O.js} +2 -2
  14. package/dist/{chunk-TRUEH4I2.js → chunk-OKCBARX6.js} +2 -2
  15. package/dist/{chunk-EMYA6XNE.js → chunk-OV5AUIBA.js} +2 -2
  16. package/dist/{chunk-T3CYF3DH.js → chunk-TODVDGMO.js} +35 -17
  17. package/dist/{chunk-T3CYF3DH.js.map → chunk-TODVDGMO.js.map} +1 -1
  18. package/dist/{chunk-CKDHKQS4.js → chunk-W75DRYG3.js} +4 -4
  19. package/dist/{chunk-UQELJ6OM.js → chunk-Y72DP3JF.js} +2 -2
  20. package/dist/codemode-approvals.d.ts +7 -1
  21. package/dist/connect-attempts.js +2 -2
  22. package/dist/credit-balances.d.ts +25 -4
  23. package/dist/database.d.ts +7 -1
  24. package/dist/editable-artifact-durable-export.js +1 -1
  25. package/dist/editable-artifacts.js +2 -2
  26. package/dist/index.d.ts +24 -2
  27. package/dist/index.js +2778 -2508
  28. package/dist/index.js.map +1 -1
  29. package/dist/managed-auth-session-sets.js +2 -2
  30. package/dist/mcp-operations.js +1 -1
  31. package/dist/modal-native-live-origin.d.ts +75 -0
  32. package/dist/organization-integration-policy.js +2 -2
  33. package/dist/provision-roles.js +1 -1
  34. package/dist/retained-provider-commands.d.ts +21 -21
  35. package/dist/retained-provider-commands.js +5 -5
  36. package/dist/runtime-posture.d.ts +1 -1
  37. package/dist/sandbox-interaction-idle.d.ts +22 -0
  38. package/dist/session-background-commands.js +3 -3
  39. package/dist/session-command-output.js +4 -4
  40. package/dist/session-event-slices.js +2 -2
  41. package/dist/session-mcp-credential-rotation.js +4 -4
  42. package/dist/session-tenancy.js +2 -2
  43. package/dist/video-generation.js +2 -2
  44. package/dist/workspace-tool-defaults.js +3 -3
  45. package/drizzle/0632_modal_native_live_origin.sql +239 -0
  46. package/package.json +7 -7
  47. package/src/codemode-approvals.ts +52 -22
  48. package/src/codemode-operations.ts +198 -181
  49. package/src/credit-balances.ts +58 -17
  50. package/src/database.ts +9 -0
  51. package/src/index.ts +449 -254
  52. package/src/modal-native-live-origin.ts +148 -0
  53. package/src/provision-roles.ts +12 -0
  54. package/src/runtime-posture.ts +32 -3
  55. package/src/sandbox-interaction-idle.ts +91 -0
  56. package/src/transcription-recordings.ts +3 -1
  57. package/dist/chunk-7QWWTVYH.js.map +0 -1
  58. /package/dist/{chunk-BA52ITIY.js.map → chunk-A4J7EECR.js.map} +0 -0
  59. /package/dist/{chunk-3WUCM7YF.js.map → chunk-B5C5SBSI.js.map} +0 -0
  60. /package/dist/{chunk-VCHK4D6S.js.map → chunk-DKFEUGM4.js.map} +0 -0
  61. /package/dist/{chunk-EFANLEWI.js.map → chunk-HUKBIZGH.js.map} +0 -0
  62. /package/dist/{chunk-NT7OGKYX.js.map → chunk-JWBEE4CL.js.map} +0 -0
  63. /package/dist/{chunk-AMK3FNOW.js.map → chunk-K5MTNKJU.js.map} +0 -0
  64. /package/dist/{chunk-GC5GUTV3.js.map → chunk-NZ2SP55O.js.map} +0 -0
  65. /package/dist/{chunk-TRUEH4I2.js.map → chunk-OKCBARX6.js.map} +0 -0
  66. /package/dist/{chunk-EMYA6XNE.js.map → chunk-OV5AUIBA.js.map} +0 -0
  67. /package/dist/{chunk-CKDHKQS4.js.map → chunk-W75DRYG3.js.map} +0 -0
  68. /package/dist/{chunk-UQELJ6OM.js.map → chunk-Y72DP3JF.js.map} +0 -0
@@ -20,8 +20,8 @@ import {
20
20
  reapManagedAuthIsolatedSessions,
21
21
  releaseManagedAuthActorMutationLease,
22
22
  validateManagedAuthActorMutationLease
23
- } from "./chunk-UQELJ6OM.js";
24
- import "./chunk-27T4AP25.js";
23
+ } from "./chunk-Y72DP3JF.js";
24
+ import "./chunk-IT3EYY2C.js";
25
25
  import "./chunk-JL6TBB76.js";
26
26
  import "./chunk-P7YDM2RI.js";
27
27
  import "./chunk-PZ5AY32C.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  withRlsContext
3
- } from "./chunk-27T4AP25.js";
3
+ } from "./chunk-IT3EYY2C.js";
4
4
  import "./chunk-JL6TBB76.js";
5
5
  import {
6
6
  LOSSLESS_CONTENT_CODEC_VERSION,
@@ -0,0 +1,75 @@
1
+ import { type Database } from "./database.js";
2
+ /** Structural V2 correlation scope. This is deliberately NOT an actor/grant. */
3
+ export type ModalNativeLiveOriginScope = Readonly<{
4
+ version: 2;
5
+ declarationId: string;
6
+ planId: string;
7
+ creatorId: string;
8
+ accountId: string;
9
+ workspaceId: string;
10
+ sessionId: string;
11
+ turnId: string;
12
+ attemptId: string;
13
+ executionGeneration: number;
14
+ triggerEventId: string;
15
+ sandboxGroupId: string;
16
+ routeKind: "home";
17
+ routeTargetId: null;
18
+ routeEpoch: number;
19
+ }>;
20
+ export type ModalNativeLiveOriginProjection = Readonly<{
21
+ version: 1;
22
+ scope: ModalNativeLiveOriginScope;
23
+ initiator: {
24
+ kind: "subject" | "service";
25
+ subjectId: string;
26
+ initiatingHumanSubjectId: string;
27
+ };
28
+ membership: {
29
+ id: string;
30
+ authorizationRevision: string;
31
+ basis: "workspace_membership" | "personal_workspace";
32
+ };
33
+ acceptedAuthority: {
34
+ epoch: number;
35
+ visibility: "user_private" | "workspace_shared";
36
+ ownerOrganizationMembershipId: string | null;
37
+ };
38
+ currentAuthority: {
39
+ epoch: number;
40
+ executionEpoch: number;
41
+ visibility: "user_private" | "workspace_shared";
42
+ ownerSubjectId: string | null;
43
+ ownerOrganizationMembershipId: string | null;
44
+ };
45
+ control: {
46
+ workspaceRevision: string;
47
+ sessionVersion: string;
48
+ };
49
+ execution: {
50
+ workflowId: string;
51
+ workflowRunId: string;
52
+ activityId: string;
53
+ };
54
+ providerRecoveryCount: 0 | 1 | 2 | 3 | 4 | 5;
55
+ checkedAt: string;
56
+ }>;
57
+ export type ModalNativeLiveOriginResult = {
58
+ kind: "live";
59
+ projection: ModalNativeLiveOriginProjection;
60
+ } | {
61
+ kind: "fenced";
62
+ } | {
63
+ kind: "unsupported";
64
+ reason: "invalid_scope" | "human_unavailable" | "external_authority" | "not_premodel";
65
+ };
66
+ /**
67
+ * Private-server integration primitive, NOT host authentication or a grant.
68
+ * The caller must authenticate the exact host request separately and consume
69
+ * this projection in this SAME transaction. No native/provider awaits here.
70
+ * Enter before taking any tenancy/control/session/lease lock: SQL acquires the
71
+ * organization-membership -> tenancy -> canonical control/row prefix itself.
72
+ * Preserves all subject and tenant GUCs. SQL uncertainty propagates (including
73
+ * 55P03); no failed/aborted transaction is reported as successful admission.
74
+ */
75
+ export declare function lockLiveNativeOriginalOriginTx(scopedTx: Database, scope: ModalNativeLiveOriginScope): Promise<ModalNativeLiveOriginResult>;
@@ -3,9 +3,9 @@ import {
3
3
  updateOrganizationIntegrationPolicy,
4
4
  withOrganizationIntegrationAcquisition,
5
5
  withOrganizationIntegrationPolicyFence
6
- } from "./chunk-BA52ITIY.js";
6
+ } from "./chunk-A4J7EECR.js";
7
7
  import "./chunk-4UJCXBR2.js";
8
- import "./chunk-27T4AP25.js";
8
+ import "./chunk-IT3EYY2C.js";
9
9
  import "./chunk-JL6TBB76.js";
10
10
  import "./chunk-P7YDM2RI.js";
11
11
  import "./chunk-PZ5AY32C.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  provisionRoles
3
- } from "./chunk-7QWWTVYH.js";
3
+ } from "./chunk-5ROHLEN6.js";
4
4
  import "./chunk-PZ5AY32C.js";
5
5
  export {
6
6
  provisionRoles
@@ -18,24 +18,6 @@ export declare function retainedProviderCommandPersistence(db: Database, scope:
18
18
  requestCancellation: (reason: "provider_deadline" | "explicit_stop") => Promise<void>;
19
19
  cancellationRequested: () => Promise<boolean>;
20
20
  load: () => Promise<{
21
- kind: "modal-control-v1";
22
- sandboxId: string;
23
- taskId: string;
24
- execId: string;
25
- pty?: boolean | undefined;
26
- streams: {
27
- stdout: {
28
- batchIndex: number;
29
- utf8Remainder: string;
30
- exitCode: number | null;
31
- };
32
- stderr: {
33
- batchIndex: number;
34
- utf8Remainder: string;
35
- exitCode: number | null;
36
- };
37
- };
38
- } | {
39
21
  kind: "modal-router-v1";
40
22
  sandboxId: string;
41
23
  taskId: string;
@@ -61,8 +43,7 @@ export declare function retainedProviderCommandPersistence(db: Database, scope:
61
43
  exitCode: number | null;
62
44
  };
63
45
  };
64
- } | null>;
65
- acknowledge: (command: SandboxProviderCommand) => Promise<{
46
+ } | {
66
47
  kind: "modal-control-v1";
67
48
  sandboxId: string;
68
49
  taskId: string;
@@ -80,7 +61,8 @@ export declare function retainedProviderCommandPersistence(db: Database, scope:
80
61
  exitCode: number | null;
81
62
  };
82
63
  };
83
- } | {
64
+ } | null>;
65
+ acknowledge: (command: SandboxProviderCommand) => Promise<{
84
66
  kind: "modal-router-v1";
85
67
  sandboxId: string;
86
68
  taskId: string;
@@ -106,6 +88,24 @@ export declare function retainedProviderCommandPersistence(db: Database, scope:
106
88
  exitCode: number | null;
107
89
  };
108
90
  };
91
+ } | {
92
+ kind: "modal-control-v1";
93
+ sandboxId: string;
94
+ taskId: string;
95
+ execId: string;
96
+ pty?: boolean | undefined;
97
+ streams: {
98
+ stdout: {
99
+ batchIndex: number;
100
+ utf8Remainder: string;
101
+ exitCode: number | null;
102
+ };
103
+ stderr: {
104
+ batchIndex: number;
105
+ utf8Remainder: string;
106
+ exitCode: number | null;
107
+ };
108
+ };
109
109
  }>;
110
110
  reserveInput: (byteLength?: number) => Promise<number>;
111
111
  captureRouterPage: (page: RetainedRouterOutputPage) => Promise<{
@@ -14,12 +14,12 @@ import {
14
14
  retainedProviderCommandPersistence,
15
15
  supervisedCommandProtocolReady,
16
16
  validateRouterOutputAdvance
17
- } from "./chunk-CKDHKQS4.js";
18
- import "./chunk-AMK3FNOW.js";
19
- import "./chunk-NT7OGKYX.js";
20
- import "./chunk-T3CYF3DH.js";
17
+ } from "./chunk-W75DRYG3.js";
18
+ import "./chunk-K5MTNKJU.js";
19
+ import "./chunk-JWBEE4CL.js";
20
+ import "./chunk-TODVDGMO.js";
21
21
  import "./chunk-4UJCXBR2.js";
22
- import "./chunk-27T4AP25.js";
22
+ import "./chunk-IT3EYY2C.js";
23
23
  import "./chunk-JL6TBB76.js";
24
24
  import "./chunk-P7YDM2RI.js";
25
25
  import "./chunk-PZ5AY32C.js";
@@ -7,7 +7,7 @@ export declare const SLACK_FILE_UPLOAD_OPERATIONS_TABLE = "slack_file_upload_ope
7
7
  export declare const WORK_CLAIM_CAPABILITY_ROUTINES: readonly ["upsert_session_work_claim_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, uuid, integer, text, text, text, text, text, text, text)", "release_session_work_claim_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, uuid, uuid, integer, text)"];
8
8
  export declare const CLAUDE_SUBSCRIPTION_CAPABILITY_ROUTINES: string[];
9
9
  export declare const SUBSCRIPTION_ACCOUNT_CAPABILITY_ROUTINES: string[];
10
- export declare const RUNTIME_TARGET_SCHEMA_CAPABILITY_ROUTINES: readonly [...string[], "open_private_session_create_capability(uuid, uuid, uuid, text)", "open_private_child_session_create_capability(uuid, uuid, uuid, uuid, uuid, uuid, integer)", "close_private_session_create_capability(uuid)", "resolve_session_attempt_personal_resources(uuid, uuid, uuid)", "list_owned_connection_accounts(uuid, uuid)", "accept_turn_personal_resource_attachment(uuid, uuid, uuid, uuid, text, integer, boolean, integer)", "list_self_user_resource_authorities(uuid, uuid, text, uuid, integer)", "issue_self_user_resource_grant(uuid, uuid, uuid, text, text, text, uuid, integer, boolean)", "revoke_self_user_resource_grant(uuid, uuid, uuid)", "authorize_session_attempt_personal_resource_reads(uuid, uuid, uuid)", "preference_registry_create_knowledge_proposal_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, uuid, text, uuid, text, text, text, text, integer, text, jsonb, timestamp with time zone, text)", "create_scoped_variable_set(uuid, uuid, text, text, text, jsonb, boolean)", "list_scoped_variable_sets(uuid, uuid, uuid, text, text)", "count_scoped_variable_sets(uuid, uuid, text)", "mutate_scoped_variable_set(uuid, uuid, uuid, text, text, boolean, text, boolean, text, text, boolean)", "read_scoped_variable_set_secret(uuid, uuid, uuid, text, text, text, uuid, uuid, uuid, integer)", "materialize_scoped_variable_set_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, uuid)", "materialize_scoped_variable_set_for_session(uuid, uuid, uuid, uuid)", "connection_authority_convergence_audit_capability_active(uuid)", "resolve_accepted_connection_use(uuid, uuid, uuid, uuid, uuid, integer, uuid, text, text, uuid, text, text, text, text)", "inspect_organization_connection_authority_convergence(uuid, integer, uuid)", "get_self_personal_github_repository_selection(uuid, uuid, text, uuid)", "mutate_self_personal_github_repository_selection(uuid, uuid, text, uuid, bigint, bigint, text, jsonb, boolean)", "create_personal_document_authority(uuid, uuid, uuid)", "resolve_document_original_file(uuid, uuid, text, uuid)", "resolve_session_attempt_personal_document_reads(uuid, uuid, uuid, uuid)", "list_document_authority_reclassifications(uuid, uuid, text, uuid, integer, timestamp with time zone, uuid)", "reclassify_document_authority(jsonb)", "run_document_default_collection_backfill(jsonb)", "list_document_default_collection_backfill_runs(jsonb)", "get_document_default_collection_backfill_audit(jsonb)", "list_organization_document_authority_reclassifications(jsonb)", "create_scoped_rig(uuid, uuid, text, text, text, text, jsonb, boolean)", "list_scoped_rigs(uuid, uuid, uuid, text, text)", "count_scoped_rigs(uuid, uuid, text)", "mutate_scoped_rig(uuid, uuid, uuid, text, text, boolean, text, boolean, boolean)", "finalize_scoped_enrollment(uuid, uuid, text, text, boolean, boolean, text, text, text, boolean)", "list_scoped_enrollments(uuid, uuid, uuid, text)", "get_scoped_sandbox(uuid, uuid, uuid)", "authorize_scoped_sandbox_attach(uuid, uuid, uuid)", "materialize_scoped_rig_version_for_attempt(uuid, uuid, uuid, uuid, uuid, integer)", "authorize_session_attempt_personal_machine(uuid, uuid, uuid, uuid, uuid, integer, uuid)", "assert_session_attempt_personal_machine(uuid, uuid, uuid, uuid, uuid, integer, uuid, boolean)", "list_scoped_machine_dependent_sessions(uuid, uuid, uuid)", "detach_scoped_machine_dependent_sessions(uuid, uuid, uuid)", "freeze_scheduled_task_personal_resources(uuid, uuid, uuid, bigint)", "clone_scheduled_task_personal_resource_authority(uuid, uuid, uuid, bigint, bigint)", "create_scheduled_agent_run_with_admission(uuid, uuid, uuid, uuid, bigint, text, text, text, timestamp with time zone, timestamp with time zone, jsonb)", "materialize_scheduled_task_reusable_session_from_run(uuid, uuid, uuid, uuid, uuid, bigint, text)", "scheduled_task_run_personal_resource_authority(uuid, uuid, uuid)", "scheduled_task_run_connection_authority_subject(uuid, uuid, uuid)", "scheduled_task_personal_resource_authority_subject(uuid, uuid, uuid, bigint)", "record_scheduled_task_revision_authority(uuid, uuid, uuid, bigint)", "clone_scheduled_task_revision_authority(uuid, uuid, uuid, bigint, bigint)", "scheduled_task_revision_authority_subject(uuid, uuid, uuid, bigint)", "scheduled_task_revision_authority_snapshot(uuid, uuid, uuid, bigint)", "validate_scheduled_agent_run_live_authority(uuid, uuid, uuid)", "scheduled_scoped_rig_version_metadata(uuid, uuid, text, uuid, uuid)", "scheduled_variable_set_expected_generation_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, uuid)", "bind_scheduled_task_run_session(uuid, uuid, uuid, uuid)", "transition_scheduled_agent_run(uuid, uuid, uuid, uuid, uuid, text, text)", "mutate_managed_sign_in_method(text, text, jsonb)", "assert_managed_sign_in_recovery(text, text, uuid, jsonb)", "replay_managed_sign_in_method(text, text, jsonb)", "claim_managed_sign_in_notification(uuid, text, text, integer)", "settle_managed_sign_in_notification(uuid, uuid, text)", "ensure_canonical_human_identity(text, text)", "validate_canonical_human_session(text, text, boolean)", "get_canonical_human_identity_projection(text)", "apply_canonical_human_identity_operation(uuid, text, bigint, text, uuid, text, text, text)", "get_canonical_human_exact_login_binding(text, text)", "managed_auth_session_set_authority_state(text)", "managed_auth_session_set_snapshot(text, text, boolean, boolean, boolean)", "managed_auth_session_set_bootstrap(text, text, text, text, uuid, text, bigint, bigint)", "managed_auth_session_set_begin_transaction(text, text, text, uuid, text, bigint, uuid, bigint, text, text, uuid, uuid, text, timestamp with time zone)", "managed_auth_session_set_complete_transaction(text, text, uuid, text, bigint, bigint, uuid, text, text, text)", "managed_auth_session_set_mutate(text, text, uuid, text, bigint, bigint, text, uuid, uuid, uuid, text, text)", "managed_auth_actor_mutation_fence(text, bigint, uuid)", "managed_auth_actor_mutation_lease_acquire(text, bigint, uuid, integer)", "managed_auth_actor_mutation_lease_release(text, uuid)", "managed_auth_actor_mutation_lease_validate(text, bigint, uuid)", "managed_auth_adopted_session_snapshot(text)", "managed_auth_isolated_session_reap(integer)", "managed_auth_expired_session_set_reap(integer)", "managed_auth_session_set_operation_receipt(text, uuid, text, text)", "get_organization_recovery_overview(uuid, text, jsonb, text, text)", "organization_recovery_command(jsonb)", "create_task_note_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, uuid, text, text, integer)", "archive_task_note_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, uuid, uuid, integer, text)", "list_task_notes_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, boolean, integer)", "replace_task_note_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, uuid, uuid, uuid, uuid, integer, text, text, integer, text)", "resolve_task_note_knowledge_promotion_source(uuid, uuid, uuid, uuid, uuid, integer, uuid, integer, text, text, text)", "upsert_session_work_claim_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, uuid, integer, text, text, text, text, text, text, text)", "release_session_work_claim_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, uuid, uuid, integer, text)", "session_private_actor_visible(uuid, uuid, uuid, text)", "session_reference_visible(uuid, uuid, uuid)", "session_visibility_lifecycle_capability_held()", "transition_session_visibility(uuid, uuid, uuid, text, text, integer, text, text, integer)", "xai_subscription_pool_visible(uuid, uuid, text, text, uuid)", "resolve_xai_authority_pool(uuid, uuid, text, jsonb)", "revalidate_xai_subscription_authority(uuid, text, uuid, jsonb)", "xai_provider_account_authority_snapshot_v1_valid(jsonb)"];
10
+ export declare const RUNTIME_TARGET_SCHEMA_CAPABILITY_ROUTINES: readonly ["lock_live_native_original_origin_v2(jsonb)", "modal_native_origin_member_read_active(uuid, text)", ...string[], "open_private_session_create_capability(uuid, uuid, uuid, text)", "open_private_child_session_create_capability(uuid, uuid, uuid, uuid, uuid, uuid, integer)", "close_private_session_create_capability(uuid)", "resolve_session_attempt_personal_resources(uuid, uuid, uuid)", "list_owned_connection_accounts(uuid, uuid)", "accept_turn_personal_resource_attachment(uuid, uuid, uuid, uuid, text, integer, boolean, integer)", "list_self_user_resource_authorities(uuid, uuid, text, uuid, integer)", "issue_self_user_resource_grant(uuid, uuid, uuid, text, text, text, uuid, integer, boolean)", "revoke_self_user_resource_grant(uuid, uuid, uuid)", "authorize_session_attempt_personal_resource_reads(uuid, uuid, uuid)", "preference_registry_create_knowledge_proposal_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, uuid, text, uuid, text, text, text, text, integer, text, jsonb, timestamp with time zone, text)", "create_scoped_variable_set(uuid, uuid, text, text, text, jsonb, boolean)", "list_scoped_variable_sets(uuid, uuid, uuid, text, text)", "count_scoped_variable_sets(uuid, uuid, text)", "mutate_scoped_variable_set(uuid, uuid, uuid, text, text, boolean, text, boolean, text, text, boolean)", "read_scoped_variable_set_secret(uuid, uuid, uuid, text, text, text, uuid, uuid, uuid, integer)", "materialize_scoped_variable_set_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, uuid)", "materialize_scoped_variable_set_for_session(uuid, uuid, uuid, uuid)", "connection_authority_convergence_audit_capability_active(uuid)", "resolve_accepted_connection_use(uuid, uuid, uuid, uuid, uuid, integer, uuid, text, text, uuid, text, text, text, text)", "inspect_organization_connection_authority_convergence(uuid, integer, uuid)", "get_self_personal_github_repository_selection(uuid, uuid, text, uuid)", "mutate_self_personal_github_repository_selection(uuid, uuid, text, uuid, bigint, bigint, text, jsonb, boolean)", "create_personal_document_authority(uuid, uuid, uuid)", "resolve_document_original_file(uuid, uuid, text, uuid)", "resolve_session_attempt_personal_document_reads(uuid, uuid, uuid, uuid)", "list_document_authority_reclassifications(uuid, uuid, text, uuid, integer, timestamp with time zone, uuid)", "reclassify_document_authority(jsonb)", "run_document_default_collection_backfill(jsonb)", "list_document_default_collection_backfill_runs(jsonb)", "get_document_default_collection_backfill_audit(jsonb)", "list_organization_document_authority_reclassifications(jsonb)", "create_scoped_rig(uuid, uuid, text, text, text, text, jsonb, boolean)", "list_scoped_rigs(uuid, uuid, uuid, text, text)", "count_scoped_rigs(uuid, uuid, text)", "mutate_scoped_rig(uuid, uuid, uuid, text, text, boolean, text, boolean, boolean)", "finalize_scoped_enrollment(uuid, uuid, text, text, boolean, boolean, text, text, text, boolean)", "list_scoped_enrollments(uuid, uuid, uuid, text)", "get_scoped_sandbox(uuid, uuid, uuid)", "authorize_scoped_sandbox_attach(uuid, uuid, uuid)", "materialize_scoped_rig_version_for_attempt(uuid, uuid, uuid, uuid, uuid, integer)", "authorize_session_attempt_personal_machine(uuid, uuid, uuid, uuid, uuid, integer, uuid)", "assert_session_attempt_personal_machine(uuid, uuid, uuid, uuid, uuid, integer, uuid, boolean)", "list_scoped_machine_dependent_sessions(uuid, uuid, uuid)", "detach_scoped_machine_dependent_sessions(uuid, uuid, uuid)", "freeze_scheduled_task_personal_resources(uuid, uuid, uuid, bigint)", "clone_scheduled_task_personal_resource_authority(uuid, uuid, uuid, bigint, bigint)", "create_scheduled_agent_run_with_admission(uuid, uuid, uuid, uuid, bigint, text, text, text, timestamp with time zone, timestamp with time zone, jsonb)", "materialize_scheduled_task_reusable_session_from_run(uuid, uuid, uuid, uuid, uuid, bigint, text)", "scheduled_task_run_personal_resource_authority(uuid, uuid, uuid)", "scheduled_task_run_connection_authority_subject(uuid, uuid, uuid)", "scheduled_task_personal_resource_authority_subject(uuid, uuid, uuid, bigint)", "record_scheduled_task_revision_authority(uuid, uuid, uuid, bigint)", "clone_scheduled_task_revision_authority(uuid, uuid, uuid, bigint, bigint)", "scheduled_task_revision_authority_subject(uuid, uuid, uuid, bigint)", "scheduled_task_revision_authority_snapshot(uuid, uuid, uuid, bigint)", "validate_scheduled_agent_run_live_authority(uuid, uuid, uuid)", "scheduled_scoped_rig_version_metadata(uuid, uuid, text, uuid, uuid)", "scheduled_variable_set_expected_generation_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, uuid)", "bind_scheduled_task_run_session(uuid, uuid, uuid, uuid)", "transition_scheduled_agent_run(uuid, uuid, uuid, uuid, uuid, text, text)", "mutate_managed_sign_in_method(text, text, jsonb)", "assert_managed_sign_in_recovery(text, text, uuid, jsonb)", "replay_managed_sign_in_method(text, text, jsonb)", "claim_managed_sign_in_notification(uuid, text, text, integer)", "settle_managed_sign_in_notification(uuid, uuid, text)", "ensure_canonical_human_identity(text, text)", "validate_canonical_human_session(text, text, boolean)", "get_canonical_human_identity_projection(text)", "apply_canonical_human_identity_operation(uuid, text, bigint, text, uuid, text, text, text)", "get_canonical_human_exact_login_binding(text, text)", "managed_auth_session_set_authority_state(text)", "managed_auth_session_set_snapshot(text, text, boolean, boolean, boolean)", "managed_auth_session_set_bootstrap(text, text, text, text, uuid, text, bigint, bigint)", "managed_auth_session_set_begin_transaction(text, text, text, uuid, text, bigint, uuid, bigint, text, text, uuid, uuid, text, timestamp with time zone)", "managed_auth_session_set_complete_transaction(text, text, uuid, text, bigint, bigint, uuid, text, text, text)", "managed_auth_session_set_mutate(text, text, uuid, text, bigint, bigint, text, uuid, uuid, uuid, text, text)", "managed_auth_actor_mutation_fence(text, bigint, uuid)", "managed_auth_actor_mutation_lease_acquire(text, bigint, uuid, integer)", "managed_auth_actor_mutation_lease_release(text, uuid)", "managed_auth_actor_mutation_lease_validate(text, bigint, uuid)", "managed_auth_adopted_session_snapshot(text)", "managed_auth_isolated_session_reap(integer)", "managed_auth_expired_session_set_reap(integer)", "managed_auth_session_set_operation_receipt(text, uuid, text, text)", "get_organization_recovery_overview(uuid, text, jsonb, text, text)", "organization_recovery_command(jsonb)", "create_task_note_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, uuid, text, text, integer)", "archive_task_note_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, uuid, uuid, integer, text)", "list_task_notes_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, boolean, integer)", "replace_task_note_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, uuid, uuid, uuid, uuid, integer, text, text, integer, text)", "resolve_task_note_knowledge_promotion_source(uuid, uuid, uuid, uuid, uuid, integer, uuid, integer, text, text, text)", "upsert_session_work_claim_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, uuid, integer, text, text, text, text, text, text, text)", "release_session_work_claim_for_attempt(uuid, uuid, uuid, uuid, uuid, integer, uuid, uuid, integer, text)", "session_private_actor_visible(uuid, uuid, uuid, text)", "session_reference_visible(uuid, uuid, uuid)", "session_visibility_lifecycle_capability_held()", "transition_session_visibility(uuid, uuid, uuid, text, text, integer, text, text, integer)", "xai_subscription_pool_visible(uuid, uuid, text, text, uuid)", "resolve_xai_authority_pool(uuid, uuid, text, jsonb)", "revalidate_xai_subscription_authority(uuid, text, uuid, jsonb)", "xai_provider_account_authority_snapshot_v1_valid(jsonb)"];
11
11
  /**
12
12
  * Boolean-only predicates that shared-table RLS policies must be able to
13
13
  * evaluate under table owners and SECURITY DEFINER roles unknown at migration
@@ -0,0 +1,22 @@
1
+ import { type Database } from "./database.js";
2
+ export declare const INTERACTION_ONLY_IDLE_BUCKETS: readonly ["lt_30m", "30m_2h", "2h_6h", "gte_6h"];
3
+ export type InteractionOnlyIdleBucket = (typeof INTERACTION_ONLY_IDLE_BUCKETS)[number];
4
+ export type InteractionOnlyLeaseCandidate = {
5
+ accountId: string;
6
+ workspaceId: string;
7
+ sandboxGroupId: string;
8
+ };
9
+ export declare function interactionOnlyIdleBucket(idleMs: number): InteractionOnlyIdleBucket;
10
+ /**
11
+ * Read-only inventory of warm leases whose ONLY holders are Browser/Computer
12
+ * interaction holders, bucketed by time since the newest interaction activity
13
+ * (holder heartbeat, controller heartbeat, or last use). Interaction holders
14
+ * deliberately never expire by timestamp, so such a box stays warm until its
15
+ * session ends or the provider deadline; this makes that visible. Candidates
16
+ * come from the sanctioned cross-workspace warm-lease list; each workspace is
17
+ * then read under its own RLS scope. No lock beyond the snapshot is taken.
18
+ */
19
+ export declare function countInteractionOnlyWarmLeasesByIdle(db: Database, candidates: InteractionOnlyLeaseCandidate[], options?: {
20
+ now?: Date;
21
+ maxWorkspaces?: number;
22
+ }): Promise<Record<InteractionOnlyIdleBucket, number>>;
@@ -27,10 +27,10 @@ import {
27
27
  settleConnectedMachineSessionBackgroundCommandWithMutation,
28
28
  settleSessionBackgroundCommandForRetainedProcessInTransaction,
29
29
  unobservableRetainedProcessOutcomeSql
30
- } from "./chunk-NT7OGKYX.js";
31
- import "./chunk-T3CYF3DH.js";
30
+ } from "./chunk-JWBEE4CL.js";
31
+ import "./chunk-TODVDGMO.js";
32
32
  import "./chunk-4UJCXBR2.js";
33
- import "./chunk-27T4AP25.js";
33
+ import "./chunk-IT3EYY2C.js";
34
34
  import "./chunk-JL6TBB76.js";
35
35
  import "./chunk-P7YDM2RI.js";
36
36
  import "./chunk-PZ5AY32C.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  appendSessionCommandOutput
3
- } from "./chunk-AMK3FNOW.js";
4
- import "./chunk-NT7OGKYX.js";
5
- import "./chunk-T3CYF3DH.js";
3
+ } from "./chunk-K5MTNKJU.js";
4
+ import "./chunk-JWBEE4CL.js";
5
+ import "./chunk-TODVDGMO.js";
6
6
  import "./chunk-4UJCXBR2.js";
7
- import "./chunk-27T4AP25.js";
7
+ import "./chunk-IT3EYY2C.js";
8
8
  import "./chunk-JL6TBB76.js";
9
9
  import "./chunk-P7YDM2RI.js";
10
10
  import "./chunk-PZ5AY32C.js";
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  listSessionEventSlices,
3
3
  readSessionMessageSliceInScope
4
- } from "./chunk-3WUCM7YF.js";
5
- import "./chunk-27T4AP25.js";
4
+ } from "./chunk-B5C5SBSI.js";
5
+ import "./chunk-IT3EYY2C.js";
6
6
  import "./chunk-JL6TBB76.js";
7
7
  import "./chunk-P7YDM2RI.js";
8
8
  import "./chunk-PZ5AY32C.js";
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  connectionMetadataMatchesBinding
3
- } from "./chunk-EMYA6XNE.js";
3
+ } from "./chunk-OV5AUIBA.js";
4
4
  import {
5
5
  lockSessionEventWriteRows,
6
6
  organizationApiKeyAllowsWorkspace
7
- } from "./chunk-NT7OGKYX.js";
8
- import "./chunk-T3CYF3DH.js";
7
+ } from "./chunk-JWBEE4CL.js";
8
+ import "./chunk-TODVDGMO.js";
9
9
  import "./chunk-4UJCXBR2.js";
10
10
  import {
11
11
  rawRows,
12
12
  setSubjectRlsContext,
13
13
  withRlsContext
14
- } from "./chunk-27T4AP25.js";
14
+ } from "./chunk-IT3EYY2C.js";
15
15
  import {
16
16
  apiKeys,
17
17
  sessionCommandReceipts,
@@ -13,8 +13,8 @@ import {
13
13
  openPrivateSessionCreateCapability,
14
14
  replayAppliedSessionFork,
15
15
  transitionSessionVisibility
16
- } from "./chunk-VCHK4D6S.js";
17
- import "./chunk-27T4AP25.js";
16
+ } from "./chunk-DKFEUGM4.js";
17
+ import "./chunk-IT3EYY2C.js";
18
18
  import "./chunk-JL6TBB76.js";
19
19
  import "./chunk-P7YDM2RI.js";
20
20
  import "./chunk-PZ5AY32C.js";
@@ -29,9 +29,9 @@ import {
29
29
  settleVideoGenerationFailure,
30
30
  settleVideoGenerationReady,
31
31
  updateWorkspaceVideoGenerationPolicy
32
- } from "./chunk-T3CYF3DH.js";
32
+ } from "./chunk-TODVDGMO.js";
33
33
  import "./chunk-4UJCXBR2.js";
34
- import "./chunk-27T4AP25.js";
34
+ import "./chunk-IT3EYY2C.js";
35
35
  import "./chunk-JL6TBB76.js";
36
36
  import "./chunk-P7YDM2RI.js";
37
37
  import "./chunk-PZ5AY32C.js";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  lockWorkspaceInferenceControl
3
- } from "./chunk-NT7OGKYX.js";
4
- import "./chunk-T3CYF3DH.js";
3
+ } from "./chunk-JWBEE4CL.js";
4
+ import "./chunk-TODVDGMO.js";
5
5
  import "./chunk-4UJCXBR2.js";
6
6
  import {
7
7
  withWorkspaceRls
8
- } from "./chunk-27T4AP25.js";
8
+ } from "./chunk-IT3EYY2C.js";
9
9
  import "./chunk-JL6TBB76.js";
10
10
  import "./chunk-P7YDM2RI.js";
11
11
  import "./chunk-PZ5AY32C.js";
@@ -0,0 +1,239 @@
1
+ -- deployment-mode: rolling
2
+ -- Inert exact-origin projection. Trusted-server SQL privilege is NOT host
3
+ -- authentication. No grant, lease, provider operation, wake or custody is minted.
4
+ SET LOCAL lock_timeout = '5s';
5
+ SET LOCAL statement_timeout = '5min';
6
+
7
+ CREATE TABLE IF NOT EXISTS opengeni_private.modal_native_origin_read_capabilities (
8
+ capability_id uuid PRIMARY KEY,
9
+ data_schema oid NOT NULL,
10
+ backend_pid integer NOT NULL,
11
+ transaction_id xid8 NOT NULL,
12
+ account_id uuid NOT NULL,
13
+ workspace_id uuid NOT NULL,
14
+ session_id uuid NOT NULL,
15
+ turn_id uuid NOT NULL,
16
+ attempt_id uuid NOT NULL,
17
+ execution_generation integer NOT NULL CHECK (execution_generation > 0),
18
+ initiating_human_subject_id text NOT NULL
19
+ );
20
+ ALTER TABLE opengeni_private.modal_native_origin_read_capabilities ENABLE ROW LEVEL SECURITY;
21
+ ALTER TABLE opengeni_private.modal_native_origin_read_capabilities FORCE ROW LEVEL SECURITY;
22
+ REVOKE ALL ON TABLE opengeni_private.modal_native_origin_read_capabilities FROM PUBLIC;
23
+
24
+ DO $install$
25
+ DECLARE
26
+ target_schema text := current_schema();
27
+ target_oid oid := current_schema()::regnamespace;
28
+ owner_name text := current_user;
29
+ role_name text;
30
+ BEGIN
31
+ IF NOT EXISTS (SELECT 1 FROM pg_class WHERE oid='opengeni_private.modal_native_origin_read_capabilities'::regclass
32
+ AND relowner=current_user::regrole) THEN
33
+ RAISE EXCEPTION 'native origin capability owner mismatch' USING ERRCODE='55000';
34
+ END IF;
35
+ -- Remove hostile owner defaults; no runtime or PUBLIC table/column access.
36
+ FOR role_name IN SELECT DISTINCT r.rolname FROM pg_class c
37
+ CROSS JOIN LATERAL aclexplode(coalesce(c.relacl,acldefault('r',c.relowner))) a
38
+ JOIN pg_roles r ON r.oid=a.grantee
39
+ WHERE c.oid='opengeni_private.modal_native_origin_read_capabilities'::regclass
40
+ AND a.grantee<>c.relowner
41
+ LOOP
42
+ EXECUTE format('REVOKE ALL ON TABLE opengeni_private.modal_native_origin_read_capabilities FROM %I',role_name);
43
+ END LOOP;
44
+ IF NOT EXISTS (SELECT 1 FROM pg_policy WHERE polrelid='opengeni_private.modal_native_origin_read_capabilities'::regclass
45
+ AND polname='owner_only') THEN
46
+ EXECUTE format('CREATE POLICY owner_only ON opengeni_private.modal_native_origin_read_capabilities
47
+ USING (current_user=%L) WITH CHECK (current_user=%L)',owner_name,owner_name);
48
+ END IF;
49
+
50
+ EXECUTE format($ddl$
51
+ CREATE FUNCTION %1$I.modal_native_origin_member_read_active(p_account uuid,p_subject text)
52
+ RETURNS boolean LANGUAGE sql STABLE SECURITY DEFINER SET search_path=pg_catalog AS $body$
53
+ SELECT EXISTS (SELECT 1 FROM opengeni_private.modal_native_origin_read_capabilities c
54
+ WHERE c.data_schema=%2$s::oid AND c.backend_pid=pg_backend_pid()
55
+ AND c.transaction_id=pg_current_xact_id_if_assigned()
56
+ AND c.account_id=p_account AND c.initiating_human_subject_id=p_subject)
57
+ $body$;
58
+ REVOKE ALL ON FUNCTION %1$I.modal_native_origin_member_read_active(uuid,text) FROM PUBLIC;
59
+ CREATE POLICY modal_native_origin_member_read ON %1$I.organization_memberships FOR SELECT
60
+ USING (current_user=%3$L AND %1$I.modal_native_origin_member_read_active(account_id,subject_id));
61
+ $ddl$,target_schema,target_oid,owner_name);
62
+
63
+ EXECUTE format($ddl$
64
+ CREATE FUNCTION %1$I.lock_live_native_original_origin_v2(p_scope jsonb)
65
+ RETURNS jsonb LANGUAGE plpgsql SECURITY DEFINER
66
+ SET search_path=pg_catalog,%1$I,pg_temp AS $body$
67
+ DECLARE
68
+ s sessions%%ROWTYPE; t session_turns%%ROWTYPE; a session_turn_attempts%%ROWTYPE;
69
+ m organization_memberships%%ROWTYPE; control workspace_inference_controls%%ROWTYPE;
70
+ ancestor sessions%%ROWTYPE;
71
+ account_value uuid; workspace_value uuid; session_value uuid; turn_value uuid; attempt_value uuid;
72
+ generation_value integer; route_value integer; member_key bigint; tenancy_key bigint;
73
+ fenced_cap uuid; member_cap uuid; parent_value uuid; visited uuid[]; override_value bigint:=0;
74
+ count_value integer:=0; count_json jsonb; basis text; key_name text;
75
+ result jsonb:='{"kind":"fenced"}'::jsonb;
76
+ keys constant text[]:=ARRAY['version','declarationId','planId','creatorId','accountId','workspaceId',
77
+ 'sessionId','turnId','attemptId','executionGeneration','triggerEventId','sandboxGroupId',
78
+ 'routeKind','routeTargetId','routeEpoch'];
79
+ BEGIN
80
+ IF jsonb_typeof(p_scope) IS DISTINCT FROM 'object' OR NOT p_scope ?& keys
81
+ OR p_scope-keys<>'{}'::jsonb OR p_scope->'version'<>'2'::jsonb
82
+ OR p_scope->'routeKind'<>'"home"'::jsonb OR p_scope->'routeTargetId'<>'null'::jsonb
83
+ THEN RETURN '{"kind":"unsupported","reason":"invalid_scope"}'::jsonb; END IF;
84
+ FOREACH key_name IN ARRAY ARRAY['declarationId','planId','creatorId','accountId','workspaceId',
85
+ 'sessionId','turnId','attemptId','triggerEventId','sandboxGroupId'] LOOP
86
+ IF jsonb_typeof(p_scope->key_name)<>'string' OR (p_scope->>key_name) !~
87
+ '^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$'
88
+ THEN RETURN '{"kind":"unsupported","reason":"invalid_scope"}'::jsonb; END IF;
89
+ END LOOP;
90
+ FOREACH key_name IN ARRAY ARRAY['executionGeneration','routeEpoch'] LOOP
91
+ IF jsonb_typeof(p_scope->key_name)<>'number' OR
92
+ (p_scope->>key_name)::numeric<>trunc((p_scope->>key_name)::numeric) OR
93
+ (p_scope->>key_name)::numeric NOT BETWEEN 0 AND 2147483647
94
+ THEN RETURN '{"kind":"unsupported","reason":"invalid_scope"}'::jsonb; END IF;
95
+ END LOOP;
96
+ IF (p_scope->>'executionGeneration')::integer=0 OR p_scope->>'creatorId'=p_scope->>'attemptId'
97
+ OR p_scope->>'creatorId'=p_scope->>'planId'
98
+ THEN RETURN '{"kind":"unsupported","reason":"invalid_scope"}'::jsonb; END IF;
99
+ account_value:=(p_scope->>'accountId')::uuid; workspace_value:=(p_scope->>'workspaceId')::uuid;
100
+ session_value:=(p_scope->>'sessionId')::uuid; turn_value:=(p_scope->>'turnId')::uuid;
101
+ attempt_value:=(p_scope->>'attemptId')::uuid;
102
+ generation_value:=(p_scope->>'executionGeneration')::integer; route_value:=(p_scope->>'routeEpoch')::integer;
103
+ IF account_value IS DISTINCT FROM opengeni_private.current_account_id()
104
+ OR workspace_value IS DISTINCT FROM opengeni_private.current_workspace_id()
105
+ OR nullif(current_setting('opengeni.subject_id',true),'') IS NULL
106
+ THEN RETURN result; END IF;
107
+ member_key:=hashtextextended('organization-membership:'||account_value::text,0);
108
+ tenancy_key:=hashtextextended('session-tenancy:'||workspace_value::text,0);
109
+ IF EXISTS (SELECT 1 FROM pg_locks l WHERE l.pid=pg_backend_pid() AND l.locktype='advisory'
110
+ AND l.granted AND l.classid=((tenancy_key>>32)&4294967295)::oid
111
+ AND l.objid=(tenancy_key&4294967295)::oid AND l.objsubid=1)
112
+ AND NOT EXISTS (SELECT 1 FROM pg_locks l WHERE l.pid=pg_backend_pid() AND l.locktype='advisory'
113
+ AND l.granted AND l.mode='ExclusiveLock' AND l.classid=((member_key>>32)&4294967295)::oid
114
+ AND l.objid=(member_key&4294967295)::oid AND l.objsubid=1)
115
+ THEN RAISE EXCEPTION 'native origin requires membership-before-tenancy entry' USING ERRCODE='25001'; END IF;
116
+ PERFORM pg_advisory_xact_lock(member_key);
117
+ PERFORM acquire_session_tenancy_fence(workspace_value);
118
+ fenced_cap:=opengeni_private.open_session_tenancy_fenced_access(%2$s::oid);
119
+ <<projection>>
120
+ BEGIN
121
+ PERFORM pg_advisory_xact_lock_shared(hashtextextended('workspace-control:'||workspace_value::text,0));
122
+ SELECT * INTO control FROM workspace_inference_controls WHERE workspace_id=workspace_value
123
+ AND account_id=account_value FOR SHARE;
124
+ IF NOT FOUND THEN EXIT projection; END IF;
125
+ PERFORM 1 FROM workspaces WHERE id=workspace_value AND account_id=account_value FOR KEY SHARE;
126
+ IF NOT FOUND THEN EXIT projection; END IF;
127
+ SELECT * INTO s FROM sessions WHERE id=session_value AND workspace_id=workspace_value
128
+ AND account_id=account_value FOR NO KEY UPDATE;
129
+ IF NOT FOUND THEN EXIT projection; END IF;
130
+ PERFORM 1 FROM session_event_cursors WHERE workspace_id=workspace_value AND session_id=session_value FOR UPDATE;
131
+ IF NOT FOUND THEN EXIT projection; END IF;
132
+ SELECT * INTO t FROM session_turns WHERE id=turn_value AND workspace_id=workspace_value
133
+ AND account_id=account_value AND session_id=session_value FOR UPDATE;
134
+ IF NOT FOUND THEN EXIT projection; END IF;
135
+ SELECT * INTO a FROM session_turn_attempts WHERE id=attempt_value AND workspace_id=workspace_value
136
+ AND account_id=account_value AND session_id=session_value AND turn_id=turn_value FOR UPDATE;
137
+ IF NOT FOUND THEN EXIT projection; END IF;
138
+ IF s.status<>'running' OR s.admission_block IS NOT NULL OR s.active_turn_id IS DISTINCT FROM turn_value
139
+ OR t.status<>'running' OR t.active_attempt_id IS DISTINCT FROM attempt_value
140
+ OR t.execution_generation<>generation_value OR a.execution_generation<>generation_value
141
+ OR t.trigger_event_id<>(p_scope->>'triggerEventId')::uuid
142
+ OR s.sandbox_group_id<>(p_scope->>'sandboxGroupId')::uuid
143
+ OR s.active_sandbox_id IS NOT NULL OR s.active_epoch<>route_value
144
+ OR a.state NOT IN ('claimed','running') OR a.outcome IS NOT NULL
145
+ OR a.closed_at IS NOT NULL OR a.quiesced_at IS NOT NULL
146
+ OR a.authority_epoch IS NULL OR a.authority_visibility IS NULL
147
+ OR a.authority_epoch NOT BETWEEN s.execution_authority_epoch AND s.authority_epoch
148
+ OR NOT (a.authority_visibility=s.visibility OR (a.authority_visibility='user_private'
149
+ AND s.visibility='workspace_shared' AND a.authority_epoch<s.authority_epoch))
150
+ OR a.authority_owner_organization_membership_id IS DISTINCT FROM s.owner_organization_membership_id
151
+ OR (a.authority_visibility='user_private' AND a.authority_owner_organization_membership_id IS NULL)
152
+ OR EXISTS (SELECT 1 FROM session_attempt_interruptions i WHERE i.workspace_id=workspace_value
153
+ AND i.session_id=session_value AND i.attempt_id=attempt_value AND i.state IN ('pending','delivered','acknowledged'))
154
+ THEN EXIT projection; END IF;
155
+ -- Same override ordering as projectEffectiveControl; control SHARE
156
+ -- serializes all ancestry control writes, including Pause/Resume/Cancel.
157
+ ancestor:=s; visited:=ARRAY[]::uuid[];
158
+ LOOP
159
+ IF ancestor.id=ANY(visited) OR cardinality(visited)>10000 THEN EXIT projection; END IF;
160
+ visited:=array_append(visited,ancestor.id);
161
+ IF ancestor.direct_control_state='paused' AND
162
+ (ancestor.direct_pause_revision IS NULL OR override_value<=ancestor.direct_pause_revision)
163
+ THEN EXIT projection; END IF;
164
+ override_value:=greatest(override_value,coalesce(ancestor.subtree_run_override_revision,0));
165
+ parent_value:=ancestor.parent_session_id;
166
+ EXIT WHEN parent_value IS NULL;
167
+ SELECT * INTO ancestor FROM sessions WHERE id=parent_value AND workspace_id=workspace_value AND account_id=account_value;
168
+ IF NOT FOUND THEN EXIT projection; END IF;
169
+ END LOOP;
170
+ IF control.workspace_state='paused' AND
171
+ (control.workspace_pause_revision IS NULL OR override_value<=control.workspace_pause_revision)
172
+ THEN EXIT projection; END IF;
173
+ IF EXISTS (SELECT 1 FROM session_pending_tool_calls WHERE workspace_id=workspace_value AND session_id=session_value)
174
+ OR EXISTS (SELECT 1 FROM agent_run_states WHERE workspace_id=workspace_value AND session_id=session_value AND turn_id=turn_value)
175
+ -- claimTurnAttempt publishes turn.started before establishTurnSandbox.
176
+ -- It is lifecycle truth, not evidence that a model was dispatched.
177
+ OR EXISTS (SELECT 1 FROM session_events WHERE workspace_id=workspace_value AND session_id=session_value
178
+ AND turn_id=turn_value AND type='agent.model.request')
179
+ THEN result:='{"kind":"unsupported","reason":"not_premodel"}'::jsonb; EXIT projection; END IF;
180
+ IF t.initiating_human_subject_id IS NULL OR t.initiator_subject_id='unattributed-legacy'
181
+ OR t.initiating_human_subject_id NOT LIKE 'user:%%'
182
+ THEN result:='{"kind":"unsupported","reason":"human_unavailable"}'::jsonb; EXIT projection; END IF;
183
+ IF EXISTS (SELECT 1 FROM external_link_turn_authorities WHERE account_id=account_value
184
+ AND workspace_id=workspace_value AND turn_id=turn_value)
185
+ THEN result:='{"kind":"unsupported","reason":"external_authority"}'::jsonb; EXIT projection; END IF;
186
+ IF jsonb_typeof(t.metadata) IS DISTINCT FROM 'object' THEN EXIT projection; END IF;
187
+ IF t.metadata ? 'providerRecoveryCount' THEN
188
+ count_json:=t.metadata->'providerRecoveryCount';
189
+ IF jsonb_typeof(count_json) IS DISTINCT FROM 'number' THEN EXIT projection; END IF;
190
+ IF count_json::numeric<>trunc(count_json::numeric) OR count_json::numeric NOT BETWEEN 0 AND 5
191
+ THEN EXIT projection; END IF;
192
+ count_value:=count_json::integer;
193
+ END IF;
194
+ member_cap:=gen_random_uuid();
195
+ INSERT INTO opengeni_private.modal_native_origin_read_capabilities VALUES
196
+ (member_cap,%2$s::oid,pg_backend_pid(),pg_current_xact_id(),account_value,workspace_value,
197
+ session_value,turn_value,attempt_value,generation_value,t.initiating_human_subject_id);
198
+ SELECT * INTO m FROM organization_memberships WHERE account_id=account_value
199
+ AND subject_id=t.initiating_human_subject_id AND status='active' AND revoked_at IS NULL;
200
+ IF NOT FOUND THEN EXIT projection; END IF;
201
+ IF m.personal_workspace_id=workspace_value THEN basis:='personal_workspace';
202
+ ELSIF EXISTS (SELECT 1 FROM workspace_memberships WHERE account_id=account_value
203
+ AND workspace_id=workspace_value AND subject_id=t.initiating_human_subject_id)
204
+ THEN basis:='workspace_membership'; ELSE EXIT projection; END IF;
205
+ IF s.visibility='user_private' AND (s.owner_subject_id IS DISTINCT FROM t.initiating_human_subject_id
206
+ OR s.owner_organization_membership_id IS DISTINCT FROM m.id) THEN EXIT projection; END IF;
207
+ result:=jsonb_build_object('kind','live','projection',jsonb_build_object(
208
+ 'version',1,'scope',p_scope,
209
+ 'initiator',jsonb_build_object('kind',t.initiator_kind,'subjectId',t.initiator_subject_id,
210
+ 'initiatingHumanSubjectId',t.initiating_human_subject_id),
211
+ 'membership',jsonb_build_object('id',m.id,'authorizationRevision',m.authorization_revision::text,'basis',basis),
212
+ 'acceptedAuthority',jsonb_build_object('epoch',a.authority_epoch,'visibility',a.authority_visibility,
213
+ 'ownerOrganizationMembershipId',a.authority_owner_organization_membership_id),
214
+ 'currentAuthority',jsonb_build_object('epoch',s.authority_epoch,'executionEpoch',s.execution_authority_epoch,
215
+ 'visibility',s.visibility,'ownerSubjectId',s.owner_subject_id,'ownerOrganizationMembershipId',s.owner_organization_membership_id),
216
+ 'control',jsonb_build_object('workspaceRevision',control.revision::text,'sessionVersion',s.control_version::text),
217
+ 'execution',jsonb_build_object('workflowId',a.temporal_workflow_id,'workflowRunId',a.temporal_workflow_run_id,
218
+ 'activityId',a.temporal_activity_id),
219
+ 'providerRecoveryCount',count_value,'checkedAt',clock_timestamp()));
220
+ END projection;
221
+ DELETE FROM opengeni_private.modal_native_origin_read_capabilities WHERE capability_id=member_cap;
222
+ PERFORM opengeni_private.close_session_tenancy_fenced_access(fenced_cap);
223
+ RETURN result;
224
+ EXCEPTION WHEN OTHERS THEN
225
+ -- The function's exception subtransaction rolls back its own capabilities
226
+ -- and locks. Preserve any earlier caller capability; propagate uncertainty.
227
+ RAISE;
228
+ END
229
+ $body$;
230
+ REVOKE ALL ON FUNCTION %1$I.lock_live_native_original_origin_v2(jsonb) FROM PUBLIC;
231
+ $ddl$,target_schema,target_oid);
232
+ FOR role_name IN SELECT jsonb_array_elements_text(coalesce(nullif(
233
+ current_setting('opengeni.migration_application_roles',true),'')::jsonb,'[]'::jsonb)) LOOP
234
+ IF EXISTS (SELECT 1 FROM pg_roles WHERE rolname=role_name) THEN
235
+ EXECUTE format('GRANT EXECUTE ON FUNCTION %I.lock_live_native_original_origin_v2(jsonb) TO %I',target_schema,role_name);
236
+ END IF;
237
+ END LOOP;
238
+ END
239
+ $install$;