thinkwork-cli 0.12.12 → 0.12.16
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-JUBCQQDF.js} +1 -1
- package/dist/{chunk-JEHV35EU.js → chunk-STY44FQO.js} +353 -30
- package/dist/cli.js +23823 -10151
- 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/0197_rcm_context_columns.sql +28 -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 +466 -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 +2 -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,197 @@
|
|
|
1
|
+
-- Purpose: attach threads to Spaces and add human/agent thread participants.
|
|
2
|
+
-- Plan: docs/plans/2026-05-19-003-feat-spaces-customer-onboarding-v1-plan.md (U3)
|
|
3
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0106_space_threads_participants.sql
|
|
4
|
+
-- creates-column: public.threads.space_id
|
|
5
|
+
-- creates: public.idx_threads_tenant_space_updated
|
|
6
|
+
-- creates: public.thread_participants
|
|
7
|
+
-- creates: public.uq_thread_participants_user
|
|
8
|
+
-- creates: public.uq_thread_participants_agent
|
|
9
|
+
-- creates: public.idx_thread_participants_thread
|
|
10
|
+
-- creates: public.idx_thread_participants_space
|
|
11
|
+
-- creates-function: public.enforce_thread_participant_tenant
|
|
12
|
+
-- creates-function: public.enforce_thread_space_tenant
|
|
13
|
+
-- creates-trigger: public.thread_participants.thread_participants_tenant_guard
|
|
14
|
+
-- creates-trigger: public.threads.threads_space_tenant_guard
|
|
15
|
+
-- creates-constraint: public.threads.threads_space_id_spaces_id_fk
|
|
16
|
+
-- creates-constraint: public.thread_participants.thread_participants_tenant_id_tenants_id_fk
|
|
17
|
+
-- creates-constraint: public.thread_participants.thread_participants_thread_id_threads_id_fk
|
|
18
|
+
-- creates-constraint: public.thread_participants.thread_participants_space_id_spaces_id_fk
|
|
19
|
+
-- creates-constraint: public.thread_participants.thread_participants_user_id_users_id_fk
|
|
20
|
+
-- creates-constraint: public.thread_participants.thread_participants_agent_id_agents_id_fk
|
|
21
|
+
-- creates-constraint: public.thread_participants.thread_participants_type_allowed
|
|
22
|
+
-- creates-constraint: public.thread_participants.thread_participants_target_matches_type
|
|
23
|
+
-- creates-constraint: public.thread_participants.thread_participants_notification_preference_allowed
|
|
24
|
+
|
|
25
|
+
\set ON_ERROR_STOP on
|
|
26
|
+
|
|
27
|
+
BEGIN;
|
|
28
|
+
|
|
29
|
+
SET LOCAL lock_timeout = '5s';
|
|
30
|
+
SET LOCAL statement_timeout = '120s';
|
|
31
|
+
|
|
32
|
+
ALTER TABLE public.threads
|
|
33
|
+
ADD COLUMN IF NOT EXISTS space_id uuid;
|
|
34
|
+
|
|
35
|
+
DO $$
|
|
36
|
+
BEGIN
|
|
37
|
+
ALTER TABLE public.threads
|
|
38
|
+
ADD CONSTRAINT threads_space_id_spaces_id_fk
|
|
39
|
+
FOREIGN KEY (space_id)
|
|
40
|
+
REFERENCES public.spaces(id)
|
|
41
|
+
ON DELETE SET NULL;
|
|
42
|
+
EXCEPTION
|
|
43
|
+
WHEN duplicate_object THEN NULL;
|
|
44
|
+
END $$;
|
|
45
|
+
|
|
46
|
+
CREATE INDEX IF NOT EXISTS idx_threads_tenant_space_updated
|
|
47
|
+
ON public.threads (tenant_id, space_id, updated_at DESC)
|
|
48
|
+
WHERE space_id IS NOT NULL;
|
|
49
|
+
|
|
50
|
+
CREATE OR REPLACE FUNCTION public.enforce_thread_space_tenant()
|
|
51
|
+
RETURNS trigger
|
|
52
|
+
LANGUAGE plpgsql
|
|
53
|
+
AS $$
|
|
54
|
+
DECLARE
|
|
55
|
+
target_tenant_id uuid;
|
|
56
|
+
BEGIN
|
|
57
|
+
IF NEW.space_id IS NULL THEN
|
|
58
|
+
RETURN NEW;
|
|
59
|
+
END IF;
|
|
60
|
+
|
|
61
|
+
SELECT tenant_id INTO target_tenant_id
|
|
62
|
+
FROM public.spaces
|
|
63
|
+
WHERE id = NEW.space_id;
|
|
64
|
+
|
|
65
|
+
IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
|
|
66
|
+
RAISE EXCEPTION 'thread space tenant mismatch for space %', NEW.space_id
|
|
67
|
+
USING ERRCODE = '23514';
|
|
68
|
+
END IF;
|
|
69
|
+
|
|
70
|
+
RETURN NEW;
|
|
71
|
+
END;
|
|
72
|
+
$$;
|
|
73
|
+
|
|
74
|
+
DROP TRIGGER IF EXISTS threads_space_tenant_guard
|
|
75
|
+
ON public.threads;
|
|
76
|
+
|
|
77
|
+
CREATE TRIGGER threads_space_tenant_guard
|
|
78
|
+
BEFORE INSERT OR UPDATE OF tenant_id, space_id
|
|
79
|
+
ON public.threads
|
|
80
|
+
FOR EACH ROW
|
|
81
|
+
EXECUTE FUNCTION public.enforce_thread_space_tenant();
|
|
82
|
+
|
|
83
|
+
CREATE TABLE IF NOT EXISTS public.thread_participants (
|
|
84
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
85
|
+
tenant_id uuid NOT NULL,
|
|
86
|
+
thread_id uuid NOT NULL,
|
|
87
|
+
space_id uuid,
|
|
88
|
+
participant_type text NOT NULL,
|
|
89
|
+
user_id uuid,
|
|
90
|
+
agent_id uuid,
|
|
91
|
+
role text NOT NULL DEFAULT 'member',
|
|
92
|
+
source text NOT NULL DEFAULT 'manual',
|
|
93
|
+
notification_preference text NOT NULL DEFAULT 'subscribed',
|
|
94
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
95
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
96
|
+
CONSTRAINT thread_participants_tenant_id_tenants_id_fk
|
|
97
|
+
FOREIGN KEY (tenant_id)
|
|
98
|
+
REFERENCES public.tenants(id)
|
|
99
|
+
ON DELETE CASCADE,
|
|
100
|
+
CONSTRAINT thread_participants_thread_id_threads_id_fk
|
|
101
|
+
FOREIGN KEY (thread_id)
|
|
102
|
+
REFERENCES public.threads(id)
|
|
103
|
+
ON DELETE CASCADE,
|
|
104
|
+
CONSTRAINT thread_participants_space_id_spaces_id_fk
|
|
105
|
+
FOREIGN KEY (space_id)
|
|
106
|
+
REFERENCES public.spaces(id)
|
|
107
|
+
ON DELETE SET NULL,
|
|
108
|
+
CONSTRAINT thread_participants_user_id_users_id_fk
|
|
109
|
+
FOREIGN KEY (user_id)
|
|
110
|
+
REFERENCES public.users(id)
|
|
111
|
+
ON DELETE CASCADE,
|
|
112
|
+
CONSTRAINT thread_participants_agent_id_agents_id_fk
|
|
113
|
+
FOREIGN KEY (agent_id)
|
|
114
|
+
REFERENCES public.agents(id)
|
|
115
|
+
ON DELETE CASCADE,
|
|
116
|
+
CONSTRAINT thread_participants_type_allowed
|
|
117
|
+
CHECK (participant_type IN ('user', 'agent')),
|
|
118
|
+
CONSTRAINT thread_participants_target_matches_type
|
|
119
|
+
CHECK (
|
|
120
|
+
(participant_type = 'user' AND user_id IS NOT NULL AND agent_id IS NULL)
|
|
121
|
+
OR
|
|
122
|
+
(participant_type = 'agent' AND agent_id IS NOT NULL AND user_id IS NULL)
|
|
123
|
+
),
|
|
124
|
+
CONSTRAINT thread_participants_notification_preference_allowed
|
|
125
|
+
CHECK (notification_preference IN ('subscribed', 'mentions', 'muted'))
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_thread_participants_user
|
|
129
|
+
ON public.thread_participants (tenant_id, thread_id, user_id)
|
|
130
|
+
WHERE user_id IS NOT NULL;
|
|
131
|
+
|
|
132
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_thread_participants_agent
|
|
133
|
+
ON public.thread_participants (tenant_id, thread_id, agent_id)
|
|
134
|
+
WHERE agent_id IS NOT NULL;
|
|
135
|
+
|
|
136
|
+
CREATE INDEX IF NOT EXISTS idx_thread_participants_thread
|
|
137
|
+
ON public.thread_participants (thread_id);
|
|
138
|
+
|
|
139
|
+
CREATE INDEX IF NOT EXISTS idx_thread_participants_space
|
|
140
|
+
ON public.thread_participants (tenant_id, space_id);
|
|
141
|
+
|
|
142
|
+
CREATE OR REPLACE FUNCTION public.enforce_thread_participant_tenant()
|
|
143
|
+
RETURNS trigger
|
|
144
|
+
LANGUAGE plpgsql
|
|
145
|
+
AS $$
|
|
146
|
+
DECLARE
|
|
147
|
+
target_tenant_id uuid;
|
|
148
|
+
target_space_id uuid;
|
|
149
|
+
BEGIN
|
|
150
|
+
SELECT tenant_id, space_id INTO target_tenant_id, target_space_id
|
|
151
|
+
FROM public.threads
|
|
152
|
+
WHERE id = NEW.thread_id;
|
|
153
|
+
|
|
154
|
+
IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
|
|
155
|
+
RAISE EXCEPTION 'thread participant tenant mismatch for thread %', NEW.thread_id
|
|
156
|
+
USING ERRCODE = '23514';
|
|
157
|
+
END IF;
|
|
158
|
+
|
|
159
|
+
IF NEW.space_id IS DISTINCT FROM target_space_id THEN
|
|
160
|
+
RAISE EXCEPTION 'thread participant space mismatch for thread %', NEW.thread_id
|
|
161
|
+
USING ERRCODE = '23514';
|
|
162
|
+
END IF;
|
|
163
|
+
|
|
164
|
+
IF NEW.participant_type = 'user' THEN
|
|
165
|
+
SELECT tenant_id INTO target_tenant_id
|
|
166
|
+
FROM public.users
|
|
167
|
+
WHERE id = NEW.user_id;
|
|
168
|
+
|
|
169
|
+
IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
|
|
170
|
+
RAISE EXCEPTION 'thread participant tenant mismatch for user %', NEW.user_id
|
|
171
|
+
USING ERRCODE = '23514';
|
|
172
|
+
END IF;
|
|
173
|
+
ELSIF NEW.participant_type = 'agent' THEN
|
|
174
|
+
SELECT tenant_id INTO target_tenant_id
|
|
175
|
+
FROM public.agents
|
|
176
|
+
WHERE id = NEW.agent_id;
|
|
177
|
+
|
|
178
|
+
IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
|
|
179
|
+
RAISE EXCEPTION 'thread participant tenant mismatch for agent %', NEW.agent_id
|
|
180
|
+
USING ERRCODE = '23514';
|
|
181
|
+
END IF;
|
|
182
|
+
END IF;
|
|
183
|
+
|
|
184
|
+
RETURN NEW;
|
|
185
|
+
END;
|
|
186
|
+
$$;
|
|
187
|
+
|
|
188
|
+
DROP TRIGGER IF EXISTS thread_participants_tenant_guard
|
|
189
|
+
ON public.thread_participants;
|
|
190
|
+
|
|
191
|
+
CREATE TRIGGER thread_participants_tenant_guard
|
|
192
|
+
BEFORE INSERT OR UPDATE
|
|
193
|
+
ON public.thread_participants
|
|
194
|
+
FOR EACH ROW
|
|
195
|
+
EXECUTE FUNCTION public.enforce_thread_participant_tenant();
|
|
196
|
+
|
|
197
|
+
COMMIT;
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
-- Purpose: add ThinkWork-side linked task mirror tables for Space Threads.
|
|
2
|
+
-- Plan: docs/plans/2026-05-19-003-feat-spaces-customer-onboarding-v1-plan.md (U4)
|
|
3
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0107_linked_task_mirror.sql
|
|
4
|
+
-- creates: public.linked_tasks
|
|
5
|
+
-- creates: public.linked_task_events
|
|
6
|
+
-- creates: public.uq_linked_tasks_external
|
|
7
|
+
-- creates: public.uq_linked_tasks_checklist_item
|
|
8
|
+
-- creates: public.idx_linked_tasks_thread
|
|
9
|
+
-- creates: public.idx_linked_tasks_space
|
|
10
|
+
-- creates: public.uq_linked_task_events_external
|
|
11
|
+
-- creates: public.idx_linked_task_events_task
|
|
12
|
+
-- creates: public.idx_linked_task_events_thread
|
|
13
|
+
-- creates-function: public.enforce_linked_task_tenant
|
|
14
|
+
-- creates-function: public.enforce_linked_task_event_tenant
|
|
15
|
+
-- creates-trigger: public.linked_tasks.linked_tasks_tenant_guard
|
|
16
|
+
-- creates-trigger: public.linked_task_events.linked_task_events_tenant_guard
|
|
17
|
+
-- creates-constraint: public.linked_tasks.linked_tasks_tenant_id_tenants_id_fk
|
|
18
|
+
-- creates-constraint: public.linked_tasks.linked_tasks_space_id_spaces_id_fk
|
|
19
|
+
-- creates-constraint: public.linked_tasks.linked_tasks_thread_id_threads_id_fk
|
|
20
|
+
-- creates-constraint: public.linked_tasks.linked_tasks_checklist_item_id_space_checklist_items_id_fk
|
|
21
|
+
-- creates-constraint: public.linked_tasks.linked_tasks_provider_allowed
|
|
22
|
+
-- creates-constraint: public.linked_tasks.linked_tasks_status_allowed
|
|
23
|
+
-- creates-constraint: public.linked_tasks.linked_tasks_sync_status_allowed
|
|
24
|
+
-- creates-constraint: public.linked_task_events.linked_task_events_tenant_id_tenants_id_fk
|
|
25
|
+
-- creates-constraint: public.linked_task_events.linked_task_events_linked_task_id_linked_tasks_id_fk
|
|
26
|
+
-- creates-constraint: public.linked_task_events.linked_task_events_space_id_spaces_id_fk
|
|
27
|
+
-- creates-constraint: public.linked_task_events.linked_task_events_thread_id_threads_id_fk
|
|
28
|
+
-- creates-constraint: public.linked_task_events.linked_task_events_provider_allowed
|
|
29
|
+
-- creates-constraint: public.linked_task_events.linked_task_events_type_allowed
|
|
30
|
+
-- creates-constraint: public.linked_task_events.linked_task_events_previous_status_allowed
|
|
31
|
+
-- creates-constraint: public.linked_task_events.linked_task_events_new_status_allowed
|
|
32
|
+
|
|
33
|
+
\set ON_ERROR_STOP on
|
|
34
|
+
|
|
35
|
+
BEGIN;
|
|
36
|
+
|
|
37
|
+
SET LOCAL lock_timeout = '5s';
|
|
38
|
+
SET LOCAL statement_timeout = '120s';
|
|
39
|
+
|
|
40
|
+
CREATE TABLE IF NOT EXISTS public.linked_tasks (
|
|
41
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
42
|
+
tenant_id uuid NOT NULL,
|
|
43
|
+
space_id uuid NOT NULL,
|
|
44
|
+
thread_id uuid NOT NULL,
|
|
45
|
+
checklist_item_id uuid,
|
|
46
|
+
provider text NOT NULL DEFAULT 'lastmile',
|
|
47
|
+
external_task_id text NOT NULL,
|
|
48
|
+
external_task_url text,
|
|
49
|
+
title text NOT NULL,
|
|
50
|
+
required boolean NOT NULL DEFAULT true,
|
|
51
|
+
role_key text,
|
|
52
|
+
assignee_display text,
|
|
53
|
+
assignee_external_id text,
|
|
54
|
+
status text NOT NULL DEFAULT 'unknown',
|
|
55
|
+
blocked boolean NOT NULL DEFAULT false,
|
|
56
|
+
sync_status text NOT NULL DEFAULT 'pending',
|
|
57
|
+
last_synced_at timestamptz,
|
|
58
|
+
metadata jsonb,
|
|
59
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
60
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
61
|
+
CONSTRAINT linked_tasks_tenant_id_tenants_id_fk
|
|
62
|
+
FOREIGN KEY (tenant_id)
|
|
63
|
+
REFERENCES public.tenants(id)
|
|
64
|
+
ON DELETE CASCADE,
|
|
65
|
+
CONSTRAINT linked_tasks_space_id_spaces_id_fk
|
|
66
|
+
FOREIGN KEY (space_id)
|
|
67
|
+
REFERENCES public.spaces(id)
|
|
68
|
+
ON DELETE CASCADE,
|
|
69
|
+
CONSTRAINT linked_tasks_thread_id_threads_id_fk
|
|
70
|
+
FOREIGN KEY (thread_id)
|
|
71
|
+
REFERENCES public.threads(id)
|
|
72
|
+
ON DELETE CASCADE,
|
|
73
|
+
CONSTRAINT linked_tasks_checklist_item_id_space_checklist_items_id_fk
|
|
74
|
+
FOREIGN KEY (checklist_item_id)
|
|
75
|
+
REFERENCES public.space_checklist_items(id)
|
|
76
|
+
ON DELETE SET NULL,
|
|
77
|
+
CONSTRAINT linked_tasks_provider_allowed
|
|
78
|
+
CHECK (provider IN ('lastmile')),
|
|
79
|
+
CONSTRAINT linked_tasks_status_allowed
|
|
80
|
+
CHECK (status IN ('unknown', 'todo', 'in_progress', 'completed', 'blocked', 'cancelled')),
|
|
81
|
+
CONSTRAINT linked_tasks_sync_status_allowed
|
|
82
|
+
CHECK (sync_status IN ('pending', 'synced', 'warning', 'error'))
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_linked_tasks_external
|
|
86
|
+
ON public.linked_tasks (tenant_id, provider, external_task_id);
|
|
87
|
+
|
|
88
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_linked_tasks_checklist_item
|
|
89
|
+
ON public.linked_tasks (tenant_id, thread_id, checklist_item_id)
|
|
90
|
+
WHERE checklist_item_id IS NOT NULL;
|
|
91
|
+
|
|
92
|
+
CREATE INDEX IF NOT EXISTS idx_linked_tasks_thread
|
|
93
|
+
ON public.linked_tasks (tenant_id, thread_id);
|
|
94
|
+
|
|
95
|
+
CREATE INDEX IF NOT EXISTS idx_linked_tasks_space
|
|
96
|
+
ON public.linked_tasks (tenant_id, space_id);
|
|
97
|
+
|
|
98
|
+
CREATE TABLE IF NOT EXISTS public.linked_task_events (
|
|
99
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
100
|
+
tenant_id uuid NOT NULL,
|
|
101
|
+
linked_task_id uuid NOT NULL,
|
|
102
|
+
space_id uuid NOT NULL,
|
|
103
|
+
thread_id uuid NOT NULL,
|
|
104
|
+
provider text NOT NULL DEFAULT 'lastmile',
|
|
105
|
+
event_type text NOT NULL,
|
|
106
|
+
external_event_id text,
|
|
107
|
+
previous_status text,
|
|
108
|
+
new_status text,
|
|
109
|
+
message text,
|
|
110
|
+
metadata jsonb,
|
|
111
|
+
occurred_at timestamptz NOT NULL DEFAULT now(),
|
|
112
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
113
|
+
CONSTRAINT linked_task_events_tenant_id_tenants_id_fk
|
|
114
|
+
FOREIGN KEY (tenant_id)
|
|
115
|
+
REFERENCES public.tenants(id)
|
|
116
|
+
ON DELETE CASCADE,
|
|
117
|
+
CONSTRAINT linked_task_events_linked_task_id_linked_tasks_id_fk
|
|
118
|
+
FOREIGN KEY (linked_task_id)
|
|
119
|
+
REFERENCES public.linked_tasks(id)
|
|
120
|
+
ON DELETE CASCADE,
|
|
121
|
+
CONSTRAINT linked_task_events_space_id_spaces_id_fk
|
|
122
|
+
FOREIGN KEY (space_id)
|
|
123
|
+
REFERENCES public.spaces(id)
|
|
124
|
+
ON DELETE CASCADE,
|
|
125
|
+
CONSTRAINT linked_task_events_thread_id_threads_id_fk
|
|
126
|
+
FOREIGN KEY (thread_id)
|
|
127
|
+
REFERENCES public.threads(id)
|
|
128
|
+
ON DELETE CASCADE,
|
|
129
|
+
CONSTRAINT linked_task_events_provider_allowed
|
|
130
|
+
CHECK (provider IN ('lastmile')),
|
|
131
|
+
CONSTRAINT linked_task_events_type_allowed
|
|
132
|
+
CHECK (event_type IN ('created', 'completed', 'blocked', 'reassigned', 'due_date_changed', 'sync_failed', 'writeback_posted')),
|
|
133
|
+
CONSTRAINT linked_task_events_previous_status_allowed
|
|
134
|
+
CHECK (previous_status IS NULL OR previous_status IN ('unknown', 'todo', 'in_progress', 'completed', 'blocked', 'cancelled')),
|
|
135
|
+
CONSTRAINT linked_task_events_new_status_allowed
|
|
136
|
+
CHECK (new_status IS NULL OR new_status IN ('unknown', 'todo', 'in_progress', 'completed', 'blocked', 'cancelled'))
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_linked_task_events_external
|
|
140
|
+
ON public.linked_task_events (tenant_id, provider, external_event_id)
|
|
141
|
+
WHERE external_event_id IS NOT NULL;
|
|
142
|
+
|
|
143
|
+
CREATE INDEX IF NOT EXISTS idx_linked_task_events_task
|
|
144
|
+
ON public.linked_task_events (linked_task_id);
|
|
145
|
+
|
|
146
|
+
CREATE INDEX IF NOT EXISTS idx_linked_task_events_thread
|
|
147
|
+
ON public.linked_task_events (tenant_id, thread_id);
|
|
148
|
+
|
|
149
|
+
CREATE OR REPLACE FUNCTION public.enforce_linked_task_tenant()
|
|
150
|
+
RETURNS trigger
|
|
151
|
+
LANGUAGE plpgsql
|
|
152
|
+
AS $$
|
|
153
|
+
DECLARE
|
|
154
|
+
target_tenant_id uuid;
|
|
155
|
+
target_space_id uuid;
|
|
156
|
+
BEGIN
|
|
157
|
+
SELECT tenant_id, space_id INTO target_tenant_id, target_space_id
|
|
158
|
+
FROM public.threads
|
|
159
|
+
WHERE id = NEW.thread_id;
|
|
160
|
+
|
|
161
|
+
IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
|
|
162
|
+
RAISE EXCEPTION 'linked task tenant mismatch for thread %', NEW.thread_id
|
|
163
|
+
USING ERRCODE = '23514';
|
|
164
|
+
END IF;
|
|
165
|
+
|
|
166
|
+
IF target_space_id IS NULL OR target_space_id <> NEW.space_id THEN
|
|
167
|
+
RAISE EXCEPTION 'linked task space mismatch for thread %', NEW.thread_id
|
|
168
|
+
USING ERRCODE = '23514';
|
|
169
|
+
END IF;
|
|
170
|
+
|
|
171
|
+
SELECT tenant_id INTO target_tenant_id
|
|
172
|
+
FROM public.spaces
|
|
173
|
+
WHERE id = NEW.space_id;
|
|
174
|
+
|
|
175
|
+
IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
|
|
176
|
+
RAISE EXCEPTION 'linked task tenant mismatch for space %', NEW.space_id
|
|
177
|
+
USING ERRCODE = '23514';
|
|
178
|
+
END IF;
|
|
179
|
+
|
|
180
|
+
IF NEW.checklist_item_id IS NOT NULL THEN
|
|
181
|
+
SELECT tenant_id, space_id INTO target_tenant_id, target_space_id
|
|
182
|
+
FROM public.space_checklist_items
|
|
183
|
+
WHERE id = NEW.checklist_item_id;
|
|
184
|
+
|
|
185
|
+
IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
|
|
186
|
+
RAISE EXCEPTION 'linked task tenant mismatch for checklist item %', NEW.checklist_item_id
|
|
187
|
+
USING ERRCODE = '23514';
|
|
188
|
+
END IF;
|
|
189
|
+
|
|
190
|
+
IF target_space_id <> NEW.space_id THEN
|
|
191
|
+
RAISE EXCEPTION 'linked task space mismatch for checklist item %', NEW.checklist_item_id
|
|
192
|
+
USING ERRCODE = '23514';
|
|
193
|
+
END IF;
|
|
194
|
+
END IF;
|
|
195
|
+
|
|
196
|
+
RETURN NEW;
|
|
197
|
+
END;
|
|
198
|
+
$$;
|
|
199
|
+
|
|
200
|
+
DROP TRIGGER IF EXISTS linked_tasks_tenant_guard
|
|
201
|
+
ON public.linked_tasks;
|
|
202
|
+
|
|
203
|
+
CREATE TRIGGER linked_tasks_tenant_guard
|
|
204
|
+
BEFORE INSERT OR UPDATE
|
|
205
|
+
ON public.linked_tasks
|
|
206
|
+
FOR EACH ROW
|
|
207
|
+
EXECUTE FUNCTION public.enforce_linked_task_tenant();
|
|
208
|
+
|
|
209
|
+
CREATE OR REPLACE FUNCTION public.enforce_linked_task_event_tenant()
|
|
210
|
+
RETURNS trigger
|
|
211
|
+
LANGUAGE plpgsql
|
|
212
|
+
AS $$
|
|
213
|
+
DECLARE
|
|
214
|
+
target_tenant_id uuid;
|
|
215
|
+
target_space_id uuid;
|
|
216
|
+
target_thread_id uuid;
|
|
217
|
+
BEGIN
|
|
218
|
+
SELECT tenant_id, space_id, thread_id INTO target_tenant_id, target_space_id, target_thread_id
|
|
219
|
+
FROM public.linked_tasks
|
|
220
|
+
WHERE id = NEW.linked_task_id;
|
|
221
|
+
|
|
222
|
+
IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
|
|
223
|
+
RAISE EXCEPTION 'linked task event tenant mismatch for linked task %', NEW.linked_task_id
|
|
224
|
+
USING ERRCODE = '23514';
|
|
225
|
+
END IF;
|
|
226
|
+
|
|
227
|
+
IF target_space_id <> NEW.space_id OR target_thread_id <> NEW.thread_id THEN
|
|
228
|
+
RAISE EXCEPTION 'linked task event parent mismatch for linked task %', NEW.linked_task_id
|
|
229
|
+
USING ERRCODE = '23514';
|
|
230
|
+
END IF;
|
|
231
|
+
|
|
232
|
+
RETURN NEW;
|
|
233
|
+
END;
|
|
234
|
+
$$;
|
|
235
|
+
|
|
236
|
+
DROP TRIGGER IF EXISTS linked_task_events_tenant_guard
|
|
237
|
+
ON public.linked_task_events;
|
|
238
|
+
|
|
239
|
+
CREATE TRIGGER linked_task_events_tenant_guard
|
|
240
|
+
BEFORE INSERT OR UPDATE
|
|
241
|
+
ON public.linked_task_events
|
|
242
|
+
FOR EACH ROW
|
|
243
|
+
EXECUTE FUNCTION public.enforce_linked_task_event_tenant();
|
|
244
|
+
|
|
245
|
+
COMMIT;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
-- Purpose: add structured message mentions for collaborative Space Threads.
|
|
2
|
+
-- Plan: docs/plans/2026-05-19-003-feat-spaces-customer-onboarding-v1-plan.md (U10)
|
|
3
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0108_message_mentions.sql
|
|
4
|
+
-- creates: public.message_mentions
|
|
5
|
+
-- creates: public.uq_message_mentions_target
|
|
6
|
+
-- creates: public.idx_message_mentions_thread
|
|
7
|
+
-- creates: public.idx_message_mentions_target
|
|
8
|
+
-- creates-function: public.enforce_message_mention_tenant
|
|
9
|
+
-- creates-trigger: public.message_mentions.message_mentions_tenant_guard
|
|
10
|
+
-- creates-constraint: public.message_mentions.message_mentions_tenant_id_tenants_id_fk
|
|
11
|
+
-- creates-constraint: public.message_mentions.message_mentions_thread_id_threads_id_fk
|
|
12
|
+
-- creates-constraint: public.message_mentions.message_mentions_message_id_messages_id_fk
|
|
13
|
+
-- creates-constraint: public.message_mentions.message_mentions_target_type_allowed
|
|
14
|
+
|
|
15
|
+
\set ON_ERROR_STOP on
|
|
16
|
+
|
|
17
|
+
BEGIN;
|
|
18
|
+
|
|
19
|
+
SET LOCAL lock_timeout = '5s';
|
|
20
|
+
SET LOCAL statement_timeout = '120s';
|
|
21
|
+
|
|
22
|
+
CREATE TABLE IF NOT EXISTS public.message_mentions (
|
|
23
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
24
|
+
tenant_id uuid NOT NULL,
|
|
25
|
+
thread_id uuid NOT NULL,
|
|
26
|
+
message_id uuid NOT NULL,
|
|
27
|
+
target_type text NOT NULL,
|
|
28
|
+
target_id uuid NOT NULL,
|
|
29
|
+
display_name text NOT NULL,
|
|
30
|
+
raw_text text,
|
|
31
|
+
start_offset integer,
|
|
32
|
+
end_offset integer,
|
|
33
|
+
metadata jsonb,
|
|
34
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
35
|
+
CONSTRAINT message_mentions_tenant_id_tenants_id_fk
|
|
36
|
+
FOREIGN KEY (tenant_id)
|
|
37
|
+
REFERENCES public.tenants(id)
|
|
38
|
+
ON DELETE CASCADE,
|
|
39
|
+
CONSTRAINT message_mentions_thread_id_threads_id_fk
|
|
40
|
+
FOREIGN KEY (thread_id)
|
|
41
|
+
REFERENCES public.threads(id)
|
|
42
|
+
ON DELETE CASCADE,
|
|
43
|
+
CONSTRAINT message_mentions_message_id_messages_id_fk
|
|
44
|
+
FOREIGN KEY (message_id)
|
|
45
|
+
REFERENCES public.messages(id)
|
|
46
|
+
ON DELETE CASCADE,
|
|
47
|
+
CONSTRAINT message_mentions_target_type_allowed
|
|
48
|
+
CHECK (target_type IN ('user', 'agent', 'agent_profile'))
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_message_mentions_target
|
|
52
|
+
ON public.message_mentions (message_id, target_type, target_id);
|
|
53
|
+
|
|
54
|
+
CREATE INDEX IF NOT EXISTS idx_message_mentions_thread
|
|
55
|
+
ON public.message_mentions (tenant_id, thread_id);
|
|
56
|
+
|
|
57
|
+
CREATE INDEX IF NOT EXISTS idx_message_mentions_target
|
|
58
|
+
ON public.message_mentions (tenant_id, target_type, target_id);
|
|
59
|
+
|
|
60
|
+
CREATE OR REPLACE FUNCTION public.enforce_message_mention_tenant()
|
|
61
|
+
RETURNS trigger
|
|
62
|
+
LANGUAGE plpgsql
|
|
63
|
+
AS $$
|
|
64
|
+
DECLARE
|
|
65
|
+
message_tenant uuid;
|
|
66
|
+
message_thread uuid;
|
|
67
|
+
BEGIN
|
|
68
|
+
SELECT tenant_id, thread_id
|
|
69
|
+
INTO message_tenant, message_thread
|
|
70
|
+
FROM public.messages
|
|
71
|
+
WHERE id = NEW.message_id;
|
|
72
|
+
|
|
73
|
+
IF message_tenant IS NULL THEN
|
|
74
|
+
RAISE EXCEPTION 'message_mentions.message_id % does not reference an existing message', NEW.message_id;
|
|
75
|
+
END IF;
|
|
76
|
+
|
|
77
|
+
IF message_tenant <> NEW.tenant_id THEN
|
|
78
|
+
RAISE EXCEPTION 'message_mentions tenant mismatch: mention %, message %', NEW.tenant_id, message_tenant;
|
|
79
|
+
END IF;
|
|
80
|
+
|
|
81
|
+
IF message_thread <> NEW.thread_id THEN
|
|
82
|
+
RAISE EXCEPTION 'message_mentions thread mismatch: mention %, message %', NEW.thread_id, message_thread;
|
|
83
|
+
END IF;
|
|
84
|
+
|
|
85
|
+
RETURN NEW;
|
|
86
|
+
END;
|
|
87
|
+
$$;
|
|
88
|
+
|
|
89
|
+
DROP TRIGGER IF EXISTS message_mentions_tenant_guard ON public.message_mentions;
|
|
90
|
+
CREATE TRIGGER message_mentions_tenant_guard
|
|
91
|
+
BEFORE INSERT OR UPDATE ON public.message_mentions
|
|
92
|
+
FOR EACH ROW
|
|
93
|
+
EXECUTE FUNCTION public.enforce_message_mention_tenant();
|
|
94
|
+
|
|
95
|
+
COMMIT;
|