@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.
Files changed (271) hide show
  1. package/dist/attached-browser-devices.d.ts +7 -0
  2. package/dist/automations.d.ts +154 -0
  3. package/dist/canonical-human-identities.js +3 -3
  4. package/dist/capability-integrations.d.ts +13 -0
  5. package/dist/child-lifecycle-notices.d.ts +68 -0
  6. package/dist/{chunk-4SR4HKKA.js → chunk-2EH4WRHL.js} +19 -11
  7. package/dist/chunk-2EH4WRHL.js.map +1 -0
  8. package/dist/{chunk-CUPM3FGB.js → chunk-2PRS4J5Q.js} +3 -3
  9. package/dist/chunk-6HMM2R5T.js +390 -0
  10. package/dist/chunk-6HMM2R5T.js.map +1 -0
  11. package/dist/{chunk-ZWREYEWA.js → chunk-AZHW7R5V.js} +56 -11
  12. package/dist/chunk-AZHW7R5V.js.map +1 -0
  13. package/dist/{chunk-LTG3S6ZY.js → chunk-E6CLMKEE.js} +2 -2
  14. package/dist/{chunk-6ZYKCRFO.js → chunk-KRLPEMLH.js} +7591 -4417
  15. package/dist/chunk-KRLPEMLH.js.map +1 -0
  16. package/dist/chunk-NAB6FKFN.js +516 -0
  17. package/dist/chunk-NAB6FKFN.js.map +1 -0
  18. package/dist/{chunk-SK7YYHBI.js → chunk-SIBYBA2D.js} +46 -1
  19. package/dist/chunk-SIBYBA2D.js.map +1 -0
  20. package/dist/chunk-UZNXG44K.js +4508 -0
  21. package/dist/chunk-UZNXG44K.js.map +1 -0
  22. package/dist/codemode-operations.d.ts +1 -6
  23. package/dist/company-brain-context-selection-schema.d.ts +705 -0
  24. package/dist/company-brain-context-selection.d.ts +94 -0
  25. package/dist/company-brain-governed-writes.d.ts +24 -0
  26. package/dist/company-brain.d.ts +55 -0
  27. package/dist/company-profile-agent-admin.d.ts +15 -0
  28. package/dist/company-profile-schema.d.ts +619 -2
  29. package/dist/company-profile.d.ts +9 -4
  30. package/dist/connection-authority.d.ts +95 -0
  31. package/dist/connection-scopes.d.ts +8 -0
  32. package/dist/connection-tenancy-backfill.d.ts +85 -0
  33. package/dist/connection-token-resolver.d.ts +30 -1
  34. package/dist/database.d.ts +23 -4
  35. package/dist/editable-artifact-durable-export.js +2 -2
  36. package/dist/editable-artifacts.d.ts +2 -2
  37. package/dist/editable-artifacts.js +3 -3
  38. package/dist/governed-learning-activation-schema.d.ts +984 -0
  39. package/dist/governed-learning-activation.d.ts +98 -0
  40. package/dist/governed-learning-evaluator-schema.d.ts +633 -0
  41. package/dist/governed-learning-evaluator.d.ts +28 -0
  42. package/dist/index.d.ts +1606 -81
  43. package/dist/index.js +21898 -8147
  44. package/dist/index.js.map +1 -1
  45. package/dist/insights.d.ts +18 -0
  46. package/dist/integration-bindings.d.ts +1 -0
  47. package/dist/integration-facets.d.ts +30 -0
  48. package/dist/interaction-placement-loss.d.ts +22 -0
  49. package/dist/managed-human-provisioning.d.ts +25 -0
  50. package/dist/memory-domain.d.ts +3 -3
  51. package/dist/migrate.d.ts +11 -1
  52. package/dist/migrate.js +1 -1
  53. package/dist/new-session-drafts.d.ts +43 -5
  54. package/dist/organization-membership-backfill.d.ts +174 -0
  55. package/dist/organization-membership-lifecycle.d.ts +162 -0
  56. package/dist/pr-review.d.ts +107 -0
  57. package/dist/preference-registry-schema.d.ts +2 -0
  58. package/dist/preference-registry.d.ts +2 -0
  59. package/dist/provision-roles.js +1 -1
  60. package/dist/runtime-posture.d.ts +29 -8
  61. package/dist/schema.d.ts +24914 -13703
  62. package/dist/schema.js +99 -1
  63. package/dist/scoped-knowledge-schema.d.ts +52 -1
  64. package/dist/session-background-commands.d.ts +125 -0
  65. package/dist/session-background-commands.js +34 -0
  66. package/dist/session-background-commands.js.map +1 -0
  67. package/dist/session-control.d.ts +156 -3
  68. package/dist/session-goal-pacing.d.ts +68 -0
  69. package/dist/session-queue-commands.d.ts +43 -4
  70. package/dist/session-realtime-ledger.d.ts +2 -0
  71. package/dist/session-tenancy.d.ts +71 -1
  72. package/dist/session-tenancy.js +25 -3
  73. package/dist/session-tool-call-settlement.d.ts +9 -4
  74. package/dist/slack-routing-personal-workspace.d.ts +23 -0
  75. package/dist/slack-routing.d.ts +268 -0
  76. package/dist/slack-task-policy-schema.d.ts +34 -0
  77. package/dist/slack-task-policy.d.ts +8 -0
  78. package/dist/slack-user-link-access.d.ts +28 -0
  79. package/dist/task-notes-schema.d.ts +594 -0
  80. package/dist/task-notes.d.ts +39 -0
  81. package/dist/turn-initiator.d.ts +2 -0
  82. package/dist/user-resource-authority.d.ts +109 -0
  83. package/dist/video-generation.js +3 -3
  84. package/dist/workspace-authority.d.ts +81 -0
  85. package/dist/workspace-instruction-policies-schema.d.ts +279 -0
  86. package/dist/workspace-instruction-policies.d.ts +62 -0
  87. package/dist/workspace-learning-policy.d.ts +1 -0
  88. package/dist/workspace-membership-permissions.d.ts +2 -0
  89. package/drizzle/0240_enrollment_connection_authority.sql +39 -0
  90. package/drizzle/0241_atomic_personal_resource_delegation.sql +1000 -0
  91. package/drizzle/0241_enrollment_agent_runtime.sql +70 -0
  92. package/drizzle/0244_slack_app_home_refresh_queue.sql +120 -0
  93. package/drizzle/0245_model_context_contribution_facts.sql +88 -0
  94. package/drizzle/0246_integration_personal_instance_authority.sql +70 -0
  95. package/drizzle/0247_terraform_stacks_provenance_repair.sql +428 -0
  96. package/drizzle/0248_terraform_stacks_component_resolution_fence.sql +83 -0
  97. package/drizzle/0249_personal_resource_delegation_authority_correction.sql +662 -0
  98. package/drizzle/0250_direct_retained_process_owner_liveness.sql +199 -0
  99. package/drizzle/0251_connected_machine_operation_policy.sql +45 -0
  100. package/drizzle/0252_scheduled_personal_resource_delegation.sql +1867 -0
  101. package/drizzle/0253_common_user_resource_authority_lifecycle.sql +1555 -0
  102. package/drizzle/0254_scoped_variable_set_authority.sql +1255 -0
  103. package/drizzle/0255_company_brain_governed_write_proposals.sql +524 -0
  104. package/drizzle/0256_connection_authority_delegation.sql +703 -0
  105. package/drizzle/0257_goal_revision_decisions_and_root_constraints.sql +436 -0
  106. package/drizzle/0258_three_scope_document_knowledge_authority.sql +1273 -0
  107. package/drizzle/0259_company_brain_context_selection_receipts.sql +869 -0
  108. package/drizzle/0260_task_note_knowledge_promotion.sql +820 -0
  109. package/drizzle/0261_preference_knowledge_proposal_actor_binding.sql +471 -0
  110. package/drizzle/0262_scoped_connected_machines_and_rigs.sql +1700 -0
  111. package/drizzle/0263_organization_membership_lifecycle.sql +3284 -0
  112. package/drizzle/0264_connection_authority_runtime_activation.sql +1084 -0
  113. package/drizzle/0266_company_brain_context_receipt_inspection.sql +156 -0
  114. package/drizzle/0268_governed_learning_decision_receipts.sql +825 -0
  115. package/drizzle/0269_governed_learning_activation_controller.sql +1874 -0
  116. package/drizzle/0270_governed_learning_history_inspection.sql +170 -0
  117. package/drizzle/0271_company_brain_retrieval_only_default.sql +524 -0
  118. package/drizzle/0272_human_confirmed_learning_activation.sql +591 -0
  119. package/drizzle/0273_scheduled_variable_set_materialization.sql +268 -0
  120. package/drizzle/0274_human_confirmed_knowledge_review.sql +310 -0
  121. package/drizzle/0275_scheduled_connection_authority.sql +5527 -0
  122. package/drizzle/0276_onboarding_proposal_initiating_human_guc.sql +198 -0
  123. package/drizzle/0277_workspace_writer_authority_attribution.sql +393 -0
  124. package/drizzle/0278_workspace_membership_removal_fencing.sql +1174 -0
  125. package/drizzle/0279_workspace_connection_use_lane.sql +343 -0
  126. package/drizzle/0280_connection_and_variable_set_audit_attribution.sql +773 -0
  127. package/drizzle/0281_viewer_holder_authority_claims.sql +52 -0
  128. package/drizzle/0282_variable_set_session_attach_attribution.sql +178 -0
  129. package/drizzle/0283_editable_spreadsheet_authored_state.sql +82 -0
  130. package/drizzle/0284_truthful_human_confirmed_review_reason.sql +930 -0
  131. package/drizzle/0285_organization_tenancy_inventory.sql +329 -0
  132. package/drizzle/0286_widen_task_note_expiry_ceiling.sql +391 -0
  133. package/drizzle/0287_open_suffix_pending_tool_calls.sql +18 -0
  134. package/drizzle/0288_attached_browser_reenrollment.sql +64 -0
  135. package/drizzle/0289_session_composer_policy_authority.sql +597 -0
  136. package/drizzle/0290_organization_membership_backfill.sql +268 -0
  137. package/drizzle/0291_resource_authority_classification_assertion.sql +371 -0
  138. package/drizzle/0292_truthful_tenancy_inventory_counters.sql +291 -0
  139. package/drizzle/0293_confirm_time_rule_rebaseline.sql +615 -0
  140. package/drizzle/0294_preference_activation_authority.sql +237 -0
  141. package/drizzle/0295_retire_legacy_standing_memory_mode.sql +476 -0
  142. package/drizzle/0296_force_rls_backfill_noop_repair.sql +215 -0
  143. package/drizzle/0297_session_ownership_classification_and_backfill.sql +752 -0
  144. package/drizzle/0298_organization_tenancy_parity.sql +609 -0
  145. package/drizzle/0299_organization_membership_lock_order.sql +291 -0
  146. package/drizzle/0300_tenancy_backfill_ledger.sql +459 -0
  147. package/drizzle/0301_session_snapshot_and_pin_visibility.sql +181 -0
  148. package/drizzle/0302_personal_workspace_session_ownership.sql +303 -0
  149. package/drizzle/0303_session_tenancy_product_activation.sql +919 -0
  150. package/drizzle/0304_personal_workspace_private_session_reads.sql +97 -0
  151. package/drizzle/0305_personal_resource_grant_management.sql +584 -0
  152. package/drizzle/0306_atomic_personal_resource_attachments.sql +1374 -0
  153. package/drizzle/0307_session_attention_state.sql +51 -0
  154. package/drizzle/0308_session_archives.sql +35 -0
  155. package/drizzle/0309_channel_project_pins.sql +6 -0
  156. package/drizzle/0310_channel_project_order.sql +27 -0
  157. package/drizzle/0311_company_scope_and_private_session_create.sql +656 -0
  158. package/drizzle/0312_quiescent_session_tree_deletion.sql +39 -0
  159. package/drizzle/0313_private_child_session_authority.sql +365 -0
  160. package/drizzle/0314_unregistered_organization_invitations.sql +606 -0
  161. package/drizzle/0315_personal_github_repository_selection.sql +624 -0
  162. package/drizzle/0316_human_confirmed_activation_resumed_generation.sql +869 -0
  163. package/drizzle/0317_session_goal_continuation_hold.sql +64 -0
  164. package/drizzle/0318_session_turn_startup_milestones.sql +115 -0
  165. package/drizzle/0319_event_triggered_automations.sql +254 -0
  166. package/drizzle/0320_pr_review_pack.sql +113 -0
  167. package/drizzle/0321_slack_bot_environment_display_name.sql +15 -0
  168. package/drizzle/0322_session_turns_unclaimed_prompt_trigger_index.sql +5 -0
  169. package/drizzle/0323_organization_private_session_enablement.sql +489 -0
  170. package/drizzle/0324_human_confirmed_company_profile_agent_admin.sql +856 -0
  171. package/drizzle/0325_child_lifecycle_notices.sql +44 -0
  172. package/drizzle/0326_interaction_operation_error_codes.sql +62 -0
  173. package/drizzle/0327_slack_first_task_hint.sql +29 -0
  174. package/drizzle/0328_session_background_commands.sql +590 -0
  175. package/drizzle/0329_slack_orchestration_delivery_events.sql +91 -0
  176. package/drizzle/0330_api_key_descriptions.sql +20 -0
  177. package/drizzle/0331_managed_organization_creation.sql +163 -0
  178. package/drizzle/0332_organization_shared_workspace_control_plane.sql +539 -0
  179. package/drizzle/0333_session_turn_prompt_routing.sql +45 -0
  180. package/drizzle/0334_connected_machine_workspace_root.sql +99 -0
  181. package/drizzle/0335_slack_workspace_routing.sql +460 -0
  182. package/drizzle/0336_atomic_session_fork_visibility.sql +667 -0
  183. package/drizzle/0337_slack_routed_action_handles.sql +189 -0
  184. package/drizzle/0338_atomic_connected_machine_attachments.sql +410 -0
  185. package/drizzle/0339_document_authority_reclassification.sql +1153 -0
  186. package/drizzle/0340_tenancy_backfill_activation_evidence.sql +1347 -0
  187. package/drizzle/0341_slack_routing_probe_organization_fence.sql +109 -0
  188. package/drizzle/0342_slack_route_prompt_single_pending.sql +32 -0
  189. package/drizzle/0343_personal_document_force_rls_lock_repair.sql +146 -0
  190. package/drizzle/0344_private_session_visibility_transition_gate.sql +85 -0
  191. package/drizzle/0345_tenant_scoped_session_tenancy_fence.sql +2839 -0
  192. package/drizzle/0346_document_migration_audit_surface.sql +454 -0
  193. package/drizzle/0347_connection_authority_convergence_evidence.sql +396 -0
  194. package/package.json +10 -6
  195. package/src/attached-browser-devices.ts +233 -5
  196. package/src/automations.ts +911 -0
  197. package/src/browser-sessions.ts +10 -0
  198. package/src/capability-integrations.ts +175 -1
  199. package/src/child-lifecycle-notices.ts +241 -0
  200. package/src/codemode-operations.ts +1 -35
  201. package/src/company-brain-context-selection-schema.ts +100 -0
  202. package/src/company-brain-context-selection.ts +359 -0
  203. package/src/company-brain-governed-writes.ts +1170 -0
  204. package/src/company-brain.ts +309 -0
  205. package/src/company-profile-agent-admin.ts +225 -0
  206. package/src/company-profile-schema.ts +121 -1
  207. package/src/company-profile.ts +21 -0
  208. package/src/computer-sessions.ts +10 -1
  209. package/src/connection-authority.ts +290 -0
  210. package/src/connection-scopes.ts +20 -0
  211. package/src/connection-tenancy-backfill.ts +167 -0
  212. package/src/connection-token-resolver.ts +263 -31
  213. package/src/database.ts +87 -2
  214. package/src/editable-artifacts-schema.ts +10 -5
  215. package/src/editable-artifacts.ts +21 -11
  216. package/src/governed-learning-activation-schema.ts +121 -0
  217. package/src/governed-learning-activation.ts +588 -0
  218. package/src/governed-learning-evaluator-schema.ts +72 -0
  219. package/src/governed-learning-evaluator.ts +217 -0
  220. package/src/index.ts +11676 -1550
  221. package/src/insights.ts +107 -0
  222. package/src/integration-bindings.ts +88 -6
  223. package/src/integration-facets.ts +287 -84
  224. package/src/interaction-placement-loss.ts +234 -0
  225. package/src/managed-human-provisioning.ts +116 -0
  226. package/src/memory-domain.ts +27 -32
  227. package/src/migrate.ts +77 -1
  228. package/src/new-session-drafts.ts +229 -35
  229. package/src/organization-membership-backfill.ts +735 -0
  230. package/src/organization-membership-lifecycle.ts +995 -0
  231. package/src/pr-review.ts +890 -0
  232. package/src/preference-registry.ts +31 -1
  233. package/src/provision-roles.ts +905 -6
  234. package/src/runtime-posture-cli.ts +2 -0
  235. package/src/runtime-posture.ts +1317 -72
  236. package/src/schema.ts +3316 -428
  237. package/src/scoped-knowledge-schema.ts +16 -8
  238. package/src/scoped-knowledge.ts +1 -1
  239. package/src/session-background-commands.ts +759 -0
  240. package/src/session-control.ts +640 -74
  241. package/src/session-goal-pacing.ts +126 -0
  242. package/src/session-queue-commands.ts +441 -85
  243. package/src/session-realtime-context.ts +4 -6
  244. package/src/session-realtime-ledger.ts +28 -14
  245. package/src/session-realtime-mirror.ts +1 -1
  246. package/src/session-tenancy.ts +410 -49
  247. package/src/session-tool-call-settlement.ts +38 -29
  248. package/src/slack-routing-personal-workspace.ts +67 -0
  249. package/src/slack-routing.ts +867 -0
  250. package/src/slack-task-policy-schema.ts +5 -0
  251. package/src/slack-task-policy.ts +18 -0
  252. package/src/slack-user-link-access.ts +138 -11
  253. package/src/task-notes-schema.ts +74 -0
  254. package/src/task-notes.ts +124 -2
  255. package/src/turn-initiator.ts +8 -0
  256. package/src/user-resource-authority.ts +377 -0
  257. package/src/workspace-authority.ts +160 -0
  258. package/src/workspace-instruction-policies-schema.ts +53 -1
  259. package/src/workspace-instruction-policies.ts +528 -77
  260. package/src/workspace-learning-policy.ts +21 -5
  261. package/src/workspace-membership-permissions.ts +9 -0
  262. package/dist/chunk-4SR4HKKA.js.map +0 -1
  263. package/dist/chunk-6ZYKCRFO.js.map +0 -1
  264. package/dist/chunk-NXAFLCQX.js +0 -2468
  265. package/dist/chunk-NXAFLCQX.js.map +0 -1
  266. package/dist/chunk-SK7YYHBI.js.map +0 -1
  267. package/dist/chunk-WD5ROSLL.js +0 -117
  268. package/dist/chunk-WD5ROSLL.js.map +0 -1
  269. package/dist/chunk-ZWREYEWA.js.map +0 -1
  270. /package/dist/{chunk-CUPM3FGB.js.map → chunk-2PRS4J5Q.js.map} +0 -0
  271. /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
+ $$;