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,525 @@
|
|
|
1
|
+
-- Backfill first-class Workflow projections for existing Step Functions routines.
|
|
2
|
+
-- Plan: docs/plans/2026-06-20-001-feat-first-class-workflow-control-plane-plan.md (U10).
|
|
3
|
+
--
|
|
4
|
+
-- Apply manually after 0177_workflow_control_plane.sql and after application
|
|
5
|
+
-- code that reads/writes the workflow control plane has been reviewed:
|
|
6
|
+
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0178_workflow_backfill_existing_routines.sql
|
|
7
|
+
--
|
|
8
|
+
-- Drift detection:
|
|
9
|
+
-- bash scripts/db-migrate-manual.sh packages/database-pg/drizzle/0178_workflow_backfill_existing_routines.sql
|
|
10
|
+
--
|
|
11
|
+
-- Pre-flight:
|
|
12
|
+
-- SELECT to_regclass('public.routines') AS routines;
|
|
13
|
+
-- SELECT to_regclass('public.routine_asl_versions') AS routine_asl_versions;
|
|
14
|
+
-- SELECT to_regclass('public.scheduled_jobs') AS scheduled_jobs;
|
|
15
|
+
-- SELECT to_regclass('public.workflows') AS workflows;
|
|
16
|
+
-- SELECT to_regclass('public.workflow_versions') AS workflow_versions;
|
|
17
|
+
-- SELECT to_regclass('public.workflow_triggers') AS workflow_triggers;
|
|
18
|
+
-- SELECT to_regclass('public.workflow_engine_bindings') AS workflow_engine_bindings;
|
|
19
|
+
--
|
|
20
|
+
-- Backfill policy:
|
|
21
|
+
-- - Only routines.engine = 'step_functions' is projected.
|
|
22
|
+
-- - legacy_python routines are skipped; they remain compatibility/internal substrate only.
|
|
23
|
+
-- - Re-running is idempotent through workflows_tenant_slug_uidx,
|
|
24
|
+
-- workflow_versions_workflow_version_uidx, workflow_engine_bindings_step_routine_uidx,
|
|
25
|
+
-- and NOT EXISTS trigger guards.
|
|
26
|
+
--
|
|
27
|
+
-- creates: public.view_workflow_backfill_existing_routines_status
|
|
28
|
+
|
|
29
|
+
DO $$
|
|
30
|
+
BEGIN
|
|
31
|
+
IF to_regclass('public.routines') IS NULL THEN
|
|
32
|
+
RAISE EXCEPTION 'routines not found; apply routine substrate migrations first';
|
|
33
|
+
END IF;
|
|
34
|
+
IF to_regclass('public.routine_asl_versions') IS NULL THEN
|
|
35
|
+
RAISE EXCEPTION 'routine_asl_versions not found; apply Step Functions routine migrations first';
|
|
36
|
+
END IF;
|
|
37
|
+
IF to_regclass('public.scheduled_jobs') IS NULL THEN
|
|
38
|
+
RAISE EXCEPTION 'scheduled_jobs not found; apply trigger/scheduling migrations first';
|
|
39
|
+
END IF;
|
|
40
|
+
IF to_regclass('public.workflows') IS NULL
|
|
41
|
+
OR to_regclass('public.workflow_versions') IS NULL
|
|
42
|
+
OR to_regclass('public.workflow_triggers') IS NULL
|
|
43
|
+
OR to_regclass('public.workflow_engine_bindings') IS NULL
|
|
44
|
+
THEN
|
|
45
|
+
RAISE EXCEPTION 'workflow control-plane tables missing; apply 0177_workflow_control_plane.sql first';
|
|
46
|
+
END IF;
|
|
47
|
+
END $$;
|
|
48
|
+
|
|
49
|
+
WITH eligible_routines AS (
|
|
50
|
+
SELECT
|
|
51
|
+
r.*,
|
|
52
|
+
av.id AS current_asl_version_id,
|
|
53
|
+
av.version_number AS current_asl_version_number,
|
|
54
|
+
CASE
|
|
55
|
+
WHEN EXISTS (
|
|
56
|
+
SELECT 1
|
|
57
|
+
FROM public.scheduled_jobs sj
|
|
58
|
+
WHERE sj.routine_id = r.id
|
|
59
|
+
AND sj.trigger_type IN ('routine_schedule', 'routine_one_time')
|
|
60
|
+
)
|
|
61
|
+
THEN 'schedule'
|
|
62
|
+
ELSE 'manual'
|
|
63
|
+
END AS primary_family,
|
|
64
|
+
CASE
|
|
65
|
+
WHEN r.status IS NOT NULL AND r.status <> 'active' THEN 'disabled'
|
|
66
|
+
WHEN r.state_machine_arn IS NULL OR r.state_machine_alias_arn IS NULL THEN 'blocked_not_ready'
|
|
67
|
+
WHEN av.id IS NULL THEN 'blocked_not_ready'
|
|
68
|
+
ELSE 'ready'
|
|
69
|
+
END AS readiness_state,
|
|
70
|
+
CASE
|
|
71
|
+
WHEN r.status IS NOT NULL AND r.status <> 'active' THEN 'disabled'
|
|
72
|
+
WHEN r.state_machine_arn IS NULL OR r.state_machine_alias_arn IS NULL THEN 'blocked_not_ready'
|
|
73
|
+
WHEN av.id IS NULL THEN 'blocked_not_ready'
|
|
74
|
+
ELSE 'ready'
|
|
75
|
+
END AS binding_status,
|
|
76
|
+
CASE
|
|
77
|
+
WHEN r.status = 'archived' THEN 'archived'
|
|
78
|
+
WHEN av.id IS NULL THEN 'deprecated'
|
|
79
|
+
ELSE 'active'
|
|
80
|
+
END AS lifecycle_status,
|
|
81
|
+
CASE
|
|
82
|
+
WHEN r.status IS NOT NULL AND r.status <> 'active' THEN
|
|
83
|
+
jsonb_build_array(jsonb_build_object('code', 'routine_inactive', 'message', 'Routine is inactive'))
|
|
84
|
+
WHEN r.state_machine_arn IS NULL OR r.state_machine_alias_arn IS NULL THEN
|
|
85
|
+
jsonb_build_array(jsonb_build_object('code', 'missing_state_machine', 'message', 'Routine is missing Step Functions ARNs'))
|
|
86
|
+
WHEN av.id IS NULL THEN
|
|
87
|
+
jsonb_build_array(jsonb_build_object('code', 'missing_current_asl_version', 'message', 'Routine current ASL version was not found'))
|
|
88
|
+
ELSE '[]'::jsonb
|
|
89
|
+
END AS readiness_reasons
|
|
90
|
+
FROM public.routines r
|
|
91
|
+
LEFT JOIN public.routine_asl_versions av
|
|
92
|
+
ON av.routine_id = r.id
|
|
93
|
+
AND av.version_number = r.current_version
|
|
94
|
+
WHERE r.engine = 'step_functions'
|
|
95
|
+
)
|
|
96
|
+
INSERT INTO public.workflows (
|
|
97
|
+
tenant_id,
|
|
98
|
+
name,
|
|
99
|
+
slug,
|
|
100
|
+
description,
|
|
101
|
+
lifecycle_status,
|
|
102
|
+
visibility,
|
|
103
|
+
owner_agent_id,
|
|
104
|
+
primary_trigger_family,
|
|
105
|
+
capability_flags,
|
|
106
|
+
readiness_state,
|
|
107
|
+
readiness_reasons,
|
|
108
|
+
created_at,
|
|
109
|
+
updated_at
|
|
110
|
+
)
|
|
111
|
+
SELECT
|
|
112
|
+
er.tenant_id,
|
|
113
|
+
COALESCE(er.name, 'Untitled routine'),
|
|
114
|
+
'routine-' || er.id::text,
|
|
115
|
+
er.description,
|
|
116
|
+
er.lifecycle_status,
|
|
117
|
+
CASE WHEN er.visibility = 'tenant_shared' THEN 'tenant_shared' ELSE 'agent_private' END,
|
|
118
|
+
COALESCE(er.owning_agent_id, er.agent_id),
|
|
119
|
+
er.primary_family,
|
|
120
|
+
'{"start":true,"monitor":true,"cancel":true,"retry":false,"replay":false,"evidence":true}'::jsonb,
|
|
121
|
+
er.readiness_state,
|
|
122
|
+
er.readiness_reasons,
|
|
123
|
+
COALESCE(er.created_at, now()),
|
|
124
|
+
now()
|
|
125
|
+
FROM eligible_routines er
|
|
126
|
+
ON CONFLICT (tenant_id, slug)
|
|
127
|
+
DO UPDATE SET
|
|
128
|
+
name = EXCLUDED.name,
|
|
129
|
+
description = EXCLUDED.description,
|
|
130
|
+
lifecycle_status = EXCLUDED.lifecycle_status,
|
|
131
|
+
visibility = EXCLUDED.visibility,
|
|
132
|
+
owner_agent_id = EXCLUDED.owner_agent_id,
|
|
133
|
+
primary_trigger_family = EXCLUDED.primary_trigger_family,
|
|
134
|
+
capability_flags = EXCLUDED.capability_flags,
|
|
135
|
+
readiness_state = EXCLUDED.readiness_state,
|
|
136
|
+
readiness_reasons = EXCLUDED.readiness_reasons,
|
|
137
|
+
updated_at = now();
|
|
138
|
+
|
|
139
|
+
WITH routine_workflows AS (
|
|
140
|
+
SELECT
|
|
141
|
+
r.*,
|
|
142
|
+
w.id AS workflow_id
|
|
143
|
+
FROM public.routines r
|
|
144
|
+
JOIN public.workflows w
|
|
145
|
+
ON w.tenant_id = r.tenant_id
|
|
146
|
+
AND w.slug = 'routine-' || r.id::text
|
|
147
|
+
WHERE r.engine = 'step_functions'
|
|
148
|
+
)
|
|
149
|
+
INSERT INTO public.workflow_versions (
|
|
150
|
+
tenant_id,
|
|
151
|
+
workflow_id,
|
|
152
|
+
version_number,
|
|
153
|
+
version_status,
|
|
154
|
+
source_kind,
|
|
155
|
+
source_metadata,
|
|
156
|
+
definition_snapshot,
|
|
157
|
+
capability_snapshot,
|
|
158
|
+
routine_asl_version_id,
|
|
159
|
+
created_by_actor_type,
|
|
160
|
+
created_by_actor_id,
|
|
161
|
+
published_at,
|
|
162
|
+
created_at
|
|
163
|
+
)
|
|
164
|
+
SELECT
|
|
165
|
+
rw.tenant_id,
|
|
166
|
+
rw.workflow_id,
|
|
167
|
+
av.version_number,
|
|
168
|
+
CASE WHEN av.version_number = rw.current_version THEN 'active' ELSE 'superseded' END,
|
|
169
|
+
'step_functions_routine',
|
|
170
|
+
jsonb_build_object(
|
|
171
|
+
'routineId', rw.id,
|
|
172
|
+
'stateMachineArn', av.state_machine_arn,
|
|
173
|
+
'versionArn', av.version_arn,
|
|
174
|
+
'backfillMigration', '0178_workflow_backfill_existing_routines'
|
|
175
|
+
),
|
|
176
|
+
jsonb_build_object(
|
|
177
|
+
'routineId', rw.id,
|
|
178
|
+
'routineName', rw.name,
|
|
179
|
+
'asl', av.asl_json,
|
|
180
|
+
'markdownSummary', av.markdown_summary,
|
|
181
|
+
'stepManifest', av.step_manifest_json
|
|
182
|
+
),
|
|
183
|
+
'{"start":true,"monitor":true,"cancel":true,"retry":false,"replay":false,"evidence":true}'::jsonb,
|
|
184
|
+
av.id,
|
|
185
|
+
av.published_by_actor_type,
|
|
186
|
+
av.published_by_actor_id,
|
|
187
|
+
COALESCE(av.created_at, now()),
|
|
188
|
+
COALESCE(av.created_at, now())
|
|
189
|
+
FROM routine_workflows rw
|
|
190
|
+
JOIN public.routine_asl_versions av
|
|
191
|
+
ON av.routine_id = rw.id
|
|
192
|
+
ON CONFLICT (workflow_id, version_number)
|
|
193
|
+
DO UPDATE SET
|
|
194
|
+
version_status = EXCLUDED.version_status,
|
|
195
|
+
source_kind = EXCLUDED.source_kind,
|
|
196
|
+
source_metadata = EXCLUDED.source_metadata,
|
|
197
|
+
definition_snapshot = EXCLUDED.definition_snapshot,
|
|
198
|
+
capability_snapshot = EXCLUDED.capability_snapshot,
|
|
199
|
+
routine_asl_version_id = EXCLUDED.routine_asl_version_id,
|
|
200
|
+
created_by_actor_type = EXCLUDED.created_by_actor_type,
|
|
201
|
+
created_by_actor_id = EXCLUDED.created_by_actor_id,
|
|
202
|
+
published_at = EXCLUDED.published_at;
|
|
203
|
+
|
|
204
|
+
WITH current_versions AS (
|
|
205
|
+
SELECT
|
|
206
|
+
r.id AS routine_id,
|
|
207
|
+
w.id AS workflow_id,
|
|
208
|
+
wv.id AS workflow_version_id,
|
|
209
|
+
av.version_number
|
|
210
|
+
FROM public.routines r
|
|
211
|
+
JOIN public.workflows w
|
|
212
|
+
ON w.tenant_id = r.tenant_id
|
|
213
|
+
AND w.slug = 'routine-' || r.id::text
|
|
214
|
+
LEFT JOIN public.routine_asl_versions av
|
|
215
|
+
ON av.routine_id = r.id
|
|
216
|
+
AND av.version_number = r.current_version
|
|
217
|
+
LEFT JOIN public.workflow_versions wv
|
|
218
|
+
ON wv.workflow_id = w.id
|
|
219
|
+
AND wv.routine_asl_version_id = av.id
|
|
220
|
+
WHERE r.engine = 'step_functions'
|
|
221
|
+
)
|
|
222
|
+
UPDATE public.workflows w
|
|
223
|
+
SET
|
|
224
|
+
current_version_id = cv.workflow_version_id,
|
|
225
|
+
current_version_number = cv.version_number,
|
|
226
|
+
updated_at = now()
|
|
227
|
+
FROM current_versions cv
|
|
228
|
+
WHERE w.id = cv.workflow_id;
|
|
229
|
+
|
|
230
|
+
WITH routine_workflows AS (
|
|
231
|
+
SELECT
|
|
232
|
+
r.*,
|
|
233
|
+
w.id AS workflow_id,
|
|
234
|
+
w.current_version_id AS workflow_version_id,
|
|
235
|
+
av.id AS current_asl_version_id,
|
|
236
|
+
av.version_number AS current_asl_version_number,
|
|
237
|
+
CASE
|
|
238
|
+
WHEN r.status IS NOT NULL AND r.status <> 'active' THEN 'disabled'
|
|
239
|
+
WHEN r.state_machine_arn IS NULL OR r.state_machine_alias_arn IS NULL THEN 'blocked_not_ready'
|
|
240
|
+
WHEN av.id IS NULL THEN 'blocked_not_ready'
|
|
241
|
+
ELSE 'ready'
|
|
242
|
+
END AS readiness_state,
|
|
243
|
+
CASE
|
|
244
|
+
WHEN r.status IS NOT NULL AND r.status <> 'active' THEN 'disabled'
|
|
245
|
+
WHEN r.state_machine_arn IS NULL OR r.state_machine_alias_arn IS NULL THEN 'blocked_not_ready'
|
|
246
|
+
WHEN av.id IS NULL THEN 'blocked_not_ready'
|
|
247
|
+
ELSE 'ready'
|
|
248
|
+
END AS binding_status,
|
|
249
|
+
CASE
|
|
250
|
+
WHEN r.status IS NOT NULL AND r.status <> 'active' THEN
|
|
251
|
+
jsonb_build_array(jsonb_build_object('code', 'routine_inactive', 'message', 'Routine is inactive'))
|
|
252
|
+
WHEN r.state_machine_arn IS NULL OR r.state_machine_alias_arn IS NULL THEN
|
|
253
|
+
jsonb_build_array(jsonb_build_object('code', 'missing_state_machine', 'message', 'Routine is missing Step Functions ARNs'))
|
|
254
|
+
WHEN av.id IS NULL THEN
|
|
255
|
+
jsonb_build_array(jsonb_build_object('code', 'missing_current_asl_version', 'message', 'Routine current ASL version was not found'))
|
|
256
|
+
ELSE '[]'::jsonb
|
|
257
|
+
END AS readiness_reasons
|
|
258
|
+
FROM public.routines r
|
|
259
|
+
JOIN public.workflows w
|
|
260
|
+
ON w.tenant_id = r.tenant_id
|
|
261
|
+
AND w.slug = 'routine-' || r.id::text
|
|
262
|
+
LEFT JOIN public.routine_asl_versions av
|
|
263
|
+
ON av.routine_id = r.id
|
|
264
|
+
AND av.version_number = r.current_version
|
|
265
|
+
WHERE r.engine = 'step_functions'
|
|
266
|
+
)
|
|
267
|
+
INSERT INTO public.workflow_engine_bindings (
|
|
268
|
+
tenant_id,
|
|
269
|
+
workflow_id,
|
|
270
|
+
workflow_version_id,
|
|
271
|
+
binding_type,
|
|
272
|
+
binding_status,
|
|
273
|
+
routine_id,
|
|
274
|
+
routine_asl_version_id,
|
|
275
|
+
external_workflow_id,
|
|
276
|
+
external_workflow_name,
|
|
277
|
+
external_version_id,
|
|
278
|
+
connection_ref,
|
|
279
|
+
capability_flags,
|
|
280
|
+
readiness_state,
|
|
281
|
+
readiness_reasons,
|
|
282
|
+
created_at,
|
|
283
|
+
updated_at
|
|
284
|
+
)
|
|
285
|
+
SELECT
|
|
286
|
+
rw.tenant_id,
|
|
287
|
+
rw.workflow_id,
|
|
288
|
+
rw.workflow_version_id,
|
|
289
|
+
'step_functions_routine',
|
|
290
|
+
rw.binding_status,
|
|
291
|
+
rw.id,
|
|
292
|
+
rw.current_asl_version_id,
|
|
293
|
+
rw.id::text,
|
|
294
|
+
rw.name,
|
|
295
|
+
CASE WHEN rw.current_asl_version_number IS NOT NULL THEN rw.current_asl_version_number::text ELSE NULL END,
|
|
296
|
+
jsonb_build_object(
|
|
297
|
+
'stateMachineArn', rw.state_machine_arn,
|
|
298
|
+
'aliasArn', rw.state_machine_alias_arn,
|
|
299
|
+
'backfillMigration', '0178_workflow_backfill_existing_routines'
|
|
300
|
+
),
|
|
301
|
+
'{"start":true,"monitor":true,"cancel":true,"retry":false,"replay":false,"evidence":true}'::jsonb,
|
|
302
|
+
rw.readiness_state,
|
|
303
|
+
rw.readiness_reasons,
|
|
304
|
+
now(),
|
|
305
|
+
now()
|
|
306
|
+
FROM routine_workflows rw
|
|
307
|
+
ON CONFLICT (tenant_id, routine_id) WHERE routine_id IS NOT NULL
|
|
308
|
+
DO UPDATE SET
|
|
309
|
+
workflow_id = EXCLUDED.workflow_id,
|
|
310
|
+
workflow_version_id = EXCLUDED.workflow_version_id,
|
|
311
|
+
binding_type = EXCLUDED.binding_type,
|
|
312
|
+
binding_status = EXCLUDED.binding_status,
|
|
313
|
+
routine_asl_version_id = EXCLUDED.routine_asl_version_id,
|
|
314
|
+
external_workflow_id = EXCLUDED.external_workflow_id,
|
|
315
|
+
external_workflow_name = EXCLUDED.external_workflow_name,
|
|
316
|
+
external_version_id = EXCLUDED.external_version_id,
|
|
317
|
+
connection_ref = EXCLUDED.connection_ref,
|
|
318
|
+
capability_flags = EXCLUDED.capability_flags,
|
|
319
|
+
readiness_state = EXCLUDED.readiness_state,
|
|
320
|
+
readiness_reasons = EXCLUDED.readiness_reasons,
|
|
321
|
+
updated_at = now();
|
|
322
|
+
|
|
323
|
+
WITH routine_workflows AS (
|
|
324
|
+
SELECT
|
|
325
|
+
r.*,
|
|
326
|
+
w.id AS workflow_id,
|
|
327
|
+
w.current_version_id AS workflow_version_id,
|
|
328
|
+
w.readiness_state,
|
|
329
|
+
w.readiness_reasons
|
|
330
|
+
FROM public.routines r
|
|
331
|
+
JOIN public.workflows w
|
|
332
|
+
ON w.tenant_id = r.tenant_id
|
|
333
|
+
AND w.slug = 'routine-' || r.id::text
|
|
334
|
+
WHERE r.engine = 'step_functions'
|
|
335
|
+
)
|
|
336
|
+
UPDATE public.workflow_triggers wt
|
|
337
|
+
SET
|
|
338
|
+
workflow_version_id = rw.workflow_version_id,
|
|
339
|
+
enabled = (rw.readiness_state = 'ready'),
|
|
340
|
+
trigger_config = jsonb_build_object('routineId', rw.id),
|
|
341
|
+
actor_contract = jsonb_build_object('agentVisible', rw.visibility = 'tenant_shared'),
|
|
342
|
+
readiness_state = rw.readiness_state,
|
|
343
|
+
readiness_reasons = rw.readiness_reasons,
|
|
344
|
+
updated_at = now()
|
|
345
|
+
FROM routine_workflows rw
|
|
346
|
+
WHERE wt.workflow_id = rw.workflow_id
|
|
347
|
+
AND wt.trigger_family = 'manual'
|
|
348
|
+
AND wt.source_system = 'routine';
|
|
349
|
+
|
|
350
|
+
WITH routine_workflows AS (
|
|
351
|
+
SELECT
|
|
352
|
+
r.*,
|
|
353
|
+
w.id AS workflow_id,
|
|
354
|
+
w.current_version_id AS workflow_version_id,
|
|
355
|
+
w.readiness_state,
|
|
356
|
+
w.readiness_reasons
|
|
357
|
+
FROM public.routines r
|
|
358
|
+
JOIN public.workflows w
|
|
359
|
+
ON w.tenant_id = r.tenant_id
|
|
360
|
+
AND w.slug = 'routine-' || r.id::text
|
|
361
|
+
WHERE r.engine = 'step_functions'
|
|
362
|
+
)
|
|
363
|
+
INSERT INTO public.workflow_triggers (
|
|
364
|
+
tenant_id,
|
|
365
|
+
workflow_id,
|
|
366
|
+
workflow_version_id,
|
|
367
|
+
trigger_family,
|
|
368
|
+
source_system,
|
|
369
|
+
enabled,
|
|
370
|
+
idempotency_required,
|
|
371
|
+
trigger_config,
|
|
372
|
+
actor_contract,
|
|
373
|
+
readiness_state,
|
|
374
|
+
readiness_reasons,
|
|
375
|
+
created_at,
|
|
376
|
+
updated_at
|
|
377
|
+
)
|
|
378
|
+
SELECT
|
|
379
|
+
rw.tenant_id,
|
|
380
|
+
rw.workflow_id,
|
|
381
|
+
rw.workflow_version_id,
|
|
382
|
+
'manual',
|
|
383
|
+
'routine',
|
|
384
|
+
(rw.readiness_state = 'ready'),
|
|
385
|
+
false,
|
|
386
|
+
jsonb_build_object('routineId', rw.id),
|
|
387
|
+
jsonb_build_object('agentVisible', rw.visibility = 'tenant_shared'),
|
|
388
|
+
rw.readiness_state,
|
|
389
|
+
rw.readiness_reasons,
|
|
390
|
+
now(),
|
|
391
|
+
now()
|
|
392
|
+
FROM routine_workflows rw
|
|
393
|
+
WHERE NOT EXISTS (
|
|
394
|
+
SELECT 1
|
|
395
|
+
FROM public.workflow_triggers wt
|
|
396
|
+
WHERE wt.workflow_id = rw.workflow_id
|
|
397
|
+
AND wt.trigger_family = 'manual'
|
|
398
|
+
);
|
|
399
|
+
|
|
400
|
+
WITH scheduled_routine_workflows AS (
|
|
401
|
+
SELECT
|
|
402
|
+
r.*,
|
|
403
|
+
w.id AS workflow_id,
|
|
404
|
+
w.current_version_id AS workflow_version_id,
|
|
405
|
+
w.readiness_state,
|
|
406
|
+
w.readiness_reasons
|
|
407
|
+
FROM public.routines r
|
|
408
|
+
JOIN public.workflows w
|
|
409
|
+
ON w.tenant_id = r.tenant_id
|
|
410
|
+
AND w.slug = 'routine-' || r.id::text
|
|
411
|
+
WHERE r.engine = 'step_functions'
|
|
412
|
+
AND EXISTS (
|
|
413
|
+
SELECT 1
|
|
414
|
+
FROM public.scheduled_jobs sj
|
|
415
|
+
WHERE sj.routine_id = r.id
|
|
416
|
+
AND sj.trigger_type IN ('routine_schedule', 'routine_one_time')
|
|
417
|
+
)
|
|
418
|
+
)
|
|
419
|
+
UPDATE public.workflow_triggers wt
|
|
420
|
+
SET
|
|
421
|
+
workflow_version_id = srw.workflow_version_id,
|
|
422
|
+
enabled = (srw.readiness_state = 'ready'),
|
|
423
|
+
trigger_config = jsonb_build_object('routineId', srw.id),
|
|
424
|
+
actor_contract = jsonb_build_object('agentVisible', srw.visibility = 'tenant_shared'),
|
|
425
|
+
readiness_state = srw.readiness_state,
|
|
426
|
+
readiness_reasons = srw.readiness_reasons,
|
|
427
|
+
updated_at = now()
|
|
428
|
+
FROM scheduled_routine_workflows srw
|
|
429
|
+
WHERE wt.workflow_id = srw.workflow_id
|
|
430
|
+
AND wt.trigger_family = 'schedule'
|
|
431
|
+
AND wt.source_system = 'routine';
|
|
432
|
+
|
|
433
|
+
WITH scheduled_routine_workflows AS (
|
|
434
|
+
SELECT
|
|
435
|
+
r.*,
|
|
436
|
+
w.id AS workflow_id,
|
|
437
|
+
w.current_version_id AS workflow_version_id,
|
|
438
|
+
w.readiness_state,
|
|
439
|
+
w.readiness_reasons
|
|
440
|
+
FROM public.routines r
|
|
441
|
+
JOIN public.workflows w
|
|
442
|
+
ON w.tenant_id = r.tenant_id
|
|
443
|
+
AND w.slug = 'routine-' || r.id::text
|
|
444
|
+
WHERE r.engine = 'step_functions'
|
|
445
|
+
AND EXISTS (
|
|
446
|
+
SELECT 1
|
|
447
|
+
FROM public.scheduled_jobs sj
|
|
448
|
+
WHERE sj.routine_id = r.id
|
|
449
|
+
AND sj.trigger_type IN ('routine_schedule', 'routine_one_time')
|
|
450
|
+
)
|
|
451
|
+
)
|
|
452
|
+
INSERT INTO public.workflow_triggers (
|
|
453
|
+
tenant_id,
|
|
454
|
+
workflow_id,
|
|
455
|
+
workflow_version_id,
|
|
456
|
+
trigger_family,
|
|
457
|
+
source_system,
|
|
458
|
+
enabled,
|
|
459
|
+
idempotency_required,
|
|
460
|
+
trigger_config,
|
|
461
|
+
actor_contract,
|
|
462
|
+
readiness_state,
|
|
463
|
+
readiness_reasons,
|
|
464
|
+
created_at,
|
|
465
|
+
updated_at
|
|
466
|
+
)
|
|
467
|
+
SELECT
|
|
468
|
+
srw.tenant_id,
|
|
469
|
+
srw.workflow_id,
|
|
470
|
+
srw.workflow_version_id,
|
|
471
|
+
'schedule',
|
|
472
|
+
'routine',
|
|
473
|
+
(srw.readiness_state = 'ready'),
|
|
474
|
+
true,
|
|
475
|
+
jsonb_build_object('routineId', srw.id),
|
|
476
|
+
jsonb_build_object('agentVisible', srw.visibility = 'tenant_shared'),
|
|
477
|
+
srw.readiness_state,
|
|
478
|
+
srw.readiness_reasons,
|
|
479
|
+
now(),
|
|
480
|
+
now()
|
|
481
|
+
FROM scheduled_routine_workflows srw
|
|
482
|
+
WHERE NOT EXISTS (
|
|
483
|
+
SELECT 1
|
|
484
|
+
FROM public.workflow_triggers wt
|
|
485
|
+
WHERE wt.workflow_id = srw.workflow_id
|
|
486
|
+
AND wt.trigger_family = 'schedule'
|
|
487
|
+
);
|
|
488
|
+
|
|
489
|
+
CREATE OR REPLACE VIEW public.view_workflow_backfill_existing_routines_status AS
|
|
490
|
+
SELECT
|
|
491
|
+
(SELECT count(*) FROM public.routines WHERE engine = 'step_functions') AS eligible_step_functions_routines,
|
|
492
|
+
(
|
|
493
|
+
SELECT count(*)
|
|
494
|
+
FROM public.routines r
|
|
495
|
+
JOIN public.workflow_engine_bindings b
|
|
496
|
+
ON b.tenant_id = r.tenant_id
|
|
497
|
+
AND b.routine_id = r.id
|
|
498
|
+
AND b.binding_type = 'step_functions_routine'
|
|
499
|
+
WHERE r.engine = 'step_functions'
|
|
500
|
+
) AS backfilled_step_functions_bindings,
|
|
501
|
+
(
|
|
502
|
+
SELECT count(*)
|
|
503
|
+
FROM public.routines r
|
|
504
|
+
LEFT JOIN public.workflow_engine_bindings b
|
|
505
|
+
ON b.tenant_id = r.tenant_id
|
|
506
|
+
AND b.routine_id = r.id
|
|
507
|
+
AND b.binding_type = 'step_functions_routine'
|
|
508
|
+
WHERE r.engine = 'step_functions'
|
|
509
|
+
AND b.id IS NULL
|
|
510
|
+
) AS missing_step_functions_bindings,
|
|
511
|
+
(SELECT count(*) FROM public.routines WHERE engine = 'legacy_python') AS skipped_legacy_python_routines,
|
|
512
|
+
(
|
|
513
|
+
SELECT count(*)
|
|
514
|
+
FROM public.scheduled_jobs sj
|
|
515
|
+
JOIN public.routines r
|
|
516
|
+
ON r.id = sj.routine_id
|
|
517
|
+
LEFT JOIN public.workflow_engine_bindings b
|
|
518
|
+
ON b.tenant_id = r.tenant_id
|
|
519
|
+
AND b.routine_id = r.id
|
|
520
|
+
AND b.binding_type = 'step_functions_routine'
|
|
521
|
+
WHERE r.engine = 'step_functions'
|
|
522
|
+
AND sj.trigger_type IN ('routine_schedule', 'routine_one_time')
|
|
523
|
+
AND sj.enabled = true
|
|
524
|
+
AND (b.workflow_version_id IS NULL OR b.routine_asl_version_id IS NULL)
|
|
525
|
+
) AS enabled_scheduled_routines_without_version_pin;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
-- Tenant-level default token budget for composer-launched Pi goal mode.
|
|
2
|
+
-- Plan: docs/plans/2026-06-18-001-feat-pi-goal-composer-mode-plan.md (U7).
|
|
3
|
+
--
|
|
4
|
+
-- creates-column: public.tenant_settings.goal_default_token_budget
|
|
5
|
+
-- creates-constraint: public.tenant_settings.tenant_settings_goal_default_token_budget_check
|
|
6
|
+
|
|
7
|
+
ALTER TABLE public.tenant_settings
|
|
8
|
+
ADD COLUMN IF NOT EXISTS goal_default_token_budget integer;
|
|
9
|
+
|
|
10
|
+
ALTER TABLE public.tenant_settings
|
|
11
|
+
DROP CONSTRAINT IF EXISTS tenant_settings_goal_default_token_budget_check;
|
|
12
|
+
|
|
13
|
+
ALTER TABLE public.tenant_settings
|
|
14
|
+
ADD CONSTRAINT tenant_settings_goal_default_token_budget_check
|
|
15
|
+
CHECK (
|
|
16
|
+
goal_default_token_budget IS NULL
|
|
17
|
+
OR (
|
|
18
|
+
goal_default_token_budget > 0
|
|
19
|
+
AND goal_default_token_budget <= 2000000
|
|
20
|
+
)
|
|
21
|
+
);
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
-- Skill Creator draft lifecycle schema.
|
|
2
|
+
-- Plan: docs/plans/2026-06-21-003-feat-skill-creator-system-plan.md (U1).
|
|
3
|
+
-- Apply manually (no CI migration runner):
|
|
4
|
+
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0180_skill_drafts.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.threads') AS threads;
|
|
10
|
+
-- SELECT to_regclass('public.messages') AS messages;
|
|
11
|
+
--
|
|
12
|
+
-- creates: public.skill_drafts
|
|
13
|
+
-- creates: public.skill_draft_events
|
|
14
|
+
-- creates: public.idx_skill_drafts_tenant_status_updated
|
|
15
|
+
-- creates: public.idx_skill_drafts_tenant_requester
|
|
16
|
+
-- creates: public.uq_skill_drafts_tenant_id
|
|
17
|
+
-- creates: public.idx_skill_draft_events_draft_created
|
|
18
|
+
-- creates: public.idx_skill_draft_events_tenant_type
|
|
19
|
+
-- creates-constraint: public.skill_drafts.skill_drafts_status_check
|
|
20
|
+
-- creates-constraint: public.skill_drafts.skill_drafts_source_kind_check
|
|
21
|
+
-- creates-constraint: public.skill_draft_events.skill_draft_events_type_check
|
|
22
|
+
|
|
23
|
+
DO $$
|
|
24
|
+
BEGIN
|
|
25
|
+
IF to_regclass('public.tenants') IS NULL THEN
|
|
26
|
+
RAISE EXCEPTION 'tenants not found; apply core tenant migrations first';
|
|
27
|
+
END IF;
|
|
28
|
+
IF to_regclass('public.users') IS NULL THEN
|
|
29
|
+
RAISE EXCEPTION 'users not found; apply core user migrations first';
|
|
30
|
+
END IF;
|
|
31
|
+
IF to_regclass('public.threads') IS NULL THEN
|
|
32
|
+
RAISE EXCEPTION 'threads not found; apply thread migrations first';
|
|
33
|
+
END IF;
|
|
34
|
+
IF to_regclass('public.messages') IS NULL THEN
|
|
35
|
+
RAISE EXCEPTION 'messages not found; apply message migrations first';
|
|
36
|
+
END IF;
|
|
37
|
+
END $$;
|
|
38
|
+
|
|
39
|
+
CREATE TABLE IF NOT EXISTS public.skill_drafts (
|
|
40
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
41
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
42
|
+
requested_by_user_id uuid NOT NULL REFERENCES public.users(id),
|
|
43
|
+
source_thread_id uuid REFERENCES public.threads(id) ON DELETE SET NULL,
|
|
44
|
+
source_message_id uuid REFERENCES public.messages(id) ON DELETE SET NULL,
|
|
45
|
+
inbox_item_id uuid,
|
|
46
|
+
slug text NOT NULL,
|
|
47
|
+
title text NOT NULL,
|
|
48
|
+
display_name text,
|
|
49
|
+
summary text,
|
|
50
|
+
source_kind text NOT NULL DEFAULT 'thread',
|
|
51
|
+
status text NOT NULL DEFAULT 'draft',
|
|
52
|
+
current_content_hash text,
|
|
53
|
+
draft_s3_prefix text NOT NULL,
|
|
54
|
+
failure_message text,
|
|
55
|
+
rejected_by_user_id uuid REFERENCES public.users(id) ON DELETE SET NULL,
|
|
56
|
+
rejected_at timestamp with time zone,
|
|
57
|
+
published_catalog_slug text,
|
|
58
|
+
published_content_hash text,
|
|
59
|
+
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
60
|
+
created_at timestamp with time zone NOT NULL DEFAULT now(),
|
|
61
|
+
updated_at timestamp with time zone NOT NULL DEFAULT now(),
|
|
62
|
+
submitted_at timestamp with time zone,
|
|
63
|
+
CONSTRAINT skill_drafts_status_check CHECK (status IN ('draft','submitted','rejected','failed')),
|
|
64
|
+
CONSTRAINT skill_drafts_source_kind_check CHECK (source_kind IN ('thread','archive','manual','existing_skill'))
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
CREATE INDEX IF NOT EXISTS idx_skill_drafts_tenant_status_updated
|
|
68
|
+
ON public.skill_drafts (tenant_id, status, updated_at);
|
|
69
|
+
CREATE INDEX IF NOT EXISTS idx_skill_drafts_tenant_requester
|
|
70
|
+
ON public.skill_drafts (tenant_id, requested_by_user_id, updated_at);
|
|
71
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_skill_drafts_tenant_id
|
|
72
|
+
ON public.skill_drafts (tenant_id, id);
|
|
73
|
+
|
|
74
|
+
CREATE TABLE IF NOT EXISTS public.skill_draft_events (
|
|
75
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
76
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
77
|
+
draft_id uuid NOT NULL REFERENCES public.skill_drafts(id) ON DELETE CASCADE,
|
|
78
|
+
actor_user_id uuid REFERENCES public.users(id) ON DELETE SET NULL,
|
|
79
|
+
event_type text NOT NULL,
|
|
80
|
+
message text,
|
|
81
|
+
payload jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
82
|
+
created_at timestamp with time zone NOT NULL DEFAULT now(),
|
|
83
|
+
CONSTRAINT skill_draft_events_type_check CHECK (event_type IN ('created','updated','submitted','rejected','failed'))
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
CREATE INDEX IF NOT EXISTS idx_skill_draft_events_draft_created
|
|
87
|
+
ON public.skill_draft_events (draft_id, created_at);
|
|
88
|
+
CREATE INDEX IF NOT EXISTS idx_skill_draft_events_tenant_type
|
|
89
|
+
ON public.skill_draft_events (tenant_id, event_type);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
-- Skill Creator publish lifecycle status.
|
|
2
|
+
-- Plan: docs/plans/2026-06-21-003-feat-skill-creator-system-plan.md (U5).
|
|
3
|
+
-- Apply manually (no CI migration runner):
|
|
4
|
+
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0181_skill_draft_publish_status.sql
|
|
5
|
+
--
|
|
6
|
+
-- creates-constraint: public.skill_drafts.skill_drafts_status_check
|
|
7
|
+
-- creates-constraint: public.skill_draft_events.skill_draft_events_type_check
|
|
8
|
+
|
|
9
|
+
ALTER TABLE public.skill_drafts
|
|
10
|
+
DROP CONSTRAINT IF EXISTS skill_drafts_status_check;
|
|
11
|
+
|
|
12
|
+
ALTER TABLE public.skill_drafts
|
|
13
|
+
ADD CONSTRAINT skill_drafts_status_check
|
|
14
|
+
CHECK (status IN ('draft','submitted','rejected','failed','published'));
|
|
15
|
+
|
|
16
|
+
ALTER TABLE public.skill_draft_events
|
|
17
|
+
DROP CONSTRAINT IF EXISTS skill_draft_events_type_check;
|
|
18
|
+
|
|
19
|
+
ALTER TABLE public.skill_draft_events
|
|
20
|
+
ADD CONSTRAINT skill_draft_events_type_check
|
|
21
|
+
CHECK (event_type IN ('created','updated','submitted','rejected','failed','published'));
|