@opengeni/db 1.0.1 → 3.2.0-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/attached-browser-devices.d.ts +7 -0
- package/dist/automations.d.ts +154 -0
- package/dist/canonical-human-identities.js +3 -3
- package/dist/capability-integrations.d.ts +13 -0
- package/dist/child-lifecycle-notices.d.ts +68 -0
- package/dist/{chunk-4SR4HKKA.js → chunk-2EH4WRHL.js} +19 -11
- package/dist/chunk-2EH4WRHL.js.map +1 -0
- package/dist/{chunk-CUPM3FGB.js → chunk-2PRS4J5Q.js} +3 -3
- package/dist/chunk-6HMM2R5T.js +390 -0
- package/dist/chunk-6HMM2R5T.js.map +1 -0
- package/dist/{chunk-ZWREYEWA.js → chunk-AZHW7R5V.js} +56 -11
- package/dist/chunk-AZHW7R5V.js.map +1 -0
- package/dist/{chunk-LTG3S6ZY.js → chunk-E6CLMKEE.js} +2 -2
- package/dist/{chunk-6ZYKCRFO.js → chunk-KRLPEMLH.js} +7591 -4417
- package/dist/chunk-KRLPEMLH.js.map +1 -0
- package/dist/chunk-NAB6FKFN.js +516 -0
- package/dist/chunk-NAB6FKFN.js.map +1 -0
- package/dist/{chunk-SK7YYHBI.js → chunk-SIBYBA2D.js} +46 -1
- package/dist/chunk-SIBYBA2D.js.map +1 -0
- package/dist/chunk-UZNXG44K.js +4508 -0
- package/dist/chunk-UZNXG44K.js.map +1 -0
- package/dist/codemode-operations.d.ts +1 -6
- package/dist/company-brain-context-selection-schema.d.ts +705 -0
- package/dist/company-brain-context-selection.d.ts +94 -0
- package/dist/company-brain-governed-writes.d.ts +24 -0
- package/dist/company-brain.d.ts +55 -0
- package/dist/company-profile-agent-admin.d.ts +15 -0
- package/dist/company-profile-schema.d.ts +619 -2
- package/dist/company-profile.d.ts +9 -4
- package/dist/connection-authority.d.ts +95 -0
- package/dist/connection-scopes.d.ts +8 -0
- package/dist/connection-tenancy-backfill.d.ts +85 -0
- package/dist/connection-token-resolver.d.ts +30 -1
- package/dist/database.d.ts +23 -4
- package/dist/editable-artifact-durable-export.js +2 -2
- package/dist/editable-artifacts.d.ts +2 -2
- package/dist/editable-artifacts.js +3 -3
- package/dist/governed-learning-activation-schema.d.ts +984 -0
- package/dist/governed-learning-activation.d.ts +98 -0
- package/dist/governed-learning-evaluator-schema.d.ts +633 -0
- package/dist/governed-learning-evaluator.d.ts +28 -0
- package/dist/index.d.ts +1606 -81
- package/dist/index.js +21898 -8147
- package/dist/index.js.map +1 -1
- package/dist/insights.d.ts +18 -0
- package/dist/integration-bindings.d.ts +1 -0
- package/dist/integration-facets.d.ts +30 -0
- package/dist/interaction-placement-loss.d.ts +22 -0
- package/dist/managed-human-provisioning.d.ts +25 -0
- package/dist/memory-domain.d.ts +3 -3
- package/dist/migrate.d.ts +11 -1
- package/dist/migrate.js +1 -1
- package/dist/new-session-drafts.d.ts +43 -5
- package/dist/organization-membership-backfill.d.ts +174 -0
- package/dist/organization-membership-lifecycle.d.ts +162 -0
- package/dist/pr-review.d.ts +107 -0
- package/dist/preference-registry-schema.d.ts +2 -0
- package/dist/preference-registry.d.ts +2 -0
- package/dist/provision-roles.js +1 -1
- package/dist/runtime-posture.d.ts +29 -8
- package/dist/schema.d.ts +24914 -13703
- package/dist/schema.js +99 -1
- package/dist/scoped-knowledge-schema.d.ts +52 -1
- package/dist/session-background-commands.d.ts +125 -0
- package/dist/session-background-commands.js +34 -0
- package/dist/session-background-commands.js.map +1 -0
- package/dist/session-control.d.ts +156 -3
- package/dist/session-goal-pacing.d.ts +68 -0
- package/dist/session-queue-commands.d.ts +43 -4
- package/dist/session-realtime-ledger.d.ts +2 -0
- package/dist/session-tenancy.d.ts +71 -1
- package/dist/session-tenancy.js +25 -3
- package/dist/session-tool-call-settlement.d.ts +9 -4
- package/dist/slack-routing-personal-workspace.d.ts +23 -0
- package/dist/slack-routing.d.ts +268 -0
- package/dist/slack-task-policy-schema.d.ts +34 -0
- package/dist/slack-task-policy.d.ts +8 -0
- package/dist/slack-user-link-access.d.ts +28 -0
- package/dist/task-notes-schema.d.ts +594 -0
- package/dist/task-notes.d.ts +39 -0
- package/dist/turn-initiator.d.ts +2 -0
- package/dist/user-resource-authority.d.ts +109 -0
- package/dist/video-generation.js +3 -3
- package/dist/workspace-authority.d.ts +81 -0
- package/dist/workspace-instruction-policies-schema.d.ts +279 -0
- package/dist/workspace-instruction-policies.d.ts +62 -0
- package/dist/workspace-learning-policy.d.ts +1 -0
- package/dist/workspace-membership-permissions.d.ts +2 -0
- package/drizzle/0240_enrollment_connection_authority.sql +39 -0
- package/drizzle/0241_atomic_personal_resource_delegation.sql +1000 -0
- package/drizzle/0241_enrollment_agent_runtime.sql +70 -0
- package/drizzle/0244_slack_app_home_refresh_queue.sql +120 -0
- package/drizzle/0245_model_context_contribution_facts.sql +88 -0
- package/drizzle/0246_integration_personal_instance_authority.sql +70 -0
- package/drizzle/0247_terraform_stacks_provenance_repair.sql +428 -0
- package/drizzle/0248_terraform_stacks_component_resolution_fence.sql +83 -0
- package/drizzle/0249_personal_resource_delegation_authority_correction.sql +662 -0
- package/drizzle/0250_direct_retained_process_owner_liveness.sql +199 -0
- package/drizzle/0251_connected_machine_operation_policy.sql +45 -0
- package/drizzle/0252_scheduled_personal_resource_delegation.sql +1867 -0
- package/drizzle/0253_common_user_resource_authority_lifecycle.sql +1555 -0
- package/drizzle/0254_scoped_variable_set_authority.sql +1255 -0
- package/drizzle/0255_company_brain_governed_write_proposals.sql +524 -0
- package/drizzle/0256_connection_authority_delegation.sql +703 -0
- package/drizzle/0257_goal_revision_decisions_and_root_constraints.sql +436 -0
- package/drizzle/0258_three_scope_document_knowledge_authority.sql +1273 -0
- package/drizzle/0259_company_brain_context_selection_receipts.sql +869 -0
- package/drizzle/0260_task_note_knowledge_promotion.sql +820 -0
- package/drizzle/0261_preference_knowledge_proposal_actor_binding.sql +471 -0
- package/drizzle/0262_scoped_connected_machines_and_rigs.sql +1700 -0
- package/drizzle/0263_organization_membership_lifecycle.sql +3284 -0
- package/drizzle/0264_connection_authority_runtime_activation.sql +1084 -0
- package/drizzle/0266_company_brain_context_receipt_inspection.sql +156 -0
- package/drizzle/0268_governed_learning_decision_receipts.sql +825 -0
- package/drizzle/0269_governed_learning_activation_controller.sql +1874 -0
- package/drizzle/0270_governed_learning_history_inspection.sql +170 -0
- package/drizzle/0271_company_brain_retrieval_only_default.sql +524 -0
- package/drizzle/0272_human_confirmed_learning_activation.sql +591 -0
- package/drizzle/0273_scheduled_variable_set_materialization.sql +268 -0
- package/drizzle/0274_human_confirmed_knowledge_review.sql +310 -0
- package/drizzle/0275_scheduled_connection_authority.sql +5527 -0
- package/drizzle/0276_onboarding_proposal_initiating_human_guc.sql +198 -0
- package/drizzle/0277_workspace_writer_authority_attribution.sql +393 -0
- package/drizzle/0278_workspace_membership_removal_fencing.sql +1174 -0
- package/drizzle/0279_workspace_connection_use_lane.sql +343 -0
- package/drizzle/0280_connection_and_variable_set_audit_attribution.sql +773 -0
- package/drizzle/0281_viewer_holder_authority_claims.sql +52 -0
- package/drizzle/0282_variable_set_session_attach_attribution.sql +178 -0
- package/drizzle/0283_editable_spreadsheet_authored_state.sql +82 -0
- package/drizzle/0284_truthful_human_confirmed_review_reason.sql +930 -0
- package/drizzle/0285_organization_tenancy_inventory.sql +329 -0
- package/drizzle/0286_widen_task_note_expiry_ceiling.sql +391 -0
- package/drizzle/0287_open_suffix_pending_tool_calls.sql +18 -0
- package/drizzle/0288_attached_browser_reenrollment.sql +64 -0
- package/drizzle/0289_session_composer_policy_authority.sql +597 -0
- package/drizzle/0290_organization_membership_backfill.sql +268 -0
- package/drizzle/0291_resource_authority_classification_assertion.sql +371 -0
- package/drizzle/0292_truthful_tenancy_inventory_counters.sql +291 -0
- package/drizzle/0293_confirm_time_rule_rebaseline.sql +615 -0
- package/drizzle/0294_preference_activation_authority.sql +237 -0
- package/drizzle/0295_retire_legacy_standing_memory_mode.sql +476 -0
- package/drizzle/0296_force_rls_backfill_noop_repair.sql +215 -0
- package/drizzle/0297_session_ownership_classification_and_backfill.sql +752 -0
- package/drizzle/0298_organization_tenancy_parity.sql +609 -0
- package/drizzle/0299_organization_membership_lock_order.sql +291 -0
- package/drizzle/0300_tenancy_backfill_ledger.sql +459 -0
- package/drizzle/0301_session_snapshot_and_pin_visibility.sql +181 -0
- package/drizzle/0302_personal_workspace_session_ownership.sql +303 -0
- package/drizzle/0303_session_tenancy_product_activation.sql +919 -0
- package/drizzle/0304_personal_workspace_private_session_reads.sql +97 -0
- package/drizzle/0305_personal_resource_grant_management.sql +584 -0
- package/drizzle/0306_atomic_personal_resource_attachments.sql +1374 -0
- package/drizzle/0307_session_attention_state.sql +51 -0
- package/drizzle/0308_session_archives.sql +35 -0
- package/drizzle/0309_channel_project_pins.sql +6 -0
- package/drizzle/0310_channel_project_order.sql +27 -0
- package/drizzle/0311_company_scope_and_private_session_create.sql +656 -0
- package/drizzle/0312_quiescent_session_tree_deletion.sql +39 -0
- package/drizzle/0313_private_child_session_authority.sql +365 -0
- package/drizzle/0314_unregistered_organization_invitations.sql +606 -0
- package/drizzle/0315_personal_github_repository_selection.sql +624 -0
- package/drizzle/0316_human_confirmed_activation_resumed_generation.sql +869 -0
- package/drizzle/0317_session_goal_continuation_hold.sql +64 -0
- package/drizzle/0318_session_turn_startup_milestones.sql +115 -0
- package/drizzle/0319_event_triggered_automations.sql +254 -0
- package/drizzle/0320_pr_review_pack.sql +113 -0
- package/drizzle/0321_slack_bot_environment_display_name.sql +15 -0
- package/drizzle/0322_session_turns_unclaimed_prompt_trigger_index.sql +5 -0
- package/drizzle/0323_organization_private_session_enablement.sql +489 -0
- package/drizzle/0324_human_confirmed_company_profile_agent_admin.sql +856 -0
- package/drizzle/0325_child_lifecycle_notices.sql +44 -0
- package/drizzle/0326_interaction_operation_error_codes.sql +62 -0
- package/drizzle/0327_slack_first_task_hint.sql +29 -0
- package/drizzle/0328_session_background_commands.sql +590 -0
- package/drizzle/0329_slack_orchestration_delivery_events.sql +91 -0
- package/drizzle/0330_api_key_descriptions.sql +20 -0
- package/drizzle/0331_managed_organization_creation.sql +163 -0
- package/drizzle/0332_organization_shared_workspace_control_plane.sql +539 -0
- package/drizzle/0333_session_turn_prompt_routing.sql +45 -0
- package/drizzle/0334_connected_machine_workspace_root.sql +99 -0
- package/drizzle/0335_slack_workspace_routing.sql +460 -0
- package/drizzle/0336_atomic_session_fork_visibility.sql +667 -0
- package/drizzle/0337_slack_routed_action_handles.sql +189 -0
- package/drizzle/0338_atomic_connected_machine_attachments.sql +410 -0
- package/drizzle/0339_document_authority_reclassification.sql +1153 -0
- package/drizzle/0340_tenancy_backfill_activation_evidence.sql +1347 -0
- package/drizzle/0341_slack_routing_probe_organization_fence.sql +109 -0
- package/drizzle/0342_slack_route_prompt_single_pending.sql +32 -0
- package/drizzle/0343_personal_document_force_rls_lock_repair.sql +146 -0
- package/drizzle/0344_private_session_visibility_transition_gate.sql +85 -0
- package/drizzle/0345_tenant_scoped_session_tenancy_fence.sql +2839 -0
- package/drizzle/0346_document_migration_audit_surface.sql +454 -0
- package/drizzle/0347_connection_authority_convergence_evidence.sql +396 -0
- package/package.json +10 -6
- package/src/attached-browser-devices.ts +233 -5
- package/src/automations.ts +911 -0
- package/src/browser-sessions.ts +10 -0
- package/src/capability-integrations.ts +175 -1
- package/src/child-lifecycle-notices.ts +241 -0
- package/src/codemode-operations.ts +1 -35
- package/src/company-brain-context-selection-schema.ts +100 -0
- package/src/company-brain-context-selection.ts +359 -0
- package/src/company-brain-governed-writes.ts +1170 -0
- package/src/company-brain.ts +309 -0
- package/src/company-profile-agent-admin.ts +225 -0
- package/src/company-profile-schema.ts +121 -1
- package/src/company-profile.ts +21 -0
- package/src/computer-sessions.ts +10 -1
- package/src/connection-authority.ts +290 -0
- package/src/connection-scopes.ts +20 -0
- package/src/connection-tenancy-backfill.ts +167 -0
- package/src/connection-token-resolver.ts +263 -31
- package/src/database.ts +87 -2
- package/src/editable-artifacts-schema.ts +10 -5
- package/src/editable-artifacts.ts +21 -11
- package/src/governed-learning-activation-schema.ts +121 -0
- package/src/governed-learning-activation.ts +588 -0
- package/src/governed-learning-evaluator-schema.ts +72 -0
- package/src/governed-learning-evaluator.ts +217 -0
- package/src/index.ts +11676 -1550
- package/src/insights.ts +107 -0
- package/src/integration-bindings.ts +88 -6
- package/src/integration-facets.ts +287 -84
- package/src/interaction-placement-loss.ts +234 -0
- package/src/managed-human-provisioning.ts +116 -0
- package/src/memory-domain.ts +27 -32
- package/src/migrate.ts +77 -1
- package/src/new-session-drafts.ts +229 -35
- package/src/organization-membership-backfill.ts +735 -0
- package/src/organization-membership-lifecycle.ts +995 -0
- package/src/pr-review.ts +890 -0
- package/src/preference-registry.ts +31 -1
- package/src/provision-roles.ts +905 -6
- package/src/runtime-posture-cli.ts +2 -0
- package/src/runtime-posture.ts +1317 -72
- package/src/schema.ts +3316 -428
- package/src/scoped-knowledge-schema.ts +16 -8
- package/src/scoped-knowledge.ts +1 -1
- package/src/session-background-commands.ts +759 -0
- package/src/session-control.ts +640 -74
- package/src/session-goal-pacing.ts +126 -0
- package/src/session-queue-commands.ts +441 -85
- package/src/session-realtime-context.ts +4 -6
- package/src/session-realtime-ledger.ts +28 -14
- package/src/session-realtime-mirror.ts +1 -1
- package/src/session-tenancy.ts +410 -49
- package/src/session-tool-call-settlement.ts +38 -29
- package/src/slack-routing-personal-workspace.ts +67 -0
- package/src/slack-routing.ts +867 -0
- package/src/slack-task-policy-schema.ts +5 -0
- package/src/slack-task-policy.ts +18 -0
- package/src/slack-user-link-access.ts +138 -11
- package/src/task-notes-schema.ts +74 -0
- package/src/task-notes.ts +124 -2
- package/src/turn-initiator.ts +8 -0
- package/src/user-resource-authority.ts +377 -0
- package/src/workspace-authority.ts +160 -0
- package/src/workspace-instruction-policies-schema.ts +53 -1
- package/src/workspace-instruction-policies.ts +528 -77
- package/src/workspace-learning-policy.ts +21 -5
- package/src/workspace-membership-permissions.ts +9 -0
- package/dist/chunk-4SR4HKKA.js.map +0 -1
- package/dist/chunk-6ZYKCRFO.js.map +0 -1
- package/dist/chunk-NXAFLCQX.js +0 -2468
- package/dist/chunk-NXAFLCQX.js.map +0 -1
- package/dist/chunk-SK7YYHBI.js.map +0 -1
- package/dist/chunk-WD5ROSLL.js +0 -117
- package/dist/chunk-WD5ROSLL.js.map +0 -1
- package/dist/chunk-ZWREYEWA.js.map +0 -1
- /package/dist/{chunk-CUPM3FGB.js.map → chunk-2PRS4J5Q.js.map} +0 -0
- /package/dist/{chunk-LTG3S6ZY.js.map → chunk-E6CLMKEE.js.map} +0 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
-- deployment-mode: rolling
|
|
2
|
+
-- Persist the exact running Connected Machine build/capabilities and one
|
|
3
|
+
-- authoritative self-update state. Progress is fenced to the process connection
|
|
4
|
+
-- generation that accepted it; completion is confirmed by the successor Hello.
|
|
5
|
+
|
|
6
|
+
SET lock_timeout = '5s';
|
|
7
|
+
SET statement_timeout = '10min';
|
|
8
|
+
|
|
9
|
+
ALTER TABLE "enrollments"
|
|
10
|
+
ADD COLUMN "agent_version" text,
|
|
11
|
+
ADD COLUMN "agent_binary_sha256" text,
|
|
12
|
+
ADD COLUMN "agent_update_channel" text,
|
|
13
|
+
ADD COLUMN "agent_capabilities" jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
14
|
+
ADD COLUMN "agent_update_operation_id" uuid,
|
|
15
|
+
ADD COLUMN "agent_update_status" text,
|
|
16
|
+
ADD COLUMN "agent_update_target_version" text,
|
|
17
|
+
ADD COLUMN "agent_update_expected_binary_sha256" text,
|
|
18
|
+
ADD COLUMN "agent_update_error_code" text,
|
|
19
|
+
ADD COLUMN "agent_update_retryable" boolean NOT NULL DEFAULT false,
|
|
20
|
+
ADD COLUMN "agent_update_rolled_back" boolean NOT NULL DEFAULT false,
|
|
21
|
+
ADD COLUMN "agent_update_connection_instance_id" text,
|
|
22
|
+
ADD COLUMN "agent_update_connection_generation" integer,
|
|
23
|
+
ADD COLUMN "agent_update_requested_at" timestamptz,
|
|
24
|
+
ADD COLUMN "agent_update_updated_at" timestamptz,
|
|
25
|
+
ADD COLUMN "agent_update_completed_at" timestamptz;
|
|
26
|
+
|
|
27
|
+
ALTER TABLE "enrollments"
|
|
28
|
+
ADD CONSTRAINT "enrollments_agent_binary_sha256_chk" CHECK (
|
|
29
|
+
"agent_binary_sha256" IS NULL OR "agent_binary_sha256" ~ '^[0-9a-f]{64}$'
|
|
30
|
+
) NOT VALID,
|
|
31
|
+
ADD CONSTRAINT "enrollments_agent_update_channel_chk" CHECK (
|
|
32
|
+
"agent_update_channel" IS NULL OR "agent_update_channel" IN ('stable', 'beta')
|
|
33
|
+
) NOT VALID,
|
|
34
|
+
ADD CONSTRAINT "enrollments_agent_update_expected_binary_sha256_chk" CHECK (
|
|
35
|
+
"agent_update_expected_binary_sha256" IS NULL
|
|
36
|
+
OR "agent_update_expected_binary_sha256" ~ '^[0-9a-f]{64}$'
|
|
37
|
+
) NOT VALID,
|
|
38
|
+
ADD CONSTRAINT "enrollments_agent_update_state_shape_chk" CHECK (
|
|
39
|
+
("agent_update_operation_id" IS NULL
|
|
40
|
+
AND "agent_update_status" IS NULL
|
|
41
|
+
AND "agent_update_target_version" IS NULL
|
|
42
|
+
AND "agent_update_connection_instance_id" IS NULL
|
|
43
|
+
AND "agent_update_connection_generation" IS NULL
|
|
44
|
+
AND "agent_update_requested_at" IS NULL
|
|
45
|
+
AND "agent_update_updated_at" IS NULL)
|
|
46
|
+
OR
|
|
47
|
+
("agent_update_operation_id" IS NOT NULL
|
|
48
|
+
AND "agent_update_status" IN (
|
|
49
|
+
'requested', 'accepted', 'waiting_for_idle', 'downloading', 'verifying',
|
|
50
|
+
'applying', 'restarting', 'succeeded', 'failed'
|
|
51
|
+
)
|
|
52
|
+
AND "agent_update_target_version" IS NOT NULL
|
|
53
|
+
AND "agent_update_connection_instance_id" IS NOT NULL
|
|
54
|
+
AND "agent_update_connection_generation" IS NOT NULL
|
|
55
|
+
AND "agent_update_connection_generation" >= 0
|
|
56
|
+
AND "agent_update_requested_at" IS NOT NULL
|
|
57
|
+
AND "agent_update_updated_at" IS NOT NULL)
|
|
58
|
+
) NOT VALID;
|
|
59
|
+
|
|
60
|
+
ALTER TABLE "enrollments"
|
|
61
|
+
VALIDATE CONSTRAINT "enrollments_agent_binary_sha256_chk";
|
|
62
|
+
ALTER TABLE "enrollments"
|
|
63
|
+
VALIDATE CONSTRAINT "enrollments_agent_update_channel_chk";
|
|
64
|
+
ALTER TABLE "enrollments"
|
|
65
|
+
VALIDATE CONSTRAINT "enrollments_agent_update_expected_binary_sha256_chk";
|
|
66
|
+
ALTER TABLE "enrollments"
|
|
67
|
+
VALIDATE CONSTRAINT "enrollments_agent_update_state_shape_chk";
|
|
68
|
+
|
|
69
|
+
RESET statement_timeout;
|
|
70
|
+
RESET lock_timeout;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
-- deployment-mode: rolling
|
|
2
|
+
-- Durable, coalesced, per-user Slack App Home refreshes. Signed Events API
|
|
3
|
+
-- ingress records only bounded provider identifiers and acknowledges before
|
|
4
|
+
-- host authorization, task projection, or Slack views.publish network work.
|
|
5
|
+
|
|
6
|
+
SET LOCAL lock_timeout = '5s';
|
|
7
|
+
SET LOCAL statement_timeout = '10min';
|
|
8
|
+
|
|
9
|
+
CREATE TABLE "slack_app_home_refreshes" (
|
|
10
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
11
|
+
"account_id" uuid NOT NULL REFERENCES "managed_accounts"("id") ON DELETE CASCADE,
|
|
12
|
+
"workspace_id" uuid NOT NULL REFERENCES "workspaces"("id") ON DELETE CASCADE,
|
|
13
|
+
"connection_id" uuid NOT NULL REFERENCES "connections"("id") ON DELETE CASCADE,
|
|
14
|
+
"slack_team_id" text NOT NULL,
|
|
15
|
+
"slack_user_id" text NOT NULL,
|
|
16
|
+
"provider_event_id" text NOT NULL,
|
|
17
|
+
"provider_view_hash" text,
|
|
18
|
+
"desired_revision" integer NOT NULL DEFAULT 1,
|
|
19
|
+
"processed_revision" integer NOT NULL DEFAULT 0,
|
|
20
|
+
"claim_holder_id" uuid,
|
|
21
|
+
"claim_expires_at" timestamptz,
|
|
22
|
+
"attempt_count" integer NOT NULL DEFAULT 0,
|
|
23
|
+
"retry_at" timestamptz,
|
|
24
|
+
"last_error_code" text,
|
|
25
|
+
"created_at" timestamptz NOT NULL DEFAULT now(),
|
|
26
|
+
"updated_at" timestamptz NOT NULL DEFAULT now(),
|
|
27
|
+
CONSTRAINT "slack_app_home_refreshes_connection_user_uq"
|
|
28
|
+
UNIQUE ("connection_id", "slack_user_id"),
|
|
29
|
+
CONSTRAINT "slack_app_home_refreshes_workspace_account_fk"
|
|
30
|
+
FOREIGN KEY ("workspace_id", "account_id")
|
|
31
|
+
REFERENCES "workspaces"("id", "account_id") ON DELETE CASCADE,
|
|
32
|
+
CONSTRAINT "slack_app_home_refreshes_bounds_check"
|
|
33
|
+
CHECK (
|
|
34
|
+
octet_length("slack_team_id") BETWEEN 1 AND 64
|
|
35
|
+
AND octet_length("slack_user_id") BETWEEN 1 AND 64
|
|
36
|
+
AND octet_length("provider_event_id") BETWEEN 1 AND 256
|
|
37
|
+
AND ("provider_view_hash" IS NULL
|
|
38
|
+
OR octet_length("provider_view_hash") BETWEEN 1 AND 256)
|
|
39
|
+
AND ("last_error_code" IS NULL
|
|
40
|
+
OR octet_length("last_error_code") BETWEEN 1 AND 128)
|
|
41
|
+
),
|
|
42
|
+
CONSTRAINT "slack_app_home_refreshes_revisions_check"
|
|
43
|
+
CHECK (
|
|
44
|
+
"desired_revision" > 0
|
|
45
|
+
AND "processed_revision" >= 0
|
|
46
|
+
AND "processed_revision" <= "desired_revision"
|
|
47
|
+
AND "attempt_count" >= 0
|
|
48
|
+
),
|
|
49
|
+
CONSTRAINT "slack_app_home_refreshes_claim_check"
|
|
50
|
+
CHECK (("claim_holder_id" IS NULL) = ("claim_expires_at" IS NULL))
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
CREATE INDEX "slack_app_home_refreshes_pending_idx"
|
|
54
|
+
ON "slack_app_home_refreshes" ("retry_at", "updated_at", "id")
|
|
55
|
+
WHERE "processed_revision" < "desired_revision";
|
|
56
|
+
|
|
57
|
+
ALTER TABLE "slack_app_home_refreshes" ENABLE ROW LEVEL SECURITY;
|
|
58
|
+
ALTER TABLE "slack_app_home_refreshes" FORCE ROW LEVEL SECURITY;
|
|
59
|
+
|
|
60
|
+
CREATE POLICY workspace_isolation ON "slack_app_home_refreshes"
|
|
61
|
+
USING (opengeni_private.workspace_rls_visible("account_id", "workspace_id"))
|
|
62
|
+
WITH CHECK (opengeni_private.workspace_rls_visible("account_id", "workspace_id"));
|
|
63
|
+
|
|
64
|
+
DO $privileged_functions$
|
|
65
|
+
DECLARE data_schema text := current_schema();
|
|
66
|
+
BEGIN
|
|
67
|
+
EXECUTE format($ddl$
|
|
68
|
+
CREATE OR REPLACE FUNCTION opengeni_private.claim_slack_app_home_refresh(
|
|
69
|
+
p_holder uuid,
|
|
70
|
+
p_lease_ms integer
|
|
71
|
+
)
|
|
72
|
+
RETURNS SETOF %1$I.slack_app_home_refreshes
|
|
73
|
+
LANGUAGE plpgsql
|
|
74
|
+
SECURITY DEFINER
|
|
75
|
+
SET search_path = pg_catalog
|
|
76
|
+
AS $function$
|
|
77
|
+
BEGIN
|
|
78
|
+
IF p_lease_ms < 1000 OR p_lease_ms > 300000 THEN
|
|
79
|
+
RAISE EXCEPTION 'invalid Slack App Home claim lease';
|
|
80
|
+
END IF;
|
|
81
|
+
RETURN QUERY
|
|
82
|
+
WITH candidate AS (
|
|
83
|
+
SELECT refresh.id
|
|
84
|
+
FROM %1$I.slack_app_home_refreshes refresh
|
|
85
|
+
WHERE refresh.processed_revision < refresh.desired_revision
|
|
86
|
+
AND (refresh.retry_at IS NULL OR refresh.retry_at <= now())
|
|
87
|
+
AND (refresh.claim_holder_id IS NULL OR refresh.claim_expires_at <= now())
|
|
88
|
+
ORDER BY refresh.retry_at NULLS FIRST, refresh.updated_at, refresh.id
|
|
89
|
+
FOR UPDATE SKIP LOCKED
|
|
90
|
+
LIMIT 1
|
|
91
|
+
)
|
|
92
|
+
UPDATE %1$I.slack_app_home_refreshes refresh
|
|
93
|
+
SET claim_holder_id = p_holder,
|
|
94
|
+
claim_expires_at = now() + make_interval(secs => p_lease_ms::double precision / 1000),
|
|
95
|
+
retry_at = NULL,
|
|
96
|
+
attempt_count = refresh.attempt_count + 1,
|
|
97
|
+
updated_at = now()
|
|
98
|
+
FROM candidate
|
|
99
|
+
WHERE refresh.id = candidate.id
|
|
100
|
+
RETURNING refresh.*;
|
|
101
|
+
END
|
|
102
|
+
$function$
|
|
103
|
+
$ddl$, data_schema);
|
|
104
|
+
END
|
|
105
|
+
$privileged_functions$;
|
|
106
|
+
|
|
107
|
+
REVOKE ALL ON FUNCTION opengeni_private.claim_slack_app_home_refresh(uuid, integer) FROM PUBLIC;
|
|
108
|
+
|
|
109
|
+
DO $runtime_grants$
|
|
110
|
+
BEGIN
|
|
111
|
+
IF EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'opengeni_app') THEN
|
|
112
|
+
GRANT SELECT, INSERT, UPDATE, DELETE ON "slack_app_home_refreshes" TO opengeni_app;
|
|
113
|
+
GRANT EXECUTE ON FUNCTION opengeni_private.claim_slack_app_home_refresh(uuid, integer)
|
|
114
|
+
TO opengeni_app;
|
|
115
|
+
END IF;
|
|
116
|
+
END
|
|
117
|
+
$runtime_grants$;
|
|
118
|
+
|
|
119
|
+
RESET statement_timeout;
|
|
120
|
+
RESET lock_timeout;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
-- deployment-mode: rolling
|
|
2
|
+
-- Persist the existing content-free Company Brain contribution estimate beside
|
|
3
|
+
-- each authoritative model-call fact so Workspace Insights can report it.
|
|
4
|
+
|
|
5
|
+
SET LOCAL lock_timeout = '5s';
|
|
6
|
+
SET LOCAL statement_timeout = '10min';
|
|
7
|
+
|
|
8
|
+
ALTER TABLE "model_call_facts"
|
|
9
|
+
ADD COLUMN IF NOT EXISTS "context_contributions" jsonb;
|
|
10
|
+
|
|
11
|
+
CREATE OR REPLACE FUNCTION opengeni_private.model_context_contributions_valid(value jsonb)
|
|
12
|
+
RETURNS boolean
|
|
13
|
+
LANGUAGE plpgsql
|
|
14
|
+
IMMUTABLE
|
|
15
|
+
PARALLEL SAFE
|
|
16
|
+
SET search_path = pg_catalog, public
|
|
17
|
+
AS $$
|
|
18
|
+
DECLARE
|
|
19
|
+
contribution jsonb;
|
|
20
|
+
contribution_source text;
|
|
21
|
+
metric text;
|
|
22
|
+
seen_sources text[] := ARRAY[]::text[];
|
|
23
|
+
BEGIN
|
|
24
|
+
IF value IS NULL THEN
|
|
25
|
+
RETURN true;
|
|
26
|
+
END IF;
|
|
27
|
+
IF jsonb_typeof(value) <> 'array'
|
|
28
|
+
OR jsonb_array_length(value) > 6
|
|
29
|
+
OR octet_length(value::text) > 8192
|
|
30
|
+
THEN
|
|
31
|
+
RETURN false;
|
|
32
|
+
END IF;
|
|
33
|
+
|
|
34
|
+
FOR contribution IN SELECT element FROM jsonb_array_elements(value) AS entries(element)
|
|
35
|
+
LOOP
|
|
36
|
+
IF jsonb_typeof(contribution) <> 'object'
|
|
37
|
+
OR (SELECT count(*) FROM pg_catalog.jsonb_object_keys(contribution)) <> 4
|
|
38
|
+
OR NOT (contribution ?& ARRAY['source', 'items', 'utf8Bytes', 'estimatedTokens'])
|
|
39
|
+
THEN
|
|
40
|
+
RETURN false;
|
|
41
|
+
END IF;
|
|
42
|
+
|
|
43
|
+
contribution_source := contribution->>'source';
|
|
44
|
+
IF contribution_source NOT IN (
|
|
45
|
+
'workspace_instruction_policy',
|
|
46
|
+
'legacy_workspace_instructions',
|
|
47
|
+
'preference_registry_descriptor',
|
|
48
|
+
'company_profile',
|
|
49
|
+
'legacy_memory_v1',
|
|
50
|
+
'runtime_skill_catalog'
|
|
51
|
+
) OR contribution_source = ANY(seen_sources)
|
|
52
|
+
THEN
|
|
53
|
+
RETURN false;
|
|
54
|
+
END IF;
|
|
55
|
+
seen_sources := array_append(seen_sources, contribution_source);
|
|
56
|
+
|
|
57
|
+
FOREACH metric IN ARRAY ARRAY['items', 'utf8Bytes', 'estimatedTokens']
|
|
58
|
+
LOOP
|
|
59
|
+
IF jsonb_typeof(contribution->metric) <> 'number'
|
|
60
|
+
OR contribution->>metric !~ '^(0|[1-9][0-9]{0,15})$'
|
|
61
|
+
OR (contribution->>metric)::numeric > 9007199254740991
|
|
62
|
+
THEN
|
|
63
|
+
RETURN false;
|
|
64
|
+
END IF;
|
|
65
|
+
END LOOP;
|
|
66
|
+
END LOOP;
|
|
67
|
+
RETURN true;
|
|
68
|
+
END;
|
|
69
|
+
$$;
|
|
70
|
+
|
|
71
|
+
REVOKE ALL ON FUNCTION opengeni_private.model_context_contributions_valid(jsonb)
|
|
72
|
+
FROM PUBLIC;
|
|
73
|
+
DO $model_context_contributions_function_grant$
|
|
74
|
+
BEGIN
|
|
75
|
+
IF EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'opengeni_app') THEN
|
|
76
|
+
GRANT EXECUTE ON FUNCTION opengeni_private.model_context_contributions_valid(jsonb)
|
|
77
|
+
TO opengeni_app;
|
|
78
|
+
END IF;
|
|
79
|
+
END
|
|
80
|
+
$model_context_contributions_function_grant$;
|
|
81
|
+
|
|
82
|
+
ALTER TABLE "model_call_facts"
|
|
83
|
+
DROP CONSTRAINT IF EXISTS "model_call_facts_context_contributions_check",
|
|
84
|
+
ADD CONSTRAINT "model_call_facts_context_contributions_check"
|
|
85
|
+
CHECK (opengeni_private.model_context_contributions_valid("context_contributions")) NOT VALID;
|
|
86
|
+
|
|
87
|
+
ALTER TABLE "model_call_facts"
|
|
88
|
+
VALIDATE CONSTRAINT "model_call_facts_context_contributions_check";
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
-- deployment-mode: rolling
|
|
2
|
+
-- Bind every personal Integration Facet instance Connection replacement to the
|
|
3
|
+
-- exact current Connection subject. The application also checks this before
|
|
4
|
+
-- its upsert; this trigger is the fail-closed boundary for direct SQL writers.
|
|
5
|
+
|
|
6
|
+
CREATE OR REPLACE FUNCTION capability_v2_validate_facet_binding()
|
|
7
|
+
RETURNS trigger
|
|
8
|
+
LANGUAGE plpgsql
|
|
9
|
+
AS $$
|
|
10
|
+
DECLARE
|
|
11
|
+
previous_connection_subject_id text;
|
|
12
|
+
requested_connection_subject_id text;
|
|
13
|
+
BEGIN
|
|
14
|
+
IF NOT EXISTS (
|
|
15
|
+
SELECT 1
|
|
16
|
+
FROM integration_facet_definitions definition
|
|
17
|
+
JOIN capability_facet_installations installation
|
|
18
|
+
ON installation.id = NEW.integration_facet_installation_id
|
|
19
|
+
AND installation.facet_id = definition.integration_facet_id
|
|
20
|
+
WHERE definition.id = NEW.facet_definition_id
|
|
21
|
+
AND installation.account_id = NEW.account_id
|
|
22
|
+
AND installation.workspace_id = NEW.workspace_id
|
|
23
|
+
) THEN
|
|
24
|
+
RAISE EXCEPTION 'Facet binding does not match its Integration installation or tenant'
|
|
25
|
+
USING ERRCODE = '23514';
|
|
26
|
+
END IF;
|
|
27
|
+
|
|
28
|
+
IF NEW.connection_id IS NOT NULL AND NOT EXISTS (
|
|
29
|
+
SELECT 1 FROM connections connection
|
|
30
|
+
WHERE connection.id = NEW.connection_id
|
|
31
|
+
AND connection.account_id = NEW.account_id
|
|
32
|
+
AND connection.workspace_id = NEW.workspace_id
|
|
33
|
+
) THEN
|
|
34
|
+
RAISE EXCEPTION 'Facet binding Connection belongs to another tenant'
|
|
35
|
+
USING ERRCODE = '23514';
|
|
36
|
+
END IF;
|
|
37
|
+
|
|
38
|
+
IF TG_OP = 'UPDATE'
|
|
39
|
+
AND OLD.connection_id IS NOT NULL
|
|
40
|
+
AND NEW.connection_id IS DISTINCT FROM OLD.connection_id
|
|
41
|
+
THEN
|
|
42
|
+
SELECT connection.subject_id
|
|
43
|
+
INTO previous_connection_subject_id
|
|
44
|
+
FROM connections connection
|
|
45
|
+
WHERE connection.id = OLD.connection_id
|
|
46
|
+
AND connection.account_id = OLD.account_id
|
|
47
|
+
AND connection.workspace_id = OLD.workspace_id;
|
|
48
|
+
IF NOT FOUND THEN
|
|
49
|
+
RAISE EXCEPTION 'Personal Integration instance belongs to another subject'
|
|
50
|
+
USING ERRCODE = '42501';
|
|
51
|
+
END IF;
|
|
52
|
+
IF previous_connection_subject_id IS NOT NULL THEN
|
|
53
|
+
IF NEW.connection_id IS NOT NULL THEN
|
|
54
|
+
SELECT connection.subject_id
|
|
55
|
+
INTO requested_connection_subject_id
|
|
56
|
+
FROM connections connection
|
|
57
|
+
WHERE connection.id = NEW.connection_id
|
|
58
|
+
AND connection.account_id = NEW.account_id
|
|
59
|
+
AND connection.workspace_id = NEW.workspace_id;
|
|
60
|
+
END IF;
|
|
61
|
+
IF requested_connection_subject_id IS DISTINCT FROM previous_connection_subject_id THEN
|
|
62
|
+
RAISE EXCEPTION 'Personal Integration instance Connection ownership cannot be changed'
|
|
63
|
+
USING ERRCODE = '42501';
|
|
64
|
+
END IF;
|
|
65
|
+
END IF;
|
|
66
|
+
END IF;
|
|
67
|
+
|
|
68
|
+
RETURN NEW;
|
|
69
|
+
END;
|
|
70
|
+
$$;
|