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.
- package/README.md +42 -38
- package/dist/{api-client-ASJWIG3Z.js → api-client-4VT3FWOH.js} +1 -1
- package/dist/{chunk-JEHV35EU.js → chunk-H7AB42ES.js} +340 -30
- package/dist/cli.js +22157 -9229
- package/dist/commands/enterprise/templates/deploy-repo/.github/workflows/deploy.yml +17 -6
- package/dist/commands/enterprise/templates/deploy-repo/docs/runbook.md +81 -9
- package/dist/commands/enterprise/templates/deploy-repo/scripts/apply-release.mjs +183 -21
- package/dist/commands/enterprise/templates/deploy-repo/scripts/smoke.mjs +1 -2
- package/dist/commands/enterprise/templates/deploy-repo/terraform/main.tf +286 -0
- package/dist/drizzle/0000_petite_marvel_apes.sql +1188 -0
- package/dist/drizzle/0001_milky_surge.sql +103 -0
- package/dist/drizzle/0002_aberrant_mattie_franklin.sql +41 -0
- package/dist/drizzle/0003_exotic_ogun.sql +3 -0
- package/dist/drizzle/0004_glamorous_magneto.sql +2 -0
- package/dist/drizzle/0005_ancient_nocturne.sql +2 -0
- package/dist/drizzle/0006_new_colonel_america.sql +2 -0
- package/dist/drizzle/0007_unique_external_task_id.sql +31 -0
- package/dist/drizzle/0008_external_task_id_column.sql +43 -0
- package/dist/drizzle/0009_evaluations.sql +64 -0
- package/dist/drizzle/0010_eval_agent_template.sql +2 -0
- package/dist/drizzle/0011_eval_run_template.sql +2 -0
- package/dist/drizzle/0012_eval_seed_unique.sql +16 -0
- package/dist/drizzle/0013_motionless_white_queen.sql +140 -0
- package/dist/drizzle/0014_wiki_aggregation.sql +11 -0
- package/dist/drizzle/0015_pg_trgm_alias_title_indexes.sql +9 -0
- package/dist/drizzle/0016_wiki_schema_drops.sql +24 -0
- package/dist/drizzle/0017_wiki_places.sql +46 -0
- package/dist/drizzle/0018_agent_workspace_overlay.sql +26 -0
- package/dist/drizzle/0018_cool_firebird.sql +24 -0
- package/dist/drizzle/0018_skill_runs.sql +84 -0
- package/dist/drizzle/0019_condemned_dragon_man.sql +95 -0
- package/dist/drizzle/0019_webhook_skill_runs.sql +58 -0
- package/dist/drizzle/0020_crazy_the_anarchist.sql +9 -0
- package/dist/drizzle/0020_mutation_idempotency.sql +64 -0
- package/dist/drizzle/0021_crm_work_links.sql +76 -0
- package/dist/drizzle/0021_skill_runs_completion_hmac.sql +33 -0
- package/dist/drizzle/0022_add_billing_tables.sql +70 -0
- package/dist/drizzle/0022_seed_thinkwork_admin_permissions.sql +160 -0
- package/dist/drizzle/0022_stripe_billing_indexes.sql +48 -0
- package/dist/drizzle/0023_tenants_deactivation.sql +27 -0
- package/dist/drizzle/0024_tenant_mcp_admin_keys.sql +63 -0
- package/dist/drizzle/0025_v1_agent_architecture.sql +182 -0
- package/dist/drizzle/0026_thread_turns_add_kind.sql +28 -0
- package/dist/drizzle/0027_capability_catalog_and_manifests.sql +219 -0
- package/dist/drizzle/0028_aws_s3_extension.sql +26 -0
- package/dist/drizzle/0029_collapse_execution_types.sql +42 -0
- package/dist/drizzle/0030_retire_composition_primitives.sql +48 -0
- package/dist/drizzle/0031_thread_cleanup_drops.sql +131 -0
- package/dist/drizzle/0032_add_browser_automation_template_config.sql +24 -0
- package/dist/drizzle/0033_agent_operation_leases.sql +32 -0
- package/dist/drizzle/0034_agent_workspace_events.sql +116 -0
- package/dist/drizzle/0035_workspace_review_decisions.sql +19 -0
- package/dist/drizzle/0036_user_scoped_memory_wiki.sql +152 -0
- package/dist/drizzle/0037_user_profile_operating_model.sql +34 -0
- package/dist/drizzle/0042_agent_runtime_selector.sql +41 -0
- package/dist/drizzle/0043_wiki_search_tsv_tokenization.sql +48 -0
- package/dist/drizzle/0044_add_web_search_template_config.sql +7 -0
- package/dist/drizzle/0045_add_send_email_template_config.sql +7 -0
- package/dist/drizzle/0046_tenant_mcp_context_tools.sql +26 -0
- package/dist/drizzle/0047_add_context_engine_template_config.sql +7 -0
- package/dist/drizzle/0048_tenant_context_provider_settings.sql +22 -0
- package/dist/drizzle/0050_brain_v0_entity_subtype.sql +29 -0
- package/dist/drizzle/0051_brain_v0_tenant_entity_pages.sql +170 -0
- package/dist/drizzle/0052_brain_v0_external_refs.sql +41 -0
- package/dist/drizzle/0053_brain_v0_unresolved_mentions_subtype.sql +48 -0
- package/dist/drizzle/0054_wiki_compile_jobs_input.sql +28 -0
- package/dist/drizzle/0055_routines_stepfunctions_substrate.sql +202 -0
- package/dist/drizzle/0056_routine_step_events_dedup_idx.sql +25 -0
- package/dist/drizzle/0057_archive_legacy_python_routines.sql +36 -0
- package/dist/drizzle/0058_routines_visibility_and_owning_agent.sql +61 -0
- package/dist/drizzle/0061_routine_execution_asl_version_id.sql +29 -0
- package/dist/drizzle/0062_migrate_pi_to_flue.sql +110 -0
- package/dist/drizzle/0063_threads_session_data.sql +23 -0
- package/dist/drizzle/0064_tenant_credentials.sql +65 -0
- package/dist/drizzle/0067_thinkwork_computers_phase_one.sql +174 -0
- package/dist/drizzle/0068_drop_system_workflows_and_activation.sql +115 -0
- package/dist/drizzle/0069_compliance_schema.sql +364 -0
- package/dist/drizzle/0070_compliance_aurora_roles.sql +171 -0
- package/dist/drizzle/0072_threads_computer_ownership.sql +24 -0
- package/dist/drizzle/0073_compliance_tenant_anchor_state.sql +105 -0
- package/dist/drizzle/0074_compliance_event_hash_index.sql +49 -0
- package/dist/drizzle/0075_scheduled_jobs_computer_ownership.sql +27 -0
- package/dist/drizzle/0076_scheduled_jobs_marco_backfill.sql +69 -0
- package/dist/drizzle/0077_computers_primary_agent_id.sql +38 -0
- package/dist/drizzle/0078_tenant_customize_catalog.sql +46 -0
- package/dist/drizzle/0079_seed_tenant_customize_catalog.sql +53 -0
- package/dist/drizzle/0081_routines_catalog_slug.sql +42 -0
- package/dist/drizzle/0082_messages_parts_jsonb.sql +52 -0
- package/dist/drizzle/0083_computer_runbooks.sql +103 -0
- package/dist/drizzle/0084_artifacts_favorited_at.sql +32 -0
- package/dist/drizzle/0085_seed_thinkwork_computer_default_template.sql +46 -0
- package/dist/drizzle/0086_update_default_template_models.sql +19 -0
- package/dist/drizzle/0087_retire_oss_connectors.sql +77 -0
- package/dist/drizzle/0088_compliance_event_types_finance_pilot.sql +37 -0
- package/dist/drizzle/0089_remove_maniflow_eval_seeds.sql +81 -0
- package/dist/drizzle/0089_wiki_schema_extraction.sql +315 -0
- package/dist/drizzle/0090_brain_schema_extraction.sql +274 -0
- package/dist/drizzle/0091_drop_wiki_brain_compat_views.sql +118 -0
- package/dist/drizzle/0092_finish_oss_connector_retirement.sql +97 -0
- package/dist/drizzle/0093_eval_runs_scheduled_job_id.sql +23 -0
- package/dist/drizzle/0094_slack_workspace_app.sql +140 -0
- package/dist/drizzle/0095_eval_runs_computer_id.sql +22 -0
- package/dist/drizzle/0096_true_redteam_eval_seed_cleanup.sql +67 -0
- package/dist/drizzle/0097_shared_computers.sql +191 -0
- package/dist/drizzle/0098_business_ontology.sql +587 -0
- package/dist/drizzle/0099_thread_idle_learning.sql +145 -0
- package/dist/drizzle/0100_ontology_gated_brain_dynamic_subtypes.sql +7 -0
- package/dist/drizzle/0101_ontology_gated_unresolved_mentions_dynamic_subtypes.sql +7 -0
- package/dist/drizzle/0102_wiki_brain_owner_repair.sql +87 -0
- package/dist/drizzle/0103_brain_section_source_trigger_repair.sql +75 -0
- package/dist/drizzle/0104_expand_seed_ontology_for_user_memory.sql +166 -0
- package/dist/drizzle/0105_spaces_domain.sql +349 -0
- package/dist/drizzle/0106_expand_seed_ontology_for_triples.sql +173 -0
- package/dist/drizzle/0106_space_threads_participants.sql +197 -0
- package/dist/drizzle/0107_linked_task_mirror.sql +245 -0
- package/dist/drizzle/0108_message_mentions.sql +95 -0
- package/dist/drizzle/0109_space_owned_threads.sql +217 -0
- package/dist/drizzle/0110_thread_participant_read_state.sql +21 -0
- package/dist/drizzle/0111_agents_tenant_name_unique.sql +38 -0
- package/dist/drizzle/0112_recast_spaces_as_contextual_workrooms.sql +138 -0
- package/dist/drizzle/0113_agents_own_runtime_fields.sql +48 -0
- package/dist/drizzle/0114_migrate_templates_to_agents_and_spaces.sql +361 -0
- package/dist/drizzle/0115_remove_computer_eval_template_dependencies.sql +69 -0
- package/dist/drizzle/0116_backfill_thread_participants_access.sql +126 -0
- package/dist/drizzle/0117_space_access_mode.sql +40 -0
- package/dist/drizzle/0118_normalize_tenant_member_principal_type.sql +41 -0
- package/dist/drizzle/0119_space_knowledge_bases.sql +126 -0
- package/dist/drizzle/0120_space_automations.sql +58 -0
- package/dist/drizzle/0121_drop_computer_runbooks.sql +26 -0
- package/dist/drizzle/0122_space_email_triggers.sql +24 -0
- package/dist/drizzle/0123_single_platform_agent_and_overrides.sql +58 -0
- package/dist/drizzle/0124_thread_turns_finalized_at.sql +17 -0
- package/dist/drizzle/0125_drop_space_agent_assignments.sql +42 -0
- package/dist/drizzle/0126_migrate_flue_to_pi.sql +42 -0
- package/dist/drizzle/0127_runtime_type_observability.sql +28 -0
- package/dist/drizzle/0128_drop_eval_test_cases_agent_id.sql +37 -0
- package/dist/drizzle/0129_drop_code_factory_tables.sql +43 -0
- package/dist/drizzle/0129_eval_results_system_prompt.sql +30 -0
- package/dist/drizzle/0130_drop_teams_and_team_id_columns.sql +54 -0
- package/dist/drizzle/0131_drop_skill_catalog_and_tenant_skills.sql +33 -0
- package/dist/drizzle/0132_drop_computer_tables.sql +31 -0
- package/dist/drizzle/0133_drop_seed_view_tombstones.sql +79 -0
- package/dist/drizzle/0133_thread_turns_system_prompt.sql +22 -0
- package/dist/drizzle/0134_drop_dead_agent_runtime_tables.sql +53 -0
- package/dist/drizzle/0135_native_checklist_linked_tasks.sql +48 -0
- package/dist/drizzle/0136_goal_ledger.sql +55 -0
- package/dist/drizzle/0136_space_email_trigger_status.sql +66 -0
- package/dist/drizzle/0137_thread_participant_pins.sql +25 -0
- package/dist/drizzle/0138_users_cognito_sub.sql +30 -0
- package/dist/drizzle/0139_mobile_turn_client_id.sql +23 -0
- package/dist/drizzle/0140_workspace_folder_names.sql +36 -0
- package/dist/drizzle/0141_eval_runs_desktop_pi_provenance.sql +31 -0
- package/dist/drizzle/0142_pi_only_agent_runtime.sql +61 -0
- package/dist/drizzle/0143_add_web_extract_builtin_config.sql +28 -0
- package/dist/drizzle/0144_skill_catalog_index.sql +40 -0
- package/dist/drizzle/0145_knowledge_graph_thread_ingest.sql +512 -0
- package/dist/drizzle/0146_knowledge_graph_source_scope.sql +413 -0
- package/dist/drizzle/0147_knowledge_graph_scope_trigger_qualification.sql +211 -0
- package/dist/drizzle/0148_user_cost_attribution.sql +171 -0
- package/dist/drizzle/0149_managed_mcp_servers.sql +64 -0
- package/dist/drizzle/0149_user_model_approvals.sql +89 -0
- package/dist/drizzle/0150_bootstrap_first_admin_claim.sql +11 -0
- package/dist/drizzle/0151_managed_deployments.sql +91 -0
- package/dist/drizzle/0152_agent_profiles.sql +81 -0
- package/dist/drizzle/0153_message_mentions_agent_profile.sql +9 -0
- package/dist/drizzle/0154_customer_deployment_sessions.sql +61 -0
- package/dist/drizzle/0155_tenant_model_catalog.sql +152 -0
- package/dist/drizzle/0156_bootstrap_credential_leases.sql +52 -0
- package/dist/drizzle/0157_knowledge_graph_observations_source.sql +79 -0
- package/dist/drizzle/0158_pending_user_questions.sql +80 -0
- package/dist/drizzle/0158_wiki_tenant_scope.sql +38 -0
- package/dist/drizzle/0159_agent_profiles_space_local.sql +49 -0
- package/dist/drizzle/0159_application_plugins.sql +193 -0
- package/dist/drizzle/0159_eval_scoring_version.sql +46 -0
- package/dist/drizzle/0160_compliance_event_types_plugins.sql +37 -0
- package/dist/drizzle/0160_eval_datasets.sql +75 -0
- package/dist/drizzle/0160_eval_results_thread_turn.sql +35 -0
- package/dist/drizzle/0161_eval_run_pinning.sql +54 -0
- package/dist/drizzle/0161_tenant_mcp_servers_plugin_source.sql +62 -0
- package/dist/drizzle/0162_eval_result_override.sql +49 -0
- package/dist/drizzle/0163_eval_replay_tool_allowlist.sql +50 -0
- package/dist/drizzle/0164_eval_replay_tool_override_mode.sql +52 -0
- package/dist/drizzle/0165_plugin_premium_entitlements.sql +153 -0
- package/dist/drizzle/0166_company_brain_substrate_contract.sql +386 -0
- package/dist/drizzle/0167_company_brain_artifact_manifest_runtime.sql +85 -0
- package/dist/drizzle/0168_eval_skill_gate.sql +44 -0
- package/dist/drizzle/0169_release_update_jobs.sql +67 -0
- package/dist/drizzle/0170_email_channel_plugin.sql +291 -0
- package/dist/drizzle/0171_linked_task_external_providers.sql +30 -0
- package/dist/drizzle/0172_email_channel_sendgrid_provider.sql +8 -0
- package/dist/drizzle/0173_auth_provider_resources.sql +83 -0
- package/dist/drizzle/0174_workos_auth_bridges.sql +37 -0
- package/dist/drizzle/0175_workos_auth_sessions.sql +38 -0
- package/dist/drizzle/0176_n8n_agent_step_runs.sql +107 -0
- package/dist/drizzle/0177_workflow_control_plane.sql +281 -0
- package/dist/drizzle/0178_workflow_backfill_existing_routines.sql +525 -0
- package/dist/drizzle/0179_tenant_goal_budget_settings.sql +21 -0
- package/dist/drizzle/0180_skill_drafts.sql +89 -0
- package/dist/drizzle/0181_skill_draft_publish_status.sql +21 -0
- package/dist/drizzle/0182_agent_loops.sql +260 -0
- package/dist/drizzle/0183_okf_artifact_manifests.sql +52 -0
- package/dist/drizzle/0184_skill_catalog_trust_cache.sql +35 -0
- package/dist/drizzle/0185_agent_loop_space.sql +16 -0
- package/dist/drizzle/0186_tenant_mcp_runtime_metadata.sql +10 -0
- package/dist/drizzle/0187_native_work_items.sql +220 -0
- package/dist/drizzle/0188_company_etl_plugin_rename.sql +99 -0
- package/dist/drizzle/0189_trace_cost_substrate.sql +247 -0
- package/dist/drizzle/0190_billing_export_reconciliation.sql +101 -0
- package/dist/drizzle/0191_open_engine_work_item_queue.sql +66 -0
- package/dist/drizzle/0192_work_item_labels.sql +44 -0
- package/dist/drizzle/0193_work_item_documents.sql +31 -0
- package/dist/drizzle/0194_memory_retain_attempts.sql +103 -0
- package/dist/drizzle/0194_work_item_comments.sql +35 -0
- package/dist/drizzle/0195_plugin_app_overlays.sql +45 -0
- package/dist/drizzle/0196_pi_extensions.sql +118 -0
- package/dist/drizzle/0197_eval_profiles.sql +150 -0
- package/dist/drizzle/0198_eval_runs_unstable.sql +27 -0
- package/dist/drizzle/0199_eval_runs_cost_partial.sql +27 -0
- package/dist/drizzle/meta/_journal.json +160 -0
- package/dist/plugins/README.md +162 -0
- package/dist/plugins/catalog/package.json +40 -0
- package/dist/plugins/catalog/scripts/build-catalog.ts +120 -0
- package/dist/plugins/catalog/scripts/generate-plugin-registry.ts +144 -0
- package/dist/plugins/catalog/src/__tests__/build-catalog.test.ts +86 -0
- package/dist/plugins/catalog/src/__tests__/catalog.test.ts +308 -0
- package/dist/plugins/catalog/src/__tests__/contracts.test.ts +861 -0
- package/dist/plugins/catalog/src/__tests__/plugin-package.test.ts +124 -0
- package/dist/plugins/catalog/src/__tests__/plugin-registry.test.ts +120 -0
- package/dist/plugins/catalog/src/catalog.ts +434 -0
- package/dist/plugins/catalog/src/contracts.ts +1498 -0
- package/dist/plugins/catalog/src/index.ts +4 -0
- package/dist/plugins/catalog/src/plugin-package.ts +171 -0
- package/dist/plugins/catalog/src/registry/generated-first-party.ts +76 -0
- package/dist/plugins/catalog/src/registry/index.ts +1 -0
- package/dist/plugins/catalog/tsconfig.json +8 -0
- package/dist/plugins/company-brain/README.md +37 -0
- package/dist/plugins/company-brain/package.json +33 -0
- package/dist/plugins/company-brain/runtime/cognee/Dockerfile +11 -0
- package/dist/plugins/company-brain/smoke/cognee-managed-app-smoke.mjs +458 -0
- package/dist/plugins/company-brain/smoke/cognee-memory-cutover-smoke.mjs +539 -0
- package/dist/plugins/company-brain/smoke/company-brain-context-engine-smoke.mjs +312 -0
- package/dist/plugins/company-brain/smoke/company-brain-operations-smoke.mjs +449 -0
- package/dist/plugins/company-brain/smoke/company-brain-plugin-smoke.mjs +655 -0
- package/dist/plugins/company-brain/smoke/hindsight-memory-isolation-smoke.mjs +474 -0
- package/dist/plugins/company-brain/src/api/cognee-client.ts +896 -0
- package/dist/plugins/company-brain/src/api/cognee-cluster-identity.ts +49 -0
- package/dist/plugins/company-brain/src/api/cognee-memory-scope.ts +84 -0
- package/dist/plugins/company-brain/src/api/context-engine-provider.ts +888 -0
- package/dist/plugins/company-brain/src/api/migration.ts +665 -0
- package/dist/plugins/company-brain/src/deployment/cognee-managed-app.ts +396 -0
- package/dist/plugins/company-brain/src/index.ts +62 -0
- package/dist/plugins/company-brain/src/manifest.ts +112 -0
- package/dist/plugins/company-brain/terraform/cognee/README.md +263 -0
- package/dist/plugins/company-brain/terraform/cognee/main.tf +766 -0
- package/dist/plugins/company-brain/terraform/cognee/outputs.tf +144 -0
- package/dist/plugins/company-brain/terraform/cognee/variables.tf +402 -0
- package/dist/plugins/company-brain/test/api/cognee-client.test.ts +562 -0
- package/dist/plugins/company-brain/test/api/cognee-memory-scope.test.ts +74 -0
- package/dist/plugins/company-brain/test/api/context-engine-provider.test.ts +447 -0
- package/dist/plugins/company-brain/test/api/migration.test.ts +465 -0
- package/dist/plugins/company-brain/test/manifest.test.ts +95 -0
- package/dist/plugins/company-brain/tsconfig.json +8 -0
- package/dist/plugins/company-data/README.md +49 -0
- package/dist/plugins/company-data/package.json +21 -0
- package/dist/plugins/company-data/src/index.ts +30 -0
- package/dist/plugins/company-data/src/manifest.ts +26 -0
- package/dist/plugins/company-data/test/manifest.test.ts +116 -0
- package/dist/plugins/company-data/tsconfig.json +8 -0
- package/dist/plugins/company-etl/README.md +46 -0
- package/dist/plugins/company-etl/package.json +21 -0
- package/dist/plugins/company-etl/src/index.ts +29 -0
- package/dist/plugins/company-etl/src/manifest.ts +26 -0
- package/dist/plugins/company-etl/test/manifest.test.ts +108 -0
- package/dist/plugins/company-etl/tsconfig.json +8 -0
- package/dist/plugins/email-channel/README.md +41 -0
- package/dist/plugins/email-channel/package.json +22 -0
- package/dist/plugins/email-channel/src/index.ts +36 -0
- package/dist/plugins/email-channel/src/manifest.ts +44 -0
- package/dist/plugins/email-channel/src/provider-contract.ts +36 -0
- package/dist/plugins/email-channel/test/manifest.test.ts +119 -0
- package/dist/plugins/email-channel/tsconfig.json +8 -0
- package/dist/plugins/lastmile/README.md +50 -0
- package/dist/plugins/lastmile/package.json +23 -0
- package/dist/plugins/lastmile/smoke/lastmile-plugin-smoke.mjs +661 -0
- package/dist/plugins/lastmile/src/api/tasks-adapter.ts +572 -0
- package/dist/plugins/lastmile/src/discovery.fixture.ts +64 -0
- package/dist/plugins/lastmile/src/index.ts +46 -0
- package/dist/plugins/lastmile/src/manifest.ts +139 -0
- package/dist/plugins/lastmile/test/api/tasks-adapter.test.ts +266 -0
- package/dist/plugins/lastmile/test/discovery.test.ts +88 -0
- package/dist/plugins/lastmile/tsconfig.json +8 -0
- package/dist/plugins/n8n/README.md +201 -0
- package/dist/plugins/n8n/n8n-app/README.md +33 -0
- package/dist/plugins/n8n/n8n-app/package.json +23 -0
- package/dist/plugins/n8n/n8n-app/src/application-config.ts +45 -0
- package/dist/plugins/n8n/n8n-app/src/front-components/thinkwork-workflows.front-component.tsx +970 -0
- package/dist/plugins/n8n/n8n-app/src/lib/n8n-app-data.ts +190 -0
- package/dist/plugins/n8n/n8n-app/src/vite-env.d.ts +7 -0
- package/dist/plugins/n8n/n8n-app/tsconfig.json +15 -0
- package/dist/plugins/n8n/package.json +35 -0
- package/dist/plugins/n8n/runtime/Dockerfile +18 -0
- package/dist/plugins/n8n/runtime/n8n-task-runners.json +14 -0
- package/dist/plugins/n8n/runtime/n8n-task-runners.json.template +14 -0
- package/dist/plugins/n8n/runtime/package-lock.json +13 -0
- package/dist/plugins/n8n/runtime/package.json +7 -0
- package/dist/plugins/n8n/scripts/sync-thinkwork-app.mjs +268 -0
- package/dist/plugins/n8n/smoke/README.md +95 -0
- package/dist/plugins/n8n/smoke/n8n-agent-step-bridge-smoke.mjs +866 -0
- package/dist/plugins/n8n/smoke/n8n-integrated-app-smoke.mjs +262 -0
- package/dist/plugins/n8n/smoke/n8n-managed-app-smoke.mjs +409 -0
- package/dist/plugins/n8n/smoke/n8n-mcp-smoke.mjs +624 -0
- package/dist/plugins/n8n/src/deployment/image-build.ts +172 -0
- package/dist/plugins/n8n/src/deployment/managed-app.ts +429 -0
- package/dist/plugins/n8n/src/index.ts +79 -0
- package/dist/plugins/n8n/src/manifest.ts +403 -0
- package/dist/plugins/n8n/src/package-config.ts +186 -0
- package/dist/plugins/n8n/src/skills/n8n-workflow-operator/SKILL.md +76 -0
- package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/mcp-tooling.md +40 -0
- package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/validation-and-handoff.md +40 -0
- package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/workflow-authoring.md +45 -0
- package/dist/plugins/n8n/terraform/n8n/README.md +113 -0
- package/dist/plugins/n8n/terraform/n8n/main.tf +918 -0
- package/dist/plugins/n8n/terraform/n8n/outputs.tf +124 -0
- package/dist/plugins/n8n/terraform/n8n/scripts/sync-database.py +250 -0
- package/dist/plugins/n8n/terraform/n8n/scripts/test_sync_database.py +55 -0
- package/dist/plugins/n8n/terraform/n8n/variables.tf +354 -0
- package/dist/plugins/n8n/test/image-build.test.ts +118 -0
- package/dist/plugins/n8n/test/integrated-app-contract.test.ts +353 -0
- package/dist/plugins/n8n/test/manifest.test.ts +278 -0
- package/dist/plugins/n8n/test/package-config.test.ts +57 -0
- package/dist/plugins/n8n/tsconfig.json +8 -0
- package/dist/plugins/sendgrid/README.md +30 -0
- package/dist/plugins/sendgrid/package.json +22 -0
- package/dist/plugins/sendgrid/src/index.ts +36 -0
- package/dist/plugins/sendgrid/src/manifest.ts +37 -0
- package/dist/plugins/sendgrid/src/provider-contract.ts +14 -0
- package/dist/plugins/sendgrid/test/manifest.test.ts +80 -0
- package/dist/plugins/sendgrid/tsconfig.json +8 -0
- package/dist/plugins/twenty/README.md +78 -0
- package/dist/plugins/twenty/package.json +27 -0
- package/dist/plugins/twenty/scripts/__tests__/sync-thinkwork-app.test.mjs +67 -0
- package/dist/plugins/twenty/scripts/sync-thinkwork-app.mjs +185 -0
- package/dist/plugins/twenty/scripts/wire-thinkwork-workflow.mjs +658 -0
- package/dist/plugins/twenty/smoke/twenty-managed-app-smoke.mjs +359 -0
- package/dist/plugins/twenty/smoke/twenty-mcp-oauth-smoke.mjs +574 -0
- package/dist/plugins/twenty/src/api/cutover.ts +209 -0
- package/dist/plugins/twenty/src/deployment/managed-app.ts +253 -0
- package/dist/plugins/twenty/src/index.ts +55 -0
- package/dist/plugins/twenty/src/manifest.ts +259 -0
- package/dist/plugins/twenty/terraform/twenty/README.md +97 -0
- package/dist/plugins/twenty/terraform/twenty/main.tf +829 -0
- package/dist/plugins/twenty/terraform/twenty/outputs.tf +79 -0
- package/dist/plugins/twenty/terraform/twenty/variables.tf +268 -0
- package/dist/plugins/twenty/test/api/cutover.test.ts +183 -0
- package/dist/plugins/twenty/test/manifest.test.ts +463 -0
- package/dist/plugins/twenty/tsconfig.json +9 -0
- package/dist/plugins/twenty/twenty-app/.nvmrc +1 -0
- package/dist/plugins/twenty/twenty-app/README.md +148 -0
- package/dist/plugins/twenty/twenty-app/package.json +30 -0
- package/dist/plugins/twenty/twenty-app/src/application-config.ts +44 -0
- package/dist/plugins/twenty/twenty-app/src/constants/universal-identifiers.ts +18 -0
- package/dist/plugins/twenty/twenty-app/src/default-role.ts +24 -0
- package/dist/plugins/twenty/twenty-app/src/front-components/thinkwork-settings.front-component.tsx +299 -0
- package/dist/plugins/twenty/twenty-app/src/logic-functions/thinkwork-webhook.logic-function.ts +354 -0
- package/dist/plugins/twenty/twenty-app/tsconfig.json +14 -0
- package/dist/plugins/twenty/twenty-app/yarn.lock +4144 -0
- package/dist/plugins/workos-auth/package.json +22 -0
- package/dist/plugins/workos-auth/src/index.ts +30 -0
- package/dist/plugins/workos-auth/src/manifest.ts +40 -0
- package/dist/plugins/workos-auth/src/provider-contract.ts +39 -0
- package/dist/plugins/workos-auth/test/manifest.test.ts +94 -0
- package/dist/plugins/workos-auth/tsconfig.json +8 -0
- package/dist/scripts/bootstrap-workspace.sh +162 -0
- package/dist/scripts/post-deploy.sh +290 -0
- package/dist/terraform/examples/greenfield/main.tf +903 -75
- package/dist/terraform/examples/greenfield/terraform.tfvars.example +67 -8
- package/dist/terraform/modules/app/agentcore-code-interpreter/Dockerfile.sandbox-base +2 -2
- package/dist/terraform/modules/app/agentcore-code-interpreter/README.md +8 -9
- package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/sitecustomize.py +227 -0
- package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/test_sitecustomize.py +277 -0
- package/dist/terraform/modules/app/agentcore-memory/README.md +6 -6
- package/dist/terraform/modules/app/agentcore-memory/main.tf +1 -1
- package/dist/terraform/modules/app/agentcore-memory/scripts/create_or_find_memory.sh +40 -9
- package/dist/terraform/modules/app/agentcore-pi/README.md +61 -0
- package/dist/terraform/modules/app/agentcore-pi/main.tf +453 -0
- package/dist/terraform/modules/app/agentcore-pi/outputs.tf +38 -0
- package/dist/terraform/modules/app/agentcore-pi/variables.tf +145 -0
- package/dist/terraform/modules/app/agentcore-platform/main.tf +83 -0
- package/dist/terraform/modules/app/agentcore-runtime/main.tf +9 -11
- package/dist/terraform/modules/app/appsync-subscriptions/main.tf +5 -1
- package/dist/terraform/modules/app/customer-domain/main.tf +483 -0
- package/dist/terraform/modules/app/deployment-control-plane/README.md +47 -0
- package/dist/terraform/modules/app/deployment-control-plane/buildspec.yml +24 -0
- package/dist/terraform/modules/app/deployment-control-plane/main.tf +614 -0
- package/dist/terraform/modules/app/deployment-control-plane/outputs.tf +54 -0
- package/dist/terraform/modules/app/deployment-control-plane/runner.py +4720 -0
- package/dist/terraform/modules/app/deployment-control-plane/test_runner_bundle.py +3026 -0
- package/dist/terraform/modules/app/deployment-control-plane/variables.tf +96 -0
- package/dist/terraform/modules/app/hindsight-memory/README.md +25 -23
- package/dist/terraform/modules/app/hindsight-memory/main.tf +26 -2
- package/dist/terraform/modules/app/lambda-api/eval-fanout.tf +17 -50
- package/dist/terraform/modules/app/lambda-api/handlers.tf +1290 -679
- package/dist/terraform/modules/app/lambda-api/iam-grouped.tf +933 -0
- package/dist/terraform/modules/app/lambda-api/main.tf +14 -527
- package/dist/terraform/modules/app/lambda-api/mcp-oauth.tf +3 -19
- package/dist/terraform/modules/app/lambda-api/outputs.tf +50 -6
- package/dist/terraform/modules/app/lambda-api/runtime-config.tf +163 -0
- package/dist/terraform/modules/app/lambda-api/slack-app-secrets.tf +3 -1
- package/dist/terraform/modules/app/lambda-api/stripe-secrets.tf +3 -1
- package/dist/terraform/modules/app/lambda-api/variables.tf +240 -53
- package/dist/terraform/modules/app/lambda-api/workspace-events.tf +2 -25
- package/dist/terraform/modules/app/ses-email/main.tf +143 -30
- package/dist/terraform/modules/app/static-site/main.tf +4 -3
- package/dist/terraform/modules/app/www-dns/main.tf +45 -5
- package/dist/terraform/modules/app/www-dns/outputs.tf +10 -0
- package/dist/terraform/modules/app/www-dns/variables.tf +24 -0
- package/dist/terraform/modules/data/aurora-postgres/main.tf +15 -1
- package/dist/terraform/modules/data/compliance-exports-bucket/main.tf +1 -1
- package/dist/terraform/modules/data/compliance-exports-bucket/variables.tf +6 -0
- package/dist/terraform/modules/foundation/cognito/main.tf +167 -11
- package/dist/terraform/modules/foundation/cognito/outputs.tf +5 -0
- package/dist/terraform/modules/foundation/cognito/variables.tf +110 -0
- package/dist/terraform/modules/foundation/vpc/main.tf +45 -3
- package/dist/terraform/modules/foundation/vpc/outputs.tf +20 -0
- package/dist/terraform/modules/foundation/vpc/variables.tf +18 -0
- package/dist/terraform/modules/thinkwork/README.md +71 -0
- package/dist/terraform/modules/thinkwork/main.tf +1325 -174
- package/dist/terraform/modules/thinkwork/outputs.tf +457 -24
- package/dist/terraform/modules/thinkwork/variables.tf +1169 -93
- package/dist/terraform/schema.graphql +82 -9
- package/dist/workspace-defaults/files/AGENTS.md +344 -0
- package/dist/workspace-defaults/files/CONTEXT.md +8 -0
- package/dist/workspace-defaults/files/GUARDRAILS.md +51 -0
- package/dist/workspace-defaults/files/MEMORY_GUIDE.md +65 -0
- package/dist/workspace-defaults/files/ROUTER.md +24 -0
- package/dist/workspace-defaults/files/SPACE.md +62 -0
- package/dist/workspace-defaults/files/TOOLS.md +65 -0
- package/dist/workspace-defaults/files/USER.md +40 -0
- package/dist/workspace-defaults/files/mcp.json +3 -0
- package/dist/workspace-defaults/files/memory/contacts.md +13 -0
- package/dist/workspace-defaults/files/memory/lessons.md +13 -0
- package/dist/workspace-defaults/files/memory/preferences.md +12 -0
- package/dist/workspace-defaults/files/skills/.gitkeep +1 -0
- package/dist/workspace-defaults/files/skills/artifact-builder/SKILL.md +79 -0
- package/dist/workspace-defaults/files/skills/artifact-builder/references/crm-dashboard.md +166 -0
- package/dist/workspace-defaults/files/skills/automation-loop-designer/SKILL.md +120 -0
- package/dist/workspace-defaults/files/skills/skill-creator/LICENSE.txt +202 -0
- package/dist/workspace-defaults/files/skills/skill-creator/SKILL.md +485 -0
- package/dist/workspace-defaults/files/skills/skill-creator/UPSTREAM.json +124 -0
- package/dist/workspace-defaults/files/skills/skill-creator/agents/analyzer.md +274 -0
- package/dist/workspace-defaults/files/skills/skill-creator/agents/comparator.md +202 -0
- package/dist/workspace-defaults/files/skills/skill-creator/agents/grader.md +223 -0
- package/dist/workspace-defaults/files/skills/skill-creator/assets/eval_review.html +146 -0
- package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/dist/workspace-defaults/files/skills/skill-creator/references/schemas.md +430 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/__init__.py +0 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/generate_report.py +326 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/improve_description.py +247 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/package_skill.py +136 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_eval.py +310 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_loop.py +328 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/utils.py +47 -0
- package/package.json +1 -1
- package/dist/terraform/modules/app/agentcore-flue/README.md +0 -58
- package/dist/terraform/modules/app/agentcore-flue/main.tf +0 -323
- package/dist/terraform/modules/app/agentcore-flue/outputs.tf +0 -23
- package/dist/terraform/modules/app/agentcore-flue/variables.tf +0 -97
- package/dist/terraform/modules/app/computer-runtime/README.md +0 -15
- package/dist/terraform/modules/app/computer-runtime/main.tf +0 -406
- package/dist/terraform/modules/app/computer-runtime/outputs.tf +0 -75
- package/dist/terraform/modules/app/computer-runtime/variables.tf +0 -66
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
-- Purpose: add provider-neutral Email Channel plugin state, policy, ledger, and SES compatibility tables.
|
|
2
|
+
-- Plan: docs/plans/2026-06-17-003-feat-email-channel-plugin-plan.md (U2)
|
|
3
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0170_email_channel_plugin.sql
|
|
4
|
+
-- creates: public.email_provider_installs
|
|
5
|
+
-- creates: public.email_domains
|
|
6
|
+
-- creates: public.email_readiness_checks
|
|
7
|
+
-- creates: public.email_space_policies
|
|
8
|
+
-- creates: public.email_space_sender_allowlists
|
|
9
|
+
-- creates: public.email_conversations
|
|
10
|
+
-- creates: public.email_body_objects
|
|
11
|
+
-- creates: public.email_ledger_events
|
|
12
|
+
-- creates: public.email_provider_events
|
|
13
|
+
-- creates: public.email_ses_compatibility_mappings
|
|
14
|
+
-- creates: public.uq_email_provider_installs_tenant_provider
|
|
15
|
+
-- creates: public.uq_email_provider_installs_active
|
|
16
|
+
-- creates: public.idx_email_provider_installs_tenant
|
|
17
|
+
-- creates: public.idx_email_provider_installs_provider_status
|
|
18
|
+
-- creates: public.uq_email_domains_tenant_domain
|
|
19
|
+
-- creates: public.idx_email_domains_provider
|
|
20
|
+
-- creates: public.idx_email_domains_tenant_status
|
|
21
|
+
-- creates: public.uq_email_readiness_check_scope
|
|
22
|
+
-- creates: public.idx_email_readiness_provider
|
|
23
|
+
-- creates: public.idx_email_readiness_tenant_status
|
|
24
|
+
-- creates: public.uq_email_space_policies_space
|
|
25
|
+
-- creates: public.idx_email_space_policies_provider
|
|
26
|
+
-- creates: public.uq_email_sender_allowlist_value
|
|
27
|
+
-- creates: public.idx_email_sender_allowlist_space
|
|
28
|
+
-- creates: public.idx_email_conversations_tenant_status
|
|
29
|
+
-- creates: public.idx_email_conversations_space
|
|
30
|
+
-- creates: public.idx_email_conversations_thread
|
|
31
|
+
-- creates: public.uq_email_conversations_thread_participants
|
|
32
|
+
-- creates: public.idx_email_body_objects_conversation
|
|
33
|
+
-- creates: public.idx_email_body_objects_retention
|
|
34
|
+
-- creates: public.idx_email_ledger_tenant_created
|
|
35
|
+
-- creates: public.idx_email_ledger_conversation
|
|
36
|
+
-- creates: public.idx_email_ledger_space
|
|
37
|
+
-- creates: public.idx_email_ledger_provider_message
|
|
38
|
+
-- creates: public.uq_email_provider_events_provider_event
|
|
39
|
+
-- creates: public.idx_email_provider_events_message
|
|
40
|
+
-- creates: public.idx_email_provider_events_type_created
|
|
41
|
+
-- creates: public.uq_email_ses_mapping_token
|
|
42
|
+
-- creates: public.idx_email_ses_mapping_message
|
|
43
|
+
-- creates: public.idx_email_ses_mapping_conversation
|
|
44
|
+
|
|
45
|
+
\set ON_ERROR_STOP on
|
|
46
|
+
|
|
47
|
+
BEGIN;
|
|
48
|
+
|
|
49
|
+
SET LOCAL lock_timeout = '5s';
|
|
50
|
+
SET LOCAL statement_timeout = '120s';
|
|
51
|
+
|
|
52
|
+
CREATE TABLE IF NOT EXISTS public.email_provider_installs (
|
|
53
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
54
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
55
|
+
provider text NOT NULL,
|
|
56
|
+
display_name text,
|
|
57
|
+
status text NOT NULL DEFAULT 'pending',
|
|
58
|
+
active_for_production boolean NOT NULL DEFAULT false,
|
|
59
|
+
credential_secret_ref text,
|
|
60
|
+
webhook_secret_ref text,
|
|
61
|
+
default_from_email text,
|
|
62
|
+
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
63
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
64
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
65
|
+
CONSTRAINT email_provider_installs_provider_allowed CHECK (provider IN ('resend', 'ses')),
|
|
66
|
+
CONSTRAINT email_provider_installs_status_allowed CHECK (status IN ('pending', 'ready', 'failed', 'disabled'))
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_email_provider_installs_active
|
|
70
|
+
ON public.email_provider_installs (tenant_id)
|
|
71
|
+
WHERE active_for_production = true;
|
|
72
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_email_provider_installs_tenant_provider
|
|
73
|
+
ON public.email_provider_installs (tenant_id, provider);
|
|
74
|
+
CREATE INDEX IF NOT EXISTS idx_email_provider_installs_tenant
|
|
75
|
+
ON public.email_provider_installs (tenant_id);
|
|
76
|
+
CREATE INDEX IF NOT EXISTS idx_email_provider_installs_provider_status
|
|
77
|
+
ON public.email_provider_installs (tenant_id, provider, status);
|
|
78
|
+
|
|
79
|
+
CREATE TABLE IF NOT EXISTS public.email_domains (
|
|
80
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
81
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
82
|
+
provider_install_id uuid NOT NULL REFERENCES public.email_provider_installs(id) ON DELETE CASCADE,
|
|
83
|
+
domain text NOT NULL,
|
|
84
|
+
ownership_type text NOT NULL,
|
|
85
|
+
status text NOT NULL DEFAULT 'pending',
|
|
86
|
+
sending_verified_at timestamptz,
|
|
87
|
+
inbound_verified_at timestamptz,
|
|
88
|
+
dns_records jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
89
|
+
provider_metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
90
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
91
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
92
|
+
CONSTRAINT email_domains_ownership_allowed CHECK (ownership_type IN ('thinkwork_owned', 'customer_owned')),
|
|
93
|
+
CONSTRAINT email_domains_status_allowed CHECK (status IN ('pending', 'verified', 'failed', 'disabled'))
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_email_domains_tenant_domain
|
|
97
|
+
ON public.email_domains (tenant_id, domain);
|
|
98
|
+
CREATE INDEX IF NOT EXISTS idx_email_domains_provider
|
|
99
|
+
ON public.email_domains (provider_install_id);
|
|
100
|
+
CREATE INDEX IF NOT EXISTS idx_email_domains_tenant_status
|
|
101
|
+
ON public.email_domains (tenant_id, status);
|
|
102
|
+
|
|
103
|
+
CREATE TABLE IF NOT EXISTS public.email_readiness_checks (
|
|
104
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
105
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
106
|
+
provider_install_id uuid NOT NULL REFERENCES public.email_provider_installs(id) ON DELETE CASCADE,
|
|
107
|
+
domain_id uuid REFERENCES public.email_domains(id) ON DELETE CASCADE,
|
|
108
|
+
check_key text NOT NULL,
|
|
109
|
+
status text NOT NULL DEFAULT 'pending',
|
|
110
|
+
last_checked_at timestamptz,
|
|
111
|
+
failure_code text,
|
|
112
|
+
failure_message text,
|
|
113
|
+
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
114
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
115
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
116
|
+
CONSTRAINT email_readiness_check_key_allowed CHECK (check_key IN ('credentials', 'sending_domain', 'inbound_receiving', 'webhook_signature', 'provider_events', 'loop_test')),
|
|
117
|
+
CONSTRAINT email_readiness_status_allowed CHECK (status IN ('pending', 'pass', 'fail', 'blocked'))
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_email_readiness_check_scope
|
|
121
|
+
ON public.email_readiness_checks (
|
|
122
|
+
tenant_id,
|
|
123
|
+
provider_install_id,
|
|
124
|
+
COALESCE(domain_id, '00000000-0000-0000-0000-000000000000'::uuid),
|
|
125
|
+
check_key
|
|
126
|
+
);
|
|
127
|
+
CREATE INDEX IF NOT EXISTS idx_email_readiness_provider
|
|
128
|
+
ON public.email_readiness_checks (provider_install_id);
|
|
129
|
+
CREATE INDEX IF NOT EXISTS idx_email_readiness_tenant_status
|
|
130
|
+
ON public.email_readiness_checks (tenant_id, status);
|
|
131
|
+
|
|
132
|
+
CREATE TABLE IF NOT EXISTS public.email_space_policies (
|
|
133
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
134
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
135
|
+
space_id uuid NOT NULL REFERENCES public.spaces(id) ON DELETE CASCADE,
|
|
136
|
+
provider_install_id uuid REFERENCES public.email_provider_installs(id) ON DELETE SET NULL,
|
|
137
|
+
enabled boolean NOT NULL DEFAULT false,
|
|
138
|
+
registered_users_allowed boolean NOT NULL DEFAULT true,
|
|
139
|
+
private_space_membership_required boolean NOT NULL DEFAULT true,
|
|
140
|
+
outside_sender_default text NOT NULL DEFAULT 'deny',
|
|
141
|
+
first_send_review_required boolean NOT NULL DEFAULT true,
|
|
142
|
+
policy jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
143
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
144
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
145
|
+
CONSTRAINT email_space_policies_outside_default_allowed CHECK (outside_sender_default IN ('deny', 'allowlist'))
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_email_space_policies_space
|
|
149
|
+
ON public.email_space_policies (tenant_id, space_id);
|
|
150
|
+
CREATE INDEX IF NOT EXISTS idx_email_space_policies_provider
|
|
151
|
+
ON public.email_space_policies (provider_install_id);
|
|
152
|
+
|
|
153
|
+
CREATE TABLE IF NOT EXISTS public.email_space_sender_allowlists (
|
|
154
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
155
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
156
|
+
space_id uuid NOT NULL REFERENCES public.spaces(id) ON DELETE CASCADE,
|
|
157
|
+
value_type text NOT NULL,
|
|
158
|
+
value text NOT NULL,
|
|
159
|
+
reason text,
|
|
160
|
+
created_by_user_id uuid REFERENCES public.users(id) ON DELETE SET NULL,
|
|
161
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
162
|
+
CONSTRAINT email_sender_allowlist_type_allowed CHECK (value_type IN ('email', 'domain'))
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_email_sender_allowlist_value
|
|
166
|
+
ON public.email_space_sender_allowlists (tenant_id, space_id, value_type, value);
|
|
167
|
+
CREATE INDEX IF NOT EXISTS idx_email_sender_allowlist_space
|
|
168
|
+
ON public.email_space_sender_allowlists (tenant_id, space_id);
|
|
169
|
+
|
|
170
|
+
CREATE TABLE IF NOT EXISTS public.email_conversations (
|
|
171
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
172
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
173
|
+
space_id uuid REFERENCES public.spaces(id) ON DELETE SET NULL,
|
|
174
|
+
thread_id uuid REFERENCES public.threads(id) ON DELETE SET NULL,
|
|
175
|
+
provider_install_id uuid REFERENCES public.email_provider_installs(id) ON DELETE SET NULL,
|
|
176
|
+
subject text,
|
|
177
|
+
status text NOT NULL DEFAULT 'pending_approval',
|
|
178
|
+
approved_at timestamptz,
|
|
179
|
+
approved_by_user_id uuid REFERENCES public.users(id) ON DELETE SET NULL,
|
|
180
|
+
last_message_at timestamptz,
|
|
181
|
+
participant_hash text NOT NULL,
|
|
182
|
+
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
183
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
184
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
185
|
+
CONSTRAINT email_conversations_status_allowed CHECK (status IN ('pending_approval', 'approved', 'closed', 'blocked'))
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
CREATE INDEX IF NOT EXISTS idx_email_conversations_tenant_status
|
|
189
|
+
ON public.email_conversations (tenant_id, status);
|
|
190
|
+
CREATE INDEX IF NOT EXISTS idx_email_conversations_space
|
|
191
|
+
ON public.email_conversations (tenant_id, space_id);
|
|
192
|
+
CREATE INDEX IF NOT EXISTS idx_email_conversations_thread
|
|
193
|
+
ON public.email_conversations (thread_id);
|
|
194
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_email_conversations_thread_participants
|
|
195
|
+
ON public.email_conversations (tenant_id, thread_id, participant_hash)
|
|
196
|
+
WHERE thread_id IS NOT NULL;
|
|
197
|
+
|
|
198
|
+
CREATE TABLE IF NOT EXISTS public.email_body_objects (
|
|
199
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
200
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
201
|
+
conversation_id uuid REFERENCES public.email_conversations(id) ON DELETE CASCADE,
|
|
202
|
+
direction text NOT NULL,
|
|
203
|
+
content_hash text NOT NULL,
|
|
204
|
+
object_ref text NOT NULL,
|
|
205
|
+
retention_until timestamptz NOT NULL,
|
|
206
|
+
redacted_at timestamptz,
|
|
207
|
+
redacted_by_user_id uuid REFERENCES public.users(id) ON DELETE SET NULL,
|
|
208
|
+
redaction_reason text,
|
|
209
|
+
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
210
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
211
|
+
CONSTRAINT email_body_objects_direction_allowed CHECK (direction IN ('inbound', 'outbound'))
|
|
212
|
+
);
|
|
213
|
+
|
|
214
|
+
CREATE INDEX IF NOT EXISTS idx_email_body_objects_conversation
|
|
215
|
+
ON public.email_body_objects (conversation_id);
|
|
216
|
+
CREATE INDEX IF NOT EXISTS idx_email_body_objects_retention
|
|
217
|
+
ON public.email_body_objects (tenant_id, retention_until);
|
|
218
|
+
|
|
219
|
+
CREATE TABLE IF NOT EXISTS public.email_ledger_events (
|
|
220
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
221
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
222
|
+
conversation_id uuid REFERENCES public.email_conversations(id) ON DELETE SET NULL,
|
|
223
|
+
space_id uuid REFERENCES public.spaces(id) ON DELETE SET NULL,
|
|
224
|
+
thread_id uuid REFERENCES public.threads(id) ON DELETE SET NULL,
|
|
225
|
+
message_id uuid REFERENCES public.messages(id) ON DELETE SET NULL,
|
|
226
|
+
inbox_item_id uuid REFERENCES public.inbox_items(id) ON DELETE SET NULL,
|
|
227
|
+
provider_install_id uuid REFERENCES public.email_provider_installs(id) ON DELETE SET NULL,
|
|
228
|
+
event_type text NOT NULL,
|
|
229
|
+
provider_message_id text,
|
|
230
|
+
provider_event_id text,
|
|
231
|
+
actor_user_id uuid REFERENCES public.users(id) ON DELETE SET NULL,
|
|
232
|
+
body_object_id uuid REFERENCES public.email_body_objects(id) ON DELETE SET NULL,
|
|
233
|
+
subject text,
|
|
234
|
+
from_email text,
|
|
235
|
+
to_emails jsonb NOT NULL DEFAULT '[]'::jsonb,
|
|
236
|
+
reason_code text,
|
|
237
|
+
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
238
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
239
|
+
CONSTRAINT email_ledger_events_type_allowed CHECK (event_type IN ('draft_created', 'approval_requested', 'approval_approved', 'approval_denied', 'send_blocked', 'send_attempted', 'send_succeeded', 'send_failed', 'inbound_received', 'inbound_authorized', 'inbound_rejected', 'provider_event', 'readiness_check', 'body_retained', 'body_redacted'))
|
|
240
|
+
);
|
|
241
|
+
|
|
242
|
+
CREATE INDEX IF NOT EXISTS idx_email_ledger_tenant_created
|
|
243
|
+
ON public.email_ledger_events (tenant_id, created_at);
|
|
244
|
+
CREATE INDEX IF NOT EXISTS idx_email_ledger_conversation
|
|
245
|
+
ON public.email_ledger_events (conversation_id);
|
|
246
|
+
CREATE INDEX IF NOT EXISTS idx_email_ledger_space
|
|
247
|
+
ON public.email_ledger_events (tenant_id, space_id);
|
|
248
|
+
CREATE INDEX IF NOT EXISTS idx_email_ledger_provider_message
|
|
249
|
+
ON public.email_ledger_events (tenant_id, provider_message_id);
|
|
250
|
+
|
|
251
|
+
CREATE TABLE IF NOT EXISTS public.email_provider_events (
|
|
252
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
253
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
254
|
+
provider_install_id uuid NOT NULL REFERENCES public.email_provider_installs(id) ON DELETE CASCADE,
|
|
255
|
+
ledger_event_id uuid REFERENCES public.email_ledger_events(id) ON DELETE SET NULL,
|
|
256
|
+
provider_event_id text NOT NULL,
|
|
257
|
+
provider_message_id text,
|
|
258
|
+
event_type text NOT NULL,
|
|
259
|
+
occurred_at timestamptz,
|
|
260
|
+
payload_metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
261
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
262
|
+
CONSTRAINT email_provider_events_type_allowed CHECK (event_type IN ('sent', 'delivered', 'delayed', 'failed', 'bounced', 'complained', 'opened', 'clicked', 'received'))
|
|
263
|
+
);
|
|
264
|
+
|
|
265
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_email_provider_events_provider_event
|
|
266
|
+
ON public.email_provider_events (provider_install_id, provider_event_id);
|
|
267
|
+
CREATE INDEX IF NOT EXISTS idx_email_provider_events_message
|
|
268
|
+
ON public.email_provider_events (tenant_id, provider_message_id);
|
|
269
|
+
CREATE INDEX IF NOT EXISTS idx_email_provider_events_type_created
|
|
270
|
+
ON public.email_provider_events (provider_install_id, event_type, created_at);
|
|
271
|
+
|
|
272
|
+
CREATE TABLE IF NOT EXISTS public.email_ses_compatibility_mappings (
|
|
273
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
274
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
275
|
+
provider_install_id uuid NOT NULL REFERENCES public.email_provider_installs(id) ON DELETE CASCADE,
|
|
276
|
+
reply_token_id uuid REFERENCES public.email_reply_tokens(id) ON DELETE SET NULL,
|
|
277
|
+
conversation_id uuid REFERENCES public.email_conversations(id) ON DELETE SET NULL,
|
|
278
|
+
ses_message_id text,
|
|
279
|
+
legacy_thread_id uuid REFERENCES public.threads(id) ON DELETE SET NULL,
|
|
280
|
+
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
281
|
+
created_at timestamptz NOT NULL DEFAULT now()
|
|
282
|
+
);
|
|
283
|
+
|
|
284
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_email_ses_mapping_token
|
|
285
|
+
ON public.email_ses_compatibility_mappings (reply_token_id);
|
|
286
|
+
CREATE INDEX IF NOT EXISTS idx_email_ses_mapping_message
|
|
287
|
+
ON public.email_ses_compatibility_mappings (tenant_id, ses_message_id);
|
|
288
|
+
CREATE INDEX IF NOT EXISTS idx_email_ses_mapping_conversation
|
|
289
|
+
ON public.email_ses_compatibility_mappings (conversation_id);
|
|
290
|
+
|
|
291
|
+
COMMIT;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
-- Purpose: allow Twenty task-event server-contract smoke without native Twenty app install.
|
|
2
|
+
-- Plan: THNK-33 Twenty Server Contract Verification (server_contract_verified only)
|
|
3
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0171_linked_task_external_providers.sql
|
|
4
|
+
-- creates-constraint: public.linked_tasks.linked_tasks_provider_allowed
|
|
5
|
+
-- creates-constraint: public.linked_task_events.linked_task_events_provider_allowed
|
|
6
|
+
-- creates-constraint: public.linked_task_events.linked_task_events_type_allowed
|
|
7
|
+
|
|
8
|
+
\set ON_ERROR_STOP on
|
|
9
|
+
|
|
10
|
+
BEGIN;
|
|
11
|
+
|
|
12
|
+
SET LOCAL lock_timeout = '5s';
|
|
13
|
+
SET LOCAL statement_timeout = '120s';
|
|
14
|
+
|
|
15
|
+
ALTER TABLE public.linked_tasks
|
|
16
|
+
DROP CONSTRAINT IF EXISTS linked_tasks_provider_allowed,
|
|
17
|
+
ADD CONSTRAINT linked_tasks_provider_allowed
|
|
18
|
+
CHECK (provider IN ('lastmile', 'thinkwork', 'twenty'));
|
|
19
|
+
|
|
20
|
+
ALTER TABLE public.linked_task_events
|
|
21
|
+
DROP CONSTRAINT IF EXISTS linked_task_events_provider_allowed,
|
|
22
|
+
ADD CONSTRAINT linked_task_events_provider_allowed
|
|
23
|
+
CHECK (provider IN ('lastmile', 'thinkwork', 'twenty'));
|
|
24
|
+
|
|
25
|
+
ALTER TABLE public.linked_task_events
|
|
26
|
+
DROP CONSTRAINT IF EXISTS linked_task_events_type_allowed,
|
|
27
|
+
ADD CONSTRAINT linked_task_events_type_allowed
|
|
28
|
+
CHECK (event_type IN ('created', 'status_changed', 'completed', 'blocked', 'reassigned', 'due_date_changed', 'comment_added', 'sync_failed', 'writeback_posted'));
|
|
29
|
+
|
|
30
|
+
COMMIT;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
-- creates-constraint: public.email_provider_installs.email_provider_installs_provider_allowed
|
|
2
|
+
|
|
3
|
+
ALTER TABLE public.email_provider_installs
|
|
4
|
+
DROP CONSTRAINT IF EXISTS email_provider_installs_provider_allowed;
|
|
5
|
+
|
|
6
|
+
ALTER TABLE public.email_provider_installs
|
|
7
|
+
ADD CONSTRAINT email_provider_installs_provider_allowed
|
|
8
|
+
CHECK (provider IN ('resend', 'sendgrid', 'ses'));
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
-- creates: public.auth_provider_resources
|
|
2
|
+
-- creates: public.tenant_auth_provider_references
|
|
3
|
+
-- creates: public.uq_auth_provider_resources_cognito_idp
|
|
4
|
+
-- creates: public.idx_auth_provider_resources_provider_status
|
|
5
|
+
-- creates: public.uq_tenant_auth_provider_references_install_resource
|
|
6
|
+
-- creates: public.idx_tenant_auth_provider_references_tenant_status
|
|
7
|
+
-- creates: public.idx_tenant_auth_provider_references_resource
|
|
8
|
+
|
|
9
|
+
ALTER TABLE public.plugin_components
|
|
10
|
+
DROP CONSTRAINT IF EXISTS plugin_components_type_allowed;
|
|
11
|
+
|
|
12
|
+
ALTER TABLE public.plugin_components
|
|
13
|
+
ADD CONSTRAINT plugin_components_type_allowed
|
|
14
|
+
CHECK (component_type IN ('mcp-server', 'skills', 'infrastructure', 'ui-surface', 'auth-provider'));
|
|
15
|
+
|
|
16
|
+
CREATE TABLE IF NOT EXISTS public.auth_provider_resources (
|
|
17
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
18
|
+
provider_key text NOT NULL,
|
|
19
|
+
display_name text NOT NULL,
|
|
20
|
+
cognito_user_pool_id text NOT NULL,
|
|
21
|
+
cognito_app_client_ids jsonb DEFAULT '[]'::jsonb NOT NULL,
|
|
22
|
+
cognito_identity_provider_name text NOT NULL,
|
|
23
|
+
issuer_url text NOT NULL,
|
|
24
|
+
client_id text NOT NULL,
|
|
25
|
+
client_secret_ref text NOT NULL,
|
|
26
|
+
authorize_scopes text DEFAULT 'openid profile email' NOT NULL,
|
|
27
|
+
public_option_mode text DEFAULT 'single_sso' NOT NULL,
|
|
28
|
+
provider_options jsonb DEFAULT '[]'::jsonb NOT NULL,
|
|
29
|
+
validation_status text DEFAULT 'unconfigured' NOT NULL,
|
|
30
|
+
public_options_published boolean DEFAULT false NOT NULL,
|
|
31
|
+
last_validated_at timestamp with time zone,
|
|
32
|
+
last_error_code text,
|
|
33
|
+
diagnostics jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
34
|
+
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
35
|
+
updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
36
|
+
CONSTRAINT auth_provider_resources_validation_status_allowed
|
|
37
|
+
CHECK (validation_status IN ('unconfigured', 'validating', 'valid', 'partially_valid', 'invalid', 'rotating_secret', 'disabled')),
|
|
38
|
+
CONSTRAINT auth_provider_resources_public_option_mode_allowed
|
|
39
|
+
CHECK (public_option_mode IN ('single_sso', 'provider_specific')),
|
|
40
|
+
CONSTRAINT auth_provider_resources_no_public_without_valid
|
|
41
|
+
CHECK (public_options_published = false OR validation_status IN ('valid', 'partially_valid'))
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_auth_provider_resources_cognito_idp
|
|
45
|
+
ON public.auth_provider_resources (
|
|
46
|
+
provider_key,
|
|
47
|
+
cognito_user_pool_id,
|
|
48
|
+
cognito_identity_provider_name
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
CREATE INDEX IF NOT EXISTS idx_auth_provider_resources_provider_status
|
|
52
|
+
ON public.auth_provider_resources (provider_key, validation_status);
|
|
53
|
+
|
|
54
|
+
CREATE TABLE IF NOT EXISTS public.tenant_auth_provider_references (
|
|
55
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
56
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
57
|
+
plugin_install_id uuid NOT NULL REFERENCES public.plugin_installs(id) ON DELETE CASCADE,
|
|
58
|
+
auth_provider_resource_id uuid NOT NULL REFERENCES public.auth_provider_resources(id) ON DELETE CASCADE,
|
|
59
|
+
status text DEFAULT 'disabled' NOT NULL,
|
|
60
|
+
hostnames jsonb DEFAULT '[]'::jsonb NOT NULL,
|
|
61
|
+
public_option_label text DEFAULT 'Continue with SSO' NOT NULL,
|
|
62
|
+
enabled_at timestamp with time zone,
|
|
63
|
+
disabled_at timestamp with time zone,
|
|
64
|
+
last_error_code text,
|
|
65
|
+
metadata jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
66
|
+
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
67
|
+
updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
68
|
+
CONSTRAINT tenant_auth_provider_references_status_allowed
|
|
69
|
+
CHECK (status IN ('disabled', 'enabled', 'invalid', 'decommissioning'))
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_tenant_auth_provider_references_install_resource
|
|
73
|
+
ON public.tenant_auth_provider_references (
|
|
74
|
+
tenant_id,
|
|
75
|
+
plugin_install_id,
|
|
76
|
+
auth_provider_resource_id
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
CREATE INDEX IF NOT EXISTS idx_tenant_auth_provider_references_tenant_status
|
|
80
|
+
ON public.tenant_auth_provider_references (tenant_id, status);
|
|
81
|
+
|
|
82
|
+
CREATE INDEX IF NOT EXISTS idx_tenant_auth_provider_references_resource
|
|
83
|
+
ON public.tenant_auth_provider_references (auth_provider_resource_id);
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
-- THNK-43 U2: short-lived WorkOS primary-auth bridge records.
|
|
2
|
+
-- creates: public.workos_auth_bridges
|
|
3
|
+
-- creates: public.uq_workos_auth_bridges_code_digest
|
|
4
|
+
-- creates: public.idx_workos_auth_bridges_tenant_status
|
|
5
|
+
-- creates: public.idx_workos_auth_bridges_reference
|
|
6
|
+
|
|
7
|
+
CREATE TABLE IF NOT EXISTS workos_auth_bridges (
|
|
8
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
9
|
+
tenant_id uuid NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
|
|
10
|
+
tenant_auth_provider_reference_id uuid NOT NULL REFERENCES tenant_auth_provider_references(id) ON DELETE CASCADE,
|
|
11
|
+
auth_provider_resource_id uuid NOT NULL REFERENCES auth_provider_resources(id) ON DELETE CASCADE,
|
|
12
|
+
bridge_code_digest text NOT NULL,
|
|
13
|
+
workos_user_id text NOT NULL,
|
|
14
|
+
workos_session_id text NOT NULL,
|
|
15
|
+
workos_email text NOT NULL,
|
|
16
|
+
workos_email_verified boolean NOT NULL DEFAULT false,
|
|
17
|
+
workos_profile jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
18
|
+
state_nonce text NOT NULL,
|
|
19
|
+
redirect_uri text NOT NULL,
|
|
20
|
+
return_to text NOT NULL,
|
|
21
|
+
status text NOT NULL DEFAULT 'pending',
|
|
22
|
+
expires_at timestamptz NOT NULL,
|
|
23
|
+
consumed_at timestamptz,
|
|
24
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
25
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
26
|
+
CONSTRAINT workos_auth_bridges_status_allowed
|
|
27
|
+
CHECK (status IN ('pending', 'consumed', 'expired'))
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_workos_auth_bridges_code_digest
|
|
31
|
+
ON workos_auth_bridges (bridge_code_digest);
|
|
32
|
+
|
|
33
|
+
CREATE INDEX IF NOT EXISTS idx_workos_auth_bridges_tenant_status
|
|
34
|
+
ON workos_auth_bridges (tenant_id, status, expires_at);
|
|
35
|
+
|
|
36
|
+
CREATE INDEX IF NOT EXISTS idx_workos_auth_bridges_reference
|
|
37
|
+
ON workos_auth_bridges (tenant_auth_provider_reference_id);
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
-- 0175_workos_auth_sessions.sql
|
|
2
|
+
-- creates-column: public.workos_auth_bridges.workos_session_expires_at
|
|
3
|
+
-- creates: public.workos_auth_sessions
|
|
4
|
+
-- creates: public.idx_workos_auth_sessions_cognito_active
|
|
5
|
+
-- creates: public.idx_workos_auth_sessions_user_active
|
|
6
|
+
-- creates: public.idx_workos_auth_sessions_workos_session
|
|
7
|
+
|
|
8
|
+
ALTER TABLE workos_auth_bridges
|
|
9
|
+
ADD COLUMN IF NOT EXISTS workos_session_expires_at timestamptz;
|
|
10
|
+
|
|
11
|
+
CREATE TABLE IF NOT EXISTS workos_auth_sessions (
|
|
12
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
13
|
+
tenant_id uuid NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
|
|
14
|
+
user_id uuid NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
15
|
+
tenant_auth_provider_reference_id uuid NOT NULL REFERENCES tenant_auth_provider_references(id) ON DELETE CASCADE,
|
|
16
|
+
auth_provider_resource_id uuid NOT NULL REFERENCES auth_provider_resources(id) ON DELETE CASCADE,
|
|
17
|
+
cognito_principal_id text NOT NULL,
|
|
18
|
+
cognito_username text NOT NULL,
|
|
19
|
+
workos_user_id text NOT NULL,
|
|
20
|
+
workos_session_id text NOT NULL,
|
|
21
|
+
workos_email text NOT NULL,
|
|
22
|
+
status text NOT NULL DEFAULT 'active',
|
|
23
|
+
expires_at timestamptz NOT NULL,
|
|
24
|
+
logged_out_at timestamptz,
|
|
25
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
26
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
27
|
+
CONSTRAINT workos_auth_sessions_status_allowed
|
|
28
|
+
CHECK (status IN ('active', 'logged_out', 'expired'))
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
CREATE INDEX IF NOT EXISTS idx_workos_auth_sessions_cognito_active
|
|
32
|
+
ON workos_auth_sessions (cognito_principal_id, status, expires_at);
|
|
33
|
+
|
|
34
|
+
CREATE INDEX IF NOT EXISTS idx_workos_auth_sessions_user_active
|
|
35
|
+
ON workos_auth_sessions (tenant_id, user_id, status, expires_at);
|
|
36
|
+
|
|
37
|
+
CREATE INDEX IF NOT EXISTS idx_workos_auth_sessions_workos_session
|
|
38
|
+
ON workos_auth_sessions (workos_session_id);
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
-- n8n agent-step bridge run ledger.
|
|
2
|
+
--
|
|
3
|
+
-- Apply manually before deploying bridge endpoint code:
|
|
4
|
+
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0176_n8n_agent_step_runs.sql
|
|
5
|
+
--
|
|
6
|
+
-- creates: public.n8n_agent_step_runs
|
|
7
|
+
-- creates: public.n8n_agent_step_runs_tenant_idempotency_uidx
|
|
8
|
+
-- creates: public.n8n_agent_step_runs_tenant_status_idx
|
|
9
|
+
-- creates: public.n8n_agent_step_runs_thread_idx
|
|
10
|
+
-- creates: public.n8n_agent_step_runs_n8n_execution_idx
|
|
11
|
+
-- creates: public.n8n_agent_step_runs_due_expiry_idx
|
|
12
|
+
-- creates: public.n8n_agent_step_runs_resume_pending_idx
|
|
13
|
+
-- creates-constraint: public.n8n_agent_step_runs.n8n_agent_step_runs_status_check
|
|
14
|
+
-- creates-constraint: public.n8n_agent_step_runs.n8n_agent_step_runs_resume_status_check
|
|
15
|
+
-- creates-constraint: public.n8n_agent_step_runs.n8n_agent_step_runs_timeout_bounds_check
|
|
16
|
+
-- creates-constraint: public.n8n_agent_step_runs.n8n_agent_step_runs_terminal_state_check
|
|
17
|
+
|
|
18
|
+
CREATE TABLE IF NOT EXISTS "n8n_agent_step_runs" (
|
|
19
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
20
|
+
"tenant_id" uuid NOT NULL REFERENCES "tenants"("id") ON DELETE cascade,
|
|
21
|
+
"plugin_install_id" uuid REFERENCES "plugin_installs"("id") ON DELETE set null,
|
|
22
|
+
"managed_application_id" uuid REFERENCES "managed_applications"("id") ON DELETE set null,
|
|
23
|
+
"space_id" uuid NOT NULL REFERENCES "spaces"("id") ON DELETE restrict,
|
|
24
|
+
"agent_id" uuid REFERENCES "agents"("id") ON DELETE set null,
|
|
25
|
+
"thread_id" uuid REFERENCES "threads"("id") ON DELETE set null,
|
|
26
|
+
"thread_turn_id" uuid REFERENCES "thread_turns"("id") ON DELETE set null,
|
|
27
|
+
"opening_message_id" uuid REFERENCES "messages"("id") ON DELETE set null,
|
|
28
|
+
"status" text NOT NULL DEFAULT 'accepted',
|
|
29
|
+
"resume_status" text NOT NULL DEFAULT 'not_ready',
|
|
30
|
+
"workflow_id" text NOT NULL,
|
|
31
|
+
"workflow_name" text,
|
|
32
|
+
"execution_id" text NOT NULL,
|
|
33
|
+
"step_id" text NOT NULL,
|
|
34
|
+
"correlation_id" text NOT NULL,
|
|
35
|
+
"request_id" text,
|
|
36
|
+
"idempotency_key" text NOT NULL,
|
|
37
|
+
"instructions_preview" text,
|
|
38
|
+
"input_preview" text,
|
|
39
|
+
"request_metadata" jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
40
|
+
"resume_url_secret_ref" text,
|
|
41
|
+
"resume_url_host" text,
|
|
42
|
+
"resume_url_path" text,
|
|
43
|
+
"timeout_seconds" integer NOT NULL,
|
|
44
|
+
"expires_at" timestamp with time zone NOT NULL,
|
|
45
|
+
"result_payload" jsonb,
|
|
46
|
+
"output_payload" jsonb,
|
|
47
|
+
"error_payload" jsonb,
|
|
48
|
+
"summary" text,
|
|
49
|
+
"links" jsonb,
|
|
50
|
+
"resume_attempt_count" integer NOT NULL DEFAULT 0,
|
|
51
|
+
"next_resume_attempt_at" timestamp with time zone,
|
|
52
|
+
"last_resume_attempt_at" timestamp with time zone,
|
|
53
|
+
"last_resume_http_status" integer,
|
|
54
|
+
"last_resume_error" text,
|
|
55
|
+
"resumed_at" timestamp with time zone,
|
|
56
|
+
"terminal_at" timestamp with time zone,
|
|
57
|
+
"accepted_at" timestamp with time zone NOT NULL DEFAULT now(),
|
|
58
|
+
"created_at" timestamp with time zone NOT NULL DEFAULT now(),
|
|
59
|
+
"updated_at" timestamp with time zone NOT NULL DEFAULT now(),
|
|
60
|
+
CONSTRAINT "n8n_agent_step_runs_status_check"
|
|
61
|
+
CHECK ("status" IN (
|
|
62
|
+
'accepted',
|
|
63
|
+
'waiting',
|
|
64
|
+
'awaiting_human',
|
|
65
|
+
'resume_pending',
|
|
66
|
+
'resuming',
|
|
67
|
+
'resumed',
|
|
68
|
+
'resume_failed',
|
|
69
|
+
'failed',
|
|
70
|
+
'expired'
|
|
71
|
+
)),
|
|
72
|
+
CONSTRAINT "n8n_agent_step_runs_resume_status_check"
|
|
73
|
+
CHECK ("resume_status" IN (
|
|
74
|
+
'not_ready',
|
|
75
|
+
'pending',
|
|
76
|
+
'resuming',
|
|
77
|
+
'resumed',
|
|
78
|
+
'failed'
|
|
79
|
+
)),
|
|
80
|
+
CONSTRAINT "n8n_agent_step_runs_timeout_bounds_check"
|
|
81
|
+
CHECK ("timeout_seconds" BETWEEN 300 AND 604800),
|
|
82
|
+
CONSTRAINT "n8n_agent_step_runs_terminal_state_check"
|
|
83
|
+
CHECK (
|
|
84
|
+
"status" NOT IN ('resumed', 'resume_failed', 'failed', 'expired')
|
|
85
|
+
OR "terminal_at" IS NOT NULL
|
|
86
|
+
)
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "n8n_agent_step_runs_tenant_idempotency_uidx"
|
|
90
|
+
ON "n8n_agent_step_runs" ("tenant_id", "idempotency_key");
|
|
91
|
+
|
|
92
|
+
CREATE INDEX IF NOT EXISTS "n8n_agent_step_runs_tenant_status_idx"
|
|
93
|
+
ON "n8n_agent_step_runs" ("tenant_id", "status");
|
|
94
|
+
|
|
95
|
+
CREATE INDEX IF NOT EXISTS "n8n_agent_step_runs_thread_idx"
|
|
96
|
+
ON "n8n_agent_step_runs" ("tenant_id", "thread_id");
|
|
97
|
+
|
|
98
|
+
CREATE INDEX IF NOT EXISTS "n8n_agent_step_runs_n8n_execution_idx"
|
|
99
|
+
ON "n8n_agent_step_runs" ("tenant_id", "workflow_id", "execution_id");
|
|
100
|
+
|
|
101
|
+
CREATE INDEX IF NOT EXISTS "n8n_agent_step_runs_due_expiry_idx"
|
|
102
|
+
ON "n8n_agent_step_runs" ("tenant_id", "expires_at")
|
|
103
|
+
WHERE "status" IN ('accepted', 'waiting', 'awaiting_human');
|
|
104
|
+
|
|
105
|
+
CREATE INDEX IF NOT EXISTS "n8n_agent_step_runs_resume_pending_idx"
|
|
106
|
+
ON "n8n_agent_step_runs" ("tenant_id", "next_resume_attempt_at")
|
|
107
|
+
WHERE "status" = 'resume_pending';
|