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,260 @@
|
|
|
1
|
+
-- AgentLoop foundation schema.
|
|
2
|
+
-- Plan: docs/plans/2026-06-22-001-feat-agent-loop-foundation-plan.md (U1).
|
|
3
|
+
-- Apply manually (no CI migration runner):
|
|
4
|
+
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0182_agent_loops.sql
|
|
5
|
+
--
|
|
6
|
+
-- Pre-flight:
|
|
7
|
+
-- SELECT to_regclass('public.tenants') AS tenants;
|
|
8
|
+
-- SELECT to_regclass('public.users') AS users;
|
|
9
|
+
-- SELECT to_regclass('public.agents') AS agents;
|
|
10
|
+
-- SELECT to_regclass('public.scheduled_jobs') AS scheduled_jobs;
|
|
11
|
+
--
|
|
12
|
+
-- creates: public.agent_loops
|
|
13
|
+
-- creates: public.agent_loop_versions
|
|
14
|
+
-- creates: public.agent_loop_runs
|
|
15
|
+
-- creates: public.agent_loop_iterations
|
|
16
|
+
-- creates: public.agent_loop_judgments
|
|
17
|
+
-- creates: public.agent_loop_evidence
|
|
18
|
+
-- creates: public.agent_loops_tenant_slug_uidx
|
|
19
|
+
-- creates: public.agent_loops_tenant_lifecycle_idx
|
|
20
|
+
-- creates: public.agent_loops_tenant_enabled_idx
|
|
21
|
+
-- creates: public.agent_loops_tenant_last_run_idx
|
|
22
|
+
-- creates: public.agent_loop_versions_loop_version_uidx
|
|
23
|
+
-- creates: public.agent_loop_versions_tenant_loop_idx
|
|
24
|
+
-- creates: public.agent_loop_runs_tenant_status_idx
|
|
25
|
+
-- creates: public.agent_loop_runs_loop_created_idx
|
|
26
|
+
-- creates: public.agent_loop_runs_tenant_correlation_idx
|
|
27
|
+
-- creates: public.agent_loop_runs_tenant_idempotency_uidx
|
|
28
|
+
-- creates: public.agent_loop_iterations_run_number_uidx
|
|
29
|
+
-- creates: public.agent_loop_iterations_tenant_status_idx
|
|
30
|
+
-- creates: public.agent_loop_iterations_wakeup_idx
|
|
31
|
+
-- creates: public.agent_loop_iterations_thread_turn_idx
|
|
32
|
+
-- creates: public.agent_loop_judgments_run_idx
|
|
33
|
+
-- creates: public.agent_loop_judgments_iteration_idx
|
|
34
|
+
-- creates: public.agent_loop_judgments_tenant_outcome_idx
|
|
35
|
+
-- creates: public.agent_loop_evidence_run_idx
|
|
36
|
+
-- creates: public.agent_loop_evidence_loop_idx
|
|
37
|
+
-- creates: public.agent_loop_evidence_iteration_idx
|
|
38
|
+
-- creates: public.agent_loop_evidence_source_idx
|
|
39
|
+
-- creates: public.idx_scheduled_jobs_agent_loop
|
|
40
|
+
-- creates-column: public.scheduled_jobs.agent_loop_id
|
|
41
|
+
-- creates-constraint: public.agent_loops.agent_loops_lifecycle_status_check
|
|
42
|
+
-- creates-constraint: public.agent_loops.agent_loops_trigger_family_check
|
|
43
|
+
-- creates-constraint: public.agent_loop_versions.agent_loop_versions_status_check
|
|
44
|
+
-- creates-constraint: public.agent_loop_runs.agent_loop_runs_status_check
|
|
45
|
+
-- creates-constraint: public.agent_loop_runs.agent_loop_runs_trigger_family_check
|
|
46
|
+
-- creates-constraint: public.agent_loop_iterations.agent_loop_iterations_status_check
|
|
47
|
+
-- creates-constraint: public.agent_loop_judgments.agent_loop_judgments_mode_check
|
|
48
|
+
-- creates-constraint: public.agent_loop_judgments.agent_loop_judgments_outcome_check
|
|
49
|
+
-- creates-constraint: public.agent_loop_evidence.agent_loop_evidence_redaction_state_check
|
|
50
|
+
|
|
51
|
+
DO $$
|
|
52
|
+
BEGIN
|
|
53
|
+
IF to_regclass('public.tenants') IS NULL THEN
|
|
54
|
+
RAISE EXCEPTION 'tenants not found; apply core tenant migrations first';
|
|
55
|
+
END IF;
|
|
56
|
+
IF to_regclass('public.users') IS NULL THEN
|
|
57
|
+
RAISE EXCEPTION 'users not found; apply core user migrations first';
|
|
58
|
+
END IF;
|
|
59
|
+
IF to_regclass('public.agents') IS NULL THEN
|
|
60
|
+
RAISE EXCEPTION 'agents not found; apply agent migrations first';
|
|
61
|
+
END IF;
|
|
62
|
+
IF to_regclass('public.scheduled_jobs') IS NULL THEN
|
|
63
|
+
RAISE EXCEPTION 'scheduled_jobs not found; apply scheduled job migrations first';
|
|
64
|
+
END IF;
|
|
65
|
+
IF to_regclass('public.agent_wakeup_requests') IS NULL THEN
|
|
66
|
+
RAISE EXCEPTION 'agent_wakeup_requests not found; apply wakeup queue migrations first';
|
|
67
|
+
END IF;
|
|
68
|
+
IF to_regclass('public.thread_turns') IS NULL THEN
|
|
69
|
+
RAISE EXCEPTION 'thread_turns not found; apply scheduled job execution migrations first';
|
|
70
|
+
END IF;
|
|
71
|
+
END $$;
|
|
72
|
+
|
|
73
|
+
CREATE TABLE IF NOT EXISTS public.agent_loops (
|
|
74
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
75
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
76
|
+
name text NOT NULL,
|
|
77
|
+
slug text NOT NULL,
|
|
78
|
+
description text,
|
|
79
|
+
lifecycle_status text NOT NULL DEFAULT 'draft',
|
|
80
|
+
enabled boolean NOT NULL DEFAULT true,
|
|
81
|
+
owner_user_id uuid REFERENCES public.users(id) ON DELETE SET NULL,
|
|
82
|
+
owner_agent_id uuid REFERENCES public.agents(id) ON DELETE SET NULL,
|
|
83
|
+
primary_trigger_family text NOT NULL DEFAULT 'manual',
|
|
84
|
+
current_version_id uuid,
|
|
85
|
+
current_version_number integer,
|
|
86
|
+
last_run_id uuid,
|
|
87
|
+
last_run_status text,
|
|
88
|
+
last_run_at timestamp with time zone,
|
|
89
|
+
last_run_summary jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
90
|
+
accepted_run_count integer NOT NULL DEFAULT 0,
|
|
91
|
+
rejected_run_count integer NOT NULL DEFAULT 0,
|
|
92
|
+
escalated_run_count integer NOT NULL DEFAULT 0,
|
|
93
|
+
total_cost_usd_cents bigint NOT NULL DEFAULT 0,
|
|
94
|
+
cost_per_accepted_run_usd_cents bigint,
|
|
95
|
+
created_at timestamp with time zone NOT NULL DEFAULT now(),
|
|
96
|
+
updated_at timestamp with time zone NOT NULL DEFAULT now(),
|
|
97
|
+
CONSTRAINT agent_loops_lifecycle_status_check CHECK (lifecycle_status IN ('draft', 'active', 'paused', 'archived')),
|
|
98
|
+
CONSTRAINT agent_loops_trigger_family_check CHECK (primary_trigger_family IN ('manual', 'schedule', 'api', 'webhook', 'app_event', 'n8n'))
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
CREATE UNIQUE INDEX IF NOT EXISTS agent_loops_tenant_slug_uidx
|
|
102
|
+
ON public.agent_loops (tenant_id, slug);
|
|
103
|
+
CREATE INDEX IF NOT EXISTS agent_loops_tenant_lifecycle_idx
|
|
104
|
+
ON public.agent_loops (tenant_id, lifecycle_status);
|
|
105
|
+
CREATE INDEX IF NOT EXISTS agent_loops_tenant_enabled_idx
|
|
106
|
+
ON public.agent_loops (tenant_id, enabled);
|
|
107
|
+
CREATE INDEX IF NOT EXISTS agent_loops_tenant_last_run_idx
|
|
108
|
+
ON public.agent_loops (tenant_id, last_run_at);
|
|
109
|
+
|
|
110
|
+
CREATE TABLE IF NOT EXISTS public.agent_loop_versions (
|
|
111
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
112
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
113
|
+
agent_loop_id uuid NOT NULL REFERENCES public.agent_loops(id) ON DELETE CASCADE,
|
|
114
|
+
version_number integer NOT NULL,
|
|
115
|
+
version_status text NOT NULL DEFAULT 'draft',
|
|
116
|
+
trigger_spec jsonb NOT NULL,
|
|
117
|
+
goal_spec jsonb NOT NULL,
|
|
118
|
+
worker_spec jsonb NOT NULL,
|
|
119
|
+
judge_spec jsonb NOT NULL,
|
|
120
|
+
loop_policy jsonb NOT NULL,
|
|
121
|
+
evidence_policy jsonb NOT NULL DEFAULT '{"redactionState":"summary_only","retainRawEvidence":false}'::jsonb,
|
|
122
|
+
source_metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
123
|
+
created_by_actor_type text,
|
|
124
|
+
created_by_actor_id uuid,
|
|
125
|
+
published_at timestamp with time zone,
|
|
126
|
+
created_at timestamp with time zone NOT NULL DEFAULT now(),
|
|
127
|
+
CONSTRAINT agent_loop_versions_status_check CHECK (version_status IN ('draft', 'active', 'superseded', 'archived'))
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
CREATE UNIQUE INDEX IF NOT EXISTS agent_loop_versions_loop_version_uidx
|
|
131
|
+
ON public.agent_loop_versions (agent_loop_id, version_number);
|
|
132
|
+
CREATE INDEX IF NOT EXISTS agent_loop_versions_tenant_loop_idx
|
|
133
|
+
ON public.agent_loop_versions (tenant_id, agent_loop_id);
|
|
134
|
+
|
|
135
|
+
CREATE TABLE IF NOT EXISTS public.agent_loop_runs (
|
|
136
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
137
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
138
|
+
agent_loop_id uuid NOT NULL REFERENCES public.agent_loops(id) ON DELETE CASCADE,
|
|
139
|
+
agent_loop_version_id uuid REFERENCES public.agent_loop_versions(id) ON DELETE SET NULL,
|
|
140
|
+
status text NOT NULL DEFAULT 'queued',
|
|
141
|
+
trigger_family text NOT NULL,
|
|
142
|
+
trigger_source text,
|
|
143
|
+
scheduled_job_id uuid,
|
|
144
|
+
actor_type text,
|
|
145
|
+
actor_id uuid,
|
|
146
|
+
idempotency_key text,
|
|
147
|
+
correlation_id text,
|
|
148
|
+
current_iteration integer NOT NULL DEFAULT 0,
|
|
149
|
+
terminal_reason text,
|
|
150
|
+
policy_snapshot jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
151
|
+
input_summary jsonb,
|
|
152
|
+
output_summary jsonb,
|
|
153
|
+
started_at timestamp with time zone,
|
|
154
|
+
finished_at timestamp with time zone,
|
|
155
|
+
last_event_at timestamp with time zone,
|
|
156
|
+
error_code text,
|
|
157
|
+
error_message text,
|
|
158
|
+
total_cost_usd_cents bigint,
|
|
159
|
+
created_at timestamp with time zone NOT NULL DEFAULT now(),
|
|
160
|
+
updated_at timestamp with time zone NOT NULL DEFAULT now(),
|
|
161
|
+
CONSTRAINT agent_loop_runs_status_check CHECK (status IN ('queued', 'running', 'waiting_for_human', 'completed', 'failed', 'budget_stopped', 'escalated', 'canceled', 'skipped')),
|
|
162
|
+
CONSTRAINT agent_loop_runs_trigger_family_check CHECK (trigger_family IN ('manual', 'schedule', 'api', 'webhook', 'app_event', 'n8n'))
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
CREATE INDEX IF NOT EXISTS agent_loop_runs_tenant_status_idx
|
|
166
|
+
ON public.agent_loop_runs (tenant_id, status);
|
|
167
|
+
CREATE INDEX IF NOT EXISTS agent_loop_runs_loop_created_idx
|
|
168
|
+
ON public.agent_loop_runs (agent_loop_id, created_at);
|
|
169
|
+
CREATE INDEX IF NOT EXISTS agent_loop_runs_tenant_correlation_idx
|
|
170
|
+
ON public.agent_loop_runs (tenant_id, correlation_id);
|
|
171
|
+
CREATE UNIQUE INDEX IF NOT EXISTS agent_loop_runs_tenant_idempotency_uidx
|
|
172
|
+
ON public.agent_loop_runs (tenant_id, idempotency_key)
|
|
173
|
+
WHERE idempotency_key IS NOT NULL;
|
|
174
|
+
|
|
175
|
+
CREATE TABLE IF NOT EXISTS public.agent_loop_iterations (
|
|
176
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
177
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
178
|
+
agent_loop_run_id uuid NOT NULL REFERENCES public.agent_loop_runs(id) ON DELETE CASCADE,
|
|
179
|
+
iteration_number integer NOT NULL,
|
|
180
|
+
status text NOT NULL DEFAULT 'queued',
|
|
181
|
+
goal_mode_action text,
|
|
182
|
+
agent_wakeup_request_id uuid REFERENCES public.agent_wakeup_requests(id) ON DELETE SET NULL,
|
|
183
|
+
thread_turn_id uuid REFERENCES public.thread_turns(id) ON DELETE SET NULL,
|
|
184
|
+
input_summary jsonb,
|
|
185
|
+
output_summary jsonb,
|
|
186
|
+
started_at timestamp with time zone,
|
|
187
|
+
finished_at timestamp with time zone,
|
|
188
|
+
error_code text,
|
|
189
|
+
error_message text,
|
|
190
|
+
total_cost_usd_cents bigint,
|
|
191
|
+
created_at timestamp with time zone NOT NULL DEFAULT now(),
|
|
192
|
+
updated_at timestamp with time zone NOT NULL DEFAULT now(),
|
|
193
|
+
CONSTRAINT agent_loop_iterations_status_check CHECK (status IN ('queued', 'running', 'completed', 'failed', 'budget_stopped', 'waiting_for_human', 'canceled'))
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
CREATE UNIQUE INDEX IF NOT EXISTS agent_loop_iterations_run_number_uidx
|
|
197
|
+
ON public.agent_loop_iterations (agent_loop_run_id, iteration_number);
|
|
198
|
+
CREATE INDEX IF NOT EXISTS agent_loop_iterations_tenant_status_idx
|
|
199
|
+
ON public.agent_loop_iterations (tenant_id, status);
|
|
200
|
+
CREATE INDEX IF NOT EXISTS agent_loop_iterations_wakeup_idx
|
|
201
|
+
ON public.agent_loop_iterations (agent_wakeup_request_id);
|
|
202
|
+
CREATE INDEX IF NOT EXISTS agent_loop_iterations_thread_turn_idx
|
|
203
|
+
ON public.agent_loop_iterations (thread_turn_id);
|
|
204
|
+
|
|
205
|
+
CREATE TABLE IF NOT EXISTS public.agent_loop_judgments (
|
|
206
|
+
id bigserial PRIMARY KEY,
|
|
207
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
208
|
+
agent_loop_run_id uuid NOT NULL REFERENCES public.agent_loop_runs(id) ON DELETE CASCADE,
|
|
209
|
+
agent_loop_iteration_id uuid REFERENCES public.agent_loop_iterations(id) ON DELETE CASCADE,
|
|
210
|
+
judge_mode text NOT NULL,
|
|
211
|
+
outcome text NOT NULL,
|
|
212
|
+
confidence integer,
|
|
213
|
+
rationale text,
|
|
214
|
+
terminal_reason text,
|
|
215
|
+
structured_output jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
216
|
+
created_at timestamp with time zone NOT NULL DEFAULT now(),
|
|
217
|
+
CONSTRAINT agent_loop_judgments_mode_check CHECK (judge_mode IN ('self_check', 'human_approval', 'model_judge', 'reviewer_agent', 'eval_threshold', 'external_callback')),
|
|
218
|
+
CONSTRAINT agent_loop_judgments_outcome_check CHECK (outcome IN ('complete', 'continue', 'failed', 'budget_stopped', 'needs_human_approval', 'escalated'))
|
|
219
|
+
);
|
|
220
|
+
|
|
221
|
+
CREATE INDEX IF NOT EXISTS agent_loop_judgments_run_idx
|
|
222
|
+
ON public.agent_loop_judgments (agent_loop_run_id);
|
|
223
|
+
CREATE INDEX IF NOT EXISTS agent_loop_judgments_iteration_idx
|
|
224
|
+
ON public.agent_loop_judgments (agent_loop_iteration_id);
|
|
225
|
+
CREATE INDEX IF NOT EXISTS agent_loop_judgments_tenant_outcome_idx
|
|
226
|
+
ON public.agent_loop_judgments (tenant_id, outcome);
|
|
227
|
+
|
|
228
|
+
CREATE TABLE IF NOT EXISTS public.agent_loop_evidence (
|
|
229
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
230
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
231
|
+
agent_loop_id uuid NOT NULL REFERENCES public.agent_loops(id) ON DELETE CASCADE,
|
|
232
|
+
agent_loop_run_id uuid REFERENCES public.agent_loop_runs(id) ON DELETE CASCADE,
|
|
233
|
+
agent_loop_iteration_id uuid REFERENCES public.agent_loop_iterations(id) ON DELETE SET NULL,
|
|
234
|
+
agent_loop_judgment_id bigint REFERENCES public.agent_loop_judgments(id) ON DELETE SET NULL,
|
|
235
|
+
evidence_type text NOT NULL,
|
|
236
|
+
source_system text NOT NULL,
|
|
237
|
+
source_id text,
|
|
238
|
+
uri text,
|
|
239
|
+
summary jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
240
|
+
redaction_state text NOT NULL DEFAULT 'summary_only',
|
|
241
|
+
sensitivity text,
|
|
242
|
+
retention_expires_at timestamp with time zone,
|
|
243
|
+
created_at timestamp with time zone NOT NULL DEFAULT now(),
|
|
244
|
+
CONSTRAINT agent_loop_evidence_redaction_state_check CHECK (redaction_state IN ('summary_only', 'redacted', 'offloaded', 'raw_allowed'))
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
CREATE INDEX IF NOT EXISTS agent_loop_evidence_run_idx
|
|
248
|
+
ON public.agent_loop_evidence (agent_loop_run_id);
|
|
249
|
+
CREATE INDEX IF NOT EXISTS agent_loop_evidence_loop_idx
|
|
250
|
+
ON public.agent_loop_evidence (agent_loop_id);
|
|
251
|
+
CREATE INDEX IF NOT EXISTS agent_loop_evidence_iteration_idx
|
|
252
|
+
ON public.agent_loop_evidence (agent_loop_iteration_id);
|
|
253
|
+
CREATE INDEX IF NOT EXISTS agent_loop_evidence_source_idx
|
|
254
|
+
ON public.agent_loop_evidence (tenant_id, source_system, source_id);
|
|
255
|
+
|
|
256
|
+
ALTER TABLE public.scheduled_jobs
|
|
257
|
+
ADD COLUMN IF NOT EXISTS agent_loop_id uuid;
|
|
258
|
+
|
|
259
|
+
CREATE INDEX IF NOT EXISTS idx_scheduled_jobs_agent_loop
|
|
260
|
+
ON public.scheduled_jobs (agent_loop_id);
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
-- Purpose: widen brain.artifact_manifests so OKF bundle versions and current
|
|
2
|
+
-- manifest pointers can be recorded as generated projection evidence.
|
|
3
|
+
-- Plan: docs/plans/2026-06-22-002-feat-okf-wiki-navigator-plan.md U1
|
|
4
|
+
-- Apply manually (no CI migration runner):
|
|
5
|
+
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0183_okf_artifact_manifests.sql
|
|
6
|
+
-- Pre-flight:
|
|
7
|
+
-- SELECT to_regclass('brain.artifact_manifests');
|
|
8
|
+
-- creates-constraint: brain.artifact_manifests.brain_artifact_manifests_kind_allowed
|
|
9
|
+
-- creates-constraint: brain.artifact_manifests.brain_artifact_manifests_source_kind_allowed
|
|
10
|
+
|
|
11
|
+
\set ON_ERROR_STOP on
|
|
12
|
+
|
|
13
|
+
SET lock_timeout = '5s';
|
|
14
|
+
SET statement_timeout = '15min';
|
|
15
|
+
|
|
16
|
+
DO $$
|
|
17
|
+
BEGIN
|
|
18
|
+
IF to_regclass('brain.artifact_manifests') IS NULL THEN
|
|
19
|
+
RAISE EXCEPTION 'brain.artifact_manifests not found; apply Company Brain artifact manifest migrations first';
|
|
20
|
+
END IF;
|
|
21
|
+
END $$;
|
|
22
|
+
|
|
23
|
+
SELECT pg_advisory_lock(hashtext('migration:0183_okf_artifact_manifests'));
|
|
24
|
+
|
|
25
|
+
ALTER TABLE brain.artifact_manifests
|
|
26
|
+
DROP CONSTRAINT IF EXISTS brain_artifact_manifests_kind_allowed;
|
|
27
|
+
|
|
28
|
+
ALTER TABLE brain.artifact_manifests
|
|
29
|
+
ADD CONSTRAINT brain_artifact_manifests_kind_allowed
|
|
30
|
+
CHECK (
|
|
31
|
+
manifest_kind IN (
|
|
32
|
+
'source_artifact',
|
|
33
|
+
'ingestion_manifest',
|
|
34
|
+
'migration_snapshot',
|
|
35
|
+
'vault_projection',
|
|
36
|
+
'export',
|
|
37
|
+
'okf_bundle',
|
|
38
|
+
'okf_current_manifest'
|
|
39
|
+
)
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
ALTER TABLE brain.artifact_manifests
|
|
43
|
+
DROP CONSTRAINT IF EXISTS brain_artifact_manifests_source_kind_allowed;
|
|
44
|
+
|
|
45
|
+
ALTER TABLE brain.artifact_manifests
|
|
46
|
+
ADD CONSTRAINT brain_artifact_manifests_source_kind_allowed
|
|
47
|
+
CHECK (
|
|
48
|
+
source_kind IS NULL
|
|
49
|
+
OR source_kind IN ('thread', 'wiki', 'brain', 'observations', 'okf')
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
SELECT pg_advisory_unlock(hashtext('migration:0183_okf_artifact_manifests'));
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
-- Purpose: cache the latest skill trust report on the per-tenant S3 catalog
|
|
2
|
+
-- index so the Skill Detail trust sheet can render the last report without
|
|
3
|
+
-- rerunning SkillSpector on every open.
|
|
4
|
+
-- Apply manually:
|
|
5
|
+
-- psql "$DATABASE_URL" -f packages/database-pg/drizzle/0184_skill_catalog_trust_cache.sql
|
|
6
|
+
-- Pre-flight:
|
|
7
|
+
-- SELECT to_regclass('public.skill_catalog');
|
|
8
|
+
-- creates-column: public.skill_catalog.trust_report
|
|
9
|
+
-- creates-column: public.skill_catalog.trust_report_content_sha
|
|
10
|
+
-- creates-column: public.skill_catalog.trust_report_pipeline_version
|
|
11
|
+
-- creates-column: public.skill_catalog.trust_report_updated_at
|
|
12
|
+
-- creates-column: public.skill_catalog.signature_status
|
|
13
|
+
-- creates-column: public.skill_catalog.signature_payload
|
|
14
|
+
-- creates-column: public.skill_catalog.signed_content_sha
|
|
15
|
+
-- creates-column: public.skill_catalog.signed_payload_hash
|
|
16
|
+
-- creates-column: public.skill_catalog.signed_at
|
|
17
|
+
-- creates-column: public.skill_catalog.signed_by_user_id
|
|
18
|
+
|
|
19
|
+
BEGIN;
|
|
20
|
+
|
|
21
|
+
SELECT pg_advisory_xact_lock(hashtext('migration:0184_skill_catalog_trust_cache'));
|
|
22
|
+
|
|
23
|
+
ALTER TABLE public.skill_catalog
|
|
24
|
+
ADD COLUMN IF NOT EXISTS trust_report jsonb,
|
|
25
|
+
ADD COLUMN IF NOT EXISTS trust_report_content_sha text,
|
|
26
|
+
ADD COLUMN IF NOT EXISTS trust_report_pipeline_version text,
|
|
27
|
+
ADD COLUMN IF NOT EXISTS trust_report_updated_at timestamptz,
|
|
28
|
+
ADD COLUMN IF NOT EXISTS signature_status text,
|
|
29
|
+
ADD COLUMN IF NOT EXISTS signature_payload jsonb,
|
|
30
|
+
ADD COLUMN IF NOT EXISTS signed_content_sha text,
|
|
31
|
+
ADD COLUMN IF NOT EXISTS signed_payload_hash text,
|
|
32
|
+
ADD COLUMN IF NOT EXISTS signed_at timestamptz,
|
|
33
|
+
ADD COLUMN IF NOT EXISTS signed_by_user_id uuid REFERENCES public.users(id) ON DELETE SET NULL;
|
|
34
|
+
|
|
35
|
+
COMMIT;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
-- 0185_agent_loop_space.sql
|
|
2
|
+
--
|
|
3
|
+
-- Adds the explicit Space an Automation/AgentLoop should run in. Existing
|
|
4
|
+
-- loops keep falling back to the default Agent space until configured.
|
|
5
|
+
--
|
|
6
|
+
-- Manual application:
|
|
7
|
+
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0185_agent_loop_space.sql
|
|
8
|
+
--
|
|
9
|
+
-- creates-column: public.agent_loops.space_id
|
|
10
|
+
-- creates: public.agent_loops_tenant_space_idx
|
|
11
|
+
|
|
12
|
+
ALTER TABLE public.agent_loops
|
|
13
|
+
ADD COLUMN IF NOT EXISTS space_id uuid REFERENCES public.spaces(id) ON DELETE SET NULL;
|
|
14
|
+
|
|
15
|
+
CREATE INDEX IF NOT EXISTS agent_loops_tenant_space_idx
|
|
16
|
+
ON public.agent_loops (tenant_id, space_id);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
-- Purpose: Store non-secret runtime metadata for MCP dispatch without mixing
|
|
2
|
+
-- plugin-provided link hints into auth_config or approval hashes.
|
|
3
|
+
--
|
|
4
|
+
-- creates-column: public.tenant_mcp_servers.runtime_metadata
|
|
5
|
+
|
|
6
|
+
ALTER TABLE public.tenant_mcp_servers
|
|
7
|
+
ADD COLUMN IF NOT EXISTS runtime_metadata jsonb;
|
|
8
|
+
|
|
9
|
+
COMMENT ON COLUMN public.tenant_mcp_servers.runtime_metadata IS
|
|
10
|
+
'Non-secret runtime metadata for MCP dispatch, such as plugin record-link hints.';
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
-- 0187_native_work_items.sql
|
|
2
|
+
--
|
|
3
|
+
-- Purpose: create the native Work Item substrate for ThinkWork-owned task state.
|
|
4
|
+
-- Plan: THNK-69 Native work item tracking capability.
|
|
5
|
+
-- Apply manually:
|
|
6
|
+
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0187_native_work_items.sql
|
|
7
|
+
--
|
|
8
|
+
-- creates: public.work_item_statuses
|
|
9
|
+
-- creates: public.work_items
|
|
10
|
+
-- creates: public.work_item_thread_links
|
|
11
|
+
-- creates: public.work_item_events
|
|
12
|
+
-- creates: public.work_item_saved_views
|
|
13
|
+
-- creates: public.work_item_external_refs
|
|
14
|
+
-- creates: public.uq_work_item_statuses_space_name
|
|
15
|
+
-- creates: public.uq_work_item_statuses_space_default
|
|
16
|
+
-- creates: public.idx_work_item_statuses_space_order
|
|
17
|
+
-- creates: public.idx_work_items_space_status
|
|
18
|
+
-- creates: public.idx_work_items_space_due
|
|
19
|
+
-- creates: public.idx_work_items_owner_user
|
|
20
|
+
-- creates: public.idx_work_items_owner_agent
|
|
21
|
+
-- creates: public.idx_work_items_template_source
|
|
22
|
+
-- creates: public.uq_work_item_thread_links_pair
|
|
23
|
+
-- creates: public.idx_work_item_thread_links_thread
|
|
24
|
+
-- creates: public.idx_work_item_thread_links_space
|
|
25
|
+
-- creates: public.idx_work_item_events_item_created
|
|
26
|
+
-- creates: public.idx_work_item_events_thread
|
|
27
|
+
-- creates: public.uq_work_item_saved_views_user_name
|
|
28
|
+
-- creates: public.uq_work_item_saved_views_user_default
|
|
29
|
+
-- creates: public.idx_work_item_saved_views_user
|
|
30
|
+
-- creates: public.idx_work_item_saved_views_space
|
|
31
|
+
-- creates: public.uq_work_item_external_refs_provider
|
|
32
|
+
-- creates: public.idx_work_item_external_refs_item
|
|
33
|
+
-- creates-constraint: public.work_item_statuses.work_item_statuses_category_allowed
|
|
34
|
+
-- creates-constraint: public.work_items.work_items_priority_allowed
|
|
35
|
+
-- creates-constraint: public.work_item_thread_links.work_item_thread_links_relationship_allowed
|
|
36
|
+
-- creates-constraint: public.work_item_events.work_item_events_type_allowed
|
|
37
|
+
-- creates-constraint: public.work_item_saved_views.work_item_saved_views_type_allowed
|
|
38
|
+
-- creates-constraint: public.work_item_saved_views.work_item_saved_views_owner_required
|
|
39
|
+
-- creates-constraint: public.work_item_external_refs.work_item_external_refs_provider_allowed
|
|
40
|
+
|
|
41
|
+
\set ON_ERROR_STOP on
|
|
42
|
+
|
|
43
|
+
BEGIN;
|
|
44
|
+
|
|
45
|
+
SET LOCAL lock_timeout = '5s';
|
|
46
|
+
SET LOCAL statement_timeout = '120s';
|
|
47
|
+
|
|
48
|
+
CREATE TABLE IF NOT EXISTS public.work_item_statuses (
|
|
49
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
50
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
51
|
+
space_id uuid NOT NULL REFERENCES public.spaces(id) ON DELETE CASCADE,
|
|
52
|
+
name text NOT NULL,
|
|
53
|
+
description text,
|
|
54
|
+
color text,
|
|
55
|
+
icon text,
|
|
56
|
+
category text NOT NULL DEFAULT 'todo',
|
|
57
|
+
is_active boolean NOT NULL DEFAULT true,
|
|
58
|
+
is_final boolean NOT NULL DEFAULT false,
|
|
59
|
+
is_default boolean NOT NULL DEFAULT false,
|
|
60
|
+
display_order integer NOT NULL DEFAULT 0,
|
|
61
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
62
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
63
|
+
CONSTRAINT work_item_statuses_category_allowed
|
|
64
|
+
CHECK (category IN ('todo', 'active', 'blocked', 'done', 'skipped'))
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_work_item_statuses_space_name
|
|
68
|
+
ON public.work_item_statuses (tenant_id, space_id, name);
|
|
69
|
+
|
|
70
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_work_item_statuses_space_default
|
|
71
|
+
ON public.work_item_statuses (tenant_id, space_id)
|
|
72
|
+
WHERE is_default = true;
|
|
73
|
+
|
|
74
|
+
CREATE INDEX IF NOT EXISTS idx_work_item_statuses_space_order
|
|
75
|
+
ON public.work_item_statuses (tenant_id, space_id, display_order);
|
|
76
|
+
|
|
77
|
+
CREATE TABLE IF NOT EXISTS public.work_items (
|
|
78
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
79
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
80
|
+
space_id uuid NOT NULL REFERENCES public.spaces(id) ON DELETE CASCADE,
|
|
81
|
+
status_id uuid REFERENCES public.work_item_statuses(id) ON DELETE RESTRICT,
|
|
82
|
+
title text NOT NULL,
|
|
83
|
+
notes text,
|
|
84
|
+
priority text NOT NULL DEFAULT 'normal',
|
|
85
|
+
owner_user_id uuid REFERENCES public.users(id) ON DELETE SET NULL,
|
|
86
|
+
owner_agent_id uuid REFERENCES public.agents(id) ON DELETE SET NULL,
|
|
87
|
+
due_at timestamptz,
|
|
88
|
+
required boolean NOT NULL DEFAULT true,
|
|
89
|
+
applicable boolean NOT NULL DEFAULT true,
|
|
90
|
+
blocked boolean NOT NULL DEFAULT false,
|
|
91
|
+
completed_at timestamptz,
|
|
92
|
+
completed_by_user_id uuid REFERENCES public.users(id) ON DELETE SET NULL,
|
|
93
|
+
completed_by_agent_id uuid REFERENCES public.agents(id) ON DELETE SET NULL,
|
|
94
|
+
created_by_user_id uuid REFERENCES public.users(id) ON DELETE SET NULL,
|
|
95
|
+
created_by_agent_id uuid REFERENCES public.agents(id) ON DELETE SET NULL,
|
|
96
|
+
template_source_id uuid REFERENCES public.space_checklist_items(id) ON DELETE SET NULL,
|
|
97
|
+
metadata jsonb,
|
|
98
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
99
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
100
|
+
archived_at timestamptz,
|
|
101
|
+
CONSTRAINT work_items_priority_allowed
|
|
102
|
+
CHECK (priority IN ('low', 'normal', 'high', 'urgent'))
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
CREATE INDEX IF NOT EXISTS idx_work_items_space_status
|
|
106
|
+
ON public.work_items (tenant_id, space_id, status_id);
|
|
107
|
+
|
|
108
|
+
CREATE INDEX IF NOT EXISTS idx_work_items_space_due
|
|
109
|
+
ON public.work_items (tenant_id, space_id, due_at);
|
|
110
|
+
|
|
111
|
+
CREATE INDEX IF NOT EXISTS idx_work_items_owner_user
|
|
112
|
+
ON public.work_items (tenant_id, owner_user_id, archived_at);
|
|
113
|
+
|
|
114
|
+
CREATE INDEX IF NOT EXISTS idx_work_items_owner_agent
|
|
115
|
+
ON public.work_items (tenant_id, owner_agent_id, archived_at);
|
|
116
|
+
|
|
117
|
+
CREATE INDEX IF NOT EXISTS idx_work_items_template_source
|
|
118
|
+
ON public.work_items (tenant_id, template_source_id);
|
|
119
|
+
|
|
120
|
+
CREATE TABLE IF NOT EXISTS public.work_item_thread_links (
|
|
121
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
122
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
123
|
+
work_item_id uuid NOT NULL REFERENCES public.work_items(id) ON DELETE CASCADE,
|
|
124
|
+
thread_id uuid NOT NULL REFERENCES public.threads(id) ON DELETE CASCADE,
|
|
125
|
+
space_id uuid NOT NULL REFERENCES public.spaces(id) ON DELETE CASCADE,
|
|
126
|
+
relationship text NOT NULL DEFAULT 'primary',
|
|
127
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
128
|
+
CONSTRAINT work_item_thread_links_relationship_allowed
|
|
129
|
+
CHECK (relationship IN ('primary', 'mentioned', 'evidence', 'follow_up'))
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_work_item_thread_links_pair
|
|
133
|
+
ON public.work_item_thread_links (tenant_id, work_item_id, thread_id);
|
|
134
|
+
|
|
135
|
+
CREATE INDEX IF NOT EXISTS idx_work_item_thread_links_thread
|
|
136
|
+
ON public.work_item_thread_links (tenant_id, thread_id);
|
|
137
|
+
|
|
138
|
+
CREATE INDEX IF NOT EXISTS idx_work_item_thread_links_space
|
|
139
|
+
ON public.work_item_thread_links (tenant_id, space_id);
|
|
140
|
+
|
|
141
|
+
CREATE TABLE IF NOT EXISTS public.work_item_events (
|
|
142
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
143
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
144
|
+
space_id uuid NOT NULL REFERENCES public.spaces(id) ON DELETE CASCADE,
|
|
145
|
+
work_item_id uuid NOT NULL REFERENCES public.work_items(id) ON DELETE CASCADE,
|
|
146
|
+
thread_id uuid REFERENCES public.threads(id) ON DELETE SET NULL,
|
|
147
|
+
actor_user_id uuid REFERENCES public.users(id) ON DELETE SET NULL,
|
|
148
|
+
actor_agent_id uuid REFERENCES public.agents(id) ON DELETE SET NULL,
|
|
149
|
+
event_type text NOT NULL,
|
|
150
|
+
previous_status_id uuid REFERENCES public.work_item_statuses(id) ON DELETE SET NULL,
|
|
151
|
+
new_status_id uuid REFERENCES public.work_item_statuses(id) ON DELETE SET NULL,
|
|
152
|
+
message text,
|
|
153
|
+
metadata jsonb,
|
|
154
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
155
|
+
CONSTRAINT work_item_events_type_allowed
|
|
156
|
+
CHECK (event_type IN ('created', 'updated', 'status_changed', 'completed', 'blocked', 'unblocked', 'assigned', 'due_date_changed', 'applicability_changed', 'linked_thread', 'agent_action'))
|
|
157
|
+
);
|
|
158
|
+
|
|
159
|
+
CREATE INDEX IF NOT EXISTS idx_work_item_events_item_created
|
|
160
|
+
ON public.work_item_events (tenant_id, work_item_id, created_at);
|
|
161
|
+
|
|
162
|
+
CREATE INDEX IF NOT EXISTS idx_work_item_events_thread
|
|
163
|
+
ON public.work_item_events (tenant_id, thread_id);
|
|
164
|
+
|
|
165
|
+
CREATE TABLE IF NOT EXISTS public.work_item_saved_views (
|
|
166
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
167
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
168
|
+
user_id uuid REFERENCES public.users(id) ON DELETE CASCADE,
|
|
169
|
+
space_id uuid REFERENCES public.spaces(id) ON DELETE CASCADE,
|
|
170
|
+
name text NOT NULL,
|
|
171
|
+
view_type text NOT NULL DEFAULT 'list',
|
|
172
|
+
filters jsonb,
|
|
173
|
+
grouping jsonb,
|
|
174
|
+
sorting jsonb,
|
|
175
|
+
view_config jsonb,
|
|
176
|
+
is_private boolean NOT NULL DEFAULT true,
|
|
177
|
+
is_default boolean NOT NULL DEFAULT false,
|
|
178
|
+
is_favorite boolean NOT NULL DEFAULT false,
|
|
179
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
180
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
181
|
+
CONSTRAINT work_item_saved_views_type_allowed
|
|
182
|
+
CHECK (view_type IN ('list', 'board')),
|
|
183
|
+
CONSTRAINT work_item_saved_views_owner_required
|
|
184
|
+
CHECK (user_id IS NOT NULL OR is_private = false)
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_work_item_saved_views_user_name
|
|
188
|
+
ON public.work_item_saved_views (tenant_id, user_id, name);
|
|
189
|
+
|
|
190
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_work_item_saved_views_user_default
|
|
191
|
+
ON public.work_item_saved_views (tenant_id, user_id)
|
|
192
|
+
WHERE is_default = true;
|
|
193
|
+
|
|
194
|
+
CREATE INDEX IF NOT EXISTS idx_work_item_saved_views_user
|
|
195
|
+
ON public.work_item_saved_views (tenant_id, user_id, is_favorite);
|
|
196
|
+
|
|
197
|
+
CREATE INDEX IF NOT EXISTS idx_work_item_saved_views_space
|
|
198
|
+
ON public.work_item_saved_views (tenant_id, space_id);
|
|
199
|
+
|
|
200
|
+
CREATE TABLE IF NOT EXISTS public.work_item_external_refs (
|
|
201
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
202
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
203
|
+
work_item_id uuid NOT NULL REFERENCES public.work_items(id) ON DELETE CASCADE,
|
|
204
|
+
provider text NOT NULL,
|
|
205
|
+
external_id text NOT NULL,
|
|
206
|
+
external_url text,
|
|
207
|
+
metadata jsonb,
|
|
208
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
209
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
210
|
+
CONSTRAINT work_item_external_refs_provider_allowed
|
|
211
|
+
CHECK (provider IN ('thinkwork', 'lastmile', 'linear', 'plane', 'twenty'))
|
|
212
|
+
);
|
|
213
|
+
|
|
214
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_work_item_external_refs_provider
|
|
215
|
+
ON public.work_item_external_refs (tenant_id, provider, external_id);
|
|
216
|
+
|
|
217
|
+
CREATE INDEX IF NOT EXISTS idx_work_item_external_refs_item
|
|
218
|
+
ON public.work_item_external_refs (tenant_id, work_item_id);
|
|
219
|
+
|
|
220
|
+
COMMIT;
|