@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.
- package/dist/canonical-human-identities.js +2 -2
- package/dist/capability-reconciliation.js +1 -1
- package/dist/{chunk-7QWWTVYH.js → chunk-5ROHLEN6.js} +29 -4
- package/dist/chunk-5ROHLEN6.js.map +1 -0
- package/dist/{chunk-BA52ITIY.js → chunk-A4J7EECR.js} +2 -2
- package/dist/{chunk-3WUCM7YF.js → chunk-B5C5SBSI.js} +2 -2
- package/dist/{chunk-VCHK4D6S.js → chunk-DKFEUGM4.js} +2 -2
- package/dist/{chunk-EFANLEWI.js → chunk-HUKBIZGH.js} +2 -2
- package/dist/{chunk-27T4AP25.js → chunk-IT3EYY2C.js} +5 -3
- package/dist/{chunk-27T4AP25.js.map → chunk-IT3EYY2C.js.map} +1 -1
- package/dist/{chunk-NT7OGKYX.js → chunk-JWBEE4CL.js} +3 -3
- package/dist/{chunk-AMK3FNOW.js → chunk-K5MTNKJU.js} +3 -3
- package/dist/{chunk-GC5GUTV3.js → chunk-NZ2SP55O.js} +2 -2
- package/dist/{chunk-TRUEH4I2.js → chunk-OKCBARX6.js} +2 -2
- package/dist/{chunk-EMYA6XNE.js → chunk-OV5AUIBA.js} +2 -2
- package/dist/{chunk-T3CYF3DH.js → chunk-TODVDGMO.js} +35 -17
- package/dist/{chunk-T3CYF3DH.js.map → chunk-TODVDGMO.js.map} +1 -1
- package/dist/{chunk-CKDHKQS4.js → chunk-W75DRYG3.js} +4 -4
- package/dist/{chunk-UQELJ6OM.js → chunk-Y72DP3JF.js} +2 -2
- package/dist/codemode-approvals.d.ts +7 -1
- package/dist/connect-attempts.js +2 -2
- package/dist/credit-balances.d.ts +25 -4
- package/dist/database.d.ts +7 -1
- package/dist/editable-artifact-durable-export.js +1 -1
- package/dist/editable-artifacts.js +2 -2
- package/dist/index.d.ts +24 -2
- package/dist/index.js +2778 -2508
- package/dist/index.js.map +1 -1
- package/dist/managed-auth-session-sets.js +2 -2
- package/dist/mcp-operations.js +1 -1
- package/dist/modal-native-live-origin.d.ts +75 -0
- package/dist/organization-integration-policy.js +2 -2
- package/dist/provision-roles.js +1 -1
- package/dist/retained-provider-commands.d.ts +21 -21
- package/dist/retained-provider-commands.js +5 -5
- package/dist/runtime-posture.d.ts +1 -1
- package/dist/sandbox-interaction-idle.d.ts +22 -0
- package/dist/session-background-commands.js +3 -3
- package/dist/session-command-output.js +4 -4
- package/dist/session-event-slices.js +2 -2
- package/dist/session-mcp-credential-rotation.js +4 -4
- package/dist/session-tenancy.js +2 -2
- package/dist/video-generation.js +2 -2
- package/dist/workspace-tool-defaults.js +3 -3
- package/drizzle/0632_modal_native_live_origin.sql +239 -0
- package/package.json +7 -7
- package/src/codemode-approvals.ts +52 -22
- package/src/codemode-operations.ts +198 -181
- package/src/credit-balances.ts +58 -17
- package/src/database.ts +9 -0
- package/src/index.ts +449 -254
- package/src/modal-native-live-origin.ts +148 -0
- package/src/provision-roles.ts +12 -0
- package/src/runtime-posture.ts +32 -3
- package/src/sandbox-interaction-idle.ts +91 -0
- package/src/transcription-recordings.ts +3 -1
- package/dist/chunk-7QWWTVYH.js.map +0 -1
- /package/dist/{chunk-BA52ITIY.js.map → chunk-A4J7EECR.js.map} +0 -0
- /package/dist/{chunk-3WUCM7YF.js.map → chunk-B5C5SBSI.js.map} +0 -0
- /package/dist/{chunk-VCHK4D6S.js.map → chunk-DKFEUGM4.js.map} +0 -0
- /package/dist/{chunk-EFANLEWI.js.map → chunk-HUKBIZGH.js.map} +0 -0
- /package/dist/{chunk-NT7OGKYX.js.map → chunk-JWBEE4CL.js.map} +0 -0
- /package/dist/{chunk-AMK3FNOW.js.map → chunk-K5MTNKJU.js.map} +0 -0
- /package/dist/{chunk-GC5GUTV3.js.map → chunk-NZ2SP55O.js.map} +0 -0
- /package/dist/{chunk-TRUEH4I2.js.map → chunk-OKCBARX6.js.map} +0 -0
- /package/dist/{chunk-EMYA6XNE.js.map → chunk-OV5AUIBA.js.map} +0 -0
- /package/dist/{chunk-CKDHKQS4.js.map → chunk-W75DRYG3.js.map} +0 -0
- /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-
|
|
24
|
-
import "./chunk-
|
|
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";
|
package/dist/mcp-operations.js
CHANGED
|
@@ -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-
|
|
6
|
+
} from "./chunk-A4J7EECR.js";
|
|
7
7
|
import "./chunk-4UJCXBR2.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-IT3EYY2C.js";
|
|
9
9
|
import "./chunk-JL6TBB76.js";
|
|
10
10
|
import "./chunk-P7YDM2RI.js";
|
|
11
11
|
import "./chunk-PZ5AY32C.js";
|
package/dist/provision-roles.js
CHANGED
|
@@ -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
|
-
} |
|
|
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-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
31
|
-
import "./chunk-
|
|
30
|
+
} from "./chunk-JWBEE4CL.js";
|
|
31
|
+
import "./chunk-TODVDGMO.js";
|
|
32
32
|
import "./chunk-4UJCXBR2.js";
|
|
33
|
-
import "./chunk-
|
|
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-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-K5MTNKJU.js";
|
|
4
|
+
import "./chunk-JWBEE4CL.js";
|
|
5
|
+
import "./chunk-TODVDGMO.js";
|
|
6
6
|
import "./chunk-4UJCXBR2.js";
|
|
7
|
-
import "./chunk-
|
|
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-
|
|
5
|
-
import "./chunk-
|
|
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-
|
|
3
|
+
} from "./chunk-OV5AUIBA.js";
|
|
4
4
|
import {
|
|
5
5
|
lockSessionEventWriteRows,
|
|
6
6
|
organizationApiKeyAllowsWorkspace
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
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-
|
|
14
|
+
} from "./chunk-IT3EYY2C.js";
|
|
15
15
|
import {
|
|
16
16
|
apiKeys,
|
|
17
17
|
sessionCommandReceipts,
|
package/dist/session-tenancy.js
CHANGED
|
@@ -13,8 +13,8 @@ import {
|
|
|
13
13
|
openPrivateSessionCreateCapability,
|
|
14
14
|
replayAppliedSessionFork,
|
|
15
15
|
transitionSessionVisibility
|
|
16
|
-
} from "./chunk-
|
|
17
|
-
import "./chunk-
|
|
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";
|
package/dist/video-generation.js
CHANGED
|
@@ -29,9 +29,9 @@ import {
|
|
|
29
29
|
settleVideoGenerationFailure,
|
|
30
30
|
settleVideoGenerationReady,
|
|
31
31
|
updateWorkspaceVideoGenerationPolicy
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-TODVDGMO.js";
|
|
33
33
|
import "./chunk-4UJCXBR2.js";
|
|
34
|
-
import "./chunk-
|
|
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-
|
|
4
|
-
import "./chunk-
|
|
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-
|
|
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$;
|