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,413 @@
|
|
|
1
|
+
-- Purpose: make Knowledge Graph snapshots source-aware for thread, wiki, and brain ingests.
|
|
2
|
+
-- Plan: docs/plans/2026-06-05-001-feat-knowledge-graph-wiki-brain-ingest-plan.md (U1)
|
|
3
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0146_knowledge_graph_source_scope.sql
|
|
4
|
+
-- creates-column: public.knowledge_graph_ingest_runs.source_kind
|
|
5
|
+
-- creates-column: public.knowledge_graph_ingest_runs.source_ref
|
|
6
|
+
-- creates-column: public.knowledge_graph_ingest_runs.source_label
|
|
7
|
+
-- creates-column: public.knowledge_graph_entities.source_kind
|
|
8
|
+
-- creates-column: public.knowledge_graph_entities.source_ref
|
|
9
|
+
-- creates-column: public.knowledge_graph_relationships.source_kind
|
|
10
|
+
-- creates-column: public.knowledge_graph_relationships.source_ref
|
|
11
|
+
-- creates-column: public.knowledge_graph_evidence.source_kind
|
|
12
|
+
-- creates-column: public.knowledge_graph_evidence.source_ref
|
|
13
|
+
-- creates-column: public.knowledge_graph_evidence.evidence_source_kind
|
|
14
|
+
-- creates-column: public.knowledge_graph_evidence.evidence_source_ref
|
|
15
|
+
-- creates: public.idx_kg_ingest_runs_tenant_source_created
|
|
16
|
+
-- creates: public.uq_kg_ingest_runs_active_source
|
|
17
|
+
-- creates: public.idx_kg_entities_tenant_source_label
|
|
18
|
+
-- creates: public.idx_kg_relationships_tenant_source_type
|
|
19
|
+
-- creates: public.idx_kg_evidence_tenant_source
|
|
20
|
+
-- creates-constraint: public.knowledge_graph_ingest_runs.knowledge_graph_ingest_runs_source_kind_allowed
|
|
21
|
+
-- creates-constraint: public.knowledge_graph_ingest_runs.knowledge_graph_ingest_runs_thread_scope_required
|
|
22
|
+
-- creates-constraint: public.knowledge_graph_entities.knowledge_graph_entities_source_kind_allowed
|
|
23
|
+
-- creates-constraint: public.knowledge_graph_relationships.knowledge_graph_relationships_source_kind_allowed
|
|
24
|
+
-- creates-constraint: public.knowledge_graph_evidence.knowledge_graph_evidence_evidence_source_kind_allowed
|
|
25
|
+
|
|
26
|
+
\set ON_ERROR_STOP on
|
|
27
|
+
|
|
28
|
+
BEGIN;
|
|
29
|
+
|
|
30
|
+
SET LOCAL lock_timeout = '5s';
|
|
31
|
+
SET LOCAL statement_timeout = '120s';
|
|
32
|
+
|
|
33
|
+
ALTER TABLE public.knowledge_graph_ingest_runs
|
|
34
|
+
ADD COLUMN IF NOT EXISTS source_kind text NOT NULL DEFAULT 'thread',
|
|
35
|
+
ADD COLUMN IF NOT EXISTS source_ref text,
|
|
36
|
+
ADD COLUMN IF NOT EXISTS source_label text;
|
|
37
|
+
|
|
38
|
+
UPDATE public.knowledge_graph_ingest_runs
|
|
39
|
+
SET source_ref = thread_id::text
|
|
40
|
+
WHERE source_ref IS NULL AND thread_id IS NOT NULL;
|
|
41
|
+
|
|
42
|
+
UPDATE public.knowledge_graph_ingest_runs
|
|
43
|
+
SET source_label = input->>'threadTitle'
|
|
44
|
+
WHERE source_label IS NULL AND input ? 'threadTitle';
|
|
45
|
+
|
|
46
|
+
ALTER TABLE public.knowledge_graph_ingest_runs
|
|
47
|
+
ALTER COLUMN source_ref SET NOT NULL,
|
|
48
|
+
ALTER COLUMN thread_id DROP NOT NULL;
|
|
49
|
+
|
|
50
|
+
ALTER TABLE public.knowledge_graph_entities
|
|
51
|
+
ADD COLUMN IF NOT EXISTS source_kind text NOT NULL DEFAULT 'thread',
|
|
52
|
+
ADD COLUMN IF NOT EXISTS source_ref text;
|
|
53
|
+
|
|
54
|
+
UPDATE public.knowledge_graph_entities
|
|
55
|
+
SET source_ref = thread_id::text
|
|
56
|
+
WHERE source_ref IS NULL AND thread_id IS NOT NULL;
|
|
57
|
+
|
|
58
|
+
ALTER TABLE public.knowledge_graph_entities
|
|
59
|
+
ALTER COLUMN source_ref SET NOT NULL,
|
|
60
|
+
ALTER COLUMN thread_id DROP NOT NULL;
|
|
61
|
+
|
|
62
|
+
ALTER TABLE public.knowledge_graph_relationships
|
|
63
|
+
ADD COLUMN IF NOT EXISTS source_kind text NOT NULL DEFAULT 'thread',
|
|
64
|
+
ADD COLUMN IF NOT EXISTS source_ref text;
|
|
65
|
+
|
|
66
|
+
UPDATE public.knowledge_graph_relationships
|
|
67
|
+
SET source_ref = thread_id::text
|
|
68
|
+
WHERE source_ref IS NULL AND thread_id IS NOT NULL;
|
|
69
|
+
|
|
70
|
+
ALTER TABLE public.knowledge_graph_relationships
|
|
71
|
+
ALTER COLUMN source_ref SET NOT NULL,
|
|
72
|
+
ALTER COLUMN thread_id DROP NOT NULL;
|
|
73
|
+
|
|
74
|
+
DO $$
|
|
75
|
+
BEGIN
|
|
76
|
+
IF EXISTS (
|
|
77
|
+
SELECT 1
|
|
78
|
+
FROM information_schema.columns
|
|
79
|
+
WHERE table_schema = 'public'
|
|
80
|
+
AND table_name = 'knowledge_graph_evidence'
|
|
81
|
+
AND column_name = 'source_kind'
|
|
82
|
+
) AND NOT EXISTS (
|
|
83
|
+
SELECT 1
|
|
84
|
+
FROM information_schema.columns
|
|
85
|
+
WHERE table_schema = 'public'
|
|
86
|
+
AND table_name = 'knowledge_graph_evidence'
|
|
87
|
+
AND column_name = 'evidence_source_kind'
|
|
88
|
+
) THEN
|
|
89
|
+
ALTER TABLE public.knowledge_graph_evidence
|
|
90
|
+
RENAME COLUMN source_kind TO evidence_source_kind;
|
|
91
|
+
END IF;
|
|
92
|
+
|
|
93
|
+
IF EXISTS (
|
|
94
|
+
SELECT 1
|
|
95
|
+
FROM information_schema.columns
|
|
96
|
+
WHERE table_schema = 'public'
|
|
97
|
+
AND table_name = 'knowledge_graph_evidence'
|
|
98
|
+
AND column_name = 'source_ref'
|
|
99
|
+
) AND NOT EXISTS (
|
|
100
|
+
SELECT 1
|
|
101
|
+
FROM information_schema.columns
|
|
102
|
+
WHERE table_schema = 'public'
|
|
103
|
+
AND table_name = 'knowledge_graph_evidence'
|
|
104
|
+
AND column_name = 'evidence_source_ref'
|
|
105
|
+
) THEN
|
|
106
|
+
ALTER TABLE public.knowledge_graph_evidence
|
|
107
|
+
RENAME COLUMN source_ref TO evidence_source_ref;
|
|
108
|
+
END IF;
|
|
109
|
+
END $$;
|
|
110
|
+
|
|
111
|
+
ALTER TABLE public.knowledge_graph_evidence
|
|
112
|
+
ADD COLUMN IF NOT EXISTS source_kind text NOT NULL DEFAULT 'thread',
|
|
113
|
+
ADD COLUMN IF NOT EXISTS source_ref text;
|
|
114
|
+
|
|
115
|
+
UPDATE public.knowledge_graph_evidence
|
|
116
|
+
SET source_ref = thread_id::text
|
|
117
|
+
WHERE source_ref IS NULL AND thread_id IS NOT NULL;
|
|
118
|
+
|
|
119
|
+
ALTER TABLE public.knowledge_graph_evidence
|
|
120
|
+
ALTER COLUMN source_ref SET NOT NULL,
|
|
121
|
+
ALTER COLUMN thread_id DROP NOT NULL;
|
|
122
|
+
|
|
123
|
+
DROP INDEX IF EXISTS public.uq_kg_ingest_runs_active_thread;
|
|
124
|
+
|
|
125
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_kg_ingest_runs_active_thread
|
|
126
|
+
ON public.knowledge_graph_ingest_runs (tenant_id, thread_id)
|
|
127
|
+
WHERE thread_id IS NOT NULL AND status IN ('queued','running');
|
|
128
|
+
|
|
129
|
+
CREATE INDEX IF NOT EXISTS idx_kg_ingest_runs_tenant_source_created
|
|
130
|
+
ON public.knowledge_graph_ingest_runs (tenant_id, source_kind, source_ref, created_at);
|
|
131
|
+
|
|
132
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_kg_ingest_runs_active_source
|
|
133
|
+
ON public.knowledge_graph_ingest_runs (tenant_id, source_kind, source_ref)
|
|
134
|
+
WHERE status IN ('queued','running');
|
|
135
|
+
|
|
136
|
+
CREATE INDEX IF NOT EXISTS idx_kg_entities_tenant_source_label
|
|
137
|
+
ON public.knowledge_graph_entities (tenant_id, source_kind, source_ref, normalized_label);
|
|
138
|
+
|
|
139
|
+
CREATE INDEX IF NOT EXISTS idx_kg_relationships_tenant_source_type
|
|
140
|
+
ON public.knowledge_graph_relationships (tenant_id, source_kind, source_ref, ontology_type_slug);
|
|
141
|
+
|
|
142
|
+
CREATE INDEX IF NOT EXISTS idx_kg_evidence_tenant_source
|
|
143
|
+
ON public.knowledge_graph_evidence (tenant_id, source_kind, source_ref);
|
|
144
|
+
|
|
145
|
+
ALTER TABLE public.knowledge_graph_ingest_runs
|
|
146
|
+
DROP CONSTRAINT IF EXISTS knowledge_graph_ingest_runs_source_kind_allowed,
|
|
147
|
+
DROP CONSTRAINT IF EXISTS knowledge_graph_ingest_runs_thread_scope_required,
|
|
148
|
+
ADD CONSTRAINT knowledge_graph_ingest_runs_source_kind_allowed
|
|
149
|
+
CHECK (source_kind IN ('thread','wiki','brain')),
|
|
150
|
+
ADD CONSTRAINT knowledge_graph_ingest_runs_thread_scope_required
|
|
151
|
+
CHECK (source_kind != 'thread' OR thread_id IS NOT NULL);
|
|
152
|
+
|
|
153
|
+
ALTER TABLE public.knowledge_graph_entities
|
|
154
|
+
DROP CONSTRAINT IF EXISTS knowledge_graph_entities_source_kind_allowed,
|
|
155
|
+
ADD CONSTRAINT knowledge_graph_entities_source_kind_allowed
|
|
156
|
+
CHECK (source_kind IN ('thread','wiki','brain'));
|
|
157
|
+
|
|
158
|
+
ALTER TABLE public.knowledge_graph_relationships
|
|
159
|
+
DROP CONSTRAINT IF EXISTS knowledge_graph_relationships_source_kind_allowed,
|
|
160
|
+
ADD CONSTRAINT knowledge_graph_relationships_source_kind_allowed
|
|
161
|
+
CHECK (source_kind IN ('thread','wiki','brain'));
|
|
162
|
+
|
|
163
|
+
ALTER TABLE public.knowledge_graph_evidence
|
|
164
|
+
DROP CONSTRAINT IF EXISTS knowledge_graph_evidence_source_kind_allowed,
|
|
165
|
+
DROP CONSTRAINT IF EXISTS knowledge_graph_evidence_evidence_source_kind_allowed,
|
|
166
|
+
ADD CONSTRAINT knowledge_graph_evidence_source_kind_allowed
|
|
167
|
+
CHECK (source_kind IN ('thread','wiki','brain')),
|
|
168
|
+
ADD CONSTRAINT knowledge_graph_evidence_evidence_source_kind_allowed
|
|
169
|
+
CHECK (evidence_source_kind IN ('thread_message','wiki_page','wiki_section','brain_page','brain_section','cognee_payload','normalizer'));
|
|
170
|
+
|
|
171
|
+
CREATE OR REPLACE FUNCTION public.enforce_knowledge_graph_ingest_run_scope()
|
|
172
|
+
RETURNS trigger
|
|
173
|
+
LANGUAGE plpgsql
|
|
174
|
+
AS $$
|
|
175
|
+
DECLARE
|
|
176
|
+
thread_tenant uuid;
|
|
177
|
+
BEGIN
|
|
178
|
+
IF NEW.source_kind = 'thread' AND NEW.thread_id IS NULL THEN
|
|
179
|
+
RAISE EXCEPTION 'knowledge graph thread ingest requires thread_id';
|
|
180
|
+
END IF;
|
|
181
|
+
|
|
182
|
+
IF NEW.source_kind = 'thread' AND NEW.source_ref != NEW.thread_id::text THEN
|
|
183
|
+
RAISE EXCEPTION 'knowledge graph thread ingest source_ref must match thread_id';
|
|
184
|
+
END IF;
|
|
185
|
+
|
|
186
|
+
IF NEW.thread_id IS NOT NULL THEN
|
|
187
|
+
SELECT tenant_id INTO thread_tenant
|
|
188
|
+
FROM public.threads
|
|
189
|
+
WHERE id = NEW.thread_id;
|
|
190
|
+
|
|
191
|
+
IF thread_tenant IS NOT NULL AND thread_tenant != NEW.tenant_id THEN
|
|
192
|
+
RAISE EXCEPTION 'knowledge graph ingest run tenant mismatch for thread %', NEW.thread_id;
|
|
193
|
+
END IF;
|
|
194
|
+
END IF;
|
|
195
|
+
|
|
196
|
+
RETURN NEW;
|
|
197
|
+
END;
|
|
198
|
+
$$;
|
|
199
|
+
|
|
200
|
+
CREATE OR REPLACE FUNCTION public.enforce_knowledge_graph_entity_scope()
|
|
201
|
+
RETURNS trigger
|
|
202
|
+
LANGUAGE plpgsql
|
|
203
|
+
AS $$
|
|
204
|
+
DECLARE
|
|
205
|
+
run_tenant uuid;
|
|
206
|
+
run_thread uuid;
|
|
207
|
+
run_source_kind text;
|
|
208
|
+
run_source_ref text;
|
|
209
|
+
ontology_tenant uuid;
|
|
210
|
+
BEGIN
|
|
211
|
+
SELECT tenant_id, thread_id, source_kind, source_ref
|
|
212
|
+
INTO run_tenant, run_thread, run_source_kind, run_source_ref
|
|
213
|
+
FROM public.knowledge_graph_ingest_runs
|
|
214
|
+
WHERE id = NEW.ingest_run_id;
|
|
215
|
+
|
|
216
|
+
IF run_tenant IS NOT NULL
|
|
217
|
+
AND (
|
|
218
|
+
run_tenant != NEW.tenant_id
|
|
219
|
+
OR run_thread IS DISTINCT FROM NEW.thread_id
|
|
220
|
+
OR run_source_kind != NEW.source_kind
|
|
221
|
+
OR run_source_ref != NEW.source_ref
|
|
222
|
+
) THEN
|
|
223
|
+
RAISE EXCEPTION 'knowledge graph entity run scope mismatch for run %', NEW.ingest_run_id;
|
|
224
|
+
END IF;
|
|
225
|
+
|
|
226
|
+
IF NEW.ontology_entity_type_id IS NOT NULL THEN
|
|
227
|
+
SELECT tenant_id INTO ontology_tenant
|
|
228
|
+
FROM ontology.entity_types
|
|
229
|
+
WHERE id = NEW.ontology_entity_type_id;
|
|
230
|
+
|
|
231
|
+
IF ontology_tenant IS NOT NULL AND ontology_tenant != NEW.tenant_id THEN
|
|
232
|
+
RAISE EXCEPTION 'knowledge graph entity ontology tenant mismatch for entity type %', NEW.ontology_entity_type_id;
|
|
233
|
+
END IF;
|
|
234
|
+
END IF;
|
|
235
|
+
|
|
236
|
+
RETURN NEW;
|
|
237
|
+
END;
|
|
238
|
+
$$;
|
|
239
|
+
|
|
240
|
+
CREATE OR REPLACE FUNCTION public.enforce_knowledge_graph_relationship_scope()
|
|
241
|
+
RETURNS trigger
|
|
242
|
+
LANGUAGE plpgsql
|
|
243
|
+
AS $$
|
|
244
|
+
DECLARE
|
|
245
|
+
run_tenant uuid;
|
|
246
|
+
run_thread uuid;
|
|
247
|
+
run_source_kind text;
|
|
248
|
+
run_source_ref text;
|
|
249
|
+
source_tenant uuid;
|
|
250
|
+
source_thread uuid;
|
|
251
|
+
source_run uuid;
|
|
252
|
+
source_kind text;
|
|
253
|
+
source_ref text;
|
|
254
|
+
target_tenant uuid;
|
|
255
|
+
target_thread uuid;
|
|
256
|
+
target_run uuid;
|
|
257
|
+
target_kind text;
|
|
258
|
+
target_ref text;
|
|
259
|
+
ontology_tenant uuid;
|
|
260
|
+
BEGIN
|
|
261
|
+
SELECT tenant_id, thread_id, source_kind, source_ref
|
|
262
|
+
INTO run_tenant, run_thread, run_source_kind, run_source_ref
|
|
263
|
+
FROM public.knowledge_graph_ingest_runs
|
|
264
|
+
WHERE id = NEW.ingest_run_id;
|
|
265
|
+
|
|
266
|
+
IF run_tenant IS NOT NULL
|
|
267
|
+
AND (
|
|
268
|
+
run_tenant != NEW.tenant_id
|
|
269
|
+
OR run_thread IS DISTINCT FROM NEW.thread_id
|
|
270
|
+
OR run_source_kind != NEW.source_kind
|
|
271
|
+
OR run_source_ref != NEW.source_ref
|
|
272
|
+
) THEN
|
|
273
|
+
RAISE EXCEPTION 'knowledge graph relationship run scope mismatch for run %', NEW.ingest_run_id;
|
|
274
|
+
END IF;
|
|
275
|
+
|
|
276
|
+
SELECT tenant_id, thread_id, ingest_run_id, source_kind, source_ref
|
|
277
|
+
INTO source_tenant, source_thread, source_run, source_kind, source_ref
|
|
278
|
+
FROM public.knowledge_graph_entities
|
|
279
|
+
WHERE id = NEW.source_entity_id;
|
|
280
|
+
|
|
281
|
+
SELECT tenant_id, thread_id, ingest_run_id, source_kind, source_ref
|
|
282
|
+
INTO target_tenant, target_thread, target_run, target_kind, target_ref
|
|
283
|
+
FROM public.knowledge_graph_entities
|
|
284
|
+
WHERE id = NEW.target_entity_id;
|
|
285
|
+
|
|
286
|
+
IF source_tenant IS NOT NULL
|
|
287
|
+
AND (
|
|
288
|
+
source_tenant != NEW.tenant_id
|
|
289
|
+
OR source_thread IS DISTINCT FROM NEW.thread_id
|
|
290
|
+
OR source_run != NEW.ingest_run_id
|
|
291
|
+
OR source_kind != NEW.source_kind
|
|
292
|
+
OR source_ref != NEW.source_ref
|
|
293
|
+
) THEN
|
|
294
|
+
RAISE EXCEPTION 'knowledge graph relationship source scope mismatch for entity %', NEW.source_entity_id;
|
|
295
|
+
END IF;
|
|
296
|
+
|
|
297
|
+
IF target_tenant IS NOT NULL
|
|
298
|
+
AND (
|
|
299
|
+
target_tenant != NEW.tenant_id
|
|
300
|
+
OR target_thread IS DISTINCT FROM NEW.thread_id
|
|
301
|
+
OR target_run != NEW.ingest_run_id
|
|
302
|
+
OR target_kind != NEW.source_kind
|
|
303
|
+
OR target_ref != NEW.source_ref
|
|
304
|
+
) THEN
|
|
305
|
+
RAISE EXCEPTION 'knowledge graph relationship target scope mismatch for entity %', NEW.target_entity_id;
|
|
306
|
+
END IF;
|
|
307
|
+
|
|
308
|
+
IF NEW.ontology_relationship_type_id IS NOT NULL THEN
|
|
309
|
+
SELECT tenant_id INTO ontology_tenant
|
|
310
|
+
FROM ontology.relationship_types
|
|
311
|
+
WHERE id = NEW.ontology_relationship_type_id;
|
|
312
|
+
|
|
313
|
+
IF ontology_tenant IS NOT NULL AND ontology_tenant != NEW.tenant_id THEN
|
|
314
|
+
RAISE EXCEPTION 'knowledge graph relationship ontology tenant mismatch for relationship type %', NEW.ontology_relationship_type_id;
|
|
315
|
+
END IF;
|
|
316
|
+
END IF;
|
|
317
|
+
|
|
318
|
+
RETURN NEW;
|
|
319
|
+
END;
|
|
320
|
+
$$;
|
|
321
|
+
|
|
322
|
+
CREATE OR REPLACE FUNCTION public.enforce_knowledge_graph_evidence_scope()
|
|
323
|
+
RETURNS trigger
|
|
324
|
+
LANGUAGE plpgsql
|
|
325
|
+
AS $$
|
|
326
|
+
DECLARE
|
|
327
|
+
run_tenant uuid;
|
|
328
|
+
run_thread uuid;
|
|
329
|
+
run_source_kind text;
|
|
330
|
+
run_source_ref text;
|
|
331
|
+
entity_tenant uuid;
|
|
332
|
+
entity_thread uuid;
|
|
333
|
+
entity_run uuid;
|
|
334
|
+
entity_kind text;
|
|
335
|
+
entity_ref text;
|
|
336
|
+
relationship_tenant uuid;
|
|
337
|
+
relationship_thread uuid;
|
|
338
|
+
relationship_run uuid;
|
|
339
|
+
relationship_kind text;
|
|
340
|
+
relationship_ref text;
|
|
341
|
+
message_tenant uuid;
|
|
342
|
+
message_thread uuid;
|
|
343
|
+
BEGIN
|
|
344
|
+
SELECT tenant_id, thread_id, source_kind, source_ref
|
|
345
|
+
INTO run_tenant, run_thread, run_source_kind, run_source_ref
|
|
346
|
+
FROM public.knowledge_graph_ingest_runs
|
|
347
|
+
WHERE id = NEW.ingest_run_id;
|
|
348
|
+
|
|
349
|
+
IF run_tenant IS NOT NULL
|
|
350
|
+
AND (
|
|
351
|
+
run_tenant != NEW.tenant_id
|
|
352
|
+
OR run_thread IS DISTINCT FROM NEW.thread_id
|
|
353
|
+
OR run_source_kind != NEW.source_kind
|
|
354
|
+
OR run_source_ref != NEW.source_ref
|
|
355
|
+
) THEN
|
|
356
|
+
RAISE EXCEPTION 'knowledge graph evidence run scope mismatch for run %', NEW.ingest_run_id;
|
|
357
|
+
END IF;
|
|
358
|
+
|
|
359
|
+
IF NEW.entity_id IS NOT NULL THEN
|
|
360
|
+
SELECT tenant_id, thread_id, ingest_run_id, source_kind, source_ref
|
|
361
|
+
INTO entity_tenant, entity_thread, entity_run, entity_kind, entity_ref
|
|
362
|
+
FROM public.knowledge_graph_entities
|
|
363
|
+
WHERE id = NEW.entity_id;
|
|
364
|
+
|
|
365
|
+
IF entity_tenant IS NOT NULL
|
|
366
|
+
AND (
|
|
367
|
+
entity_tenant != NEW.tenant_id
|
|
368
|
+
OR entity_thread IS DISTINCT FROM NEW.thread_id
|
|
369
|
+
OR entity_run != NEW.ingest_run_id
|
|
370
|
+
OR entity_kind != NEW.source_kind
|
|
371
|
+
OR entity_ref != NEW.source_ref
|
|
372
|
+
) THEN
|
|
373
|
+
RAISE EXCEPTION 'knowledge graph evidence entity scope mismatch for entity %', NEW.entity_id;
|
|
374
|
+
END IF;
|
|
375
|
+
END IF;
|
|
376
|
+
|
|
377
|
+
IF NEW.relationship_id IS NOT NULL THEN
|
|
378
|
+
SELECT tenant_id, thread_id, ingest_run_id, source_kind, source_ref
|
|
379
|
+
INTO relationship_tenant, relationship_thread, relationship_run, relationship_kind, relationship_ref
|
|
380
|
+
FROM public.knowledge_graph_relationships
|
|
381
|
+
WHERE id = NEW.relationship_id;
|
|
382
|
+
|
|
383
|
+
IF relationship_tenant IS NOT NULL
|
|
384
|
+
AND (
|
|
385
|
+
relationship_tenant != NEW.tenant_id
|
|
386
|
+
OR relationship_thread IS DISTINCT FROM NEW.thread_id
|
|
387
|
+
OR relationship_run != NEW.ingest_run_id
|
|
388
|
+
OR relationship_kind != NEW.source_kind
|
|
389
|
+
OR relationship_ref != NEW.source_ref
|
|
390
|
+
) THEN
|
|
391
|
+
RAISE EXCEPTION 'knowledge graph evidence relationship scope mismatch for relationship %', NEW.relationship_id;
|
|
392
|
+
END IF;
|
|
393
|
+
END IF;
|
|
394
|
+
|
|
395
|
+
IF NEW.message_id IS NOT NULL THEN
|
|
396
|
+
SELECT tenant_id, thread_id INTO message_tenant, message_thread
|
|
397
|
+
FROM public.messages
|
|
398
|
+
WHERE id = NEW.message_id;
|
|
399
|
+
|
|
400
|
+
IF message_tenant IS NOT NULL
|
|
401
|
+
AND (
|
|
402
|
+
message_tenant != NEW.tenant_id
|
|
403
|
+
OR message_thread IS DISTINCT FROM NEW.thread_id
|
|
404
|
+
) THEN
|
|
405
|
+
RAISE EXCEPTION 'knowledge graph evidence message scope mismatch for message %', NEW.message_id;
|
|
406
|
+
END IF;
|
|
407
|
+
END IF;
|
|
408
|
+
|
|
409
|
+
RETURN NEW;
|
|
410
|
+
END;
|
|
411
|
+
$$;
|
|
412
|
+
|
|
413
|
+
COMMIT;
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
-- Purpose: qualify Knowledge Graph source-scope trigger queries after source-declared fallback inserts relationships.
|
|
2
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0147_knowledge_graph_scope_trigger_qualification.sql
|
|
3
|
+
-- creates-function: public.enforce_knowledge_graph_relationship_scope
|
|
4
|
+
-- creates-function: public.enforce_knowledge_graph_evidence_scope
|
|
5
|
+
|
|
6
|
+
\set ON_ERROR_STOP on
|
|
7
|
+
|
|
8
|
+
BEGIN;
|
|
9
|
+
|
|
10
|
+
CREATE OR REPLACE FUNCTION public.enforce_knowledge_graph_relationship_scope()
|
|
11
|
+
RETURNS trigger
|
|
12
|
+
LANGUAGE plpgsql
|
|
13
|
+
AS $$
|
|
14
|
+
DECLARE
|
|
15
|
+
run_tenant uuid;
|
|
16
|
+
run_thread uuid;
|
|
17
|
+
run_source_kind text;
|
|
18
|
+
run_source_ref text;
|
|
19
|
+
source_tenant uuid;
|
|
20
|
+
source_thread uuid;
|
|
21
|
+
source_run uuid;
|
|
22
|
+
source_entity_kind text;
|
|
23
|
+
source_entity_ref text;
|
|
24
|
+
target_tenant uuid;
|
|
25
|
+
target_thread uuid;
|
|
26
|
+
target_run uuid;
|
|
27
|
+
target_kind text;
|
|
28
|
+
target_ref text;
|
|
29
|
+
ontology_tenant uuid;
|
|
30
|
+
BEGIN
|
|
31
|
+
SELECT
|
|
32
|
+
r.tenant_id,
|
|
33
|
+
r.thread_id,
|
|
34
|
+
r.source_kind,
|
|
35
|
+
r.source_ref
|
|
36
|
+
INTO run_tenant, run_thread, run_source_kind, run_source_ref
|
|
37
|
+
FROM public.knowledge_graph_ingest_runs AS r
|
|
38
|
+
WHERE r.id = NEW.ingest_run_id;
|
|
39
|
+
|
|
40
|
+
IF run_tenant IS NOT NULL
|
|
41
|
+
AND (
|
|
42
|
+
run_tenant != NEW.tenant_id
|
|
43
|
+
OR run_thread IS DISTINCT FROM NEW.thread_id
|
|
44
|
+
OR run_source_kind != NEW.source_kind
|
|
45
|
+
OR run_source_ref != NEW.source_ref
|
|
46
|
+
) THEN
|
|
47
|
+
RAISE EXCEPTION 'knowledge graph relationship run scope mismatch for run %', NEW.ingest_run_id;
|
|
48
|
+
END IF;
|
|
49
|
+
|
|
50
|
+
SELECT
|
|
51
|
+
e.tenant_id,
|
|
52
|
+
e.thread_id,
|
|
53
|
+
e.ingest_run_id,
|
|
54
|
+
e.source_kind,
|
|
55
|
+
e.source_ref
|
|
56
|
+
INTO source_tenant, source_thread, source_run, source_entity_kind, source_entity_ref
|
|
57
|
+
FROM public.knowledge_graph_entities AS e
|
|
58
|
+
WHERE e.id = NEW.source_entity_id;
|
|
59
|
+
|
|
60
|
+
SELECT
|
|
61
|
+
e.tenant_id,
|
|
62
|
+
e.thread_id,
|
|
63
|
+
e.ingest_run_id,
|
|
64
|
+
e.source_kind,
|
|
65
|
+
e.source_ref
|
|
66
|
+
INTO target_tenant, target_thread, target_run, target_kind, target_ref
|
|
67
|
+
FROM public.knowledge_graph_entities AS e
|
|
68
|
+
WHERE e.id = NEW.target_entity_id;
|
|
69
|
+
|
|
70
|
+
IF source_tenant IS NOT NULL
|
|
71
|
+
AND (
|
|
72
|
+
source_tenant != NEW.tenant_id
|
|
73
|
+
OR source_thread IS DISTINCT FROM NEW.thread_id
|
|
74
|
+
OR source_run != NEW.ingest_run_id
|
|
75
|
+
OR source_entity_kind != NEW.source_kind
|
|
76
|
+
OR source_entity_ref != NEW.source_ref
|
|
77
|
+
) THEN
|
|
78
|
+
RAISE EXCEPTION 'knowledge graph relationship source scope mismatch for entity %', NEW.source_entity_id;
|
|
79
|
+
END IF;
|
|
80
|
+
|
|
81
|
+
IF target_tenant IS NOT NULL
|
|
82
|
+
AND (
|
|
83
|
+
target_tenant != NEW.tenant_id
|
|
84
|
+
OR target_thread IS DISTINCT FROM NEW.thread_id
|
|
85
|
+
OR target_run != NEW.ingest_run_id
|
|
86
|
+
OR target_kind != NEW.source_kind
|
|
87
|
+
OR target_ref != NEW.source_ref
|
|
88
|
+
) THEN
|
|
89
|
+
RAISE EXCEPTION 'knowledge graph relationship target scope mismatch for entity %', NEW.target_entity_id;
|
|
90
|
+
END IF;
|
|
91
|
+
|
|
92
|
+
IF NEW.ontology_relationship_type_id IS NOT NULL THEN
|
|
93
|
+
SELECT rt.tenant_id INTO ontology_tenant
|
|
94
|
+
FROM ontology.relationship_types AS rt
|
|
95
|
+
WHERE rt.id = NEW.ontology_relationship_type_id;
|
|
96
|
+
|
|
97
|
+
IF ontology_tenant IS NOT NULL AND ontology_tenant != NEW.tenant_id THEN
|
|
98
|
+
RAISE EXCEPTION 'knowledge graph relationship ontology tenant mismatch for relationship type %', NEW.ontology_relationship_type_id;
|
|
99
|
+
END IF;
|
|
100
|
+
END IF;
|
|
101
|
+
|
|
102
|
+
RETURN NEW;
|
|
103
|
+
END;
|
|
104
|
+
$$;
|
|
105
|
+
|
|
106
|
+
CREATE OR REPLACE FUNCTION public.enforce_knowledge_graph_evidence_scope()
|
|
107
|
+
RETURNS trigger
|
|
108
|
+
LANGUAGE plpgsql
|
|
109
|
+
AS $$
|
|
110
|
+
DECLARE
|
|
111
|
+
run_tenant uuid;
|
|
112
|
+
run_thread uuid;
|
|
113
|
+
run_source_kind text;
|
|
114
|
+
run_source_ref text;
|
|
115
|
+
entity_tenant uuid;
|
|
116
|
+
entity_thread uuid;
|
|
117
|
+
entity_run uuid;
|
|
118
|
+
entity_kind text;
|
|
119
|
+
entity_ref text;
|
|
120
|
+
relationship_tenant uuid;
|
|
121
|
+
relationship_thread uuid;
|
|
122
|
+
relationship_run uuid;
|
|
123
|
+
relationship_kind text;
|
|
124
|
+
relationship_ref text;
|
|
125
|
+
message_tenant uuid;
|
|
126
|
+
message_thread uuid;
|
|
127
|
+
BEGIN
|
|
128
|
+
SELECT
|
|
129
|
+
r.tenant_id,
|
|
130
|
+
r.thread_id,
|
|
131
|
+
r.source_kind,
|
|
132
|
+
r.source_ref
|
|
133
|
+
INTO run_tenant, run_thread, run_source_kind, run_source_ref
|
|
134
|
+
FROM public.knowledge_graph_ingest_runs AS r
|
|
135
|
+
WHERE r.id = NEW.ingest_run_id;
|
|
136
|
+
|
|
137
|
+
IF run_tenant IS NOT NULL
|
|
138
|
+
AND (
|
|
139
|
+
run_tenant != NEW.tenant_id
|
|
140
|
+
OR run_thread IS DISTINCT FROM NEW.thread_id
|
|
141
|
+
OR run_source_kind != NEW.source_kind
|
|
142
|
+
OR run_source_ref != NEW.source_ref
|
|
143
|
+
) THEN
|
|
144
|
+
RAISE EXCEPTION 'knowledge graph evidence run scope mismatch for run %', NEW.ingest_run_id;
|
|
145
|
+
END IF;
|
|
146
|
+
|
|
147
|
+
IF NEW.entity_id IS NOT NULL THEN
|
|
148
|
+
SELECT
|
|
149
|
+
e.tenant_id,
|
|
150
|
+
e.thread_id,
|
|
151
|
+
e.ingest_run_id,
|
|
152
|
+
e.source_kind,
|
|
153
|
+
e.source_ref
|
|
154
|
+
INTO entity_tenant, entity_thread, entity_run, entity_kind, entity_ref
|
|
155
|
+
FROM public.knowledge_graph_entities AS e
|
|
156
|
+
WHERE e.id = NEW.entity_id;
|
|
157
|
+
|
|
158
|
+
IF entity_tenant IS NOT NULL
|
|
159
|
+
AND (
|
|
160
|
+
entity_tenant != NEW.tenant_id
|
|
161
|
+
OR entity_thread IS DISTINCT FROM NEW.thread_id
|
|
162
|
+
OR entity_run != NEW.ingest_run_id
|
|
163
|
+
OR entity_kind != NEW.source_kind
|
|
164
|
+
OR entity_ref != NEW.source_ref
|
|
165
|
+
) THEN
|
|
166
|
+
RAISE EXCEPTION 'knowledge graph evidence entity scope mismatch for entity %', NEW.entity_id;
|
|
167
|
+
END IF;
|
|
168
|
+
END IF;
|
|
169
|
+
|
|
170
|
+
IF NEW.relationship_id IS NOT NULL THEN
|
|
171
|
+
SELECT
|
|
172
|
+
r.tenant_id,
|
|
173
|
+
r.thread_id,
|
|
174
|
+
r.ingest_run_id,
|
|
175
|
+
r.source_kind,
|
|
176
|
+
r.source_ref
|
|
177
|
+
INTO relationship_tenant, relationship_thread, relationship_run, relationship_kind, relationship_ref
|
|
178
|
+
FROM public.knowledge_graph_relationships AS r
|
|
179
|
+
WHERE r.id = NEW.relationship_id;
|
|
180
|
+
|
|
181
|
+
IF relationship_tenant IS NOT NULL
|
|
182
|
+
AND (
|
|
183
|
+
relationship_tenant != NEW.tenant_id
|
|
184
|
+
OR relationship_thread IS DISTINCT FROM NEW.thread_id
|
|
185
|
+
OR relationship_run != NEW.ingest_run_id
|
|
186
|
+
OR relationship_kind != NEW.source_kind
|
|
187
|
+
OR relationship_ref != NEW.source_ref
|
|
188
|
+
) THEN
|
|
189
|
+
RAISE EXCEPTION 'knowledge graph evidence relationship scope mismatch for relationship %', NEW.relationship_id;
|
|
190
|
+
END IF;
|
|
191
|
+
END IF;
|
|
192
|
+
|
|
193
|
+
IF NEW.message_id IS NOT NULL THEN
|
|
194
|
+
SELECT m.tenant_id, m.thread_id INTO message_tenant, message_thread
|
|
195
|
+
FROM public.messages AS m
|
|
196
|
+
WHERE m.id = NEW.message_id;
|
|
197
|
+
|
|
198
|
+
IF message_tenant IS NOT NULL
|
|
199
|
+
AND (
|
|
200
|
+
message_tenant != NEW.tenant_id
|
|
201
|
+
OR message_thread IS DISTINCT FROM NEW.thread_id
|
|
202
|
+
) THEN
|
|
203
|
+
RAISE EXCEPTION 'knowledge graph evidence message scope mismatch for message %', NEW.message_id;
|
|
204
|
+
END IF;
|
|
205
|
+
END IF;
|
|
206
|
+
|
|
207
|
+
RETURN NEW;
|
|
208
|
+
END;
|
|
209
|
+
$$;
|
|
210
|
+
|
|
211
|
+
COMMIT;
|