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,349 @@
|
|
|
1
|
+
-- Purpose: add tenant-scoped Spaces for collaborative onboarding workflows.
|
|
2
|
+
-- Plan: docs/plans/2026-05-19-003-feat-spaces-customer-onboarding-v1-plan.md (U2)
|
|
3
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0105_spaces_domain.sql
|
|
4
|
+
-- creates: public.spaces
|
|
5
|
+
-- creates: public.space_members
|
|
6
|
+
-- creates: public.space_checklist_templates
|
|
7
|
+
-- creates: public.space_checklist_items
|
|
8
|
+
-- creates: public.space_integrations
|
|
9
|
+
-- creates: public.uq_spaces_tenant_slug
|
|
10
|
+
-- creates: public.idx_spaces_tenant_status
|
|
11
|
+
-- creates: public.idx_spaces_tenant_template
|
|
12
|
+
-- creates: public.uq_space_members_user
|
|
13
|
+
-- creates: public.idx_space_members_tenant_user
|
|
14
|
+
-- creates: public.idx_space_members_space
|
|
15
|
+
-- creates: public.uq_space_checklist_templates_key
|
|
16
|
+
-- creates: public.idx_space_checklist_templates_space
|
|
17
|
+
-- creates: public.uq_space_checklist_items_key
|
|
18
|
+
-- creates: public.idx_space_checklist_items_template
|
|
19
|
+
-- creates: public.idx_space_checklist_items_space
|
|
20
|
+
-- creates: public.uq_space_integrations_provider
|
|
21
|
+
-- creates: public.idx_space_integrations_space
|
|
22
|
+
-- creates-function: public.enforce_space_child_tenant
|
|
23
|
+
-- creates-trigger: public.space_members.space_members_tenant_guard
|
|
24
|
+
-- creates-trigger: public.space_checklist_templates.space_checklist_templates_tenant_guard
|
|
25
|
+
-- creates-trigger: public.space_checklist_items.space_checklist_items_tenant_guard
|
|
26
|
+
-- creates-trigger: public.space_integrations.space_integrations_tenant_guard
|
|
27
|
+
-- creates-constraint: public.spaces.spaces_tenant_id_tenants_id_fk
|
|
28
|
+
-- creates-constraint: public.spaces.spaces_status_allowed
|
|
29
|
+
-- creates-constraint: public.spaces.spaces_kind_allowed
|
|
30
|
+
-- creates-constraint: public.space_members.space_members_tenant_id_tenants_id_fk
|
|
31
|
+
-- creates-constraint: public.space_members.space_members_space_id_spaces_id_fk
|
|
32
|
+
-- creates-constraint: public.space_members.space_members_user_id_users_id_fk
|
|
33
|
+
-- creates-constraint: public.space_members.space_members_role_allowed
|
|
34
|
+
-- creates-constraint: public.space_members.space_members_notification_preference_allowed
|
|
35
|
+
-- creates-constraint: public.space_checklist_templates.space_checklist_templates_tenant_id_tenants_id_fk
|
|
36
|
+
-- creates-constraint: public.space_checklist_templates.space_checklist_templates_space_id_spaces_id_fk
|
|
37
|
+
-- creates-constraint: public.space_checklist_items.space_checklist_items_tenant_id_tenants_id_fk
|
|
38
|
+
-- creates-constraint: public.space_checklist_items.space_checklist_items_space_id_spaces_id_fk
|
|
39
|
+
-- creates-constraint: public.space_checklist_items.space_checklist_items_template_id_space_checklist_templates_id_fk
|
|
40
|
+
-- creates-constraint: public.space_integrations.space_integrations_tenant_id_tenants_id_fk
|
|
41
|
+
-- creates-constraint: public.space_integrations.space_integrations_space_id_spaces_id_fk
|
|
42
|
+
-- creates-constraint: public.space_integrations.space_integrations_provider_allowed
|
|
43
|
+
-- creates-constraint: public.space_integrations.space_integrations_status_allowed
|
|
44
|
+
-- creates-constraint: public.space_integrations.space_integrations_writeback_policy_allowed
|
|
45
|
+
|
|
46
|
+
\set ON_ERROR_STOP on
|
|
47
|
+
|
|
48
|
+
BEGIN;
|
|
49
|
+
|
|
50
|
+
SET LOCAL lock_timeout = '5s';
|
|
51
|
+
SET LOCAL statement_timeout = '120s';
|
|
52
|
+
|
|
53
|
+
CREATE TABLE IF NOT EXISTS public.spaces (
|
|
54
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
55
|
+
tenant_id uuid NOT NULL,
|
|
56
|
+
slug text NOT NULL,
|
|
57
|
+
name text NOT NULL,
|
|
58
|
+
description text,
|
|
59
|
+
prompt text,
|
|
60
|
+
status text NOT NULL DEFAULT 'active',
|
|
61
|
+
kind text NOT NULL DEFAULT 'custom',
|
|
62
|
+
template_key text,
|
|
63
|
+
config jsonb,
|
|
64
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
65
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
66
|
+
CONSTRAINT spaces_tenant_id_tenants_id_fk
|
|
67
|
+
FOREIGN KEY (tenant_id)
|
|
68
|
+
REFERENCES public.tenants(id)
|
|
69
|
+
ON DELETE CASCADE,
|
|
70
|
+
CONSTRAINT spaces_status_allowed
|
|
71
|
+
CHECK (status IN ('active', 'archived')),
|
|
72
|
+
CONSTRAINT spaces_kind_allowed
|
|
73
|
+
CHECK (kind IN ('custom', 'customer_onboarding'))
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_spaces_tenant_slug
|
|
77
|
+
ON public.spaces (tenant_id, slug);
|
|
78
|
+
|
|
79
|
+
CREATE INDEX IF NOT EXISTS idx_spaces_tenant_status
|
|
80
|
+
ON public.spaces (tenant_id, status);
|
|
81
|
+
|
|
82
|
+
CREATE INDEX IF NOT EXISTS idx_spaces_tenant_template
|
|
83
|
+
ON public.spaces (tenant_id, template_key);
|
|
84
|
+
|
|
85
|
+
CREATE TABLE IF NOT EXISTS public.space_members (
|
|
86
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
87
|
+
tenant_id uuid NOT NULL,
|
|
88
|
+
space_id uuid NOT NULL,
|
|
89
|
+
user_id uuid NOT NULL,
|
|
90
|
+
role text NOT NULL DEFAULT 'member',
|
|
91
|
+
notification_preference text NOT NULL DEFAULT 'subscribed',
|
|
92
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
93
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
94
|
+
CONSTRAINT space_members_tenant_id_tenants_id_fk
|
|
95
|
+
FOREIGN KEY (tenant_id)
|
|
96
|
+
REFERENCES public.tenants(id)
|
|
97
|
+
ON DELETE CASCADE,
|
|
98
|
+
CONSTRAINT space_members_space_id_spaces_id_fk
|
|
99
|
+
FOREIGN KEY (space_id)
|
|
100
|
+
REFERENCES public.spaces(id)
|
|
101
|
+
ON DELETE CASCADE,
|
|
102
|
+
CONSTRAINT space_members_user_id_users_id_fk
|
|
103
|
+
FOREIGN KEY (user_id)
|
|
104
|
+
REFERENCES public.users(id)
|
|
105
|
+
ON DELETE CASCADE,
|
|
106
|
+
CONSTRAINT space_members_role_allowed
|
|
107
|
+
CHECK (role IN ('owner', 'admin', 'member', 'viewer')),
|
|
108
|
+
CONSTRAINT space_members_notification_preference_allowed
|
|
109
|
+
CHECK (notification_preference IN ('subscribed', 'mentions', 'muted'))
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_space_members_user
|
|
113
|
+
ON public.space_members (tenant_id, space_id, user_id);
|
|
114
|
+
|
|
115
|
+
CREATE INDEX IF NOT EXISTS idx_space_members_tenant_user
|
|
116
|
+
ON public.space_members (tenant_id, user_id);
|
|
117
|
+
|
|
118
|
+
CREATE INDEX IF NOT EXISTS idx_space_members_space
|
|
119
|
+
ON public.space_members (space_id);
|
|
120
|
+
|
|
121
|
+
CREATE TABLE IF NOT EXISTS public.space_agent_assignments (
|
|
122
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
123
|
+
tenant_id uuid NOT NULL,
|
|
124
|
+
space_id uuid NOT NULL,
|
|
125
|
+
agent_id uuid NOT NULL,
|
|
126
|
+
local_role text,
|
|
127
|
+
local_instructions text,
|
|
128
|
+
auto_subscribe boolean NOT NULL DEFAULT true,
|
|
129
|
+
allowed_capabilities jsonb,
|
|
130
|
+
allowed_tools jsonb,
|
|
131
|
+
status text NOT NULL DEFAULT 'active',
|
|
132
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
133
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
134
|
+
CONSTRAINT space_agent_assignments_tenant_id_tenants_id_fk
|
|
135
|
+
FOREIGN KEY (tenant_id)
|
|
136
|
+
REFERENCES public.tenants(id)
|
|
137
|
+
ON DELETE CASCADE,
|
|
138
|
+
CONSTRAINT space_agent_assignments_space_id_spaces_id_fk
|
|
139
|
+
FOREIGN KEY (space_id)
|
|
140
|
+
REFERENCES public.spaces(id)
|
|
141
|
+
ON DELETE CASCADE,
|
|
142
|
+
CONSTRAINT space_agent_assignments_agent_id_agents_id_fk
|
|
143
|
+
FOREIGN KEY (agent_id)
|
|
144
|
+
REFERENCES public.agents(id)
|
|
145
|
+
ON DELETE CASCADE,
|
|
146
|
+
CONSTRAINT space_agent_assignments_status_allowed
|
|
147
|
+
CHECK (status IN ('active', 'paused', 'archived'))
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_space_agent_assignments_agent
|
|
151
|
+
ON public.space_agent_assignments (tenant_id, space_id, agent_id);
|
|
152
|
+
|
|
153
|
+
CREATE INDEX IF NOT EXISTS idx_space_agent_assignments_agent
|
|
154
|
+
ON public.space_agent_assignments (tenant_id, agent_id);
|
|
155
|
+
|
|
156
|
+
CREATE INDEX IF NOT EXISTS idx_space_agent_assignments_space
|
|
157
|
+
ON public.space_agent_assignments (space_id);
|
|
158
|
+
|
|
159
|
+
CREATE TABLE IF NOT EXISTS public.space_checklist_templates (
|
|
160
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
161
|
+
tenant_id uuid NOT NULL,
|
|
162
|
+
space_id uuid NOT NULL,
|
|
163
|
+
key text NOT NULL,
|
|
164
|
+
name text NOT NULL,
|
|
165
|
+
description text,
|
|
166
|
+
config jsonb,
|
|
167
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
168
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
169
|
+
CONSTRAINT space_checklist_templates_tenant_id_tenants_id_fk
|
|
170
|
+
FOREIGN KEY (tenant_id)
|
|
171
|
+
REFERENCES public.tenants(id)
|
|
172
|
+
ON DELETE CASCADE,
|
|
173
|
+
CONSTRAINT space_checklist_templates_space_id_spaces_id_fk
|
|
174
|
+
FOREIGN KEY (space_id)
|
|
175
|
+
REFERENCES public.spaces(id)
|
|
176
|
+
ON DELETE CASCADE
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_space_checklist_templates_key
|
|
180
|
+
ON public.space_checklist_templates (tenant_id, space_id, key);
|
|
181
|
+
|
|
182
|
+
CREATE INDEX IF NOT EXISTS idx_space_checklist_templates_space
|
|
183
|
+
ON public.space_checklist_templates (space_id);
|
|
184
|
+
|
|
185
|
+
CREATE TABLE IF NOT EXISTS public.space_checklist_items (
|
|
186
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
187
|
+
tenant_id uuid NOT NULL,
|
|
188
|
+
space_id uuid NOT NULL,
|
|
189
|
+
template_id uuid NOT NULL,
|
|
190
|
+
key text NOT NULL,
|
|
191
|
+
title text NOT NULL,
|
|
192
|
+
description text,
|
|
193
|
+
role_key text,
|
|
194
|
+
required boolean NOT NULL DEFAULT true,
|
|
195
|
+
sort_order integer NOT NULL DEFAULT 0,
|
|
196
|
+
external_task_template jsonb,
|
|
197
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
198
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
199
|
+
CONSTRAINT space_checklist_items_tenant_id_tenants_id_fk
|
|
200
|
+
FOREIGN KEY (tenant_id)
|
|
201
|
+
REFERENCES public.tenants(id)
|
|
202
|
+
ON DELETE CASCADE,
|
|
203
|
+
CONSTRAINT space_checklist_items_space_id_spaces_id_fk
|
|
204
|
+
FOREIGN KEY (space_id)
|
|
205
|
+
REFERENCES public.spaces(id)
|
|
206
|
+
ON DELETE CASCADE,
|
|
207
|
+
CONSTRAINT space_checklist_items_template_id_space_checklist_templates_id_fk
|
|
208
|
+
FOREIGN KEY (template_id)
|
|
209
|
+
REFERENCES public.space_checklist_templates(id)
|
|
210
|
+
ON DELETE CASCADE
|
|
211
|
+
);
|
|
212
|
+
|
|
213
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_space_checklist_items_key
|
|
214
|
+
ON public.space_checklist_items (tenant_id, template_id, key);
|
|
215
|
+
|
|
216
|
+
CREATE INDEX IF NOT EXISTS idx_space_checklist_items_template
|
|
217
|
+
ON public.space_checklist_items (template_id);
|
|
218
|
+
|
|
219
|
+
CREATE INDEX IF NOT EXISTS idx_space_checklist_items_space
|
|
220
|
+
ON public.space_checklist_items (space_id);
|
|
221
|
+
|
|
222
|
+
CREATE TABLE IF NOT EXISTS public.space_integrations (
|
|
223
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
224
|
+
tenant_id uuid NOT NULL,
|
|
225
|
+
space_id uuid NOT NULL,
|
|
226
|
+
provider text NOT NULL,
|
|
227
|
+
status text NOT NULL DEFAULT 'active',
|
|
228
|
+
writeback_policy text NOT NULL DEFAULT 'disabled',
|
|
229
|
+
config jsonb,
|
|
230
|
+
webhook_config_ref text,
|
|
231
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
232
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
233
|
+
CONSTRAINT space_integrations_tenant_id_tenants_id_fk
|
|
234
|
+
FOREIGN KEY (tenant_id)
|
|
235
|
+
REFERENCES public.tenants(id)
|
|
236
|
+
ON DELETE CASCADE,
|
|
237
|
+
CONSTRAINT space_integrations_space_id_spaces_id_fk
|
|
238
|
+
FOREIGN KEY (space_id)
|
|
239
|
+
REFERENCES public.spaces(id)
|
|
240
|
+
ON DELETE CASCADE,
|
|
241
|
+
CONSTRAINT space_integrations_provider_allowed
|
|
242
|
+
CHECK (provider IN ('lastmile_tasks', 'webhook')),
|
|
243
|
+
CONSTRAINT space_integrations_status_allowed
|
|
244
|
+
CHECK (status IN ('active', 'paused', 'archived')),
|
|
245
|
+
CONSTRAINT space_integrations_writeback_policy_allowed
|
|
246
|
+
CHECK (writeback_policy IN ('disabled', 'status_only', 'status_and_comments'))
|
|
247
|
+
);
|
|
248
|
+
|
|
249
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_space_integrations_provider
|
|
250
|
+
ON public.space_integrations (tenant_id, space_id, provider);
|
|
251
|
+
|
|
252
|
+
CREATE INDEX IF NOT EXISTS idx_space_integrations_space
|
|
253
|
+
ON public.space_integrations (space_id);
|
|
254
|
+
|
|
255
|
+
CREATE OR REPLACE FUNCTION public.enforce_space_child_tenant()
|
|
256
|
+
RETURNS trigger
|
|
257
|
+
LANGUAGE plpgsql
|
|
258
|
+
AS $$
|
|
259
|
+
DECLARE
|
|
260
|
+
target_tenant_id uuid;
|
|
261
|
+
BEGIN
|
|
262
|
+
SELECT tenant_id INTO target_tenant_id
|
|
263
|
+
FROM public.spaces
|
|
264
|
+
WHERE id = NEW.space_id;
|
|
265
|
+
|
|
266
|
+
IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
|
|
267
|
+
RAISE EXCEPTION 'space child tenant mismatch for space %', NEW.space_id
|
|
268
|
+
USING ERRCODE = '23514';
|
|
269
|
+
END IF;
|
|
270
|
+
|
|
271
|
+
IF TG_TABLE_NAME = 'space_members' THEN
|
|
272
|
+
SELECT tenant_id INTO target_tenant_id
|
|
273
|
+
FROM public.users
|
|
274
|
+
WHERE id = NEW.user_id;
|
|
275
|
+
|
|
276
|
+
IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
|
|
277
|
+
RAISE EXCEPTION 'space member tenant mismatch for user %', NEW.user_id
|
|
278
|
+
USING ERRCODE = '23514';
|
|
279
|
+
END IF;
|
|
280
|
+
ELSIF TG_TABLE_NAME = 'space_agent_assignments' THEN
|
|
281
|
+
SELECT tenant_id INTO target_tenant_id
|
|
282
|
+
FROM public.agents
|
|
283
|
+
WHERE id = NEW.agent_id;
|
|
284
|
+
|
|
285
|
+
IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
|
|
286
|
+
RAISE EXCEPTION 'space agent assignment tenant mismatch for agent %', NEW.agent_id
|
|
287
|
+
USING ERRCODE = '23514';
|
|
288
|
+
END IF;
|
|
289
|
+
ELSIF TG_TABLE_NAME = 'space_checklist_items' THEN
|
|
290
|
+
SELECT tenant_id INTO target_tenant_id
|
|
291
|
+
FROM public.space_checklist_templates
|
|
292
|
+
WHERE id = NEW.template_id;
|
|
293
|
+
|
|
294
|
+
IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
|
|
295
|
+
RAISE EXCEPTION 'space checklist item tenant mismatch for template %', NEW.template_id
|
|
296
|
+
USING ERRCODE = '23514';
|
|
297
|
+
END IF;
|
|
298
|
+
END IF;
|
|
299
|
+
|
|
300
|
+
RETURN NEW;
|
|
301
|
+
END;
|
|
302
|
+
$$;
|
|
303
|
+
|
|
304
|
+
DROP TRIGGER IF EXISTS space_members_tenant_guard
|
|
305
|
+
ON public.space_members;
|
|
306
|
+
|
|
307
|
+
CREATE TRIGGER space_members_tenant_guard
|
|
308
|
+
BEFORE INSERT OR UPDATE
|
|
309
|
+
ON public.space_members
|
|
310
|
+
FOR EACH ROW
|
|
311
|
+
EXECUTE FUNCTION public.enforce_space_child_tenant();
|
|
312
|
+
|
|
313
|
+
DROP TRIGGER IF EXISTS space_agent_assignments_tenant_guard
|
|
314
|
+
ON public.space_agent_assignments;
|
|
315
|
+
|
|
316
|
+
CREATE TRIGGER space_agent_assignments_tenant_guard
|
|
317
|
+
BEFORE INSERT OR UPDATE
|
|
318
|
+
ON public.space_agent_assignments
|
|
319
|
+
FOR EACH ROW
|
|
320
|
+
EXECUTE FUNCTION public.enforce_space_child_tenant();
|
|
321
|
+
|
|
322
|
+
DROP TRIGGER IF EXISTS space_checklist_templates_tenant_guard
|
|
323
|
+
ON public.space_checklist_templates;
|
|
324
|
+
|
|
325
|
+
CREATE TRIGGER space_checklist_templates_tenant_guard
|
|
326
|
+
BEFORE INSERT OR UPDATE
|
|
327
|
+
ON public.space_checklist_templates
|
|
328
|
+
FOR EACH ROW
|
|
329
|
+
EXECUTE FUNCTION public.enforce_space_child_tenant();
|
|
330
|
+
|
|
331
|
+
DROP TRIGGER IF EXISTS space_checklist_items_tenant_guard
|
|
332
|
+
ON public.space_checklist_items;
|
|
333
|
+
|
|
334
|
+
CREATE TRIGGER space_checklist_items_tenant_guard
|
|
335
|
+
BEFORE INSERT OR UPDATE
|
|
336
|
+
ON public.space_checklist_items
|
|
337
|
+
FOR EACH ROW
|
|
338
|
+
EXECUTE FUNCTION public.enforce_space_child_tenant();
|
|
339
|
+
|
|
340
|
+
DROP TRIGGER IF EXISTS space_integrations_tenant_guard
|
|
341
|
+
ON public.space_integrations;
|
|
342
|
+
|
|
343
|
+
CREATE TRIGGER space_integrations_tenant_guard
|
|
344
|
+
BEFORE INSERT OR UPDATE
|
|
345
|
+
ON public.space_integrations
|
|
346
|
+
FOR EACH ROW
|
|
347
|
+
EXECUTE FUNCTION public.enforce_space_child_tenant();
|
|
348
|
+
|
|
349
|
+
COMMIT;
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
-- Expand the approved seed ontology so ontology-backed wiki pages can form
|
|
2
|
+
-- useful subject-predicate-object triples instead of isolated nodes.
|
|
3
|
+
--
|
|
4
|
+
-- creates: public.view_seed_ontology_triples_expanded
|
|
5
|
+
|
|
6
|
+
WITH seed(slug, name, broad_type, description, guidance_notes, aliases) AS (
|
|
7
|
+
VALUES
|
|
8
|
+
('activity', 'Activity', 'event', 'A dated event, class, camp, attraction, festival, or planned thing-to-do.', 'Use Activity for events and experiences; use Venue for the named physical location that hosts or contains them.', ARRAY['event', 'attraction', 'camp', 'class', 'festival', 'thing to do']::text[])
|
|
9
|
+
),
|
|
10
|
+
active_versions AS (
|
|
11
|
+
SELECT DISTINCT ON (tenant_id) id, tenant_id
|
|
12
|
+
FROM ontology.versions
|
|
13
|
+
WHERE status = 'active'
|
|
14
|
+
ORDER BY tenant_id, version_number DESC
|
|
15
|
+
)
|
|
16
|
+
INSERT INTO ontology.entity_types (
|
|
17
|
+
tenant_id,
|
|
18
|
+
version_id,
|
|
19
|
+
slug,
|
|
20
|
+
name,
|
|
21
|
+
broad_type,
|
|
22
|
+
description,
|
|
23
|
+
guidance_notes,
|
|
24
|
+
aliases,
|
|
25
|
+
lifecycle_status,
|
|
26
|
+
approved_at
|
|
27
|
+
)
|
|
28
|
+
SELECT
|
|
29
|
+
v.tenant_id,
|
|
30
|
+
v.id,
|
|
31
|
+
seed.slug,
|
|
32
|
+
seed.name,
|
|
33
|
+
seed.broad_type,
|
|
34
|
+
seed.description,
|
|
35
|
+
seed.guidance_notes,
|
|
36
|
+
seed.aliases,
|
|
37
|
+
'approved',
|
|
38
|
+
now()
|
|
39
|
+
FROM active_versions v
|
|
40
|
+
CROSS JOIN seed
|
|
41
|
+
ON CONFLICT (tenant_id, slug) DO UPDATE
|
|
42
|
+
SET
|
|
43
|
+
name = EXCLUDED.name,
|
|
44
|
+
broad_type = EXCLUDED.broad_type,
|
|
45
|
+
description = EXCLUDED.description,
|
|
46
|
+
guidance_notes = EXCLUDED.guidance_notes,
|
|
47
|
+
aliases = EXCLUDED.aliases,
|
|
48
|
+
lifecycle_status = 'approved',
|
|
49
|
+
approved_at = COALESCE(ontology.entity_types.approved_at, now()),
|
|
50
|
+
updated_at = now();
|
|
51
|
+
|
|
52
|
+
WITH seed(slug, name, inverse_name, source_slug, target_slug, description, source_type_slugs, target_type_slugs) AS (
|
|
53
|
+
VALUES
|
|
54
|
+
('lives_in', 'Lives in', 'Home of', 'person', 'place', 'Connects a person to a home city, region, or place of residence.', ARRAY['person']::text[], ARRAY['place']::text[]),
|
|
55
|
+
('visited', 'Visited', 'Visited by', 'person', 'venue', 'Connects a person to a place, venue, trip, or activity they visited, attended, or experienced.', ARRAY['person']::text[], ARRAY['venue', 'place', 'trip', 'activity']::text[]),
|
|
56
|
+
('interested_in', 'Interested in', 'Interest of', 'person', 'activity', 'Connects a person to a potential activity, venue, place, or preference they are considering or like.', ARRAY['person']::text[], ARRAY['activity', 'venue', 'place', 'preference']::text[]),
|
|
57
|
+
('takes_place_at', 'Takes place at', 'Hosts activity', 'activity', 'place', 'Connects an activity, event, or trip to the venue or place where it happens.', ARRAY['activity', 'trip']::text[], ARRAY['venue', 'place']::text[]),
|
|
58
|
+
('has_order', 'Has order', 'Order for', 'customer', 'order', 'Connects a customer to an order or commercial transaction.', ARRAY['customer']::text[], ARRAY['order']::text[]),
|
|
59
|
+
('fulfilled_at', 'Fulfilled at', 'Fulfillment site for', 'order', 'place', 'Connects an order to a pickup, delivery, terminal, or service place.', ARRAY['order']::text[], ARRAY['place', 'venue']::text[]),
|
|
60
|
+
('serves_place', 'Serves place', 'Served by', 'customer', 'place', 'Connects a customer or service organization to a service area or operating place.', ARRAY['customer']::text[], ARRAY['place']::text[]),
|
|
61
|
+
('related_case', 'Related case', 'Related case', 'support_case', 'support_case', 'Connects support cases that describe the same incident, regression, or follow-up.', ARRAY['support_case']::text[], ARRAY['support_case']::text[])
|
|
62
|
+
)
|
|
63
|
+
INSERT INTO ontology.relationship_types (
|
|
64
|
+
tenant_id,
|
|
65
|
+
version_id,
|
|
66
|
+
slug,
|
|
67
|
+
name,
|
|
68
|
+
inverse_name,
|
|
69
|
+
source_entity_type_id,
|
|
70
|
+
target_entity_type_id,
|
|
71
|
+
source_type_slugs,
|
|
72
|
+
target_type_slugs,
|
|
73
|
+
description,
|
|
74
|
+
lifecycle_status,
|
|
75
|
+
approved_at
|
|
76
|
+
)
|
|
77
|
+
SELECT
|
|
78
|
+
source_type.tenant_id,
|
|
79
|
+
source_type.version_id,
|
|
80
|
+
seed.slug,
|
|
81
|
+
seed.name,
|
|
82
|
+
seed.inverse_name,
|
|
83
|
+
source_type.id,
|
|
84
|
+
target_type.id,
|
|
85
|
+
seed.source_type_slugs,
|
|
86
|
+
seed.target_type_slugs,
|
|
87
|
+
seed.description,
|
|
88
|
+
'approved',
|
|
89
|
+
now()
|
|
90
|
+
FROM seed
|
|
91
|
+
JOIN ontology.entity_types source_type
|
|
92
|
+
ON source_type.slug = seed.source_slug
|
|
93
|
+
JOIN ontology.entity_types target_type
|
|
94
|
+
ON target_type.tenant_id = source_type.tenant_id
|
|
95
|
+
AND target_type.slug = seed.target_slug
|
|
96
|
+
ON CONFLICT (tenant_id, slug) DO UPDATE
|
|
97
|
+
SET
|
|
98
|
+
name = EXCLUDED.name,
|
|
99
|
+
inverse_name = EXCLUDED.inverse_name,
|
|
100
|
+
source_entity_type_id = EXCLUDED.source_entity_type_id,
|
|
101
|
+
target_entity_type_id = EXCLUDED.target_entity_type_id,
|
|
102
|
+
source_type_slugs = EXCLUDED.source_type_slugs,
|
|
103
|
+
target_type_slugs = EXCLUDED.target_type_slugs,
|
|
104
|
+
description = EXCLUDED.description,
|
|
105
|
+
lifecycle_status = 'approved',
|
|
106
|
+
approved_at = COALESCE(ontology.relationship_types.approved_at, now()),
|
|
107
|
+
updated_at = now();
|
|
108
|
+
|
|
109
|
+
WITH expanded(slug, source_type_slugs, target_type_slugs, source_slug, target_slug) AS (
|
|
110
|
+
VALUES
|
|
111
|
+
('located_in', ARRAY['venue', 'place', 'activity']::text[], ARRAY['place']::text[], 'venue', 'place'),
|
|
112
|
+
('about_place', ARRAY['trip', 'preference', 'activity']::text[], ARRAY['place']::text[], 'trip', 'place'),
|
|
113
|
+
('involves_person', ARRAY['project', 'task', 'trip', 'decision', 'support_case', 'order', 'activity', 'venue', 'preference']::text[], ARRAY['person']::text[], 'project', 'person'),
|
|
114
|
+
('has_task', ARRAY['project', 'commitment', 'support_case', 'person']::text[], ARRAY['task']::text[], 'project', 'task')
|
|
115
|
+
)
|
|
116
|
+
UPDATE ontology.relationship_types relationship
|
|
117
|
+
SET
|
|
118
|
+
source_entity_type_id = source_type.id,
|
|
119
|
+
target_entity_type_id = target_type.id,
|
|
120
|
+
source_type_slugs = expanded.source_type_slugs,
|
|
121
|
+
target_type_slugs = expanded.target_type_slugs,
|
|
122
|
+
lifecycle_status = 'approved',
|
|
123
|
+
approved_at = COALESCE(relationship.approved_at, now()),
|
|
124
|
+
updated_at = now()
|
|
125
|
+
FROM expanded
|
|
126
|
+
JOIN ontology.entity_types source_type
|
|
127
|
+
ON source_type.slug = expanded.source_slug
|
|
128
|
+
JOIN ontology.entity_types target_type
|
|
129
|
+
ON target_type.tenant_id = source_type.tenant_id
|
|
130
|
+
AND target_type.slug = expanded.target_slug
|
|
131
|
+
WHERE relationship.tenant_id = source_type.tenant_id
|
|
132
|
+
AND relationship.slug = expanded.slug;
|
|
133
|
+
|
|
134
|
+
WITH seed(entity_slug, slug, heading, facet_type, position, prompt) AS (
|
|
135
|
+
VALUES
|
|
136
|
+
('activity', 'overview', 'Overview', 'compiled', 10, 'Summarize what the activity is and why it matters.'),
|
|
137
|
+
('activity', 'schedule', 'Schedule', 'activity', 20, 'Capture dates, times, seasonality, and status when present.'),
|
|
138
|
+
('activity', 'location', 'Location', 'relationship', 30, 'Capture the venue or place where the activity happens.'),
|
|
139
|
+
('activity', 'participants', 'Participants', 'relationship', 40, 'Capture people involved, attending, or interested.')
|
|
140
|
+
)
|
|
141
|
+
INSERT INTO ontology.facet_templates (
|
|
142
|
+
tenant_id,
|
|
143
|
+
entity_type_id,
|
|
144
|
+
slug,
|
|
145
|
+
heading,
|
|
146
|
+
facet_type,
|
|
147
|
+
position,
|
|
148
|
+
prompt,
|
|
149
|
+
lifecycle_status
|
|
150
|
+
)
|
|
151
|
+
SELECT
|
|
152
|
+
entity_types.tenant_id,
|
|
153
|
+
entity_types.id,
|
|
154
|
+
seed.slug,
|
|
155
|
+
seed.heading,
|
|
156
|
+
seed.facet_type,
|
|
157
|
+
seed.position,
|
|
158
|
+
seed.prompt,
|
|
159
|
+
'approved'
|
|
160
|
+
FROM seed
|
|
161
|
+
JOIN ontology.entity_types
|
|
162
|
+
ON entity_types.slug = seed.entity_slug
|
|
163
|
+
ON CONFLICT (entity_type_id, slug) DO UPDATE
|
|
164
|
+
SET
|
|
165
|
+
heading = EXCLUDED.heading,
|
|
166
|
+
facet_type = EXCLUDED.facet_type,
|
|
167
|
+
position = EXCLUDED.position,
|
|
168
|
+
prompt = EXCLUDED.prompt,
|
|
169
|
+
lifecycle_status = 'approved',
|
|
170
|
+
updated_at = now();
|
|
171
|
+
|
|
172
|
+
CREATE OR REPLACE VIEW public.view_seed_ontology_triples_expanded AS
|
|
173
|
+
SELECT true AS expanded;
|