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,587 @@
|
|
|
1
|
+
-- Purpose: add tenant-scoped business ontology definitions, suggestion change sets, and reprocess job state.
|
|
2
|
+
-- Plan: docs/plans/2026-05-17-002-feat-business-ontology-change-sets-plan.md (U1)
|
|
3
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0098_business_ontology.sql
|
|
4
|
+
-- creates: ontology.versions
|
|
5
|
+
-- creates: ontology.entity_types
|
|
6
|
+
-- creates: ontology.relationship_types
|
|
7
|
+
-- creates: ontology.facet_templates
|
|
8
|
+
-- creates: ontology.external_mappings
|
|
9
|
+
-- creates: ontology.change_sets
|
|
10
|
+
-- creates: ontology.change_set_items
|
|
11
|
+
-- creates: ontology.evidence_examples
|
|
12
|
+
-- creates: ontology.suggestion_scan_jobs
|
|
13
|
+
-- creates: ontology.reprocess_jobs
|
|
14
|
+
-- creates: ontology.uq_ontology_versions_tenant_version
|
|
15
|
+
-- creates: ontology.uq_ontology_versions_tenant_active
|
|
16
|
+
-- creates: ontology.uq_ontology_entity_types_tenant_slug
|
|
17
|
+
-- creates: ontology.uq_ontology_relationship_types_tenant_slug
|
|
18
|
+
-- creates: ontology.uq_ontology_facet_templates_entity_slug
|
|
19
|
+
-- creates: ontology.uq_ontology_external_mappings_subject_uri
|
|
20
|
+
-- creates: ontology.uq_ontology_suggestion_scan_jobs_dedupe
|
|
21
|
+
-- creates: ontology.uq_ontology_reprocess_jobs_dedupe
|
|
22
|
+
-- creates-constraint: ontology.versions.ontology_versions_tenant_id_tenants_id_fk
|
|
23
|
+
-- creates-constraint: ontology.versions.ontology_versions_status_allowed
|
|
24
|
+
-- creates-constraint: ontology.entity_types.ontology_entity_types_lifecycle_allowed
|
|
25
|
+
-- creates-constraint: ontology.relationship_types.ontology_relationship_types_lifecycle_allowed
|
|
26
|
+
-- creates-constraint: ontology.external_mappings.ontology_external_mappings_kind_allowed
|
|
27
|
+
-- creates-constraint: ontology.change_sets.ontology_change_sets_status_allowed
|
|
28
|
+
-- creates-constraint: ontology.suggestion_scan_jobs.ontology_suggestion_scan_jobs_status_allowed
|
|
29
|
+
-- creates-constraint: ontology.reprocess_jobs.ontology_reprocess_jobs_status_allowed
|
|
30
|
+
|
|
31
|
+
\set ON_ERROR_STOP on
|
|
32
|
+
|
|
33
|
+
BEGIN;
|
|
34
|
+
|
|
35
|
+
SET LOCAL lock_timeout = '5s';
|
|
36
|
+
SET LOCAL statement_timeout = '120s';
|
|
37
|
+
|
|
38
|
+
CREATE SCHEMA IF NOT EXISTS ontology;
|
|
39
|
+
|
|
40
|
+
CREATE TABLE IF NOT EXISTS ontology.versions (
|
|
41
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
42
|
+
tenant_id uuid NOT NULL,
|
|
43
|
+
version_number integer NOT NULL,
|
|
44
|
+
status text NOT NULL DEFAULT 'active',
|
|
45
|
+
source_change_set_id uuid,
|
|
46
|
+
activated_at timestamptz,
|
|
47
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
48
|
+
CONSTRAINT ontology_versions_tenant_id_tenants_id_fk
|
|
49
|
+
FOREIGN KEY (tenant_id)
|
|
50
|
+
REFERENCES public.tenants(id)
|
|
51
|
+
ON DELETE CASCADE,
|
|
52
|
+
CONSTRAINT ontology_versions_status_allowed
|
|
53
|
+
CHECK (status IN ('active', 'superseded'))
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_ontology_versions_tenant_version
|
|
57
|
+
ON ontology.versions (tenant_id, version_number);
|
|
58
|
+
|
|
59
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_ontology_versions_tenant_active
|
|
60
|
+
ON ontology.versions (tenant_id)
|
|
61
|
+
WHERE status = 'active';
|
|
62
|
+
|
|
63
|
+
CREATE INDEX IF NOT EXISTS idx_ontology_versions_tenant_created
|
|
64
|
+
ON ontology.versions (tenant_id, created_at);
|
|
65
|
+
|
|
66
|
+
CREATE TABLE IF NOT EXISTS ontology.entity_types (
|
|
67
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
68
|
+
tenant_id uuid NOT NULL,
|
|
69
|
+
version_id uuid,
|
|
70
|
+
slug text NOT NULL,
|
|
71
|
+
name text NOT NULL,
|
|
72
|
+
description text,
|
|
73
|
+
broad_type text NOT NULL DEFAULT 'entity',
|
|
74
|
+
aliases text[] NOT NULL DEFAULT ARRAY[]::text[],
|
|
75
|
+
properties_schema jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
76
|
+
guidance_notes text,
|
|
77
|
+
lifecycle_status text NOT NULL DEFAULT 'proposed',
|
|
78
|
+
proposed_by_user_id uuid,
|
|
79
|
+
approved_by_user_id uuid,
|
|
80
|
+
approved_at timestamptz,
|
|
81
|
+
deprecated_at timestamptz,
|
|
82
|
+
rejected_at timestamptz,
|
|
83
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
84
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
85
|
+
CONSTRAINT ontology_entity_types_tenant_id_tenants_id_fk
|
|
86
|
+
FOREIGN KEY (tenant_id)
|
|
87
|
+
REFERENCES public.tenants(id)
|
|
88
|
+
ON DELETE CASCADE,
|
|
89
|
+
CONSTRAINT ontology_entity_types_version_id_versions_id_fk
|
|
90
|
+
FOREIGN KEY (version_id)
|
|
91
|
+
REFERENCES ontology.versions(id)
|
|
92
|
+
ON DELETE SET NULL,
|
|
93
|
+
CONSTRAINT ontology_entity_types_proposed_by_user_id_users_id_fk
|
|
94
|
+
FOREIGN KEY (proposed_by_user_id)
|
|
95
|
+
REFERENCES public.users(id)
|
|
96
|
+
ON DELETE SET NULL,
|
|
97
|
+
CONSTRAINT ontology_entity_types_approved_by_user_id_users_id_fk
|
|
98
|
+
FOREIGN KEY (approved_by_user_id)
|
|
99
|
+
REFERENCES public.users(id)
|
|
100
|
+
ON DELETE SET NULL,
|
|
101
|
+
CONSTRAINT ontology_entity_types_lifecycle_allowed
|
|
102
|
+
CHECK (lifecycle_status IN ('proposed', 'approved', 'deprecated', 'rejected'))
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_ontology_entity_types_tenant_slug
|
|
106
|
+
ON ontology.entity_types (tenant_id, slug);
|
|
107
|
+
|
|
108
|
+
CREATE INDEX IF NOT EXISTS idx_ontology_entity_types_tenant_status
|
|
109
|
+
ON ontology.entity_types (tenant_id, lifecycle_status);
|
|
110
|
+
|
|
111
|
+
CREATE INDEX IF NOT EXISTS idx_ontology_entity_types_broad_type
|
|
112
|
+
ON ontology.entity_types (broad_type);
|
|
113
|
+
|
|
114
|
+
CREATE TABLE IF NOT EXISTS ontology.relationship_types (
|
|
115
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
116
|
+
tenant_id uuid NOT NULL,
|
|
117
|
+
version_id uuid,
|
|
118
|
+
slug text NOT NULL,
|
|
119
|
+
name text NOT NULL,
|
|
120
|
+
description text,
|
|
121
|
+
inverse_name text,
|
|
122
|
+
source_entity_type_id uuid,
|
|
123
|
+
target_entity_type_id uuid,
|
|
124
|
+
source_type_slugs text[] NOT NULL DEFAULT ARRAY[]::text[],
|
|
125
|
+
target_type_slugs text[] NOT NULL DEFAULT ARRAY[]::text[],
|
|
126
|
+
aliases text[] NOT NULL DEFAULT ARRAY[]::text[],
|
|
127
|
+
guidance_notes text,
|
|
128
|
+
lifecycle_status text NOT NULL DEFAULT 'proposed',
|
|
129
|
+
proposed_by_user_id uuid,
|
|
130
|
+
approved_by_user_id uuid,
|
|
131
|
+
approved_at timestamptz,
|
|
132
|
+
deprecated_at timestamptz,
|
|
133
|
+
rejected_at timestamptz,
|
|
134
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
135
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
136
|
+
CONSTRAINT ontology_relationship_types_tenant_id_tenants_id_fk
|
|
137
|
+
FOREIGN KEY (tenant_id)
|
|
138
|
+
REFERENCES public.tenants(id)
|
|
139
|
+
ON DELETE CASCADE,
|
|
140
|
+
CONSTRAINT ontology_relationship_types_version_id_versions_id_fk
|
|
141
|
+
FOREIGN KEY (version_id)
|
|
142
|
+
REFERENCES ontology.versions(id)
|
|
143
|
+
ON DELETE SET NULL,
|
|
144
|
+
CONSTRAINT ontology_relationship_types_source_entity_type_id_fk
|
|
145
|
+
FOREIGN KEY (source_entity_type_id)
|
|
146
|
+
REFERENCES ontology.entity_types(id)
|
|
147
|
+
ON DELETE SET NULL,
|
|
148
|
+
CONSTRAINT ontology_relationship_types_target_entity_type_id_fk
|
|
149
|
+
FOREIGN KEY (target_entity_type_id)
|
|
150
|
+
REFERENCES ontology.entity_types(id)
|
|
151
|
+
ON DELETE SET NULL,
|
|
152
|
+
CONSTRAINT ontology_relationship_types_proposed_by_user_id_users_id_fk
|
|
153
|
+
FOREIGN KEY (proposed_by_user_id)
|
|
154
|
+
REFERENCES public.users(id)
|
|
155
|
+
ON DELETE SET NULL,
|
|
156
|
+
CONSTRAINT ontology_relationship_types_approved_by_user_id_users_id_fk
|
|
157
|
+
FOREIGN KEY (approved_by_user_id)
|
|
158
|
+
REFERENCES public.users(id)
|
|
159
|
+
ON DELETE SET NULL,
|
|
160
|
+
CONSTRAINT ontology_relationship_types_lifecycle_allowed
|
|
161
|
+
CHECK (lifecycle_status IN ('proposed', 'approved', 'deprecated', 'rejected'))
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_ontology_relationship_types_tenant_slug
|
|
165
|
+
ON ontology.relationship_types (tenant_id, slug);
|
|
166
|
+
|
|
167
|
+
CREATE INDEX IF NOT EXISTS idx_ontology_relationship_types_tenant_status
|
|
168
|
+
ON ontology.relationship_types (tenant_id, lifecycle_status);
|
|
169
|
+
|
|
170
|
+
CREATE INDEX IF NOT EXISTS idx_ontology_relationship_types_source
|
|
171
|
+
ON ontology.relationship_types (source_entity_type_id);
|
|
172
|
+
|
|
173
|
+
CREATE INDEX IF NOT EXISTS idx_ontology_relationship_types_target
|
|
174
|
+
ON ontology.relationship_types (target_entity_type_id);
|
|
175
|
+
|
|
176
|
+
CREATE TABLE IF NOT EXISTS ontology.facet_templates (
|
|
177
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
178
|
+
tenant_id uuid NOT NULL,
|
|
179
|
+
entity_type_id uuid NOT NULL,
|
|
180
|
+
slug text NOT NULL,
|
|
181
|
+
heading text NOT NULL,
|
|
182
|
+
facet_type text NOT NULL DEFAULT 'compiled',
|
|
183
|
+
position integer NOT NULL DEFAULT 0,
|
|
184
|
+
source_priority jsonb NOT NULL DEFAULT '[]'::jsonb,
|
|
185
|
+
prompt text,
|
|
186
|
+
guidance_notes text,
|
|
187
|
+
lifecycle_status text NOT NULL DEFAULT 'approved',
|
|
188
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
189
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
190
|
+
CONSTRAINT ontology_facet_templates_tenant_id_tenants_id_fk
|
|
191
|
+
FOREIGN KEY (tenant_id)
|
|
192
|
+
REFERENCES public.tenants(id)
|
|
193
|
+
ON DELETE CASCADE,
|
|
194
|
+
CONSTRAINT ontology_facet_templates_entity_type_id_entity_types_id_fk
|
|
195
|
+
FOREIGN KEY (entity_type_id)
|
|
196
|
+
REFERENCES ontology.entity_types(id)
|
|
197
|
+
ON DELETE CASCADE,
|
|
198
|
+
CONSTRAINT ontology_facet_templates_lifecycle_allowed
|
|
199
|
+
CHECK (lifecycle_status IN ('proposed', 'approved', 'deprecated', 'rejected'))
|
|
200
|
+
);
|
|
201
|
+
|
|
202
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_ontology_facet_templates_entity_slug
|
|
203
|
+
ON ontology.facet_templates (entity_type_id, slug);
|
|
204
|
+
|
|
205
|
+
CREATE INDEX IF NOT EXISTS idx_ontology_facet_templates_tenant
|
|
206
|
+
ON ontology.facet_templates (tenant_id);
|
|
207
|
+
|
|
208
|
+
CREATE TABLE IF NOT EXISTS ontology.external_mappings (
|
|
209
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
210
|
+
tenant_id uuid NOT NULL,
|
|
211
|
+
subject_kind text NOT NULL,
|
|
212
|
+
subject_id uuid NOT NULL,
|
|
213
|
+
mapping_kind text NOT NULL,
|
|
214
|
+
vocabulary text NOT NULL,
|
|
215
|
+
external_uri text NOT NULL,
|
|
216
|
+
external_label text,
|
|
217
|
+
notes text,
|
|
218
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
219
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
220
|
+
CONSTRAINT ontology_external_mappings_tenant_id_tenants_id_fk
|
|
221
|
+
FOREIGN KEY (tenant_id)
|
|
222
|
+
REFERENCES public.tenants(id)
|
|
223
|
+
ON DELETE CASCADE,
|
|
224
|
+
CONSTRAINT ontology_external_mappings_subject_allowed
|
|
225
|
+
CHECK (subject_kind IN ('entity_type', 'relationship_type', 'facet_template')),
|
|
226
|
+
CONSTRAINT ontology_external_mappings_kind_allowed
|
|
227
|
+
CHECK (mapping_kind IN ('exact', 'close', 'broad', 'narrow', 'related'))
|
|
228
|
+
);
|
|
229
|
+
|
|
230
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_ontology_external_mappings_subject_uri
|
|
231
|
+
ON ontology.external_mappings (subject_kind, subject_id, vocabulary, external_uri);
|
|
232
|
+
|
|
233
|
+
CREATE INDEX IF NOT EXISTS idx_ontology_external_mappings_tenant_kind
|
|
234
|
+
ON ontology.external_mappings (tenant_id, subject_kind);
|
|
235
|
+
|
|
236
|
+
CREATE TABLE IF NOT EXISTS ontology.change_sets (
|
|
237
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
238
|
+
tenant_id uuid NOT NULL,
|
|
239
|
+
title text NOT NULL,
|
|
240
|
+
summary text,
|
|
241
|
+
status text NOT NULL DEFAULT 'draft',
|
|
242
|
+
confidence numeric(5, 4),
|
|
243
|
+
observed_frequency integer NOT NULL DEFAULT 0,
|
|
244
|
+
expected_impact jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
245
|
+
proposed_by text NOT NULL DEFAULT 'suggestion_engine',
|
|
246
|
+
proposed_by_user_id uuid,
|
|
247
|
+
approved_by_user_id uuid,
|
|
248
|
+
approved_at timestamptz,
|
|
249
|
+
rejected_by_user_id uuid,
|
|
250
|
+
rejected_at timestamptz,
|
|
251
|
+
applied_version_id uuid,
|
|
252
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
253
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
254
|
+
CONSTRAINT ontology_change_sets_tenant_id_tenants_id_fk
|
|
255
|
+
FOREIGN KEY (tenant_id)
|
|
256
|
+
REFERENCES public.tenants(id)
|
|
257
|
+
ON DELETE CASCADE,
|
|
258
|
+
CONSTRAINT ontology_change_sets_proposed_by_user_id_users_id_fk
|
|
259
|
+
FOREIGN KEY (proposed_by_user_id)
|
|
260
|
+
REFERENCES public.users(id)
|
|
261
|
+
ON DELETE SET NULL,
|
|
262
|
+
CONSTRAINT ontology_change_sets_approved_by_user_id_users_id_fk
|
|
263
|
+
FOREIGN KEY (approved_by_user_id)
|
|
264
|
+
REFERENCES public.users(id)
|
|
265
|
+
ON DELETE SET NULL,
|
|
266
|
+
CONSTRAINT ontology_change_sets_rejected_by_user_id_users_id_fk
|
|
267
|
+
FOREIGN KEY (rejected_by_user_id)
|
|
268
|
+
REFERENCES public.users(id)
|
|
269
|
+
ON DELETE SET NULL,
|
|
270
|
+
CONSTRAINT ontology_change_sets_applied_version_id_versions_id_fk
|
|
271
|
+
FOREIGN KEY (applied_version_id)
|
|
272
|
+
REFERENCES ontology.versions(id)
|
|
273
|
+
ON DELETE SET NULL,
|
|
274
|
+
CONSTRAINT ontology_change_sets_status_allowed
|
|
275
|
+
CHECK (status IN ('draft', 'pending_review', 'approved', 'rejected', 'applied'))
|
|
276
|
+
);
|
|
277
|
+
|
|
278
|
+
CREATE INDEX IF NOT EXISTS idx_ontology_change_sets_tenant_status
|
|
279
|
+
ON ontology.change_sets (tenant_id, status);
|
|
280
|
+
|
|
281
|
+
CREATE INDEX IF NOT EXISTS idx_ontology_change_sets_applied_version
|
|
282
|
+
ON ontology.change_sets (applied_version_id);
|
|
283
|
+
|
|
284
|
+
CREATE TABLE IF NOT EXISTS ontology.change_set_items (
|
|
285
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
286
|
+
tenant_id uuid NOT NULL,
|
|
287
|
+
change_set_id uuid NOT NULL,
|
|
288
|
+
item_type text NOT NULL,
|
|
289
|
+
action text NOT NULL,
|
|
290
|
+
status text NOT NULL DEFAULT 'pending_review',
|
|
291
|
+
target_kind text,
|
|
292
|
+
target_slug text,
|
|
293
|
+
title text NOT NULL,
|
|
294
|
+
description text,
|
|
295
|
+
proposed_value jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
296
|
+
edited_value jsonb,
|
|
297
|
+
confidence numeric(5, 4),
|
|
298
|
+
position integer NOT NULL DEFAULT 0,
|
|
299
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
300
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
301
|
+
CONSTRAINT ontology_change_set_items_tenant_id_tenants_id_fk
|
|
302
|
+
FOREIGN KEY (tenant_id)
|
|
303
|
+
REFERENCES public.tenants(id)
|
|
304
|
+
ON DELETE CASCADE,
|
|
305
|
+
CONSTRAINT ontology_change_set_items_change_set_id_change_sets_id_fk
|
|
306
|
+
FOREIGN KEY (change_set_id)
|
|
307
|
+
REFERENCES ontology.change_sets(id)
|
|
308
|
+
ON DELETE CASCADE,
|
|
309
|
+
CONSTRAINT ontology_change_set_items_type_allowed
|
|
310
|
+
CHECK (item_type IN ('entity_type', 'relationship_type', 'facet_template', 'external_mapping')),
|
|
311
|
+
CONSTRAINT ontology_change_set_items_action_allowed
|
|
312
|
+
CHECK (action IN ('create', 'update', 'deprecate', 'reject')),
|
|
313
|
+
CONSTRAINT ontology_change_set_items_status_allowed
|
|
314
|
+
CHECK (status IN ('pending_review', 'approved', 'rejected', 'applied'))
|
|
315
|
+
);
|
|
316
|
+
|
|
317
|
+
CREATE INDEX IF NOT EXISTS idx_ontology_change_set_items_change_set
|
|
318
|
+
ON ontology.change_set_items (change_set_id);
|
|
319
|
+
|
|
320
|
+
CREATE INDEX IF NOT EXISTS idx_ontology_change_set_items_tenant_status
|
|
321
|
+
ON ontology.change_set_items (tenant_id, status);
|
|
322
|
+
|
|
323
|
+
CREATE TABLE IF NOT EXISTS ontology.evidence_examples (
|
|
324
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
325
|
+
tenant_id uuid NOT NULL,
|
|
326
|
+
change_set_id uuid NOT NULL,
|
|
327
|
+
item_id uuid,
|
|
328
|
+
source_kind text NOT NULL,
|
|
329
|
+
source_ref text,
|
|
330
|
+
source_label text,
|
|
331
|
+
quote text NOT NULL,
|
|
332
|
+
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
333
|
+
observed_at timestamptz,
|
|
334
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
335
|
+
CONSTRAINT ontology_evidence_examples_tenant_id_tenants_id_fk
|
|
336
|
+
FOREIGN KEY (tenant_id)
|
|
337
|
+
REFERENCES public.tenants(id)
|
|
338
|
+
ON DELETE CASCADE,
|
|
339
|
+
CONSTRAINT ontology_evidence_examples_change_set_id_change_sets_id_fk
|
|
340
|
+
FOREIGN KEY (change_set_id)
|
|
341
|
+
REFERENCES ontology.change_sets(id)
|
|
342
|
+
ON DELETE CASCADE,
|
|
343
|
+
CONSTRAINT ontology_evidence_examples_item_id_change_set_items_id_fk
|
|
344
|
+
FOREIGN KEY (item_id)
|
|
345
|
+
REFERENCES ontology.change_set_items(id)
|
|
346
|
+
ON DELETE SET NULL
|
|
347
|
+
);
|
|
348
|
+
|
|
349
|
+
CREATE INDEX IF NOT EXISTS idx_ontology_evidence_change_set
|
|
350
|
+
ON ontology.evidence_examples (change_set_id);
|
|
351
|
+
|
|
352
|
+
CREATE INDEX IF NOT EXISTS idx_ontology_evidence_item
|
|
353
|
+
ON ontology.evidence_examples (item_id);
|
|
354
|
+
|
|
355
|
+
CREATE INDEX IF NOT EXISTS idx_ontology_evidence_tenant_source
|
|
356
|
+
ON ontology.evidence_examples (tenant_id, source_kind);
|
|
357
|
+
|
|
358
|
+
CREATE TABLE IF NOT EXISTS ontology.suggestion_scan_jobs (
|
|
359
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
360
|
+
tenant_id uuid NOT NULL,
|
|
361
|
+
status text NOT NULL DEFAULT 'pending',
|
|
362
|
+
trigger text NOT NULL DEFAULT 'manual',
|
|
363
|
+
dedupe_key text,
|
|
364
|
+
started_at timestamptz,
|
|
365
|
+
finished_at timestamptz,
|
|
366
|
+
error text,
|
|
367
|
+
result jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
368
|
+
metrics jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
369
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
370
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
371
|
+
CONSTRAINT ontology_suggestion_scan_jobs_tenant_id_tenants_id_fk
|
|
372
|
+
FOREIGN KEY (tenant_id)
|
|
373
|
+
REFERENCES public.tenants(id)
|
|
374
|
+
ON DELETE CASCADE,
|
|
375
|
+
CONSTRAINT ontology_suggestion_scan_jobs_status_allowed
|
|
376
|
+
CHECK (status IN ('pending', 'running', 'succeeded', 'failed', 'canceled'))
|
|
377
|
+
);
|
|
378
|
+
|
|
379
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_ontology_suggestion_scan_jobs_dedupe
|
|
380
|
+
ON ontology.suggestion_scan_jobs (tenant_id, dedupe_key)
|
|
381
|
+
WHERE dedupe_key IS NOT NULL;
|
|
382
|
+
|
|
383
|
+
CREATE INDEX IF NOT EXISTS idx_ontology_suggestion_scan_jobs_tenant_status
|
|
384
|
+
ON ontology.suggestion_scan_jobs (tenant_id, status);
|
|
385
|
+
|
|
386
|
+
CREATE TABLE IF NOT EXISTS ontology.reprocess_jobs (
|
|
387
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
388
|
+
tenant_id uuid NOT NULL,
|
|
389
|
+
change_set_id uuid,
|
|
390
|
+
ontology_version_id uuid,
|
|
391
|
+
dedupe_key text,
|
|
392
|
+
status text NOT NULL DEFAULT 'pending',
|
|
393
|
+
attempt integer NOT NULL DEFAULT 0,
|
|
394
|
+
claimed_at timestamptz,
|
|
395
|
+
started_at timestamptz,
|
|
396
|
+
finished_at timestamptz,
|
|
397
|
+
input jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
398
|
+
impact jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
399
|
+
metrics jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
400
|
+
error text,
|
|
401
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
402
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
403
|
+
CONSTRAINT ontology_reprocess_jobs_tenant_id_tenants_id_fk
|
|
404
|
+
FOREIGN KEY (tenant_id)
|
|
405
|
+
REFERENCES public.tenants(id)
|
|
406
|
+
ON DELETE CASCADE,
|
|
407
|
+
CONSTRAINT ontology_reprocess_jobs_change_set_id_change_sets_id_fk
|
|
408
|
+
FOREIGN KEY (change_set_id)
|
|
409
|
+
REFERENCES ontology.change_sets(id)
|
|
410
|
+
ON DELETE SET NULL,
|
|
411
|
+
CONSTRAINT ontology_reprocess_jobs_ontology_version_id_versions_id_fk
|
|
412
|
+
FOREIGN KEY (ontology_version_id)
|
|
413
|
+
REFERENCES ontology.versions(id)
|
|
414
|
+
ON DELETE SET NULL,
|
|
415
|
+
CONSTRAINT ontology_reprocess_jobs_status_allowed
|
|
416
|
+
CHECK (status IN ('pending', 'running', 'succeeded', 'failed', 'canceled'))
|
|
417
|
+
);
|
|
418
|
+
|
|
419
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_ontology_reprocess_jobs_dedupe
|
|
420
|
+
ON ontology.reprocess_jobs (tenant_id, dedupe_key)
|
|
421
|
+
WHERE dedupe_key IS NOT NULL;
|
|
422
|
+
|
|
423
|
+
CREATE INDEX IF NOT EXISTS idx_ontology_reprocess_jobs_tenant_status
|
|
424
|
+
ON ontology.reprocess_jobs (tenant_id, status);
|
|
425
|
+
|
|
426
|
+
CREATE INDEX IF NOT EXISTS idx_ontology_reprocess_jobs_change_set
|
|
427
|
+
ON ontology.reprocess_jobs (change_set_id);
|
|
428
|
+
|
|
429
|
+
INSERT INTO ontology.versions (tenant_id, version_number, status, activated_at)
|
|
430
|
+
SELECT tenants.id, 1, 'active', now()
|
|
431
|
+
FROM public.tenants
|
|
432
|
+
ON CONFLICT (tenant_id, version_number) DO NOTHING;
|
|
433
|
+
|
|
434
|
+
WITH seed(slug, name, broad_type, description, guidance_notes, aliases) AS (
|
|
435
|
+
VALUES
|
|
436
|
+
('customer', 'Customer', 'organization', 'An account, buyer, prospect, or commercial organization the company serves.', 'Compile customer pages from relationship, opportunity, commitment, risk, support, and recent activity evidence.', ARRAY['account', 'client', 'buyer']::text[]),
|
|
437
|
+
('person', 'Person', 'person', 'A human stakeholder connected to a customer, partner, vendor, or internal initiative.', 'Use only business-relevant facts and relationship context.', ARRAY['contact', 'stakeholder']::text[]),
|
|
438
|
+
('opportunity', 'Opportunity', 'commercial_event', 'A potential or active revenue motion with a customer or prospect.', 'Track stage, mutual plan, blockers, next steps, and linked people.', ARRAY['deal', 'pipeline item']::text[]),
|
|
439
|
+
('order', 'Order', 'commercial_record', 'A committed transaction, purchase order, subscription, or contract record.', 'Prefer source-system facts over conversational inference.', ARRAY['contract', 'purchase']::text[]),
|
|
440
|
+
('support_case', 'Support Case', 'service_record', 'A customer issue, escalation, defect, or help request.', 'Compile active symptoms, owner, severity, customer impact, and resolution trail.', ARRAY['ticket', 'case', 'escalation']::text[]),
|
|
441
|
+
('commitment', 'Commitment', 'promise', 'A promise, follow-up, delivery obligation, or action item owed by or to the company.', 'Capture owner, due date, recipient, current status, and source evidence.', ARRAY['promise', 'follow up', 'action item']::text[]),
|
|
442
|
+
('risk', 'Risk', 'risk', 'A business risk, objection, blocker, competitor threat, or delivery concern.', 'Separate observed evidence from speculative impact.', ARRAY['blocker', 'concern', 'threat']::text[]),
|
|
443
|
+
('decision', 'Decision', 'decision', 'A durable decision with rationale, tradeoffs, and affected business objects.', 'Prefer the most recent explicit decision evidence and preserve rationale.', ARRAY['choice', 'approval']::text[])
|
|
444
|
+
)
|
|
445
|
+
INSERT INTO ontology.entity_types (
|
|
446
|
+
tenant_id,
|
|
447
|
+
version_id,
|
|
448
|
+
slug,
|
|
449
|
+
name,
|
|
450
|
+
broad_type,
|
|
451
|
+
description,
|
|
452
|
+
guidance_notes,
|
|
453
|
+
aliases,
|
|
454
|
+
lifecycle_status,
|
|
455
|
+
approved_at
|
|
456
|
+
)
|
|
457
|
+
SELECT
|
|
458
|
+
tenants.id,
|
|
459
|
+
versions.id,
|
|
460
|
+
seed.slug,
|
|
461
|
+
seed.name,
|
|
462
|
+
seed.broad_type,
|
|
463
|
+
seed.description,
|
|
464
|
+
seed.guidance_notes,
|
|
465
|
+
seed.aliases,
|
|
466
|
+
'approved',
|
|
467
|
+
now()
|
|
468
|
+
FROM public.tenants
|
|
469
|
+
JOIN ontology.versions
|
|
470
|
+
ON versions.tenant_id = tenants.id
|
|
471
|
+
AND versions.version_number = 1
|
|
472
|
+
CROSS JOIN seed
|
|
473
|
+
ON CONFLICT (tenant_id, slug) DO NOTHING;
|
|
474
|
+
|
|
475
|
+
WITH seed(slug, name, inverse_name, source_slug, target_slug, description, source_type_slugs, target_type_slugs) AS (
|
|
476
|
+
VALUES
|
|
477
|
+
('has_stakeholder', 'Has stakeholder', 'Stakeholder of', 'customer', 'person', 'Connects a customer or opportunity to an involved person.', ARRAY['customer', 'opportunity']::text[], ARRAY['person']::text[]),
|
|
478
|
+
('has_opportunity', 'Has opportunity', 'Opportunity for', 'customer', 'opportunity', 'Connects a customer or prospect to a revenue opportunity.', ARRAY['customer']::text[], ARRAY['opportunity']::text[]),
|
|
479
|
+
('has_commitment', 'Has commitment', 'Commitment for', 'customer', 'commitment', 'Connects an entity to a promise, follow-up, or obligation.', ARRAY['customer', 'opportunity', 'support_case']::text[], ARRAY['commitment']::text[]),
|
|
480
|
+
('has_risk', 'Has risk', 'Risk for', 'customer', 'risk', 'Connects an entity to a business risk or blocker.', ARRAY['customer', 'opportunity', 'support_case']::text[], ARRAY['risk']::text[]),
|
|
481
|
+
('has_support_case', 'Has support case', 'Support case for', 'customer', 'support_case', 'Connects a customer to active or historical support work.', ARRAY['customer']::text[], ARRAY['support_case']::text[])
|
|
482
|
+
)
|
|
483
|
+
INSERT INTO ontology.relationship_types (
|
|
484
|
+
tenant_id,
|
|
485
|
+
version_id,
|
|
486
|
+
slug,
|
|
487
|
+
name,
|
|
488
|
+
inverse_name,
|
|
489
|
+
source_entity_type_id,
|
|
490
|
+
target_entity_type_id,
|
|
491
|
+
source_type_slugs,
|
|
492
|
+
target_type_slugs,
|
|
493
|
+
description,
|
|
494
|
+
lifecycle_status,
|
|
495
|
+
approved_at
|
|
496
|
+
)
|
|
497
|
+
SELECT
|
|
498
|
+
source_type.tenant_id,
|
|
499
|
+
source_type.version_id,
|
|
500
|
+
seed.slug,
|
|
501
|
+
seed.name,
|
|
502
|
+
seed.inverse_name,
|
|
503
|
+
source_type.id,
|
|
504
|
+
target_type.id,
|
|
505
|
+
seed.source_type_slugs,
|
|
506
|
+
seed.target_type_slugs,
|
|
507
|
+
seed.description,
|
|
508
|
+
'approved',
|
|
509
|
+
now()
|
|
510
|
+
FROM seed
|
|
511
|
+
JOIN ontology.entity_types source_type
|
|
512
|
+
ON source_type.slug = seed.source_slug
|
|
513
|
+
JOIN ontology.entity_types target_type
|
|
514
|
+
ON target_type.tenant_id = source_type.tenant_id
|
|
515
|
+
AND target_type.slug = seed.target_slug
|
|
516
|
+
ON CONFLICT (tenant_id, slug) DO NOTHING;
|
|
517
|
+
|
|
518
|
+
WITH seed(entity_slug, slug, heading, facet_type, position, prompt) AS (
|
|
519
|
+
VALUES
|
|
520
|
+
('customer', 'overview', 'Overview', 'compiled', 10, 'Summarize the customer, relationship state, and current business context.'),
|
|
521
|
+
('customer', 'stakeholders', 'Stakeholders', 'relationship', 20, 'List the important people, roles, sentiment, and relationship notes.'),
|
|
522
|
+
('customer', 'opportunities', 'Opportunities', 'operational', 30, 'Summarize open and recently changed opportunities.'),
|
|
523
|
+
('customer', 'commitments', 'Commitments', 'operational', 40, 'Track promises, owners, due dates, and fulfillment status.'),
|
|
524
|
+
('customer', 'risks', 'Risks', 'operational', 50, 'Capture blockers, objections, delivery risks, and escalation signals.'),
|
|
525
|
+
('opportunity', 'overview', 'Overview', 'compiled', 10, 'Summarize business outcome, stage, buyer context, and next milestone.'),
|
|
526
|
+
('opportunity', 'mutual_plan', 'Mutual Plan', 'operational', 20, 'Capture milestones, responsibilities, dates, and open dependencies.'),
|
|
527
|
+
('support_case', 'overview', 'Overview', 'compiled', 10, 'Summarize customer impact, status, owner, and latest update.'),
|
|
528
|
+
('commitment', 'status', 'Status', 'operational', 10, 'Capture owner, recipient, due date, evidence, and completion state.'),
|
|
529
|
+
('risk', 'assessment', 'Assessment', 'compiled', 10, 'Separate risk evidence, likelihood, impact, mitigation, and owner.')
|
|
530
|
+
)
|
|
531
|
+
INSERT INTO ontology.facet_templates (
|
|
532
|
+
tenant_id,
|
|
533
|
+
entity_type_id,
|
|
534
|
+
slug,
|
|
535
|
+
heading,
|
|
536
|
+
facet_type,
|
|
537
|
+
position,
|
|
538
|
+
prompt,
|
|
539
|
+
lifecycle_status
|
|
540
|
+
)
|
|
541
|
+
SELECT
|
|
542
|
+
entity_types.tenant_id,
|
|
543
|
+
entity_types.id,
|
|
544
|
+
seed.slug,
|
|
545
|
+
seed.heading,
|
|
546
|
+
seed.facet_type,
|
|
547
|
+
seed.position,
|
|
548
|
+
seed.prompt,
|
|
549
|
+
'approved'
|
|
550
|
+
FROM seed
|
|
551
|
+
JOIN ontology.entity_types
|
|
552
|
+
ON entity_types.slug = seed.entity_slug
|
|
553
|
+
ON CONFLICT (entity_type_id, slug) DO NOTHING;
|
|
554
|
+
|
|
555
|
+
WITH seed(entity_slug, mapping_kind, vocabulary, external_uri, external_label, notes) AS (
|
|
556
|
+
VALUES
|
|
557
|
+
('customer', 'broad', 'schema.org', 'https://schema.org/Organization', 'Organization', 'Customer is tenant-specific and can include prospects or accounts, so this mapping stays broad.'),
|
|
558
|
+
('person', 'close', 'schema.org', 'https://schema.org/Person', 'Person', 'Business person records may omit personal details by policy.'),
|
|
559
|
+
('opportunity', 'related', 'schema.org', 'https://schema.org/Offer', 'Offer', 'Opportunity is a sales-process object, not a public offer.'),
|
|
560
|
+
('order', 'close', 'schema.org', 'https://schema.org/Order', 'Order', 'Commercial order records should prefer source-system identifiers.'),
|
|
561
|
+
('decision', 'related', 'prov-o', 'http://www.w3.org/ns/prov#Activity', 'Activity', 'Decisions are durable outcomes with provenance, not generic activities.')
|
|
562
|
+
)
|
|
563
|
+
INSERT INTO ontology.external_mappings (
|
|
564
|
+
tenant_id,
|
|
565
|
+
subject_kind,
|
|
566
|
+
subject_id,
|
|
567
|
+
mapping_kind,
|
|
568
|
+
vocabulary,
|
|
569
|
+
external_uri,
|
|
570
|
+
external_label,
|
|
571
|
+
notes
|
|
572
|
+
)
|
|
573
|
+
SELECT
|
|
574
|
+
entity_types.tenant_id,
|
|
575
|
+
'entity_type',
|
|
576
|
+
entity_types.id,
|
|
577
|
+
seed.mapping_kind,
|
|
578
|
+
seed.vocabulary,
|
|
579
|
+
seed.external_uri,
|
|
580
|
+
seed.external_label,
|
|
581
|
+
seed.notes
|
|
582
|
+
FROM seed
|
|
583
|
+
JOIN ontology.entity_types
|
|
584
|
+
ON entity_types.slug = seed.entity_slug
|
|
585
|
+
ON CONFLICT (subject_kind, subject_id, vocabulary, external_uri) DO NOTHING;
|
|
586
|
+
|
|
587
|
+
COMMIT;
|