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,274 @@
|
|
|
1
|
+
-- 0090_brain_schema_extraction.sql
|
|
2
|
+
--
|
|
3
|
+
-- Phase B of the wiki + brain schema extraction (PR 2 of 3-PR arc).
|
|
4
|
+
-- Moves 6 brain tables from public.* into the new `brain.*` Postgres schema,
|
|
5
|
+
-- drops the redundant `tenant_entity_` prefix from internal table names,
|
|
6
|
+
-- renames indexes/constraints to match, and creates compat views in public.*
|
|
7
|
+
-- so old bundled Lambda code keeps reading during the deploy bridge window.
|
|
8
|
+
--
|
|
9
|
+
-- Tables moved:
|
|
10
|
+
-- public.tenant_entity_pages → brain.pages
|
|
11
|
+
-- public.tenant_entity_page_sections → brain.page_sections
|
|
12
|
+
-- public.tenant_entity_page_links → brain.page_links
|
|
13
|
+
-- public.tenant_entity_page_aliases → brain.page_aliases
|
|
14
|
+
-- public.tenant_entity_section_sources → brain.section_sources
|
|
15
|
+
-- public.tenant_entity_external_refs → brain.external_refs
|
|
16
|
+
--
|
|
17
|
+
-- FK constraints follow their parent tables automatically (Postgres preserves
|
|
18
|
+
-- them across SET SCHEMA). Cross-schema FKs to public.tenants continue to
|
|
19
|
+
-- work — see Key Technical Decisions in the wiki+brain plan for the rationale.
|
|
20
|
+
-- FK constraint names retain their original tenant_entity_* prefix — a
|
|
21
|
+
-- cosmetic cleanup can come later. No FK-rename markers below.
|
|
22
|
+
--
|
|
23
|
+
-- Compat views: each table also gets a view in public.* aliasing the new
|
|
24
|
+
-- location. Old bundled Lambdas continue reading via public.tenant_entity_*
|
|
25
|
+
-- during the deploy bridge window; new Lambdas read brain.* directly. PR 3
|
|
26
|
+
-- (cleanup) drops the views once deploys stabilize. The brain.pages compat
|
|
27
|
+
-- view enumerates columns explicitly, omitting the GENERATED ALWAYS
|
|
28
|
+
-- search_tsv (mirror of 0089's wiki.pages view fix from PR 1 review).
|
|
29
|
+
--
|
|
30
|
+
-- Note on external_refs_kind_allowed_v2: the constraint name retains the
|
|
31
|
+
-- _v2 suffix from the public-schema days (0088 renamed it; 0087 is queued
|
|
32
|
+
-- to rename it back and tighten the value set). This migration only moves
|
|
33
|
+
-- the constraint with the table — no name/definition changes. The follow-up
|
|
34
|
+
-- cleanup migration can rename and tighten in lock step with 0087.
|
|
35
|
+
--
|
|
36
|
+
-- Plan reference: docs/plans/2026-05-16-001-refactor-wiki-brain-schema-extraction-plan.md
|
|
37
|
+
-- Origin brainstorm: docs/brainstorms/2026-05-16-wiki-brain-schema-extraction-requirements.md
|
|
38
|
+
-- Pattern doc: docs/solutions/database-issues/feature-schema-extraction-pattern.md
|
|
39
|
+
-- Prior PR: 0089_wiki_schema_extraction.sql (wiki side, PR 1 of 3)
|
|
40
|
+
--
|
|
41
|
+
-- Apply manually:
|
|
42
|
+
-- psql "$DATABASE_URL" -f packages/database-pg/drizzle/0090_brain_schema_extraction.sql
|
|
43
|
+
-- Then verify:
|
|
44
|
+
-- pnpm db:migrate-manual
|
|
45
|
+
-- psql -c "\dt brain.*" -- 6 tables expected
|
|
46
|
+
-- psql -c "\dv public.tenant_entity_*" -- 6 compat views expected
|
|
47
|
+
-- psql -c "\dt public.tenant_entity_*" -- 0 tables expected
|
|
48
|
+
--
|
|
49
|
+
-- Inverse runbook (rollback): drop the views, then SET SCHEMA back, then
|
|
50
|
+
-- RENAME back. Indexes and constraints follow their parent table's schema
|
|
51
|
+
-- automatically. After SET SCHEMA moves the table to public, its indexes
|
|
52
|
+
-- live in public — so ALTER INDEX statements must qualify with `public.`,
|
|
53
|
+
-- not `brain.`.
|
|
54
|
+
-- DROP VIEW IF EXISTS public.tenant_entity_pages, public.tenant_entity_page_sections, ...;
|
|
55
|
+
-- ALTER TABLE brain.pages SET SCHEMA public; -- indexes move to public too
|
|
56
|
+
-- ALTER TABLE public.pages RENAME TO tenant_entity_pages;
|
|
57
|
+
-- ALTER INDEX public.idx_pages_tenant_type_status RENAME TO idx_tenant_entity_pages_tenant_type_status; -- × 19 indexes
|
|
58
|
+
-- ... (× 6 tables, parent-last)
|
|
59
|
+
-- DROP SCHEMA brain;
|
|
60
|
+
--
|
|
61
|
+
-- Markers (consumed by scripts/db-migrate-manual.sh):
|
|
62
|
+
--
|
|
63
|
+
-- creates: brain.pages
|
|
64
|
+
-- creates: brain.page_sections
|
|
65
|
+
-- creates: brain.page_links
|
|
66
|
+
-- creates: brain.page_aliases
|
|
67
|
+
-- creates: brain.section_sources
|
|
68
|
+
-- creates: brain.external_refs
|
|
69
|
+
-- creates: brain.uq_pages_tenant_type_subtype_slug
|
|
70
|
+
-- creates: brain.idx_pages_tenant_type_status
|
|
71
|
+
-- creates: brain.idx_pages_subtype
|
|
72
|
+
-- creates: brain.idx_pages_last_compiled
|
|
73
|
+
-- creates: brain.idx_pages_search_tsv
|
|
74
|
+
-- creates: brain.idx_pages_parent
|
|
75
|
+
-- creates: brain.idx_pages_title_trgm
|
|
76
|
+
-- creates: brain.uq_page_sections_page_slug
|
|
77
|
+
-- creates: brain.idx_page_sections_page_position
|
|
78
|
+
-- creates: brain.uq_page_links_from_to_kind
|
|
79
|
+
-- creates: brain.idx_page_links_to
|
|
80
|
+
-- creates: brain.idx_page_links_kind
|
|
81
|
+
-- creates: brain.uq_page_aliases_page_alias
|
|
82
|
+
-- creates: brain.idx_page_aliases_alias
|
|
83
|
+
-- creates: brain.idx_page_aliases_alias_trgm
|
|
84
|
+
-- creates: brain.uq_section_sources_section_kind_ref
|
|
85
|
+
-- creates: brain.idx_section_sources_tenant_kind_ref
|
|
86
|
+
-- creates: brain.uq_external_refs_source
|
|
87
|
+
-- creates: brain.idx_external_refs_tenant_source
|
|
88
|
+
-- creates-constraint: brain.pages.pages_type_allowed
|
|
89
|
+
-- creates-constraint: brain.pages.pages_entity_subtype_allowed
|
|
90
|
+
-- creates-constraint: brain.page_sections.page_sections_facet_type_allowed
|
|
91
|
+
-- creates-constraint: brain.external_refs.external_refs_kind_allowed
|
|
92
|
+
-- creates-constraint: brain.external_refs.external_refs_ttl_positive
|
|
93
|
+
-- creates: public.tenant_entity_pages
|
|
94
|
+
-- creates: public.tenant_entity_page_sections
|
|
95
|
+
-- creates: public.tenant_entity_page_links
|
|
96
|
+
-- creates: public.tenant_entity_page_aliases
|
|
97
|
+
-- creates: public.tenant_entity_section_sources
|
|
98
|
+
-- creates: public.tenant_entity_external_refs
|
|
99
|
+
|
|
100
|
+
\set ON_ERROR_STOP on
|
|
101
|
+
|
|
102
|
+
BEGIN;
|
|
103
|
+
|
|
104
|
+
-- Set timeouts BEFORE acquiring the advisory lock so the lock acquisition
|
|
105
|
+
-- itself is bounded. Mirror of 0089's pattern.
|
|
106
|
+
SET LOCAL lock_timeout = '30s';
|
|
107
|
+
SET LOCAL statement_timeout = '300s';
|
|
108
|
+
|
|
109
|
+
-- Serialize concurrent application attempts.
|
|
110
|
+
SELECT pg_advisory_xact_lock(hashtext('brain_schema_extraction'));
|
|
111
|
+
|
|
112
|
+
-- Refuse to apply against an unexpected DB.
|
|
113
|
+
DO $$
|
|
114
|
+
BEGIN
|
|
115
|
+
IF current_database() != 'thinkwork' THEN
|
|
116
|
+
RAISE EXCEPTION 'wrong database: %, expected thinkwork', current_database();
|
|
117
|
+
END IF;
|
|
118
|
+
END $$;
|
|
119
|
+
|
|
120
|
+
-- Dev-state-verification: 0090 depends on 0089's state. If dev was reseeded
|
|
121
|
+
-- after 0089 but before 0090, refuse to proceed — re-apply 0089 first.
|
|
122
|
+
DO $$
|
|
123
|
+
BEGIN
|
|
124
|
+
IF to_regclass('wiki.pages') IS NULL THEN
|
|
125
|
+
RAISE EXCEPTION 'pre-flight: wiki.pages does not exist — 0089 (wiki schema extraction) must be applied first';
|
|
126
|
+
END IF;
|
|
127
|
+
END $$;
|
|
128
|
+
|
|
129
|
+
-- Pre-flight invariants: symmetric checks for all 6 tables.
|
|
130
|
+
DO $$
|
|
131
|
+
BEGIN
|
|
132
|
+
IF to_regclass('public.tenant_entity_pages') IS NULL THEN
|
|
133
|
+
RAISE EXCEPTION 'pre-flight: public.tenant_entity_pages does not exist';
|
|
134
|
+
END IF;
|
|
135
|
+
IF to_regclass('brain.pages') IS NOT NULL THEN
|
|
136
|
+
RAISE EXCEPTION 'pre-flight: brain.pages already exists — refusing to re-apply';
|
|
137
|
+
END IF;
|
|
138
|
+
IF to_regclass('public.tenant_entity_page_sections') IS NULL THEN
|
|
139
|
+
RAISE EXCEPTION 'pre-flight: public.tenant_entity_page_sections does not exist';
|
|
140
|
+
END IF;
|
|
141
|
+
IF to_regclass('brain.page_sections') IS NOT NULL THEN
|
|
142
|
+
RAISE EXCEPTION 'pre-flight: brain.page_sections already exists — refusing to re-apply';
|
|
143
|
+
END IF;
|
|
144
|
+
IF to_regclass('public.tenant_entity_page_links') IS NULL THEN
|
|
145
|
+
RAISE EXCEPTION 'pre-flight: public.tenant_entity_page_links does not exist';
|
|
146
|
+
END IF;
|
|
147
|
+
IF to_regclass('brain.page_links') IS NOT NULL THEN
|
|
148
|
+
RAISE EXCEPTION 'pre-flight: brain.page_links already exists — refusing to re-apply';
|
|
149
|
+
END IF;
|
|
150
|
+
IF to_regclass('public.tenant_entity_page_aliases') IS NULL THEN
|
|
151
|
+
RAISE EXCEPTION 'pre-flight: public.tenant_entity_page_aliases does not exist';
|
|
152
|
+
END IF;
|
|
153
|
+
IF to_regclass('brain.page_aliases') IS NOT NULL THEN
|
|
154
|
+
RAISE EXCEPTION 'pre-flight: brain.page_aliases already exists — refusing to re-apply';
|
|
155
|
+
END IF;
|
|
156
|
+
IF to_regclass('public.tenant_entity_section_sources') IS NULL THEN
|
|
157
|
+
RAISE EXCEPTION 'pre-flight: public.tenant_entity_section_sources does not exist';
|
|
158
|
+
END IF;
|
|
159
|
+
IF to_regclass('brain.section_sources') IS NOT NULL THEN
|
|
160
|
+
RAISE EXCEPTION 'pre-flight: brain.section_sources already exists — refusing to re-apply';
|
|
161
|
+
END IF;
|
|
162
|
+
IF to_regclass('public.tenant_entity_external_refs') IS NULL THEN
|
|
163
|
+
RAISE EXCEPTION 'pre-flight: public.tenant_entity_external_refs does not exist';
|
|
164
|
+
END IF;
|
|
165
|
+
IF to_regclass('brain.external_refs') IS NOT NULL THEN
|
|
166
|
+
RAISE EXCEPTION 'pre-flight: brain.external_refs already exists — refusing to re-apply';
|
|
167
|
+
END IF;
|
|
168
|
+
END $$;
|
|
169
|
+
|
|
170
|
+
CREATE SCHEMA IF NOT EXISTS brain;
|
|
171
|
+
COMMENT ON SCHEMA brain IS 'Tenant-shared structured-knowledge entity pages (Customer/Opportunity/Order/Person) and their provenance. Extracted from public.* on 2026-05-16 as PR 2 of the wiki+brain schema extraction arc.';
|
|
172
|
+
|
|
173
|
+
-- ── Move and rename tables ─────────────────────────────────────────────
|
|
174
|
+
-- FK-leaf-first ordering. Postgres preserves FKs across SET SCHEMA
|
|
175
|
+
-- automatically; ordering matters only for operator mental model.
|
|
176
|
+
|
|
177
|
+
ALTER TABLE public.tenant_entity_external_refs SET SCHEMA brain;
|
|
178
|
+
ALTER TABLE brain.tenant_entity_external_refs RENAME TO external_refs;
|
|
179
|
+
|
|
180
|
+
ALTER TABLE public.tenant_entity_section_sources SET SCHEMA brain;
|
|
181
|
+
ALTER TABLE brain.tenant_entity_section_sources RENAME TO section_sources;
|
|
182
|
+
|
|
183
|
+
ALTER TABLE public.tenant_entity_page_links SET SCHEMA brain;
|
|
184
|
+
ALTER TABLE brain.tenant_entity_page_links RENAME TO page_links;
|
|
185
|
+
|
|
186
|
+
ALTER TABLE public.tenant_entity_page_aliases SET SCHEMA brain;
|
|
187
|
+
ALTER TABLE brain.tenant_entity_page_aliases RENAME TO page_aliases;
|
|
188
|
+
|
|
189
|
+
ALTER TABLE public.tenant_entity_page_sections SET SCHEMA brain;
|
|
190
|
+
ALTER TABLE brain.tenant_entity_page_sections RENAME TO page_sections;
|
|
191
|
+
|
|
192
|
+
ALTER TABLE public.tenant_entity_pages SET SCHEMA brain;
|
|
193
|
+
ALTER TABLE brain.tenant_entity_pages RENAME TO pages;
|
|
194
|
+
|
|
195
|
+
-- ── Rename indexes to drop tenant_entity_ prefix ───────────────────────
|
|
196
|
+
|
|
197
|
+
ALTER INDEX brain.uq_tenant_entity_pages_tenant_type_subtype_slug RENAME TO uq_pages_tenant_type_subtype_slug;
|
|
198
|
+
ALTER INDEX brain.idx_tenant_entity_pages_tenant_type_status RENAME TO idx_pages_tenant_type_status;
|
|
199
|
+
ALTER INDEX brain.idx_tenant_entity_pages_subtype RENAME TO idx_pages_subtype;
|
|
200
|
+
ALTER INDEX brain.idx_tenant_entity_pages_last_compiled RENAME TO idx_pages_last_compiled;
|
|
201
|
+
ALTER INDEX brain.idx_tenant_entity_pages_search_tsv RENAME TO idx_pages_search_tsv;
|
|
202
|
+
ALTER INDEX brain.idx_tenant_entity_pages_parent RENAME TO idx_pages_parent;
|
|
203
|
+
ALTER INDEX brain.idx_tenant_entity_pages_title_trgm RENAME TO idx_pages_title_trgm;
|
|
204
|
+
|
|
205
|
+
ALTER INDEX brain.uq_tenant_entity_page_sections_page_slug RENAME TO uq_page_sections_page_slug;
|
|
206
|
+
ALTER INDEX brain.idx_tenant_entity_page_sections_page_position RENAME TO idx_page_sections_page_position;
|
|
207
|
+
|
|
208
|
+
ALTER INDEX brain.uq_tenant_entity_page_links_from_to_kind RENAME TO uq_page_links_from_to_kind;
|
|
209
|
+
ALTER INDEX brain.idx_tenant_entity_page_links_to RENAME TO idx_page_links_to;
|
|
210
|
+
ALTER INDEX brain.idx_tenant_entity_page_links_kind RENAME TO idx_page_links_kind;
|
|
211
|
+
|
|
212
|
+
ALTER INDEX brain.uq_tenant_entity_page_aliases_page_alias RENAME TO uq_page_aliases_page_alias;
|
|
213
|
+
ALTER INDEX brain.idx_tenant_entity_page_aliases_alias RENAME TO idx_page_aliases_alias;
|
|
214
|
+
ALTER INDEX brain.idx_tenant_entity_page_aliases_alias_trgm RENAME TO idx_page_aliases_alias_trgm;
|
|
215
|
+
|
|
216
|
+
ALTER INDEX brain.uq_tenant_entity_section_sources_section_kind_ref RENAME TO uq_section_sources_section_kind_ref;
|
|
217
|
+
ALTER INDEX brain.idx_tenant_entity_section_sources_tenant_kind_ref RENAME TO idx_section_sources_tenant_kind_ref;
|
|
218
|
+
|
|
219
|
+
ALTER INDEX brain.uq_tenant_entity_external_refs_source RENAME TO uq_external_refs_source;
|
|
220
|
+
ALTER INDEX brain.idx_tenant_entity_external_refs_tenant_source RENAME TO idx_external_refs_tenant_source;
|
|
221
|
+
|
|
222
|
+
-- ── Rename named CHECK constraints to drop tenant_entity_ prefix ───────
|
|
223
|
+
|
|
224
|
+
ALTER TABLE brain.pages RENAME CONSTRAINT tenant_entity_pages_type_allowed TO pages_type_allowed;
|
|
225
|
+
ALTER TABLE brain.pages RENAME CONSTRAINT tenant_entity_pages_entity_subtype_allowed TO pages_entity_subtype_allowed;
|
|
226
|
+
ALTER TABLE brain.page_sections RENAME CONSTRAINT tenant_entity_page_sections_facet_type_allowed TO page_sections_facet_type_allowed;
|
|
227
|
+
|
|
228
|
+
-- external_refs constraint: absorb 0087's tracker cleanup. Whatever the
|
|
229
|
+
-- existing constraint name is (_v2 or _kind_allowed — depends on whether
|
|
230
|
+
-- 0087 has applied yet), delete tracker rows and replace with the final
|
|
231
|
+
-- constraint named external_refs_kind_allowed (no _v2) excluding tracker_*.
|
|
232
|
+
-- This matches what brain.ts declares as the canonical Drizzle source.
|
|
233
|
+
DELETE FROM brain.external_refs
|
|
234
|
+
WHERE source_kind IN ('tracker_issue', 'tracker_ticket');
|
|
235
|
+
|
|
236
|
+
ALTER TABLE brain.external_refs
|
|
237
|
+
DROP CONSTRAINT IF EXISTS tenant_entity_external_refs_kind_allowed_v2;
|
|
238
|
+
ALTER TABLE brain.external_refs
|
|
239
|
+
DROP CONSTRAINT IF EXISTS tenant_entity_external_refs_kind_allowed;
|
|
240
|
+
|
|
241
|
+
ALTER TABLE brain.external_refs
|
|
242
|
+
ADD CONSTRAINT external_refs_kind_allowed CHECK (
|
|
243
|
+
source_kind IN (
|
|
244
|
+
'erp_customer',
|
|
245
|
+
'crm_opportunity',
|
|
246
|
+
'erp_order',
|
|
247
|
+
'crm_person',
|
|
248
|
+
'support_case',
|
|
249
|
+
'bedrock_kb'
|
|
250
|
+
)
|
|
251
|
+
);
|
|
252
|
+
|
|
253
|
+
ALTER TABLE brain.external_refs RENAME CONSTRAINT tenant_entity_external_refs_ttl_positive TO external_refs_ttl_positive;
|
|
254
|
+
|
|
255
|
+
-- ── Compat views in public.* ────────────────────────────────────────────
|
|
256
|
+
-- Old bundled Lambda code references public.tenant_entity_*. The views
|
|
257
|
+
-- resolve to the new schema-qualified tables. brain.pages has a
|
|
258
|
+
-- GENERATED ALWAYS search_tsv column, so its compat view enumerates
|
|
259
|
+
-- columns explicitly to allow INSERTs that don't name search_tsv to
|
|
260
|
+
-- succeed (Postgres regenerates search_tsv on write through the view).
|
|
261
|
+
-- The remaining 5 tables have no generated columns; SELECT * is fine.
|
|
262
|
+
|
|
263
|
+
CREATE VIEW public.tenant_entity_pages AS
|
|
264
|
+
SELECT id, tenant_id, type, entity_subtype, slug, title, summary,
|
|
265
|
+
body_md, status, parent_page_id, hubness_score, tags,
|
|
266
|
+
last_compiled_at, created_at, updated_at
|
|
267
|
+
FROM brain.pages;
|
|
268
|
+
CREATE VIEW public.tenant_entity_page_sections AS SELECT * FROM brain.page_sections;
|
|
269
|
+
CREATE VIEW public.tenant_entity_page_links AS SELECT * FROM brain.page_links;
|
|
270
|
+
CREATE VIEW public.tenant_entity_page_aliases AS SELECT * FROM brain.page_aliases;
|
|
271
|
+
CREATE VIEW public.tenant_entity_section_sources AS SELECT * FROM brain.section_sources;
|
|
272
|
+
CREATE VIEW public.tenant_entity_external_refs AS SELECT * FROM brain.external_refs;
|
|
273
|
+
|
|
274
|
+
COMMIT;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
-- 0091_drop_wiki_brain_compat_views.sql
|
|
2
|
+
--
|
|
3
|
+
-- Phase C / PR 3 of 3 in the wiki+brain schema extraction arc. Drops the
|
|
4
|
+
-- 15 compatibility views in `public.*` that 0089 (wiki) and 0090 (brain)
|
|
5
|
+
-- created as a deploy bridge. The views protected old bundled Lambda
|
|
6
|
+
-- READ paths during the brief window between psql apply and Lambda
|
|
7
|
+
-- redeploy completing; now that both PRs have merged + stabilized in
|
|
8
|
+
-- prod, no consumer reads through these names anymore and the views
|
|
9
|
+
-- can come down.
|
|
10
|
+
--
|
|
11
|
+
-- Views dropped:
|
|
12
|
+
-- public.wiki_pages, public.wiki_page_sections, public.wiki_page_links,
|
|
13
|
+
-- public.wiki_page_aliases, public.wiki_unresolved_mentions,
|
|
14
|
+
-- public.wiki_section_sources, public.wiki_compile_jobs,
|
|
15
|
+
-- public.wiki_compile_cursors, public.wiki_places,
|
|
16
|
+
-- public.tenant_entity_pages, public.tenant_entity_page_sections,
|
|
17
|
+
-- public.tenant_entity_page_links, public.tenant_entity_page_aliases,
|
|
18
|
+
-- public.tenant_entity_section_sources, public.tenant_entity_external_refs
|
|
19
|
+
--
|
|
20
|
+
-- Pre-merge consumer survey: verified zero production code references
|
|
21
|
+
-- these names (excludes the legitimate test fixture in
|
|
22
|
+
-- packages/database-pg/__tests__/schema-customize-retirement.test.ts
|
|
23
|
+
-- which only grep-checks 0087's literal text, and excludes historical
|
|
24
|
+
-- migration files 0036/0051/0087 which document past state).
|
|
25
|
+
--
|
|
26
|
+
-- Plan reference: docs/plans/2026-05-16-001-refactor-wiki-brain-schema-extraction-plan.md
|
|
27
|
+
-- Origin brainstorm: docs/brainstorms/2026-05-16-wiki-brain-schema-extraction-requirements.md
|
|
28
|
+
-- Pattern doc: docs/solutions/database-issues/feature-schema-extraction-pattern.md
|
|
29
|
+
-- Wiki PR (merged): #1251
|
|
30
|
+
-- Brain PR (merged): #1259
|
|
31
|
+
--
|
|
32
|
+
-- Apply manually:
|
|
33
|
+
-- psql "$DATABASE_URL" -f packages/database-pg/drizzle/0091_drop_wiki_brain_compat_views.sql
|
|
34
|
+
-- Then verify:
|
|
35
|
+
-- pnpm db:migrate-manual packages/database-pg/drizzle/0091_drop_wiki_brain_compat_views.sql
|
|
36
|
+
-- psql -c "\dv public.wiki_*" -- 0 views expected
|
|
37
|
+
-- psql -c "\dv public.tenant_entity_*" -- 0 views expected
|
|
38
|
+
-- psql -c "\dt wiki.*" -- 9 tables still present
|
|
39
|
+
-- psql -c "\dt brain.*" -- 6 tables still present
|
|
40
|
+
--
|
|
41
|
+
-- Inverse runbook (rollback): re-create each view. Mirror of 0089/0090's
|
|
42
|
+
-- CREATE VIEW statements — see those migration headers for the column
|
|
43
|
+
-- enumeration on public.wiki_pages and public.tenant_entity_pages views
|
|
44
|
+
-- (both omit the GENERATED ALWAYS search_tsv column).
|
|
45
|
+
--
|
|
46
|
+
-- Markers (consumed by scripts/db-migrate-manual.sh):
|
|
47
|
+
--
|
|
48
|
+
-- drops: public.wiki_pages
|
|
49
|
+
-- drops: public.wiki_page_sections
|
|
50
|
+
-- drops: public.wiki_page_links
|
|
51
|
+
-- drops: public.wiki_page_aliases
|
|
52
|
+
-- drops: public.wiki_unresolved_mentions
|
|
53
|
+
-- drops: public.wiki_section_sources
|
|
54
|
+
-- drops: public.wiki_compile_jobs
|
|
55
|
+
-- drops: public.wiki_compile_cursors
|
|
56
|
+
-- drops: public.wiki_places
|
|
57
|
+
-- drops: public.tenant_entity_pages
|
|
58
|
+
-- drops: public.tenant_entity_page_sections
|
|
59
|
+
-- drops: public.tenant_entity_page_links
|
|
60
|
+
-- drops: public.tenant_entity_page_aliases
|
|
61
|
+
-- drops: public.tenant_entity_section_sources
|
|
62
|
+
-- drops: public.tenant_entity_external_refs
|
|
63
|
+
|
|
64
|
+
\set ON_ERROR_STOP on
|
|
65
|
+
|
|
66
|
+
BEGIN;
|
|
67
|
+
|
|
68
|
+
-- Set timeouts before any potentially blocking operation. DROP VIEW is
|
|
69
|
+
-- fast but takes ACCESS EXCLUSIVE on the view's name — and any query in
|
|
70
|
+
-- flight against the view holds an ACCESS SHARE that briefly blocks the
|
|
71
|
+
-- DROP. Bounded waits ensure the migration fails fast if a long-running
|
|
72
|
+
-- query holds a lock.
|
|
73
|
+
SET LOCAL lock_timeout = '30s';
|
|
74
|
+
SET LOCAL statement_timeout = '60s';
|
|
75
|
+
|
|
76
|
+
-- Serialize concurrent application attempts.
|
|
77
|
+
SELECT pg_advisory_xact_lock(hashtext('drop_wiki_brain_compat_views'));
|
|
78
|
+
|
|
79
|
+
-- Refuse to apply against an unexpected DB.
|
|
80
|
+
DO $$
|
|
81
|
+
BEGIN
|
|
82
|
+
IF current_database() != 'thinkwork' THEN
|
|
83
|
+
RAISE EXCEPTION 'wrong database: %, expected thinkwork', current_database();
|
|
84
|
+
END IF;
|
|
85
|
+
END $$;
|
|
86
|
+
|
|
87
|
+
-- Pre-flight: wiki.* and brain.* must exist (0089 + 0090 must have applied)
|
|
88
|
+
-- before it makes sense to drop their compat views.
|
|
89
|
+
DO $$
|
|
90
|
+
BEGIN
|
|
91
|
+
IF to_regclass('wiki.pages') IS NULL THEN
|
|
92
|
+
RAISE EXCEPTION 'pre-flight: wiki.pages does not exist — 0089 must apply before 0091';
|
|
93
|
+
END IF;
|
|
94
|
+
IF to_regclass('brain.pages') IS NULL THEN
|
|
95
|
+
RAISE EXCEPTION 'pre-flight: brain.pages does not exist — 0090 must apply before 0091';
|
|
96
|
+
END IF;
|
|
97
|
+
END $$;
|
|
98
|
+
|
|
99
|
+
-- Drop the wiki compat views (9). IF EXISTS so re-running is safe.
|
|
100
|
+
DROP VIEW IF EXISTS public.wiki_pages;
|
|
101
|
+
DROP VIEW IF EXISTS public.wiki_page_sections;
|
|
102
|
+
DROP VIEW IF EXISTS public.wiki_page_links;
|
|
103
|
+
DROP VIEW IF EXISTS public.wiki_page_aliases;
|
|
104
|
+
DROP VIEW IF EXISTS public.wiki_unresolved_mentions;
|
|
105
|
+
DROP VIEW IF EXISTS public.wiki_section_sources;
|
|
106
|
+
DROP VIEW IF EXISTS public.wiki_compile_jobs;
|
|
107
|
+
DROP VIEW IF EXISTS public.wiki_compile_cursors;
|
|
108
|
+
DROP VIEW IF EXISTS public.wiki_places;
|
|
109
|
+
|
|
110
|
+
-- Drop the brain compat views (6).
|
|
111
|
+
DROP VIEW IF EXISTS public.tenant_entity_pages;
|
|
112
|
+
DROP VIEW IF EXISTS public.tenant_entity_page_sections;
|
|
113
|
+
DROP VIEW IF EXISTS public.tenant_entity_page_links;
|
|
114
|
+
DROP VIEW IF EXISTS public.tenant_entity_page_aliases;
|
|
115
|
+
DROP VIEW IF EXISTS public.tenant_entity_section_sources;
|
|
116
|
+
DROP VIEW IF EXISTS public.tenant_entity_external_refs;
|
|
117
|
+
|
|
118
|
+
COMMIT;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
-- 0092_finish_oss_connector_retirement.sql
|
|
2
|
+
--
|
|
3
|
+
-- Finishes the OSS connector framework retirement that 0087 started.
|
|
4
|
+
-- 0087 was authored but never applied to dev — the code-side retirement
|
|
5
|
+
-- (Drizzle schemas removed, lib/connectors/* deleted, handler retired,
|
|
6
|
+
-- resolvers gone) shipped via separate PRs, but the DROP TABLE side
|
|
7
|
+
-- never ran because 0087 had downstream-rendered itself unable to apply
|
|
8
|
+
-- as-written after 0090 moved tenant_entity_external_refs into the
|
|
9
|
+
-- brain schema (0087's ALTER TABLE public.tenant_entity_external_refs
|
|
10
|
+
-- statements would now fail because that table no longer exists in
|
|
11
|
+
-- public.*).
|
|
12
|
+
--
|
|
13
|
+
-- This migration does ONLY the table-drop portion of 0087. The
|
|
14
|
+
-- tenant_entity_external_refs constraint work (DELETE tracker rows +
|
|
15
|
+
-- DROP + re-ADD constraint) is already done by 0090's bundled
|
|
16
|
+
-- cleanup — see 0090's header for that history.
|
|
17
|
+
--
|
|
18
|
+
-- Tables dropped (4):
|
|
19
|
+
-- public.connector_executions (33 rows in dev as of 2026-05-16, all stale)
|
|
20
|
+
-- public.connectors (1 row in dev, stale)
|
|
21
|
+
-- public.tenant_connector_catalog (20 rows, stale)
|
|
22
|
+
-- public.computer_delegations (10 rows, stale)
|
|
23
|
+
--
|
|
24
|
+
-- Indexes drop automatically with their parent tables (CASCADE). The
|
|
25
|
+
-- 14 index-drop markers in 0087's header resolve to DROPPED naturally
|
|
26
|
+
-- once the parent tables are gone.
|
|
27
|
+
--
|
|
28
|
+
-- The only inbound FK to any of these tables is
|
|
29
|
+
-- connector_executions.connector_id -> connectors.id, which is in the
|
|
30
|
+
-- drop set itself. No external tables reference these — DROP CASCADE is
|
|
31
|
+
-- safe.
|
|
32
|
+
--
|
|
33
|
+
-- Plan reference: docs/plans/2026-05-14-001-refactor-retire-oss-symphony-connectors-plan.md
|
|
34
|
+
-- Prior migration: 0087_retire_oss_connectors.sql (authored but never applied to dev — superseded by this file's table-drop scope)
|
|
35
|
+
-- Wiki+brain arc: PRs #1251, #1259, #1264
|
|
36
|
+
--
|
|
37
|
+
-- Apply manually:
|
|
38
|
+
-- psql "$DATABASE_URL" -f packages/database-pg/drizzle/0092_finish_oss_connector_retirement.sql
|
|
39
|
+
-- Then verify:
|
|
40
|
+
-- pnpm db:migrate-manual packages/database-pg/drizzle/0092_finish_oss_connector_retirement.sql
|
|
41
|
+
-- psql -c "\dt public.connectors" -- 0 rows expected
|
|
42
|
+
-- psql -c "\dt public.connector_executions" -- 0 rows expected
|
|
43
|
+
-- psql -c "\dt public.tenant_connector_catalog" -- 0 rows expected
|
|
44
|
+
-- psql -c "\dt public.computer_delegations" -- 0 rows expected
|
|
45
|
+
--
|
|
46
|
+
-- No rollback documented — the OSS connector framework is retired in
|
|
47
|
+
-- application code (origin/main has no schema files, no lib code, no
|
|
48
|
+
-- handlers, no resolvers referencing these tables). Recreating the
|
|
49
|
+
-- tables without recreating the framework would leave dead schema
|
|
50
|
+
-- behind. If a true rollback is needed, revert at the application
|
|
51
|
+
-- layer first.
|
|
52
|
+
--
|
|
53
|
+
-- Markers (consumed by scripts/db-migrate-manual.sh):
|
|
54
|
+
--
|
|
55
|
+
-- drops: public.connector_executions
|
|
56
|
+
-- drops: public.connectors
|
|
57
|
+
-- drops: public.tenant_connector_catalog
|
|
58
|
+
-- drops: public.computer_delegations
|
|
59
|
+
|
|
60
|
+
\set ON_ERROR_STOP on
|
|
61
|
+
|
|
62
|
+
BEGIN;
|
|
63
|
+
|
|
64
|
+
-- Timeouts before any potentially blocking operation. DROP TABLE takes
|
|
65
|
+
-- ACCESS EXCLUSIVE on the table; bounded waits ensure the migration
|
|
66
|
+
-- fails fast if anything is actively reading.
|
|
67
|
+
SET LOCAL lock_timeout = '30s';
|
|
68
|
+
SET LOCAL statement_timeout = '60s';
|
|
69
|
+
|
|
70
|
+
SELECT pg_advisory_xact_lock(hashtext('finish_oss_connector_retirement'));
|
|
71
|
+
|
|
72
|
+
-- Refuse to apply against an unexpected DB.
|
|
73
|
+
DO $$
|
|
74
|
+
BEGIN
|
|
75
|
+
IF current_database() != 'thinkwork' THEN
|
|
76
|
+
RAISE EXCEPTION 'wrong database: %, expected thinkwork', current_database();
|
|
77
|
+
END IF;
|
|
78
|
+
END $$;
|
|
79
|
+
|
|
80
|
+
-- Pre-flight: confirm we're on a DB that still has the tables.
|
|
81
|
+
-- (Idempotent — if a re-run finds the tables already gone, the
|
|
82
|
+
-- DROP TABLE IF EXISTS statements will no-op cleanly.)
|
|
83
|
+
DO $$
|
|
84
|
+
BEGIN
|
|
85
|
+
IF to_regclass('public.tenant_entity_external_refs') IS NOT NULL THEN
|
|
86
|
+
RAISE EXCEPTION 'pre-flight: public.tenant_entity_external_refs still exists — 0090 (brain schema extraction) must apply first';
|
|
87
|
+
END IF;
|
|
88
|
+
END $$;
|
|
89
|
+
|
|
90
|
+
-- Leaf-first DROP order: connector_executions references connectors via
|
|
91
|
+
-- FK, so drop it first. CASCADE handles internal index drops + the FK.
|
|
92
|
+
DROP TABLE IF EXISTS public.connector_executions CASCADE;
|
|
93
|
+
DROP TABLE IF EXISTS public.connectors CASCADE;
|
|
94
|
+
DROP TABLE IF EXISTS public.tenant_connector_catalog CASCADE;
|
|
95
|
+
DROP TABLE IF EXISTS public.computer_delegations CASCADE;
|
|
96
|
+
|
|
97
|
+
COMMIT;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
-- Purpose: link scheduled evaluation runs back to the scheduled job that created them.
|
|
2
|
+
-- Plan: docs/plans/2026-05-16-002-feat-evals-overhaul-redteam-library-and-substrate-fix-plan.md (U11)
|
|
3
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0093_eval_runs_scheduled_job_id.sql
|
|
4
|
+
-- creates-column: public.eval_runs.scheduled_job_id
|
|
5
|
+
-- creates-constraint: public.eval_runs.eval_runs_scheduled_job_id_scheduled_jobs_id_fk
|
|
6
|
+
-- creates: public.idx_eval_runs_scheduled_job_id
|
|
7
|
+
|
|
8
|
+
ALTER TABLE public.eval_runs
|
|
9
|
+
ADD COLUMN IF NOT EXISTS scheduled_job_id uuid;
|
|
10
|
+
|
|
11
|
+
DO $$
|
|
12
|
+
BEGIN
|
|
13
|
+
ALTER TABLE public.eval_runs
|
|
14
|
+
ADD CONSTRAINT eval_runs_scheduled_job_id_scheduled_jobs_id_fk
|
|
15
|
+
FOREIGN KEY (scheduled_job_id)
|
|
16
|
+
REFERENCES public.scheduled_jobs(id)
|
|
17
|
+
ON DELETE SET NULL;
|
|
18
|
+
EXCEPTION
|
|
19
|
+
WHEN duplicate_object THEN NULL;
|
|
20
|
+
END $$;
|
|
21
|
+
|
|
22
|
+
CREATE INDEX IF NOT EXISTS idx_eval_runs_scheduled_job_id
|
|
23
|
+
ON public.eval_runs(scheduled_job_id);
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
-- Purpose: add Slack workspace app persistence for installs, user links, and Slack thread mapping.
|
|
2
|
+
-- Plan: docs/plans/2026-05-16-004-feat-thinkwork-computer-slack-workspace-app-plan.md (U1)
|
|
3
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0094_slack_workspace_app.sql
|
|
4
|
+
-- creates: public.slack_workspaces
|
|
5
|
+
-- creates: public.slack_user_links
|
|
6
|
+
-- creates: public.slack_threads
|
|
7
|
+
-- creates: public.uq_slack_workspaces_team
|
|
8
|
+
-- creates: public.uq_slack_workspaces_tenant_team
|
|
9
|
+
-- creates: public.idx_slack_workspaces_tenant_status
|
|
10
|
+
-- creates: public.uq_slack_user_links_team_user
|
|
11
|
+
-- creates: public.idx_slack_user_links_tenant_user
|
|
12
|
+
-- creates: public.idx_slack_user_links_user
|
|
13
|
+
-- creates: public.uq_slack_threads_team_channel_root
|
|
14
|
+
-- creates: public.idx_slack_threads_thread
|
|
15
|
+
-- creates: public.idx_slack_threads_tenant_team
|
|
16
|
+
-- creates-constraint: public.slack_workspaces.slack_workspaces_tenant_id_tenants_id_fk
|
|
17
|
+
-- creates-constraint: public.slack_workspaces.slack_workspaces_installed_by_user_id_users_id_fk
|
|
18
|
+
-- creates-constraint: public.slack_workspaces.slack_workspaces_status_allowed
|
|
19
|
+
-- creates-constraint: public.slack_user_links.slack_user_links_tenant_id_tenants_id_fk
|
|
20
|
+
-- creates-constraint: public.slack_user_links.slack_user_links_slack_team_id_slack_workspaces_slack_team_id_fk
|
|
21
|
+
-- creates-constraint: public.slack_user_links.slack_user_links_user_id_users_id_fk
|
|
22
|
+
-- creates-constraint: public.slack_user_links.slack_user_links_status_allowed
|
|
23
|
+
-- creates-constraint: public.slack_threads.slack_threads_tenant_id_tenants_id_fk
|
|
24
|
+
-- creates-constraint: public.slack_threads.slack_threads_slack_team_id_slack_workspaces_slack_team_id_fk
|
|
25
|
+
-- creates-constraint: public.slack_threads.slack_threads_thread_id_threads_id_fk
|
|
26
|
+
|
|
27
|
+
\set ON_ERROR_STOP on
|
|
28
|
+
|
|
29
|
+
BEGIN;
|
|
30
|
+
|
|
31
|
+
SET LOCAL lock_timeout = '5s';
|
|
32
|
+
SET LOCAL statement_timeout = '120s';
|
|
33
|
+
|
|
34
|
+
CREATE TABLE IF NOT EXISTS public.slack_workspaces (
|
|
35
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
36
|
+
tenant_id uuid NOT NULL,
|
|
37
|
+
slack_team_id text NOT NULL,
|
|
38
|
+
slack_team_name text,
|
|
39
|
+
bot_user_id text NOT NULL,
|
|
40
|
+
bot_token_secret_path text NOT NULL,
|
|
41
|
+
app_id text NOT NULL,
|
|
42
|
+
installed_by_user_id uuid,
|
|
43
|
+
status text NOT NULL DEFAULT 'active',
|
|
44
|
+
installed_at timestamptz NOT NULL DEFAULT now(),
|
|
45
|
+
uninstalled_at timestamptz,
|
|
46
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
47
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
48
|
+
CONSTRAINT slack_workspaces_tenant_id_tenants_id_fk
|
|
49
|
+
FOREIGN KEY (tenant_id)
|
|
50
|
+
REFERENCES public.tenants(id)
|
|
51
|
+
ON DELETE CASCADE,
|
|
52
|
+
CONSTRAINT slack_workspaces_installed_by_user_id_users_id_fk
|
|
53
|
+
FOREIGN KEY (installed_by_user_id)
|
|
54
|
+
REFERENCES public.users(id)
|
|
55
|
+
ON DELETE SET NULL,
|
|
56
|
+
CONSTRAINT slack_workspaces_status_allowed
|
|
57
|
+
CHECK (status IN ('active','uninstalled','revoked'))
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_slack_workspaces_team
|
|
61
|
+
ON public.slack_workspaces (slack_team_id);
|
|
62
|
+
|
|
63
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_slack_workspaces_tenant_team
|
|
64
|
+
ON public.slack_workspaces (tenant_id, slack_team_id);
|
|
65
|
+
|
|
66
|
+
CREATE INDEX IF NOT EXISTS idx_slack_workspaces_tenant_status
|
|
67
|
+
ON public.slack_workspaces (tenant_id, status);
|
|
68
|
+
|
|
69
|
+
CREATE TABLE IF NOT EXISTS public.slack_user_links (
|
|
70
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
71
|
+
tenant_id uuid NOT NULL,
|
|
72
|
+
slack_team_id text NOT NULL,
|
|
73
|
+
slack_user_id text NOT NULL,
|
|
74
|
+
user_id uuid NOT NULL,
|
|
75
|
+
slack_user_name text,
|
|
76
|
+
slack_user_email text,
|
|
77
|
+
status text NOT NULL DEFAULT 'active',
|
|
78
|
+
linked_at timestamptz NOT NULL DEFAULT now(),
|
|
79
|
+
unlinked_at timestamptz,
|
|
80
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
81
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
82
|
+
CONSTRAINT slack_user_links_tenant_id_tenants_id_fk
|
|
83
|
+
FOREIGN KEY (tenant_id)
|
|
84
|
+
REFERENCES public.tenants(id)
|
|
85
|
+
ON DELETE CASCADE,
|
|
86
|
+
CONSTRAINT slack_user_links_slack_team_id_slack_workspaces_slack_team_id_fk
|
|
87
|
+
FOREIGN KEY (slack_team_id)
|
|
88
|
+
REFERENCES public.slack_workspaces(slack_team_id)
|
|
89
|
+
ON DELETE RESTRICT,
|
|
90
|
+
CONSTRAINT slack_user_links_user_id_users_id_fk
|
|
91
|
+
FOREIGN KEY (user_id)
|
|
92
|
+
REFERENCES public.users(id)
|
|
93
|
+
ON DELETE RESTRICT,
|
|
94
|
+
CONSTRAINT slack_user_links_status_allowed
|
|
95
|
+
CHECK (status IN ('active','unlinked','orphaned','suspended'))
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_slack_user_links_team_user
|
|
99
|
+
ON public.slack_user_links (slack_team_id, slack_user_id);
|
|
100
|
+
|
|
101
|
+
CREATE INDEX IF NOT EXISTS idx_slack_user_links_tenant_user
|
|
102
|
+
ON public.slack_user_links (tenant_id, user_id);
|
|
103
|
+
|
|
104
|
+
CREATE INDEX IF NOT EXISTS idx_slack_user_links_user
|
|
105
|
+
ON public.slack_user_links (user_id);
|
|
106
|
+
|
|
107
|
+
CREATE TABLE IF NOT EXISTS public.slack_threads (
|
|
108
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
109
|
+
tenant_id uuid NOT NULL,
|
|
110
|
+
slack_team_id text NOT NULL,
|
|
111
|
+
channel_id text NOT NULL,
|
|
112
|
+
root_thread_ts text,
|
|
113
|
+
thread_id uuid NOT NULL,
|
|
114
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
115
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
116
|
+
CONSTRAINT slack_threads_tenant_id_tenants_id_fk
|
|
117
|
+
FOREIGN KEY (tenant_id)
|
|
118
|
+
REFERENCES public.tenants(id)
|
|
119
|
+
ON DELETE CASCADE,
|
|
120
|
+
CONSTRAINT slack_threads_slack_team_id_slack_workspaces_slack_team_id_fk
|
|
121
|
+
FOREIGN KEY (slack_team_id)
|
|
122
|
+
REFERENCES public.slack_workspaces(slack_team_id)
|
|
123
|
+
ON DELETE RESTRICT,
|
|
124
|
+
CONSTRAINT slack_threads_thread_id_threads_id_fk
|
|
125
|
+
FOREIGN KEY (thread_id)
|
|
126
|
+
REFERENCES public.threads(id)
|
|
127
|
+
ON DELETE CASCADE
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_slack_threads_team_channel_root
|
|
131
|
+
ON public.slack_threads (slack_team_id, channel_id, root_thread_ts)
|
|
132
|
+
NULLS NOT DISTINCT;
|
|
133
|
+
|
|
134
|
+
CREATE INDEX IF NOT EXISTS idx_slack_threads_thread
|
|
135
|
+
ON public.slack_threads (thread_id);
|
|
136
|
+
|
|
137
|
+
CREATE INDEX IF NOT EXISTS idx_slack_threads_tenant_team
|
|
138
|
+
ON public.slack_threads (tenant_id, slack_team_id);
|
|
139
|
+
|
|
140
|
+
COMMIT;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
-- Purpose: persist the running Computer selected for an eval run.
|
|
2
|
+
-- Plan: docs/plans/2026-05-16-002-feat-evals-overhaul-redteam-library-and-substrate-fix-plan.md (follow-up)
|
|
3
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0095_eval_runs_computer_id.sql
|
|
4
|
+
-- creates-column: public.eval_runs.computer_id
|
|
5
|
+
-- creates-constraint: public.eval_runs.eval_runs_computer_id_computers_id_fk
|
|
6
|
+
-- creates: public.idx_eval_runs_tenant_computer_created
|
|
7
|
+
|
|
8
|
+
ALTER TABLE public.eval_runs
|
|
9
|
+
ADD COLUMN IF NOT EXISTS computer_id uuid;
|
|
10
|
+
|
|
11
|
+
DO $$
|
|
12
|
+
BEGIN
|
|
13
|
+
ALTER TABLE public.eval_runs
|
|
14
|
+
ADD CONSTRAINT eval_runs_computer_id_computers_id_fk
|
|
15
|
+
FOREIGN KEY (computer_id)
|
|
16
|
+
REFERENCES public.computers(id);
|
|
17
|
+
EXCEPTION
|
|
18
|
+
WHEN duplicate_object THEN NULL;
|
|
19
|
+
END $$;
|
|
20
|
+
|
|
21
|
+
CREATE INDEX IF NOT EXISTS idx_eval_runs_tenant_computer_created
|
|
22
|
+
ON public.eval_runs(tenant_id, computer_id, created_at);
|