thinkwork-cli 0.12.11 → 0.12.15

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 (474) hide show
  1. package/README.md +42 -38
  2. package/dist/{api-client-ASJWIG3Z.js → api-client-4VT3FWOH.js} +1 -1
  3. package/dist/{chunk-JEHV35EU.js → chunk-H7AB42ES.js} +340 -30
  4. package/dist/cli.js +22157 -9229
  5. package/dist/commands/enterprise/templates/deploy-repo/.github/workflows/deploy.yml +17 -6
  6. package/dist/commands/enterprise/templates/deploy-repo/docs/runbook.md +81 -9
  7. package/dist/commands/enterprise/templates/deploy-repo/scripts/apply-release.mjs +183 -21
  8. package/dist/commands/enterprise/templates/deploy-repo/scripts/smoke.mjs +1 -2
  9. package/dist/commands/enterprise/templates/deploy-repo/terraform/main.tf +286 -0
  10. package/dist/drizzle/0000_petite_marvel_apes.sql +1188 -0
  11. package/dist/drizzle/0001_milky_surge.sql +103 -0
  12. package/dist/drizzle/0002_aberrant_mattie_franklin.sql +41 -0
  13. package/dist/drizzle/0003_exotic_ogun.sql +3 -0
  14. package/dist/drizzle/0004_glamorous_magneto.sql +2 -0
  15. package/dist/drizzle/0005_ancient_nocturne.sql +2 -0
  16. package/dist/drizzle/0006_new_colonel_america.sql +2 -0
  17. package/dist/drizzle/0007_unique_external_task_id.sql +31 -0
  18. package/dist/drizzle/0008_external_task_id_column.sql +43 -0
  19. package/dist/drizzle/0009_evaluations.sql +64 -0
  20. package/dist/drizzle/0010_eval_agent_template.sql +2 -0
  21. package/dist/drizzle/0011_eval_run_template.sql +2 -0
  22. package/dist/drizzle/0012_eval_seed_unique.sql +16 -0
  23. package/dist/drizzle/0013_motionless_white_queen.sql +140 -0
  24. package/dist/drizzle/0014_wiki_aggregation.sql +11 -0
  25. package/dist/drizzle/0015_pg_trgm_alias_title_indexes.sql +9 -0
  26. package/dist/drizzle/0016_wiki_schema_drops.sql +24 -0
  27. package/dist/drizzle/0017_wiki_places.sql +46 -0
  28. package/dist/drizzle/0018_agent_workspace_overlay.sql +26 -0
  29. package/dist/drizzle/0018_cool_firebird.sql +24 -0
  30. package/dist/drizzle/0018_skill_runs.sql +84 -0
  31. package/dist/drizzle/0019_condemned_dragon_man.sql +95 -0
  32. package/dist/drizzle/0019_webhook_skill_runs.sql +58 -0
  33. package/dist/drizzle/0020_crazy_the_anarchist.sql +9 -0
  34. package/dist/drizzle/0020_mutation_idempotency.sql +64 -0
  35. package/dist/drizzle/0021_crm_work_links.sql +76 -0
  36. package/dist/drizzle/0021_skill_runs_completion_hmac.sql +33 -0
  37. package/dist/drizzle/0022_add_billing_tables.sql +70 -0
  38. package/dist/drizzle/0022_seed_thinkwork_admin_permissions.sql +160 -0
  39. package/dist/drizzle/0022_stripe_billing_indexes.sql +48 -0
  40. package/dist/drizzle/0023_tenants_deactivation.sql +27 -0
  41. package/dist/drizzle/0024_tenant_mcp_admin_keys.sql +63 -0
  42. package/dist/drizzle/0025_v1_agent_architecture.sql +182 -0
  43. package/dist/drizzle/0026_thread_turns_add_kind.sql +28 -0
  44. package/dist/drizzle/0027_capability_catalog_and_manifests.sql +219 -0
  45. package/dist/drizzle/0028_aws_s3_extension.sql +26 -0
  46. package/dist/drizzle/0029_collapse_execution_types.sql +42 -0
  47. package/dist/drizzle/0030_retire_composition_primitives.sql +48 -0
  48. package/dist/drizzle/0031_thread_cleanup_drops.sql +131 -0
  49. package/dist/drizzle/0032_add_browser_automation_template_config.sql +24 -0
  50. package/dist/drizzle/0033_agent_operation_leases.sql +32 -0
  51. package/dist/drizzle/0034_agent_workspace_events.sql +116 -0
  52. package/dist/drizzle/0035_workspace_review_decisions.sql +19 -0
  53. package/dist/drizzle/0036_user_scoped_memory_wiki.sql +152 -0
  54. package/dist/drizzle/0037_user_profile_operating_model.sql +34 -0
  55. package/dist/drizzle/0042_agent_runtime_selector.sql +41 -0
  56. package/dist/drizzle/0043_wiki_search_tsv_tokenization.sql +48 -0
  57. package/dist/drizzle/0044_add_web_search_template_config.sql +7 -0
  58. package/dist/drizzle/0045_add_send_email_template_config.sql +7 -0
  59. package/dist/drizzle/0046_tenant_mcp_context_tools.sql +26 -0
  60. package/dist/drizzle/0047_add_context_engine_template_config.sql +7 -0
  61. package/dist/drizzle/0048_tenant_context_provider_settings.sql +22 -0
  62. package/dist/drizzle/0050_brain_v0_entity_subtype.sql +29 -0
  63. package/dist/drizzle/0051_brain_v0_tenant_entity_pages.sql +170 -0
  64. package/dist/drizzle/0052_brain_v0_external_refs.sql +41 -0
  65. package/dist/drizzle/0053_brain_v0_unresolved_mentions_subtype.sql +48 -0
  66. package/dist/drizzle/0054_wiki_compile_jobs_input.sql +28 -0
  67. package/dist/drizzle/0055_routines_stepfunctions_substrate.sql +202 -0
  68. package/dist/drizzle/0056_routine_step_events_dedup_idx.sql +25 -0
  69. package/dist/drizzle/0057_archive_legacy_python_routines.sql +36 -0
  70. package/dist/drizzle/0058_routines_visibility_and_owning_agent.sql +61 -0
  71. package/dist/drizzle/0061_routine_execution_asl_version_id.sql +29 -0
  72. package/dist/drizzle/0062_migrate_pi_to_flue.sql +110 -0
  73. package/dist/drizzle/0063_threads_session_data.sql +23 -0
  74. package/dist/drizzle/0064_tenant_credentials.sql +65 -0
  75. package/dist/drizzle/0067_thinkwork_computers_phase_one.sql +174 -0
  76. package/dist/drizzle/0068_drop_system_workflows_and_activation.sql +115 -0
  77. package/dist/drizzle/0069_compliance_schema.sql +364 -0
  78. package/dist/drizzle/0070_compliance_aurora_roles.sql +171 -0
  79. package/dist/drizzle/0072_threads_computer_ownership.sql +24 -0
  80. package/dist/drizzle/0073_compliance_tenant_anchor_state.sql +105 -0
  81. package/dist/drizzle/0074_compliance_event_hash_index.sql +49 -0
  82. package/dist/drizzle/0075_scheduled_jobs_computer_ownership.sql +27 -0
  83. package/dist/drizzle/0076_scheduled_jobs_marco_backfill.sql +69 -0
  84. package/dist/drizzle/0077_computers_primary_agent_id.sql +38 -0
  85. package/dist/drizzle/0078_tenant_customize_catalog.sql +46 -0
  86. package/dist/drizzle/0079_seed_tenant_customize_catalog.sql +53 -0
  87. package/dist/drizzle/0081_routines_catalog_slug.sql +42 -0
  88. package/dist/drizzle/0082_messages_parts_jsonb.sql +52 -0
  89. package/dist/drizzle/0083_computer_runbooks.sql +103 -0
  90. package/dist/drizzle/0084_artifacts_favorited_at.sql +32 -0
  91. package/dist/drizzle/0085_seed_thinkwork_computer_default_template.sql +46 -0
  92. package/dist/drizzle/0086_update_default_template_models.sql +19 -0
  93. package/dist/drizzle/0087_retire_oss_connectors.sql +77 -0
  94. package/dist/drizzle/0088_compliance_event_types_finance_pilot.sql +37 -0
  95. package/dist/drizzle/0089_remove_maniflow_eval_seeds.sql +81 -0
  96. package/dist/drizzle/0089_wiki_schema_extraction.sql +315 -0
  97. package/dist/drizzle/0090_brain_schema_extraction.sql +274 -0
  98. package/dist/drizzle/0091_drop_wiki_brain_compat_views.sql +118 -0
  99. package/dist/drizzle/0092_finish_oss_connector_retirement.sql +97 -0
  100. package/dist/drizzle/0093_eval_runs_scheduled_job_id.sql +23 -0
  101. package/dist/drizzle/0094_slack_workspace_app.sql +140 -0
  102. package/dist/drizzle/0095_eval_runs_computer_id.sql +22 -0
  103. package/dist/drizzle/0096_true_redteam_eval_seed_cleanup.sql +67 -0
  104. package/dist/drizzle/0097_shared_computers.sql +191 -0
  105. package/dist/drizzle/0098_business_ontology.sql +587 -0
  106. package/dist/drizzle/0099_thread_idle_learning.sql +145 -0
  107. package/dist/drizzle/0100_ontology_gated_brain_dynamic_subtypes.sql +7 -0
  108. package/dist/drizzle/0101_ontology_gated_unresolved_mentions_dynamic_subtypes.sql +7 -0
  109. package/dist/drizzle/0102_wiki_brain_owner_repair.sql +87 -0
  110. package/dist/drizzle/0103_brain_section_source_trigger_repair.sql +75 -0
  111. package/dist/drizzle/0104_expand_seed_ontology_for_user_memory.sql +166 -0
  112. package/dist/drizzle/0105_spaces_domain.sql +349 -0
  113. package/dist/drizzle/0106_expand_seed_ontology_for_triples.sql +173 -0
  114. package/dist/drizzle/0106_space_threads_participants.sql +197 -0
  115. package/dist/drizzle/0107_linked_task_mirror.sql +245 -0
  116. package/dist/drizzle/0108_message_mentions.sql +95 -0
  117. package/dist/drizzle/0109_space_owned_threads.sql +217 -0
  118. package/dist/drizzle/0110_thread_participant_read_state.sql +21 -0
  119. package/dist/drizzle/0111_agents_tenant_name_unique.sql +38 -0
  120. package/dist/drizzle/0112_recast_spaces_as_contextual_workrooms.sql +138 -0
  121. package/dist/drizzle/0113_agents_own_runtime_fields.sql +48 -0
  122. package/dist/drizzle/0114_migrate_templates_to_agents_and_spaces.sql +361 -0
  123. package/dist/drizzle/0115_remove_computer_eval_template_dependencies.sql +69 -0
  124. package/dist/drizzle/0116_backfill_thread_participants_access.sql +126 -0
  125. package/dist/drizzle/0117_space_access_mode.sql +40 -0
  126. package/dist/drizzle/0118_normalize_tenant_member_principal_type.sql +41 -0
  127. package/dist/drizzle/0119_space_knowledge_bases.sql +126 -0
  128. package/dist/drizzle/0120_space_automations.sql +58 -0
  129. package/dist/drizzle/0121_drop_computer_runbooks.sql +26 -0
  130. package/dist/drizzle/0122_space_email_triggers.sql +24 -0
  131. package/dist/drizzle/0123_single_platform_agent_and_overrides.sql +58 -0
  132. package/dist/drizzle/0124_thread_turns_finalized_at.sql +17 -0
  133. package/dist/drizzle/0125_drop_space_agent_assignments.sql +42 -0
  134. package/dist/drizzle/0126_migrate_flue_to_pi.sql +42 -0
  135. package/dist/drizzle/0127_runtime_type_observability.sql +28 -0
  136. package/dist/drizzle/0128_drop_eval_test_cases_agent_id.sql +37 -0
  137. package/dist/drizzle/0129_drop_code_factory_tables.sql +43 -0
  138. package/dist/drizzle/0129_eval_results_system_prompt.sql +30 -0
  139. package/dist/drizzle/0130_drop_teams_and_team_id_columns.sql +54 -0
  140. package/dist/drizzle/0131_drop_skill_catalog_and_tenant_skills.sql +33 -0
  141. package/dist/drizzle/0132_drop_computer_tables.sql +31 -0
  142. package/dist/drizzle/0133_drop_seed_view_tombstones.sql +79 -0
  143. package/dist/drizzle/0133_thread_turns_system_prompt.sql +22 -0
  144. package/dist/drizzle/0134_drop_dead_agent_runtime_tables.sql +53 -0
  145. package/dist/drizzle/0135_native_checklist_linked_tasks.sql +48 -0
  146. package/dist/drizzle/0136_goal_ledger.sql +55 -0
  147. package/dist/drizzle/0136_space_email_trigger_status.sql +66 -0
  148. package/dist/drizzle/0137_thread_participant_pins.sql +25 -0
  149. package/dist/drizzle/0138_users_cognito_sub.sql +30 -0
  150. package/dist/drizzle/0139_mobile_turn_client_id.sql +23 -0
  151. package/dist/drizzle/0140_workspace_folder_names.sql +36 -0
  152. package/dist/drizzle/0141_eval_runs_desktop_pi_provenance.sql +31 -0
  153. package/dist/drizzle/0142_pi_only_agent_runtime.sql +61 -0
  154. package/dist/drizzle/0143_add_web_extract_builtin_config.sql +28 -0
  155. package/dist/drizzle/0144_skill_catalog_index.sql +40 -0
  156. package/dist/drizzle/0145_knowledge_graph_thread_ingest.sql +512 -0
  157. package/dist/drizzle/0146_knowledge_graph_source_scope.sql +413 -0
  158. package/dist/drizzle/0147_knowledge_graph_scope_trigger_qualification.sql +211 -0
  159. package/dist/drizzle/0148_user_cost_attribution.sql +171 -0
  160. package/dist/drizzle/0149_managed_mcp_servers.sql +64 -0
  161. package/dist/drizzle/0149_user_model_approvals.sql +89 -0
  162. package/dist/drizzle/0150_bootstrap_first_admin_claim.sql +11 -0
  163. package/dist/drizzle/0151_managed_deployments.sql +91 -0
  164. package/dist/drizzle/0152_agent_profiles.sql +81 -0
  165. package/dist/drizzle/0153_message_mentions_agent_profile.sql +9 -0
  166. package/dist/drizzle/0154_customer_deployment_sessions.sql +61 -0
  167. package/dist/drizzle/0155_tenant_model_catalog.sql +152 -0
  168. package/dist/drizzle/0156_bootstrap_credential_leases.sql +52 -0
  169. package/dist/drizzle/0157_knowledge_graph_observations_source.sql +79 -0
  170. package/dist/drizzle/0158_pending_user_questions.sql +80 -0
  171. package/dist/drizzle/0158_wiki_tenant_scope.sql +38 -0
  172. package/dist/drizzle/0159_agent_profiles_space_local.sql +49 -0
  173. package/dist/drizzle/0159_application_plugins.sql +193 -0
  174. package/dist/drizzle/0159_eval_scoring_version.sql +46 -0
  175. package/dist/drizzle/0160_compliance_event_types_plugins.sql +37 -0
  176. package/dist/drizzle/0160_eval_datasets.sql +75 -0
  177. package/dist/drizzle/0160_eval_results_thread_turn.sql +35 -0
  178. package/dist/drizzle/0161_eval_run_pinning.sql +54 -0
  179. package/dist/drizzle/0161_tenant_mcp_servers_plugin_source.sql +62 -0
  180. package/dist/drizzle/0162_eval_result_override.sql +49 -0
  181. package/dist/drizzle/0163_eval_replay_tool_allowlist.sql +50 -0
  182. package/dist/drizzle/0164_eval_replay_tool_override_mode.sql +52 -0
  183. package/dist/drizzle/0165_plugin_premium_entitlements.sql +153 -0
  184. package/dist/drizzle/0166_company_brain_substrate_contract.sql +386 -0
  185. package/dist/drizzle/0167_company_brain_artifact_manifest_runtime.sql +85 -0
  186. package/dist/drizzle/0168_eval_skill_gate.sql +44 -0
  187. package/dist/drizzle/0169_release_update_jobs.sql +67 -0
  188. package/dist/drizzle/0170_email_channel_plugin.sql +291 -0
  189. package/dist/drizzle/0171_linked_task_external_providers.sql +30 -0
  190. package/dist/drizzle/0172_email_channel_sendgrid_provider.sql +8 -0
  191. package/dist/drizzle/0173_auth_provider_resources.sql +83 -0
  192. package/dist/drizzle/0174_workos_auth_bridges.sql +37 -0
  193. package/dist/drizzle/0175_workos_auth_sessions.sql +38 -0
  194. package/dist/drizzle/0176_n8n_agent_step_runs.sql +107 -0
  195. package/dist/drizzle/0177_workflow_control_plane.sql +281 -0
  196. package/dist/drizzle/0178_workflow_backfill_existing_routines.sql +525 -0
  197. package/dist/drizzle/0179_tenant_goal_budget_settings.sql +21 -0
  198. package/dist/drizzle/0180_skill_drafts.sql +89 -0
  199. package/dist/drizzle/0181_skill_draft_publish_status.sql +21 -0
  200. package/dist/drizzle/0182_agent_loops.sql +260 -0
  201. package/dist/drizzle/0183_okf_artifact_manifests.sql +52 -0
  202. package/dist/drizzle/0184_skill_catalog_trust_cache.sql +35 -0
  203. package/dist/drizzle/0185_agent_loop_space.sql +16 -0
  204. package/dist/drizzle/0186_tenant_mcp_runtime_metadata.sql +10 -0
  205. package/dist/drizzle/0187_native_work_items.sql +220 -0
  206. package/dist/drizzle/0188_company_etl_plugin_rename.sql +99 -0
  207. package/dist/drizzle/0189_trace_cost_substrate.sql +247 -0
  208. package/dist/drizzle/0190_billing_export_reconciliation.sql +101 -0
  209. package/dist/drizzle/0191_open_engine_work_item_queue.sql +66 -0
  210. package/dist/drizzle/0192_work_item_labels.sql +44 -0
  211. package/dist/drizzle/0193_work_item_documents.sql +31 -0
  212. package/dist/drizzle/0194_memory_retain_attempts.sql +103 -0
  213. package/dist/drizzle/0194_work_item_comments.sql +35 -0
  214. package/dist/drizzle/0195_plugin_app_overlays.sql +45 -0
  215. package/dist/drizzle/0196_pi_extensions.sql +118 -0
  216. package/dist/drizzle/0197_eval_profiles.sql +150 -0
  217. package/dist/drizzle/0198_eval_runs_unstable.sql +27 -0
  218. package/dist/drizzle/0199_eval_runs_cost_partial.sql +27 -0
  219. package/dist/drizzle/meta/_journal.json +160 -0
  220. package/dist/plugins/README.md +162 -0
  221. package/dist/plugins/catalog/package.json +40 -0
  222. package/dist/plugins/catalog/scripts/build-catalog.ts +120 -0
  223. package/dist/plugins/catalog/scripts/generate-plugin-registry.ts +144 -0
  224. package/dist/plugins/catalog/src/__tests__/build-catalog.test.ts +86 -0
  225. package/dist/plugins/catalog/src/__tests__/catalog.test.ts +308 -0
  226. package/dist/plugins/catalog/src/__tests__/contracts.test.ts +861 -0
  227. package/dist/plugins/catalog/src/__tests__/plugin-package.test.ts +124 -0
  228. package/dist/plugins/catalog/src/__tests__/plugin-registry.test.ts +120 -0
  229. package/dist/plugins/catalog/src/catalog.ts +434 -0
  230. package/dist/plugins/catalog/src/contracts.ts +1498 -0
  231. package/dist/plugins/catalog/src/index.ts +4 -0
  232. package/dist/plugins/catalog/src/plugin-package.ts +171 -0
  233. package/dist/plugins/catalog/src/registry/generated-first-party.ts +76 -0
  234. package/dist/plugins/catalog/src/registry/index.ts +1 -0
  235. package/dist/plugins/catalog/tsconfig.json +8 -0
  236. package/dist/plugins/company-brain/README.md +37 -0
  237. package/dist/plugins/company-brain/package.json +33 -0
  238. package/dist/plugins/company-brain/runtime/cognee/Dockerfile +11 -0
  239. package/dist/plugins/company-brain/smoke/cognee-managed-app-smoke.mjs +458 -0
  240. package/dist/plugins/company-brain/smoke/cognee-memory-cutover-smoke.mjs +539 -0
  241. package/dist/plugins/company-brain/smoke/company-brain-context-engine-smoke.mjs +312 -0
  242. package/dist/plugins/company-brain/smoke/company-brain-operations-smoke.mjs +449 -0
  243. package/dist/plugins/company-brain/smoke/company-brain-plugin-smoke.mjs +655 -0
  244. package/dist/plugins/company-brain/smoke/hindsight-memory-isolation-smoke.mjs +474 -0
  245. package/dist/plugins/company-brain/src/api/cognee-client.ts +896 -0
  246. package/dist/plugins/company-brain/src/api/cognee-cluster-identity.ts +49 -0
  247. package/dist/plugins/company-brain/src/api/cognee-memory-scope.ts +84 -0
  248. package/dist/plugins/company-brain/src/api/context-engine-provider.ts +888 -0
  249. package/dist/plugins/company-brain/src/api/migration.ts +665 -0
  250. package/dist/plugins/company-brain/src/deployment/cognee-managed-app.ts +396 -0
  251. package/dist/plugins/company-brain/src/index.ts +62 -0
  252. package/dist/plugins/company-brain/src/manifest.ts +112 -0
  253. package/dist/plugins/company-brain/terraform/cognee/README.md +263 -0
  254. package/dist/plugins/company-brain/terraform/cognee/main.tf +766 -0
  255. package/dist/plugins/company-brain/terraform/cognee/outputs.tf +144 -0
  256. package/dist/plugins/company-brain/terraform/cognee/variables.tf +402 -0
  257. package/dist/plugins/company-brain/test/api/cognee-client.test.ts +562 -0
  258. package/dist/plugins/company-brain/test/api/cognee-memory-scope.test.ts +74 -0
  259. package/dist/plugins/company-brain/test/api/context-engine-provider.test.ts +447 -0
  260. package/dist/plugins/company-brain/test/api/migration.test.ts +465 -0
  261. package/dist/plugins/company-brain/test/manifest.test.ts +95 -0
  262. package/dist/plugins/company-brain/tsconfig.json +8 -0
  263. package/dist/plugins/company-data/README.md +49 -0
  264. package/dist/plugins/company-data/package.json +21 -0
  265. package/dist/plugins/company-data/src/index.ts +30 -0
  266. package/dist/plugins/company-data/src/manifest.ts +26 -0
  267. package/dist/plugins/company-data/test/manifest.test.ts +116 -0
  268. package/dist/plugins/company-data/tsconfig.json +8 -0
  269. package/dist/plugins/company-etl/README.md +46 -0
  270. package/dist/plugins/company-etl/package.json +21 -0
  271. package/dist/plugins/company-etl/src/index.ts +29 -0
  272. package/dist/plugins/company-etl/src/manifest.ts +26 -0
  273. package/dist/plugins/company-etl/test/manifest.test.ts +108 -0
  274. package/dist/plugins/company-etl/tsconfig.json +8 -0
  275. package/dist/plugins/email-channel/README.md +41 -0
  276. package/dist/plugins/email-channel/package.json +22 -0
  277. package/dist/plugins/email-channel/src/index.ts +36 -0
  278. package/dist/plugins/email-channel/src/manifest.ts +44 -0
  279. package/dist/plugins/email-channel/src/provider-contract.ts +36 -0
  280. package/dist/plugins/email-channel/test/manifest.test.ts +119 -0
  281. package/dist/plugins/email-channel/tsconfig.json +8 -0
  282. package/dist/plugins/lastmile/README.md +50 -0
  283. package/dist/plugins/lastmile/package.json +23 -0
  284. package/dist/plugins/lastmile/smoke/lastmile-plugin-smoke.mjs +661 -0
  285. package/dist/plugins/lastmile/src/api/tasks-adapter.ts +572 -0
  286. package/dist/plugins/lastmile/src/discovery.fixture.ts +64 -0
  287. package/dist/plugins/lastmile/src/index.ts +46 -0
  288. package/dist/plugins/lastmile/src/manifest.ts +139 -0
  289. package/dist/plugins/lastmile/test/api/tasks-adapter.test.ts +266 -0
  290. package/dist/plugins/lastmile/test/discovery.test.ts +88 -0
  291. package/dist/plugins/lastmile/tsconfig.json +8 -0
  292. package/dist/plugins/n8n/README.md +201 -0
  293. package/dist/plugins/n8n/n8n-app/README.md +33 -0
  294. package/dist/plugins/n8n/n8n-app/package.json +23 -0
  295. package/dist/plugins/n8n/n8n-app/src/application-config.ts +45 -0
  296. package/dist/plugins/n8n/n8n-app/src/front-components/thinkwork-workflows.front-component.tsx +970 -0
  297. package/dist/plugins/n8n/n8n-app/src/lib/n8n-app-data.ts +190 -0
  298. package/dist/plugins/n8n/n8n-app/src/vite-env.d.ts +7 -0
  299. package/dist/plugins/n8n/n8n-app/tsconfig.json +15 -0
  300. package/dist/plugins/n8n/package.json +35 -0
  301. package/dist/plugins/n8n/runtime/Dockerfile +18 -0
  302. package/dist/plugins/n8n/runtime/n8n-task-runners.json +14 -0
  303. package/dist/plugins/n8n/runtime/n8n-task-runners.json.template +14 -0
  304. package/dist/plugins/n8n/runtime/package-lock.json +13 -0
  305. package/dist/plugins/n8n/runtime/package.json +7 -0
  306. package/dist/plugins/n8n/scripts/sync-thinkwork-app.mjs +268 -0
  307. package/dist/plugins/n8n/smoke/README.md +95 -0
  308. package/dist/plugins/n8n/smoke/n8n-agent-step-bridge-smoke.mjs +866 -0
  309. package/dist/plugins/n8n/smoke/n8n-integrated-app-smoke.mjs +262 -0
  310. package/dist/plugins/n8n/smoke/n8n-managed-app-smoke.mjs +409 -0
  311. package/dist/plugins/n8n/smoke/n8n-mcp-smoke.mjs +624 -0
  312. package/dist/plugins/n8n/src/deployment/image-build.ts +172 -0
  313. package/dist/plugins/n8n/src/deployment/managed-app.ts +429 -0
  314. package/dist/plugins/n8n/src/index.ts +79 -0
  315. package/dist/plugins/n8n/src/manifest.ts +403 -0
  316. package/dist/plugins/n8n/src/package-config.ts +186 -0
  317. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/SKILL.md +76 -0
  318. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/mcp-tooling.md +40 -0
  319. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/validation-and-handoff.md +40 -0
  320. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/workflow-authoring.md +45 -0
  321. package/dist/plugins/n8n/terraform/n8n/README.md +113 -0
  322. package/dist/plugins/n8n/terraform/n8n/main.tf +918 -0
  323. package/dist/plugins/n8n/terraform/n8n/outputs.tf +124 -0
  324. package/dist/plugins/n8n/terraform/n8n/scripts/sync-database.py +250 -0
  325. package/dist/plugins/n8n/terraform/n8n/scripts/test_sync_database.py +55 -0
  326. package/dist/plugins/n8n/terraform/n8n/variables.tf +354 -0
  327. package/dist/plugins/n8n/test/image-build.test.ts +118 -0
  328. package/dist/plugins/n8n/test/integrated-app-contract.test.ts +353 -0
  329. package/dist/plugins/n8n/test/manifest.test.ts +278 -0
  330. package/dist/plugins/n8n/test/package-config.test.ts +57 -0
  331. package/dist/plugins/n8n/tsconfig.json +8 -0
  332. package/dist/plugins/sendgrid/README.md +30 -0
  333. package/dist/plugins/sendgrid/package.json +22 -0
  334. package/dist/plugins/sendgrid/src/index.ts +36 -0
  335. package/dist/plugins/sendgrid/src/manifest.ts +37 -0
  336. package/dist/plugins/sendgrid/src/provider-contract.ts +14 -0
  337. package/dist/plugins/sendgrid/test/manifest.test.ts +80 -0
  338. package/dist/plugins/sendgrid/tsconfig.json +8 -0
  339. package/dist/plugins/twenty/README.md +78 -0
  340. package/dist/plugins/twenty/package.json +27 -0
  341. package/dist/plugins/twenty/scripts/__tests__/sync-thinkwork-app.test.mjs +67 -0
  342. package/dist/plugins/twenty/scripts/sync-thinkwork-app.mjs +185 -0
  343. package/dist/plugins/twenty/scripts/wire-thinkwork-workflow.mjs +658 -0
  344. package/dist/plugins/twenty/smoke/twenty-managed-app-smoke.mjs +359 -0
  345. package/dist/plugins/twenty/smoke/twenty-mcp-oauth-smoke.mjs +574 -0
  346. package/dist/plugins/twenty/src/api/cutover.ts +209 -0
  347. package/dist/plugins/twenty/src/deployment/managed-app.ts +253 -0
  348. package/dist/plugins/twenty/src/index.ts +55 -0
  349. package/dist/plugins/twenty/src/manifest.ts +259 -0
  350. package/dist/plugins/twenty/terraform/twenty/README.md +97 -0
  351. package/dist/plugins/twenty/terraform/twenty/main.tf +829 -0
  352. package/dist/plugins/twenty/terraform/twenty/outputs.tf +79 -0
  353. package/dist/plugins/twenty/terraform/twenty/variables.tf +268 -0
  354. package/dist/plugins/twenty/test/api/cutover.test.ts +183 -0
  355. package/dist/plugins/twenty/test/manifest.test.ts +463 -0
  356. package/dist/plugins/twenty/tsconfig.json +9 -0
  357. package/dist/plugins/twenty/twenty-app/.nvmrc +1 -0
  358. package/dist/plugins/twenty/twenty-app/README.md +148 -0
  359. package/dist/plugins/twenty/twenty-app/package.json +30 -0
  360. package/dist/plugins/twenty/twenty-app/src/application-config.ts +44 -0
  361. package/dist/plugins/twenty/twenty-app/src/constants/universal-identifiers.ts +18 -0
  362. package/dist/plugins/twenty/twenty-app/src/default-role.ts +24 -0
  363. package/dist/plugins/twenty/twenty-app/src/front-components/thinkwork-settings.front-component.tsx +299 -0
  364. package/dist/plugins/twenty/twenty-app/src/logic-functions/thinkwork-webhook.logic-function.ts +354 -0
  365. package/dist/plugins/twenty/twenty-app/tsconfig.json +14 -0
  366. package/dist/plugins/twenty/twenty-app/yarn.lock +4144 -0
  367. package/dist/plugins/workos-auth/package.json +22 -0
  368. package/dist/plugins/workos-auth/src/index.ts +30 -0
  369. package/dist/plugins/workos-auth/src/manifest.ts +40 -0
  370. package/dist/plugins/workos-auth/src/provider-contract.ts +39 -0
  371. package/dist/plugins/workos-auth/test/manifest.test.ts +94 -0
  372. package/dist/plugins/workos-auth/tsconfig.json +8 -0
  373. package/dist/scripts/bootstrap-workspace.sh +162 -0
  374. package/dist/scripts/post-deploy.sh +290 -0
  375. package/dist/terraform/examples/greenfield/main.tf +903 -75
  376. package/dist/terraform/examples/greenfield/terraform.tfvars.example +67 -8
  377. package/dist/terraform/modules/app/agentcore-code-interpreter/Dockerfile.sandbox-base +2 -2
  378. package/dist/terraform/modules/app/agentcore-code-interpreter/README.md +8 -9
  379. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/sitecustomize.py +227 -0
  380. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/test_sitecustomize.py +277 -0
  381. package/dist/terraform/modules/app/agentcore-memory/README.md +6 -6
  382. package/dist/terraform/modules/app/agentcore-memory/main.tf +1 -1
  383. package/dist/terraform/modules/app/agentcore-memory/scripts/create_or_find_memory.sh +40 -9
  384. package/dist/terraform/modules/app/agentcore-pi/README.md +61 -0
  385. package/dist/terraform/modules/app/agentcore-pi/main.tf +453 -0
  386. package/dist/terraform/modules/app/agentcore-pi/outputs.tf +38 -0
  387. package/dist/terraform/modules/app/agentcore-pi/variables.tf +145 -0
  388. package/dist/terraform/modules/app/agentcore-platform/main.tf +83 -0
  389. package/dist/terraform/modules/app/agentcore-runtime/main.tf +9 -11
  390. package/dist/terraform/modules/app/appsync-subscriptions/main.tf +5 -1
  391. package/dist/terraform/modules/app/customer-domain/main.tf +483 -0
  392. package/dist/terraform/modules/app/deployment-control-plane/README.md +47 -0
  393. package/dist/terraform/modules/app/deployment-control-plane/buildspec.yml +24 -0
  394. package/dist/terraform/modules/app/deployment-control-plane/main.tf +614 -0
  395. package/dist/terraform/modules/app/deployment-control-plane/outputs.tf +54 -0
  396. package/dist/terraform/modules/app/deployment-control-plane/runner.py +4720 -0
  397. package/dist/terraform/modules/app/deployment-control-plane/test_runner_bundle.py +3026 -0
  398. package/dist/terraform/modules/app/deployment-control-plane/variables.tf +96 -0
  399. package/dist/terraform/modules/app/hindsight-memory/README.md +25 -23
  400. package/dist/terraform/modules/app/hindsight-memory/main.tf +26 -2
  401. package/dist/terraform/modules/app/lambda-api/eval-fanout.tf +17 -50
  402. package/dist/terraform/modules/app/lambda-api/handlers.tf +1290 -679
  403. package/dist/terraform/modules/app/lambda-api/iam-grouped.tf +933 -0
  404. package/dist/terraform/modules/app/lambda-api/main.tf +14 -527
  405. package/dist/terraform/modules/app/lambda-api/mcp-oauth.tf +3 -19
  406. package/dist/terraform/modules/app/lambda-api/outputs.tf +50 -6
  407. package/dist/terraform/modules/app/lambda-api/runtime-config.tf +163 -0
  408. package/dist/terraform/modules/app/lambda-api/slack-app-secrets.tf +3 -1
  409. package/dist/terraform/modules/app/lambda-api/stripe-secrets.tf +3 -1
  410. package/dist/terraform/modules/app/lambda-api/variables.tf +240 -53
  411. package/dist/terraform/modules/app/lambda-api/workspace-events.tf +2 -25
  412. package/dist/terraform/modules/app/ses-email/main.tf +143 -30
  413. package/dist/terraform/modules/app/static-site/main.tf +4 -3
  414. package/dist/terraform/modules/app/www-dns/main.tf +45 -5
  415. package/dist/terraform/modules/app/www-dns/outputs.tf +10 -0
  416. package/dist/terraform/modules/app/www-dns/variables.tf +24 -0
  417. package/dist/terraform/modules/data/aurora-postgres/main.tf +15 -1
  418. package/dist/terraform/modules/data/compliance-exports-bucket/main.tf +1 -1
  419. package/dist/terraform/modules/data/compliance-exports-bucket/variables.tf +6 -0
  420. package/dist/terraform/modules/foundation/cognito/main.tf +167 -11
  421. package/dist/terraform/modules/foundation/cognito/outputs.tf +5 -0
  422. package/dist/terraform/modules/foundation/cognito/variables.tf +110 -0
  423. package/dist/terraform/modules/foundation/vpc/main.tf +45 -3
  424. package/dist/terraform/modules/foundation/vpc/outputs.tf +20 -0
  425. package/dist/terraform/modules/foundation/vpc/variables.tf +18 -0
  426. package/dist/terraform/modules/thinkwork/README.md +71 -0
  427. package/dist/terraform/modules/thinkwork/main.tf +1325 -174
  428. package/dist/terraform/modules/thinkwork/outputs.tf +457 -24
  429. package/dist/terraform/modules/thinkwork/variables.tf +1169 -93
  430. package/dist/terraform/schema.graphql +82 -9
  431. package/dist/workspace-defaults/files/AGENTS.md +344 -0
  432. package/dist/workspace-defaults/files/CONTEXT.md +8 -0
  433. package/dist/workspace-defaults/files/GUARDRAILS.md +51 -0
  434. package/dist/workspace-defaults/files/MEMORY_GUIDE.md +65 -0
  435. package/dist/workspace-defaults/files/ROUTER.md +24 -0
  436. package/dist/workspace-defaults/files/SPACE.md +62 -0
  437. package/dist/workspace-defaults/files/TOOLS.md +65 -0
  438. package/dist/workspace-defaults/files/USER.md +40 -0
  439. package/dist/workspace-defaults/files/mcp.json +3 -0
  440. package/dist/workspace-defaults/files/memory/contacts.md +13 -0
  441. package/dist/workspace-defaults/files/memory/lessons.md +13 -0
  442. package/dist/workspace-defaults/files/memory/preferences.md +12 -0
  443. package/dist/workspace-defaults/files/skills/.gitkeep +1 -0
  444. package/dist/workspace-defaults/files/skills/artifact-builder/SKILL.md +79 -0
  445. package/dist/workspace-defaults/files/skills/artifact-builder/references/crm-dashboard.md +166 -0
  446. package/dist/workspace-defaults/files/skills/automation-loop-designer/SKILL.md +120 -0
  447. package/dist/workspace-defaults/files/skills/skill-creator/LICENSE.txt +202 -0
  448. package/dist/workspace-defaults/files/skills/skill-creator/SKILL.md +485 -0
  449. package/dist/workspace-defaults/files/skills/skill-creator/UPSTREAM.json +124 -0
  450. package/dist/workspace-defaults/files/skills/skill-creator/agents/analyzer.md +274 -0
  451. package/dist/workspace-defaults/files/skills/skill-creator/agents/comparator.md +202 -0
  452. package/dist/workspace-defaults/files/skills/skill-creator/agents/grader.md +223 -0
  453. package/dist/workspace-defaults/files/skills/skill-creator/assets/eval_review.html +146 -0
  454. package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  455. package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  456. package/dist/workspace-defaults/files/skills/skill-creator/references/schemas.md +430 -0
  457. package/dist/workspace-defaults/files/skills/skill-creator/scripts/__init__.py +0 -0
  458. package/dist/workspace-defaults/files/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  459. package/dist/workspace-defaults/files/skills/skill-creator/scripts/generate_report.py +326 -0
  460. package/dist/workspace-defaults/files/skills/skill-creator/scripts/improve_description.py +247 -0
  461. package/dist/workspace-defaults/files/skills/skill-creator/scripts/package_skill.py +136 -0
  462. package/dist/workspace-defaults/files/skills/skill-creator/scripts/quick_validate.py +103 -0
  463. package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_eval.py +310 -0
  464. package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_loop.py +328 -0
  465. package/dist/workspace-defaults/files/skills/skill-creator/scripts/utils.py +47 -0
  466. package/package.json +1 -1
  467. package/dist/terraform/modules/app/agentcore-flue/README.md +0 -58
  468. package/dist/terraform/modules/app/agentcore-flue/main.tf +0 -323
  469. package/dist/terraform/modules/app/agentcore-flue/outputs.tf +0 -23
  470. package/dist/terraform/modules/app/agentcore-flue/variables.tf +0 -97
  471. package/dist/terraform/modules/app/computer-runtime/README.md +0 -15
  472. package/dist/terraform/modules/app/computer-runtime/main.tf +0 -406
  473. package/dist/terraform/modules/app/computer-runtime/outputs.tf +0 -75
  474. package/dist/terraform/modules/app/computer-runtime/variables.tf +0 -66
@@ -0,0 +1,386 @@
1
+ -- Purpose: add the Company Brain substrate contract tables used to report
2
+ -- storage tier, backend posture, migration state, operational counters, and
3
+ -- replayable artifact manifests.
4
+ -- Plan: docs/plans/2026-06-13-003-feat-company-brain-physical-substrate-plan.md U1
5
+ -- Apply manually (no CI migration runner):
6
+ -- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0166_company_brain_substrate_contract.sql
7
+ -- Pre-flight:
8
+ -- SELECT to_regclass('brain.substrate_states');
9
+ -- SELECT to_regclass('public.managed_applications');
10
+ -- SELECT to_regclass('public.managed_application_deployment_jobs');
11
+ -- creates: brain.substrate_states
12
+ -- creates: brain.substrate_migrations
13
+ -- creates: brain.substrate_events
14
+ -- creates: brain.artifact_manifests
15
+ -- creates: brain.brain_substrate_states_tenant_uidx
16
+ -- creates: brain.brain_substrate_states_tenant_status_idx
17
+ -- creates: brain.brain_substrate_states_managed_app_idx
18
+ -- creates: brain.brain_substrate_states_latest_job_idx
19
+ -- creates: brain.brain_substrate_states_storage_tier_idx
20
+ -- creates: brain.brain_substrate_migrations_tenant_status_idx
21
+ -- creates: brain.brain_substrate_migrations_tenant_phase_idx
22
+ -- creates: brain.brain_substrate_migrations_substrate_created_idx
23
+ -- creates: brain.brain_substrate_migrations_job_idx
24
+ -- creates: brain.brain_substrate_events_tenant_created_idx
25
+ -- creates: brain.brain_substrate_events_substrate_created_idx
26
+ -- creates: brain.brain_substrate_events_migration_idx
27
+ -- creates: brain.brain_substrate_events_deployment_job_idx
28
+ -- creates: brain.brain_artifact_manifests_manifest_uri_uidx
29
+ -- creates: brain.brain_artifact_manifests_tenant_kind_idx
30
+ -- creates: brain.brain_artifact_manifests_substrate_kind_idx
31
+ -- creates: brain.brain_artifact_manifests_migration_idx
32
+ -- creates: brain.brain_artifact_manifests_source_idx
33
+ -- creates-constraint: brain.substrate_states.substrate_states_pkey
34
+ -- creates-constraint: brain.substrate_states.substrate_states_tenant_id_tenants_id_fk
35
+ -- creates-constraint: brain.substrate_states.substrate_states_managed_application_id_fk
36
+ -- creates-constraint: brain.substrate_states.substrate_states_latest_deployment_job_id_fk
37
+ -- creates-constraint: brain.substrate_states.brain_substrate_states_tier_allowed
38
+ -- creates-constraint: brain.substrate_states.brain_substrate_states_backend_allowed
39
+ -- creates-constraint: brain.substrate_states.brain_substrate_states_status_allowed
40
+ -- creates-constraint: brain.substrate_states.brain_substrate_states_health_allowed
41
+ -- creates-constraint: brain.substrate_states.brain_substrate_states_vector_positive
42
+ -- creates-constraint: brain.substrate_states.brain_substrate_states_queue_nonneg
43
+ -- creates-constraint: brain.substrate_states.brain_substrate_states_failed_nonneg
44
+ -- creates-constraint: brain.substrate_states.brain_substrate_states_entity_nonneg
45
+ -- creates-constraint: brain.substrate_states.brain_substrate_states_edge_nonneg
46
+ -- creates-constraint: brain.substrate_states.brain_substrate_states_artifact_nonneg
47
+ -- creates-constraint: brain.substrate_states.brain_substrate_states_projection_nonneg
48
+ -- creates-constraint: brain.substrate_migrations.substrate_migrations_pkey
49
+ -- creates-constraint: brain.substrate_migrations.substrate_migrations_tenant_id_tenants_id_fk
50
+ -- creates-constraint: brain.substrate_migrations.substrate_migrations_substrate_id_fk
51
+ -- creates-constraint: brain.substrate_migrations.substrate_migrations_requested_by_user_id_fk
52
+ -- creates-constraint: brain.substrate_migrations.substrate_migrations_deployment_job_id_fk
53
+ -- creates-constraint: brain.substrate_migrations.brain_substrate_migrations_from_tier_allowed
54
+ -- creates-constraint: brain.substrate_migrations.brain_substrate_migrations_to_tier_allowed
55
+ -- creates-constraint: brain.substrate_migrations.brain_substrate_migrations_phase_allowed
56
+ -- creates-constraint: brain.substrate_migrations.brain_substrate_migrations_status_allowed
57
+ -- creates-constraint: brain.substrate_migrations.brain_substrate_migrations_vector_positive
58
+ -- creates-constraint: brain.substrate_events.substrate_events_pkey
59
+ -- creates-constraint: brain.substrate_events.substrate_events_tenant_id_tenants_id_fk
60
+ -- creates-constraint: brain.substrate_events.substrate_events_substrate_id_fk
61
+ -- creates-constraint: brain.substrate_events.substrate_events_migration_id_fk
62
+ -- creates-constraint: brain.substrate_events.substrate_events_deployment_job_id_fk
63
+ -- creates-constraint: brain.artifact_manifests.artifact_manifests_pkey
64
+ -- creates-constraint: brain.artifact_manifests.artifact_manifests_tenant_id_tenants_id_fk
65
+ -- creates-constraint: brain.artifact_manifests.artifact_manifests_substrate_id_fk
66
+ -- creates-constraint: brain.artifact_manifests.artifact_manifests_migration_id_fk
67
+ -- creates-constraint: brain.artifact_manifests.brain_artifact_manifests_kind_allowed
68
+ -- creates-constraint: brain.artifact_manifests.brain_artifact_manifests_tier_allowed
69
+ -- creates-constraint: brain.artifact_manifests.brain_artifact_manifests_status_allowed
70
+ -- creates-constraint: brain.artifact_manifests.brain_artifact_manifests_object_nonneg
71
+ -- creates-constraint: brain.artifact_manifests.brain_artifact_manifests_source_nonneg
72
+ -- creates-constraint: brain.artifact_manifests.brain_artifact_manifests_vector_positive
73
+
74
+ \set ON_ERROR_STOP on
75
+
76
+ SET lock_timeout = '5s';
77
+ SET statement_timeout = '15min';
78
+
79
+ SELECT pg_advisory_lock(hashtext('migration:0166_company_brain_substrate_contract'));
80
+
81
+ CREATE SCHEMA IF NOT EXISTS brain;
82
+
83
+ -- ---------------------------------------------------------------------------
84
+ -- brain.substrate_states — per-tenant Company Brain substrate posture
85
+ -- ---------------------------------------------------------------------------
86
+
87
+ CREATE TABLE IF NOT EXISTS brain.substrate_states (
88
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
89
+ tenant_id uuid NOT NULL,
90
+ managed_application_id uuid,
91
+ latest_deployment_job_id uuid,
92
+ storage_tier text NOT NULL DEFAULT 'default',
93
+ active_backend text NOT NULL DEFAULT 'none',
94
+ status text NOT NULL DEFAULT 'not_installed',
95
+ health_status text NOT NULL DEFAULT 'unknown',
96
+ backend_mode text,
97
+ graph_provider text,
98
+ vector_provider text,
99
+ embedding_model text,
100
+ vector_dimension integer,
101
+ cognee_version text,
102
+ cognee_endpoint text,
103
+ s3_artifact_root text,
104
+ s3_manifest_root text,
105
+ s3_vault_projection_root text,
106
+ neptune_graph_id text,
107
+ neptune_endpoint text,
108
+ efs_file_system_id text,
109
+ production_posture text,
110
+ latest_ingest_at timestamptz,
111
+ latest_projection_at timestamptz,
112
+ ingestion_queue_depth integer NOT NULL DEFAULT 0,
113
+ failed_ingest_count integer NOT NULL DEFAULT 0,
114
+ graph_entity_count integer,
115
+ graph_edge_count integer,
116
+ source_artifact_count integer,
117
+ vault_projection_count integer,
118
+ ontology_version text,
119
+ launch_capabilities jsonb NOT NULL DEFAULT '{}'::jsonb,
120
+ optional_capabilities jsonb NOT NULL DEFAULT '{}'::jsonb,
121
+ operator_evidence jsonb NOT NULL DEFAULT '{}'::jsonb,
122
+ last_failure_message text,
123
+ last_failure_at timestamptz,
124
+ created_at timestamptz NOT NULL DEFAULT now(),
125
+ updated_at timestamptz NOT NULL DEFAULT now(),
126
+ CONSTRAINT substrate_states_tenant_id_tenants_id_fk
127
+ FOREIGN KEY (tenant_id)
128
+ REFERENCES public.tenants(id)
129
+ ON DELETE CASCADE,
130
+ CONSTRAINT substrate_states_managed_application_id_fk
131
+ FOREIGN KEY (managed_application_id)
132
+ REFERENCES public.managed_applications(id)
133
+ ON DELETE SET NULL,
134
+ CONSTRAINT substrate_states_latest_deployment_job_id_fk
135
+ FOREIGN KEY (latest_deployment_job_id)
136
+ REFERENCES public.managed_application_deployment_jobs(id)
137
+ ON DELETE SET NULL,
138
+ CONSTRAINT brain_substrate_states_tier_allowed
139
+ CHECK (storage_tier IN ('default', 'production')),
140
+ CONSTRAINT brain_substrate_states_backend_allowed
141
+ CHECK (active_backend IN ('none', 'default', 'production', 'legacy_cognee')),
142
+ CONSTRAINT brain_substrate_states_status_allowed
143
+ CHECK (status IN (
144
+ 'not_installed',
145
+ 'provisioning',
146
+ 'ready',
147
+ 'degraded',
148
+ 'failed',
149
+ 'migrating',
150
+ 'disabled'
151
+ )),
152
+ CONSTRAINT brain_substrate_states_health_allowed
153
+ CHECK (health_status IN ('unknown', 'healthy', 'degraded', 'failed', 'disabled')),
154
+ CONSTRAINT brain_substrate_states_vector_positive
155
+ CHECK (vector_dimension IS NULL OR vector_dimension > 0),
156
+ CONSTRAINT brain_substrate_states_queue_nonneg
157
+ CHECK (ingestion_queue_depth >= 0),
158
+ CONSTRAINT brain_substrate_states_failed_nonneg
159
+ CHECK (failed_ingest_count >= 0),
160
+ CONSTRAINT brain_substrate_states_entity_nonneg
161
+ CHECK (graph_entity_count IS NULL OR graph_entity_count >= 0),
162
+ CONSTRAINT brain_substrate_states_edge_nonneg
163
+ CHECK (graph_edge_count IS NULL OR graph_edge_count >= 0),
164
+ CONSTRAINT brain_substrate_states_artifact_nonneg
165
+ CHECK (source_artifact_count IS NULL OR source_artifact_count >= 0),
166
+ CONSTRAINT brain_substrate_states_projection_nonneg
167
+ CHECK (vault_projection_count IS NULL OR vault_projection_count >= 0)
168
+ );
169
+
170
+ CREATE UNIQUE INDEX IF NOT EXISTS brain_substrate_states_tenant_uidx
171
+ ON brain.substrate_states (tenant_id);
172
+
173
+ CREATE INDEX IF NOT EXISTS brain_substrate_states_tenant_status_idx
174
+ ON brain.substrate_states (tenant_id, status);
175
+
176
+ CREATE INDEX IF NOT EXISTS brain_substrate_states_managed_app_idx
177
+ ON brain.substrate_states (managed_application_id);
178
+
179
+ CREATE INDEX IF NOT EXISTS brain_substrate_states_latest_job_idx
180
+ ON brain.substrate_states (latest_deployment_job_id);
181
+
182
+ CREATE INDEX IF NOT EXISTS brain_substrate_states_storage_tier_idx
183
+ ON brain.substrate_states (storage_tier);
184
+
185
+ -- ---------------------------------------------------------------------------
186
+ -- brain.substrate_migrations — storage-tier migration/cutover state
187
+ -- ---------------------------------------------------------------------------
188
+
189
+ CREATE TABLE IF NOT EXISTS brain.substrate_migrations (
190
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
191
+ tenant_id uuid NOT NULL,
192
+ substrate_id uuid,
193
+ from_storage_tier text NOT NULL DEFAULT 'default',
194
+ to_storage_tier text NOT NULL DEFAULT 'production',
195
+ phase text NOT NULL DEFAULT 'none',
196
+ status text NOT NULL DEFAULT 'none',
197
+ requested_by_user_id uuid,
198
+ deployment_job_id uuid,
199
+ embedding_model text,
200
+ vector_dimension integer,
201
+ validation_summary jsonb NOT NULL DEFAULT '{}'::jsonb,
202
+ operator_evidence jsonb NOT NULL DEFAULT '{}'::jsonb,
203
+ error_message text,
204
+ requested_at timestamptz NOT NULL DEFAULT now(),
205
+ started_at timestamptz,
206
+ completed_at timestamptz,
207
+ rollback_window_closes_at timestamptz,
208
+ created_at timestamptz NOT NULL DEFAULT now(),
209
+ updated_at timestamptz NOT NULL DEFAULT now(),
210
+ CONSTRAINT substrate_migrations_tenant_id_tenants_id_fk
211
+ FOREIGN KEY (tenant_id)
212
+ REFERENCES public.tenants(id)
213
+ ON DELETE CASCADE,
214
+ CONSTRAINT substrate_migrations_substrate_id_fk
215
+ FOREIGN KEY (substrate_id)
216
+ REFERENCES brain.substrate_states(id)
217
+ ON DELETE SET NULL,
218
+ CONSTRAINT substrate_migrations_requested_by_user_id_fk
219
+ FOREIGN KEY (requested_by_user_id)
220
+ REFERENCES public.users(id)
221
+ ON DELETE SET NULL,
222
+ CONSTRAINT substrate_migrations_deployment_job_id_fk
223
+ FOREIGN KEY (deployment_job_id)
224
+ REFERENCES public.managed_application_deployment_jobs(id)
225
+ ON DELETE SET NULL,
226
+ CONSTRAINT brain_substrate_migrations_from_tier_allowed
227
+ CHECK (from_storage_tier IN ('default', 'production')),
228
+ CONSTRAINT brain_substrate_migrations_to_tier_allowed
229
+ CHECK (to_storage_tier IN ('default', 'production')),
230
+ CONSTRAINT brain_substrate_migrations_phase_allowed
231
+ CHECK (phase IN (
232
+ 'none',
233
+ 'requested',
234
+ 'snapshotting',
235
+ 'provisioning',
236
+ 'replaying',
237
+ 'validating',
238
+ 'cutover',
239
+ 'completed',
240
+ 'failed',
241
+ 'rolled_back'
242
+ )),
243
+ CONSTRAINT brain_substrate_migrations_status_allowed
244
+ CHECK (status IN (
245
+ 'none',
246
+ 'requested',
247
+ 'running',
248
+ 'completed',
249
+ 'failed',
250
+ 'rolled_back',
251
+ 'canceled'
252
+ )),
253
+ CONSTRAINT brain_substrate_migrations_vector_positive
254
+ CHECK (vector_dimension IS NULL OR vector_dimension > 0)
255
+ );
256
+
257
+ CREATE INDEX IF NOT EXISTS brain_substrate_migrations_tenant_status_idx
258
+ ON brain.substrate_migrations (tenant_id, status);
259
+
260
+ CREATE INDEX IF NOT EXISTS brain_substrate_migrations_tenant_phase_idx
261
+ ON brain.substrate_migrations (tenant_id, phase);
262
+
263
+ CREATE INDEX IF NOT EXISTS brain_substrate_migrations_substrate_created_idx
264
+ ON brain.substrate_migrations (substrate_id, created_at);
265
+
266
+ CREATE INDEX IF NOT EXISTS brain_substrate_migrations_job_idx
267
+ ON brain.substrate_migrations (deployment_job_id);
268
+
269
+ -- ---------------------------------------------------------------------------
270
+ -- brain.substrate_events — operational substrate event log
271
+ -- ---------------------------------------------------------------------------
272
+
273
+ CREATE TABLE IF NOT EXISTS brain.substrate_events (
274
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
275
+ tenant_id uuid NOT NULL,
276
+ substrate_id uuid,
277
+ migration_id uuid,
278
+ deployment_job_id uuid,
279
+ event_type text NOT NULL,
280
+ message text NOT NULL,
281
+ payload jsonb NOT NULL DEFAULT '{}'::jsonb,
282
+ evidence_uri text,
283
+ created_at timestamptz NOT NULL DEFAULT now(),
284
+ CONSTRAINT substrate_events_tenant_id_tenants_id_fk
285
+ FOREIGN KEY (tenant_id)
286
+ REFERENCES public.tenants(id)
287
+ ON DELETE CASCADE,
288
+ CONSTRAINT substrate_events_substrate_id_fk
289
+ FOREIGN KEY (substrate_id)
290
+ REFERENCES brain.substrate_states(id)
291
+ ON DELETE CASCADE,
292
+ CONSTRAINT substrate_events_migration_id_fk
293
+ FOREIGN KEY (migration_id)
294
+ REFERENCES brain.substrate_migrations(id)
295
+ ON DELETE SET NULL,
296
+ CONSTRAINT substrate_events_deployment_job_id_fk
297
+ FOREIGN KEY (deployment_job_id)
298
+ REFERENCES public.managed_application_deployment_jobs(id)
299
+ ON DELETE SET NULL
300
+ );
301
+
302
+ CREATE INDEX IF NOT EXISTS brain_substrate_events_tenant_created_idx
303
+ ON brain.substrate_events (tenant_id, created_at);
304
+
305
+ CREATE INDEX IF NOT EXISTS brain_substrate_events_substrate_created_idx
306
+ ON brain.substrate_events (substrate_id, created_at);
307
+
308
+ CREATE INDEX IF NOT EXISTS brain_substrate_events_migration_idx
309
+ ON brain.substrate_events (migration_id);
310
+
311
+ CREATE INDEX IF NOT EXISTS brain_substrate_events_deployment_job_idx
312
+ ON brain.substrate_events (deployment_job_id);
313
+
314
+ -- ---------------------------------------------------------------------------
315
+ -- brain.artifact_manifests — replayable Brain source/vault manifests
316
+ -- ---------------------------------------------------------------------------
317
+
318
+ CREATE TABLE IF NOT EXISTS brain.artifact_manifests (
319
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
320
+ tenant_id uuid NOT NULL,
321
+ substrate_id uuid,
322
+ migration_id uuid,
323
+ manifest_kind text NOT NULL,
324
+ storage_tier text NOT NULL DEFAULT 'default',
325
+ source_family text,
326
+ source_id_hash text,
327
+ manifest_uri text NOT NULL,
328
+ artifact_root_uri text,
329
+ vault_projection_root_uri text,
330
+ checksum_sha256 text,
331
+ object_count integer NOT NULL DEFAULT 0,
332
+ source_count integer NOT NULL DEFAULT 0,
333
+ embedding_model text,
334
+ vector_dimension integer,
335
+ ontology_version text,
336
+ status text NOT NULL DEFAULT 'active',
337
+ created_at timestamptz NOT NULL DEFAULT now(),
338
+ updated_at timestamptz NOT NULL DEFAULT now(),
339
+ CONSTRAINT artifact_manifests_tenant_id_tenants_id_fk
340
+ FOREIGN KEY (tenant_id)
341
+ REFERENCES public.tenants(id)
342
+ ON DELETE CASCADE,
343
+ CONSTRAINT artifact_manifests_substrate_id_fk
344
+ FOREIGN KEY (substrate_id)
345
+ REFERENCES brain.substrate_states(id)
346
+ ON DELETE CASCADE,
347
+ CONSTRAINT artifact_manifests_migration_id_fk
348
+ FOREIGN KEY (migration_id)
349
+ REFERENCES brain.substrate_migrations(id)
350
+ ON DELETE SET NULL,
351
+ CONSTRAINT brain_artifact_manifests_kind_allowed
352
+ CHECK (manifest_kind IN (
353
+ 'source_artifact',
354
+ 'ingestion_manifest',
355
+ 'migration_snapshot',
356
+ 'vault_projection',
357
+ 'export'
358
+ )),
359
+ CONSTRAINT brain_artifact_manifests_tier_allowed
360
+ CHECK (storage_tier IN ('default', 'production')),
361
+ CONSTRAINT brain_artifact_manifests_status_allowed
362
+ CHECK (status IN ('active', 'superseded', 'deleted', 'failed')),
363
+ CONSTRAINT brain_artifact_manifests_object_nonneg
364
+ CHECK (object_count >= 0),
365
+ CONSTRAINT brain_artifact_manifests_source_nonneg
366
+ CHECK (source_count >= 0),
367
+ CONSTRAINT brain_artifact_manifests_vector_positive
368
+ CHECK (vector_dimension IS NULL OR vector_dimension > 0)
369
+ );
370
+
371
+ CREATE UNIQUE INDEX IF NOT EXISTS brain_artifact_manifests_manifest_uri_uidx
372
+ ON brain.artifact_manifests (manifest_uri);
373
+
374
+ CREATE INDEX IF NOT EXISTS brain_artifact_manifests_tenant_kind_idx
375
+ ON brain.artifact_manifests (tenant_id, manifest_kind);
376
+
377
+ CREATE INDEX IF NOT EXISTS brain_artifact_manifests_substrate_kind_idx
378
+ ON brain.artifact_manifests (substrate_id, manifest_kind);
379
+
380
+ CREATE INDEX IF NOT EXISTS brain_artifact_manifests_migration_idx
381
+ ON brain.artifact_manifests (migration_id);
382
+
383
+ CREATE INDEX IF NOT EXISTS brain_artifact_manifests_source_idx
384
+ ON brain.artifact_manifests (tenant_id, source_family, source_id_hash);
385
+
386
+ SELECT pg_advisory_unlock(hashtext('migration:0166_company_brain_substrate_contract'));
@@ -0,0 +1,85 @@
1
+ -- Purpose: extend brain.artifact_manifests with runtime provenance needed for
2
+ -- replayable Company Brain source artifacts and Knowledge Graph ingest links.
3
+ -- Plan: docs/plans/2026-06-14-001-feat-company-brain-artifact-manifests-plan.md U2
4
+ -- Apply manually (no CI migration runner):
5
+ -- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0167_company_brain_artifact_manifest_runtime.sql
6
+ -- Pre-flight:
7
+ -- SELECT to_regclass('brain.artifact_manifests');
8
+ -- SELECT to_regclass('public.knowledge_graph_ingest_runs');
9
+ -- creates-column: brain.artifact_manifests.ingest_run_id
10
+ -- creates-column: brain.artifact_manifests.source_kind
11
+ -- creates-column: brain.artifact_manifests.source_type
12
+ -- creates-column: brain.artifact_manifests.source_ids
13
+ -- creates-column: brain.artifact_manifests.object_version_id
14
+ -- creates-column: brain.artifact_manifests.content_type
15
+ -- creates-column: brain.artifact_manifests.content_encoding
16
+ -- creates-column: brain.artifact_manifests.byte_length
17
+ -- creates-column: brain.artifact_manifests.ontology_mechanism
18
+ -- creates-column: brain.artifact_manifests.metadata
19
+ -- creates: brain.brain_artifact_manifests_ingest_run_idx
20
+ -- creates: brain.brain_artifact_manifests_source_kind_idx
21
+ -- creates-constraint: brain.artifact_manifests.artifact_manifests_ingest_run_id_fk
22
+ -- creates-constraint: brain.artifact_manifests.brain_artifact_manifests_source_kind_allowed
23
+ -- creates-constraint: brain.artifact_manifests.brain_artifact_manifests_byte_nonneg
24
+
25
+ \set ON_ERROR_STOP on
26
+
27
+ SET lock_timeout = '5s';
28
+ SET statement_timeout = '15min';
29
+
30
+ SELECT pg_advisory_lock(hashtext('migration:0167_company_brain_artifact_manifest_runtime'));
31
+
32
+ ALTER TABLE brain.artifact_manifests
33
+ ADD COLUMN IF NOT EXISTS ingest_run_id uuid,
34
+ ADD COLUMN IF NOT EXISTS source_kind text,
35
+ ADD COLUMN IF NOT EXISTS source_type text,
36
+ ADD COLUMN IF NOT EXISTS source_ids text[] NOT NULL DEFAULT ARRAY[]::text[],
37
+ ADD COLUMN IF NOT EXISTS object_version_id text,
38
+ ADD COLUMN IF NOT EXISTS content_type text,
39
+ ADD COLUMN IF NOT EXISTS content_encoding text,
40
+ ADD COLUMN IF NOT EXISTS byte_length integer,
41
+ ADD COLUMN IF NOT EXISTS ontology_mechanism text,
42
+ ADD COLUMN IF NOT EXISTS metadata jsonb NOT NULL DEFAULT '{}'::jsonb;
43
+
44
+ DO $$
45
+ BEGIN
46
+ ALTER TABLE brain.artifact_manifests
47
+ ADD CONSTRAINT artifact_manifests_ingest_run_id_fk
48
+ FOREIGN KEY (ingest_run_id)
49
+ REFERENCES public.knowledge_graph_ingest_runs(id)
50
+ ON DELETE SET NULL;
51
+ EXCEPTION
52
+ WHEN duplicate_object THEN NULL;
53
+ END
54
+ $$;
55
+
56
+ DO $$
57
+ BEGIN
58
+ ALTER TABLE brain.artifact_manifests
59
+ ADD CONSTRAINT brain_artifact_manifests_source_kind_allowed
60
+ CHECK (
61
+ source_kind IS NULL
62
+ OR source_kind IN ('thread', 'wiki', 'brain', 'observations')
63
+ );
64
+ EXCEPTION
65
+ WHEN duplicate_object THEN NULL;
66
+ END
67
+ $$;
68
+
69
+ DO $$
70
+ BEGIN
71
+ ALTER TABLE brain.artifact_manifests
72
+ ADD CONSTRAINT brain_artifact_manifests_byte_nonneg
73
+ CHECK (byte_length IS NULL OR byte_length >= 0);
74
+ EXCEPTION
75
+ WHEN duplicate_object THEN NULL;
76
+ END
77
+ $$;
78
+
79
+ CREATE INDEX IF NOT EXISTS brain_artifact_manifests_ingest_run_idx
80
+ ON brain.artifact_manifests (ingest_run_id);
81
+
82
+ CREATE INDEX IF NOT EXISTS brain_artifact_manifests_source_kind_idx
83
+ ON brain.artifact_manifests (tenant_id, source_kind, source_id_hash);
84
+
85
+ SELECT pg_advisory_unlock(hashtext('migration:0167_company_brain_artifact_manifest_runtime'));
@@ -0,0 +1,44 @@
1
+ -- Purpose: add the per-tenant skill-update gate threshold (Skill Tests &
2
+ -- Evals U6). A skill UPDATE whose candidate version scores below
3
+ -- this threshold is HELD (the workspace swap is deferred) until an
4
+ -- operator applies it once the candidate passes, or overrides. A
5
+ -- row's PRESENCE = the gate is enabled for the tenant; no row = no
6
+ -- gate (nothing blocks). Initial install is never gated; unrated
7
+ -- skills (no bundled cases) are never gated.
8
+ -- Plan: docs/plans/2026-06-13-003-feat-skill-tests-and-evals-plan.md (U6)
9
+ -- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0168_eval_skill_gate.sql
10
+ --
11
+ -- Hand-rolled (NOT registered in meta/_journal.json — the journal snapshot
12
+ -- stopped at 0020; repo convention is psql-applied files gated by the
13
+ -- db:migrate-manual drift reporter). Renumbered 0166 → 0168 after rebasing
14
+ -- onto main, which landed 0166/0167 (company-brain); the table was already
15
+ -- applied to dev under the old name (rename is file-only, no DB change).
16
+ --
17
+ -- Semantics:
18
+ -- * Per-tenant single threshold (v1) — tenant_id is the PRIMARY KEY, so
19
+ -- a tenant has at most one gate row. Per-skill thresholds are deferred
20
+ -- (this locks the migration shape).
21
+ -- * threshold is a fraction in [0, 1] (same scale as eval_runs.pass_rate)
22
+ -- guarded by a CHECK so a stray write can't smuggle an out-of-range gate.
23
+ -- * No row = no gate; setting null in the API DELETEs the row.
24
+ --
25
+ -- creates: public.eval_skill_gate
26
+ -- creates-constraint: public.eval_skill_gate.eval_skill_gate_tenant_id_tenants_id_fk
27
+ -- creates-constraint: public.eval_skill_gate.eval_skill_gate_threshold_check
28
+
29
+ \set ON_ERROR_STOP on
30
+
31
+ BEGIN;
32
+
33
+ SET LOCAL lock_timeout = '5s';
34
+
35
+ CREATE TABLE IF NOT EXISTS public.eval_skill_gate (
36
+ tenant_id uuid PRIMARY KEY
37
+ CONSTRAINT eval_skill_gate_tenant_id_tenants_id_fk REFERENCES public.tenants(id),
38
+ threshold numeric(5, 4) NOT NULL
39
+ CONSTRAINT eval_skill_gate_threshold_check CHECK (threshold >= 0 AND threshold <= 1),
40
+ created_at timestamptz NOT NULL DEFAULT now(),
41
+ updated_at timestamptz NOT NULL DEFAULT now()
42
+ );
43
+
44
+ COMMIT;
@@ -0,0 +1,67 @@
1
+ -- Release update deployment job domain.
2
+ --
3
+ -- creates: public.release_update_jobs
4
+ -- creates: public.release_update_events
5
+ -- creates: public.release_update_jobs_tenant_idempotency_uidx
6
+ -- creates: public.release_update_jobs_tenant_status_idx
7
+ -- creates: public.release_update_jobs_tenant_target_idx
8
+ -- creates: public.release_update_events_job_created_idx
9
+ -- creates: public.release_update_events_idempotency_uidx
10
+
11
+ CREATE TABLE IF NOT EXISTS "release_update_jobs" (
12
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
13
+ "tenant_id" uuid NOT NULL REFERENCES "tenants"("id") ON DELETE cascade,
14
+ "status" text NOT NULL DEFAULT 'preflight_pending',
15
+ "idempotency_key" text NOT NULL,
16
+ "requested_by_user_id" uuid,
17
+ "target_release_version" text NOT NULL,
18
+ "current_release_version" text,
19
+ "manifest_url" text NOT NULL,
20
+ "manifest_sha256" text NOT NULL,
21
+ "manifest_signed" boolean NOT NULL DEFAULT false,
22
+ "manifest_trust_policy" text,
23
+ "terraform_module_version" text,
24
+ "preflight_summary" jsonb NOT NULL DEFAULT '{}'::jsonb,
25
+ "preserved_config_summary" jsonb NOT NULL DEFAULT '{}'::jsonb,
26
+ "remediation_summary" jsonb NOT NULL DEFAULT '{}'::jsonb,
27
+ "state_machine_arn" text,
28
+ "execution_arn" text,
29
+ "codebuild_build_arn" text,
30
+ "evidence_bucket" text,
31
+ "evidence_prefix" text,
32
+ "status_pointer_bucket" text,
33
+ "status_pointer_key" text,
34
+ "final_status" jsonb NOT NULL DEFAULT '{}'::jsonb,
35
+ "failure_category" text,
36
+ "failure_message" text,
37
+ "recovery_action" text,
38
+ "created_at" timestamp with time zone NOT NULL DEFAULT now(),
39
+ "updated_at" timestamp with time zone NOT NULL DEFAULT now()
40
+ );
41
+
42
+ CREATE UNIQUE INDEX IF NOT EXISTS "release_update_jobs_tenant_idempotency_uidx"
43
+ ON "release_update_jobs" ("tenant_id", "idempotency_key");
44
+
45
+ CREATE INDEX IF NOT EXISTS "release_update_jobs_tenant_status_idx"
46
+ ON "release_update_jobs" ("tenant_id", "status");
47
+
48
+ CREATE INDEX IF NOT EXISTS "release_update_jobs_tenant_target_idx"
49
+ ON "release_update_jobs" ("tenant_id", "target_release_version");
50
+
51
+ CREATE TABLE IF NOT EXISTS "release_update_events" (
52
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
53
+ "tenant_id" uuid NOT NULL REFERENCES "tenants"("id") ON DELETE cascade,
54
+ "job_id" uuid NOT NULL REFERENCES "release_update_jobs"("id") ON DELETE cascade,
55
+ "event_type" text NOT NULL,
56
+ "message" text NOT NULL,
57
+ "payload" jsonb NOT NULL DEFAULT '{}'::jsonb,
58
+ "idempotency_key" text,
59
+ "created_at" timestamp with time zone NOT NULL DEFAULT now()
60
+ );
61
+
62
+ CREATE INDEX IF NOT EXISTS "release_update_events_job_created_idx"
63
+ ON "release_update_events" ("job_id", "created_at");
64
+
65
+ CREATE UNIQUE INDEX IF NOT EXISTS "release_update_events_idempotency_uidx"
66
+ ON "release_update_events" ("job_id", "idempotency_key")
67
+ WHERE "idempotency_key" IS NOT NULL;