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,99 @@
|
|
|
1
|
+
-- Rename persisted Data Integrations plugin keys to Company ETL.
|
|
2
|
+
-- Plan: THNK-71 U3, Rename Data Integrations plugin to Company ETL.
|
|
3
|
+
--
|
|
4
|
+
-- Apply through deploy.yml before the GraphQL Lambda serving the renamed
|
|
5
|
+
-- catalog is deployed:
|
|
6
|
+
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 --single-transaction -f packages/database-pg/drizzle/0188_company_etl_plugin_rename.sql
|
|
7
|
+
--
|
|
8
|
+
-- Drift detection:
|
|
9
|
+
-- bash scripts/db-migrate-manual.sh packages/database-pg/drizzle/0188_company_etl_plugin_rename.sql
|
|
10
|
+
--
|
|
11
|
+
-- Pre-flight:
|
|
12
|
+
-- SELECT to_regclass('public.plugin_installs') AS plugin_installs;
|
|
13
|
+
-- SELECT to_regclass('public.plugin_entitlements') AS plugin_entitlements;
|
|
14
|
+
-- SELECT to_regclass('public.plugin_install_keys') AS plugin_install_keys;
|
|
15
|
+
--
|
|
16
|
+
-- creates: public.view_company_etl_plugin_rename_0188
|
|
17
|
+
|
|
18
|
+
DO $$
|
|
19
|
+
BEGIN
|
|
20
|
+
IF to_regclass('public.plugin_installs') IS NULL THEN
|
|
21
|
+
RAISE EXCEPTION 'plugin_installs not found; apply application plugin migrations first';
|
|
22
|
+
END IF;
|
|
23
|
+
IF to_regclass('public.plugin_entitlements') IS NULL THEN
|
|
24
|
+
RAISE EXCEPTION 'plugin_entitlements not found; apply premium plugin migrations first';
|
|
25
|
+
END IF;
|
|
26
|
+
IF to_regclass('public.plugin_install_keys') IS NULL THEN
|
|
27
|
+
RAISE EXCEPTION 'plugin_install_keys not found; apply premium plugin migrations first';
|
|
28
|
+
END IF;
|
|
29
|
+
END $$;
|
|
30
|
+
|
|
31
|
+
DO $$
|
|
32
|
+
BEGIN
|
|
33
|
+
IF EXISTS (
|
|
34
|
+
SELECT 1
|
|
35
|
+
FROM public.plugin_installs
|
|
36
|
+
WHERE plugin_key IN ('data-integrations', 'company-etl')
|
|
37
|
+
GROUP BY tenant_id
|
|
38
|
+
HAVING COUNT(DISTINCT plugin_key) = 2
|
|
39
|
+
) THEN
|
|
40
|
+
RAISE EXCEPTION 'company-etl rename conflict: tenant has both data-integrations and company-etl plugin_installs rows';
|
|
41
|
+
END IF;
|
|
42
|
+
|
|
43
|
+
IF EXISTS (
|
|
44
|
+
SELECT 1
|
|
45
|
+
FROM public.plugin_entitlements
|
|
46
|
+
WHERE plugin_key IN ('data-integrations', 'company-etl')
|
|
47
|
+
AND status = 'active'
|
|
48
|
+
GROUP BY tenant_id
|
|
49
|
+
HAVING COUNT(DISTINCT plugin_key) = 2
|
|
50
|
+
) THEN
|
|
51
|
+
RAISE EXCEPTION 'company-etl rename conflict: tenant has both active data-integrations and company-etl plugin_entitlements rows';
|
|
52
|
+
END IF;
|
|
53
|
+
END $$;
|
|
54
|
+
|
|
55
|
+
UPDATE public.plugin_installs
|
|
56
|
+
SET
|
|
57
|
+
plugin_key = 'company-etl',
|
|
58
|
+
pinned_payload_sha256 = '49681471c865d81257872da252538f84345f42b43299c27764fc2714bb2e8abf',
|
|
59
|
+
updated_at = now()
|
|
60
|
+
WHERE plugin_key = 'data-integrations';
|
|
61
|
+
|
|
62
|
+
UPDATE public.plugin_entitlements
|
|
63
|
+
SET
|
|
64
|
+
plugin_key = 'company-etl',
|
|
65
|
+
entitlement_product_key = CASE
|
|
66
|
+
WHEN entitlement_product_key = 'data-integrations' THEN 'company-etl'
|
|
67
|
+
ELSE entitlement_product_key
|
|
68
|
+
END,
|
|
69
|
+
updated_at = now()
|
|
70
|
+
WHERE plugin_key = 'data-integrations';
|
|
71
|
+
|
|
72
|
+
UPDATE public.plugin_install_keys
|
|
73
|
+
SET
|
|
74
|
+
plugin_key = 'company-etl',
|
|
75
|
+
entitlement_product_key = CASE
|
|
76
|
+
WHEN entitlement_product_key = 'data-integrations' THEN 'company-etl'
|
|
77
|
+
ELSE entitlement_product_key
|
|
78
|
+
END,
|
|
79
|
+
updated_at = now()
|
|
80
|
+
WHERE plugin_key = 'data-integrations';
|
|
81
|
+
|
|
82
|
+
CREATE OR REPLACE VIEW public.view_company_etl_plugin_rename_0188 AS
|
|
83
|
+
SELECT
|
|
84
|
+
NOT EXISTS (
|
|
85
|
+
SELECT 1 FROM public.plugin_installs WHERE plugin_key = 'data-integrations'
|
|
86
|
+
) AS plugin_installs_migrated,
|
|
87
|
+
NOT EXISTS (
|
|
88
|
+
SELECT 1 FROM public.plugin_entitlements WHERE plugin_key = 'data-integrations'
|
|
89
|
+
) AS plugin_entitlements_migrated,
|
|
90
|
+
NOT EXISTS (
|
|
91
|
+
SELECT 1 FROM public.plugin_install_keys WHERE plugin_key = 'data-integrations'
|
|
92
|
+
) AS plugin_install_keys_migrated,
|
|
93
|
+
NOT EXISTS (
|
|
94
|
+
SELECT 1
|
|
95
|
+
FROM public.plugin_installs
|
|
96
|
+
WHERE plugin_key = 'company-etl'
|
|
97
|
+
AND pinned_version = '0.1.0'
|
|
98
|
+
AND pinned_payload_sha256 <> '49681471c865d81257872da252538f84345f42b43299c27764fc2714bb2e8abf'
|
|
99
|
+
) AS company_etl_pinned_payload_digest_current;
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
-- Trusted trace and cost accounting substrate.
|
|
2
|
+
-- Plan: docs/plans/2026-06-25-003-feat-trace-cost-substrate-plan.md (U1).
|
|
3
|
+
--
|
|
4
|
+
-- creates: public.trace_runs
|
|
5
|
+
-- creates: public.trace_events
|
|
6
|
+
-- creates: public.trace_source_evidence
|
|
7
|
+
-- creates: public.trace_cost_reconciliation_facts
|
|
8
|
+
-- creates: public.trace_runs_tenant_trace_uidx
|
|
9
|
+
-- creates: public.trace_runs_thread_turn_idx
|
|
10
|
+
-- creates: public.trace_runs_thread_idx
|
|
11
|
+
-- creates: public.trace_runs_agent_created_idx
|
|
12
|
+
-- creates: public.trace_events_run_observed_idx
|
|
13
|
+
-- creates: public.trace_events_parent_idx
|
|
14
|
+
-- creates: public.trace_events_request_idx
|
|
15
|
+
-- creates: public.trace_events_turn_type_idx
|
|
16
|
+
-- creates: public.trace_source_evidence_run_idx
|
|
17
|
+
-- creates: public.trace_source_evidence_event_idx
|
|
18
|
+
-- creates: public.trace_source_evidence_source_idx
|
|
19
|
+
-- creates: public.trace_cost_recon_facts_cost_event_idx
|
|
20
|
+
-- creates: public.trace_cost_recon_facts_trace_event_idx
|
|
21
|
+
-- creates: public.trace_cost_recon_facts_state_idx
|
|
22
|
+
-- creates: public.trace_cost_recon_facts_request_idx
|
|
23
|
+
-- creates-column: public.cost_events.trace_event_id
|
|
24
|
+
-- creates-column: public.cost_events.reconciliation_state
|
|
25
|
+
-- creates-column: public.cost_events.reconciliation_source
|
|
26
|
+
-- creates-column: public.cost_events.reconciliation_at
|
|
27
|
+
-- creates-column: public.cost_events.source_evidence_ref
|
|
28
|
+
|
|
29
|
+
DO $$
|
|
30
|
+
BEGIN
|
|
31
|
+
IF to_regclass('public.tenants') IS NULL THEN
|
|
32
|
+
RAISE EXCEPTION 'tenants not found; apply core tenant migrations first';
|
|
33
|
+
END IF;
|
|
34
|
+
IF to_regclass('public.users') IS NULL THEN
|
|
35
|
+
RAISE EXCEPTION 'users not found; apply core user migrations first';
|
|
36
|
+
END IF;
|
|
37
|
+
IF to_regclass('public.agents') IS NULL THEN
|
|
38
|
+
RAISE EXCEPTION 'agents not found; apply agent migrations first';
|
|
39
|
+
END IF;
|
|
40
|
+
IF to_regclass('public.thread_turns') IS NULL THEN
|
|
41
|
+
RAISE EXCEPTION 'thread_turns not found; apply scheduled job execution migrations first';
|
|
42
|
+
END IF;
|
|
43
|
+
IF to_regclass('public.cost_events') IS NULL THEN
|
|
44
|
+
RAISE EXCEPTION 'cost_events not found; apply cost event migrations first';
|
|
45
|
+
END IF;
|
|
46
|
+
END $$;
|
|
47
|
+
|
|
48
|
+
CREATE TABLE IF NOT EXISTS public.trace_runs (
|
|
49
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
50
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
51
|
+
trace_id text NOT NULL,
|
|
52
|
+
thread_id uuid,
|
|
53
|
+
thread_turn_id uuid REFERENCES public.thread_turns(id) ON DELETE SET NULL,
|
|
54
|
+
agent_id uuid REFERENCES public.agents(id) ON DELETE SET NULL,
|
|
55
|
+
user_id uuid REFERENCES public.users(id) ON DELETE SET NULL,
|
|
56
|
+
runtime_type text,
|
|
57
|
+
runtime_session_id text,
|
|
58
|
+
status text NOT NULL DEFAULT 'open',
|
|
59
|
+
started_at timestamp with time zone,
|
|
60
|
+
finished_at timestamp with time zone,
|
|
61
|
+
created_at timestamp with time zone NOT NULL DEFAULT now(),
|
|
62
|
+
updated_at timestamp with time zone NOT NULL DEFAULT now()
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
CREATE UNIQUE INDEX IF NOT EXISTS trace_runs_tenant_trace_uidx
|
|
66
|
+
ON public.trace_runs (tenant_id, trace_id);
|
|
67
|
+
CREATE INDEX IF NOT EXISTS trace_runs_thread_turn_idx
|
|
68
|
+
ON public.trace_runs (thread_turn_id);
|
|
69
|
+
CREATE INDEX IF NOT EXISTS trace_runs_thread_idx
|
|
70
|
+
ON public.trace_runs (tenant_id, thread_id);
|
|
71
|
+
CREATE INDEX IF NOT EXISTS trace_runs_agent_created_idx
|
|
72
|
+
ON public.trace_runs (agent_id, created_at);
|
|
73
|
+
|
|
74
|
+
CREATE TABLE IF NOT EXISTS public.trace_events (
|
|
75
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
76
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
77
|
+
trace_run_id uuid NOT NULL REFERENCES public.trace_runs(id) ON DELETE CASCADE,
|
|
78
|
+
parent_event_id uuid REFERENCES public.trace_events(id) ON DELETE SET NULL,
|
|
79
|
+
thread_turn_id uuid REFERENCES public.thread_turns(id) ON DELETE SET NULL,
|
|
80
|
+
request_id text,
|
|
81
|
+
parent_request_id text,
|
|
82
|
+
event_type text NOT NULL,
|
|
83
|
+
event_status text,
|
|
84
|
+
observed_at timestamp with time zone NOT NULL DEFAULT now(),
|
|
85
|
+
duration_ms integer,
|
|
86
|
+
payload_summary jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
87
|
+
source_evidence_ref jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
88
|
+
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
89
|
+
created_at timestamp with time zone NOT NULL DEFAULT now(),
|
|
90
|
+
CONSTRAINT trace_events_type_check CHECK (
|
|
91
|
+
event_type IN (
|
|
92
|
+
'turn',
|
|
93
|
+
'runtime_phase',
|
|
94
|
+
'model_invocation',
|
|
95
|
+
'tool_invocation',
|
|
96
|
+
'memory_context_lookup',
|
|
97
|
+
'workspace_hydration',
|
|
98
|
+
'response_finalization',
|
|
99
|
+
'agent_profile_run',
|
|
100
|
+
'sub_agent_lane',
|
|
101
|
+
'cost_observation'
|
|
102
|
+
)
|
|
103
|
+
)
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
CREATE INDEX IF NOT EXISTS trace_events_run_observed_idx
|
|
107
|
+
ON public.trace_events (trace_run_id, observed_at);
|
|
108
|
+
CREATE INDEX IF NOT EXISTS trace_events_parent_idx
|
|
109
|
+
ON public.trace_events (parent_event_id);
|
|
110
|
+
CREATE INDEX IF NOT EXISTS trace_events_request_idx
|
|
111
|
+
ON public.trace_events (tenant_id, request_id);
|
|
112
|
+
CREATE INDEX IF NOT EXISTS trace_events_turn_type_idx
|
|
113
|
+
ON public.trace_events (thread_turn_id, event_type);
|
|
114
|
+
|
|
115
|
+
CREATE TABLE IF NOT EXISTS public.trace_source_evidence (
|
|
116
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
117
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
118
|
+
trace_run_id uuid REFERENCES public.trace_runs(id) ON DELETE CASCADE,
|
|
119
|
+
trace_event_id uuid REFERENCES public.trace_events(id) ON DELETE CASCADE,
|
|
120
|
+
source_type text NOT NULL,
|
|
121
|
+
source_system text NOT NULL,
|
|
122
|
+
source_id text,
|
|
123
|
+
uri text,
|
|
124
|
+
observed_at timestamp with time zone,
|
|
125
|
+
summary jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
126
|
+
redaction_state text NOT NULL DEFAULT 'summary_only',
|
|
127
|
+
retention_expires_at timestamp with time zone,
|
|
128
|
+
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
129
|
+
created_at timestamp with time zone NOT NULL DEFAULT now(),
|
|
130
|
+
CONSTRAINT trace_source_evidence_source_type_check CHECK (
|
|
131
|
+
source_type IN (
|
|
132
|
+
'runtime',
|
|
133
|
+
'agentcore_span',
|
|
134
|
+
'bedrock_invocation_log',
|
|
135
|
+
'aws_cur',
|
|
136
|
+
'operator',
|
|
137
|
+
'backfill'
|
|
138
|
+
)
|
|
139
|
+
)
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
CREATE INDEX IF NOT EXISTS trace_source_evidence_run_idx
|
|
143
|
+
ON public.trace_source_evidence (trace_run_id);
|
|
144
|
+
CREATE INDEX IF NOT EXISTS trace_source_evidence_event_idx
|
|
145
|
+
ON public.trace_source_evidence (trace_event_id);
|
|
146
|
+
CREATE INDEX IF NOT EXISTS trace_source_evidence_source_idx
|
|
147
|
+
ON public.trace_source_evidence (tenant_id, source_type, source_id);
|
|
148
|
+
|
|
149
|
+
CREATE TABLE IF NOT EXISTS public.trace_cost_reconciliation_facts (
|
|
150
|
+
id bigserial PRIMARY KEY,
|
|
151
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
152
|
+
trace_run_id uuid REFERENCES public.trace_runs(id) ON DELETE CASCADE,
|
|
153
|
+
trace_event_id uuid REFERENCES public.trace_events(id) ON DELETE SET NULL,
|
|
154
|
+
cost_event_id uuid REFERENCES public.cost_events(id) ON DELETE SET NULL,
|
|
155
|
+
source_evidence_id uuid REFERENCES public.trace_source_evidence(id) ON DELETE SET NULL,
|
|
156
|
+
reconciliation_state text NOT NULL,
|
|
157
|
+
reconciliation_scope text NOT NULL,
|
|
158
|
+
provider text,
|
|
159
|
+
model text,
|
|
160
|
+
request_id text,
|
|
161
|
+
attribution_level text,
|
|
162
|
+
runtime_input_tokens integer,
|
|
163
|
+
runtime_output_tokens integer,
|
|
164
|
+
runtime_cached_read_tokens integer,
|
|
165
|
+
provider_input_tokens integer,
|
|
166
|
+
provider_output_tokens integer,
|
|
167
|
+
provider_cached_read_tokens integer,
|
|
168
|
+
runtime_amount_usd numeric(12, 6),
|
|
169
|
+
provider_amount_usd numeric(12, 6),
|
|
170
|
+
billed_amount_usd numeric(12, 6),
|
|
171
|
+
variance_usd numeric(12, 6),
|
|
172
|
+
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
173
|
+
reconciled_at timestamp with time zone NOT NULL DEFAULT now(),
|
|
174
|
+
created_at timestamp with time zone NOT NULL DEFAULT now(),
|
|
175
|
+
CONSTRAINT trace_cost_recon_facts_state_check CHECK (
|
|
176
|
+
reconciliation_state IN (
|
|
177
|
+
'runtime-reported',
|
|
178
|
+
'invocation-reconciled',
|
|
179
|
+
'bill-reconciled',
|
|
180
|
+
'mismatch',
|
|
181
|
+
'unreconciled/error'
|
|
182
|
+
)
|
|
183
|
+
),
|
|
184
|
+
CONSTRAINT trace_cost_recon_facts_scope_check CHECK (
|
|
185
|
+
reconciliation_scope IN (
|
|
186
|
+
'runtime',
|
|
187
|
+
'invocation',
|
|
188
|
+
'bill',
|
|
189
|
+
'aggregate',
|
|
190
|
+
'operator_resolution'
|
|
191
|
+
)
|
|
192
|
+
)
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
CREATE INDEX IF NOT EXISTS trace_cost_recon_facts_cost_event_idx
|
|
196
|
+
ON public.trace_cost_reconciliation_facts (cost_event_id);
|
|
197
|
+
CREATE INDEX IF NOT EXISTS trace_cost_recon_facts_trace_event_idx
|
|
198
|
+
ON public.trace_cost_reconciliation_facts (trace_event_id);
|
|
199
|
+
CREATE INDEX IF NOT EXISTS trace_cost_recon_facts_state_idx
|
|
200
|
+
ON public.trace_cost_reconciliation_facts (
|
|
201
|
+
tenant_id,
|
|
202
|
+
reconciliation_state,
|
|
203
|
+
reconciled_at
|
|
204
|
+
);
|
|
205
|
+
CREATE INDEX IF NOT EXISTS trace_cost_recon_facts_request_idx
|
|
206
|
+
ON public.trace_cost_reconciliation_facts (tenant_id, provider, request_id);
|
|
207
|
+
|
|
208
|
+
ALTER TABLE public.cost_events
|
|
209
|
+
ADD COLUMN IF NOT EXISTS trace_event_id uuid,
|
|
210
|
+
ADD COLUMN IF NOT EXISTS reconciliation_state text NOT NULL DEFAULT 'runtime-reported',
|
|
211
|
+
ADD COLUMN IF NOT EXISTS reconciliation_source text,
|
|
212
|
+
ADD COLUMN IF NOT EXISTS reconciliation_at timestamp with time zone,
|
|
213
|
+
ADD COLUMN IF NOT EXISTS source_evidence_ref jsonb;
|
|
214
|
+
|
|
215
|
+
CREATE INDEX IF NOT EXISTS idx_cost_events_trace_event
|
|
216
|
+
ON public.cost_events (trace_event_id);
|
|
217
|
+
CREATE INDEX IF NOT EXISTS idx_cost_events_reconciliation_state
|
|
218
|
+
ON public.cost_events (tenant_id, reconciliation_state, created_at);
|
|
219
|
+
|
|
220
|
+
DO $$
|
|
221
|
+
BEGIN
|
|
222
|
+
IF NOT EXISTS (
|
|
223
|
+
SELECT 1
|
|
224
|
+
FROM pg_constraint
|
|
225
|
+
WHERE conname = 'cost_events_reconciliation_state_check'
|
|
226
|
+
) THEN
|
|
227
|
+
ALTER TABLE public.cost_events
|
|
228
|
+
ADD CONSTRAINT cost_events_reconciliation_state_check CHECK (
|
|
229
|
+
reconciliation_state IN (
|
|
230
|
+
'runtime-reported',
|
|
231
|
+
'invocation-reconciled',
|
|
232
|
+
'bill-reconciled',
|
|
233
|
+
'mismatch',
|
|
234
|
+
'unreconciled/error'
|
|
235
|
+
)
|
|
236
|
+
);
|
|
237
|
+
END IF;
|
|
238
|
+
END $$;
|
|
239
|
+
|
|
240
|
+
COMMENT ON TABLE public.trace_runs IS
|
|
241
|
+
'Canonical trace run identity for ThinkWork agent execution evidence.';
|
|
242
|
+
COMMENT ON TABLE public.trace_events IS
|
|
243
|
+
'Append-only canonical trace event and observation records.';
|
|
244
|
+
COMMENT ON TABLE public.trace_source_evidence IS
|
|
245
|
+
'Safe references and summaries for provider/runtime/billing source evidence.';
|
|
246
|
+
COMMENT ON TABLE public.trace_cost_reconciliation_facts IS
|
|
247
|
+
'Append-only facts that reconcile runtime usage, provider invocation evidence, and billing exports.';
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
-- creates: public.billing_export_imports
|
|
2
|
+
-- creates: public.billing_export_line_items
|
|
3
|
+
-- creates-column: public.cost_events.billing_account_id
|
|
4
|
+
-- creates-column: public.cost_events.billing_service_code
|
|
5
|
+
-- creates-column: public.cost_events.billing_operation
|
|
6
|
+
-- creates-column: public.cost_events.billing_period_start
|
|
7
|
+
-- creates-column: public.cost_events.billing_period_end
|
|
8
|
+
-- creates-column: public.cost_events.billing_attribution_level
|
|
9
|
+
|
|
10
|
+
ALTER TABLE "cost_events"
|
|
11
|
+
ADD COLUMN IF NOT EXISTS "billing_account_id" text,
|
|
12
|
+
ADD COLUMN IF NOT EXISTS "billing_service_code" text,
|
|
13
|
+
ADD COLUMN IF NOT EXISTS "billing_operation" text,
|
|
14
|
+
ADD COLUMN IF NOT EXISTS "billing_period_start" timestamp with time zone,
|
|
15
|
+
ADD COLUMN IF NOT EXISTS "billing_period_end" timestamp with time zone,
|
|
16
|
+
ADD COLUMN IF NOT EXISTS "billing_attribution_level" text;
|
|
17
|
+
|
|
18
|
+
CREATE INDEX IF NOT EXISTS "idx_cost_events_billing_period"
|
|
19
|
+
ON "cost_events" ("tenant_id", "billing_service_code", "billing_period_start");
|
|
20
|
+
|
|
21
|
+
CREATE TABLE IF NOT EXISTS "billing_export_imports" (
|
|
22
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
23
|
+
"provider" text DEFAULT 'aws' NOT NULL,
|
|
24
|
+
"source_type" text DEFAULT 'aws_cur' NOT NULL,
|
|
25
|
+
"manifest_bucket" text NOT NULL,
|
|
26
|
+
"manifest_key" text NOT NULL,
|
|
27
|
+
"billing_period_start" timestamp with time zone NOT NULL,
|
|
28
|
+
"billing_period_end" timestamp with time zone NOT NULL,
|
|
29
|
+
"status" text DEFAULT 'imported' NOT NULL,
|
|
30
|
+
"row_count" integer DEFAULT 0 NOT NULL,
|
|
31
|
+
"error_count" integer DEFAULT 0 NOT NULL,
|
|
32
|
+
"error_summary" text,
|
|
33
|
+
"metadata" jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
34
|
+
"imported_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
35
|
+
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
36
|
+
CONSTRAINT "billing_export_imports_status_check"
|
|
37
|
+
CHECK ("status" IN ('imported', 'imported_with_errors', 'failed'))
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "billing_export_imports_manifest_uidx"
|
|
41
|
+
ON "billing_export_imports" ("provider", "manifest_bucket", "manifest_key");
|
|
42
|
+
|
|
43
|
+
CREATE INDEX IF NOT EXISTS "billing_export_imports_period_idx"
|
|
44
|
+
ON "billing_export_imports" (
|
|
45
|
+
"provider",
|
|
46
|
+
"billing_period_start",
|
|
47
|
+
"billing_period_end"
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
CREATE TABLE IF NOT EXISTS "billing_export_line_items" (
|
|
51
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
52
|
+
"import_id" uuid NOT NULL REFERENCES "billing_export_imports"("id") ON DELETE cascade,
|
|
53
|
+
"tenant_id" uuid REFERENCES "tenants"("id") ON DELETE set null,
|
|
54
|
+
"provider" text DEFAULT 'aws' NOT NULL,
|
|
55
|
+
"line_item_id" text NOT NULL,
|
|
56
|
+
"usage_account_id" text,
|
|
57
|
+
"service_code" text NOT NULL,
|
|
58
|
+
"operation" text NOT NULL,
|
|
59
|
+
"line_item_type" text,
|
|
60
|
+
"usage_start" timestamp with time zone NOT NULL,
|
|
61
|
+
"usage_end" timestamp with time zone NOT NULL,
|
|
62
|
+
"billing_period_start" timestamp with time zone NOT NULL,
|
|
63
|
+
"billing_period_end" timestamp with time zone NOT NULL,
|
|
64
|
+
"amount_usd" numeric(12, 6) NOT NULL,
|
|
65
|
+
"usage_amount" numeric(20, 6),
|
|
66
|
+
"currency" text DEFAULT 'USD' NOT NULL,
|
|
67
|
+
"model" text DEFAULT 'unknown' NOT NULL,
|
|
68
|
+
"region" text,
|
|
69
|
+
"resource_id" text,
|
|
70
|
+
"attribution_level" text NOT NULL,
|
|
71
|
+
"attribution_key" text NOT NULL,
|
|
72
|
+
"source_uri" text NOT NULL,
|
|
73
|
+
"raw_row" jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
74
|
+
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
75
|
+
CONSTRAINT "billing_export_line_items_attribution_check"
|
|
76
|
+
CHECK ("attribution_level" IN ('tenant', 'account', 'service_window'))
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "billing_export_line_items_import_line_uidx"
|
|
80
|
+
ON "billing_export_line_items" ("import_id", "line_item_id");
|
|
81
|
+
|
|
82
|
+
CREATE INDEX IF NOT EXISTS "billing_export_line_items_period_idx"
|
|
83
|
+
ON "billing_export_line_items" (
|
|
84
|
+
"provider",
|
|
85
|
+
"billing_period_start",
|
|
86
|
+
"billing_period_end"
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
CREATE INDEX IF NOT EXISTS "billing_export_line_items_tenant_idx"
|
|
90
|
+
ON "billing_export_line_items" (
|
|
91
|
+
"tenant_id",
|
|
92
|
+
"service_code",
|
|
93
|
+
"billing_period_start"
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
CREATE INDEX IF NOT EXISTS "billing_export_line_items_attribution_idx"
|
|
97
|
+
ON "billing_export_line_items" (
|
|
98
|
+
"provider",
|
|
99
|
+
"attribution_level",
|
|
100
|
+
"attribution_key"
|
|
101
|
+
);
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
-- Add Open Engine queue state to native Work Items.
|
|
2
|
+
--
|
|
3
|
+
-- Work Items are the persisted queue substrate for ThinkWork Open Engine:
|
|
4
|
+
-- agents can discover eligible items by queue key, claim them with expiring
|
|
5
|
+
-- leases, and respect human holds independently of generic blocked state.
|
|
6
|
+
--
|
|
7
|
+
-- creates-column: public.work_items.open_engine_enabled
|
|
8
|
+
-- creates-column: public.work_items.open_engine_queue_key
|
|
9
|
+
-- creates-column: public.work_items.open_engine_claimed_by_agent_id
|
|
10
|
+
-- creates-column: public.work_items.open_engine_claimed_at
|
|
11
|
+
-- creates-column: public.work_items.open_engine_claim_expires_at
|
|
12
|
+
-- creates-column: public.work_items.open_engine_human_hold
|
|
13
|
+
-- creates-column: public.work_items.open_engine_human_hold_reason
|
|
14
|
+
-- creates-column: public.work_items.open_engine_scheduled_at
|
|
15
|
+
-- creates-column: public.work_items.open_engine_dependency_state
|
|
16
|
+
-- creates-column: public.work_items.open_engine_routing
|
|
17
|
+
-- creates: public.idx_work_items_open_engine_ready
|
|
18
|
+
-- creates: public.idx_work_items_open_engine_claim
|
|
19
|
+
-- creates-constraint: public.work_items.work_items_open_engine_dependency_state_allowed
|
|
20
|
+
|
|
21
|
+
ALTER TABLE public.work_items
|
|
22
|
+
ADD COLUMN IF NOT EXISTS open_engine_enabled boolean DEFAULT false NOT NULL,
|
|
23
|
+
ADD COLUMN IF NOT EXISTS open_engine_queue_key text,
|
|
24
|
+
ADD COLUMN IF NOT EXISTS open_engine_claimed_by_agent_id uuid REFERENCES public.agents(id) ON DELETE set null,
|
|
25
|
+
ADD COLUMN IF NOT EXISTS open_engine_claimed_at timestamp with time zone,
|
|
26
|
+
ADD COLUMN IF NOT EXISTS open_engine_claim_expires_at timestamp with time zone,
|
|
27
|
+
ADD COLUMN IF NOT EXISTS open_engine_human_hold boolean DEFAULT false NOT NULL,
|
|
28
|
+
ADD COLUMN IF NOT EXISTS open_engine_human_hold_reason text,
|
|
29
|
+
ADD COLUMN IF NOT EXISTS open_engine_scheduled_at timestamp with time zone,
|
|
30
|
+
ADD COLUMN IF NOT EXISTS open_engine_dependency_state text DEFAULT 'ready' NOT NULL,
|
|
31
|
+
ADD COLUMN IF NOT EXISTS open_engine_routing jsonb;
|
|
32
|
+
|
|
33
|
+
DO $$
|
|
34
|
+
BEGIN
|
|
35
|
+
IF NOT EXISTS (
|
|
36
|
+
SELECT 1
|
|
37
|
+
FROM pg_constraint
|
|
38
|
+
WHERE conname = 'work_items_open_engine_dependency_state_allowed'
|
|
39
|
+
AND conrelid = 'public.work_items'::regclass
|
|
40
|
+
) THEN
|
|
41
|
+
ALTER TABLE public.work_items
|
|
42
|
+
ADD CONSTRAINT work_items_open_engine_dependency_state_allowed
|
|
43
|
+
CHECK (open_engine_dependency_state IN ('ready', 'waiting'));
|
|
44
|
+
END IF;
|
|
45
|
+
END $$;
|
|
46
|
+
|
|
47
|
+
CREATE INDEX IF NOT EXISTS idx_work_items_open_engine_ready
|
|
48
|
+
ON public.work_items (
|
|
49
|
+
tenant_id,
|
|
50
|
+
open_engine_queue_key,
|
|
51
|
+
open_engine_scheduled_at,
|
|
52
|
+
open_engine_claim_expires_at,
|
|
53
|
+
updated_at
|
|
54
|
+
)
|
|
55
|
+
WHERE open_engine_enabled = true
|
|
56
|
+
AND archived_at IS NULL
|
|
57
|
+
AND open_engine_human_hold = false
|
|
58
|
+
AND blocked = false
|
|
59
|
+
AND open_engine_dependency_state = 'ready';
|
|
60
|
+
|
|
61
|
+
CREATE INDEX IF NOT EXISTS idx_work_items_open_engine_claim
|
|
62
|
+
ON public.work_items (
|
|
63
|
+
tenant_id,
|
|
64
|
+
open_engine_claimed_by_agent_id,
|
|
65
|
+
open_engine_claim_expires_at
|
|
66
|
+
);
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
-- creates: public.work_item_labels
|
|
2
|
+
-- creates: public.work_item_label_assignments
|
|
3
|
+
-- creates: public.uq_work_item_labels_tenant_slug
|
|
4
|
+
-- creates: public.idx_work_item_labels_tenant_active
|
|
5
|
+
-- creates: public.uq_work_item_label_assignments_pair
|
|
6
|
+
-- creates: public.idx_work_item_label_assignments_label
|
|
7
|
+
-- creates: public.idx_work_item_label_assignments_item
|
|
8
|
+
|
|
9
|
+
CREATE TABLE IF NOT EXISTS "work_item_labels" (
|
|
10
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
11
|
+
"tenant_id" uuid NOT NULL REFERENCES "tenants"("id") ON DELETE cascade,
|
|
12
|
+
"name" text NOT NULL,
|
|
13
|
+
"slug" text NOT NULL,
|
|
14
|
+
"color" text,
|
|
15
|
+
"description" text,
|
|
16
|
+
"created_by_user_id" uuid REFERENCES "users"("id") ON DELETE set null,
|
|
17
|
+
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
18
|
+
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
19
|
+
"archived_at" timestamp with time zone
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "uq_work_item_labels_tenant_slug"
|
|
23
|
+
ON "work_item_labels" ("tenant_id", "slug");
|
|
24
|
+
|
|
25
|
+
CREATE INDEX IF NOT EXISTS "idx_work_item_labels_tenant_active"
|
|
26
|
+
ON "work_item_labels" ("tenant_id", "archived_at", "name");
|
|
27
|
+
|
|
28
|
+
CREATE TABLE IF NOT EXISTS "work_item_label_assignments" (
|
|
29
|
+
"tenant_id" uuid NOT NULL REFERENCES "tenants"("id") ON DELETE cascade,
|
|
30
|
+
"work_item_id" uuid NOT NULL REFERENCES "work_items"("id") ON DELETE cascade,
|
|
31
|
+
"label_id" uuid NOT NULL REFERENCES "work_item_labels"("id") ON DELETE cascade,
|
|
32
|
+
"created_by_user_id" uuid REFERENCES "users"("id") ON DELETE set null,
|
|
33
|
+
"created_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "uq_work_item_label_assignments_pair"
|
|
37
|
+
ON "work_item_label_assignments" ("tenant_id", "work_item_id", "label_id");
|
|
38
|
+
|
|
39
|
+
CREATE INDEX IF NOT EXISTS "idx_work_item_label_assignments_label"
|
|
40
|
+
ON "work_item_label_assignments" ("tenant_id", "label_id", "work_item_id");
|
|
41
|
+
|
|
42
|
+
CREATE INDEX IF NOT EXISTS "idx_work_item_label_assignments_item"
|
|
43
|
+
ON "work_item_label_assignments" ("tenant_id", "work_item_id");
|
|
44
|
+
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
-- Work Item Documents: tenant-scoped S3-backed document metadata.
|
|
2
|
+
-- creates: public.work_item_documents
|
|
3
|
+
-- creates: public.idx_work_item_documents_item_active
|
|
4
|
+
-- creates: public.idx_work_item_documents_tenant_kind
|
|
5
|
+
-- creates-constraint: public.work_item_documents.work_item_documents_kind_allowed
|
|
6
|
+
|
|
7
|
+
CREATE TABLE IF NOT EXISTS work_item_documents (
|
|
8
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
9
|
+
tenant_id uuid NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
|
|
10
|
+
work_item_id uuid NOT NULL REFERENCES work_items(id) ON DELETE CASCADE,
|
|
11
|
+
kind text NOT NULL DEFAULT 'note',
|
|
12
|
+
title text NOT NULL,
|
|
13
|
+
content_type text NOT NULL DEFAULT 'text/markdown',
|
|
14
|
+
s3_key text NOT NULL,
|
|
15
|
+
size_bytes integer NOT NULL DEFAULT 0,
|
|
16
|
+
checksum_sha256 text,
|
|
17
|
+
metadata jsonb,
|
|
18
|
+
created_by_user_id uuid REFERENCES users(id) ON DELETE SET NULL,
|
|
19
|
+
created_by_agent_id uuid REFERENCES agents(id) ON DELETE SET NULL,
|
|
20
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
21
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
22
|
+
archived_at timestamptz,
|
|
23
|
+
CONSTRAINT work_item_documents_kind_allowed
|
|
24
|
+
CHECK (kind IN ('plan','progress','spec','evidence','handoff','note','other'))
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
CREATE INDEX IF NOT EXISTS idx_work_item_documents_item_active
|
|
28
|
+
ON work_item_documents (tenant_id, work_item_id, archived_at, updated_at);
|
|
29
|
+
|
|
30
|
+
CREATE INDEX IF NOT EXISTS idx_work_item_documents_tenant_kind
|
|
31
|
+
ON work_item_documents (tenant_id, kind, archived_at);
|