thinkwork-cli 0.12.12 → 0.12.15
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-4VT3FWOH.js} +1 -1
- package/dist/{chunk-JEHV35EU.js → chunk-H7AB42ES.js} +340 -30
- package/dist/cli.js +22123 -9219
- 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/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 +453 -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 +1 -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,46 @@
|
|
|
1
|
+
-- Purpose: honest eval aggregation (Evaluations Trust Core U2) — errors leave
|
|
2
|
+
-- the pass rate. eval_runs gains an `errored` counter plus the
|
|
3
|
+
-- scoring-semantics stamps, eval_results gains an error cause subtag.
|
|
4
|
+
-- Plan: docs/plans/2026-06-12-003-feat-evaluations-trust-core-plan.md (U2)
|
|
5
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0159_eval_scoring_version.sql
|
|
6
|
+
--
|
|
7
|
+
-- Hand-rolled (NOT registered in meta/_journal.json — the journal snapshot
|
|
8
|
+
-- stopped at 0020; repo convention is psql-applied files gated by the
|
|
9
|
+
-- db:migrate-manual drift reporter).
|
|
10
|
+
--
|
|
11
|
+
-- All columns are additive and nullable with NO defaults — null is
|
|
12
|
+
-- semantically load-bearing:
|
|
13
|
+
-- * eval_runs.scoring_version NULL => legacy run (~v1 semantics: errors
|
|
14
|
+
-- fold into `failed`); never recomputed under new semantics.
|
|
15
|
+
-- * eval_runs.errored NULL => counter not produced (legacy runs).
|
|
16
|
+
-- * eval_runs.summary_scoring_version NULL => summary written by
|
|
17
|
+
-- pre-stamp code; read path/reconciler recompute when it diverges from
|
|
18
|
+
-- the run's stamped scoring_version.
|
|
19
|
+
-- * eval_results.error_cause: 'timeout' | 'throttle' | 'evaluator_error'
|
|
20
|
+
-- | 'reconciler' | 'infra_other' (enum-by-comment; NULL on pass/fail
|
|
21
|
+
-- rows and on pre-migration error rows).
|
|
22
|
+
--
|
|
23
|
+
-- creates-column: public.eval_runs.errored
|
|
24
|
+
-- creates-column: public.eval_runs.scoring_version
|
|
25
|
+
-- creates-column: public.eval_runs.summary_scoring_version
|
|
26
|
+
-- creates-column: public.eval_results.error_cause
|
|
27
|
+
|
|
28
|
+
\set ON_ERROR_STOP on
|
|
29
|
+
|
|
30
|
+
BEGIN;
|
|
31
|
+
|
|
32
|
+
SET LOCAL lock_timeout = '5s';
|
|
33
|
+
|
|
34
|
+
ALTER TABLE public.eval_runs
|
|
35
|
+
ADD COLUMN IF NOT EXISTS errored integer;
|
|
36
|
+
|
|
37
|
+
ALTER TABLE public.eval_runs
|
|
38
|
+
ADD COLUMN IF NOT EXISTS scoring_version integer;
|
|
39
|
+
|
|
40
|
+
ALTER TABLE public.eval_runs
|
|
41
|
+
ADD COLUMN IF NOT EXISTS summary_scoring_version integer;
|
|
42
|
+
|
|
43
|
+
ALTER TABLE public.eval_results
|
|
44
|
+
ADD COLUMN IF NOT EXISTS error_cause text;
|
|
45
|
+
|
|
46
|
+
COMMIT;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
-- Hand-rolled — apply manually to dev via:
|
|
2
|
+
-- psql "$DATABASE_URL" -f packages/database-pg/drizzle/0160_compliance_event_types_plugins.sql
|
|
3
|
+
--
|
|
4
|
+
-- See docs/solutions/workflow-issues/manually-applied-drizzle-migrations-drift-from-dev-2026-04-21.md
|
|
5
|
+
--
|
|
6
|
+
-- U5 of docs/plans/2026-06-12-001-feat-application-plugins-plan.md.
|
|
7
|
+
-- Extends the event_type prefix CHECK constraints on compliance.audit_outbox
|
|
8
|
+
-- and compliance.audit_events to recognize the plugin.* event-type family —
|
|
9
|
+
-- so plugin.installed and plugin.uninstalled (and the U6 activation events
|
|
10
|
+
-- plugin.activation_granted / plugin.activation_revoked) can be inserted.
|
|
11
|
+
--
|
|
12
|
+
-- The new constraints are renamed *_v3 so the drift reporter at
|
|
13
|
+
-- scripts/db-migrate-manual.sh can verify application (probing by name).
|
|
14
|
+
-- The old *_v2 constraints are DROPped in the same transaction.
|
|
15
|
+
--
|
|
16
|
+
-- creates-constraint: compliance.audit_outbox.audit_outbox_event_type_prefix_v3
|
|
17
|
+
-- creates-constraint: compliance.audit_events.audit_events_event_type_prefix_v3
|
|
18
|
+
|
|
19
|
+
BEGIN;
|
|
20
|
+
|
|
21
|
+
ALTER TABLE compliance.audit_outbox
|
|
22
|
+
DROP CONSTRAINT IF EXISTS audit_outbox_event_type_prefix_v2;
|
|
23
|
+
|
|
24
|
+
ALTER TABLE compliance.audit_outbox
|
|
25
|
+
ADD CONSTRAINT audit_outbox_event_type_prefix_v3 CHECK (
|
|
26
|
+
event_type ~ '^(auth|user|agent|mcp|workspace|data|policy|approval|attachment|skill|output|plugin)\.'
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
ALTER TABLE compliance.audit_events
|
|
30
|
+
DROP CONSTRAINT IF EXISTS audit_events_event_type_prefix_v2;
|
|
31
|
+
|
|
32
|
+
ALTER TABLE compliance.audit_events
|
|
33
|
+
ADD CONSTRAINT audit_events_event_type_prefix_v3 CHECK (
|
|
34
|
+
event_type ~ '^(auth|user|agent|mcp|workspace|data|policy|approval|attachment|skill|output|plugin)\.'
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
COMMIT;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
-- Purpose: dataset substrate for Evaluations Trust Core U4 — versioned
|
|
2
|
+
-- per-tenant eval datasets live in S3 (tenants/<slug>/eval-datasets/);
|
|
3
|
+
-- eval_datasets is the derived write-through index and
|
|
4
|
+
-- eval_test_cases gains the (dataset_id, dataset_case_id) linkage
|
|
5
|
+
-- the runner will fan out from in U6. Lands inert: nothing consumes
|
|
6
|
+
-- the new columns yet.
|
|
7
|
+
-- Plan: docs/plans/2026-06-12-003-feat-evaluations-trust-core-plan.md (U4)
|
|
8
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0160_eval_datasets.sql
|
|
9
|
+
--
|
|
10
|
+
-- Hand-rolled (NOT registered in meta/_journal.json — the journal snapshot
|
|
11
|
+
-- stopped at 0020; repo convention is psql-applied files gated by the
|
|
12
|
+
-- db:migrate-manual drift reporter).
|
|
13
|
+
--
|
|
14
|
+
-- Semantics:
|
|
15
|
+
-- * eval_datasets is fully reconstructible from S3 (manifest_sha is the
|
|
16
|
+
-- drift detector); rows soft-archive via archived_at — never hard
|
|
17
|
+
-- delete while eval_test_cases / eval_results history references them.
|
|
18
|
+
-- * eval_test_cases.dataset_id is ON DELETE NO ACTION by design: case
|
|
19
|
+
-- removal is a manifest tombstone + enabled=false, never a row delete
|
|
20
|
+
-- (eval_results FK the case rows for trend history).
|
|
21
|
+
-- * uq_eval_test_cases_dataset_case is partial (WHERE dataset_id IS NOT
|
|
22
|
+
-- NULL) so legacy rows with null linkage are unconstrained.
|
|
23
|
+
--
|
|
24
|
+
-- creates: public.eval_datasets
|
|
25
|
+
-- creates: public.uq_eval_datasets_tenant_slug
|
|
26
|
+
-- creates: public.idx_eval_datasets_tenant_created
|
|
27
|
+
-- creates-constraint: public.eval_datasets.eval_datasets_tenant_id_tenants_id_fk
|
|
28
|
+
-- creates-column: public.eval_test_cases.dataset_id
|
|
29
|
+
-- creates-column: public.eval_test_cases.dataset_case_id
|
|
30
|
+
-- creates-constraint: public.eval_test_cases.eval_test_cases_dataset_id_eval_datasets_id_fk
|
|
31
|
+
-- creates: public.uq_eval_test_cases_dataset_case
|
|
32
|
+
|
|
33
|
+
\set ON_ERROR_STOP on
|
|
34
|
+
|
|
35
|
+
BEGIN;
|
|
36
|
+
|
|
37
|
+
SET LOCAL lock_timeout = '5s';
|
|
38
|
+
|
|
39
|
+
CREATE TABLE IF NOT EXISTS public.eval_datasets (
|
|
40
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
41
|
+
tenant_id uuid NOT NULL,
|
|
42
|
+
slug text NOT NULL,
|
|
43
|
+
name text,
|
|
44
|
+
kind text NOT NULL DEFAULT 'custom',
|
|
45
|
+
version integer NOT NULL DEFAULT 1,
|
|
46
|
+
manifest_sha text,
|
|
47
|
+
archived_at timestamptz,
|
|
48
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
49
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
50
|
+
CONSTRAINT eval_datasets_tenant_id_tenants_id_fk
|
|
51
|
+
FOREIGN KEY (tenant_id)
|
|
52
|
+
REFERENCES public.tenants(id)
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_eval_datasets_tenant_slug
|
|
56
|
+
ON public.eval_datasets (tenant_id, slug);
|
|
57
|
+
|
|
58
|
+
CREATE INDEX IF NOT EXISTS idx_eval_datasets_tenant_created
|
|
59
|
+
ON public.eval_datasets (tenant_id, created_at);
|
|
60
|
+
|
|
61
|
+
ALTER TABLE public.eval_test_cases
|
|
62
|
+
ADD COLUMN IF NOT EXISTS dataset_id uuid
|
|
63
|
+
CONSTRAINT eval_test_cases_dataset_id_eval_datasets_id_fk
|
|
64
|
+
REFERENCES public.eval_datasets(id);
|
|
65
|
+
|
|
66
|
+
ALTER TABLE public.eval_test_cases
|
|
67
|
+
ADD COLUMN IF NOT EXISTS dataset_case_id text;
|
|
68
|
+
|
|
69
|
+
-- Case identity within a dataset is unique; partial so pre-dataset rows
|
|
70
|
+
-- (null dataset_id) stay unconstrained.
|
|
71
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_eval_test_cases_dataset_case
|
|
72
|
+
ON public.eval_test_cases (dataset_id, dataset_case_id)
|
|
73
|
+
WHERE dataset_id IS NOT NULL;
|
|
74
|
+
|
|
75
|
+
COMMIT;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
-- Purpose: eval results link to the thread turn whose stored workspace
|
|
2
|
+
-- projection snapshot the test case asserted against (dynamic workspace
|
|
3
|
+
-- U10, origin R17/AE5). Direct AgentCore eval sessions use synthetic
|
|
4
|
+
-- session IDs that never join to thread_turns, so the linkage is an
|
|
5
|
+
-- explicit nullable FK column. ON DELETE SET NULL: deleting a turn keeps
|
|
6
|
+
-- the eval result row (assertion outcomes are snapshotted in
|
|
7
|
+
-- eval_results.assertions) but drops the projection convenience read.
|
|
8
|
+
-- Plan: docs/plans/2026-06-12-002-feat-dynamic-workspace-plan.md U10
|
|
9
|
+
-- Apply manually (no CI migration runner):
|
|
10
|
+
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0160_eval_results_thread_turn.sql
|
|
11
|
+
-- creates-column: public.eval_results.thread_turn_id
|
|
12
|
+
-- creates-constraint: public.eval_results.eval_results_thread_turn_id_thread_turns_id_fk
|
|
13
|
+
|
|
14
|
+
\set ON_ERROR_STOP on
|
|
15
|
+
|
|
16
|
+
SET lock_timeout = '5s';
|
|
17
|
+
SET statement_timeout = '15min';
|
|
18
|
+
|
|
19
|
+
SELECT pg_advisory_lock(hashtext('migration:0160_eval_results_thread_turn'));
|
|
20
|
+
|
|
21
|
+
ALTER TABLE public.eval_results
|
|
22
|
+
ADD COLUMN IF NOT EXISTS thread_turn_id uuid;
|
|
23
|
+
|
|
24
|
+
DO $$
|
|
25
|
+
BEGIN
|
|
26
|
+
ALTER TABLE public.eval_results
|
|
27
|
+
ADD CONSTRAINT eval_results_thread_turn_id_thread_turns_id_fk
|
|
28
|
+
FOREIGN KEY (thread_turn_id)
|
|
29
|
+
REFERENCES public.thread_turns(id)
|
|
30
|
+
ON DELETE SET NULL;
|
|
31
|
+
EXCEPTION
|
|
32
|
+
WHEN duplicate_object THEN NULL;
|
|
33
|
+
END $$;
|
|
34
|
+
|
|
35
|
+
SELECT pg_advisory_unlock(hashtext('migration:0160_eval_results_thread_turn'));
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
-- Purpose: run scope pinning (Evaluations Trust Core U6) — runs execute
|
|
2
|
+
-- exactly the dataset version they were launched with. eval_runs
|
|
3
|
+
-- gains the dataset linkage (dataset_id), the manifest version
|
|
4
|
+
-- pinned at launch (dataset_version), and the resolved
|
|
5
|
+
-- dataset_case_id scope (pinned_case_ids). Case CONTENT is not
|
|
6
|
+
-- stored in the DB: launch copies each enabled case file to the
|
|
7
|
+
-- run snapshot prefix tenants/<slug>/eval-datasets/.runs/<run-id>/
|
|
8
|
+
-- in S3 (inside the guarded eval-datasets prefix, so the Pi-role
|
|
9
|
+
-- IAM Deny and tenant teardown cover it by construction).
|
|
10
|
+
-- Plan: docs/plans/2026-06-12-003-feat-evaluations-trust-core-plan.md (U6)
|
|
11
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0161_eval_run_pinning.sql
|
|
12
|
+
--
|
|
13
|
+
-- Hand-rolled (NOT registered in meta/_journal.json — the journal snapshot
|
|
14
|
+
-- stopped at 0020; repo convention is psql-applied files gated by the
|
|
15
|
+
-- db:migrate-manual drift reporter). Requires 0160_eval_datasets.sql
|
|
16
|
+
-- (the eval_datasets table this FK points at).
|
|
17
|
+
--
|
|
18
|
+
-- All columns are additive and nullable with NO defaults — null is
|
|
19
|
+
-- semantically load-bearing:
|
|
20
|
+
-- * eval_runs.dataset_id NULL => legacy category/test-case launch
|
|
21
|
+
-- (the pre-U6 path keeps working unchanged).
|
|
22
|
+
-- * eval_runs.dataset_version NULL => scope not yet pinned (the
|
|
23
|
+
-- eval-runner stamps it when it captures the run snapshot, before
|
|
24
|
+
-- fan-out) or a legacy launch.
|
|
25
|
+
-- * eval_runs.pinned_case_ids NULL => same. Non-null = the launch-time
|
|
26
|
+
-- resolved dataset_case_ids; the reconciler reconstructs expected
|
|
27
|
+
-- scope from THIS list, never the live enabled=true table filter
|
|
28
|
+
-- (a case tombstoned mid-run must not wedge the run).
|
|
29
|
+
-- * eval_runs.dataset_id is ON DELETE NO ACTION by design: datasets
|
|
30
|
+
-- soft-archive (archived_at), never hard-delete while runs pin them.
|
|
31
|
+
--
|
|
32
|
+
-- creates-column: public.eval_runs.dataset_id
|
|
33
|
+
-- creates-column: public.eval_runs.dataset_version
|
|
34
|
+
-- creates-column: public.eval_runs.pinned_case_ids
|
|
35
|
+
-- creates-constraint: public.eval_runs.eval_runs_dataset_id_eval_datasets_id_fk
|
|
36
|
+
|
|
37
|
+
\set ON_ERROR_STOP on
|
|
38
|
+
|
|
39
|
+
BEGIN;
|
|
40
|
+
|
|
41
|
+
SET LOCAL lock_timeout = '5s';
|
|
42
|
+
|
|
43
|
+
ALTER TABLE public.eval_runs
|
|
44
|
+
ADD COLUMN IF NOT EXISTS dataset_id uuid
|
|
45
|
+
CONSTRAINT eval_runs_dataset_id_eval_datasets_id_fk
|
|
46
|
+
REFERENCES public.eval_datasets(id);
|
|
47
|
+
|
|
48
|
+
ALTER TABLE public.eval_runs
|
|
49
|
+
ADD COLUMN IF NOT EXISTS dataset_version integer;
|
|
50
|
+
|
|
51
|
+
ALTER TABLE public.eval_runs
|
|
52
|
+
ADD COLUMN IF NOT EXISTS pinned_case_ids text[];
|
|
53
|
+
|
|
54
|
+
COMMIT;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
-- Hand-rolled — apply manually to dev via:
|
|
2
|
+
-- psql "$DATABASE_URL" -f packages/database-pg/drizzle/0161_tenant_mcp_servers_plugin_source.sql
|
|
3
|
+
--
|
|
4
|
+
-- See docs/solutions/workflow-issues/manually-applied-drizzle-migrations-drift-from-dev-2026-04-21.md
|
|
5
|
+
--
|
|
6
|
+
-- U10 of docs/plans/2026-06-12-001-feat-application-plugins-plan.md.
|
|
7
|
+
-- Extends the tenant_mcp_servers management_source CHECK constraints
|
|
8
|
+
-- (created by 0149) to recognize the 'plugin' ownership source used by the
|
|
9
|
+
-- plugin engine's MCP component handler (0159 added plugin_install_id but
|
|
10
|
+
-- did not relax the checks):
|
|
11
|
+
--
|
|
12
|
+
-- - management_source may now be 'manual' | 'managed_application' | 'plugin'
|
|
13
|
+
-- - shape: plugin rows must carry plugin_install_id; managed_application
|
|
14
|
+
-- rows must carry managed_application_key; manual rows carry neither
|
|
15
|
+
-- ownership key. An ADOPTED Twenty row (U10 cutover) is
|
|
16
|
+
-- management_source='plugin' with plugin_install_id set and its
|
|
17
|
+
-- legacy managed_application_key retained — covered by the plugin arm,
|
|
18
|
+
-- which does not constrain managed_application_key.
|
|
19
|
+
--
|
|
20
|
+
-- The new constraints are renamed *_v2 so the drift reporter at
|
|
21
|
+
-- scripts/db-migrate-manual.sh can verify application (probing by name).
|
|
22
|
+
-- The old constraints are DROPped in the same transaction.
|
|
23
|
+
--
|
|
24
|
+
-- creates-constraint: public.tenant_mcp_servers.tenant_mcp_servers_management_source_check_v2
|
|
25
|
+
-- creates-constraint: public.tenant_mcp_servers.tenant_mcp_servers_managed_application_shape_check_v2
|
|
26
|
+
|
|
27
|
+
\set ON_ERROR_STOP on
|
|
28
|
+
|
|
29
|
+
SET lock_timeout = '5s';
|
|
30
|
+
SET statement_timeout = '15min';
|
|
31
|
+
|
|
32
|
+
BEGIN;
|
|
33
|
+
|
|
34
|
+
SELECT pg_advisory_xact_lock(hashtext('migration:0161_tenant_mcp_servers_plugin_source'));
|
|
35
|
+
|
|
36
|
+
ALTER TABLE public.tenant_mcp_servers
|
|
37
|
+
DROP CONSTRAINT IF EXISTS tenant_mcp_servers_management_source_check;
|
|
38
|
+
|
|
39
|
+
ALTER TABLE public.tenant_mcp_servers
|
|
40
|
+
DROP CONSTRAINT IF EXISTS tenant_mcp_servers_management_source_check_v2;
|
|
41
|
+
|
|
42
|
+
ALTER TABLE public.tenant_mcp_servers
|
|
43
|
+
ADD CONSTRAINT tenant_mcp_servers_management_source_check_v2
|
|
44
|
+
CHECK (management_source IN ('manual', 'managed_application', 'plugin'))
|
|
45
|
+
NOT VALID;
|
|
46
|
+
|
|
47
|
+
ALTER TABLE public.tenant_mcp_servers
|
|
48
|
+
DROP CONSTRAINT IF EXISTS tenant_mcp_servers_managed_application_shape_check;
|
|
49
|
+
|
|
50
|
+
ALTER TABLE public.tenant_mcp_servers
|
|
51
|
+
DROP CONSTRAINT IF EXISTS tenant_mcp_servers_managed_application_shape_check_v2;
|
|
52
|
+
|
|
53
|
+
ALTER TABLE public.tenant_mcp_servers
|
|
54
|
+
ADD CONSTRAINT tenant_mcp_servers_managed_application_shape_check_v2
|
|
55
|
+
CHECK (
|
|
56
|
+
(management_source = 'manual' AND managed_application_key IS NULL)
|
|
57
|
+
OR (management_source = 'managed_application' AND managed_application_key IS NOT NULL)
|
|
58
|
+
OR (management_source = 'plugin' AND plugin_install_id IS NOT NULL)
|
|
59
|
+
)
|
|
60
|
+
NOT VALID;
|
|
61
|
+
|
|
62
|
+
COMMIT;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
-- Purpose: operator verdict override (Evaluations Trust Core U9). An
|
|
2
|
+
-- operator can overturn a wrong judge verdict; the override is
|
|
3
|
+
-- a SEPARATE field, never a mutation of `status` — the judge's
|
|
4
|
+
-- original verdict + rendered rubric stay immutable on the row
|
|
5
|
+
-- while aggregation reads the override last
|
|
6
|
+
-- (effective = override_status ?? status).
|
|
7
|
+
-- Plan: docs/plans/2026-06-12-003-feat-evaluations-trust-core-plan.md (U9)
|
|
8
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0162_eval_result_override.sql
|
|
9
|
+
--
|
|
10
|
+
-- Hand-rolled (NOT registered in meta/_journal.json — the journal snapshot
|
|
11
|
+
-- stopped at 0020; repo convention is psql-applied files gated by the
|
|
12
|
+
-- db:migrate-manual drift reporter).
|
|
13
|
+
--
|
|
14
|
+
-- All columns are additive and nullable with NO defaults — null is
|
|
15
|
+
-- semantically load-bearing:
|
|
16
|
+
-- * eval_results.override_status NULL => no override; the judge's
|
|
17
|
+
-- verdict stands. Non-null: 'pass' | 'fail' (enum-by-comment) —
|
|
18
|
+
-- only scored rows (status pass|fail) may carry one; error rows
|
|
19
|
+
-- are rejected at the mutation.
|
|
20
|
+
-- * eval_results.overridden_by => authenticated caller identity,
|
|
21
|
+
-- derived server-side (never an argument).
|
|
22
|
+
-- * eval_results.overridden_at => when the override was written
|
|
23
|
+
-- (last-write posture; no history table in v1).
|
|
24
|
+
-- * eval_results.override_reason => required non-empty audit note.
|
|
25
|
+
--
|
|
26
|
+
-- creates-column: public.eval_results.override_status
|
|
27
|
+
-- creates-column: public.eval_results.overridden_by
|
|
28
|
+
-- creates-column: public.eval_results.overridden_at
|
|
29
|
+
-- creates-column: public.eval_results.override_reason
|
|
30
|
+
|
|
31
|
+
\set ON_ERROR_STOP on
|
|
32
|
+
|
|
33
|
+
BEGIN;
|
|
34
|
+
|
|
35
|
+
SET LOCAL lock_timeout = '5s';
|
|
36
|
+
|
|
37
|
+
ALTER TABLE public.eval_results
|
|
38
|
+
ADD COLUMN IF NOT EXISTS override_status text;
|
|
39
|
+
|
|
40
|
+
ALTER TABLE public.eval_results
|
|
41
|
+
ADD COLUMN IF NOT EXISTS overridden_by text;
|
|
42
|
+
|
|
43
|
+
ALTER TABLE public.eval_results
|
|
44
|
+
ADD COLUMN IF NOT EXISTS overridden_at timestamptz;
|
|
45
|
+
|
|
46
|
+
ALTER TABLE public.eval_results
|
|
47
|
+
ADD COLUMN IF NOT EXISTS override_reason text;
|
|
48
|
+
|
|
49
|
+
COMMIT;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
-- Purpose: per-tenant read-only MCP tool allowlist for eval replay
|
|
2
|
+
-- (Evaluations Trust Core U13). Replay strips all MCP tools by
|
|
3
|
+
-- default (mcp_configs undefined); this table is a DEFAULT-DENY
|
|
4
|
+
-- allowlist — a tool is restored on replay ONLY if an operator
|
|
5
|
+
-- explicitly lists it for the tenant. One row per
|
|
6
|
+
-- (tenant_id, server_name, tool_name).
|
|
7
|
+
-- Plan: docs/plans/2026-06-12-003-feat-evaluations-trust-core-plan.md (U13)
|
|
8
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0163_eval_replay_tool_allowlist.sql
|
|
9
|
+
--
|
|
10
|
+
-- Hand-rolled (NOT registered in meta/_journal.json — the journal snapshot
|
|
11
|
+
-- stopped at 0020; repo convention is psql-applied files gated by the
|
|
12
|
+
-- db:migrate-manual drift reporter).
|
|
13
|
+
--
|
|
14
|
+
-- Semantics:
|
|
15
|
+
-- * Default-deny: an empty allowlist for a tenant means replay carries no
|
|
16
|
+
-- MCP servers (mcp_configs stays undefined — current safe behavior).
|
|
17
|
+
-- * Per-tool: only the listed (server_name, tool_name) pairs become the
|
|
18
|
+
-- entry's toolWhitelist on replay; mutating tools and the email/web
|
|
19
|
+
-- side-effect kill-list stay blocked regardless.
|
|
20
|
+
-- * Lands inert until the eval payload/worker (same PR) reads it.
|
|
21
|
+
--
|
|
22
|
+
-- creates: public.eval_replay_tool_allowlist
|
|
23
|
+
-- creates-constraint: public.eval_replay_tool_allowlist.eval_replay_tool_allowlist_tenant_id_tenants_id_fk
|
|
24
|
+
-- creates: public.uq_eval_replay_tool_allowlist_tenant_server_tool
|
|
25
|
+
-- creates: public.idx_eval_replay_tool_allowlist_tenant
|
|
26
|
+
|
|
27
|
+
\set ON_ERROR_STOP on
|
|
28
|
+
|
|
29
|
+
BEGIN;
|
|
30
|
+
|
|
31
|
+
SET LOCAL lock_timeout = '5s';
|
|
32
|
+
|
|
33
|
+
CREATE TABLE IF NOT EXISTS public.eval_replay_tool_allowlist (
|
|
34
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
35
|
+
tenant_id uuid NOT NULL,
|
|
36
|
+
server_name text NOT NULL,
|
|
37
|
+
tool_name text NOT NULL,
|
|
38
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
39
|
+
CONSTRAINT eval_replay_tool_allowlist_tenant_id_tenants_id_fk
|
|
40
|
+
FOREIGN KEY (tenant_id)
|
|
41
|
+
REFERENCES public.tenants(id)
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_eval_replay_tool_allowlist_tenant_server_tool
|
|
45
|
+
ON public.eval_replay_tool_allowlist (tenant_id, server_name, tool_name);
|
|
46
|
+
|
|
47
|
+
CREATE INDEX IF NOT EXISTS idx_eval_replay_tool_allowlist_tenant
|
|
48
|
+
ON public.eval_replay_tool_allowlist (tenant_id);
|
|
49
|
+
|
|
50
|
+
COMMIT;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
-- Purpose: turn the per-tenant eval-replay MCP tool allowlist into an
|
|
2
|
+
-- OPTIONAL OVERRIDE list (Evaluations Trust Core U14). Replay now
|
|
3
|
+
-- DEFAULT-ALLOWS read-shaped tools by a name heuristic and blocks
|
|
4
|
+
-- write-shaped tools (classified in @thinkwork/evals-core
|
|
5
|
+
-- classifyMcpToolAccess). This table stops being the gate and
|
|
6
|
+
-- becomes overrides: a row force-ALLOWS a tool the heuristic would
|
|
7
|
+
-- block (e.g. a trusted write) or force-BLOCKS a tool the heuristic
|
|
8
|
+
-- would allow (e.g. suppress a read). The `mode` column carries
|
|
9
|
+
-- which.
|
|
10
|
+
-- Plan: docs/plans/2026-06-12-003-feat-evaluations-trust-core-plan.md (U14)
|
|
11
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0164_eval_replay_tool_override_mode.sql
|
|
12
|
+
--
|
|
13
|
+
-- Hand-rolled (NOT registered in meta/_journal.json — the journal snapshot
|
|
14
|
+
-- stopped at 0020; repo convention is psql-applied files gated by the
|
|
15
|
+
-- db:migrate-manual drift reporter).
|
|
16
|
+
--
|
|
17
|
+
-- Semantics:
|
|
18
|
+
-- * Additive, nullable-with-default: every existing 0163 row defaults to
|
|
19
|
+
-- mode 'allow', which preserves its prior force-allow meaning exactly.
|
|
20
|
+
-- * mode is an enum-by-comment: 'allow' (force-allow this server/tool on
|
|
21
|
+
-- replay even if the heuristic blocks it) | 'block' (force-block this
|
|
22
|
+
-- server/tool on replay even if the heuristic allows it).
|
|
23
|
+
-- * The unique key stays (tenant_id, server_name, tool_name) — one
|
|
24
|
+
-- override per tool; toggling mode UPDATEs the existing row.
|
|
25
|
+
--
|
|
26
|
+
-- creates-column: public.eval_replay_tool_allowlist.mode
|
|
27
|
+
-- creates-constraint: public.eval_replay_tool_allowlist.eval_replay_tool_allowlist_mode_check
|
|
28
|
+
|
|
29
|
+
\set ON_ERROR_STOP on
|
|
30
|
+
|
|
31
|
+
BEGIN;
|
|
32
|
+
|
|
33
|
+
SET LOCAL lock_timeout = '5s';
|
|
34
|
+
|
|
35
|
+
ALTER TABLE public.eval_replay_tool_allowlist
|
|
36
|
+
ADD COLUMN IF NOT EXISTS mode text NOT NULL DEFAULT 'allow';
|
|
37
|
+
|
|
38
|
+
-- Guard the comment-enum at the DB so a stray write can't smuggle an
|
|
39
|
+
-- unknown mode (the selector treats only 'allow'/'block' meaningfully).
|
|
40
|
+
DO $$
|
|
41
|
+
BEGIN
|
|
42
|
+
IF NOT EXISTS (
|
|
43
|
+
SELECT 1 FROM pg_constraint
|
|
44
|
+
WHERE conname = 'eval_replay_tool_allowlist_mode_check'
|
|
45
|
+
) THEN
|
|
46
|
+
ALTER TABLE public.eval_replay_tool_allowlist
|
|
47
|
+
ADD CONSTRAINT eval_replay_tool_allowlist_mode_check
|
|
48
|
+
CHECK (mode IN ('allow', 'block'));
|
|
49
|
+
END IF;
|
|
50
|
+
END $$;
|
|
51
|
+
|
|
52
|
+
COMMIT;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
-- Purpose: add generic premium plugin entitlement and one-time install-key
|
|
2
|
+
-- storage for Company Brain and future premium plugins. Entitlements are
|
|
3
|
+
-- persistent tenant/plugin grants independent of install state; install keys
|
|
4
|
+
-- store digests only and can be redeemed once into an entitlement.
|
|
5
|
+
-- Plan: docs/plans/2026-06-13-002-feat-company-brain-premium-plugin-plan.md U2
|
|
6
|
+
-- Apply manually (no CI migration runner):
|
|
7
|
+
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0165_plugin_premium_entitlements.sql
|
|
8
|
+
-- Pre-flight:
|
|
9
|
+
-- SELECT count(*) FROM public.tenants;
|
|
10
|
+
-- SELECT count(*) FROM public.users;
|
|
11
|
+
-- SELECT count(*) FROM public.plugin_installs;
|
|
12
|
+
-- creates: public.plugin_entitlements
|
|
13
|
+
-- creates: public.plugin_install_keys
|
|
14
|
+
-- creates: public.uq_plugin_entitlements_active_tenant_plugin
|
|
15
|
+
-- creates: public.idx_plugin_entitlements_tenant_plugin
|
|
16
|
+
-- creates: public.idx_plugin_entitlements_product_status
|
|
17
|
+
-- creates: public.uq_plugin_install_keys_digest
|
|
18
|
+
-- creates: public.idx_plugin_install_keys_lookup
|
|
19
|
+
-- creates: public.idx_plugin_install_keys_plugin_status
|
|
20
|
+
-- creates: public.idx_plugin_install_keys_tenant_status
|
|
21
|
+
-- creates-constraint: public.plugin_entitlements.plugin_entitlements_pkey
|
|
22
|
+
-- creates-constraint: public.plugin_entitlements.plugin_entitlements_tenant_id_tenants_id_fk
|
|
23
|
+
-- creates-constraint: public.plugin_entitlements.plugin_entitlements_granted_by_user_id_users_id_fk
|
|
24
|
+
-- creates-constraint: public.plugin_entitlements.plugin_entitlements_status_allowed
|
|
25
|
+
-- creates-constraint: public.plugin_entitlements.plugin_entitlements_source_allowed
|
|
26
|
+
-- creates-constraint: public.plugin_install_keys.plugin_install_keys_pkey
|
|
27
|
+
-- creates-constraint: public.plugin_install_keys.plugin_install_keys_tenant_id_tenants_id_fk
|
|
28
|
+
-- creates-constraint: public.plugin_install_keys.plugin_install_keys_issued_by_user_id_users_id_fk
|
|
29
|
+
-- creates-constraint: public.plugin_install_keys.plugin_install_keys_redeemed_by_user_id_users_id_fk
|
|
30
|
+
-- creates-constraint: public.plugin_install_keys.plugin_install_keys_redeemed_tenant_id_tenants_id_fk
|
|
31
|
+
-- creates-constraint: public.plugin_install_keys.plugin_install_keys_redeemed_entitlement_id_fk
|
|
32
|
+
-- creates-constraint: public.plugin_install_keys.plugin_install_keys_status_allowed
|
|
33
|
+
-- creates-constraint: public.plugin_install_keys.plugin_install_keys_redeemed_fields
|
|
34
|
+
|
|
35
|
+
\set ON_ERROR_STOP on
|
|
36
|
+
|
|
37
|
+
SET lock_timeout = '5s';
|
|
38
|
+
SET statement_timeout = '15min';
|
|
39
|
+
|
|
40
|
+
SELECT pg_advisory_lock(hashtext('migration:0165_plugin_premium_entitlements'));
|
|
41
|
+
|
|
42
|
+
-- ---------------------------------------------------------------------------
|
|
43
|
+
-- plugin_entitlements — persistent tenant premium grants
|
|
44
|
+
-- ---------------------------------------------------------------------------
|
|
45
|
+
|
|
46
|
+
CREATE TABLE IF NOT EXISTS public.plugin_entitlements (
|
|
47
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
48
|
+
tenant_id uuid NOT NULL,
|
|
49
|
+
plugin_key text NOT NULL,
|
|
50
|
+
entitlement_product_key text NOT NULL,
|
|
51
|
+
status text NOT NULL DEFAULT 'active',
|
|
52
|
+
source text NOT NULL,
|
|
53
|
+
granted_by_user_id uuid,
|
|
54
|
+
granted_at timestamptz NOT NULL DEFAULT now(),
|
|
55
|
+
revoked_at timestamptz,
|
|
56
|
+
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
57
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
58
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
59
|
+
CONSTRAINT plugin_entitlements_tenant_id_tenants_id_fk
|
|
60
|
+
FOREIGN KEY (tenant_id)
|
|
61
|
+
REFERENCES public.tenants(id)
|
|
62
|
+
ON DELETE CASCADE,
|
|
63
|
+
CONSTRAINT plugin_entitlements_granted_by_user_id_users_id_fk
|
|
64
|
+
FOREIGN KEY (granted_by_user_id)
|
|
65
|
+
REFERENCES public.users(id)
|
|
66
|
+
ON DELETE SET NULL,
|
|
67
|
+
CONSTRAINT plugin_entitlements_status_allowed
|
|
68
|
+
CHECK (status IN ('active', 'revoked')),
|
|
69
|
+
CONSTRAINT plugin_entitlements_source_allowed
|
|
70
|
+
CHECK (source IN ('install_key', 'backdoor_key', 'operator_grant', 'migration'))
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_plugin_entitlements_active_tenant_plugin
|
|
74
|
+
ON public.plugin_entitlements (tenant_id, plugin_key)
|
|
75
|
+
WHERE status = 'active';
|
|
76
|
+
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_plugin_entitlements_tenant_plugin
|
|
78
|
+
ON public.plugin_entitlements (tenant_id, plugin_key);
|
|
79
|
+
|
|
80
|
+
CREATE INDEX IF NOT EXISTS idx_plugin_entitlements_product_status
|
|
81
|
+
ON public.plugin_entitlements (entitlement_product_key, status);
|
|
82
|
+
|
|
83
|
+
-- ---------------------------------------------------------------------------
|
|
84
|
+
-- plugin_install_keys — digest-only one-time premium install keys
|
|
85
|
+
-- ---------------------------------------------------------------------------
|
|
86
|
+
|
|
87
|
+
CREATE TABLE IF NOT EXISTS public.plugin_install_keys (
|
|
88
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
89
|
+
plugin_key text NOT NULL,
|
|
90
|
+
entitlement_product_key text NOT NULL,
|
|
91
|
+
key_digest text NOT NULL,
|
|
92
|
+
digest_algorithm text NOT NULL DEFAULT 'sha256',
|
|
93
|
+
key_secret_version text,
|
|
94
|
+
tenant_id uuid,
|
|
95
|
+
status text NOT NULL DEFAULT 'issued',
|
|
96
|
+
issued_by_user_id uuid,
|
|
97
|
+
issued_at timestamptz NOT NULL DEFAULT now(),
|
|
98
|
+
expires_at timestamptz,
|
|
99
|
+
revoked_at timestamptz,
|
|
100
|
+
redeemed_by_user_id uuid,
|
|
101
|
+
redeemed_tenant_id uuid,
|
|
102
|
+
redeemed_entitlement_id uuid,
|
|
103
|
+
redeemed_at timestamptz,
|
|
104
|
+
audit_correlation_id text,
|
|
105
|
+
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
106
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
107
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
108
|
+
CONSTRAINT plugin_install_keys_tenant_id_tenants_id_fk
|
|
109
|
+
FOREIGN KEY (tenant_id)
|
|
110
|
+
REFERENCES public.tenants(id)
|
|
111
|
+
ON DELETE SET NULL,
|
|
112
|
+
CONSTRAINT plugin_install_keys_issued_by_user_id_users_id_fk
|
|
113
|
+
FOREIGN KEY (issued_by_user_id)
|
|
114
|
+
REFERENCES public.users(id)
|
|
115
|
+
ON DELETE SET NULL,
|
|
116
|
+
CONSTRAINT plugin_install_keys_redeemed_by_user_id_users_id_fk
|
|
117
|
+
FOREIGN KEY (redeemed_by_user_id)
|
|
118
|
+
REFERENCES public.users(id)
|
|
119
|
+
ON DELETE SET NULL,
|
|
120
|
+
CONSTRAINT plugin_install_keys_redeemed_tenant_id_tenants_id_fk
|
|
121
|
+
FOREIGN KEY (redeemed_tenant_id)
|
|
122
|
+
REFERENCES public.tenants(id)
|
|
123
|
+
ON DELETE SET NULL,
|
|
124
|
+
CONSTRAINT plugin_install_keys_redeemed_entitlement_id_fk
|
|
125
|
+
FOREIGN KEY (redeemed_entitlement_id)
|
|
126
|
+
REFERENCES public.plugin_entitlements(id)
|
|
127
|
+
ON DELETE SET NULL,
|
|
128
|
+
CONSTRAINT plugin_install_keys_status_allowed
|
|
129
|
+
CHECK (status IN ('issued', 'redeemed', 'revoked', 'expired')),
|
|
130
|
+
CONSTRAINT plugin_install_keys_redeemed_fields
|
|
131
|
+
CHECK (
|
|
132
|
+
status <> 'redeemed'
|
|
133
|
+
OR (
|
|
134
|
+
redeemed_at IS NOT NULL
|
|
135
|
+
AND redeemed_tenant_id IS NOT NULL
|
|
136
|
+
AND redeemed_entitlement_id IS NOT NULL
|
|
137
|
+
)
|
|
138
|
+
)
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_plugin_install_keys_digest
|
|
142
|
+
ON public.plugin_install_keys (key_digest);
|
|
143
|
+
|
|
144
|
+
CREATE INDEX IF NOT EXISTS idx_plugin_install_keys_lookup
|
|
145
|
+
ON public.plugin_install_keys (plugin_key, key_digest);
|
|
146
|
+
|
|
147
|
+
CREATE INDEX IF NOT EXISTS idx_plugin_install_keys_plugin_status
|
|
148
|
+
ON public.plugin_install_keys (plugin_key, status);
|
|
149
|
+
|
|
150
|
+
CREATE INDEX IF NOT EXISTS idx_plugin_install_keys_tenant_status
|
|
151
|
+
ON public.plugin_install_keys (tenant_id, status);
|
|
152
|
+
|
|
153
|
+
SELECT pg_advisory_unlock(hashtext('migration:0165_plugin_premium_entitlements'));
|