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,171 @@
|
|
|
1
|
+
-- Purpose: add user-level cost attribution and user budget policy support.
|
|
2
|
+
-- Plan: docs/plans/2026-06-05-002-feat-user-cost-budgets-plan.md U1
|
|
3
|
+
-- Apply manually (no CI migration runner):
|
|
4
|
+
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0148_user_cost_attribution.sql
|
|
5
|
+
-- Pre-flight:
|
|
6
|
+
-- SELECT scope, count(*) FROM public.budget_policies GROUP BY scope;
|
|
7
|
+
-- SELECT count(*) FROM public.cost_events WHERE user_id IS NULL;
|
|
8
|
+
-- SELECT column_name FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'cost_events' AND column_name = 'user_id';
|
|
9
|
+
-- SELECT column_name FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'budget_policies' AND column_name = 'user_id';
|
|
10
|
+
-- SELECT column_name FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'scheduled_jobs' AND column_name = 'budget_paused';
|
|
11
|
+
-- creates-column: public.cost_events.user_id
|
|
12
|
+
-- creates-column: public.budget_policies.user_id
|
|
13
|
+
-- creates-column: public.scheduled_jobs.budget_paused
|
|
14
|
+
-- creates-column: public.scheduled_jobs.budget_paused_at
|
|
15
|
+
-- creates-column: public.scheduled_jobs.budget_paused_reason
|
|
16
|
+
-- creates: public.idx_cost_events_user_created
|
|
17
|
+
-- creates: public.idx_budget_policies_user
|
|
18
|
+
-- creates: public.idx_scheduled_jobs_budget_paused
|
|
19
|
+
-- creates-constraint: public.cost_events.cost_events_user_id_users_id_fk
|
|
20
|
+
-- creates-constraint: public.budget_policies.budget_policies_user_id_users_id_fk
|
|
21
|
+
-- creates-constraint: public.budget_policies.budget_policies_scope_check
|
|
22
|
+
-- creates-constraint: public.budget_policies.budget_policies_scope_shape_check
|
|
23
|
+
|
|
24
|
+
\set ON_ERROR_STOP on
|
|
25
|
+
|
|
26
|
+
SET lock_timeout = '5s';
|
|
27
|
+
SET statement_timeout = '15min';
|
|
28
|
+
|
|
29
|
+
SELECT pg_advisory_lock(hashtext('migration:0148_user_cost_attribution'));
|
|
30
|
+
|
|
31
|
+
ALTER TABLE public.cost_events
|
|
32
|
+
ADD COLUMN IF NOT EXISTS user_id uuid;
|
|
33
|
+
|
|
34
|
+
ALTER TABLE public.budget_policies
|
|
35
|
+
ADD COLUMN IF NOT EXISTS user_id uuid;
|
|
36
|
+
|
|
37
|
+
ALTER TABLE public.scheduled_jobs
|
|
38
|
+
ADD COLUMN IF NOT EXISTS budget_paused boolean NOT NULL DEFAULT false,
|
|
39
|
+
ADD COLUMN IF NOT EXISTS budget_paused_at timestamptz,
|
|
40
|
+
ADD COLUMN IF NOT EXISTS budget_paused_reason text;
|
|
41
|
+
|
|
42
|
+
DO $$
|
|
43
|
+
BEGIN
|
|
44
|
+
IF NOT EXISTS (
|
|
45
|
+
SELECT 1
|
|
46
|
+
FROM pg_constraint
|
|
47
|
+
WHERE conname = 'cost_events_user_id_users_id_fk'
|
|
48
|
+
AND conrelid = 'public.cost_events'::regclass
|
|
49
|
+
) THEN
|
|
50
|
+
ALTER TABLE public.cost_events
|
|
51
|
+
ADD CONSTRAINT cost_events_user_id_users_id_fk
|
|
52
|
+
FOREIGN KEY (user_id)
|
|
53
|
+
REFERENCES public.users(id)
|
|
54
|
+
NOT VALID;
|
|
55
|
+
END IF;
|
|
56
|
+
END $$;
|
|
57
|
+
|
|
58
|
+
DO $$
|
|
59
|
+
BEGIN
|
|
60
|
+
IF NOT EXISTS (
|
|
61
|
+
SELECT 1
|
|
62
|
+
FROM pg_constraint
|
|
63
|
+
WHERE conname = 'budget_policies_user_id_users_id_fk'
|
|
64
|
+
AND conrelid = 'public.budget_policies'::regclass
|
|
65
|
+
) THEN
|
|
66
|
+
ALTER TABLE public.budget_policies
|
|
67
|
+
ADD CONSTRAINT budget_policies_user_id_users_id_fk
|
|
68
|
+
FOREIGN KEY (user_id)
|
|
69
|
+
REFERENCES public.users(id)
|
|
70
|
+
NOT VALID;
|
|
71
|
+
END IF;
|
|
72
|
+
END $$;
|
|
73
|
+
|
|
74
|
+
DO $$
|
|
75
|
+
BEGIN
|
|
76
|
+
IF NOT EXISTS (
|
|
77
|
+
SELECT 1
|
|
78
|
+
FROM pg_constraint
|
|
79
|
+
WHERE conname = 'budget_policies_scope_check'
|
|
80
|
+
AND conrelid = 'public.budget_policies'::regclass
|
|
81
|
+
) THEN
|
|
82
|
+
ALTER TABLE public.budget_policies
|
|
83
|
+
ADD CONSTRAINT budget_policies_scope_check
|
|
84
|
+
CHECK (scope IN ('tenant', 'agent', 'user'))
|
|
85
|
+
NOT VALID;
|
|
86
|
+
END IF;
|
|
87
|
+
END $$;
|
|
88
|
+
|
|
89
|
+
DO $$
|
|
90
|
+
BEGIN
|
|
91
|
+
IF NOT EXISTS (
|
|
92
|
+
SELECT 1
|
|
93
|
+
FROM pg_constraint
|
|
94
|
+
WHERE conname = 'budget_policies_scope_shape_check'
|
|
95
|
+
AND conrelid = 'public.budget_policies'::regclass
|
|
96
|
+
) THEN
|
|
97
|
+
ALTER TABLE public.budget_policies
|
|
98
|
+
ADD CONSTRAINT budget_policies_scope_shape_check
|
|
99
|
+
CHECK (
|
|
100
|
+
(scope = 'tenant' AND agent_id IS NULL AND user_id IS NULL)
|
|
101
|
+
OR (scope = 'agent' AND agent_id IS NOT NULL AND user_id IS NULL)
|
|
102
|
+
OR (scope = 'user' AND agent_id IS NULL AND user_id IS NOT NULL)
|
|
103
|
+
)
|
|
104
|
+
NOT VALID;
|
|
105
|
+
END IF;
|
|
106
|
+
END $$;
|
|
107
|
+
|
|
108
|
+
DROP PROCEDURE IF EXISTS public.backfill_cost_events_user_id_0148(integer);
|
|
109
|
+
|
|
110
|
+
CREATE PROCEDURE public.backfill_cost_events_user_id_0148(batch_size integer)
|
|
111
|
+
LANGUAGE plpgsql
|
|
112
|
+
AS $$
|
|
113
|
+
DECLARE
|
|
114
|
+
updated_count integer;
|
|
115
|
+
BEGIN
|
|
116
|
+
LOOP
|
|
117
|
+
WITH batch AS (
|
|
118
|
+
SELECT ce.id, t.user_id
|
|
119
|
+
FROM public.cost_events ce
|
|
120
|
+
JOIN public.threads t
|
|
121
|
+
ON t.id = ce.thread_id
|
|
122
|
+
AND t.tenant_id = ce.tenant_id
|
|
123
|
+
WHERE ce.user_id IS NULL
|
|
124
|
+
AND t.user_id IS NOT NULL
|
|
125
|
+
ORDER BY ce.created_at, ce.id
|
|
126
|
+
LIMIT batch_size
|
|
127
|
+
FOR UPDATE OF ce SKIP LOCKED
|
|
128
|
+
)
|
|
129
|
+
UPDATE public.cost_events ce
|
|
130
|
+
SET user_id = batch.user_id
|
|
131
|
+
FROM batch
|
|
132
|
+
WHERE ce.id = batch.id;
|
|
133
|
+
|
|
134
|
+
GET DIAGNOSTICS updated_count = ROW_COUNT;
|
|
135
|
+
RAISE NOTICE '0148_user_cost_attribution: backfilled % cost_events rows', updated_count;
|
|
136
|
+
EXIT WHEN updated_count = 0;
|
|
137
|
+
|
|
138
|
+
COMMIT;
|
|
139
|
+
END LOOP;
|
|
140
|
+
END;
|
|
141
|
+
$$;
|
|
142
|
+
|
|
143
|
+
CALL public.backfill_cost_events_user_id_0148(5000);
|
|
144
|
+
|
|
145
|
+
DROP PROCEDURE IF EXISTS public.backfill_cost_events_user_id_0148(integer);
|
|
146
|
+
|
|
147
|
+
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_cost_events_user_created
|
|
148
|
+
ON public.cost_events (tenant_id, user_id, created_at);
|
|
149
|
+
|
|
150
|
+
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_budget_policies_user
|
|
151
|
+
ON public.budget_policies (tenant_id, user_id);
|
|
152
|
+
|
|
153
|
+
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_scheduled_jobs_budget_paused
|
|
154
|
+
ON public.scheduled_jobs (tenant_id, budget_paused);
|
|
155
|
+
|
|
156
|
+
ALTER TABLE public.cost_events
|
|
157
|
+
VALIDATE CONSTRAINT cost_events_user_id_users_id_fk;
|
|
158
|
+
|
|
159
|
+
ALTER TABLE public.budget_policies
|
|
160
|
+
VALIDATE CONSTRAINT budget_policies_user_id_users_id_fk;
|
|
161
|
+
|
|
162
|
+
ALTER TABLE public.budget_policies
|
|
163
|
+
VALIDATE CONSTRAINT budget_policies_scope_check;
|
|
164
|
+
|
|
165
|
+
ALTER TABLE public.budget_policies
|
|
166
|
+
VALIDATE CONSTRAINT budget_policies_scope_shape_check;
|
|
167
|
+
|
|
168
|
+
SELECT pg_advisory_unlock(hashtext('migration:0148_user_cost_attribution'));
|
|
169
|
+
|
|
170
|
+
RESET statement_timeout;
|
|
171
|
+
RESET lock_timeout;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
-- Purpose: add explicit ownership metadata for ThinkWork-managed MCP servers.
|
|
2
|
+
-- Plan: docs/plans/2026-06-06-003-feat-twenty-crm-mcp-oauth-plan.md U1
|
|
3
|
+
-- Apply manually (no CI migration runner):
|
|
4
|
+
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0149_managed_mcp_servers.sql
|
|
5
|
+
-- Pre-flight:
|
|
6
|
+
-- SELECT column_name FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'tenant_mcp_servers' AND column_name IN ('management_source', 'managed_application_key');
|
|
7
|
+
-- SELECT to_regclass('public.uq_tenant_mcp_servers_managed_application');
|
|
8
|
+
-- creates-column: public.tenant_mcp_servers.management_source
|
|
9
|
+
-- creates-column: public.tenant_mcp_servers.managed_application_key
|
|
10
|
+
-- creates: public.uq_tenant_mcp_servers_managed_application
|
|
11
|
+
-- creates-constraint: public.tenant_mcp_servers.tenant_mcp_servers_management_source_check_v2
|
|
12
|
+
-- creates-constraint: public.tenant_mcp_servers.tenant_mcp_servers_managed_application_shape_check_v2
|
|
13
|
+
|
|
14
|
+
\set ON_ERROR_STOP on
|
|
15
|
+
|
|
16
|
+
SET lock_timeout = '5s';
|
|
17
|
+
SET statement_timeout = '15min';
|
|
18
|
+
|
|
19
|
+
BEGIN;
|
|
20
|
+
|
|
21
|
+
SELECT pg_advisory_xact_lock(hashtext('migration:0149_managed_mcp_servers'));
|
|
22
|
+
|
|
23
|
+
ALTER TABLE public.tenant_mcp_servers
|
|
24
|
+
ADD COLUMN IF NOT EXISTS management_source text NOT NULL DEFAULT 'manual',
|
|
25
|
+
ADD COLUMN IF NOT EXISTS managed_application_key text;
|
|
26
|
+
|
|
27
|
+
DO $$
|
|
28
|
+
BEGIN
|
|
29
|
+
IF NOT EXISTS (
|
|
30
|
+
SELECT 1
|
|
31
|
+
FROM pg_constraint
|
|
32
|
+
WHERE conname = 'tenant_mcp_servers_management_source_check'
|
|
33
|
+
AND conrelid = 'public.tenant_mcp_servers'::regclass
|
|
34
|
+
) THEN
|
|
35
|
+
ALTER TABLE public.tenant_mcp_servers
|
|
36
|
+
ADD CONSTRAINT tenant_mcp_servers_management_source_check
|
|
37
|
+
CHECK (management_source IN ('manual', 'managed_application'))
|
|
38
|
+
NOT VALID;
|
|
39
|
+
END IF;
|
|
40
|
+
END $$;
|
|
41
|
+
|
|
42
|
+
DO $$
|
|
43
|
+
BEGIN
|
|
44
|
+
IF NOT EXISTS (
|
|
45
|
+
SELECT 1
|
|
46
|
+
FROM pg_constraint
|
|
47
|
+
WHERE conname = 'tenant_mcp_servers_managed_application_shape_check'
|
|
48
|
+
AND conrelid = 'public.tenant_mcp_servers'::regclass
|
|
49
|
+
) THEN
|
|
50
|
+
ALTER TABLE public.tenant_mcp_servers
|
|
51
|
+
ADD CONSTRAINT tenant_mcp_servers_managed_application_shape_check
|
|
52
|
+
CHECK (
|
|
53
|
+
(management_source = 'manual' AND managed_application_key IS NULL)
|
|
54
|
+
OR (management_source = 'managed_application' AND managed_application_key IS NOT NULL)
|
|
55
|
+
)
|
|
56
|
+
NOT VALID;
|
|
57
|
+
END IF;
|
|
58
|
+
END $$;
|
|
59
|
+
|
|
60
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_tenant_mcp_servers_managed_application
|
|
61
|
+
ON public.tenant_mcp_servers (tenant_id, managed_application_key)
|
|
62
|
+
WHERE managed_application_key IS NOT NULL;
|
|
63
|
+
|
|
64
|
+
COMMIT;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
-- Purpose: allow tenant admins to approve the model catalog per user.
|
|
2
|
+
-- Plan: docs/plans/2026-06-06-004-feat-model-stacking-tool-routing-plan.md U1
|
|
3
|
+
-- Apply manually (no CI migration runner):
|
|
4
|
+
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0149_user_model_approvals.sql
|
|
5
|
+
-- Pre-flight:
|
|
6
|
+
-- SELECT count(*) FROM public.users WHERE tenant_id IS NOT NULL;
|
|
7
|
+
-- SELECT model_id, is_available FROM public.model_catalog ORDER BY display_name;
|
|
8
|
+
-- creates: public.user_model_approvals
|
|
9
|
+
-- creates: public.uq_user_model_approvals_tenant_user_model
|
|
10
|
+
-- creates: public.idx_user_model_approvals_tenant_user
|
|
11
|
+
-- creates: public.idx_user_model_approvals_model
|
|
12
|
+
-- creates-constraint: public.user_model_approvals.user_model_approvals_tenant_id_tenants_id_fk
|
|
13
|
+
-- creates-constraint: public.user_model_approvals.user_model_approvals_user_id_users_id_fk
|
|
14
|
+
-- creates-constraint: public.user_model_approvals.user_model_approvals_model_id_model_catalog_model_id_fk
|
|
15
|
+
|
|
16
|
+
\set ON_ERROR_STOP on
|
|
17
|
+
|
|
18
|
+
SET lock_timeout = '5s';
|
|
19
|
+
SET statement_timeout = '15min';
|
|
20
|
+
|
|
21
|
+
SELECT pg_advisory_lock(hashtext('migration:0149_user_model_approvals'));
|
|
22
|
+
|
|
23
|
+
CREATE TABLE IF NOT EXISTS public.user_model_approvals (
|
|
24
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
25
|
+
tenant_id uuid NOT NULL,
|
|
26
|
+
user_id uuid NOT NULL,
|
|
27
|
+
model_id text NOT NULL,
|
|
28
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
29
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
30
|
+
CONSTRAINT user_model_approvals_tenant_id_tenants_id_fk
|
|
31
|
+
FOREIGN KEY (tenant_id)
|
|
32
|
+
REFERENCES public.tenants(id)
|
|
33
|
+
ON DELETE CASCADE,
|
|
34
|
+
CONSTRAINT user_model_approvals_user_id_users_id_fk
|
|
35
|
+
FOREIGN KEY (user_id)
|
|
36
|
+
REFERENCES public.users(id)
|
|
37
|
+
ON DELETE CASCADE,
|
|
38
|
+
CONSTRAINT user_model_approvals_model_id_model_catalog_model_id_fk
|
|
39
|
+
FOREIGN KEY (model_id)
|
|
40
|
+
REFERENCES public.model_catalog(model_id)
|
|
41
|
+
ON DELETE CASCADE
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_user_model_approvals_tenant_user_model
|
|
45
|
+
ON public.user_model_approvals (tenant_id, user_id, model_id);
|
|
46
|
+
|
|
47
|
+
CREATE INDEX IF NOT EXISTS idx_user_model_approvals_tenant_user
|
|
48
|
+
ON public.user_model_approvals (tenant_id, user_id);
|
|
49
|
+
|
|
50
|
+
CREATE INDEX IF NOT EXISTS idx_user_model_approvals_model
|
|
51
|
+
ON public.user_model_approvals (model_id);
|
|
52
|
+
|
|
53
|
+
WITH default_models AS (
|
|
54
|
+
SELECT tenant_id, default_model AS model_id
|
|
55
|
+
FROM public.tenant_settings
|
|
56
|
+
WHERE default_model IS NOT NULL
|
|
57
|
+
|
|
58
|
+
UNION
|
|
59
|
+
|
|
60
|
+
SELECT tenant_id, model AS model_id
|
|
61
|
+
FROM public.agents
|
|
62
|
+
WHERE model IS NOT NULL
|
|
63
|
+
AND status <> 'archived'
|
|
64
|
+
|
|
65
|
+
UNION
|
|
66
|
+
|
|
67
|
+
SELECT tenant_id, model AS model_id
|
|
68
|
+
FROM public.agent_templates
|
|
69
|
+
WHERE model IS NOT NULL
|
|
70
|
+
),
|
|
71
|
+
available_defaults AS (
|
|
72
|
+
SELECT DISTINCT
|
|
73
|
+
u.tenant_id,
|
|
74
|
+
u.id AS user_id,
|
|
75
|
+
d.model_id
|
|
76
|
+
FROM public.users u
|
|
77
|
+
JOIN default_models d
|
|
78
|
+
ON d.tenant_id = u.tenant_id
|
|
79
|
+
JOIN public.model_catalog mc
|
|
80
|
+
ON mc.model_id = d.model_id
|
|
81
|
+
AND mc.is_available IS TRUE
|
|
82
|
+
WHERE u.tenant_id IS NOT NULL
|
|
83
|
+
)
|
|
84
|
+
INSERT INTO public.user_model_approvals (tenant_id, user_id, model_id)
|
|
85
|
+
SELECT tenant_id, user_id, model_id
|
|
86
|
+
FROM available_defaults
|
|
87
|
+
ON CONFLICT (tenant_id, user_id, model_id) DO NOTHING;
|
|
88
|
+
|
|
89
|
+
SELECT pg_advisory_unlock(hashtext('migration:0149_user_model_approvals'));
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
-- Bootstrap first-admin claim markers.
|
|
2
|
+
--
|
|
3
|
+
-- creates-column: public.tenants.first_admin_claim_required
|
|
4
|
+
-- creates-column: public.tenants.first_admin_claimed_at
|
|
5
|
+
-- creates-column: public.tenants.first_admin_claimed_user_id
|
|
6
|
+
|
|
7
|
+
ALTER TABLE "tenants"
|
|
8
|
+
ADD COLUMN IF NOT EXISTS "first_admin_claim_required" boolean NOT NULL DEFAULT false,
|
|
9
|
+
ADD COLUMN IF NOT EXISTS "first_admin_claimed_at" timestamp with time zone,
|
|
10
|
+
ADD COLUMN IF NOT EXISTS "first_admin_claimed_user_id" uuid;
|
|
11
|
+
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
-- Managed application deployment job domain.
|
|
2
|
+
--
|
|
3
|
+
-- creates: public.managed_applications
|
|
4
|
+
-- creates: public.managed_application_deployment_jobs
|
|
5
|
+
-- creates: public.managed_application_deployment_events
|
|
6
|
+
-- creates: public.managed_applications_tenant_key_uidx
|
|
7
|
+
-- creates: public.managed_applications_tenant_status_idx
|
|
8
|
+
-- creates: public.managed_deployment_jobs_tenant_idempotency_uidx
|
|
9
|
+
-- creates: public.managed_deployment_jobs_tenant_app_idx
|
|
10
|
+
-- creates: public.managed_deployment_jobs_status_idx
|
|
11
|
+
-- creates: public.managed_deployment_events_job_created_idx
|
|
12
|
+
-- creates: public.managed_deployment_events_idempotency_uidx
|
|
13
|
+
|
|
14
|
+
CREATE TABLE IF NOT EXISTS "managed_applications" (
|
|
15
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
16
|
+
"tenant_id" uuid NOT NULL REFERENCES "tenants"("id") ON DELETE cascade,
|
|
17
|
+
"key" text NOT NULL,
|
|
18
|
+
"display_name" text NOT NULL,
|
|
19
|
+
"desired_status" text NOT NULL DEFAULT 'disabled',
|
|
20
|
+
"current_status" text NOT NULL DEFAULT 'unknown',
|
|
21
|
+
"desired_config" jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
22
|
+
"selected_release_version" text,
|
|
23
|
+
"selected_manifest_digest" text,
|
|
24
|
+
"last_job_id" uuid,
|
|
25
|
+
"created_at" timestamp with time zone NOT NULL DEFAULT now(),
|
|
26
|
+
"updated_at" timestamp with time zone NOT NULL DEFAULT now()
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "managed_applications_tenant_key_uidx"
|
|
30
|
+
ON "managed_applications" ("tenant_id", "key");
|
|
31
|
+
|
|
32
|
+
CREATE INDEX IF NOT EXISTS "managed_applications_tenant_status_idx"
|
|
33
|
+
ON "managed_applications" ("tenant_id", "current_status");
|
|
34
|
+
|
|
35
|
+
CREATE TABLE IF NOT EXISTS "managed_application_deployment_jobs" (
|
|
36
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
37
|
+
"tenant_id" uuid NOT NULL REFERENCES "tenants"("id") ON DELETE cascade,
|
|
38
|
+
"application_id" uuid REFERENCES "managed_applications"("id") ON DELETE set null,
|
|
39
|
+
"app_key" text NOT NULL,
|
|
40
|
+
"operation" text NOT NULL,
|
|
41
|
+
"status" text NOT NULL DEFAULT 'planning',
|
|
42
|
+
"idempotency_key" text NOT NULL,
|
|
43
|
+
"requested_by_user_id" uuid,
|
|
44
|
+
"release_version" text NOT NULL,
|
|
45
|
+
"manifest_digest" text NOT NULL,
|
|
46
|
+
"desired_config_version" text NOT NULL,
|
|
47
|
+
"state_machine_arn" text,
|
|
48
|
+
"plan_execution_arn" text,
|
|
49
|
+
"apply_execution_arn" text,
|
|
50
|
+
"codebuild_build_arn" text,
|
|
51
|
+
"plan_digest" text,
|
|
52
|
+
"plan_summary" jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
53
|
+
"data_impact" jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
54
|
+
"evidence_bucket" text,
|
|
55
|
+
"evidence_prefix" text,
|
|
56
|
+
"approval_required" boolean NOT NULL DEFAULT true,
|
|
57
|
+
"approved_by_user_id" uuid,
|
|
58
|
+
"approved_at" timestamp with time zone,
|
|
59
|
+
"rejected_by_user_id" uuid,
|
|
60
|
+
"rejected_at" timestamp with time zone,
|
|
61
|
+
"error_message" text,
|
|
62
|
+
"created_at" timestamp with time zone NOT NULL DEFAULT now(),
|
|
63
|
+
"updated_at" timestamp with time zone NOT NULL DEFAULT now()
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "managed_deployment_jobs_tenant_idempotency_uidx"
|
|
67
|
+
ON "managed_application_deployment_jobs" ("tenant_id", "idempotency_key");
|
|
68
|
+
|
|
69
|
+
CREATE INDEX IF NOT EXISTS "managed_deployment_jobs_tenant_app_idx"
|
|
70
|
+
ON "managed_application_deployment_jobs" ("tenant_id", "app_key");
|
|
71
|
+
|
|
72
|
+
CREATE INDEX IF NOT EXISTS "managed_deployment_jobs_status_idx"
|
|
73
|
+
ON "managed_application_deployment_jobs" ("status");
|
|
74
|
+
|
|
75
|
+
CREATE TABLE IF NOT EXISTS "managed_application_deployment_events" (
|
|
76
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
77
|
+
"tenant_id" uuid NOT NULL REFERENCES "tenants"("id") ON DELETE cascade,
|
|
78
|
+
"job_id" uuid NOT NULL REFERENCES "managed_application_deployment_jobs"("id") ON DELETE cascade,
|
|
79
|
+
"event_type" text NOT NULL,
|
|
80
|
+
"message" text NOT NULL,
|
|
81
|
+
"payload" jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
82
|
+
"idempotency_key" text,
|
|
83
|
+
"created_at" timestamp with time zone NOT NULL DEFAULT now()
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
CREATE INDEX IF NOT EXISTS "managed_deployment_events_job_created_idx"
|
|
87
|
+
ON "managed_application_deployment_events" ("job_id", "created_at");
|
|
88
|
+
|
|
89
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "managed_deployment_events_idempotency_uidx"
|
|
90
|
+
ON "managed_application_deployment_events" ("job_id", "idempotency_key")
|
|
91
|
+
WHERE "idempotency_key" IS NOT NULL;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
-- Purpose: add tenant-global Agent Profiles for Pi subagent delegation.
|
|
2
|
+
-- Plan: docs/plans/2026-06-07-002-feat-agent-profiles-pi-subagents-plan.md U1
|
|
3
|
+
-- Apply manually (no CI migration runner):
|
|
4
|
+
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0152_agent_profiles.sql
|
|
5
|
+
-- creates: public.agent_profiles
|
|
6
|
+
-- creates: public.agent_profile_space_assignments
|
|
7
|
+
-- creates: public.uq_agent_profiles_tenant_slug
|
|
8
|
+
-- creates: public.uq_agent_profiles_tenant_built_in_key
|
|
9
|
+
-- creates: public.idx_agent_profiles_tenant_enabled
|
|
10
|
+
-- creates: public.uq_agent_profile_space_assignments
|
|
11
|
+
-- creates: public.idx_agent_profile_space_assignments_space
|
|
12
|
+
-- creates-constraint: public.agent_profiles.agent_profiles_tenant_id_tenants_id_fk
|
|
13
|
+
-- creates-constraint: public.agent_profile_space_assignments.agent_profile_space_assignments_profile_id_agent_profiles_id_fk
|
|
14
|
+
-- creates-constraint: public.agent_profile_space_assignments.agent_profile_space_assignments_tenant_id_tenants_id_fk
|
|
15
|
+
-- creates-constraint: public.agent_profile_space_assignments.agent_profile_space_assignments_space_id_spaces_id_fk
|
|
16
|
+
|
|
17
|
+
\set ON_ERROR_STOP on
|
|
18
|
+
|
|
19
|
+
SET lock_timeout = '5s';
|
|
20
|
+
SET statement_timeout = '15min';
|
|
21
|
+
|
|
22
|
+
SELECT pg_advisory_lock(hashtext('migration:0152_agent_profiles'));
|
|
23
|
+
|
|
24
|
+
CREATE TABLE IF NOT EXISTS public.agent_profiles (
|
|
25
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
26
|
+
tenant_id uuid NOT NULL,
|
|
27
|
+
slug text NOT NULL,
|
|
28
|
+
name text NOT NULL,
|
|
29
|
+
description text,
|
|
30
|
+
routing_guidance text,
|
|
31
|
+
instructions text NOT NULL DEFAULT '',
|
|
32
|
+
model_id text NOT NULL,
|
|
33
|
+
enabled boolean NOT NULL DEFAULT true,
|
|
34
|
+
built_in_key text,
|
|
35
|
+
tool_policy jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
36
|
+
skill_policy jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
37
|
+
execution_controls jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
38
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
39
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
40
|
+
CONSTRAINT agent_profiles_tenant_id_tenants_id_fk
|
|
41
|
+
FOREIGN KEY (tenant_id)
|
|
42
|
+
REFERENCES public.tenants(id)
|
|
43
|
+
ON DELETE CASCADE
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_agent_profiles_tenant_slug
|
|
47
|
+
ON public.agent_profiles (tenant_id, slug);
|
|
48
|
+
|
|
49
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_agent_profiles_tenant_built_in_key
|
|
50
|
+
ON public.agent_profiles (tenant_id, built_in_key)
|
|
51
|
+
WHERE built_in_key IS NOT NULL;
|
|
52
|
+
|
|
53
|
+
CREATE INDEX IF NOT EXISTS idx_agent_profiles_tenant_enabled
|
|
54
|
+
ON public.agent_profiles (tenant_id, enabled);
|
|
55
|
+
|
|
56
|
+
CREATE TABLE IF NOT EXISTS public.agent_profile_space_assignments (
|
|
57
|
+
profile_id uuid NOT NULL,
|
|
58
|
+
tenant_id uuid NOT NULL,
|
|
59
|
+
space_id uuid NOT NULL,
|
|
60
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
61
|
+
CONSTRAINT agent_profile_space_assignments_profile_id_agent_profiles_id_fk
|
|
62
|
+
FOREIGN KEY (profile_id)
|
|
63
|
+
REFERENCES public.agent_profiles(id)
|
|
64
|
+
ON DELETE CASCADE,
|
|
65
|
+
CONSTRAINT agent_profile_space_assignments_tenant_id_tenants_id_fk
|
|
66
|
+
FOREIGN KEY (tenant_id)
|
|
67
|
+
REFERENCES public.tenants(id)
|
|
68
|
+
ON DELETE CASCADE,
|
|
69
|
+
CONSTRAINT agent_profile_space_assignments_space_id_spaces_id_fk
|
|
70
|
+
FOREIGN KEY (space_id)
|
|
71
|
+
REFERENCES public.spaces(id)
|
|
72
|
+
ON DELETE CASCADE
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_agent_profile_space_assignments
|
|
76
|
+
ON public.agent_profile_space_assignments (profile_id, space_id);
|
|
77
|
+
|
|
78
|
+
CREATE INDEX IF NOT EXISTS idx_agent_profile_space_assignments_space
|
|
79
|
+
ON public.agent_profile_space_assignments (tenant_id, space_id);
|
|
80
|
+
|
|
81
|
+
SELECT pg_advisory_unlock(hashtext('migration:0152_agent_profiles'));
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0153_message_mentions_agent_profile.sql
|
|
2
|
+
-- creates-constraint: public.message_mentions.message_mentions_target_type_allowed
|
|
3
|
+
|
|
4
|
+
ALTER TABLE public.message_mentions
|
|
5
|
+
DROP CONSTRAINT IF EXISTS message_mentions_target_type_allowed;
|
|
6
|
+
|
|
7
|
+
ALTER TABLE public.message_mentions
|
|
8
|
+
ADD CONSTRAINT message_mentions_target_type_allowed
|
|
9
|
+
CHECK (target_type IN ('user', 'agent', 'agent_profile'));
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
-- Browser-first customer deployment session state.
|
|
2
|
+
--
|
|
3
|
+
-- creates: public.customer_deployment_sessions
|
|
4
|
+
-- creates: public.customer_deployment_session_events
|
|
5
|
+
-- creates: public.customer_deployment_sessions_status_idx
|
|
6
|
+
-- creates: public.customer_deployment_sessions_account_region_idx
|
|
7
|
+
-- creates: public.customer_deployment_sessions_tenant_idx
|
|
8
|
+
-- creates: public.customer_deployment_session_events_session_created_idx
|
|
9
|
+
-- creates: public.customer_deployment_session_events_idempotency_uidx
|
|
10
|
+
|
|
11
|
+
CREATE TABLE IF NOT EXISTS "customer_deployment_sessions" (
|
|
12
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
13
|
+
"tenant_id" uuid REFERENCES "tenants"("id") ON DELETE set null,
|
|
14
|
+
"status" text NOT NULL DEFAULT 'collecting_inputs',
|
|
15
|
+
"current_step_key" text NOT NULL DEFAULT 'intake',
|
|
16
|
+
"requested_action" text NOT NULL DEFAULT 'deploy',
|
|
17
|
+
"client_token_hash" text NOT NULL,
|
|
18
|
+
"source" text NOT NULL DEFAULT 'browser',
|
|
19
|
+
"customer_name" text NOT NULL,
|
|
20
|
+
"environment_name" text NOT NULL,
|
|
21
|
+
"aws_account_id" text NOT NULL,
|
|
22
|
+
"aws_region" text NOT NULL,
|
|
23
|
+
"availability_zones" jsonb NOT NULL DEFAULT '[]'::jsonb,
|
|
24
|
+
"admin_name" text NOT NULL,
|
|
25
|
+
"admin_email" text NOT NULL,
|
|
26
|
+
"credentials_status" text NOT NULL DEFAULT 'not_connected',
|
|
27
|
+
"runner_mode" text NOT NULL DEFAULT 'hosted',
|
|
28
|
+
"terraform_backend" jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
29
|
+
"session_config" jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
30
|
+
"error_message" text,
|
|
31
|
+
"expires_at" timestamp with time zone,
|
|
32
|
+
"created_at" timestamp with time zone NOT NULL DEFAULT now(),
|
|
33
|
+
"updated_at" timestamp with time zone NOT NULL DEFAULT now()
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
CREATE INDEX IF NOT EXISTS "customer_deployment_sessions_status_idx"
|
|
37
|
+
ON "customer_deployment_sessions" ("status");
|
|
38
|
+
|
|
39
|
+
CREATE INDEX IF NOT EXISTS "customer_deployment_sessions_account_region_idx"
|
|
40
|
+
ON "customer_deployment_sessions" ("aws_account_id", "aws_region");
|
|
41
|
+
|
|
42
|
+
CREATE INDEX IF NOT EXISTS "customer_deployment_sessions_tenant_idx"
|
|
43
|
+
ON "customer_deployment_sessions" ("tenant_id");
|
|
44
|
+
|
|
45
|
+
CREATE TABLE IF NOT EXISTS "customer_deployment_session_events" (
|
|
46
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
47
|
+
"session_id" uuid NOT NULL REFERENCES "customer_deployment_sessions"("id") ON DELETE cascade,
|
|
48
|
+
"event_type" text NOT NULL,
|
|
49
|
+
"step_key" text,
|
|
50
|
+
"message" text NOT NULL,
|
|
51
|
+
"payload" jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
52
|
+
"idempotency_key" text,
|
|
53
|
+
"created_at" timestamp with time zone NOT NULL DEFAULT now()
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
CREATE INDEX IF NOT EXISTS "customer_deployment_session_events_session_created_idx"
|
|
57
|
+
ON "customer_deployment_session_events" ("session_id", "created_at");
|
|
58
|
+
|
|
59
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "customer_deployment_session_events_idempotency_uidx"
|
|
60
|
+
ON "customer_deployment_session_events" ("session_id", "idempotency_key")
|
|
61
|
+
WHERE "idempotency_key" IS NOT NULL;
|