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,512 @@
|
|
|
1
|
+
-- Purpose: add Cognee thread ingest run ledger and normalized graph snapshot tables.
|
|
2
|
+
-- Plan: docs/plans/2026-06-04-003-feat-cognee-thread-ingest-explorer-plan.md (U1)
|
|
3
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0145_knowledge_graph_thread_ingest.sql
|
|
4
|
+
-- creates: public.knowledge_graph_ingest_runs
|
|
5
|
+
-- creates: public.knowledge_graph_entities
|
|
6
|
+
-- creates: public.knowledge_graph_relationships
|
|
7
|
+
-- creates: public.knowledge_graph_evidence
|
|
8
|
+
-- creates: public.idx_kg_ingest_runs_tenant_thread_created
|
|
9
|
+
-- creates: public.idx_kg_ingest_runs_tenant_status
|
|
10
|
+
-- creates: public.idx_kg_ingest_runs_requested_by
|
|
11
|
+
-- creates: public.uq_kg_ingest_runs_active_thread
|
|
12
|
+
-- creates: public.uq_kg_entities_run_cognee_node
|
|
13
|
+
-- creates: public.idx_kg_entities_tenant_thread_label
|
|
14
|
+
-- creates: public.idx_kg_entities_tenant_thread_type
|
|
15
|
+
-- creates: public.idx_kg_entities_tenant_thread_trust
|
|
16
|
+
-- creates: public.idx_kg_entities_label_trgm
|
|
17
|
+
-- creates: public.uq_kg_relationships_run_cognee_edge
|
|
18
|
+
-- creates: public.idx_kg_relationships_tenant_thread_source
|
|
19
|
+
-- creates: public.idx_kg_relationships_tenant_thread_target
|
|
20
|
+
-- creates: public.idx_kg_relationships_tenant_thread_type
|
|
21
|
+
-- creates: public.idx_kg_relationships_tenant_thread_trust
|
|
22
|
+
-- creates: public.idx_kg_evidence_tenant_thread_message
|
|
23
|
+
-- creates: public.idx_kg_evidence_entity
|
|
24
|
+
-- creates: public.idx_kg_evidence_relationship
|
|
25
|
+
-- creates-constraint: public.knowledge_graph_ingest_runs.knowledge_graph_ingest_runs_tenant_id_tenants_id_fk
|
|
26
|
+
-- creates-constraint: public.knowledge_graph_ingest_runs.knowledge_graph_ingest_runs_thread_id_threads_id_fk
|
|
27
|
+
-- creates-constraint: public.knowledge_graph_ingest_runs.knowledge_graph_ingest_runs_requested_by_user_id_users_id_fk
|
|
28
|
+
-- creates-constraint: public.knowledge_graph_ingest_runs.knowledge_graph_ingest_runs_status_allowed
|
|
29
|
+
-- creates-constraint: public.knowledge_graph_ingest_runs.knowledge_graph_ingest_runs_trigger_allowed
|
|
30
|
+
-- creates-constraint: public.knowledge_graph_entities.knowledge_graph_entities_tenant_id_tenants_id_fk
|
|
31
|
+
-- creates-constraint: public.knowledge_graph_entities.knowledge_graph_entities_thread_id_threads_id_fk
|
|
32
|
+
-- creates-constraint: public.knowledge_graph_entities.knowledge_graph_entities_ingest_run_id_runs_id_fk
|
|
33
|
+
-- creates-constraint: public.knowledge_graph_entities.knowledge_graph_entities_ontology_entity_type_id_fk
|
|
34
|
+
-- creates-constraint: public.knowledge_graph_entities.knowledge_graph_entities_grounding_allowed
|
|
35
|
+
-- creates-constraint: public.knowledge_graph_entities.knowledge_graph_entities_provenance_allowed
|
|
36
|
+
-- creates-constraint: public.knowledge_graph_relationships.knowledge_graph_relationships_tenant_id_tenants_id_fk
|
|
37
|
+
-- creates-constraint: public.knowledge_graph_relationships.knowledge_graph_relationships_thread_id_threads_id_fk
|
|
38
|
+
-- creates-constraint: public.knowledge_graph_relationships.knowledge_graph_relationships_ingest_run_id_runs_id_fk
|
|
39
|
+
-- creates-constraint: public.knowledge_graph_relationships.knowledge_graph_relationships_source_entity_id_entities_id_fk
|
|
40
|
+
-- creates-constraint: public.knowledge_graph_relationships.knowledge_graph_relationships_target_entity_id_entities_id_fk
|
|
41
|
+
-- creates-constraint: public.knowledge_graph_relationships.knowledge_graph_relationships_ontology_relationship_type_id_fk
|
|
42
|
+
-- creates-constraint: public.knowledge_graph_relationships.knowledge_graph_relationships_grounding_allowed
|
|
43
|
+
-- creates-constraint: public.knowledge_graph_relationships.knowledge_graph_relationships_provenance_allowed
|
|
44
|
+
-- creates-constraint: public.knowledge_graph_evidence.knowledge_graph_evidence_tenant_id_tenants_id_fk
|
|
45
|
+
-- creates-constraint: public.knowledge_graph_evidence.knowledge_graph_evidence_thread_id_threads_id_fk
|
|
46
|
+
-- creates-constraint: public.knowledge_graph_evidence.knowledge_graph_evidence_ingest_run_id_runs_id_fk
|
|
47
|
+
-- creates-constraint: public.knowledge_graph_evidence.knowledge_graph_evidence_entity_id_entities_id_fk
|
|
48
|
+
-- creates-constraint: public.knowledge_graph_evidence.knowledge_graph_evidence_relationship_id_relationships_id_fk
|
|
49
|
+
-- creates-constraint: public.knowledge_graph_evidence.knowledge_graph_evidence_message_id_messages_id_fk
|
|
50
|
+
-- creates-constraint: public.knowledge_graph_evidence.knowledge_graph_evidence_source_kind_allowed
|
|
51
|
+
-- creates-constraint: public.knowledge_graph_evidence.knowledge_graph_evidence_subject_required
|
|
52
|
+
-- creates-function: public.enforce_knowledge_graph_ingest_run_scope
|
|
53
|
+
-- creates-function: public.enforce_knowledge_graph_entity_scope
|
|
54
|
+
-- creates-function: public.enforce_knowledge_graph_relationship_scope
|
|
55
|
+
-- creates-function: public.enforce_knowledge_graph_evidence_scope
|
|
56
|
+
-- creates-trigger: public.knowledge_graph_ingest_runs.knowledge_graph_ingest_runs_scope_guard
|
|
57
|
+
-- creates-trigger: public.knowledge_graph_entities.knowledge_graph_entities_scope_guard
|
|
58
|
+
-- creates-trigger: public.knowledge_graph_relationships.knowledge_graph_relationships_scope_guard
|
|
59
|
+
-- creates-trigger: public.knowledge_graph_evidence.knowledge_graph_evidence_scope_guard
|
|
60
|
+
|
|
61
|
+
\set ON_ERROR_STOP on
|
|
62
|
+
|
|
63
|
+
BEGIN;
|
|
64
|
+
|
|
65
|
+
SET LOCAL lock_timeout = '5s';
|
|
66
|
+
SET LOCAL statement_timeout = '120s';
|
|
67
|
+
|
|
68
|
+
CREATE TABLE IF NOT EXISTS public.knowledge_graph_ingest_runs (
|
|
69
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
70
|
+
tenant_id uuid NOT NULL,
|
|
71
|
+
thread_id uuid NOT NULL,
|
|
72
|
+
requested_by_user_id uuid,
|
|
73
|
+
status text NOT NULL DEFAULT 'queued',
|
|
74
|
+
trigger text NOT NULL DEFAULT 'manual',
|
|
75
|
+
cognee_dataset_name text NOT NULL,
|
|
76
|
+
cognee_dataset_id text,
|
|
77
|
+
started_at timestamptz,
|
|
78
|
+
finished_at timestamptz,
|
|
79
|
+
duration_ms integer,
|
|
80
|
+
error text,
|
|
81
|
+
entity_count integer NOT NULL DEFAULT 0,
|
|
82
|
+
relationship_count integer NOT NULL DEFAULT 0,
|
|
83
|
+
evidence_count integer NOT NULL DEFAULT 0,
|
|
84
|
+
diagnostic_count integer NOT NULL DEFAULT 0,
|
|
85
|
+
message_count integer NOT NULL DEFAULT 0,
|
|
86
|
+
input jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
87
|
+
metrics jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
88
|
+
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
89
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
90
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
91
|
+
CONSTRAINT knowledge_graph_ingest_runs_tenant_id_tenants_id_fk
|
|
92
|
+
FOREIGN KEY (tenant_id)
|
|
93
|
+
REFERENCES public.tenants(id)
|
|
94
|
+
ON DELETE CASCADE,
|
|
95
|
+
CONSTRAINT knowledge_graph_ingest_runs_thread_id_threads_id_fk
|
|
96
|
+
FOREIGN KEY (thread_id)
|
|
97
|
+
REFERENCES public.threads(id)
|
|
98
|
+
ON DELETE CASCADE,
|
|
99
|
+
CONSTRAINT knowledge_graph_ingest_runs_requested_by_user_id_users_id_fk
|
|
100
|
+
FOREIGN KEY (requested_by_user_id)
|
|
101
|
+
REFERENCES public.users(id)
|
|
102
|
+
ON DELETE SET NULL,
|
|
103
|
+
CONSTRAINT knowledge_graph_ingest_runs_status_allowed
|
|
104
|
+
CHECK (status IN ('queued', 'running', 'succeeded', 'failed', 'canceled', 'stale_noop')),
|
|
105
|
+
CONSTRAINT knowledge_graph_ingest_runs_trigger_allowed
|
|
106
|
+
CHECK (trigger IN ('manual'))
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
CREATE INDEX IF NOT EXISTS idx_kg_ingest_runs_tenant_thread_created
|
|
110
|
+
ON public.knowledge_graph_ingest_runs (tenant_id, thread_id, created_at);
|
|
111
|
+
|
|
112
|
+
CREATE INDEX IF NOT EXISTS idx_kg_ingest_runs_tenant_status
|
|
113
|
+
ON public.knowledge_graph_ingest_runs (tenant_id, status);
|
|
114
|
+
|
|
115
|
+
CREATE INDEX IF NOT EXISTS idx_kg_ingest_runs_requested_by
|
|
116
|
+
ON public.knowledge_graph_ingest_runs (tenant_id, requested_by_user_id, created_at);
|
|
117
|
+
|
|
118
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_kg_ingest_runs_active_thread
|
|
119
|
+
ON public.knowledge_graph_ingest_runs (tenant_id, thread_id)
|
|
120
|
+
WHERE status IN ('queued', 'running');
|
|
121
|
+
|
|
122
|
+
CREATE TABLE IF NOT EXISTS public.knowledge_graph_entities (
|
|
123
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
124
|
+
tenant_id uuid NOT NULL,
|
|
125
|
+
thread_id uuid NOT NULL,
|
|
126
|
+
ingest_run_id uuid NOT NULL,
|
|
127
|
+
cognee_node_id text NOT NULL,
|
|
128
|
+
label text NOT NULL,
|
|
129
|
+
normalized_label text NOT NULL,
|
|
130
|
+
type_label text,
|
|
131
|
+
ontology_entity_type_id uuid,
|
|
132
|
+
ontology_type_slug text,
|
|
133
|
+
grounding_status text NOT NULL DEFAULT 'unknown',
|
|
134
|
+
provenance_status text NOT NULL DEFAULT 'missing',
|
|
135
|
+
summary text,
|
|
136
|
+
aliases text[] NOT NULL DEFAULT ARRAY[]::text[],
|
|
137
|
+
properties jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
138
|
+
diagnostics jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
139
|
+
relationship_count integer NOT NULL DEFAULT 0,
|
|
140
|
+
evidence_count integer NOT NULL DEFAULT 0,
|
|
141
|
+
last_seen_at timestamptz,
|
|
142
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
143
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
144
|
+
CONSTRAINT knowledge_graph_entities_tenant_id_tenants_id_fk
|
|
145
|
+
FOREIGN KEY (tenant_id)
|
|
146
|
+
REFERENCES public.tenants(id)
|
|
147
|
+
ON DELETE CASCADE,
|
|
148
|
+
CONSTRAINT knowledge_graph_entities_thread_id_threads_id_fk
|
|
149
|
+
FOREIGN KEY (thread_id)
|
|
150
|
+
REFERENCES public.threads(id)
|
|
151
|
+
ON DELETE CASCADE,
|
|
152
|
+
CONSTRAINT knowledge_graph_entities_ingest_run_id_runs_id_fk
|
|
153
|
+
FOREIGN KEY (ingest_run_id)
|
|
154
|
+
REFERENCES public.knowledge_graph_ingest_runs(id)
|
|
155
|
+
ON DELETE CASCADE,
|
|
156
|
+
CONSTRAINT knowledge_graph_entities_ontology_entity_type_id_fk
|
|
157
|
+
FOREIGN KEY (ontology_entity_type_id)
|
|
158
|
+
REFERENCES ontology.entity_types(id)
|
|
159
|
+
ON DELETE SET NULL,
|
|
160
|
+
CONSTRAINT knowledge_graph_entities_grounding_allowed
|
|
161
|
+
CHECK (grounding_status IN ('grounded', 'unapproved_type', 'ungrounded', 'conflict', 'unknown')),
|
|
162
|
+
CONSTRAINT knowledge_graph_entities_provenance_allowed
|
|
163
|
+
CHECK (provenance_status IN ('strong', 'weak', 'missing'))
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_kg_entities_run_cognee_node
|
|
167
|
+
ON public.knowledge_graph_entities (ingest_run_id, cognee_node_id);
|
|
168
|
+
|
|
169
|
+
CREATE INDEX IF NOT EXISTS idx_kg_entities_tenant_thread_label
|
|
170
|
+
ON public.knowledge_graph_entities (tenant_id, thread_id, normalized_label);
|
|
171
|
+
|
|
172
|
+
CREATE INDEX IF NOT EXISTS idx_kg_entities_tenant_thread_type
|
|
173
|
+
ON public.knowledge_graph_entities (tenant_id, thread_id, ontology_type_slug);
|
|
174
|
+
|
|
175
|
+
CREATE INDEX IF NOT EXISTS idx_kg_entities_tenant_thread_trust
|
|
176
|
+
ON public.knowledge_graph_entities (
|
|
177
|
+
tenant_id,
|
|
178
|
+
thread_id,
|
|
179
|
+
grounding_status,
|
|
180
|
+
provenance_status
|
|
181
|
+
);
|
|
182
|
+
|
|
183
|
+
CREATE INDEX IF NOT EXISTS idx_kg_entities_label_trgm
|
|
184
|
+
ON public.knowledge_graph_entities USING gin (normalized_label gin_trgm_ops);
|
|
185
|
+
|
|
186
|
+
CREATE TABLE IF NOT EXISTS public.knowledge_graph_relationships (
|
|
187
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
188
|
+
tenant_id uuid NOT NULL,
|
|
189
|
+
thread_id uuid NOT NULL,
|
|
190
|
+
ingest_run_id uuid NOT NULL,
|
|
191
|
+
cognee_edge_id text,
|
|
192
|
+
source_entity_id uuid NOT NULL,
|
|
193
|
+
target_entity_id uuid NOT NULL,
|
|
194
|
+
label text NOT NULL,
|
|
195
|
+
ontology_relationship_type_id uuid,
|
|
196
|
+
ontology_type_slug text,
|
|
197
|
+
grounding_status text NOT NULL DEFAULT 'unknown',
|
|
198
|
+
provenance_status text NOT NULL DEFAULT 'missing',
|
|
199
|
+
confidence numeric(5, 4),
|
|
200
|
+
properties jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
201
|
+
diagnostics jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
202
|
+
evidence_count integer NOT NULL DEFAULT 0,
|
|
203
|
+
last_seen_at timestamptz,
|
|
204
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
205
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
206
|
+
CONSTRAINT knowledge_graph_relationships_tenant_id_tenants_id_fk
|
|
207
|
+
FOREIGN KEY (tenant_id)
|
|
208
|
+
REFERENCES public.tenants(id)
|
|
209
|
+
ON DELETE CASCADE,
|
|
210
|
+
CONSTRAINT knowledge_graph_relationships_thread_id_threads_id_fk
|
|
211
|
+
FOREIGN KEY (thread_id)
|
|
212
|
+
REFERENCES public.threads(id)
|
|
213
|
+
ON DELETE CASCADE,
|
|
214
|
+
CONSTRAINT knowledge_graph_relationships_ingest_run_id_runs_id_fk
|
|
215
|
+
FOREIGN KEY (ingest_run_id)
|
|
216
|
+
REFERENCES public.knowledge_graph_ingest_runs(id)
|
|
217
|
+
ON DELETE CASCADE,
|
|
218
|
+
CONSTRAINT knowledge_graph_relationships_source_entity_id_entities_id_fk
|
|
219
|
+
FOREIGN KEY (source_entity_id)
|
|
220
|
+
REFERENCES public.knowledge_graph_entities(id)
|
|
221
|
+
ON DELETE CASCADE,
|
|
222
|
+
CONSTRAINT knowledge_graph_relationships_target_entity_id_entities_id_fk
|
|
223
|
+
FOREIGN KEY (target_entity_id)
|
|
224
|
+
REFERENCES public.knowledge_graph_entities(id)
|
|
225
|
+
ON DELETE CASCADE,
|
|
226
|
+
CONSTRAINT knowledge_graph_relationships_ontology_relationship_type_id_fk
|
|
227
|
+
FOREIGN KEY (ontology_relationship_type_id)
|
|
228
|
+
REFERENCES ontology.relationship_types(id)
|
|
229
|
+
ON DELETE SET NULL,
|
|
230
|
+
CONSTRAINT knowledge_graph_relationships_grounding_allowed
|
|
231
|
+
CHECK (grounding_status IN ('grounded', 'unapproved_type', 'ungrounded', 'conflict', 'unknown')),
|
|
232
|
+
CONSTRAINT knowledge_graph_relationships_provenance_allowed
|
|
233
|
+
CHECK (provenance_status IN ('strong', 'weak', 'missing'))
|
|
234
|
+
);
|
|
235
|
+
|
|
236
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_kg_relationships_run_cognee_edge
|
|
237
|
+
ON public.knowledge_graph_relationships (ingest_run_id, cognee_edge_id)
|
|
238
|
+
WHERE cognee_edge_id IS NOT NULL;
|
|
239
|
+
|
|
240
|
+
CREATE INDEX IF NOT EXISTS idx_kg_relationships_tenant_thread_source
|
|
241
|
+
ON public.knowledge_graph_relationships (tenant_id, thread_id, source_entity_id);
|
|
242
|
+
|
|
243
|
+
CREATE INDEX IF NOT EXISTS idx_kg_relationships_tenant_thread_target
|
|
244
|
+
ON public.knowledge_graph_relationships (tenant_id, thread_id, target_entity_id);
|
|
245
|
+
|
|
246
|
+
CREATE INDEX IF NOT EXISTS idx_kg_relationships_tenant_thread_type
|
|
247
|
+
ON public.knowledge_graph_relationships (tenant_id, thread_id, ontology_type_slug);
|
|
248
|
+
|
|
249
|
+
CREATE INDEX IF NOT EXISTS idx_kg_relationships_tenant_thread_trust
|
|
250
|
+
ON public.knowledge_graph_relationships (
|
|
251
|
+
tenant_id,
|
|
252
|
+
thread_id,
|
|
253
|
+
grounding_status,
|
|
254
|
+
provenance_status
|
|
255
|
+
);
|
|
256
|
+
|
|
257
|
+
CREATE TABLE IF NOT EXISTS public.knowledge_graph_evidence (
|
|
258
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
259
|
+
tenant_id uuid NOT NULL,
|
|
260
|
+
thread_id uuid NOT NULL,
|
|
261
|
+
ingest_run_id uuid NOT NULL,
|
|
262
|
+
entity_id uuid,
|
|
263
|
+
relationship_id uuid,
|
|
264
|
+
message_id uuid,
|
|
265
|
+
message_role text,
|
|
266
|
+
message_created_at timestamptz,
|
|
267
|
+
speaker_label text,
|
|
268
|
+
snippet text NOT NULL,
|
|
269
|
+
char_start integer,
|
|
270
|
+
char_end integer,
|
|
271
|
+
source_kind text NOT NULL DEFAULT 'thread_message',
|
|
272
|
+
source_ref text,
|
|
273
|
+
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
274
|
+
observed_at timestamptz,
|
|
275
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
276
|
+
CONSTRAINT knowledge_graph_evidence_tenant_id_tenants_id_fk
|
|
277
|
+
FOREIGN KEY (tenant_id)
|
|
278
|
+
REFERENCES public.tenants(id)
|
|
279
|
+
ON DELETE CASCADE,
|
|
280
|
+
CONSTRAINT knowledge_graph_evidence_thread_id_threads_id_fk
|
|
281
|
+
FOREIGN KEY (thread_id)
|
|
282
|
+
REFERENCES public.threads(id)
|
|
283
|
+
ON DELETE CASCADE,
|
|
284
|
+
CONSTRAINT knowledge_graph_evidence_ingest_run_id_runs_id_fk
|
|
285
|
+
FOREIGN KEY (ingest_run_id)
|
|
286
|
+
REFERENCES public.knowledge_graph_ingest_runs(id)
|
|
287
|
+
ON DELETE CASCADE,
|
|
288
|
+
CONSTRAINT knowledge_graph_evidence_entity_id_entities_id_fk
|
|
289
|
+
FOREIGN KEY (entity_id)
|
|
290
|
+
REFERENCES public.knowledge_graph_entities(id)
|
|
291
|
+
ON DELETE CASCADE,
|
|
292
|
+
CONSTRAINT knowledge_graph_evidence_relationship_id_relationships_id_fk
|
|
293
|
+
FOREIGN KEY (relationship_id)
|
|
294
|
+
REFERENCES public.knowledge_graph_relationships(id)
|
|
295
|
+
ON DELETE CASCADE,
|
|
296
|
+
CONSTRAINT knowledge_graph_evidence_message_id_messages_id_fk
|
|
297
|
+
FOREIGN KEY (message_id)
|
|
298
|
+
REFERENCES public.messages(id)
|
|
299
|
+
ON DELETE SET NULL,
|
|
300
|
+
CONSTRAINT knowledge_graph_evidence_source_kind_allowed
|
|
301
|
+
CHECK (source_kind IN ('thread_message', 'cognee_payload', 'normalizer')),
|
|
302
|
+
CONSTRAINT knowledge_graph_evidence_subject_required
|
|
303
|
+
CHECK (entity_id IS NOT NULL OR relationship_id IS NOT NULL)
|
|
304
|
+
);
|
|
305
|
+
|
|
306
|
+
CREATE INDEX IF NOT EXISTS idx_kg_evidence_tenant_thread_message
|
|
307
|
+
ON public.knowledge_graph_evidence (tenant_id, thread_id, message_id);
|
|
308
|
+
|
|
309
|
+
CREATE INDEX IF NOT EXISTS idx_kg_evidence_entity
|
|
310
|
+
ON public.knowledge_graph_evidence (entity_id);
|
|
311
|
+
|
|
312
|
+
CREATE INDEX IF NOT EXISTS idx_kg_evidence_relationship
|
|
313
|
+
ON public.knowledge_graph_evidence (relationship_id);
|
|
314
|
+
|
|
315
|
+
CREATE OR REPLACE FUNCTION public.enforce_knowledge_graph_ingest_run_scope()
|
|
316
|
+
RETURNS trigger
|
|
317
|
+
LANGUAGE plpgsql
|
|
318
|
+
AS $$
|
|
319
|
+
DECLARE
|
|
320
|
+
thread_tenant uuid;
|
|
321
|
+
BEGIN
|
|
322
|
+
SELECT tenant_id INTO thread_tenant
|
|
323
|
+
FROM public.threads
|
|
324
|
+
WHERE id = NEW.thread_id;
|
|
325
|
+
|
|
326
|
+
IF thread_tenant IS NOT NULL AND thread_tenant != NEW.tenant_id THEN
|
|
327
|
+
RAISE EXCEPTION 'knowledge graph ingest run tenant mismatch for thread %', NEW.thread_id;
|
|
328
|
+
END IF;
|
|
329
|
+
|
|
330
|
+
RETURN NEW;
|
|
331
|
+
END;
|
|
332
|
+
$$;
|
|
333
|
+
|
|
334
|
+
DROP TRIGGER IF EXISTS knowledge_graph_ingest_runs_scope_guard
|
|
335
|
+
ON public.knowledge_graph_ingest_runs;
|
|
336
|
+
CREATE TRIGGER knowledge_graph_ingest_runs_scope_guard
|
|
337
|
+
BEFORE INSERT OR UPDATE ON public.knowledge_graph_ingest_runs
|
|
338
|
+
FOR EACH ROW
|
|
339
|
+
EXECUTE FUNCTION public.enforce_knowledge_graph_ingest_run_scope();
|
|
340
|
+
|
|
341
|
+
CREATE OR REPLACE FUNCTION public.enforce_knowledge_graph_entity_scope()
|
|
342
|
+
RETURNS trigger
|
|
343
|
+
LANGUAGE plpgsql
|
|
344
|
+
AS $$
|
|
345
|
+
DECLARE
|
|
346
|
+
run_tenant uuid;
|
|
347
|
+
run_thread uuid;
|
|
348
|
+
ontology_tenant uuid;
|
|
349
|
+
BEGIN
|
|
350
|
+
SELECT tenant_id, thread_id INTO run_tenant, run_thread
|
|
351
|
+
FROM public.knowledge_graph_ingest_runs
|
|
352
|
+
WHERE id = NEW.ingest_run_id;
|
|
353
|
+
|
|
354
|
+
IF run_tenant IS NOT NULL AND (run_tenant != NEW.tenant_id OR run_thread != NEW.thread_id) THEN
|
|
355
|
+
RAISE EXCEPTION 'knowledge graph entity run scope mismatch for run %', NEW.ingest_run_id;
|
|
356
|
+
END IF;
|
|
357
|
+
|
|
358
|
+
IF NEW.ontology_entity_type_id IS NOT NULL THEN
|
|
359
|
+
SELECT tenant_id INTO ontology_tenant
|
|
360
|
+
FROM ontology.entity_types
|
|
361
|
+
WHERE id = NEW.ontology_entity_type_id;
|
|
362
|
+
|
|
363
|
+
IF ontology_tenant IS NOT NULL AND ontology_tenant != NEW.tenant_id THEN
|
|
364
|
+
RAISE EXCEPTION 'knowledge graph entity ontology tenant mismatch for entity type %', NEW.ontology_entity_type_id;
|
|
365
|
+
END IF;
|
|
366
|
+
END IF;
|
|
367
|
+
|
|
368
|
+
RETURN NEW;
|
|
369
|
+
END;
|
|
370
|
+
$$;
|
|
371
|
+
|
|
372
|
+
DROP TRIGGER IF EXISTS knowledge_graph_entities_scope_guard
|
|
373
|
+
ON public.knowledge_graph_entities;
|
|
374
|
+
CREATE TRIGGER knowledge_graph_entities_scope_guard
|
|
375
|
+
BEFORE INSERT OR UPDATE ON public.knowledge_graph_entities
|
|
376
|
+
FOR EACH ROW
|
|
377
|
+
EXECUTE FUNCTION public.enforce_knowledge_graph_entity_scope();
|
|
378
|
+
|
|
379
|
+
CREATE OR REPLACE FUNCTION public.enforce_knowledge_graph_relationship_scope()
|
|
380
|
+
RETURNS trigger
|
|
381
|
+
LANGUAGE plpgsql
|
|
382
|
+
AS $$
|
|
383
|
+
DECLARE
|
|
384
|
+
run_tenant uuid;
|
|
385
|
+
run_thread uuid;
|
|
386
|
+
source_tenant uuid;
|
|
387
|
+
source_thread uuid;
|
|
388
|
+
source_run uuid;
|
|
389
|
+
target_tenant uuid;
|
|
390
|
+
target_thread uuid;
|
|
391
|
+
target_run uuid;
|
|
392
|
+
ontology_tenant uuid;
|
|
393
|
+
BEGIN
|
|
394
|
+
SELECT tenant_id, thread_id INTO run_tenant, run_thread
|
|
395
|
+
FROM public.knowledge_graph_ingest_runs
|
|
396
|
+
WHERE id = NEW.ingest_run_id;
|
|
397
|
+
|
|
398
|
+
IF run_tenant IS NOT NULL AND (run_tenant != NEW.tenant_id OR run_thread != NEW.thread_id) THEN
|
|
399
|
+
RAISE EXCEPTION 'knowledge graph relationship run scope mismatch for run %', NEW.ingest_run_id;
|
|
400
|
+
END IF;
|
|
401
|
+
|
|
402
|
+
SELECT tenant_id, thread_id, ingest_run_id INTO source_tenant, source_thread, source_run
|
|
403
|
+
FROM public.knowledge_graph_entities
|
|
404
|
+
WHERE id = NEW.source_entity_id;
|
|
405
|
+
|
|
406
|
+
SELECT tenant_id, thread_id, ingest_run_id INTO target_tenant, target_thread, target_run
|
|
407
|
+
FROM public.knowledge_graph_entities
|
|
408
|
+
WHERE id = NEW.target_entity_id;
|
|
409
|
+
|
|
410
|
+
IF source_tenant IS NOT NULL
|
|
411
|
+
AND (source_tenant != NEW.tenant_id OR source_thread != NEW.thread_id OR source_run != NEW.ingest_run_id) THEN
|
|
412
|
+
RAISE EXCEPTION 'knowledge graph relationship source scope mismatch for entity %', NEW.source_entity_id;
|
|
413
|
+
END IF;
|
|
414
|
+
|
|
415
|
+
IF target_tenant IS NOT NULL
|
|
416
|
+
AND (target_tenant != NEW.tenant_id OR target_thread != NEW.thread_id OR target_run != NEW.ingest_run_id) THEN
|
|
417
|
+
RAISE EXCEPTION 'knowledge graph relationship target scope mismatch for entity %', NEW.target_entity_id;
|
|
418
|
+
END IF;
|
|
419
|
+
|
|
420
|
+
IF NEW.ontology_relationship_type_id IS NOT NULL THEN
|
|
421
|
+
SELECT tenant_id INTO ontology_tenant
|
|
422
|
+
FROM ontology.relationship_types
|
|
423
|
+
WHERE id = NEW.ontology_relationship_type_id;
|
|
424
|
+
|
|
425
|
+
IF ontology_tenant IS NOT NULL AND ontology_tenant != NEW.tenant_id THEN
|
|
426
|
+
RAISE EXCEPTION 'knowledge graph relationship ontology tenant mismatch for relationship type %', NEW.ontology_relationship_type_id;
|
|
427
|
+
END IF;
|
|
428
|
+
END IF;
|
|
429
|
+
|
|
430
|
+
RETURN NEW;
|
|
431
|
+
END;
|
|
432
|
+
$$;
|
|
433
|
+
|
|
434
|
+
DROP TRIGGER IF EXISTS knowledge_graph_relationships_scope_guard
|
|
435
|
+
ON public.knowledge_graph_relationships;
|
|
436
|
+
CREATE TRIGGER knowledge_graph_relationships_scope_guard
|
|
437
|
+
BEFORE INSERT OR UPDATE ON public.knowledge_graph_relationships
|
|
438
|
+
FOR EACH ROW
|
|
439
|
+
EXECUTE FUNCTION public.enforce_knowledge_graph_relationship_scope();
|
|
440
|
+
|
|
441
|
+
CREATE OR REPLACE FUNCTION public.enforce_knowledge_graph_evidence_scope()
|
|
442
|
+
RETURNS trigger
|
|
443
|
+
LANGUAGE plpgsql
|
|
444
|
+
AS $$
|
|
445
|
+
DECLARE
|
|
446
|
+
run_tenant uuid;
|
|
447
|
+
run_thread uuid;
|
|
448
|
+
entity_tenant uuid;
|
|
449
|
+
entity_thread uuid;
|
|
450
|
+
entity_run uuid;
|
|
451
|
+
relationship_tenant uuid;
|
|
452
|
+
relationship_thread uuid;
|
|
453
|
+
relationship_run uuid;
|
|
454
|
+
message_tenant uuid;
|
|
455
|
+
message_thread uuid;
|
|
456
|
+
BEGIN
|
|
457
|
+
SELECT tenant_id, thread_id INTO run_tenant, run_thread
|
|
458
|
+
FROM public.knowledge_graph_ingest_runs
|
|
459
|
+
WHERE id = NEW.ingest_run_id;
|
|
460
|
+
|
|
461
|
+
IF run_tenant IS NOT NULL AND (run_tenant != NEW.tenant_id OR run_thread != NEW.thread_id) THEN
|
|
462
|
+
RAISE EXCEPTION 'knowledge graph evidence run scope mismatch for run %', NEW.ingest_run_id;
|
|
463
|
+
END IF;
|
|
464
|
+
|
|
465
|
+
IF NEW.entity_id IS NOT NULL THEN
|
|
466
|
+
SELECT tenant_id, thread_id, ingest_run_id INTO entity_tenant, entity_thread, entity_run
|
|
467
|
+
FROM public.knowledge_graph_entities
|
|
468
|
+
WHERE id = NEW.entity_id;
|
|
469
|
+
|
|
470
|
+
IF entity_tenant IS NOT NULL
|
|
471
|
+
AND (entity_tenant != NEW.tenant_id OR entity_thread != NEW.thread_id OR entity_run != NEW.ingest_run_id) THEN
|
|
472
|
+
RAISE EXCEPTION 'knowledge graph evidence entity scope mismatch for entity %', NEW.entity_id;
|
|
473
|
+
END IF;
|
|
474
|
+
END IF;
|
|
475
|
+
|
|
476
|
+
IF NEW.relationship_id IS NOT NULL THEN
|
|
477
|
+
SELECT tenant_id, thread_id, ingest_run_id INTO relationship_tenant, relationship_thread, relationship_run
|
|
478
|
+
FROM public.knowledge_graph_relationships
|
|
479
|
+
WHERE id = NEW.relationship_id;
|
|
480
|
+
|
|
481
|
+
IF relationship_tenant IS NOT NULL
|
|
482
|
+
AND (
|
|
483
|
+
relationship_tenant != NEW.tenant_id
|
|
484
|
+
OR relationship_thread != NEW.thread_id
|
|
485
|
+
OR relationship_run != NEW.ingest_run_id
|
|
486
|
+
) THEN
|
|
487
|
+
RAISE EXCEPTION 'knowledge graph evidence relationship scope mismatch for relationship %', NEW.relationship_id;
|
|
488
|
+
END IF;
|
|
489
|
+
END IF;
|
|
490
|
+
|
|
491
|
+
IF NEW.message_id IS NOT NULL THEN
|
|
492
|
+
SELECT tenant_id, thread_id INTO message_tenant, message_thread
|
|
493
|
+
FROM public.messages
|
|
494
|
+
WHERE id = NEW.message_id;
|
|
495
|
+
|
|
496
|
+
IF message_tenant IS NOT NULL AND (message_tenant != NEW.tenant_id OR message_thread != NEW.thread_id) THEN
|
|
497
|
+
RAISE EXCEPTION 'knowledge graph evidence message scope mismatch for message %', NEW.message_id;
|
|
498
|
+
END IF;
|
|
499
|
+
END IF;
|
|
500
|
+
|
|
501
|
+
RETURN NEW;
|
|
502
|
+
END;
|
|
503
|
+
$$;
|
|
504
|
+
|
|
505
|
+
DROP TRIGGER IF EXISTS knowledge_graph_evidence_scope_guard
|
|
506
|
+
ON public.knowledge_graph_evidence;
|
|
507
|
+
CREATE TRIGGER knowledge_graph_evidence_scope_guard
|
|
508
|
+
BEFORE INSERT OR UPDATE ON public.knowledge_graph_evidence
|
|
509
|
+
FOR EACH ROW
|
|
510
|
+
EXECUTE FUNCTION public.enforce_knowledge_graph_evidence_scope();
|
|
511
|
+
|
|
512
|
+
COMMIT;
|